§
    �Wêjš  ã                  ód   — d Z ddlmZ ddlmZmZ er	 ddhZddhZdhZd	d
hZ	 G d„ d¦  «        Z
dS )zö
MarkdownGenerator.py

Converts BoxRFDGNN.predict(page, return_raw=True) output to Markdown text.

Usage
-----
    from source.layout.onnx.MarkdownGenerator import MarkdownGenerator
    gen = MarkdownGenerator(model)
    md  = gen.generate(page)
é    )Úannotations)ÚTYPE_CHECKINGÚAnyzpage-headerzpage-footerÚtitlezsection-headerz	list-itemÚcaptionÚfootnotec                  ó`   — e Zd ZdZdd„Z	 	 dd d„Zd!d„Zed"d„¦   «         Zed#d„¦   «         Z	dS )$ÚMarkdownGeneratorzž
    Converts BoxRFDGNN layout detection results into Markdown text.

    Parameters
    ----------
    model : BoxRFDGNN instance used to run inference.
    Úmodelr   ÚreturnÚNonec                ó   — || _         d S ©N)r   )Úselfr   s     ú—/Users/tedpeters/Documents/Projects/Claude Projects/TPC Houses/house-viewer/.venv/lib/python3.11/site-packages/pymupdf/layout/onnx/MarkdownGenerator.pyÚ__init__zMarkdownGenerator.__init__,   s   € ØˆŒ
ˆ
ˆ
ó    NTÚpageÚgroupsúlist | NoneÚjoinÚboolÚskip_header_footerc                ó  — ddl m} |€| j                             |d¬¦  «        }|s|rdng S  ||| j        j        | j        j        | j        j        dœ¬¦  «        }|                     dg ¦  «        }|                     d	g ¦  «        }g }	t          |¦  «        D ]D\  }
}|r|d
         t          v rŒ|  
                    ||
||¦  «        }|	                     |¦  «         ŒE|rd                     d„ |	D ¦   «         ¦  «        S |	S )Né   )Úcreate_input_data_from_pageT)Ú
return_rawÚ )Ú
input_typeÚfeature_set_nameÚfeature_extractor)ÚoptionsÚtextÚbboxesÚ
class_namez

c              3  ó   K  — | ]}|¯|V — Œ	d S r   © )Ú.0Úbs     r   ú	<genexpr>z-MarkdownGenerator.generate.<locals>.<genexpr>L   s'   è è € Ð9Ð9 Q°qÐ9˜qÐ9Ð9Ð9Ð9Ð9Ð9r   )Úpymupdf_utilr   r   Úpredictr   r    r!   ÚgetÚ	enumerateÚ_SKIP_CLASSESÚ_render_groupÚappendr   )r   r   r   r   r   r   Ú	data_dictÚ	all_textsÚ
all_bboxesÚ	md_blocksÚ	group_idxÚgroupÚblocks                r   ÚgeneratezMarkdownGenerator.generate3   sG  € à>Ð>Ð>Ð>Ð>Ð>àˆ>Ø”Z×'Ò'¨¸Ð'Ñ>Ô>ˆFØð 	&ØÐ%�2�2 2Ð%à/Ð/°Øœ*Ô/Ø $¤
Ô ;Ø!%¤Ô!=ð?
ð ?
ð ñ ô ˆ	ð
  )Ÿ}š}¨V°RÑ8Ô8ˆ	Ø$Ÿ=š=¨°2Ñ6Ô6ˆ
à!ˆ	Ý )¨&Ñ 1Ô 1ð 	$ð 	$ÑˆI�uØ!ð  e¨LÔ&9½]Ð&JÐ&JØØ×&Ò& u¨i¸ÀJÑOÔOˆEØ×Ò˜UÑ#Ô#Ð#Ð#àð 	Ø—;’;Ð9Ð9¨)Ð9Ñ9Ô9Ñ9Ô9Ð9àÐr   r7   Údictr6   Úintr3   ú	list[str]r4   ÚlistÚstrc                ó2  — |                      dd¦  «        }|                      |||¦  «                             ¦   «         }|dk    r1|                      dg ¦  «        }|                      |¦  «        }|r|n|S |t          v r	|rd|› �ndS |t
          v r	|rd|› �ndS |t          v r
|rd|› d�ndS |d	k    r
|rd
|› d
�ndS |dk    rS|d         \  }	}
}}d|› dt          |	¦  «        › dt          |
¦  «        › dt          |¦  «        › dt          |¦  «        › d�S |S )z3Convert a single layout group to a Markdown string.r%   r#   ÚtableÚtable_cellsz## r   z- Ú*Úformulaú$ÚpictureÚ
group_bboxz[Figure-z](ú,ú))r-   Ú_group_textÚstripÚ_render_tableÚ_HEADING_CLASSESÚ_LIST_CLASSESÚ_ITALIC_CLASSESr;   )r   r7   r6   r3   r4   Úclsr#   ÚcellsÚtable_mdÚx1Úy1Úx2Úy2s                r   r0   zMarkdownGenerator._render_groupT   sh  € à�yŠy˜ vÑ.Ô.ˆØ×Ò  y°*Ñ=Ô=×CÒCÑEÔEˆà�'Š>ˆ>Ø—y’y °Ñ3Ô3ˆEØ×)Ò)¨%Ñ0Ô0ˆHØ'Ð1�8�8¨TÐ1àÕ"Ð"Ð"Ø#'Ð/�<˜�<�<�<¨RÐ/à•-ÐÐØ"&Ð.�;˜�;�;�;¨BÐ.à•/Ð!Ð!Ø"&Ð.�;�t�;�;�;�;¨BÐ.à�)ÒÐØ"&Ð.�;�t�;�;�;�;¨BÐ.à�)ÒÐØ" <Ô0‰NˆB��B˜ØS˜iÐSÐS­3¨r©7¬7ÐSÐSµS¸±W´WÐSÐS½sÀ2¹w¼wÐSÐSÍÈRÉÌÐSÐSÐSÐSð ˆr   rP   ú	list[Any]c                ó  ‡‡‡‡— | sdS t          d„ | D ¦   «         ¦  «        }t          d„ | D ¦   «         ¦  «        Šˆfd„t          |¦  «        D ¦   «         Š| D ]Ï}|j        |j        }}t	          |dd¦  «        }t	          |dd¦  «        }|j                             ¦   «         }|sŒNt          |||z   ¦  «        D ]mŠt          |||z   ¦  «        D ]W}d‰cxk    r|k     rHn Œd|cxk    r‰k     r8n Œ"‰‰         |         }	|	r|	d	z   |z                        ¦   «         n|‰‰         |<   ŒXŒnŒÐdd„Šdd                     ˆˆfd„t          ‰¦  «        D ¦   «         ¦  «        z   dz   }
dd                     d„ t          ‰¦  «        D ¦   «         ¦  «        z   dz   }g }t          d|¦  «        D ]MŠdd                     ˆˆˆfd„t          ‰¦  «        D ¦   «         ¦  «        z   dz   }|                     |¦  «         ŒNd                     |
|g|z   ¦  «        S )zŠ
        Renders a table into Markdown format.
        Modified to support data replication for merged cells (row_span/col_span).
        r   c              3  óX   K  — | ]%}|j         t          |d ¦  «        r|j        ndz   V — Œ&dS )Úrow_spané   N)ÚrowÚhasattrrY   ©r(   Úcs     r   r*   z2MarkdownGenerator._render_table.<locals>.<genexpr>   ó>   è è € ÐZÐZÈq�Q”U­G°A°zÑ,BÔ,BÐI˜aœj˜jÈÑJÐZÐZÐZÐZÐZÐZr   c              3  óX   K  — | ]%}|j         t          |d ¦  «        r|j        ndz   V — Œ&dS )Úcol_spanrZ   N)Úcolr\   ra   r]   s     r   r*   z2MarkdownGenerator._render_table.<locals>.<genexpr>€   r_   r   c                ó   •— g | ]}d g‰z  ‘Œ	S )r   r'   )r(   Ú_Ún_colss     €r   ú
<listcomp>z3MarkdownGenerator._render_table.<locals>.<listcomp>ƒ   s   ø€ Ð FÐ FÐ F°1 " ¨¡Ð FÐ FÐ Fr   rY   rZ   ra   r   ú Úsr>   r   c                óV   — |                       dd¦  «                              dd¦  «        S )Nú|z\|ú
rg   )Úreplace)rh   s    r   Ú_escz-MarkdownGenerator._render_table.<locals>._esc™   s&   € à—9’9˜S %Ñ(Ô(×0Ò0°°sÑ;Ô;Ð;r   z| z | c              3  óF   •K  — | ]} ‰‰d          |         ¦  «        V — ŒdS )r   Nr'   )r(   r^   rm   Úgrids     €€r   r*   z2MarkdownGenerator._render_table.<locals>.<genexpr>ž   s5   øè è € Ð"KÐ"K¸ 4 4¨¨Q¬°¬
Ñ#3Ô#3Ð"KÐ"KÐ"KÐ"KÐ"KÐ"Kr   z |c              3  ó   K  — | ]}d V — ŒdS )z---Nr'   )r(   rd   s     r   r*   z2MarkdownGenerator._render_table.<locals>.<genexpr>¡   s"   è è € Ð=Ð=¨! Ð=Ð=Ð=Ð=Ð=Ð=r   c              3  óF   •K  — | ]} ‰‰‰         |         ¦  «        V — Œd S r   r'   )r(   r^   rm   ro   Úrs     €€€r   r*   z2MarkdownGenerator._render_table.<locals>.<genexpr>¦   s5   øè è € Ð'PÐ'P¸Q¨¨¨T°!¬W°Q¬ZÑ(8Ô(8Ð'PÐ'PÐ'PÐ'PÐ'PÐ'Pr   rk   )rh   r>   r   r>   )	ÚmaxÚranger[   rb   Úgetattrr#   rJ   r   r1   )rP   Ún_rowsÚcellÚr_startÚc_startÚr_spanÚc_spanr#   ÚcoÚprevÚheaderÚsepÚrowsÚrow_strrm   ro   re   rr   s                 @@@@r   rK   zMarkdownGenerator._render_tableu   sŸ  øøøø€ ð ð 	Ø�2õ ÐZÐZÐTYÐZÑZÔZÑZÔZˆÝÐZÐZÐTYÐZÑZÔZÑZÔZˆð !GÐ FÐ FÐ F½¸f¹¼Ð FÑ FÔ Fˆàð 	Tð 	TˆDØ#œx¨¬�WˆGå˜T :¨qÑ1Ô1ˆFÝ˜T :¨qÑ1Ô1ˆFà”9—?’?Ñ$Ô$ˆDØð Øõ
 ˜7 G¨fÑ$4Ñ5Ô5ð Tð T�Ý ¨°6Ñ)9Ñ:Ô:ð Tð T�BØ˜A��’� ’����¨1°Ð+;Ð+;Ò+;Ð+;°VÒ+;Ð+;Ð+;Ð+;Ð+;Ø# Aœw rœ{˜àEIÐ&S t¨c¡z°DÑ'8×&?Ò&?Ñ&AÔ&AÐ&AÈt˜˜Qœ ™øð	TðTð	<ð 	<ð 	<ð 	<ð
 ˜Ÿ
š
Ð"KÐ"KÐ"KÐ"KÐ"K½UÀ6¹]¼]Ð"KÑ"KÔ"KÑKÔKÑKÈdÑRˆð �U—Z’ZÐ=Ð=­u°V©}¬}Ð=Ñ=Ô=Ñ=Ô=Ñ=ÀÑDˆð ˆÝ�q˜&Ñ!Ô!ð 	!ð 	!ˆAØ˜UŸZšZÐ'PÐ'PÐ'PÐ'PÐ'PÐ'PÅ%ÈÁ-Ä-Ð'PÑ'PÔ'PÑPÔPÑPÐSWÑWˆGØ�KŠK˜Ñ Ô Ð Ð à�yŠy˜& #˜¨Ñ-Ñ.Ô.Ð.r   c                óÊ   ‡‡‡— dŠ|                       dg ¦  «        }ˆˆfd„|D ¦   «         }|                     ˆfd„¬¦  «         d                     ˆfd„|D ¦   «         ¦  «        S )z;Join texts sorted by visual reading order within the group.é   Úindiciesc                óÌ   •— g | ]`}d |cxk    rt          ‰¦  «        k     ¯n nAd |cxk    rt          ‰¦  «        k     ¯9n n$‰|                              ¦   «         ¯V|‰|         f‘ŒaS )r   )ÚlenrJ   )r(   Úidxr4   r3   s     €€r   rf   z1MarkdownGenerator._group_text.<locals>.<listcomp>µ   s”   ø€ ð 
ð 
ð 
àØ�CÐ(Ð(Ò(Ð(�#˜i™.œ.Ò(Ð(Ð(Ð(Ð(¨Q°#Ð-GÐ-GÒ-GÐ-G½¸J¹¼Ò-GÐ-GÐ-GÐ-GÐ-GØ˜S”>×'Ò'Ñ)Ô)ð .Hð �*˜S”/Ð"à-GÐ-GÐ-Gr   c                óB   •— | d         d         ‰z  | d         d         fS )NrZ   r   r'   )ÚxÚmargins    €r   ú<lambda>z/MarkdownGenerator._group_text.<locals>.<lambda>»   s!   ø€  ! A¤$ q¤'¨VÑ"3°Q°q´T¸!´WÐ!=€ r   )Úkeyrg   c              3  óR   •K  — | ]!\  }}‰|                               ¦   «         V — Œ"d S r   )rJ   )r(   r‡   rd   r3   s      €r   r*   z0MarkdownGenerator._group_text.<locals>.<genexpr>¼   s7   øè è € ÐCÐC±6°3¸˜	 #œ×,Ò,Ñ.Ô.ÐCÐCÐCÐCÐCÐCr   )r-   Úsortr   )r7   r3   r4   r„   ÚvalidrŠ   s    ``  @r   rI   zMarkdownGenerator._group_text°   s“   øøø€ ð ˆØ—9’9˜Z¨Ñ,Ô,ˆð
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ˆð 	�
Š
Ð=Ð=Ð=Ð=ˆ
Ñ>Ô>Ð>Ø�xŠxÐCÐCÐCÐC¸UÐCÑCÔCÑCÔCÐCr   )r   r   r   r   )NTT)r   r   r   r   r   r   r   r   )
r7   r:   r6   r;   r3   r<   r4   r=   r   r>   )rP   rV   r   r>   )r7   r:   r3   r<   r4   r=   r   r>   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r9   r0   ÚstaticmethodrK   rI   r'   r   r   r
   r
   #   s°   € € € € € ðð ðð ð ð ð 9=Ø?Cðð ð ð ð ðBð ð ð ðB ð3/ð 3/ð 3/ñ „\ð3/ðt ðDð Dð Dñ „\ðDð Dð Dr   r
   N)r“   Ú
__future__r   Útypingr   r   r/   rL   rM   rN   r
   r'   r   r   ú<module>r—      sµ   ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "à %Ð %Ð %Ð %Ð %Ð %Ð %Ð %àð 	Øð " =Ð1€ØÐ-Ð.Ð Ø�=€Ø˜zÐ*€ðYDð YDð YDð YDð YDñ YDô YDð YDð YDð YDr   