§
    �’jnš  ã                  ó¤  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	 e	j
        d¦  «        Z e	j
        de	j        ¦  «        Z e	j
        d	e	j        ¦  «        Z e	j
        d
¦  «        Z e	j
        d¦  «        Z e	j
        d¦  «        Z e	j
        de	j        ¦  «        Z e	j
        d¦  «        Z e	j
        d¦  «        Z e	j
        d¦  «        ZdZh d£Zh d£Zdpd„Zdpd„Zdqd„Zdrd„Zdrd„Zdsd„Zdtd"„Zdtd#„Z dud&„Z!dtd'„Z"dvd(„Z#dvd)„Z$dvd*„Z%dvd+„Z&dvd,„Z'dwd.„Z(dvd/„Z)dvd0„Z*dxd1„Z+dyd4„Z,dvd5„Z-dzd8„Z.dvd9„Z/dvd:„Z0dzd;„Z1d{d=„Z2d{d>„Z3d{d?„Z4dvd@„Z5dvdA„Z6dvdB„Z7dvdC„Z8d|dE„Z9d}dH„Z:d~dJ„Z;ddM„Z<	 d€d�dR„Z=d‚dT„Z>dƒdW„Z?d„dY„Z@d…dZ„ZAd†d]„ZBd{d^„ZCdvd_„ZDd‡d`„ZEdadbœdˆdd„ZFd‰de„ZG edf¬g¦  «         G dh„ di¦  «        ¦   «         ZHdŠdj„ZIdsdk„ZJdsdl„ZKdsdm„ZLd‹dŒdo„ZMdS )�aw  
Copyright (C) 2023 Artifex Software, Inc.

This file is part of PyMuPDF.

PyMuPDF is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.

PyMuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.

You should have received a copy of the GNU Affero General Public License
along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>

Alternative licensing terms are available from the licensor.
For commercial licensing, see <https://www.artifex.com/> or contact
Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
CA 94129, USA, for further information.

---------------------------------------------------------------------

PyMuPDF table header detection and HTML serialization (opt-in extension).

Pure text-grid module (no pymupdf import): the header-region rules operate on a
row-major ``[[cell text]]`` grid, and the serializer turns a tagged placement
grid into an HTML ``<table>``. Used only by find_tables(refine=True) (via
pymupdf.table) and Table.to_html(); never runs on the default detection path.
é    )Úannotations)Ú	dataclass)Úmean)ÚAnyNu2   [A-Za-z]+|\d+(?:[.,:/-]\d+)*|[%$â‚¬Â£Â¥()â€“â€”-]+zE\b(?:jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[a-z]*\.?\bu.   (?:[$â‚¬Â£Â¥]\s*[-(]?\d|(?:usd|eur|gbp|jpy)\b)z[-(]?\d+(?:\.\d+)?\s*%z\b(?:19|20)\d{2}\bz:^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9][A-Za-z0-9._/# -]{0,24}$u:   (?:>=|<=|<|>| thru | through | to |\b\d+\s*[-â€“]\s*\d+\b)z^\s*\d+(?:\.\d+){2,}\bz)[\[(]\s*\d{1,2}\s*[\])]|\[\s*\d{1,2}\s*\)z^[\s\d\[\]\(\)=+\-*/xX.]+$)z
in millionzin thousandz
in billionz$ inÚusdz'000ú%>   ÚmoneyÚnumberÚpercent>   ÚunitÚcode_idÚ	long_textÚ
text_labelÚdate_periodÚtextÚstrÚreturnÚintc                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  óB   K  — | ]}|                      ¦   «         ¯d V — ŒdS ©é   N©Úisalpha©Ú.0Úchars     úDC:\Projects\DSCons\.venv\Lib\site-packages\pymupdf\_table_headers.pyú	<genexpr>zcount_alpha.<locals>.<genexpr>=   ó/   è è € Ð4Ð4�T T§\¢\¡^¤^Ð4ˆqÐ4Ð4Ð4Ð4Ð4Ð4ó    ©Úsum©r   s    r   Úcount_alphar%   <   ó   € ÝÐ4Ð4˜TÐ4Ñ4Ô4Ñ4Ô4Ð4r!   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  óB   K  — | ]}|                      ¦   «         ¯d V — ŒdS r   )Úisdigitr   s     r   r   zcount_digit.<locals>.<genexpr>A   r    r!   r"   r$   s    r   Úcount_digitr*   @   r&   r!   ú	list[str]c                ó6   — t                                | ¦  «        S ©N)Ú	_TOKEN_REÚfindallr$   s    r   Útokensr0   D   s   € Ý×Ò˜TÑ"Ô"Ð"r!   Úboolc                óê   — |                       ¦   «         }|sdS t          |¦  «        }t          |¦  «        }|dk    rdS t                               |¦  «        rdS |t          d||z   ¦  «        z  dk    S )NFr   r   ç333333Ó?)Ústripr%   r*   Ú	_MONTH_REÚsearchÚmax)r   ÚstrippedÚalphaÚdigits       r   Únumeric_liker;   H   s}   € Ø�zŠz‰|Œ|€HØð ØˆuÝ˜Ñ!Ô!€EÝ˜Ñ!Ô!€EØ�‚z€zØˆuÝ×Ò˜Ñ!Ô!ð ØˆuØ•3�q˜% %™-Ñ(Ô(Ñ(¨DÒ0Ð0r!   c                óÀ   — |                       ¦   «         }|sdS t          t                               |¦  «        pt	          j        d|t          j        ¦  «        ¦  «        S )NFz#\b(?:q[1-4]|fy|year|month|period)\b)r4   r1   r5   r6   ÚreÚI)r   r8   s     r   Údate_or_period_liker?   U   sQ   € Ø�zŠz‰|Œ|€HØð ØˆuÝ•	× Ò  Ñ*Ô*Ðo­b¬iÐ8^Ð`hÕjlÔjnÑ.oÔ.oÑpÔpÐpr!   c                ó*  — d                      |                      ¦   «                              ¦   «         ¦  «        }|sdS t          |¦  «        }t	          |¦  «        }t          t          |¦  «        ¦  «        }|                     ¦   «         }t           	                    |¦  «        rdS t                               |¦  «        s!|                     d¦  «        r|dk    r|dk    rdS t          |¦  «        s t                               |¦  «        r|dk    rdS t           	                    |¦  «        r|dk    r|d	k    rd
S t!          |¦  «        rdS |dv rdS t"                               |¦  «        r|dk    rdS |dk    r|dk    r|dk    rdS |d	k    rdS dS )Nú Úemptyr	   r   r   r   r   r   é   Úranger
   >
   ú$mú$000ÚeurÚgbpr   ÚrateÚratioÚamountú$r   r   é   r   é   r   r   )Újoinr4   Úsplitr%   r*   Úlenr0   ÚlowerÚ	_MONEY_REr6   Ú_PERCENT_REÚ	fullmatchÚendswithr?   Ú_YEAR_REÚ	_RANGE_REr;   Ú_CODE_REÚmatch)r   r8   r9   r:   Útoken_countÚlowereds         r   Ú	cell_typer]   \   s±  € Ø�xŠx˜Ÿ
š
™œ×*Ò*Ñ,Ô,Ñ-Ô-€HØð Øˆwå˜Ñ!Ô!€EÝ˜Ñ!Ô!€EÝ•f˜XÑ&Ô&Ñ'Ô'€KØ�nŠnÑÔ€Gå×Ò˜Ñ!Ô!ð ØˆwÝ×Ò˜XÑ&Ô&ð ¨8×+<Ò+<¸SÑ+AÔ+Að ÀeÈaÂiÀiÐTYÐ]^ÒT^ÐT^ØˆyÝ˜8Ñ$Ô$ð ­×);Ò);¸HÑ)EÔ)Eð È+ÐYZÒJZÐJZØˆ}Ý×Ò˜Ñ!Ô!ð  e¨a¢i i°KÀ1Ò4DÐ4DØˆwÝ�HÑÔð ØˆxØÐZÐZÐZØˆvÝ‡~‚~�hÑÔð  K°1Ò$4Ð$4ØˆyØˆq‚y€y�U˜Q’Y�Y ;°!Ò#3Ð#3ØˆyØ�aÒÐØˆ{Øˆ<r!   Útextsúdict[str, float]c           	     ó˜  — d„ | D ¦   «         }|s	dddddddœS t          |¦  «        }t          d„ |D ¦   «         ¦  «        |z  t          d„ |D ¦   «         ¦  «        |z  t          d„ |D ¦   «         ¦  «        |z  t          d„ |D ¦   «         ¦  «        |z  t          d„ |D ¦   «         ¦  «        |z  t          d	„ |D ¦   «         ¦  «        |z  dœS )
Nc                óT   — g | ]%}|                      ¦   «         ¯t          |¦  «        ‘Œ&S © ©r4   r]   ©r   r   s     r   ú
<listcomp>z$cell_type_ratios.<locals>.<listcomp>|   s+   € ÐHÐHÐH¨$¸4¿:º:¹<¼<ÐH•i ‘o”oÐHÐHÐHr!   ç        )Úvalue_type_ratioÚlabel_type_ratioÚlong_text_type_ratioÚcode_type_ratioÚdate_period_type_ratioÚrange_type_ratioc              3  ó,   K  — | ]}|t           v ¯d V — ŒdS r   ©ÚVALUE_TYPES©r   Úitems     r   r   z#cell_type_ratios.<locals>.<genexpr>ˆ   ó,   è è € ÐTÐT dÀÍÐ@SÐ@S Ð@SÐ@SÐ@SÐ@SÐTÐTr!   c              3  ó,   K  — | ]}|t           v ¯d V — ŒdS r   ©ÚLABEL_TYPESrp   s     r   r   z#cell_type_ratios.<locals>.<genexpr>‰   rr   r!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS ©r   r   Nrb   rp   s     r   r   z#cell_type_ratios.<locals>.<genexpr>Š   s,   è è € Ð#XÐ#X¨$ÀDÈKÒDWÐDW AÐDWÐDWÐDWÐDWÐ#XÐ#Xr!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS )r   r   Nrb   rp   s     r   r   z#cell_type_ratios.<locals>.<genexpr>‹   s,   è è € ÐQÐQ T¸tÀyÒ?PÐ?P˜qÐ?PÐ?PÐ?PÐ?PÐQÐQr!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS ©r   r   Nrb   rp   s     r   r   z#cell_type_ratios.<locals>.<genexpr>Œ   s,   è è € Ð%\Ð%\¨DÀdÈmÒF[ÐF[ aÐF[ÐF[ÐF[ÐF[Ð%\Ð%\r!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS )rD   r   Nrb   rp   s     r   r   z#cell_type_ratios.<locals>.<genexpr>�   s&   è è € ÐPÐP dÀÈÂÀ ÀÀÀÀÐPÐPr!   )rQ   r#   )r^   Únonempty_typesÚtotals      r   Úcell_type_ratiosr~   {   s  € ØHÐH°%ÐHÑHÔH€NØð 
à #Ø #Ø$'Ø"Ø&)Ø #ð
ð 
ð 	
õ �ÑÔ€EåÐTÐT¨nÐTÑTÔTÑTÔTÐW\Ñ\ÝÐTÐT¨nÐTÑTÔTÑTÔTÐW\Ñ\Ý #Ð#XÐ#X°.Ð#XÑ#XÔ#XÑ XÔ XÐ[`Ñ `ÝÐQÐQ¨^ÐQÑQÔQÑQÔQÐTYÑYÝ"%Ð%\Ð%\°NÐ%\Ñ%\Ô%\Ñ"\Ô"\Ð_dÑ"dÝÐPÐP¨nÐPÑPÔPÑPÔPÐSXÑXðð ð r!   c                óö  — d„ | D ¦   «         }| sdddddddddœt          g ¦  «        ¥S t          t          | ¦  «        ¦  «        t          t          |¦  «        ¦  «        t          |¦  «        t          | ¦  «        z  t          | ¦  «        t          |¦  «        z
  t          | ¦  «        z  t          d„ |D ¦   «         ¦  «        t	          dt          |¦  «        ¦  «        z  t          d„ |D ¦   «         ¦  «        t	          dt          |¦  «        ¦  «        z  t          d„ |D ¦   «         ¦  «        t	          dt          |¦  «        ¦  «        z  |rt          d„ |D ¦   «         ¦  «        nddœt          | ¦  «        ¥S )	Nc                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   ©r4   rd   s     r   re   z row_features.<locals>.<listcomp>’   s%   € Ð7Ð7Ð7˜¨$¯*ª*©,¬,Ð7�Ð7Ð7Ð7r!   rf   )Ú
cell_countÚnonempty_countÚnonempty_ratioÚempty_ratioÚnumeric_ratioÚalpha_ratioÚdate_period_ratioÚ
avg_tokensc              3  ó8   K  — | ]}t          |¦  «        ¯d V — ŒdS r   ©r;   rd   s     r   r   zrow_features.<locals>.<genexpr>¤   s/   è è € ÐJÐJ 4µ|ÀDÑ7IÔ7IÐJ˜QÐJÐJÐJÐJÐJÐJr!   r   c              3  ó@   K  — | ]}t          |¦  «        d k    ¯dV — ŒdS ©r   r   N©r%   rd   s     r   r   zrow_features.<locals>.<genexpr>¥   s4   è è € ÐKÐK µ[ÀÑ5FÔ5FÈÒ5JÐ5J˜1Ð5JÐ5JÐ5JÐ5JÐKÐKr!   c              3  ó8   K  — | ]}t          |¦  «        ¯d V — ŒdS r   )r?   rd   s     r   r   zrow_features.<locals>.<genexpr>¦   s0   è è € Ð UÐ U tÕ;NÈtÑ;TÔ;TÐ U Ð UÐ UÐ UÐ UÐ UÐ Ur!   c                óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rb   )rQ   r0   rd   s     r   re   z row_features.<locals>.<listcomp>§   s&   € ÐCÐCÐC°$�C¥ t¡¤Ñ-Ô-ÐCÐCÐCr!   )r~   ÚfloatrQ   r#   r7   r   )r^   Únonemptys     r   Úrow_featuresr“   ‘   s�  € Ø7Ð7 Ð7Ñ7Ô7€HØð 
àØ!Ø!ØØ ØØ!$Øð

ð 

õ ˜rÑ"Ô"ð

ð 
	
õ �C ™JœJÑ'Ô'Ý¥ H¡¤Ñ.Ô.Ý˜h™-œ-­#¨e©*¬*Ñ4Ý˜E™
œ
¥S¨¡]¤]Ñ2µc¸%±j´jÑ@ÝÐJÐJ¨8ÐJÑJÔJÑJÔJÍSÐQRÕTWÐX`ÑTaÔTaÑMbÔMbÑbÝÐKÐK¨ÐKÑKÔKÑKÔKÍcÐRSÕUXÐYaÑUbÔUbÑNcÔNcÑcÝ Ð UÐ U¨xÐ UÑ UÔ UÑUÔUÕX[Ð\]Õ_bÐckÑ_lÔ_lÑXmÔXmÑmØHPÐY•dÐCÐC¸(ÐCÑCÔCÑDÔDÐDÐVYð
ð 
õ ˜5Ñ
!Ô
!ð
ð 
r!   ÚrowÚcolc                ó<   — |t          | ¦  «        k     r| |         ndS )NÚ ©rQ   )r”   r•   s     r   Úcolumn_textr™   ¬   s   € Ø�S ™XœX’~�~ˆ3ˆsŒ8ˆ8¨2Ð-r!   c                óÚ  — t          | ¦  «        }t          | d¦  «        }d„ | dd …         D ¦   «         }d„ |D ¦   «         }t          |                     ¦   «         ¦  «        }i |¥|rdndt	          |¦  «        dk    rdndt          |¦  «        rdndt          |¦  «        t          v rdndt          |¦  «        t          v rdndt          d„ |D ¦   «         ¦  «        t          dt          |¦  «        ¦  «        z  t          d„ |D ¦   «         ¦  «        t          dt          |¦  «        ¦  «        z  t          d	„ |D ¦   «         ¦  «        t          dt          |¦  «        ¦  «        z  t          d
„ |D ¦   «         ¦  «        t          dt          |¦  «        ¦  «        z  t          d„ |D ¦   «         ¦  «        t          dt          |¦  «        ¦  «        z  t          d|d         dz  ¦  «        dœ¥S )Nr   c                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   r�   rd   s     r   re   zrow_vector.<locals>.<listcomp>³   s%   € Ð7Ð7Ð7�T¨$¯*ª*©,¬,Ð7ˆDÐ7Ð7Ð7r!   r   c                ó,   — g | ]}t          |¦  «        ‘ŒS rb   ©r]   rd   s     r   re   zrow_vector.<locals>.<listcomp>´   ó   € Ð3Ð3Ð3 d•)˜D‘/”/Ð3Ð3Ð3r!   rf   g      ð?c              3  ó8   K  — | ]}t          |¦  «        ¯d V — ŒdS r   r‹   rd   s     r   r   zrow_vector.<locals>.<genexpr>½   s/   è è € Ð!KÐ!K¨½ÀTÑ8JÔ8JÐ!K !Ð!KÐ!KÐ!KÐ!KÐ!KÐ!Kr!   c              3  ó@   K  — | ]}t          |¦  «        d k    ¯dV — ŒdS r�   rŽ   rd   s     r   r   zrow_vector.<locals>.<genexpr>¾   s4   è è € ÐLÐL dµkÀ$Ñ6GÔ6GÈ!Ò6KÐ6K Ð6KÐ6KÐ6KÐ6KÐLÐLr!   c              3  ó,   K  — | ]}|t           v ¯d V — ŒdS r   rn   rp   s     r   r   zrow_vector.<locals>.<genexpr>¿   ó,   è è € Ð$UÐ$U¨4ÀÍÐATÐAT QÐATÐATÐATÐATÐ$UÐ$Ur!   c              3  ó,   K  — | ]}|t           v ¯d V — ŒdS r   rt   rp   s     r   r   zrow_vector.<locals>.<genexpr>À   r¢   r!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS rw   rb   rp   s     r   r   zrow_vector.<locals>.<genexpr>Á   s,   è è € Ð(YÐ(Y¨tÀTÈ[ÒEXÐEX¨ÐEXÐEXÐEXÐEXÐ(YÐ(Yr!   r‰   ç       @)Úfirst_emptyÚfirst_alphaÚfirst_numericÚfirst_value_typeÚfirst_label_typeÚrest_numeric_ratioÚrest_alpha_ratioÚrest_value_type_ratioÚrest_label_type_ratioÚrest_long_text_type_ratioÚavg_tokens_norm)r“   r™   r1   r4   r%   r;   r]   ro   ru   r#   r7   rQ   Úmin)r^   ÚfeaturesÚfirstÚrestÚ
rest_typesÚfirst_nonemptys         r   Ú
row_vectorr·   °   s  € Ý˜EÑ"Ô"€HÝ˜˜qÑ!Ô!€EØ7Ð7˜U 1 2 2œYÐ7Ñ7Ô7€DØ3Ð3¨dÐ3Ñ3Ô3€JÝ˜%Ÿ+š+™-œ-Ñ(Ô(€NðØ
ðà,Ð5�s�s°#Ý)¨%Ñ0Ô0°1Ò4Ð4�s�s¸#Ý ,¨UÑ 3Ô 3Ð<˜˜¸Ý#,¨UÑ#3Ô#3µ{Ð#BÐ#B˜C˜CÈÝ#,¨UÑ#3Ô#3µ{Ð#BÐ#B˜C˜CÈÝ!Ð!KÐ!K°Ð!KÑ!KÔ!KÑKÔKÍcÐRSÕUXÐY]ÑU^ÔU^ÑN_ÔN_Ñ_ÝÐLÐL¨dÐLÑLÔLÑLÔLÍsÐSTÕVYÐZ^ÑV_ÔV_ÑO`ÔO`Ñ`Ý!$Ð$UÐ$U°:Ð$UÑ$UÔ$UÑ!UÔ!UÕX[Ð\]Õ_bÐcmÑ_nÔ_nÑXoÔXoÑ!oÝ!$Ð$UÐ$U°:Ð$UÑ$UÔ$UÑ!UÔ!UÕX[Ð\]Õ_bÐcmÑ_nÔ_nÑXoÔXoÑ!oÝ%(Ð(YÐ(Y°zÐ(YÑ(YÔ(YÑ%YÔ%YÕ\_Ð`aÕcfÐgqÑcrÔcrÑ\sÔ\sÑ%sÝ˜s H¨\Ô$:¸SÑ$@ÑAÔAðð ð ð r!   c                óŠ   — t          | ¦  «        }|d         dk    rdS |d         dk    p|d         dk    }t          |¦  «        S )Nrƒ   r   Fr‰   g      @r…   çš™™™™™É?©r“   r1   )r”   r²   Úshort_or_sparses      r   Úheader_candidate_rowr¼   Æ   sR   € Ý˜CÑ Ô €HØÐ Ô! QÒ&Ð&ØˆuØ˜|Ô,°Ò3ÐV°xÀÔ7NÐRVÒ7V€OÝ�Ñ Ô Ð r!   c                ó^  — t          | ¦  «        }|d         dk    rdS d„ | D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }t          |¦  «        dk    o0t          |¦  «        t          dt          |¦  «        d	z  ¦  «        k    }|d
         dk    p|d         dk    }t          |p|¦  «        S )Nr‚   r   Fc                ó6   — g | ]}|                      ¦   «         ‘ŒS rb   r�   rd   s     r   re   z+grouped_header_scaffold.<locals>.<listcomp>Ò   s    € Ð*Ð*Ð*˜dˆT�ZŠZ‰\Œ\Ð*Ð*Ð*r!   c                ó   — g | ]}|¯|‘ŒS rb   rb   rd   s     r   re   z+grouped_header_scaffold.<locals>.<listcomp>Ó   s   € Ð/Ð/Ð/˜¨$Ð/�Ð/Ð/Ð/r!   c                ó6   — h | ]}|                      ¦   «         ’ŒS rb   )rR   rd   s     r   ú	<setcomp>z*grouped_header_scaffold.<locals>.<setcomp>Ô   s    € Ð9Ð9Ð9¨�t—z’z‘|”|Ð9Ð9Ð9r!   é   r   é   r…   r¹   r„   çffffffæ?)r“   rQ   r7   r1   )r”   r²   r^   r’   Úunique_nonemptyÚrepeated_labelsÚsparse_labelss          r   Úgrouped_header_scaffoldrÈ   Î   sÉ   € Ý˜CÑ Ô €HØ�Ô Ò"Ð"ØˆuØ*Ð* cÐ*Ñ*Ô*€EØ/Ð/ Ð/Ñ/Ô/€HØ9Ð9°Ð9Ñ9Ô9€OÝ˜(‘m”m qÒ(Ð_­S°Ñ-AÔ-AÅSÈÍCÐPXÉMÌMÐ]^ÑL^ÑE_ÔE_Ò-_€OØ˜]Ô+¨tÒ3ÐY°xÐ@PÔ7QÐUYÒ7Y€MÝ�Ð0 Ñ1Ô1Ð1r!   c                óš   — t          | ¦  «        }t          |d         dk    o#|d         dk    o|d         dk    o|d         dk    ¦  «        S )Nr§   r   r¨   r«   çffffffÖ?r†   ç      Ð?©r·   r1   ©r”   Úvectors     r   Údata_row_likerÏ   Ú   se   € Ý˜‰_Œ_€FÝØˆ}Ô Ò!ð 	,Ø�?Ô# qÒ(ð	,àÐ'Ô(¨DÒ0ð	,ð �?Ô# tÒ+ñ	ô ð r!   c                ój   — t          | ¦  «        }t          |d         dk    o|d         dk    ¦  «        S )Nr†   rÄ   r‡   rÊ   rÌ   rÍ   s     r   Údense_numeric_row_likerÑ   ä   s4   € Ý˜‰_Œ_€FÝ��Ô'¨4Ò/ÐQ°F¸=Ô4IÈTÒ4QÑRÔRÐRr!   c                ó|   — d„ | D ¦   «         }|sdS t          d„ |D ¦   «         ¦  «        t          |¦  «        z  dk    S )Nc                óT   — g | ]%}|                      ¦   «         ¯t          |¦  «        ‘Œ&S rb   rc   rd   s     r   re   z*money_or_percent_heavy.<locals>.<listcomp>ê   s+   € Ð=Ð=Ð= °·
²
±´Ð=�Y�t‰_Œ_Ð=Ð=Ð=r!   Fc              3  ó"   K  — | ]
}|d v ¯dV — ŒdS )>   r	   r   r   Nrb   rp   s     r   r   z)money_or_percent_heavy.<locals>.<genexpr>í   s-   è è € ÐCÐC�T dÐ.BÐ&BÐ&BˆqÐ&BÐ&BÐ&BÐ&BÐCÐCr!   rË   ©r#   rQ   )r”   Útypess     r   Úmoney_or_percent_heavyr×   é   sP   € Ø=Ð=¨Ð=Ñ=Ô=€EØð ØˆuÝÐCÐC˜UÐCÑCÔCÑCÔCÅcÈ%ÁjÄjÑPÐTXÒXÐXr!   r‘   c                ó„   — d„ | dd …         D ¦   «         }|sdS t          d„ |D ¦   «         ¦  «        t          |¦  «        z  S )Nc                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   r�   ©r   Úcells     r   re   z*rest_date_period_ratio.<locals>.<listcomp>ñ   ó%   € Ð5Ð5Ð5�T¨¯
ª
©¬Ð5ˆDÐ5Ð5Ð5r!   r   rf   c              3  ó@   K  — | ]}t          |¦  «        d k    ¯dV — ŒdS rz   r�   rÚ   s     r   r   z)rest_date_period_ratio.<locals>.<genexpr>ô   s2   è è € ÐFÐF�T¥Y¨t¡_¤_¸Ò%EÐ%EˆqÐ%EÐ%EÐ%EÐ%EÐFÐFr!   rÕ   )r”   r´   s     r   Úrest_date_period_ratiorÞ   ð   sR   € Ø5Ð5˜S   œWÐ5Ñ5Ô5€DØð ØˆsÝÐFÐF˜TÐFÑFÔFÑFÔFÍÈTÉÌÑRÐRr!   c                óx   — t          | ¦  «        }t          |d         dk    pt          | ¦  «        dk    ¦  «        S )Nrk   rË   rÊ   )r“   r1   rÞ   ©r”   r²   s     r   Úfirst_row_period_restore_guardrá   ÷   s=   € Ý˜CÑ Ô €HÝ�Ð1Ô2°dÒ:ÐaÕ>TÐUXÑ>YÔ>YÐ]aÒ>aÑbÔbÐbr!   c                óŽ  ‡— d„ | dd …         D ¦   «         }|sdS d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        t          |¦  «        z  }t          d„ |D ¦   «         ¦  «        }d                     | ¦  «                             ¦   «         Št          ˆfd„t
          D ¦   «         ¦  «        }t          |d	k    s|o| ¦  «        S )
Nc                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   r�   rÚ   s     r   re   z8first_row_date_or_unit_restore_guard.<locals>.<listcomp>ý   rÜ   r!   r   Fc                ó,   — g | ]}t          |¦  «        ‘ŒS rb   r�   rÚ   s     r   re   z8first_row_date_or_unit_restore_guard.<locals>.<listcomp>   rž   r!   c              3  ó"   K  — | ]
}|d v ¯dV — ŒdS )>   r   r   r   Nrb   rp   s     r   r   z7first_row_date_or_unit_restore_guard.<locals>.<genexpr>  s-   è è € ÐTÐT˜d°DÐ<SÐ4SÐ4S˜Ð4SÐ4SÐ4SÐ4SÐTÐTr!   c              3  ó   K  — | ]}|d v V — Œ	dS )>   r	   r   Nrb   rp   s     r   r   z7first_row_date_or_unit_restore_guard.<locals>.<genexpr>  s(   è è € ÐOÐO¸D˜4Ð#7Ð7ÐOÐOÐOÐOÐOÐOr!   rA   c              3  ó    •K  — | ]}|‰v V — Œ	d S r-   rb   )r   ÚtermÚrow_texts     €r   r   z7first_row_date_or_unit_restore_guard.<locals>.<genexpr>  s(   øè è € Ð@Ð@¨�4˜8Ð#Ð@Ð@Ð@Ð@Ð@Ð@r!   ç      à?)r#   rQ   ÚanyrO   rR   Ú_UNIT_ROW_TERMSr1   )r”   r´   rµ   Údp_unit_ratioÚmoney_or_percentÚunit_rowré   s         @r   Ú$first_row_date_or_unit_restore_guardrð   ü   sä   ø€ Ø5Ð5˜S   œWÐ5Ñ5Ô5€DØð ØˆuØ3Ð3¨dÐ3Ñ3Ô3€JÝÐTÐT jÐTÑTÔTÑTÔTÕWZÐ[eÑWfÔWfÑf€MÝÐOÐOÀJÐOÑOÔOÑOÔOÐØ�xŠx˜‰}Œ}×"Ò"Ñ$Ô$€HÝÐ@Ð@Ð@Ð@µÐ@Ñ@Ô@Ñ@Ô@€HÝ� $Ò&Ð2¨(ÐLÐ<LÐ8LÑMÔMÐMr!   c                óš   — g }t          | ¦  «        r|                     d¦  «         t          | ¦  «        r|                     d¦  «         |S )NÚfirst_row_period_restoreÚfirst_row_date_or_unit_restore)rá   Úappendrð   )r”   Úguardss     r   Úfirst_row_restore_guardsrö     sR   € Ø€FÝ% cÑ*Ô*ð 2Ø�ŠÐ0Ñ1Ô1Ð1Ý+¨CÑ0Ô0ð 8Ø�ŠÐ6Ñ7Ô7Ð7Ø€Mr!   Úrowsúlist[list[str]]c                ó  — t          | ¦  «        dk     rdS | d         }d„ |D ¦   «         }|r t                               |d         ¦  «        sdS t          |¦  «        }t	          |d         dk    p|d         dk    ¦  «        S )	NrÂ   Fr   c                ób   — g | ],}|¯|                      ¦   «         ¯|                      ¦   «         ‘Œ-S rb   r�   rÚ   s     r   re   z0headerless_dotted_enum_guard.<locals>.<listcomp>  s2   € ÐCÐCÐC˜d¨TÐC°d·j²j±l´lÐCˆT�ZŠZ‰\Œ\ÐCÐCÐCr!   ri   rË   r‰   g      @)rQ   Ú_DOTTED_ENUM_REr6   r“   r1   )r÷   r”   Úcellsr²   s       r   Úheaderless_dotted_enum_guardrý     sŽ   € Ý
ˆ4�y„y�1‚}€}ØˆuØ
ˆqŒ'€CØCÐC cÐCÑCÔC€EØð �×.Ò.¨u°Q¬xÑ8Ô8ð ØˆuÝ˜CÑ Ô €HÝ�Ð/Ô0°DÒ8ÐY¸HÀ\Ô<RÐVYÒ<YÑZÔZÐZr!   c                ó0  — t          | ¦  «        }|d         dk    s|d         dk    rdS g }d„ | dd …         D ¦   «         D ]<}t          j        d|¦  «        s dS |                     t	          |¦  «        ¦  «         Œ=t          |¦  «        dk     rdS |t          |¦  «        k    }t          t          |¦  «        ¦  «        t          |¦  «        k    }t          |¦  «        t          |¦  «        z
  t          |¦  «        dz
  k    }t          |o|o|¦  «        S )	Nrª   r   r©   Fc                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rb   r�   rd   s     r   re   z3simple_integer_enum_header_like.<locals>.<listcomp>#  s-   € ÐBÐBÐB $°T·Z²Z±\´\ÐB�—’‘”ÐBÐBÐBr!   r   ú\d{1,2}rÃ   )r·   r=   rU   rô   r   rQ   ÚsortedÚsetr7   r±   r1   )r”   rÎ   Úvaluesr   ÚorderedÚuniqueÚ
contiguouss          r   Úsimple_integer_enum_header_liker    s  € Ý˜‰_Œ_€FØÐ Ô! QÒ&Ð&¨&Ð1CÔ*DÀqÒ*HÐ*HØˆuØ€FØBÐB¨#¨a¨b¨b¬'ÐBÑBÔBð !ð !ˆÝŒ|˜J¨Ñ-Ô-ð 	Ø�5�5Ø�Š•c˜$‘i”iÑ Ô Ð Ð Ý
ˆ6�{„{�Q‚€ØˆuØ�˜v™œÒ&€GÝ•�V‘”ÑÔ¥ V¡¤Ò,€FÝ�V‘”�s 6™{œ{Ñ*­c°&©k¬k¸A©oÒ=€JÝ�Ð1˜FÐ1 zÑ2Ô2Ð2r!   Ú	candidateÚfollowing_rowsc                óœ  — d„ | D ¦   «         }t          |¦  «        dk     rdS t          d„ |D ¦   «         ¦  «        rdS t          d„ |D ¦   «         ¦  «        rdS t          d„ |D ¦   «         ¦  «        sdS d„ |D ¦   «         }d„ |D ¦   «         }t          |¦  «        t          |¦  «        z  d	k     rdS |st          |¦  «        d
k     rdS t          |¦  «        dk     rdS t          |¦  «        }t	          |d¦  «        }t          |¦  «        rdS |d         d         r2t          |¦  «        dk    rt	          |d¦  «        }t          |¦  «        S dS )zMA bracket/formula reference row under a grouped header, e.g. [3] = [1] * [2].c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rb   r�   rd   s     r   re   z5reference_formula_header_row_like.<locals>.<listcomp>1  s-   € ÐCÐCÐC °d·j²j±l´lÐC�—
’
‘”ÐCÐCÐCr!   rÂ   Fc              3  óH   K  — | ]}t          d „ |D ¦   «         ¦  «        V — ŒdS )c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r-   r   r   s     r   r   z>reference_formula_header_row_like.<locals>.<genexpr>.<genexpr>4  s*   è è € Ð/Ð/ $ˆt�|Š|‰~Œ~Ð/Ð/Ð/Ð/Ð/Ð/r!   N)rë   rd   s     r   r   z4reference_formula_header_row_like.<locals>.<genexpr>4  s9   è è € Ð
EÐ
E°D�3Ð/Ð/¨$Ð/Ñ/Ô/Ñ/Ô/Ð
EÐ
EÐ
EÐ
EÐ
EÐ
Er!   c              3  ó.   K  — | ]}d |v pd|v pd|v V — ŒdS )rL   r   ú,Nrb   rd   s     r   r   z4reference_formula_header_row_like.<locals>.<genexpr>6  s8   è è € Ð
LÐ
L¸4ˆC�4ˆKÐ5˜3 $˜;Ð5¨#°¨+Ð
LÐ
LÐ
LÐ
LÐ
LÐ
Lr!   c              3  óJ   K  — | ]}t                                |¦  «        V — Œd S r-   )Ú_REF_FORMULA_ALLOWED_RErZ   rd   s     r   r   z4reference_formula_header_row_like.<locals>.<genexpr>8  s1   è è € ÐHÐH°tÕ&×,Ò,¨TÑ2Ô2ÐHÐHÐHÐHÐHÐHr!   c                óF   — g | ]}t                                |¦  «        ¯|‘ŒS rb   )Ú_REF_TOKEN_REr6   rd   s     r   re   z5reference_formula_header_row_like.<locals>.<listcomp>:  s+   € ÐIÐIÐI˜$­m×.BÒ.BÀ4Ñ.HÔ.HÐI�ÐIÐIÐIr!   c                óp   — g | ]3}d |v ¯t          t                               |¦  «        ¦  «        dk    ¯1|‘Œ4S )ú=rÃ   )rQ   r  r/   rd   s     r   re   z5reference_formula_header_row_like.<locals>.<listcomp>;  sB   € ÐhÐhÐh˜d°#¸°+°+Å#Åm×F[ÒF[Ð\`ÑFaÔFaÑBbÔBbÐfgÒBgÐBg�TÐBgÐBgÐBgr!   ç      è?rM   rÃ   r   TÚsection_label_rowr   )rQ   rë   ÚallÚrow_profilesÚ"body_window_features_from_profilesÚbody_window_is_stable)r  r	  r’   Ú	ref_cellsÚformula_cellsÚfollowing_profilesÚbody_featuresÚshifteds           r   Ú!reference_formula_header_row_liker!  /  s�  € àCÐC¨ÐCÑCÔC€HÝ
ˆ8�}„}�qÒÐØˆuÝ
Ð
EÐ
E¸HÐ
EÑ
EÔ
EÑEÔEð ØˆuÝ
Ð
LÐ
LÀ8Ð
LÑ
LÔ
LÑLÔLð ØˆuÝÐHÐH¸xÐHÑHÔHÑHÔHð ØˆuØIÐI (ÐIÑIÔI€IØhÐh hÐhÑhÔh€MÝ
ˆ9�~„~�˜H™œÑ%¨Ò,Ð,ØˆuØð �S ™^œ^¨aÒ/Ð/ØˆuÝ
ˆ>ÑÔ˜QÒÐØˆuå% nÑ5Ô5ÐÝ6Ð7IÈ1ÑMÔM€MÝ˜]Ñ+Ô+ð ØˆtØ˜!ÔÐ0Ô1ð .µcÐ:LÑ6MÔ6MÐQRÒ6RÐ6RÝ4Ð5GÈÑKÔKˆÝ$ WÑ-Ô-Ð-Øˆ5r!   c                ó  — g }d}d„ | D ¦   «         }|D ][}t          j        d|¦  «        r#|                     t          |¦  «        ¦  «         Œ:t	          d„ |D ¦   «         ¦  «        r|dz  }ŒY dS t          |¦  «        dk     rdS t          t          |¦  «        ¦  «        }|t          t          |d         |d         dz   ¦  «        ¦  «        k    rdS |d         d	vrdS |t          d
t          |¦  «        dz  ¦  «        k    rdS dS )Nr   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rb   r�   rd   s     r   re   z/dense_integer_axis_row_like.<locals>.<listcomp>P  ó-   € Ð=Ð=Ð= °·
²
±´Ð=�—
’
‘”Ð=Ð=Ð=r!   r   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r-   r   r   s     r   r   z.dense_integer_axis_row_like.<locals>.<genexpr>T  s*   è è € Ð1Ð1 D�—’‘”Ð1Ð1Ð1Ð1Ð1Ð1r!   r   Fé   éÿÿÿÿ>   r   r   rM   T)r=   rU   rô   r   rë   rQ   r  r  ÚlistrD   r7   )r”   r  Úalpha_cellsr’   r   r  s         r   Údense_integer_axis_row_liker*  M  s"  € Ø€FØ€KØ=Ð=¨Ð=Ñ=Ô=€HØð ð ˆÝŒ<˜
 DÑ)Ô)ð 	Ø�MŠM�#˜d™)œ)Ñ$Ô$Ð$Ð$ÝÐ1Ð1¨DÐ1Ñ1Ô1Ñ1Ô1ð 	Ø˜1ÑˆKˆKà�5�5Ý
ˆ6�{„{�Q‚€ØˆuÝ•C˜‘K”KÑ Ô €FØ••e˜F 1œI v¨b¤z°A¡~Ñ6Ô6Ñ7Ô7Ò7Ð7ØˆuØˆa„y˜ÐÐØˆuØ•S˜�C ™MœM¨QÑ.Ñ/Ô/Ò/Ð/ØˆuØˆ4r!   c                óê   — t          | ¦  «        }|d         dk    rdS |d         dk    r|d         dk    p|d         dk    S |d	         d
k     rdS t          |d         dk    p|d         dk    ¦  «        S )Nrƒ   r   FrÃ   r‡   rê   rˆ   r¹   r…   rË   rº   rà   s     r   Ú#sparse_prefix_extension_prefix_liker,  d  s•   € Ý˜CÑ Ô €HØÐ Ô! QÒ&Ð&ØˆuØÐ Ô! QÒ&Ð&Ø˜Ô&¨$Ò.ÐW°(Ð;NÔ2OÐSWÒ2WÐWØ�Ô Ò%Ð%ØˆuÝ�˜Ô'¨4Ò/ÐX°8Ð<OÔ3PÐTXÒ3XÑYÔYÐYr!   c                óˆ  — t          | ¦  «        }t          | ¦  «        }|d         dk     rdS |d         dk    s|d         dk    rdS t          | ¦  «        rdS t          | |¦  «        rdS |d	         d
k    rdS t	          |d         |d         ¦  «        }|d         dk    p|dk    p|d         dk    }|sdS t          |¦  «        dk     rdS t          |¦  «        }t          |d¦  «        }t          |¦  «        sdS |d         dk    s|d	         dk    r"|d         dk    r|dk     rdS |d         dk    rdS d„ | D ¦   «         }t          |¦  «        }	|	sdS t          d„ |D ¦   «         ¦  «        |	z  }
t          d„ |D ¦   «         ¦  «        |	z  }|d	         dk    rt          | ¦  «        S |dk    r|
dk     rt          | ¦  «        S dS )Nrƒ   rÃ   Fr‰   g      @ri   rÊ   Trg   g333333ë?rˆ   rk   r‡   r3   r¹   rª   r   r†   rê   r©   c                óT   — g | ]%}|                      ¦   «         ¯t          |¦  «        ‘Œ&S rb   rc   rd   s     r   re   z/next_header_row_value_guard.<locals>.<listcomp>•  s+   € ÐCÐCÐC °d·j²j±l´lÐC�Y�t‰_Œ_ÐCÐCÐCr!   c              3  ó&   K  — | ]}|d k    ¯dV — ŒdS rz   rb   rp   s     r   r   z.next_header_row_value_guard.<locals>.<genexpr>™  s,   è è € ÐGÐG °¸Ò1FÐ1F˜!Ð1FÐ1FÐ1FÐ1FÐGÐGr!   c              3  ó"   K  — | ]
}|d v ¯dV — ŒdS )>   rD   r
   r   r   Nrb   rp   s     r   r   z.next_header_row_value_guard.<locals>.<genexpr>š  s-   è è € Ð!`Ð!`¨¸ÐA_Ð9_Ð9_ !Ð9_Ð9_Ð9_Ð9_Ð!`Ð!`r!   rË   )r“   r·   r×   r!  r7   rQ   r  r  r  r#   r  )r  r	  r²   rÎ   Údate_period_signalÚhas_label_signalr  r  rÖ   Ú
type_countÚdate_type_ratioÚcode_range_number_ratios               r   Únext_header_row_value_guardr6  o  sP  € Ý˜IÑ&Ô&€HÝ˜	Ñ"Ô"€FØÐ Ô! AÒ%Ð%ØˆuØ�Ô Ò#Ð# xÐ0FÔ'GÈ4Ò'OÐ'OØˆuÝ˜iÑ(Ô(ð ØˆuÝ(¨°NÑCÔCð ØˆtØÐ"Ô# dÒ*Ð*Øˆuõ ˜XÐ&9Ô:¸HÐE]Ô<^Ñ_Ô_Ðà�Ô 4Ò'ð 	*Ø Ò%ð	*àÐ$Ô%¨Ò)ð ð
 ð Øˆuå
ˆ>ÑÔ˜QÒÐØˆuÝ% nÑ5Ô5ÐÝ6Ð7IÈ1ÑMÔM€MÝ  Ñ/Ô/ð Øˆuà�Ô  DÒ(Ð(¨HÐ5GÔ,HÈDÒ,PÐ,PØÐ$Ô%¨Ò*Ð*Ð/AÀDÒ/HÐ/HØ�5ØÐ$Ô%¨Ò)Ð)Ø�5àCÐC¨ÐCÑCÔC€EÝ�U‘”€JØð ØˆuÝÐGÐG¨ÐGÑGÔGÑGÔGÈ*ÑT€OÝ!Ð!`Ð!`°Ð!`Ñ!`Ô!`Ñ`Ô`ÐcmÑmÐàÐ"Ô# dÒ*Ð*Ý.¨yÑ9Ô9Ð9Ø $Ò&Ð&¨?¸TÒ+AÐ+AÝ.¨yÑ9Ô9Ð9Øˆ4r!   Útop_header_rowsc                óÌ  — |dk    st          | ¦  «        dk     rdS | d         }| d         }t          |¦  «        }t          |¦  «        }|d         dk     rdS |d         dk     r|d         dk     rdS t          |¦  «        sdS |d	         dk     rdS |d
         dk    rdS t          |¦  «        rdS t	          | dd …         ¦  «        }t          |d¦  «        }t          |¦  «        S )Nr   rÂ   Fr   r…   rê   rƒ   rˆ   rh   rg   rÃ   )rQ   r“   r,  Úsection_label_row_liker  r  r  )r÷   r7  Úprefixr  Úprefix_featuresÚcandidate_featuresr  r  s           r   Ú*sparse_prefix_conservative_extension_guardr=  £  s  € Ø˜!ÒÐ�s 4™yœy¨1š}˜}ØˆuØ�!ŒW€FØ�Q”€IÝ" 6Ñ*Ô*€OÝ% iÑ0Ô0ÐØ�}Ô%¨Ò,Ð,ØˆuØÐ*Ô+¨aÒ/Ð/Ð4FÐGZÔ4[Ð^bÒ4bÐ4bØˆuÝ.¨vÑ6Ô6ð ØˆuØÐ,Ô-°Ò4Ð4ØˆuØÐ,Ô-°Ò5Ð5ØˆuÝ˜iÑ(Ô(ð ØˆuÝ% d¨1¨2¨2¤hÑ/Ô/ÐÝ6Ð7IÈ1ÑMÔM€MÝ  Ñ/Ô/Ð/r!   c                ó^   — |dk     s|t          | ¦  «        dz
  k    rdS t          | |¦  «        S )zNReturn True when the first body row should be included as a second header row.r   F)rQ   r=  )r÷   r7  s     r   Úsparse_prefix_next_header_guardr?  »  s6   € à˜ÒÐ˜oµ°T±´¸Q±Ò>Ð>ØˆuÝ5°d¸OÑLÔLÐLr!   c                óœ  — |dk    st          | ¦  «        dk     rdS t          d„ | D ¦   «         d¬¦  «        }|dk     rdS | d         }| d         }t          |¦  «        }t          |¦  «        }t          |¦  «        }t          |¦  «        |k     }t	          |d¦  «                             ¦   «         r|sdS t          |¦  «        |k     o0t          |¦  «        t          dt          |dz  ¦  «        ¦  «        k    }	t          |¦  «        s|d	         d
k    s|	sdS |d         t          dt          |dz  ¦  «        ¦  «        k     rdS |d         dk    s|d         d
k    rdS |d         dk     r|d         dk     rdS t          |¦  «        st          |¦  «        rdS t          | dd…         ¦  «        }
t          |
d¦  «        }t          |¦  «        S )zíPromote a leaf-label row under a sparse/grouped rowspan header scaffold.

    An empty first cell in the candidate row is the textual shadow of the row-0
    rowspan label; treat it as header only when later rows form a stable body.
    r   rÂ   Fc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r-   r˜   ©r   r”   s     r   r   z,rowspan_leaf_header_guard.<locals>.<genexpr>Ê  ó(   è è € Ð-Ð- •C˜‘H”HÐ-Ð-Ð-Ð-Ð-Ð-r!   r   ©ÚdefaultrÃ   rê   r…   rÊ   rƒ   çÍÌÌÌÌÌÜ?rg   rË   r†   r®   r‡   N)rQ   r7   r“   r·   r™   r4   r   rÈ   r9  rÑ   r  r  r  )r÷   r7  Úmax_colsr:  r  r;  r<  Úcandidate_vectorÚshifted_by_rowspanÚsparse_rowspan_prefixr  r  s               r   Úrowspan_leaf_header_guardrK  Â  s   € ð ˜!ÒÐ�s 4™yœy¨1š}˜}ØˆuÝÐ-Ð-¨Ð-Ñ-Ô-°qÐ9Ñ9Ô9€HØ�!‚|€|Øˆuà�!ŒW€FØ�Q”€IÝ" 6Ñ*Ô*€OÝ% iÑ0Ô0ÐÝ! )Ñ,Ô,ÐÝ˜Y™œ¨(Ò2ÐÝ�9˜aÑ Ô ×&Ò&Ñ(Ô(ð Ð1Cð ØˆuÝ ™KœK¨(Ò2Ðbµs¸6±{´{ÅcÈ!ÍSÐQYÐ\`ÑQ`ÑMaÔMaÑFbÔFbÒ7bÐÝ# FÑ+Ô+ð ¨¸}Ô/MÐQUÒ/UÐ/UÐYnÐ/UØˆuØÐ*Ô+­c°!µS¸ÀD¹Ñ5IÔ5IÑ.JÔ.JÒJÐJØˆuØÐ,Ô-°Ò4Ð4Ð8JÈ?Ô8[Ð^bÒ8bÐ8bØˆuØÐ/Ô0°4Ò7Ð7Ð<NÈ}Ô<]Ð`dÒ<dÐ<dØˆuÝ˜iÑ(Ô(ð Õ,BÀ9Ñ,MÔ,Mð Øˆuå% d¨1¨2¨2¤hÑ/Ô/ÐÝ6Ð7IÈ1ÑMÔM€MÝ  Ñ/Ô/Ð/r!   c                ó  — t          | ¦  «        }|d         dk     rdS |d         dk    o|d         dk    }|d         dk    p|d	         dk    }|d
         dk    p|d         dk    }t          |o|o|ot          | ¦  «         ¦  «        S )Nrƒ   rÃ   Frª   r   r©   r«   rê   r­   r†   rÊ   rg   )r·   r1   rÈ   )r”   rÎ   Úfirst_is_labelÚrest_is_valuesÚvalue_heavys        r   Úleading_body_record_likerP  ç  s¯   € Ý˜‰_Œ_€FØÐÔ !Ò#Ð#ØˆuØÐ.Ô/°!Ò3ÐW¸Ð?QÔ8RÐVWÒ8W€NØÐ0Ô1°TÒ9Ðd¸VÐD[Ô=\Ð`dÒ=d€NØ˜Ô)¨TÒ1ÐW°VÐ<NÔ5OÐSWÒ5W€KÝ�Ðf >Ðf°kÐfÕJaÐbeÑJfÔJfÐFfÑgÔgÐgr!   c                óš   — t          | ¦  «        }t          |d         dk    o#|d         dk    o|d         dk    o|d         dk    ¦  «        S )	Nrƒ   rM   ri   r3   rg   r¹   r…   rÊ   rÌ   rÍ   s     r   Úleading_long_form_row_likerR  ñ  sg   € Ý˜‰_Œ_€FÝØÐÔ  AÒ%ð 	*ØÐ)Ô*¨dÒ2ð	*àÐ%Ô&¨$Ò.ð	*ð �=Ô! TÒ)ñ	ô ð r!   c                ó\  — t          | ¦  «        dk     rdS t          | ¦  «        }t          | d¦  «                             ¦   «         }d„ | D ¦   «         }t	          |od„ | dd …         D ¦   «          ¦  «        }|d         dk    o|d	         d
k    o|d         dk    }t	          |p|o|¦  «        S )NrÃ   Fr   c                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   r�   rd   s     r   re   z*section_label_row_like.<locals>.<listcomp>   s%   € Ð5Ð5Ð5˜¨¯
ª
©¬Ð5�Ð5Ð5Ð5r!   c                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rb   r�   rd   s     r   re   z*section_label_row_like.<locals>.<listcomp>  s%   € Ð$NÐ$NÐ$N¨dÀÇÂÁÄÐ$N TÐ$NÐ$NÐ$Nr!   r   rƒ   rÂ   r…   ç333333ã?r‡   rê   )rQ   r“   r™   r4   r1   )r”   r²   r³   r’   Ú
first_onlyÚsparse_labels         r   r9  r9  û  sÎ   € Ý
ˆ3�x„x�!‚|€|ØˆuÝ˜CÑ Ô €HÝ˜˜QÑÔ×%Ò%Ñ'Ô'€EØ5Ð5 Ð5Ñ5Ô5€HÝ�eÐNÐ$NÐ$N°c¸!¸"¸"´gÐ$NÑ$NÔ$NÐ NÑOÔO€JàÐ!Ô" aÒ'ð 	,Ø�]Ô# tÒ+ð	,à�]Ô# tÒ+ð õ
 �
Ð9˜xÐ8¨LÑ:Ô:Ð:r!   c                óÔ   — t          | ¦  «        sdS d„ t          | ¦  «        D ¦   «         }t          t          |¦  «        dk    o|d         dk    ot          | ¦  «        dk    ¦  «        S )NFc                ó@   — g | ]\  }}|                      ¦   «         ¯|‘ŒS rb   r�   )r   Úidxr   s      r   re   z3centered_section_label_row_like.<locals>.<listcomp>  s)   € ÐLÐLÐL¡	  T¸t¿zºz¹|¼|ÐL˜ÐLÐLÐLr!   r   r   rÂ   )r9  Ú	enumerater1   rQ   )r”   Únonempty_indicess     r   Úcentered_section_label_row_liker^  
  sm   € Ý! #Ñ&Ô&ð ØˆuØLÐL­Y°s©^¬^ÐLÑLÔLÐÝ•Ð$Ñ%Ô%¨Ò*ÐXÐ/?ÀÔ/BÀQÒ/FÐXÍ3ÈsÉ8Ì8ÐWXÊ=ÑYÔYÐYr!   ú	list[int]c                ó  — g }t          | d|…         ¦  «        D ]d\  }}|dk    st          |¦  «        sŒd„ |D ¦   «         }t          |¦  «        dk    rŒ;t          |¦  «        dk     rŒO|                     |¦  «         Œe|S )zGReturn sparse section-label rows inside the detected top header prefix.Nr   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rb   r�   rd   s     r   re   z'section_header_rows.<locals>.<listcomp>  s-   € ÐAÐAÐA T°D·J²J±L´LÐA�D—J’J‘L”LÐAÐAÐAr!   r   rÃ   )r\  r^  rQ   rô   )r÷   r7  Úsection_rowsÚrow_idxr”   r’   s         r   Úsection_header_rowsrd    sœ   € à€LÝ! $Ð'7¨Ð'7Ô"8Ñ9Ô9ð %ð %‰ˆ�Ø�aŠ<ˆ<Õ>¸sÑCÔCˆ<ØØAÐA¨SÐAÑAÔAˆÝˆx‰=Œ=˜AÒÐØÝˆs‰8Œ8�aŠ<ˆ<ØØ×Ò˜GÑ$Ô$Ð$Ð$ØÐr!   Úindexúdict[str, Any]c                ó  — t          | ¦  «        }t          | ¦  «        }|d         dk    o#|d         dk    o|d         dk    o|d         dk    }|d         dk    o|d	         dk    }|d
         dk    o/|d         dk    o#|d         dk    o|d         dk    o|d         dk    }|rd}d}d}|||d         dk    ||||p|p||t          | ¦  «        t          | ¦  «        t	          | ¦  «        t          | ¦  «        t          | ¦  «        dœS )Nr§   r   r¨   r«   rÊ   r†   rË   rÄ   r‡   rª   r©   r¯   rê   rg   r…   Frƒ   )re  rÎ   r’   Úbody_value_rowÚbody_dense_rowÚbody_long_form_rowÚbody_like_rowÚcoordinate_header_rowÚleading_body_record_rowÚleading_long_form_rowr  rÈ   Úheader_candidate)r·   r*  rP  rR  r9  rÈ   r¼   )r”   re  rÎ   rl  rh  ri  rj  s          r   Úrow_profilerp     sw  € Ý˜‰_Œ_€FÝ7¸Ñ<Ô<Ðàˆ}Ô Ò!ð 	,Ø�?Ô# qÒ(ð	,àÐ'Ô(¨DÒ0ð	,ð �?Ô# tÒ+ð	 ð ˜OÔ,°Ò4ÐV¸ÀÔ9NÐRVÒ9V€NàÐ!Ô" QÒ&ð 	*ØÐ%Ô&¨!Ò+ð	*àÐ.Ô/°4Ò7ð	*ð Ð%Ô&¨$Ò.ð	*ð �=Ô! TÒ)ð ð ð #ØˆØˆØ"ÐàØØÐ+Ô,¨qÒ0Ø(Ø(Ø0Ø'ÐO¨>ÐOÐ=OØ!6Ý#;¸CÑ#@Ô#@Ý!;¸CÑ!@Ô!@Ý3°CÑ8Ô8Ý#:¸3Ñ#?Ô#?Ý0°Ñ5Ô5ðð ð r!   úlist[dict[str, Any]]c                ó4   — d„ t          | ¦  «        D ¦   «         S )Nc                ó4   — g | ]\  }}t          ||¦  «        ‘ŒS rb   )rp  )r   re  r”   s      r   re   z row_profiles.<locals>.<listcomp>G  s&   € ÐFÐFÐF©
¨¨s�K˜˜UÑ#Ô#ÐFÐFÐFr!   )r\  )r÷   s    r   r  r  F  s   € ØFÐFµiÀ±o´oÐFÑFÔFÐFr!   Úvectorsúlist[dict[str, float]]c                ó"  — | sddddddddddddddœS t          t          | ¦  «        ¦  «        t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d	„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d
„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  t          d„ | D ¦   «         ¦  «        t          | ¦  «        z  dœS )Nrf   )ÚcountÚfirst_label_ratior«   r†   r‡   r°   Úbody_row_ratioÚdense_numeric_row_ratioÚlong_form_row_ratiorg   r­   r¯   ri   c              3  óJ   K  — | ]}|d          dk    ¯|d         dk    ¯dV — ŒdS )rª   r   r©   r   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>]  sE   è è € Ð yÐ y t¸$Ð?QÔ:RÐUVÒ:VÐ:VÐ[_Ð`rÔ[sÐwxÒ[xÐ[x Ð[xÐ[xÐ[xÐ[xÐ yÐ yr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r«   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>_  s(   è è € Ð!QÐ!QÀ $Ð';Ô"<Ð!QÐ!QÐ!QÐ!QÐ!QÐ!Qr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r†   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>`  s'   è è € ÐGÐG°t˜T /Ô2ÐGÐGÐGÐGÐGÐGr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r‡   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>a  s'   è è € ÐCÐC°4˜4 Ô.ÐCÐCÐCÐCÐCÐCr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r°   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>b  s(   è è € ÐKÐK¸4˜tÐ$5Ô6ÐKÐKÐKÐKÐKÐKr!   c              3  ó&   K  — | ]}|d          V — ŒdS )rg   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>c  s(   è è € ÐMÐM¸T Ð%7Ô 8ÐMÐMÐMÐMÐMÐMr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r­   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>d  s(   è è € Ð$WÐ$WÀt TÐ*AÔ%BÐ$WÐ$WÐ$WÐ$WÐ$WÐ$Wr!   c              3  ó&   K  — | ]}|d          V — ŒdS )r¯   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>e  s(   è è € Ð(_Ð(_Èt¨Ð.IÔ)JÐ(_Ð(_Ð(_Ð(_Ð(_Ð(_r!   c              3  ó&   K  — | ]}|d          V — ŒdS )ri   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>f  s(   è è € Ð#UÐ#UÀT DÐ)?Ô$@Ð#UÐ#UÐ#UÐ#UÐ#UÐ#Ur!   c              3  óª   K  — | ]N}|d          dk    r$|d         dk    r|d         dk    r|d         dk    s|d         dk    ¯>|d         dk    ¯Jd	V — ŒOd
S )r§   r   r¨   r«   rÊ   r†   rË   rÄ   r‡   r   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>g  s‘   è è € ð 

ð 

àà�]Ô# aÒ'Ð'Ø˜Ô)¨QÒ.Ð.ØÐ-Ô.°$Ò6Ð6Ø˜Ô)¨TÒ1Ð1à�_Ô%¨Ò-Ð-°$°}Ô2EÈÒ2MÐ2Mð ð 3NÐ2MÐ2MÐ2Mð

ð 

r!   c              3  óJ   K  — | ]}|d          dk    ¯|d         dk    ¯dV — ŒdS )r†   rÄ   r‡   rÊ   r   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>s  sJ   è è € ð '
ð '
Ø T¨/Ô%:¸dÒ%BÐ%BÀtÈMÔGZÐ^bÒGbÐGbˆAÐGbÐGbÐGbÐGbð'
ð '
r!   c              3  ó’   K  — | ]B}|d          dk    r4|d         dk    r(|d         dk    r|d         dk    r|d         dk    ¯>d	V — ŒCd
S )rª   r   r©   r¯   rê   rg   rË   r…   rÊ   r   Nrb   rp   s     r   r   z'combine_body_vectors.<locals>.<genexpr>w  s„   è è € ð 
#
ð 
#
ààÐ'Ô(¨1Ò,Ð,ØÐ+Ô,°Ò1Ð1ØÐ4Ô5¸Ò=Ð=ØÐ+Ô,°Ò4Ð4Ø˜Ô'¨4Ò/Ð/ð ð 0Ð/Ð/Ð/ð
#
ð 
#
r!   )rw  rx  r«   r†   r‡   r°   rg   r­   r¯   ri   ry  rz  r{  )r‘   rQ   r#   )rt  s    r   Úcombine_body_vectorsrˆ  J  sw  € Øð 
àØ!$Ø"%Ø ØØ"Ø!Ø'*Ø#&Ø #Ø%(Ø),Ø$'ð
ð 
ð 	
õ  •s˜7‘|”|Ñ$Ô$Ý Ð yÐ y¨wÐ yÑ yÔ yÑyÔyÝ
ˆg‰,Œ,ñå!Ð!QÐ!QÈÐ!QÑ!QÔ!QÑQÔQÕTWÐX_ÑT`ÔT`Ñ`ÝÐGÐG¸wÐGÑGÔGÑGÔGÍ#ÈgÉ,Ì,ÑVÝÐCÐC¸7ÐCÑCÔCÑCÔCÅcÈ'ÁlÄlÑRÝÐKÐKÀ7ÐKÑKÔKÑKÔKÍcÐRYÉlÌlÑZÝÐMÐMÀWÐMÑMÔMÑMÔMÕPSÐT[ÑP\ÔP\Ñ\Ý!$Ð$WÐ$WÈwÐ$WÑ$WÔ$WÑ!WÔ!WÕZ]Ð^eÑZfÔZfÑ!fÝ%(Ð(_Ð(_ÐW^Ð(_Ñ(_Ô(_Ñ%_Ô%_ÕbeÐfmÑbnÔbnÑ%nÝ #Ð#UÐ#UÈWÐ#UÑ#UÔ#UÑ UÔ UÕX[Ð\cÑXdÔXdÑ dÝð 

ð 

àð

ñ 

ô 

ñ 

ô 

õ ˆg‰,Œ,ñõ $'ð '
ð '
Ø!ð'
ñ '
ô '
ñ $
ô $
õ ˆg‰,Œ,ñ$õ  #ð 
#
ð 
#
àð
#
ñ 
#
ô 
#
ñ 
 
ô 
 
õ ˆg‰,Œ,ñ ð9(ð (ð (r!   rM   ÚprofilesÚstartÚsizec                óN   — d„ | |||z   …         D ¦   «         }t          |¦  «        S )Nc                ó.   — g | ]}|d          ¯
|d         ‘ŒS )r’   rÎ   rb   ©r   Úprofiles     r   re   z6body_window_features_from_profiles.<locals>.<listcomp>‰  s)   € ÐfÐfÐf WÐRYÐZdÔReÐfˆw�xÔ ÐfÐfÐfr!   )rˆ  )r‰  rŠ  r‹  rt  s       r   r  r  †  s4   € ð gÐf°¸ÀÈÁÐ9MÔ0NÐfÑfÔf€GÝ Ñ(Ô(Ð(r!   r²   c                ó2  — | d         dk     rdS | d         dk    o| d         dk    o| d         d	k    }| d
         dk    o| d         dk    o| d         dk    }| d         dk    o/| d         dk    o#| d         dk    o| d         dk    o| d         dk    }|p|p|S )Nrw  rÃ   Fry  rê   r«   rF  rx  rÊ   rz  r†   rV  r‡   gš™™™™™á?r{  r¯   rg   rË   rb   )r²   Ú
value_bodyÚdense_numeric_bodyÚlong_form_bodys       r   r  r  �  s   € Ø�Ô˜1ÒÐØˆuàÐ!Ô" dÒ*ð 	2ØÐ)Ô*¨dÒ2ð	2àÐ(Ô)¨TÒ1ð ð 	Ð*Ô+¨tÒ3ð 	,Ø�_Ô%¨Ò-ð	,à�]Ô# tÒ+ð ð 	Ð&Ô'¨4Ò/ð 	.ØÐ(Ô)¨TÒ1ð	.àÐ0Ô1°TÒ9ð	.ð Ð'Ô(¨DÒ0ð	.ð �_Ô%¨Ò-ð ð Ð=Ð+Ð=¨~Ð=r!   Ú
header_rowr  c                óš  — t          | ¦  «        }d}|t          |d         |d         z
  ¦  «        z  }|t          |d         |d         z
  ¦  «        z  }|t          |d         |d         z
  ¦  «        z  }|t          |d         |d         z
  ¦  «        z  }|dt          |d         |d         z
  ¦  «        z  z  }|d	         d
k    r|dz  }|S )Nrf   r†   r‡   r«   r§   rx  rê   r°   r…   r¹   rË   )r·   Úabs)r”  r  ÚheaderÚdistances       r   Úboundary_distancer™  ¤  sâ   € Ý˜
Ñ#Ô#€FØ€HØ•�F˜?Ô+¨m¸OÔ.LÑLÑMÔMÑM€HØ•�F˜=Ô)¨M¸-Ô,HÑHÑIÔIÑI€HØ•�FÐ/Ô0°=ÐAUÔ3VÑVÑWÔWÑW€HØ•�F˜=Ô)¨MÐ:MÔ,NÑNÑOÔOÑO€HØ�•c˜&Ð!2Ô3°mÐDUÔ6VÑVÑWÔWÑWÑW€HØˆmÔ Ò$Ð$Ø�DÑˆØ€Or!   Ú
body_startc                óô  ‡ — g }|dk    rdS |dk    rdS |d|…         }|sdS t          ˆ fd„|D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }g }|D ]‘}	|	d         sŒt          |	d         ¦  «        }
|oB|
|dz
  k    o9|	d	         o1|	d
          o(|	d         d         dk    o|
dk    o||
dz
           d	         }t          ‰ |
         ¦  «        s|s|                     |	¦  «         Œ’t          d„ |D ¦   «         ¦  «        r|s|r|                     d¦  «         n|r|                     d¦  «         t          d„ |D ¦   «         ¦  «        r|                     d¦  «         t          d„ |D ¦   «         ¦  «        s|                     d¦  «         ||dz
           }||dz
           }t          ‰ |dz
           |¦  «        }|dk    rA|d         d         dk    r/|d         d         dk    r|d         s|                     d¦  «         |d         r|d         s|                     d¦  «         |d         d         dk     r|d         s|                     d¦  «         |d k     r|                     d!¦  «         | S )"Nr   Tr&  Fc              3  óN   •K  — | ]}t          ‰|d                   ¦  «        V — Œ dS )re  N)r^  )r   r�  r÷   s     €r   r   z#header_prefix_ok.<locals>.<genexpr>Á  s7   øè è € Ð {Ð {Ð]dÕ!@ÀÀgÈgÔFVÔAWÑ!XÔ!XÐ {Ð {Ð {Ð {Ð {Ð {r!   c              3  óB   K  — | ]}|                      d d¦  «        V — ŒdS )rl  FN©ÚgetrŽ  s     r   r   z#header_prefix_ok.<locals>.<genexpr>Â  s1   è è € ÐjÐjÈG˜GŸKšKÐ(?ÀÑGÔGÐjÐjÐjÐjÐjÐjr!   r  re  ro  rk  rÎ   rƒ   rÂ   c              3  ó&   K  — | ]}|d          V — ŒdS )r  Nrb   rŽ  s     r   r   z#header_prefix_ok.<locals>.<genexpr>Ó  s(   è è € Ð
JÐ
J¨Gˆ7Ð&Ô'Ð
JÐ
JÐ
JÐ
JÐ
JÐ
Jr!   Úsection_label_before_bodyc              3  ó&   K  — | ]}|d          V — ŒdS )rk  Nrb   rŽ  s     r   r   z#header_prefix_ok.<locals>.<genexpr>Ø  s'   è è € Ð
FÐ
F¨ˆ7�?Ô#Ð
FÐ
FÐ
FÐ
FÐ
FÐ
Fr!   Úbody_like_row_before_bodyc              3  ó&   K  — | ]}|d          V — ŒdS )ro  Nrb   rŽ  s     r   r   z#header_prefix_ok.<locals>.<genexpr>Ú  s(   è è € ÐMÐM¨wˆwÐ)Ô*ÐMÐMÐMÐMÐMÐMr!   Ú non_header_candidate_before_bodyrÃ   r¦   r   r†   rf   rÈ   Ú(numeric_first_row_without_group_scaffoldri  Ú&dense_candidate_without_group_scaffoldr‡   r¹   Ú*low_alpha_candidate_without_group_scaffoldgÍÌÌÌÌÌð?Úweak_header_body_contrast)r  rë   r   r^  rô   r™  )r÷   r‰  rš  r  ÚreasonsÚcandidate_profilesÚallowed_section_prefixÚcoordinate_prefixÚdisallowed_section_profilesr�  r[  Úsparse_coordinate_tailÚpreviousÚlast_candidateÚcontrasts   `              r   Úheader_prefix_okr³  ±  s?  ø€ ð €GØ�Q‚€ØˆtØ�A‚~€~Øˆuà! ! J ,Ô/ÐØð Øˆtå Ð {Ð {Ð {Ð {ÐhzÐ {Ñ {Ô {Ñ{Ô{ÐÝÐjÐjÐWiÐjÑjÔjÑjÔjÐØ"$ÐØ%ð 8ð 8ˆØÐ*Ô+ð 	ØÝ�'˜'Ô"Ñ#Ô#ˆàð 6Ø�z A‘~Ò%ð6àÐ*Ô+ð6ð ˜OÔ,Ð,ð6ð ˜Ô!Ð"2Ô3°qÒ8ð	6ð
 �a’ð6ð ˜˜q™Ô!Ð"4Ô5ð 	õ /¨t°C¬yÑ9Ô9ð 	8ÐBXð 	8Ø'×.Ò.¨wÑ7Ô7Ð7øÝ
Ð
JÐ
JÐ7IÐ
JÑ
JÔ
JÑJÔJð 4ÐSið 4Ø&ð 	8Ø�NŠNÐ6Ñ7Ô7Ð7øØ	$ð 4Ø�ŠÐ2Ñ3Ô3Ð3Ý
Ð
FÐ
FÐ3EÐ
FÑ
FÔ
FÑFÔFð 4Ø�ŠÐ2Ñ3Ô3Ð3ÝÐMÐMÐ:LÐMÑMÔMÑMÔMð ;Ø�ŠÐ9Ñ:Ô:Ð:à˜
 Q™Ô'€HØ˜j¨1™nÔ-€NÝ   j°1¡nÔ!5°}ÑEÔE€Hà�aŠˆØ˜8Ô$ ]Ô3°qÒ8Ð8Ø˜8Ô$ _Ô5¸Ò;Ð;ØÐ2Ô3ð <ð 	�ŠÐAÑBÔBÐBØÐ&Ô'ð A°Ð9RÔ0Sð AØ�ŠÐ?Ñ@Ô@Ð@Ø�hÔ Ô.°Ò5Ð5¸hÐG`Ô>aÐ5Ø�ŠÐCÑDÔDÐDØ�$‚€Ø�ŠÐ2Ñ3Ô3Ð3àˆ;Ðr!   c           	     óL  — g }t          dt          | ¦  «        dz
  ¦  «        }t          d|dz   ¦  «        D ]m}t          | |¦  «        }| |         d         }|ot	          |¦  «        }t          d„ | d|…         D ¦   «         ¦  «        }|                     |||||dœ¦  «         Œn|S )Nr&  rÃ   r   rk  c              3  óT   K  — | ]#}|d          o|                      dd¦  «         V — Œ$dS )rk  rl  FNrž  rŽ  s     r   r   z(body_start_candidates.<locals>.<genexpr>ú  sS   è è € ð 
ð 
àð �OÔ$ÐX¨W¯[ª[Ð9PÐRWÑ-XÔ-XÐ)Xð
ð 
ð 
ð 
ð 
ð 
r!   )rš  Ú	body_likeÚstart_row_body_likeÚprior_body_seenÚbody)r±   rQ   rD   r  r  rë   rô   )r‰  Ú
candidatesÚ	max_startrŠ  r  r·  Ústabler¸  s           r   Úbody_start_candidatesr½  ñ  så   € ð €JÝ�A•s˜8‘}”} qÑ(Ñ)Ô)€IÝ�q˜) a™-Ñ(Ô(ð 
ð 
ˆÝ:¸8ÀUÑKÔKˆØ& uœo¨oÔ>ÐØ$ÐMÕ)>¸}Ñ)MÔ)MˆÝð 
ð 
à# A e GÔ,ð
ñ 
ô 
ñ 
ô 
ˆð 	×Òà#Ø#Ø':Ø#2Ø%ðð ñ	
ô 	
ð 	
ð 	
ð Ðr!   rG  úset[int]c           	     óp   ‡ — ˆ fd„t          t          |t          ‰ ¦  «        ¦  «        ¦  «        D ¦   «         S )Nc                óX   •— h | ]&}t          ‰|¦  «                             ¦   «         ¯$|’Œ'S rb   ©r™   r4   )r   r[  r”   s     €r   rÁ   z(_nonempty_col_indices.<locals>.<setcomp>  s4   ø€ Ð[Ð[Ð[�C½[ÈÈcÑ=RÔ=R×=XÒ=XÑ=ZÔ=ZÐ[ˆCÐ[Ð[Ð[r!   )rD   r±   rQ   )r”   rG  s   ` r   Ú_nonempty_col_indicesrÂ  
  s5   ø€ Ø[Ð[Ð[Ð[�5¥ X­s°3©x¬xÑ!8Ô!8Ñ9Ô9Ð[Ñ[Ô[Ð[r!   c                ó\  — |dk    rdS t          d„ | D ¦   «         d¬¦  «        }|dk     rdS t          ¦   «         }| d |…         D ]%}|                     t          ||¦  «        ¦  «         Œ&t	          |¦  «        |k     o0t	          |¦  «        t          dt          |dz  ¦  «        ¦  «        k    S )Nr   Fc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r-   r˜   rB  s     r   r   z,_header_column_incomplete.<locals>.<genexpr>  rC  r!   rD  rÂ   r   r  )r7   r  ÚupdaterÂ  rQ   r   )r÷   r7  rG  Úfilledr”   s        r   Ú_header_column_incompleterÇ    s»   € Ø˜!ÒÐØˆuÝÐ-Ð-¨Ð-Ñ-Ô-°qÐ9Ñ9Ô9€HØ�!‚|€|ØˆuÝ‘u”u€FØÐ$�_Ð$Ô%ð <ð <ˆØ�ŠÕ+¨C°Ñ:Ô:Ñ;Ô;Ð;Ð;Ýˆv‰;Œ;˜Ò!ÐQ¥c¨&¡k¤kµS¸½CÀÈ4ÁÑ<PÔ<PÑ5QÔ5QÒ&QÐQr!   c                óv   — d„ | D ¦   «         }t          |¦  «        dk     rdS t          d„ |D ¦   «         ¦  «        S )Nc                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rb   r�   rd   s     r   re   z-_bare_year_value_row_like.<locals>.<listcomp>  r$  r!   rÃ   Fc              3  óJ   K  — | ]}t                                |¦  «        V — Œd S r-   )rW   rU   rd   s     r   r   z,_bare_year_value_row_like.<locals>.<genexpr>  s0   è è € Ð=Ð=¨D�x×!Ò! $Ñ'Ô'Ð=Ð=Ð=Ð=Ð=Ð=r!   )rQ   r  )r”   r’   s     r   Ú_bare_year_value_row_likerË    sH   € Ø=Ð=¨Ð=Ñ=Ô=€HÝ
ˆ8�}„}�qÒÐØˆuÝÐ=Ð=°HÐ=Ñ=Ô=Ñ=Ô=Ð=r!   c           
     óŽ  ‡ — t          ‰ ¦  «        }t          ‰ d¦  «        }t          t          ‰ |¦  «        ¦  «        }ˆ fd„t	          dt          |t          ‰ ¦  «        ¦  «        ¦  «        D ¦   «         }g }|d         dk     st          |¦  «        dk     r|                     d¦  «         t          |¦  «        dk     r|                     d¦  «         |d         st          ‰ ¦  «        st          ‰ ¦  «        r|                     d¦  «         t          ‰ ¦  «        s|d	         d
k    s|d         dk    r|                     d¦  «         t          ‰ ¦  «        r|                     d¦  «         t          ‰ ¦  «        r|                     d¦  «         |d         dk    s|d         d
k    r|                     d¦  «         t          |¦  «        dk    rCt          |¦  «        }t          |d¦  «        }	t          |	¦  «        s|                     d¦  «         |d         dk    p|d         dk    }
|
s|                     d¦  «         | S )Nr   c                ót   •— g | ]4}t          ‰|¦  «                             ¦   «         ¯$t          ‰|¦  «        ‘Œ5S rb   rÁ  )r   r•   r”   s     €r   re   z1_undertag_extension_candidate.<locals>.<listcomp>%  sA   ø€ ÐÐÐ°SÕalÐmpÐruÑavÔav×a|Òa|Ña~Ôa~Ð�; s¨CÑ0Ô0ÐÐÐr!   r   rƒ   rÃ   Úsingle_or_sparse_rowÚ!no_column_header_cells_after_stubrk  rg   rÊ   r†   rê   Ústrong_value_rowÚbare_year_value_rowr  r‰   r¥   ri   Úlong_text_rowÚfollowing_body_not_stabler‡   rË   rˆ   r¹   Úweak_label_signal)r“   rp  r  rÂ  rD   r±   rQ   rô   rÏ   rÑ   r×   rË  r9  r  r  r  )r”   r	  rG  r²   r�  Úfilled_colsÚnonempty_after_stubrª  r  r  Úlabel_signals   `          r   Ú_undertag_extension_candidaterØ  !  sc  ø€ Ý˜CÑ Ô €HÝ˜#˜qÑ!Ô!€GÝÕ.¨s°HÑ=Ô=Ñ>Ô>€KØÐÐÐ½EÀ!ÅSÈÕSVÐWZÑS[ÔS[ÑE\ÔE\Ñ<]Ô<]ÐÑÔÐØ€GàÐ Ô! AÒ%Ð%­¨[Ñ)9Ô)9¸AÒ)=Ð)=Ø�ŠÐ-Ñ.Ô.Ð.Ý
ÐÑÔ !Ò#Ð#Ø�ŠÐ:Ñ;Ô;Ð;ØˆÔð (¥=°Ñ#5Ô#5ð (Õ9OÐPSÑ9TÔ9Tð (Ø�Š�Ñ'Ô'Ð'Ý˜cÑ"Ô"ð + hÐ/AÔ&BÀTÒ&IÐ&IÈXÐVeÔMfÐimÒMmÐMmØ�ŠÐ)Ñ*Ô*Ð*Ý  Ñ%Ô%ð .Ø�ŠÐ,Ñ-Ô-Ð-Ý˜cÑ"Ô"ð ,Ø�ŠÐ*Ñ+Ô+Ð+Ø�Ô Ò#Ð# xÐ0FÔ'GÈ4Ò'OÐ'OØ�Š�Ñ'Ô'Ð'Ý
ˆ>ÑÔ˜aÒÐÝ)¨.Ñ9Ô9ÐÝ:Ð;MÈqÑQÔQˆÝ$ ]Ñ3Ô3ð 	8Ø�NŠNÐ6Ñ7Ô7Ð7à˜MÔ*¨dÒ2Ð[°hÐ?RÔ6SÐW[Ò6[€LØð ,Ø�ŠÐ*Ñ+Ô+Ð+àˆ;Ðr!   rÂ   )ÚcaprÙ  c               ó†  — t          d„ | D ¦   «         d¬¦  «        }|dk    r|S |t          | ¦  «        k    r|S t          | |¦  «        s|S |}t          |t	          t          | ¦  «        ||z   ¦  «        ¦  «        D ]E}|t          | ¦  «        dz
  k    r n,t          | |         | |dz   d…         |¦  «        }|s n|dz   }ŒF|S )zLPromote under-tagged column-header rows immediately below the base boundary.c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r-   r˜   rB  s     r   r   z)extend_header_undertag.<locals>.<genexpr>J  rC  r!   r   rD  r   N)r7   rQ   rÇ  rD   r±   rØ  )r÷   r7  rÙ  rG  Únew_toprc  Úoks          r   Úextend_header_undertagrÞ  C  sñ   € õ Ð-Ð-¨Ð-Ñ-Ô-°qÐ9Ñ9Ô9€HØ˜!ÒÐØÐØ�#˜d™)œ)Ò#Ð#ØÐÝ$ T¨?Ñ;Ô;ð ØÐà€GÝ˜­#­c°$©i¬i¸È3Ñ9NÑ*OÔ*OÑPÔPð ð ˆØ•c˜$‘i”i !‘mÒ#Ð#ØˆEÝ*¨4°¬=¸$¸wÈ¹{¸}¸}Ô:MÈxÑXÔXˆØð 	ØˆEØ˜A‘+ˆˆà€Nr!   c                ó¬  — | sdS t          | ¦  «        dk    rdS t          | ¦  «        }t          |¦  «        }|D ]ä}t          |d         ¦  «        }|d         r|d         rŒ(|dk    rš|d         d         rt	          | d         ¦  «        }|r dS  dS t          | ¦  «        r dS t          | d¦  «        r dS t          | d¦  «        r dS t          | ¦  «        dk    r!t          | d         | dd …         ¦  «        r dS  dS t          | |||d	         ¦  «        r|c S Œåt          | ¦  «        rdS t          | d¦  «        rdS t          | d¦  «        rdS dS )
Nr   r   rš  r¶  r¸  rm  rÃ   rÂ   r¹  )
rQ   r  r½  r   rö   rý   r?  rK  r6  r³  )r÷   r‰  rº  r  rš  Úrestore_guardss         r   Ú#find_top_header_rows_by_body_changerá  ^  s¸  € ð ð ØˆqÝ
ˆ4�y„y�A‚~€~Øˆqå˜DÑ!Ô!€HÝ& xÑ0Ô0€JØð ð ˆ	Ý˜ <Ô0Ñ1Ô1ˆ
Ø˜Ô%ð 	¨Ð3DÔ)Eð 	Øà˜Š?ˆ?Ø˜Œ{Ð4Ô5ð Ý!9¸$¸q¼'Ñ!BÔ!B�Ø!ð Ø˜1˜1Ø�q�qÝ+¨DÑ1Ô1ð Ø�q�qÝ.¨t°QÑ7Ô7ð Ø�q�qÝ(¨¨qÑ1Ô1ð Ø�q�qõ �4‰yŒy˜AŠ~ˆ~Õ"=¸dÀ1¼gÀtÈAÈBÈBÄxÑ"PÔ"Pˆ~Ø�q�qØ�1�1å˜D (¨J¸	À&Ô8IÑJÔJð 	ØÐÐÐð	õ $ DÑ)Ô)ð Øˆqå& t¨QÑ/Ô/ð Øˆqå   qÑ)Ô)ð Øˆqàˆ1r!   T)Úfrozenc                  ó$   — e Zd ZU ded<   ded<   dS )ÚHeaderRegionr   r7  ztuple[int, ...]rd  N)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rb   r!   r   rä  rä  Ž  s*   € € € € € € àÐÐÑØ(Ð(Ð(Ñ(Ð(Ð(r!   rä  c                óœ   — t          | ¦  «        }t          | |¦  «        }t          t          | |¦  «        ¦  «        }t	          ||¬¦  «        S )N)r7  rd  )rá  rÞ  Útuplerd  rä  )r÷   r7  rb  s      r   Úfind_header_regionrë  ”  sU   € Ý9¸$Ñ?Ô?€Oõ -¨T°?ÑCÔC€OÝÕ,¨T°?ÑCÔCÑDÔD€LÝØ'Ø(ðñ ô ð r!   c                óP   — d                      |                      ¦   «         ¦  «        S )zMWhitespace-collapse a cell's text (runs of whitespace/newlines -> one space).rA   )rO   rP   r$   s    r   Úcollapse_cell_wsrí  ¡  s   € à�8Š8�D—J’J‘L”LÑ!Ô!Ð!r!   c                ó~   — |                       dd¦  «                              dd¦  «                              dd¦  «        S )zNEscape a cell's text for the serializer: only ``& < >`` (quotes left literal).ú&z&amp;ú<z&lt;ú>z&gt;)Úreplacer$   s    r   Úescape_html_textró  ¦  s6   € à�<Š<˜˜WÑ%Ô%×-Ò-¨c°6Ñ:Ô:×BÒBÀ3ÈÑOÔOÐOr!   c                ód   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        S )zAA cell's inner HTML: escaped non-empty lines joined by ``<br/>``.z<br/>c              3  ó€   K  — | ]9}|                      ¦   «         ¯t          |                      ¦   «         ¦  «        V — Œ:d S r-   )r4   ró  )r   Úparts     r   r   z_cell_inner.<locals>.<genexpr>­  sE   è è € ÐeÐe¸4ÐX\×XbÒXbÑXdÔXdÐeÕ(¨¯ª©¬Ñ6Ô6ÐeÐeÐeÐeÐeÐer!   )rO   Ú
splitlinesr$   s    r   Ú_cell_innerrø  «  s-   € à�<Š<ÐeÐeÀ4Ç?Â?ÑCTÔCTÐeÑeÔeÑeÔeÐer!   rb   c                óÊ  — t          |pd¦  «        }dg}t          | ¦  «        D �]\  }}||v rmd„ |D ¦   «         }t          |¦  «        dk    rNt          |¦  «        dk    r;|                     dt          |¦  «        t	          |d         ¦  «        fz  ¦  «         Œw|                     d¦  «         |D ]q}d	}|j        dk    r|d
|j        z  z  }|j        dk    r|d|j        z  z  }|                     d|j        ›|›dt          |j	        ¦  «        ›d|j        ›d�¦  «         Œr|                     d¦  «         �Œ|                     d¦  «         d	 
                    |¦  «        S )aò  Serialize a tagged placement grid to its final ``<table>`` HTML in one pass.

    ``rows`` is a row-major grid of cells duck-typed with ``text`` / ``colspan``
    / ``rowspan`` / ``tag`` (e.g. :class:`pymupdf.table.SpanCell`): each cell
    emits its tag, its ``colspan`` / ``rowspan`` attributes and its ``<br/>``-
    joined escaped inner HTML. A row whose index is in ``section_header_rows``
    and that carries a single non-empty label collapses to one
    ``<th colspan=N>`` spanning the row.rb   z<table>c                ó^   — g | ]*}t          |j        ¦  «        ¯t          |j        ¦  «        ‘Œ+S rb   )rí  r   rÚ   s     r   re   z%render_table_html.<locals>.<listcomp>½  s5   € ÐeÐeÐe¸ÕIYÐZ^ÔZcÑIdÔIdÐeÕ(¨¬Ñ3Ô3ÐeÐeÐer!   r   rÃ   z!<tr><th colspan="%d">%s</th></tr>r   z<tr>r—   z colspan="%d"z rowspan="%d"rð  rñ  z</z</tr>z</table>)r  r\  rQ   rô   ró  ÚcolspanÚrowspanÚtagrø  r   rO   )	r÷   rd  rb  Úpartsrc  rü   r’   rÛ   Úattrss	            r   Úrender_table_htmlr   °  s•  € õ Ð*Ð0¨bÑ1Ô1€LØˆK€EÝ# D™/œ/ð ñ ‰ˆ�Ø�lÐ"Ð"ØeÐeÀÐeÑeÔeˆHÝ�8‰}Œ} Ò!Ð!¥c¨%¡j¤j°A¢o oØ—’Ø7Ý˜5‘z”zÕ#3°H¸Q´KÑ#@Ô#@ÐAñBñô ð ð Ø�Š�VÑÔÐØð 	ð 	ˆDØˆEØŒ|˜aÒÐØ˜¨4¬<Ñ7Ñ7�ØŒ|˜aÒÐØ˜¨4¬<Ñ7Ñ7�Ø�LŠLˆLØ#'¤8 8¨U¨U¨UµKÀÄ	Ñ4JÔ4JÐ4JÐ4JÈDÌHÈHÈHÐUñô ð ð ð 	�Š�WÑÔÐÑØ	‡L‚L�ÑÔÐØ�7Š7�5‰>Œ>Ðr!   )r   r   r   r   )r   r   r   r+   )r   r   r   r1   )r   r   r   r   )r^   r+   r   r_   )r”   r+   r•   r   r   r   )r”   r+   r   r1   )r”   r+   r   r‘   )r”   r+   r   r+   )r÷   rø   r   r1   )r  r+   r	  rø   r   r1   )r÷   rø   r7  r   r   r1   )r÷   rø   r7  r   r   r_  )r”   r+   re  r   r   rf  )r÷   rø   r   rq  )rt  ru  r   r_   )rM   )r‰  rq  rŠ  r   r‹  r   r   r_   )r²   r_   r   r1   )r”  r+   r  r_   r   r‘   )
r÷   rø   r‰  rq  rš  r   r  r_   r   r1   )r‰  rq  r   rq  )r”   r+   rG  r   r   r¾  )r”   r+   r	  rø   rG  r   r   r1   )r÷   rø   r7  r   rÙ  r   r   r   )r÷   rø   r   r   )r÷   rø   r   rä  )rb   )r   r   )NÚ__doc__Ú
__future__r   Údataclassesr   Ú
statisticsr   Útypingr   r=   Úcompiler.   Ú
IGNORECASEr5   rS   rT   rW   rY   rX   rû   r  r  rì   ro   ru   r%   r*   r0   r;   r?   r]   r~   r“   r™   r·   r¼   rÈ   rÏ   rÑ   r×   rÞ   rá   rð   rö   rý   r  r!  r*  r,  r6  r=  r?  rK  rP  rR  r9  r^  rd  rp  r  rˆ  r  r  r™  r³  r½  rÂ  rÇ  rË  rØ  rÞ  rá  rä  rë  rí  ró  rø  r   rb   r!   r   ú<module>r     s  ððð ð@ #Ð "Ð "Ð "Ð "Ð "Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 	€	€	€	ð ˆBŒJÐLÑMÔM€	ØˆBŒJØLØ„Mñô €	ð ˆBŒJÐHÈ"Ì-ÑXÔX€	ØˆbŒjÐ2Ñ3Ô3€Øˆ2Œ:Ð+Ñ,Ô,€Øˆ2Œ:ÐSÑTÔT€ØˆBŒJÐTÐVXÔVcÑdÔd€	Ø�"”*Ð6Ñ7Ô7€Ø�”
ÐGÑHÔH€Ø$˜"œ*Ð%BÑCÔCÐ ØY€à,Ð,Ð,€ØKÐKÐK€ð5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð#ð #ð #ð #ð
1ð 
1ð 
1ð 
1ðqð qð qð qðð ð ð ð>ð ð ð ð,ð ð ð ð6.ð .ð .ð .ðð ð ð ð,!ð !ð !ð !ð	2ð 	2ð 	2ð 	2ðð ð ð ðSð Sð Sð Sð
Yð Yð Yð YðSð Sð Sð Sðcð cð cð cð
	Nð 	Nð 	Nð 	Nðð ð ð ð[ð [ð [ð [ð3ð 3ð 3ð 3ð"ð ð ð ð<ð ð ð ð.Zð Zð Zð Zð1ð 1ð 1ð 1ðh0ð 0ð 0ð 0ð0Mð Mð Mð Mð"0ð "0ð "0ð "0ðJhð hð hð hðð ð ð ð;ð ;ð ;ð ;ðZð Zð Zð Zðð ð ð ð#ð #ð #ð #ðLGð Gð Gð Gð9ð 9ð 9ð 9ðz =>ð)ð )ð )ð )ð )ð>ð >ð >ð >ð.
ð 
ð 
ð 
ð=ð =ð =ð =ð@ð ð ð ð2\ð \ð \ð \ð	Rð 	Rð 	Rð 	Rð>ð >ð >ð >ðð ð ð ðL ð	ð ð ð ð ð ð6-ð -ð -ð -ð` €�$ÐÑÔð)ð )ð )ð )ð )ñ )ô )ñ Ôð)ð
	ð 	ð 	ð 	ð"ð "ð "ð "ð
Pð Pð Pð Pð
fð fð fð fð
 ð  ð  ð  ð  ð  ð  r!   