§
    �Øj�h  ã                  ó¢   — d Z ddlmZ ddlmZ ddlmZ ddlZddl	Z
ddlmZ ddlmZmZ dd	lmZ d$d„Z	 d%d&d„Zd'd „Zd!„ Z G d"„ d#¦  «        ZdS )(aÊ  
TableGridExtractorV2A.py

Combines bbox-based candidate grid extraction (V1A algorithm) with
GridModelV2 anchor confidence scoring.

Post-processing pipeline
------------------------
1. Accept cell bboxes (optional).
2. Resize input image to GridModelV2 input size.
3. Run GridModelV2 ONNX inference.
   Outputs: h_on_logit, h_offset, v_on_logit, v_offset, feature_map
4. For each candidate grid line (derived from bboxes), find the nearest
   anchor in the GridModelV2 anchor grid and read its sigmoid(on_logit)
   as a confidence score.
5. Remove candidate lines whose confidence is below threshold.
6. Optionally run _post_process_grid -> CellInfo with span.
7. Optionally run ConnClassifier on cell features.
é    )Úannotations)ÚPath)ÚOptionalNé   )Ú
get_config)ÚGridPredictionÚCellInfo)Úmake_sessionÚcandidate_boundariesÚsetÚall_cell_bboxesÚlistÚis_horizontal_coordÚboolÚmin_empty_gap_sizeÚfloatÚreturnc           	     óT  — | sg S t          t          | ¦  «        ¦  «        }t          ¦   «         }t          t	          |¦  «        dz
  ¦  «        D �]>}||         }||dz            }||z
  dk     rŒ d}	|D ]â}
|
\  }}}}|rlt          ||z
  ¦  «        |k    pAt          ||z
  ¦  «        |k    p+t          ||z
  ¦  «        |k    pt          ||z
  ¦  «        |k    }|sŒf||k    r
||k     rd}	 nmŒwt          ||z
  ¦  «        |k    pAt          ||z
  ¦  «        |k    p+t          ||z
  ¦  «        |k    pt          ||z
  ¦  «        |k    }|sŒÒ||k    r
||k     rd}	 nŒã|	r5|                     t          t          ||z   dz  ¦  «        ¦  «        ¦  «         �Œ@t          t          |¦  «        ¦  «        S )a$  
    Derive grid lines from candidate boundary coordinates by detecting
    empty strips between cell bboxes.

    Strips where no same-row/column cell strictly enters the interior are
    treated as grid line candidates. The midpoint of each such strip is
    registered as a grid line.
    r   r   TFé   )	Úsortedr   r   ÚrangeÚlenÚabsÚaddÚintÚround)r   r   r   r   Úsorted_boundariesÚfinal_linesÚiÚcoord1Úcoord2Úis_empty_stripÚbboxÚbx1Úby1Úbx2Úby2Úsame_rowÚsame_cols                    úž/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/pymupdf/layout/onnx/TableGridExtractorV2A.pyÚ_find_grid_lines_by_empty_spacer+   &   s  € ð  ð Øˆ	å�tÐ$8Ñ9Ô9Ñ:Ô:ÐÝ‘u”u€Kå•3Ð(Ñ)Ô)¨AÑ-Ñ.Ô.ð #?ñ #?ˆØ" 1Ô%ˆØ" 1 q¡5Ô)ˆØ�F‰?˜QÒÐØàˆØ#ð 	ð 	ˆDØ!%ÑˆC��c˜3Ø"ð å˜˜f™Ñ%Ô%Ð);Ò;ð <Ý˜˜f™Ñ%Ô%Ð);Ò;ð<å˜˜f™Ñ%Ô%Ð);Ò;ð<õ ˜˜f™Ñ%Ô%Ð);Ò;ð	 ð  ð ØØ˜’<�< C¨&¢L LØ%*�NØ�Eøõ ˜˜f™Ñ%Ô%Ð);Ò;ð <Ý˜˜f™Ñ%Ô%Ð);Ò;ð<å˜˜f™Ñ%Ô%Ð);Ò;ð<õ ˜˜f™Ñ%Ô%Ð);Ò;ð	 ð  ð ØØ˜’<�< C¨&¢L LØ%*�NØ�Eøàð 	?Ø�OŠO�C¥ v°¡¸!Ñ&;Ñ <Ô <Ñ=Ô=Ñ>Ô>Ð>ùå•$�{Ñ#Ô#Ñ$Ô$Ð$ó    ç      @ÚbboxesÚorig_hr   Úorig_wÚgrid_margin_pxÚtuplec                óh  — t          ¦   «         }t          ¦   «         }g }| D �]f}|\  }}	}
}t          t          |¦  «        ¦  «        t          t          |	¦  «        ¦  «        }}t          t          |
¦  «        ¦  «        t          t          |¦  «        ¦  «        }}t          d|¦  «        t          d|¦  «        }}t	          ||¦  «        t	          ||¦  «        }}||k    s||k    rŒÇ||z
  }||z
  }|dk    rdnd}|dk    rdnd}||z   }||z   }||z
  }||z
  }|                     ||||g¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         �Œht          ||d|¬¦  «        }t          ||d|¬¦  «        }|||fS )zÔ
    Derive candidate h/v grid lines from cell bboxes (same as V1A).

    Returns
    -------
    (candidate_h_lines, candidate_v_lines, cells_bbox_shrunk)
    All coordinates are in input image pixel space.
    r   é   r   T)r   r   F)r   r   r   ÚmaxÚminÚappendr   r+   )r.   r/   r0   r1   Úall_h_boundariesÚall_v_boundariesÚcells_bbox_shrunkr#   Úx1_fÚy1_fÚx2_fÚy2_fÚx1Úy1Úx2Úy2ÚwÚhÚx_shrinkÚy_shrinkÚsx1Úsy1Úsx2Úsy2Úh_linesÚv_liness                             r*   Ú_extract_candidate_gridrM   b   så  € õ  ™EœEÐÝ™EœEÐØ Ðàð "ñ "ˆØ!%Ñˆˆd�D˜$å•U˜4‘[”[Ñ!Ô!¥3¥u¨T¡{¤{Ñ#3Ô#3ˆBˆÝ•U˜4‘[”[Ñ!Ô!¥3¥u¨T¡{¤{Ñ#3Ô#3ˆBˆÝ�Q˜‘”�S  B™ZœZˆBˆÝ�V˜R‘”¥# f¨b¡/¤/ˆBˆà�Š8ˆ8�r˜R’x�xØà�‰GˆØ�‰GˆØ˜Qš˜�1�1 AˆØ˜Qš˜�1�1 AˆØ�8‰mˆØ�8‰mˆØ�8‰mˆØ�8‰mˆØ× Ò  # s¨C°Ð!5Ñ6Ô6Ð6à×Ò˜SÑ!Ô!Ð!Ø×Ò˜SÑ!Ô!Ð!Ø×Ò˜SÑ!Ô!Ð!Ø×Ò˜SÑ!Ô!Ð!Ñ!å-ØÐ+Ø Ø)ðñ ô €Gõ
 .ØÐ+Ø!Ø)ðñ ô €Gð �GÐ.Ð.Ð.r,   Úcandidate_positions_pxÚ	on_logitsú
np.ndarrayÚ
image_sizec           	     óf  — t          |¦  «        }t          j        dd|t          j        ¬¦  «        }ddt          j        |                     t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }t          j        t          | ¦  «        t          j        ¬¦  «        }t          | ¦  «        D ]m\  }}|dk    rt          |¦  «        t          |¦  «        z  nd}	t          t          j        t          j        ||	z
  ¦  «        ¦  «        ¦  «        }
||
         ||<   Œn|S )a­  
    For each candidate line position, find the nearest GridModelV2 anchor
    and return sigmoid(on_logit) as a confidence score.

    The anchor grid is uniformly spaced over [0, 1] with len(on_logits)
    points, matching the anchor layout used in _decode_anchors.

    Parameters
    ----------
    candidate_positions_px : list of candidate line positions in pixel coords
    on_logits              : raw logit array of shape (max_anchors,) from
                             GridModelV2 inference
    image_size             : image dimension (H for h-lines, W for v-lines)

    Returns
    -------
    np.ndarray of shape (len(candidate_positions_px),) with scores in [0, 1].
    ç        ç      ð?©Údtyper   )r   ÚnpÚlinspaceÚfloat32ÚexpÚastypeÚfloat64ÚzerosÚ	enumerater   r   Úargminr   )rN   rO   rQ   Úmax_nÚanchorsÚon_probÚscoresr   Úpos_pxÚpos_normÚidxs              r*   Ú_score_candidates_by_anchorrg       sÿ   € õ. �)‰nŒn€EÝŒk˜#˜s Eµ´Ð<Ñ<Ô<€GØ�c�BœF I×$4Ò$4µR´ZÑ$@Ô$@Ð#@ÑAÔAÑAÑB×JÒJÍ2Ì:ÑVÔV€GåŒX•cÐ0Ñ1Ô1½¼ÐDÑDÔD€FÝÐ5Ñ6Ô6ð !ð !‰	ˆˆ6Ø8BÀQº¸•5˜‘=”=¥5¨Ñ#4Ô#4Ñ4Ð4ÈCˆÝ•r”y¥¤¨°(Ñ(:Ñ!;Ô!;Ñ<Ô<Ñ=Ô=ˆØ˜C”Lˆˆq‰	ˆ	à€Mr,   c                óÔ  — | j         \  }}}t          |¦  «        }t          |¦  «        }|dk     s|dk     rEt          j        t	          |dz
  d¦  «        t	          |dz
  d¦  «        |ft          j        ¬¦  «        S t          j        ||z                       t          j        ¦  «        d|¦  «        }t          j        ||z                       t          j        ¦  «        d|¦  «        }	t          j        |dz
  |dz
  |ft          j        ¬¦  «        }
t          |dz
  ¦  «        D ]Å}||         }t	          |dz   ||dz            ¦  «        }t          ||¦  «        }||k    rŒ=t          |dz
  ¦  «        D ]u}|	|         }t	          |dz   |	|dz            ¦  «        }t          ||¦  «        }||k    rŒ=| dd…||…||…f         }|j        dk    rŒZ|                     d¬¦  «        |
||f<   ŒvŒÆ|
S )z<Pool feature_map regions defined by detected line positions.r   r   rU   r   N)r   r   )Úaxis)Úshaper   rW   r]   r5   rY   Úclipr[   Úint32r   r6   ÚsizeÚmean)Úfeature_mapÚh_lines_normÚv_lines_normÚCÚHÚWÚNÚMÚysÚxsÚ	cell_featr   r@   rB   Újr?   rA   Úregions                     r*   Ú_extract_cell_featuresr|   È   sè  € àÔ�G€A€qˆ!ÝˆLÑÔ€AÝˆLÑÔ€Aàˆ1‚u€u��A’�ÝŒx�˜Q ™U A™œ­¨A°©E°1©¬°qÐ9ÅÄÐLÑLÔLÐLå	Œ�, Ñ"×*Ò*­2¬8Ñ4Ô4°a¸Ñ	;Ô	;€BÝ	Œ�, Ñ"×*Ò*­2¬8Ñ4Ô4°a¸Ñ	;Ô	;€Bå”˜!˜a™%  Q¡¨Ð*µ"´*Ð=Ñ=Ô=€IÝ�1�q‘5‰\Œ\ð 7ð 7ˆØ�ŒUˆÝ��a‘˜˜A ™EœÑ#Ô#ˆÝ��Q‰ZŒZˆØ�Š7ˆ7ØÝ�q˜1‘u‘”ð 		7ð 		7ˆAØ�A”ˆBÝ�R˜!‘V˜R  A¡œYÑ'Ô'ˆBÝ�R˜‘”ˆBØ�QŠwˆwØØ     B r E¨2¨b¨5 Ô1ˆFØŒ{˜aÒÐØØ$Ÿkšk¨v˜kÑ6Ô6ˆI�a˜�d‰OˆOð		7ð Ðr,   c                  ó�   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d.d/d„Zd0d„Ze	 d1d2d„¦   «         Z	 d3d4d"„Z	 	 	 d5d6d&„Z	ed7d*„¦   «         Z
d8d-„ZdS )9ÚTableGridExtractorV2Aa  
    Hybrid table grid extractor using GridModelV2:
    - Candidate grid lines derived from cell bboxes (rule-based, V1A algorithm).
    - GridModelV2 anchor on_logit used as confidence to filter spurious candidates.
    - Optionally runs ConnClassifier on pooled cell features.
    Nç      Ð?çš™™™™™É?r-   TFú1-RowÚBBoxÚh_on_thresholdr   Úv_on_thresholdÚconn_thresholdr1   Úfilter_empty_linesr   Úsnap_to_bbox_gapsr   ÚNonec                óJ  — |€dg}t          |¦  «        | _        |rt          |¦  «        nd| _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        t          ¦   «         }|                     d¦  «        �4|                     d¦  «        | _        |                     d¦  «        | _        t          t          | j        ¦  «        |¦  «        | _        | j        r;| j                             ¦   «         r"t          t          | j        ¦  «        |¦  «        nd| _        | j                             ¦   «         d         }t'          |j        d         ¦  «        | _        t'          |j        d         ¦  «        | _        t/          j        d	d| j        | j        ft.          j        ¬
¦  «        }| j                             dd|i¦  «        }t'          |d         j        d	         ¦  «        | _        t'          |d         j        d	         ¦  «        | _        dS )aV  
        Parameters
        ----------
        grid_onnx_path    : path to exported GridModelV2 .onnx file
        conn_onnx_path    : path to ConnClassifier .onnx file (optional)
        h_on_threshold    : minimum anchor confidence to keep a candidate h line
        v_on_threshold    : minimum anchor confidence to keep a candidate v line
        conn_threshold    : connectivity classifier probability threshold
        grid_margin_px    : alignment tolerance for candidate grid extraction (px)
        filter_empty_lines: whether to run empty-line filtering in predict()
        snap_to_bbox_gaps : whether to snap h lines to inter-row bbox gaps
        header_type       : passed through to downstream consumers
        merge_type        : passed through to downstream consumers
        providers         : ONNX Runtime execution providers
        NÚCPUExecutionProviderr~   z$TableGridExtractorV2A.v_on_thresholdz$TableGridExtractorV2A.h_on_thresholdr   r   r4   r   rU   Úimage)r   Úgrid_onnx_pathÚconn_onnx_pathrƒ   r„   r…   r1   r†   r‡   Úheader_typeÚ
merge_typer   Úgetr
   ÚstrÚ
_grid_sessÚexistsÚ
_conn_sessÚ
get_inputsr   rj   Ú_input_hÚ_input_wrW   r]   rY   ÚrunÚ_max_hÚ_max_v)ÚselfrŒ   r�   rƒ   r„   r…   r1   r†   r‡   rŽ   r�   Ú	providersÚglobal_configÚinpÚdummyÚoutputss                   r*   Ú__init__zTableGridExtractorV2A.__init__õ   sì  € ð: ÐØ/Ð0ˆIå"& ~Ñ"6Ô"6ˆÔØ:HÐ"R¥$ ~Ñ"6Ô"6Ð"6ÈdˆÔØ"0ˆÔØ"0ˆÔØ"0ˆÔØ"0ˆÔØ"4ˆÔØ"3ˆÔØ"-ˆÔØ",ˆŒå"™œˆØ×ÒÐ4Ñ5Ô5ÐAØ"/×"3Ò"3Ð4ZÑ"[Ô"[ˆDÔØ"/×"3Ò"3Ð4ZÑ"[Ô"[ˆDÔå&¥s¨4Ô+>Ñ'?Ô'?ÀÑKÔKˆŒð Ô"ðNØ'+Ô':×'AÒ'AÑ'CÔ'CðN�L�˜TÔ0Ñ1Ô1°9Ñ=Ô=Ð=ØIMð 	Œð
 Œo×(Ò(Ñ*Ô*¨1Ô-ˆÝ˜CœI aœLÑ)Ô)ˆŒÝ˜CœI aœLÑ)Ô)ˆŒõ ”(˜A˜q $¤-°´Ð?ÅrÄzÐRÑRÔRˆØ”/×%Ò% d¨W°eÐ,<Ñ=Ô=ˆÝ˜' !œ*Ô*¨1Ô-Ñ.Ô.ˆŒÝ˜' !œ*Ô*¨1Ô-Ñ.Ô.ˆŒˆˆr,   Ú	image_bgrrP   r2   c                óÔ  — ddl }|                     || j        | j        f¦  «        }|dd…dd…ddd…f                              t
          j        ¦  «        dz  }|                     ddd¦  «        t
          j                 }| j	         
                    dd|i¦  «        }|d         d         }|d         d         }|d         d         }	|d         d         }
|d	         d         }|||	|
|fS )
zÿ
        Run GridModelV2 inference and return raw logits and feature map.

        Returns
        -------
        (h_on_logit, h_offset, v_on_logit, v_offset, feature_map)
        All arrays are in model output space (not resized to image dims).
        r   Néÿÿÿÿg     ào@r   r   r‹   r4   é   )Úcv2Úresizer—   r–   r[   rW   rY   Ú	transposeÚnewaxisr’   r˜   )r›   r¢   r¦   Úimg_resizedÚimg_rgbrž   r    Ú
h_on_logitÚh_offsetÚ
v_on_logitÚv_offsetro   s               r*   Ú_run_inferencez$TableGridExtractorV2A._run_inference9  sç   € ð 	ˆ
ˆ
ˆ
à—j’j ¨T¬]¸D¼MÐ,JÑKÔKˆØ! ! ! ! Q Q Q¨¨¨"¨ *Ô-×4Ò4µR´ZÑ@Ô@À5ÑHˆØ×'Ò'¨¨1¨aÑ0Ô0µ´Ô<ˆà”o×)Ò)¨$°¸#°Ñ?Ô?ˆØ˜a”j ”mˆ
Ø˜a”j ”mˆØ˜a”j ”mˆ
Ø˜a”j ”mˆØ˜a”j ”mˆà˜8 Z°¸;ÐFÐFr,   rS   rK   r   Úbboxes_cropÚsnap_thresholdc                ó.  — t          |¦  «        dk    st          | ¦  «        dk    r| S t          j        |dd…df         ¦  «        }t          j        |dd…df         ¦  «        }g }|D ]O}|||k             }t          |¦  «        dk    r.|                     |t	          |d         ¦  «        z   dz  ¦  «         ŒP|s| S t          j        t          t          d„ |D ¦   «         ¦  «        ¦  «        t          j        ¬¦  «        }t          ¦   «         }	g }
| D �] }t          j	        |dd…df         |k     ||dd…df         k     z  ¦  «        }|r³t          j
        ||z
  ¦  «        }t          j        |¦  «        }d}|D ]k}t	          ||         ¦  «        }t	          ||         ¦  «        }||	v rŒ1|d	k    s||k    r.|
                     |¦  «         |	                     |¦  «         d
} nŒl|s|
                     |¦  «         Œë|
                     |¦  «         �Œ|
S )z=Snap h_lines crossing a bbox to nearest inter-row gap center.r   Nr4   r   ç       @c              3  ó6   K  — | ]}t          |d ¦  «        V — ŒdS )r¥   N)r   )Ú.0Úgs     r*   ú	<genexpr>zATableGridExtractorV2A._snap_lines_to_bbox_gaps.<locals>.<genexpr>j  s*   è è € Ð'GÐ'G¸­¨a°©¬Ð'GÐ'GÐ'GÐ'GÐ'GÐ'Gr,   rU   FrS   T)r   rW   Úsortr7   r   Úarrayr   r   rY   Úanyr   Úargsortr   )rK   r±   r²   ÚbottomsÚtopsÚ	gap_linesÚbotÚ
candidatesÚgap_arrÚ	used_gapsÚresultÚyÚcrossesÚdistsÚorderÚsnappedrf   ÚnearestÚdists                      r*   Ú_snap_lines_to_bbox_gapsz.TableGridExtractorV2A._snap_lines_to_bbox_gapsU  sK  € õ ˆ{ÑÔ˜qÒ Ð ¥C¨¡L¤L°AÒ$5Ð$5ØˆNå”7˜; q q q¨! tÔ,Ñ-Ô-ˆÝ”7˜; q q q¨! tÔ,Ñ-Ô-ˆØˆ	Øð 	Eð 	EˆCØ˜d SšjÔ)ˆJÝ�:‰Œ Ò"Ð"Ø× Ò  #­¨j¸¬mÑ(<Ô(<Ñ"<ÀÑ!CÑDÔDÐDøàð 	ØˆNå”H�V¥CÐ'GÐ'G¸YÐ'GÑ'GÔ'GÑ$GÔ$GÑHÔHÕPRÔPZÐ[Ñ[Ô[ˆÝ™œˆ	ØˆØð 	!ñ 	!ˆAÝ”f˜k¨!¨!¨!¨Q¨$Ô/°!Ò3¸¸KÈÈÈÈ1ÈÔ<MÒ8MÑNÑOÔOˆGØð !Ýœ˜w¨™{Ñ+Ô+�Ýœ
 5Ñ)Ô)�Ø�Ø ð 	ð 	�CÝ# G¨C¤LÑ1Ô1�GÝ# E¨#¤JÑ/Ô/�DØ )Ð+Ð+Ø Ø%¨Ò,Ð,°¸Ò0FÐ0FØŸš gÑ.Ô.Ð.Ø!Ÿš gÑ.Ô.Ð.Ø"&˜Ø˜ð	 1Gð
 ð %Ø—M’M !Ñ$Ô$Ð$øà—’˜aÑ Ô Ð Ñ Øˆr,   r.   úlist | Noner   c                ó„	  ‡ ‡‡— |�t          |¦  «        dk    �rH|j        dd…         \  ŠŠ‰                      |¦  «        \  }}}}}ddt          j        |                     t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }ddt          j        |                     t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }t          g g ||t          j	        g t          j        ¬¦  «        t          j	        g t          j        ¬¦  «        t          j	        g t          j
        ¬¦  «        d¬¦  «        S |j        dd…         \  ŠŠ‰                      |¦  «        \  }}}}	}
ddt          j        |                     t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }ddt          j        |                     t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }t          |‰‰‰ j        ¦  «        \  }}}t          ||t          ‰¦  «        ¦  «        }t          ||t          ‰¦  «        ¦  «        }ˆ fd„t          ||¦  «        D ¦   «         }ˆ fd„t          ||¦  «        D ¦   «         }t          j	        ˆfd	„|D ¦   «         t          j        ¬¦  «        }t          j	        ˆfd
„|D ¦   «         t          j        ¬¦  «        }t          j        t          |¦  «        t          j
        ¬¦  «        }d}‰ j        ��:t          |¦  «        dk    �r&t          |¦  «        dk    �rt%          |
||¦  «        }t          j        |¦  «                             ¦   «         rÛ|                     ddd¦  «        t          j                                      t          j        ¦  «        }‰ j                             dd|i¦  «        }|d         d         }ddt          j        |                     t          j        ¦  «         ¦  «        z   z  }|                     ddd¦  «                             t          j        ¦  «        }t          t1          |¦  «        t1          |¦  «        ||||||¬¦  «        S )až  
        Derive candidate grid lines from bboxes and filter by GridModelV2
        anchor confidence.

        Parameters
        ----------
        image_bgr : cropped table BGR image (any size)
        bboxes    : list of [x1, y1, x2, y2] cell bbox pixel coordinates
                    in crop space. Must not be None.

        Returns
        -------
        GridPrediction with filtered h/v lines.
        h_on_prob / v_on_prob carry the full sigmoid(on_logit) anchor arrays
        (model output space) for downstream consumers that need them.
        connectivity is populated when ConnClassifier is available and at
        least a 2x2 grid is detected.
        Nr   r   rT   rU   ©rK   rL   Ú	h_on_probÚ	v_on_probrp   rq   Úh_clsÚconnectivityc                ó0   •— g | ]\  }}|‰j         k    ¯|‘ŒS © )rƒ   )r¶   rÅ   Úsr›   s      €r*   ú
<listcomp>z6TableGridExtractorV2A.predict_grid.<locals>.<listcomp>¾  ó*   ø€ ÐSÐSÐS™˜˜A¸!¸tÔ?RÒ:RÐ:R�1Ð:RÐ:RÐ:Rr,   c                ó0   •— g | ]\  }}|‰j         k    ¯|‘ŒS rÕ   )r„   )r¶   ÚxrÖ   r›   s      €r*   r×   z6TableGridExtractorV2A.predict_grid.<locals>.<listcomp>¿  rØ   r,   c                ó4   •— g | ]}|t          ‰¦  «        z  ‘ŒS rÕ   ©r   ©r¶   rÅ   r/   s     €r*   r×   z6TableGridExtractorV2A.predict_grid.<locals>.<listcomp>Á  ó$   ø€ Ð DÐ DÐ D°q ¥U¨6¡]¤]Ñ!2Ð DÐ DÐ Dr,   c                ó4   •— g | ]}|t          ‰¦  «        z  ‘ŒS rÕ   rÜ   ©r¶   rÚ   r0   s     €r*   r×   z6TableGridExtractorV2A.predict_grid.<locals>.<listcomp>Â  rÞ   r,   r   Úcell_features)r   rj   r°   rW   rZ   r[   r\   rY   r   rº   rl   rM   r1   rg   r   ÚzipÚonesr”   r|   ÚisfiniteÚallr¨   r©   r˜   r   )r›   r¢   r.   r¬   Ú_r®   rÐ   rÑ   r­   r¯   ro   Úcand_hÚcand_vÚh_scoresÚv_scoresrK   rL   rp   rq   rÒ   rÓ   ry   Úcell_inpÚconn_outÚconn_logitsÚ	conn_probr/   r0   s   `                         @@r*   Úpredict_gridz"TableGridExtractorV2A.predict_grid‡  s6  øøø€ ð. ˆ>�S ™[œ[¨AÒ-Ñ-Ø&œ_¨R¨a¨RÔ0‰NˆF�FØ.2×.AÒ.AÀ)Ñ.LÔ.LÑ+ˆJ˜˜: q¨!Ø ¥b¤f¨j×.?Ò.?ÅÄ
Ñ.KÔ.KÐ-KÑ&LÔ&LÑ LÑM×UÒUÕVXÔV`ÑaÔaˆIØ ¥b¤f¨j×.?Ò.?ÅÄ
Ñ.KÔ.KÐ-KÑ&LÔ&LÑ LÑM×UÒUÕVXÔV`ÑaÔaˆIÝ!ØØØ#Ø#ÝœX bµ´
Ð;Ñ;Ô;ÝœX bµ´
Ð;Ñ;Ô;Ý”h˜r­¬Ð2Ñ2Ô2Ø!ð	ñ 	ô 	ð 	ð #œ¨¨!¨Ô,‰ˆ�àBF×BUÒBUÐV_ÑB`ÔB`Ñ?ˆ
�H˜j¨(°KØ˜C¥"¤&¨*×*;Ò*;½B¼JÑ*GÔ*GÐ)GÑ"HÔ"HÑHÑI×QÒQÕRTÔR\Ñ]Ô]ˆ	Ø˜C¥"¤&¨*×*;Ò*;½B¼JÑ*GÔ*GÐ)GÑ"HÔ"HÑHÑI×QÒQÕRTÔR\Ñ]Ô]ˆ	õ 4Ø�F˜F DÔ$7ñ
ô 
Ñˆ�˜õ
 /¨v°zÅ5ÈÁ=Ä=ÑQÔQˆÝ.¨v°zÅ5ÈÁ=Ä=ÑQÔQˆð TÐSÐSÐS¥ V¨XÑ!6Ô!6ÐSÑSÔSˆØSÐSÐSÐS¥ V¨XÑ!6Ô!6ÐSÑSÔSˆå”xÐ DÐ DÐ DÐ D¸GÐ DÑ DÔ DÍBÌJÐWÑWÔWˆÝ”xÐ DÐ DÐ DÐ D¸GÐ DÑ DÔ DÍBÌJÐWÑWÔWˆÝ”w�s 7™|œ|µ2´8Ð<Ñ<Ô<ˆð ˆØŒOÑ'Ý˜Ñ%Ô%¨Ò*Ñ*Ý˜Ñ%Ô%¨Ò*Ñ*Ý.¨{¸LÈ,ÑWÔWˆIÝŒ{˜9Ñ%Ô%×)Ò)Ñ+Ô+ð OØ(×2Ò2°1°a¸Ñ;Ô;½B¼JÔG×NÒNÍrÌzÑZÔZ�Ø#œ×2Ò2°4¸/È8Ð9TÑUÔU�Ø'¨œ{¨1œ~�Ø" c­B¬F°K×4FÒ4FÅrÄzÑ4RÔ4RÐ3RÑ,SÔ,SÑ&SÑT�	Ø(×2Ò2°1°a¸Ñ;Ô;×BÒBÅ2Ä:ÑNÔN�åÝ˜7‘O”OÝ˜7‘O”OØØØ%Ø%ØØ%ð	
ñ 	
ô 	
ð 		
r,   çš™™™™™¹?ÚtextsÚspan_thresholdc           
     óè
  ‡‡‡‡‡ ‡!— |�t          |¦  «        dk    r|                      ||¦  «        g fS |                      ||¦  «        }t          |j        d         ¦  «        Št          |j        d         ¦  «        Št	          j        |t          j        ¬¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          |j        ¦  «        }	t	          j	        dd|	t          j        ¬¦  «        }
t          |j        d         ¦  «        Št          |j        d         ¦  «        Š g Št          |j        t          |j        ¦  «        r|j                             ¦   «         ndgt          |j        ¦  «        z  ¦  «        D ]r\  }}|‰z  }t          t	          j        t	          j        |
|z
  ¦  «        ¦  «        ¦  «        }t          |j        |         ¦  «        }‰                     |||f¦  «         Œst          |j        ¦  «        }t	          j	        dd|t          j        ¬¦  «        }g Š!|j        D ]o}|‰ z  }t          t	          j        t	          j        ||z
  ¦  «        ¦  «        ¦  «        }t          |j        |         ¦  «        }‰!                     ||df¦  «         Œp| j        �rB|                      ‰|‰¦  «        Š|                      ‰!|‰¦  «        Š!‰rBt-          ˆfd	„|D ¦   «         ¦  «        s'‰dd…         Š‰rt-          ˆfd	„|D ¦   «         ¦  «        ¯'‰!rBt-          ˆ!fd
„|D ¦   «         ¦  «        s'‰!dd…         Š!‰!rt-          ˆ!fd
„|D ¦   «         ¦  «        ¯'‰rDt-          ˆˆfd„|D ¦   «         ¦  «        s(‰dd…         Š‰rt-          ˆˆfd„|D ¦   «         ¦  «        ¯(‰!rDt-          ˆˆ!fd„|D ¦   «         ¦  «        s(‰!dd…         Š!‰!rt-          ˆˆ!fd„|D ¦   «         ¦  «        ¯(d„ ‰D ¦   «         }d„ ‰!D ¦   «         }t	          j        d„ ‰D ¦   «         t          j        ¬¦  «        }| j        r<|                      ||¦  «        }d„ t          |‰¦  «        D ¦   «         Šd„ ‰D ¦   «         }t	          j        ˆfd„|D ¦   «         t          j        ¬¦  «        }t	          j        ˆ fd„|D ¦   «         t          j        ¬¦  «        }t7          t          |¦  «        t          |¦  «        |j        |j        ||||j        ¬¦  «        }|                      |||¬¦  «        }|�9|D ]6}d|j        cxk    rt          |¦  «        k     rn Œ$||j                 |_        Œ7||fS )ad  
        Predict grid boundaries and optionally assign bboxes to grid cells.

        Parameters
        ----------
        image_bgr      : cropped table BGR image (any size)
        bboxes         : list of [x1, y1, x2, y2] in crop space.
                         If None or empty, only grid prediction is returned.
        texts          : list of text strings aligned with bboxes.
        span_threshold : fractional overlap to trigger span expansion (default 0.1)

        Returns
        -------
        (GridPrediction, list[CellInfo])
        CellInfo list is empty when bboxes is None or empty.
        Nr   r   rU   c              3  ór   K  — | ]2}t          |d          ¦  «        t          |d         ¦  «        z   dz  V — Œ3dS )r   r   r´   NrÜ   ©r¶   Úbs     r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>  ó@   è è € ÐOÐO¸q�%  !¤™+œ+­¨a°¬d©¬Ñ3°sÑ:ÐOÐOÐOÐOÐOÐOr,   c              3  ór   K  — | ]2}t          |d          ¦  «        t          |d         ¦  «        z   dz  V — Œ3dS )r   r4   r´   NrÜ   rõ   s     r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>  r÷   r,   rS   rT   c              3  óP   •K  — | ] }d |cxk    o‰d         d         k    nc V — Œ!dS ©rS   r   NrÕ   )r¶   ÚcÚh_tupless     €r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>#  óG   øè è € Ð&SÐ&SÀa s¨aÐ'AÐ'AÒ'AÐ'A°8¸A´;¸q´>Ò'AÐ'AÐ'AÐ'AÐ&SÐ&SÐ&SÐ&SÐ&SÐ&Sr,   c              3  óP   •K  — | ] }d |cxk    o‰d         d         k    nc V — Œ!dS rú   rÕ   )r¶   rû   Úv_tupless     €r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>%  rý   r,   c              3  óP   •K  — | ] }‰d          d         |cxk    o‰k    nc V — Œ!dS ©r¤   r   NrÕ   )r¶   rû   Úcrop_hrü   s     €€r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>(  óG   øè è € Ð&WÐ&WÈ! x°¤|°A¤¸!Ð'EÐ'EÒ'EÐ'E¸vÒ'EÐ'EÐ'EÐ'EÐ&WÐ&WÐ&WÐ&WÐ&WÐ&Wr,   r¤   c              3  óP   •K  — | ] }‰d          d         |cxk    o‰k    nc V — Œ!dS r  rÕ   )r¶   rû   Úcrop_wrÿ   s     €€r*   r¸   z0TableGridExtractorV2A.predict.<locals>.<genexpr>*  r  r,   c                ó   — g | ]\  }}}|‘Œ	S rÕ   rÕ   ©r¶   rÅ   ræ   s      r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>-  ó   € Ð4Ð4Ð4¡  1 a˜!Ð4Ð4Ð4r,   c                ó   — g | ]\  }}}|‘Œ	S rÕ   rÕ   )r¶   rÚ   ræ   s      r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>.  r  r,   c                ó   — g | ]\  }}}|‘Œ	S rÕ   rÕ   )r¶   ræ   rû   s      r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>/  s   € Ð"=Ð"=Ð"=©¨¨A¨q 1Ð"=Ð"=Ð"=r,   c                ó&   — g | ]\  }\  }}}|||f‘ŒS rÕ   rÕ   )r¶   Úsyræ   Úscrû   s        r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>3  s(   € ÐSÐSÐS©.¨"©j¨q°"°a˜2˜r 1˜+ÐSÐSÐSr,   c                ó   — g | ]\  }}}|‘Œ	S rÕ   rÕ   r  s      r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>4  r  r,   c                ó   •— g | ]}|‰z  ‘ŒS rÕ   rÕ   rÝ   s     €r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>6  ó   ø€ Ð#CÐ#CÐ#C°1 A¨¡JÐ#CÐ#CÐ#Cr,   c                ó   •— g | ]}|‰z  ‘ŒS rÕ   rÕ   rà   s     €r*   r×   z1TableGridExtractorV2A.predict.<locals>.<listcomp>7  r  r,   rÏ   )Úbboxes_pageÚgridrò   ) r   rï   r   rj   rW   ÚasarrayrY   r   rÐ   rX   râ   rK   rÒ   Útolistr   r_   r   r7   rÑ   rL   r†   Ú_filter_empty_linesr»   rº   rl   r‡   rÌ   r   rÓ   Ú_post_process_gridÚbbox_idxÚtext)"r›   r¢   r.   rñ   rò   r  Ú
bboxes_arrÚcx_listÚcy_listÚmax_hra   rÅ   rû   Úy_normrf   ÚscoreÚmax_vÚ	anchors_vrÚ   Úx_normÚ
filtered_hÚ
filtered_vÚfiltered_h_clsrÉ   Úfiltered_h_normÚfiltered_v_normÚcellsÚcellr  r  rü   r/   r0   rÿ   s"                               @@@@@@r*   ÚpredictzTableGridExtractorV2A.predictá  s  øøøøøø€ ð. ˆ>�S ™[œ[¨AÒ-Ð-Ø×$Ò$ Y°Ñ7Ô7¸Ð;Ð;à× Ò  ¨FÑ3Ô3ˆå�y” qÔ)Ñ*Ô*ˆÝ�y” qÔ)Ñ*Ô*ˆå”Z ­b¬jÐ9Ñ9Ô9ˆ
åÐOÐOÀJÐOÑOÔOÑOÔOˆÝÐOÐOÀJÐOÑOÔOÑOÔOˆõ �t”~Ñ&Ô&ˆÝ”;˜s C¨µb´jÐAÑAÔAˆÝ˜œ¨Ô+Ñ,Ô,ˆÝ˜œ¨Ô+Ñ,Ô,ˆàˆÝØŒLÝ#& t¤z¡?¤?ÐOˆDŒJ×ÒÑÔÐ¸¸½cÀ$Ä,Ñ>OÔ>OÑ8Oñ
ô 
ð 	+ð 	+‰DˆAˆqð ˜‘ZˆFÝ�œ¥2¤6¨'°FÑ*:Ñ#;Ô#;Ñ<Ô<Ñ=Ô=ˆCÝ˜4œ>¨#Ô.Ñ/Ô/ˆEØ�OŠO˜Q  q˜MÑ*Ô*Ð*Ð*å˜œÑ'Ô'ˆÝ”K  S¨%µr´zÐBÑBÔBˆ	àˆØ”ð 	+ð 	+ˆAØ˜‘ZˆFÝ�œ¥2¤6¨)°fÑ*<Ñ#=Ô#=Ñ>Ô>Ñ?Ô?ˆCÝ˜4œ>¨#Ô.Ñ/Ô/ˆEØ�OŠO˜Q  q˜MÑ*Ô*Ð*Ð*àÔ"ñ 	)Ø×/Ò/°¸'À6ÑJÔJˆHØ×/Ò/°¸'À6ÑJÔJˆHàð (¥3Ð&SÐ&SÐ&SÐ&SÈ7Ð&SÑ&SÔ&SÑ#SÔ#Sð (Ø# A B Bœ<�ð ð (¥3Ð&SÐ&SÐ&SÐ&SÈ7Ð&SÑ&SÔ&SÑ#SÔ#Sð (àð (¥3Ð&SÐ&SÐ&SÐ&SÈ7Ð&SÑ&SÔ&SÑ#SÔ#Sð (Ø# A B Bœ<�ð ð (¥3Ð&SÐ&SÐ&SÐ&SÈ7Ð&SÑ&SÔ&SÑ#SÔ#Sð (ð ð )¥3Ð&WÐ&WÐ&WÐ&WÐ&WÈwÐ&WÑ&WÔ&WÑ#WÔ#Wð )Ø# C R Cœ=�ð ð )¥3Ð&WÐ&WÐ&WÐ&WÐ&WÈwÐ&WÑ&WÔ&WÑ#WÔ#Wð )àð )¥3Ð&WÐ&WÐ&WÐ&WÐ&WÈwÐ&WÑ&WÔ&WÑ#WÔ#Wð )Ø# C R Cœ=�ð ð )¥3Ð&WÐ&WÐ&WÐ&WÐ&WÈwÐ&WÑ&WÔ&WÑ#WÔ#Wð )ð 5Ð4¨8Ð4Ñ4Ô4ˆ
Ø4Ð4¨8Ð4Ñ4Ô4ˆ
ÝœÐ"=Ð"=°HÐ"=Ñ"=Ô"=ÅRÄXÐNÑNÔNˆàÔ!ð 	5Ø×6Ò6°zÀ:ÑNÔNˆGØSÐS½CÀÈÑ<RÔ<RÐSÑSÔSˆHØ4Ð4¨8Ð4Ñ4Ô4ˆJåœ(Ð#CÐ#CÐ#CÐ#C¸
Ð#CÑ#CÔ#CÍ2Ì:ÐVÑVÔVˆÝœ(Ð#CÐ#CÐ#CÐ#C¸
Ð#CÑ#CÔ#CÍ2Ì:ÐVÑVÔVˆåÝ˜:Ñ&Ô&Ý˜:Ñ&Ô&Ø”nØ”nØ(Ø(Ø ØÔ*ð	
ñ 	
ô 	
ˆð ×'Ò'Ø"ØØ)ð (ñ 
ô 
ˆð ÐØð 5ð 5�Ø˜œÐ2Ð2Ò2Ð2­¨E©
¬
Ò2Ð2Ð2Ð2Ð2Ø % d¤mÔ 4�D”Iøà�Uˆ{Ðr,   ÚlinesÚcentersrQ   c                ó‚  ‡‡— | s| S t          | ¦  «        }d}|r¥d}t          |¦  «        dk     rn�|d         g}t          dt          |¦  «        ¦  «        D ]d}|d         \  Š}}||         \  Š}	}
t          ˆˆfd„|D ¦   «         ¦  «        }|s|	|k    r‰|	|
f|d<   d}ŒI|                     ||         ¦  «         Œe|}|°¥|S )zÎ
        Merge adjacent (y, score, cls) line tuples that have no bbox center
        between them. When merging, the tuple with the higher score is kept.
        Convergence loop runs until stable.
        TFr   r   r   r¤   c              3  ó8   •K  — | ]}‰|cxk    o‰k    nc V — Œd S ©NrÕ   )r¶   rû   Úhi_yÚlo_ys     €€r*   r¸   z<TableGridExtractorV2A._filter_empty_lines.<locals>.<genexpr>n  s?   øè è € Ð DÐ D°q ¨Ð!2Ð!2Ò!2Ð!2¨dÒ!2Ð!2Ð!2Ð!2Ð DÐ DÐ DÐ DÐ DÐ Dr,   )r   r   r   r»   r7   )r+  r,  rQ   ÚcurrentÚchangedrÄ   r   Úlo_scoreÚlo_clsÚhi_scoreÚhi_clsÚ
has_centerr0  r1  s               @@r*   r  z)TableGridExtractorV2A._filter_empty_linesU  s  øø€ ð ð 	ØˆLå˜‘-”-ˆØˆàð 	ØˆGÝ�7‰|Œ|˜aÒÐØØ˜a”j�\ˆFÝ˜1�c '™lœlÑ+Ô+ð 	.ð 	.�Ø)/°¬Ñ&��h Ø)0°¬Ñ&��h Ý Ð DÐ DÐ DÐ DÐ D¸GÐ DÑ DÔ DÑDÔD�
Ø!ð .Ø 8Ò+Ð+Ø&*¨H°fÐ%=˜˜r™
Ø"�G�Gà—M’M '¨!¤*Ñ-Ô-Ð-Ð-ØˆGð ð 	ð" ˆr,   r  r  c                óº  — |j         rKt          |j         ¦  «        d         }dgt          |j         ¦  «        z   t          |dz  |dz   ¦  «        gz   }nddg}|j        rKt          |j        ¦  «        d         }dgt          |j        ¦  «        z   t          |dz  |dz   ¦  «        gz   }nddg}dd„}g }	t	          |¦  «        D �]\  }
}t          |d         ¦  «        }t          |d         ¦  «        }t          |d         ¦  «        }t          |d         ¦  «        }||z   dz  }||z   dz  } |||¦  «        } |||¦  «        }|}|dz   }|}|dz   }|}|dk    r>||         ||dz
           z
  }|dk    r||         |z
  |z  |k    r|dz
  }|dz  }nn|dk    °>|}|t          |¦  «        dz
  k     rQ||dz            ||         z
  }|dk    r |||dz            z
  |z  |k    r|dz   }|dz  }nn|t          |¦  «        dz
  k     °Q|}|dk    r>||         ||dz
           z
  }|dk    r||         |z
  |z  |k    r|dz
  }|dz  }nn|dk    °>|}|t          |¦  «        dz
  k     rQ||dz            ||         z
  }|dk    r |||dz            z
  |z  |k    r|dz   }|dz  }nn|t          |¦  «        dz
  k     °Q|	                     t          |
||||||¬¦  «        ¦  «         �Œ|	S )zu
        Assign each bbox to a grid cell (row, col) and compute span.
        All coordinates in crop space.
        r¤   rS   r   r   rT   Úposr   Úedgesr   r   r   c                óÌ   — t          t          |¦  «        dz
  ¦  «        D ]%}||         | cxk    r||dz            k     rn Œ!|c S Œ&t          dt          |¦  «        dz
  ¦  «        S )Nr   r   r   )r   r   r5   )r:  r;  r   s      r*   Úfind_cell_idxz?TableGridExtractorV2A._post_process_grid.<locals>.find_cell_idx“  sy   € Ý�3˜u™:œ:¨™>Ñ*Ô*ð ð �Ø˜”8˜sÐ1Ð1Ò1Ð1 U¨1¨q©5¤\Ò1Ð1Ð1Ð1Ð1Ø�H�H�Hð 2å�q�#˜e™*œ* q™.Ñ)Ô)Ð)r,   r   r4   r´   )r  Ú	row_startÚrow_endÚ	col_startÚcol_endÚrowÚcol)r:  r   r;  r   r   r   )	rK   r   r5   rL   r^   r   r   r7   r	   )r›   r  r  rò   Úlast_hÚ	row_edgesÚlast_vÚ	col_edgesr=  Úresultsr   r#   Úx0Úy0r?   r@   ÚcxÚcyÚbase_rowÚbase_colr>  r?  r@  rA  ÚrrD   rû   rC   s                               r*   r  z(TableGridExtractorV2A._post_process_grid}  s¨  € ð Œ<ð 	#Ý˜tœ|Ñ,Ô,¨RÔ0ˆFØ˜¥ t¤|Ñ 4Ô 4Ñ4½¸FÀQ¹JÈÐQRÉ
Ñ8SÔ8SÐ7TÑTˆIˆIà˜c˜
ˆIàŒ<ð 	#Ý˜tœ|Ñ,Ô,¨RÔ0ˆFØ˜¥ t¤|Ñ 4Ô 4Ñ4½¸FÀQ¹JÈÐQRÉ
Ñ8SÔ8SÐ7TÑTˆIˆIà˜c˜
ˆIð	*ð 	*ð 	*ð 	*ð #%ˆÝ  Ñ-Ô-ð 0	ñ 0	‰GˆAˆtÝ�t˜A”w‘”ˆBÝ�t˜A”w‘”ˆBÝ�t˜A”w‘”ˆBÝ�t˜A”w‘”ˆBØ�r‘'˜S‘ˆBØ�r‘'˜S‘ˆBà%˜ b¨)Ñ4Ô4ˆHØ%˜ b¨)Ñ4Ô4ˆHØ ˆIØ  1™ˆGØ ˆIØ  1™ˆGàˆAØ�a’%�%Ø˜a”L 9¨Q°©UÔ#3Ñ3�Ø�q’5�5˜i¨œl¨RÑ/°1Ñ4°~ÒEÐEØ ! A¡�I q¨A¡v q qàð �a’%�%ð ˆAØ•c˜)‘n”n qÑ(Ò(Ð(Ø˜a !™eÔ$ y°¤|Ñ3�Ø�q’5�5˜b 9¨Q°©UÔ#3Ñ3°qÑ8¸>ÒIÐIØ !™e�G Q¨!¡V Q Qàð •c˜)‘n”n qÑ(Ò(Ð(ð ˆAØ�a’%�%Ø˜a”L 9¨Q°©UÔ#3Ñ3�Ø�q’5�5˜i¨œl¨RÑ/°1Ñ4°~ÒEÐEØ ! A¡�I q¨A¡v q qàð �a’%�%ð ˆAØ•c˜)‘n”n qÑ(Ò(Ð(Ø˜a !™eÔ$ y°¤|Ñ3�Ø�q’5�5˜b 9¨Q°©UÔ#3Ñ3°qÑ8¸>ÒIÐIØ !™e�G Q¨!¡V Q Qàð •c˜)‘n”n qÑ(Ò(Ð(ð �NŠN�8Ø i¸Ø#¨WØ (ðñ ô ñ ô ð ñ ð ˆr,   )
Nr   r€   r€   r-   TFr�   r‚   N)rƒ   r   r„   r   r…   r   r1   r   r†   r   r‡   r   r   rˆ   )r¢   rP   r   r2   )rS   )rK   r   r±   rP   r²   r   r   r   r/  )r¢   rP   r.   rÍ   r   r   )NNrð   )
r¢   rP   r.   rÍ   rñ   rÍ   rò   r   r   r2   )r+  r   r,  r   rQ   r   r   r   )r  rP   r  r   rò   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r¡   r°   ÚstaticmethodrÌ   rï   r*  r  r  rÕ   r,   r*   r~   r~   í   s$  € € € € € ðð ð Ø $Ø #Ø #Ø #Ø#'Ø"'ØØØð>/ð >/ð >/ð >/ð >/ðHGð Gð Gð Gð8 ð !$ð+ð +ð +ð +ñ „\ð+ðh #ðT
ð T
ð T
ð T
ð T
ðz #Ø!Ø #ðnð nð nð nð nðh ð!ð !ð !ñ „\ð!ðNOð Oð Oð Oð Oð Or,   r~   )
r   r   r   r   r   r   r   r   r   r   )r-   )
r.   r   r/   r   r0   r   r1   r   r   r2   )rN   r   rO   rP   rQ   r   r   rP   )rS  Ú
__future__r   Úpathlibr   Útypingr   ÚnumpyrW   ÚonnxruntimeÚortÚGlobalConfigr   Útable_grid_typesr   r	   Úcommon_utilr
   r+   rM   rg   r|   r~   rÕ   r,   r*   ú<module>r^     s0  ððð ð( #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø %Ð %Ð %Ð %Ð %Ð %ð9%ð 9%ð 9%ð 9%ð@  ð	7/ð 7/ð 7/ð 7/ð 7/ð|!ð !ð !ð !ðPð ð ðJ_ð _ð _ð _ð _ñ _ô _ð _ð _ð _r,   