§
    �ØjŒD  ã                  ó†   — d 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d„Zd„ Z G d„ d¦  «        ZdS )aÂ  
TableGridExtractorV2.py

Loads exported GridModelV2 and ConnClassifier ONNX models and predicts
table grid structure (line positions + cell connectivity) from a cropped
table image.

Post-processing pipeline
------------------------
1. Resize input image to GridModelV2 input size.
2. Run GridModelV2 ONNX inference.
   Outputs: h_on_logit, h_offset, v_on_logit, v_offset, feature_map
3. Decode anchor outputs -> normalized line positions using 1D NMS.
   score = sigmoid(on_logit); line_pos = anchor + offset / image_size
4. Convert normalized line positions to input image pixel coordinates.
5. Optionally filter empty lines and snap to bbox gaps.
6. Run ConnClassifier ONNX inference on cell features.
é    )Úannotations)ÚPathNé   )Úresize_imageé   )ÚGridPredictionÚCellInfo)Úmake_sessionç        Ú	on_logitsú
np.ndarrayÚoffsetsÚ	thresholdÚfloatÚnms_min_distÚreturnÚtuplec           	     óà  — t          | ¦  «        }ddt          j        |                      t          j        ¦  «         ¦  «        z   z                       t          j        ¦  «        }t          j        dd|t          j        ¬¦  «        }||k    }|dk    rd|dz
  z  nd}|||z  z   |         }	||         }
|dk    �rt          |	¦  «        dk    �r	t          j        |
 ¦  «        }t          j        t          |	¦  «        t          ¬¦  «        }g }|D ]Ž}||         rŒ| 
                    |¦  «         t          t          |	¦  «        ¦  «        D ]Q}||         sG||k    rAt          t          |	|         ¦  «        t          |	|         ¦  «        z
  ¦  «        |k     rd||<   ŒRŒ�t          j        |	t          j        |t          j        ¬¦  «                 ¦  «        }nt          j        |	¦  «        }|||fS )z¶
    Decode anchor-based line predictions to normalized positions.

    offset is anchor_step-normalized: anchor + offset * anchor_step to decode.
    score = sigmoid(on_logit).
    ç      ð?r   ©Údtyper   r   T)ÚlenÚnpÚexpÚastypeÚfloat64Úfloat32ÚlinspaceÚargsortÚzerosÚboolÚappendÚrangeÚabsr   ÚsortÚarrayÚint32)r   r   r   r   Úmax_nÚon_probÚanchorsÚmaskÚanchor_stepÚ
candidatesÚscoresÚorderÚ
suppressedÚkeepÚiÚjÚ	positionss                    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/pymupdf/layout/onnx/TableGridExtractorV2.pyÚ_decode_anchorsr6       sÖ  € õ �)‰nŒn€EØ�c�BœF I×$4Ò$4µR´ZÑ$@Ô$@Ð#@ÑAÔAÑAÑB×JÒJÍ2Ì:ÑVÔV€GÝŒk˜#˜s Eµ´Ð<Ñ<Ô<€GØ˜Ò"€Dð (-¨q¢y y�#˜ ™Ñ#Ð#°c€KØ˜W {Ñ2Ñ2°DÔ9€JØ˜$”-€Fà�cÒÑ�c *™oœo°Ò1Ñ1Ý”Z  Ñ(Ô(ˆÝ”X�c *™oœoµTÐ:Ñ:Ô:ˆ
ØˆØð 	-ð 	-ˆAØ˜!Œ}ð ØØ�KŠK˜‰NŒNˆNÝ�3˜z™?œ?Ñ+Ô+ð -ð -�Ø! !”}ð -¨¨aª¨Ý�5 ¨A¤Ñ/Ô/µ%¸
À1¼Ñ2FÔ2FÑFÑGÔGÈ,ÒVÐVØ(,˜
 1™øð-õ ”G˜J¥r¤x°½B¼HÐ'EÑ'EÔ'EÔFÑGÔGˆ	ˆ	å”G˜JÑ'Ô'ˆ	à�g˜tÐ#Ð#ó    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   r   r   N)r   r   )Úaxis)Úshaper   r   r    Úmaxr   Úclipr   r'   r#   ÚminÚsizeÚmean)Úfeature_mapÚh_lines_normÚv_lines_normÚCÚHÚWÚNÚMÚysÚxsÚ	cell_featr2   Úy1Úy2r3   Úx1Úx2Úregions                     r5   Ú_extract_cell_featuresrP   I   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ð Ðr7   c                  ó€   — e Zd ZdZ	 	 	 	 	 	 	 	 	 d(d)d„Zed*d„¦   «         Ze	 d+d,d„¦   «         Zd-d"„Z	 	 	 d.d/d&„Z	d'„ Z
d	S )0ÚTableGridExtractorV2z:ONNX-based table grid extractor using the V2 anchor model.ç      Ð?çš™™™™™É?ç{®Gáz”?TFú1-RowÚBBoxNÚh_on_thresholdr   Úv_on_thresholdÚconn_thresholdr   Úfilter_empty_linesr!   Úsnap_to_bbox_gapsr   ÚNonec                ó¨  — |€dg}t          |¦  «        | _        |rt          |¦  «        nd | _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        t          t          | j        ¦  «        |¦  «        | _        | j        rA| j                             ¦   «         r(|                      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 )NÚCPUExecutionProviderr   r   é   r   r   Úimage)r   Úgrid_onnx_pathÚconn_onnx_pathrX   rY   rZ   r   r[   r\   Úheader_typeÚ
merge_typer
   ÚstrÚ
_grid_sessÚexistsÚ_make_sessionÚ
_conn_sessÚ
get_inputsÚintr:   Ú_input_hÚ_input_wr   r    r   ÚrunÚ_max_hÚ_max_v)Úselfrb   rc   rX   rY   rZ   r   r[   r\   rd   re   Ú	providersÚinpÚdummyÚoutputss                  r5   Ú__init__zTableGridExtractorV2.__init__m   s©  € ð ÐØ/Ð0ˆIå!% nÑ!5Ô!5ˆÔØ9GÐ!Q¥ nÑ!5Ô!5Ð!5ÈTˆÔØ!/ˆÔØ!/ˆÔØ!/ˆÔØ!-ˆÔØ"4ˆÔØ"3ˆÔØ"-ˆÔØ",ˆŒå&Ý�Ô#Ñ$Ô$ iñ
ô 
ˆŒð
 Ô"ðNØ'+Ô':×'AÒ'AÑ'CÔ'CðNˆD×Ò�s 4Ô#6Ñ7Ô7¸ÑCÔCÐCØIMð 	Œð
 Œo×(Ò(Ñ*Ô*¨1Ô-ˆÝ˜CœI aœLÑ)Ô)ˆŒÝ˜CœI aœLÑ)Ô)ˆŒå”(˜A˜q $¤-°´Ð?ÅrÄzÐRÑRÔRˆØ”/×%Ò% d¨W°eÐ,<Ñ=Ô=ˆÝ˜' !œ*Ô*¨1Ô-Ñ.Ô.ˆŒÝ˜' !œ*Ô*¨1Ô-Ñ.Ô.ˆŒˆˆr7   ÚlinesÚlistÚcentersÚ
image_sizec                ó‚  ‡‡— | 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 line pairs that have no bbox center between them.
        CCL-style convergence. Leading/trailing empty gaps are ignored.
        TFr   r   r   éÿÿÿÿc              3  ó8   •K  — | ]}‰|cxk    o‰k    nc V — Œd S )N© )Ú.0ÚcÚhi_yÚlo_ys     €€r5   ú	<genexpr>z;TableGridExtractorV2._filter_empty_lines.<locals>.<genexpr>¶   s?   øè è € Ð DÐ D°q ¨Ð!2Ð!2Ò!2Ð!2¨dÒ!2Ð!2Ð!2Ð!2Ð DÐ DÐ DÐ DÐ DÐ Dr7   )Úsortedr   r#   Úanyr"   )rx   rz   r{   ÚcurrentÚchangedÚresultr2   Úlo_scoreÚlo_clsÚhi_scoreÚhi_clsÚ
has_centerr‚   rƒ   s               @@r5   Ú_filter_empty_linesz(TableGridExtractorV2._filter_empty_linesž   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ð ð 	ð" ˆr7   r   Úh_linesÚbboxes_cropr   Ú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   Nr`   r   ç       @c              3  ó6   K  — | ]}t          |d ¦  «        V — ŒdS )é   N)Úround)r€   Úgs     r5   r„   z@TableGridExtractorV2._snap_lines_to_bbox_gaps.<locals>.<genexpr>×   s*   è è € Ð&FÐ&F°q¥u¨Q°¡{¤{Ð&FÐ&FÐ&FÐ&FÐ&FÐ&Fr7   r   Fr   T)r   r   r%   r"   r   r&   r…   Úsetr   r†   r$   r   Úadd)r�   r‘   r’   ÚbottomsÚtopsÚ	gap_linesÚbotr-   Úgap_arrÚ	used_gapsr‰   ÚyÚcrossesÚdistsr/   ÚsnappedÚidxÚnearestÚdists                      r5   Ú_snap_lines_to_bbox_gapsz-TableGridExtractorV2._snap_lines_to_bbox_gapsÁ   sI  € õ ˆ{ÑÔ˜qÒ Ð ¥C¨¡L¤L°AÒ$5Ð$5ØˆNå”'˜+ a a a¨ dÔ+Ñ,Ô,ˆÝ”'˜+ a a a¨ dÔ+Ñ,Ô,ˆàˆ	Øð 	Eð 	EˆCØ˜d SšjÔ)ˆJÝ�:‰Œ Ò"Ð"Ø× Ò  #­¨j¸¬mÑ(<Ô(<Ñ"<ÀÑ!CÑDÔDÐDøàð 	ØˆNå”8�F¥3Ð&FÐ&F¸IÐ&FÑ&FÔ&FÑ#FÔ#FÑGÔGÍrÌzÐZÑZÔZˆÝ™œˆ	ØˆØð 	!ñ 	!ˆ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Ñ Ô Ð Ñ Øˆr7   Ú	image_bgrr   c           
     óÖ  ‡‡— |j         d d…         \  ŠŠt          || 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         }
t          ||| j        | j        ¦  «        \  }}}t          ||	| j        | j        ¦  «        \  }}}t          j        t!          |¦  «        t
          j        ¬	¦  «        }ˆfd
„|D ¦   «         }ˆfd„|D ¦   «         }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        ¦  «        }t1          t3          |¦  «        t3          |¦  «        ||||||¬¦  «        S )Nr   r}   g     ào@r   r   ra   r`   r–   r   c                ó4   •— g | ]}t          |¦  «        ‰z  ‘ŒS r   ©r   ©r€   r¡   Úorig_hs     €r5   ú
<listcomp>z5TableGridExtractorV2.predict_grid.<locals>.<listcomp>  ó$   ø€ Ð;Ð;Ð;¨•5˜‘8”8˜fÑ$Ð;Ð;Ð;r7   c                ó4   •— g | ]}t          |¦  «        ‰z  ‘ŒS r   r¬   ©r€   ÚxÚorig_ws     €r5   r¯   z5TableGridExtractorV2.predict_grid.<locals>.<listcomp>  r°   r7   Úcell_featuresr   ©r�   Úv_linesÚ	h_on_probÚ	v_on_probrA   rB   Úh_clsÚconnectivity)r:   r   rn   rm   r   r   r   Ú	transposeÚnewaxisrg   ro   r6   rX   r   rY   Úonesr   r'   rj   rP   ÚisfiniteÚallr   r   r   r…   )rr   r©   Úimg_resizedÚimg_rgbrt   rv   Ú
h_on_logitÚh_offsetÚ
v_on_logitÚv_offsetr@   rA   r¸   Úh_maskrB   r¹   Ú_rº   r�   r·   r»   rJ   Úcell_inpÚconn_outÚconn_logitsÚ	conn_probr®   r´   s                             @@r5   Úpredict_gridz!TableGridExtractorV2.predict_gridô   sÂ  øø€ Ø"œ¨¨!¨Ô,‰ˆ�å" 9¨t¬}¸d¼mÐ.LÑMÔMˆØ! ! ! ! Q Q Q¨¨¨"¨ *Ô-×4Ò4µR´ZÑ@Ô@À5ÑHˆØ×'Ò'¨¨1¨aÑ0Ô0µ´Ô<ˆà”×*Ò*¨4°'¸3°Ñ@Ô@ˆØ˜q”z !”}ˆ
Ø˜q”z !”}ˆØ˜q”z !”}ˆ
Ø˜q”z !”}ˆØ˜q”z !”}ˆå*9Ø˜ $Ô"5°tÔ7Hñ+
ô +
Ñ'ˆ�i õ +:Ø˜ $Ô"5°tÔ7Hñ+
ô +
Ñ"ˆ�i õ ”�˜LÑ)Ô)µ´Ð:Ñ:Ô:ˆà;Ð;Ð;Ð;¨lÐ;Ñ;Ô;ˆØ;Ð;Ð;Ð;¨lÐ;Ñ;Ô;ˆàˆØŒ?Ñ&­3¨|Ñ+<Ô+<ÀÒ+AÑ+AÅcÈ,ÑFWÔFWÐ[\ÒF\ÑF\Ý.¨{¸LÈ,ÑWÔWˆIÝŒ{˜9Ñ%Ô%×)Ò)Ñ+Ô+ð OØ'×1Ò1°!°Q¸Ñ:Ô:½2¼:ÔF×MÒMÍbÌjÑYÔY�Ø"œo×1Ò1°$¸È(Ð8SÑTÔT�Ø& qœk¨!œn�Ø! S­2¬6°;×3EÒ3EÅbÄjÑ3QÔ3QÐ2QÑ+RÔ+RÑ%RÑS�	Ø(×2Ò2°1°a¸Ñ;Ô;×BÒBÅ2Ä:ÑNÔN�åÝ˜7‘O”OÝ˜7‘O”OØØØ%Ø%ØØ%ð	
ñ 	
ô 	
ð 		
r7   çš™™™™™¹?Úspan_thresholdr   c           
     óÂ
  ‡‡‡‡ ‡!‡"— |                       |¦  «        }|�t          |¦  «        dk    r|g fS t          j        |t          j        ¬¦  «        }t          |j        d         ¦  «        Št          |j        d         ¦  «        Š|}t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }	t          |j        ¦  «        }
t          j	        dd|
t          j        ¬¦  «        }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        ¬¦  «        }t          |j        d         ¦  «        Š!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 )ar  
        Predict grid boundaries and optionally assign bboxes to grid cells.

        Parameters
        ----------
        image_bgr      : cropped table BGR image (any size)
        bboxes         : (N, 4) array-like of [x0, y0, x1, y1] in crop space.
                         If None or empty, only grid prediction is performed.
        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   r   c              3  ór   K  — | ]2}t          |d          ¦  «        t          |d         ¦  «        z   dz  V — Œ3dS )r   r   r”   Nr¬   ©r€   Úbs     r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>F  ó@   è è € ÐOÐO¸q�%  !¤™+œ+­¨a°¬d©¬Ñ3°sÑ:ÐOÐOÐOÐOÐOÐOr7   c              3  ór   K  — | ]2}t          |d          ¦  «        t          |d         ¦  «        z   dz  V — Œ3dS )r   r`   r”   Nr¬   rÒ   s     r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>G  rÔ   r7   r   r   c              3  óP   •K  — | ] }d |cxk    o‰d         d         k    nc V — Œ!dS ©r   r   Nr   )r€   r�   Úh_tupless     €r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>f  óG   øè è € Ð&SÐ&SÀa s¨aÐ'AÐ'AÒ'AÐ'A°8¸A´;¸q´>Ò'AÐ'AÐ'AÐ'AÐ&SÐ&SÐ&SÐ&SÐ&SÐ&Sr7   c              3  óP   •K  — | ] }d |cxk    o‰d         d         k    nc V — Œ!dS r×   r   )r€   r�   Úv_tupless     €r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>h  rÙ   r7   c              3  óP   •K  — | ] }‰d          d         |cxk    o‰k    nc V — Œ!dS ©r}   r   Nr   )r€   r�   Úcrop_hrØ   s     €€r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>l  óG   øè è € Ð&WÐ&WÈ! x°¤|°A¤¸!Ð'EÐ'EÒ'EÐ'E¸vÒ'EÐ'EÐ'EÐ'EÐ&WÐ&WÐ&WÐ&WÐ&WÐ&Wr7   r}   c              3  óP   •K  — | ] }‰d          d         |cxk    o‰k    nc V — Œ!dS rÝ   r   )r€   r�   Úcrop_wrÛ   s     €€r5   r„   z/TableGridExtractorV2.predict.<locals>.<genexpr>n  rß   r7   c                ó   — g | ]\  }}}|‘Œ	S r   r   ©r€   r¡   rÈ   s      r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>q  ó   € Ð4Ð4Ð4¡  1 a˜!Ð4Ð4Ð4r7   c                ó   — g | ]\  }}}|‘Œ	S r   r   )r€   r³   rÈ   s      r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>r  rä   r7   c                ó   — g | ]\  }}}|‘Œ	S r   r   )r€   rÈ   r�   s      r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>s  s   € Ð"=Ð"=Ð"=©¨¨A¨q 1Ð"=Ð"=Ð"=r7   c                ó&   — g | ]\  }\  }}}|||f‘ŒS r   r   )r€   ÚsyrÈ   Úscr�   s        r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>w  s(   € ÐSÐSÐS©.¨"©j¨q°"°a˜2˜r 1˜+ÐSÐSÐSr7   c                ó   — g | ]\  }}}|‘Œ	S r   r   rã   s      r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>x  rä   r7   c                ó   •— g | ]}|‰z  ‘ŒS r   r   r­   s     €r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>z  ó   ø€ Ð#CÐ#CÐ#C°1 A¨¡JÐ#CÐ#CÐ#Cr7   c                ó   •— g | ]}|‰z  ‘ŒS r   r   r²   s     €r5   r¯   z0TableGridExtractorV2.predict.<locals>.<listcomp>{  rì   r7   r¶   )Úbboxes_pageÚgridrÏ   ) rÍ   r   r   Úasarrayr   r   r:   r…   r¸   r   Úzipr�   rº   Útolistrl   Úargminr$   r"   r¹   r·   r[   r�   r†   r&   r'   r\   r¨   r   r»   Ú_post_process_gridÚbbox_idxÚtext)#rr   r©   ÚbboxesÚtextsrÏ   rï   Ú
bboxes_arrr‘   Úcx_listÚcy_listÚmax_hr*   r¡   r�   Úy_normr¥   Ú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®   r´   rÛ   s#                                @@@@@@r5   ÚpredictzTableGridExtractorV2.predict#  sø  øøøøøø€ ð. × Ò  Ñ+Ô+ˆàˆ>�S ™[œ[¨AÒ-Ð-Ø˜�8ˆOå”Z ­b¬jÐ9Ñ9Ô9ˆ
å�y” qÔ)Ñ*Ô*ˆÝ�y” qÔ)Ñ*Ô*ˆà ˆåÐOÐOÀJÐOÑOÔOÑOÔOˆÝÐOÐOÀJÐOÑOÔOÑOÔOˆõ �t”~Ñ&Ô&ˆÝ”;˜s C¨µb´jÐAÑAÔAˆÝ˜œ¨Ô+Ñ,Ô,ˆàˆÝ˜œ½SÀÄ¹_¼_Ð&g d¤j×&7Ò&7Ñ&9Ô&9Ð&9ÐSTÐRUÕVYÐZ^ÔZfÑVgÔVgÑRgÑhÔhð 	+ð 	+‰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À;ÑOÔOˆ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ˆ{Ðr7   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„ }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 )Nr}   r   r   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   r;   )ÚposÚedgesr2   s      r5   Úfind_cell_idxz>TableGridExtractorV2._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™.Ñ)Ô)Ð)r7   r   r`   r”   )rõ   Ú	row_startÚrow_endÚ	col_startÚcol_endÚrowÚcol)	r�   r…   r;   r·   Ú	enumerater   r   r"   r	   )rr   rî   rï   rÏ   Úlast_hÚ	row_edgesÚlast_vÚ	col_edgesr  Úresultsr2   ÚbboxÚx0Úy0rM   rK   ÚcxÚcyÚbase_rowÚbase_colr  r  r  r  ÚrÚhr�   Úws                               r5   rô   z'TableGridExtractorV2._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Ø (ðñ ô ñ ô ð ñ ð ˆr7   )	rS   rT   rT   rU   TFrV   rW   N)rX   r   rY   r   rZ   r   r   r   r[   r!   r\   r!   r   r]   )rx   ry   rz   ry   r{   r   r   ry   ©r   )r�   ry   r‘   r   r’   r   r   ry   )r©   r   r   r   )NNrÎ   )r©   r   rÏ   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rw   Ústaticmethodr�   r¨   rÍ   r	  rô   r   r7   r5   rR   rR   j   sð   € € € € € ØDÐDð !%Ø #Ø #Ø"Ø#'Ø"'ØØØð+/ð +/ð +/ð +/ð +/ðb ð ð  ð  ñ „\ð ðD ð !$ð,ð ,ð ,ð ,ñ „\ð,ðd-
ð -
ð -
ð -
ðd ØØ #ðpð pð pð pð pðlFð Fð Fð Fð Fr7   rR   r%  )
r   r   r   r   r   r   r   r   r   r   )r)  Ú
__future__r   Úpathlibr   Únumpyr   ÚonnxruntimeÚortÚcommon_utilr   Útable_grid_typesr   r	   r
   r6   rP   rR   r   r7   r5   ú<module>r2     sô   ððð ð& #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø %Ð %Ð %Ð %Ð %Ð %ð ð	&$ð &$ð &$ð &$ð &$ðRð ð ðBuð uð uð uð uñ uô uð uð uð ur7   