ó
    6Þ©jQY  ã                  óÞ  • S r SSKJr  SSKrSSKJs  Jr  SSK	J
r
JrJrJrJr  SSKrSSKJrJr  SSKJrJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJ r J!r!J"r"  SSK#J$r$J%r%J&r&  Su  r'r(\\)\)\)\)4   r*Sr+S0S jr,  S1     S2S jjr-\+SS4S3S jjr.S4S5S jjr/S r0S r1S r2S r3S r4S r5S r6S r7S r8S r9S r:S r;S6S  jr<S! r=S" r>S# r?S$ r@S% rAS& rBS' rCS( rDS) rES* rFS+ rGS, rHS- rIS. rJS/ rKg)7a  Tests for the docling-spine / Camelot reconciliation.

The matcher and graft are exercised against synthetic DoclingDocuments built with
docling-core's own API, so the box-frame conversions and the docling-core
mutation calls are tested for real (no docling pipeline run).
é    )ÚannotationsN)ÚListÚLiteralÚOptionalÚSequenceÚTuple)ÚBoundingBoxÚCoordOrigin)ÚDoclingDocumentÚPictureClassificationClassÚPictureClassificationDataÚProvenanceItemÚ	TableData)ÚDocItemLabel)ÚFootnoteDef©ÚExtractedTable)Úbuild_unified_documentÚmarkdown_to_table_dataÚmatch_tables)Ú	PageParseÚParseResultÚTableProvenance)g      ƒ@g     Àˆ@z+| A | B |
| --- | --- |
| 1 | 2 |
| 3 | 4 |c                ó†   • U u  pp4[        U[        -  U[        -  SU-
  [        -  SU-
  [        -  [        R                  S9$ )Nç      ð?)ÚlÚrÚtÚbÚcoord_origin)r	   ÚPAGE_WÚPAGE_Hr
   Ú
BOTTOMLEFT)ÚboxÚx1Úy1Úx2Úy2s        Ú0/home/mande/repo/quber/tests/core/test_fusion.pyÚ_norm_to_bottomleftr*   "   sG   € Ø�N€BˆBÜØ
Œv‰+Ø
Œv‰+Ø�‰8”vÑ
Ø�‰8”vÑ
Ü ×+Ñ+ñð ó    c                óN  • [        SS9n/ nU  Hi  u  pE[        S[        U5      SS9nUR                  [	        / SSS9US9nUR                  [        UR                  SS	US
:X  a  SOSUS
:X  a  SOSUS95        Mk     U H€  u  pH[        S[        U5      SS9nUR                  US9n	U(       d  M1  U	R                  R                  [        S[        U5       V
Vs/ s H  u  p«[        USU
S-  -
  S9PM     snn
S95        M‚     [        S[        [        / S9/n[!        U/ XÃS9$ s  snn
f )zMA ParseResult with docling tables (box, verdict) and pictures (box, classes).Ú	synthetic)Únameé   ©r   r   ©Úpage_noÚbboxÚcharspanr   )Útable_cellsÚnum_rowsÚnum_cols)ÚdataÚprové
   Úocrr   ç        g\�Âõ(\ï?)Úself_refr2   Ú
cell_countÚfrom_ocr_fractionÚmean_ocr_confidenceÚverdict)r9   ÚtestçÍÌÌÌÌÌì?çš™™™™™¹?)Ú
class_nameÚ
confidence)Ú
provenanceÚpredicted_classes)r2   ÚwidthÚheightÚcells)ÚdocumentÚpage_scoresÚpagesÚtable_provenance)r   r   r*   Ú	add_tabler   Úappendr   r=   Úadd_picturer   r   Ú	enumerater   r   r!   r"   r   )ÚtablesÚpicturesÚdocrG   r$   rA   r9   ÚitemÚclassesÚpicÚiÚcrN   s                r)   Ú_make_parser\   -   sE  € ô
 ˜{Ñ
+€CØ(*€JÛ‰ˆÜ aÔ.AÀ#Ó.FÐQWÑXˆØ�}‰}¤)¸ÀQÐQRÑ"SÐZ^ˆ}Ð_ˆØ×ÑÜØŸ™ØØØ)0°EÓ)9¡#¸sØ,3°uÓ,<¡DÀ#Øñö		
ñ ó !‰ˆÜ aÔ.AÀ#Ó.FÐQWÑXˆØ�o‰o 4ˆoÐ(ˆßˆ7ð �O‰O×"Ñ"Ü)Ø%ô %.¨gÔ$6ô'â$6™D˜Aô 3¸aÈCÐRSÐVYÑRYÉMÔZÙ$6ò'ñöñ !ô ˜q¬´vÀRÑHÐI€EÜ °¸5Ñ^Ð^ùó's   ÃD!g     ÀW@Ú c           	     ó   • [        USU UUSS9$ )Nr/   zx.pdf)ÚmarkdownÚpageÚ
som_regionÚcamelot_accuracyÚtitleÚsourcer   )r$   r_   Úaccuracyrc   s       r)   Ú_somrf   T   s!   € ÜØØØØ!ØØñð r+   c                óŠ   • [        X5      nUc  US   R                  $ U H   nX$R                  ;   d  M  UR                  s  $    g)Nr   Únone)r   ÚkindÚsom_indices)ÚparseÚsomsÚsom_idxÚmatchesÚms        r)   Ú_kind_ofrp   _   sA   € Ü˜5Ó'€GØ�Ø�q‰z�‰ÐÛˆØ—m‘mÕ#Ø—6‘6ŠMñ ð r+   c                 ó.  • [        [        5      n U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p2U R                  nSo!U:H  o3(       dº  [        R                  " SU4S	X45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p2U R                   Vs/ s H  ofR                  (       d  M  UPM     nnU Vs1 s H  ofR                  iM     nnS
S1o8U:H  o™(       do  [        R                  " SU	4SXƒ45      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p“U R                   Vs0 s H%  ofR                  UR                   4UR                  _M'     nn/ oS   n	SoÙU:H  o"o‚(       a  US   nSoþU:H  nUnU(       Gd
  [        R                  " SU4SX�45      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  nUR#                  U5        U(       ab  [        R                  " SW4SWW45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR#                  U5        [        R$                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n	=n=n=n=nng s  snf s  snf s  snf )Né   ©ú==)z0%(py2)s
{%(py2)s = %(py0)s.num_rows
} == %(py5)sr8   ©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7é   ©z0%(py2)s
{%(py2)s = %(py0)s.num_cols
} == %(py5)sÚAÚB©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6©r/   r   Ú1)r{   r/   Ú4)z%(py3)s == %(py6)s)Úpy3r„   z%(py8)sÚpy8)z%(py11)s == %(py14)s)Úpy11Úpy14z%(py16)sÚpy16r   zassert %(py19)sÚpy19)r   Ú	SAMPLE_MDr6   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr7   r5   Úcolumn_headerÚtextÚstart_row_offset_idxÚstart_col_offset_idxrQ   Ú_format_boolop)r8   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8r[   ÚheaderÚ@py_assert0Ú@py_assert2Ú@py_format5Ú@py_format7ÚbodyÚ@py_assert5Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format9Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20s                         r)   Ú+test_markdown_to_table_data_grid_and_headerr°   l   sV  € Ü!¤)Ó,€DØ�=‰=Ð˜AÐ˜AÑ×××Òˆ=×××××Õˆ4×××Ñˆ4××Õˆ=××Ó˜A××××××ÓØ�=‰=Ð˜AÐ˜AÑ×××Òˆ=×××××Õˆ4×××Ñˆ4××Õˆ=××Ó˜A××××××ÓØ×)Ò)Ó=Ò)�A¯_­_�aÑ)€FÐ=Ù"Ó#šF�q�FŒF™FÐ1Ð#¨¨S zÐ1 zÑ1×1×1×1Ò1Ð#×1×1Ô1Ð#×1×1Ó1 z×1×1×1×1×1×1Ó1ØNR×N^ÒN^Ó_ÒN^È×#Ñ# Q×%;Ñ%;Ð<¸a¿f¹fÒDÑN^€DÐ_Ù6�‰<Ð6˜3Ð6˜3Ñ×6 4¨¡<Ð6°3Ð6°3Ñ#6×6×6×6Ö6ˆ<×6×6Ô6ˆ<×6×6Ó6˜3×6×6×6×6×6×6×6Ó6 <°3×6×6Ô6 <×6×6Ó6°3×6×6×6×6×6×6×6×6×6×6×6×6×6×6Ñ6ùò >ùÚ#ùÚ_s   ÇPÇ$PÇ0PÊ,Pc                 ó  • [        S5      n U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p2U R                   Vs/ s H  ofR                  S	:X  d  M  UPM     nn[        U5      nSosU:H  oˆ(       d×  [        R                  " SU4S
X745      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=n=p‡g s  snf )Nz'| A | B | C |
| --- | --- | --- |
| 1 |rr   rs   r|   r8   ru   ry   rz   r/   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen)rv   rw   r‚   rz   úassert %(py9)sÚpy9)r   r7   r�   r�   r‘   r’   r“   r”   r•   r–   r5   r™   r²   )
r8   rœ   r�   rž   rŸ   r    r[   Ú@py_assert6r§   Ú@py_format10s
             r)   Ú,test_markdown_to_table_data_pads_ragged_rowsr·   v   s(  € Ü!Ð"MÓN€DØ�=‰=Ð˜AÐ˜AÑ×××Òˆ=×××××Õˆ4×××Ñˆ4××Õˆ=××Ó˜A××××××ÓØ×+Ò+ÓKÒ+�a×/EÑ/EÈÑ/J—Ñ+ÐQÐKŒ3ÐKÓLÐQÐPQÐQÐPQÑQ×Q×Q×QÒQÐL×Q×Q×Q×Q×QÕQŒ3×Q×Q×QÑQŒ3×Q×QÕQÐK×Q×QÓQÐL×Q×QÓQÐPQ×Q×Q×Q×Q×Q×QÖQùÒKs   Ã1HÄHc                 óÞ  • [        S5      n / oR                  nSo2U:H  oDoT(       a  U R                  n/ ovU:H  oˆnU(       Gdž  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  o¡R                  U
5        U(       a¬  [        R                  " SW4S	WW45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  oÁR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=p‡g )Nr]   r   rs   )z0%(py4)s
{%(py4)s = %(py2)s.num_rows
} == %(py7)sr8   )rw   r‚   rz   z%(py9)sr´   )z7%(py13)s
{%(py13)s = %(py11)s.table_cells
} == %(py16)s)rŠ   Úpy13rŒ   z%(py18)sÚpy18zassert %(py21)sÚpy21)r   r6   r5   r�   r�   r‘   r’   r“   r”   rQ   r›   r•   r–   )r8   rœ   rž   rµ   r§   r¢   rª   Ú@py_assert15Ú@py_assert14r    r¶   r­   Ú@py_format19r¯   Ú@py_format22s                  r)   Ú!test_markdown_to_table_data_emptyrÀ   |   sþ   € Ü! "Ó%€DÙ8�=‰=Ð8˜AÐ8˜AÑ×8 $×"2Ñ"2Ð8°bÐ8°bÑ"8×8×8×8Õ8ˆ=×8×8×8×8×8Õ8ˆ4×8×8×8Ñ8ˆ4×8×8Õ8ˆ=×8×8Ó8˜A×8×8×8×8×8×8×8Ò8Ð"2°b×8×8×8×8×8Õ8 $×8×8×8Ñ8 $×8×8Õ8Ð"2×8×8Ó8°b×8×8×8×8×8×8×8×8×8×8×8×8×8×8r+   c                 óº  • Sn [        U S4/S9n[        U 5      /n[        X5      nSoCU:H  oU(       Gd"  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=pTg )N©rD   rD   rC   çš™™™™™Ù?Únative©rT   Úreplacers   ©z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == %(py8)srp   rk   ©rv   r�   rˆ   rx   r‰   úassert %(py10)sÚpy10©r\   rf   rp   r�   r�   r‘   r’   r“   r”   r•   r–   ©r$   rk   r£   r�   Ú@py_assert7rµ   r«   Ú@py_format11s           r)   Útest_match_replace_one_to_onerÏ   „   sÂ   € Ø
€CÜ  h Ð0Ñ1€EÜ  ›I˜;Ð4Œ8�EÓ'Ð4¨9Ð4¨9Ñ4×4×4×4Ó4Ð'×4×4×4×4×4Õ4Œ8×4×4×4Ñ4Œ8×4×4×4×4×4Ö4�E×4×4×4Ñ4�E×4×4Õ4˜;×4×4Ó4Ð'×4×4Ó4¨9×4×4×4×4×4×4Ö4r+   c            	     óâ  • [        S/S9n [        S5      /nSn[        XUS9nSoCU:H  oU(       Gd7  [        R                  " SU4SX445      S	[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	S
[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS
[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=pTg )N©rÂ   rÄ   rÅ   ©rD   ç333333ã?rC   rC   r   ©rm   Údocling_missrs   )zK%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, som_idx=%(py5)s)
} == %(py10)srp   rk   )rv   r�   rˆ   rx   rz   rÊ   úassert %(py12)sÚpy12rË   )rk   r£   r�   rµ   Ú@py_assert9Ú@py_assert8rÎ   Ú@py_format13s           r)   Útest_match_docling_missrÛ   Š   sÓ   € ÜÐ @ÐAÑB€Eä Ð!5Ó6Ð7ÐUÀÐUŒ8�EÀÑCÐUÀ~ÐUÀ~ÑU×U×U×UÓUÐC×U×U×U×U×UÕUŒ8×U×U×UÑUŒ8×U×U×U×U×UÖU�E×U×U×UÑU�E×U×UÕUÐ7×U×UÓUÀ×U×UÓUÐC×U×UÓUÀ~×U×U×U×U×U×U×UÐUr+   c                 óì  • Sn [        U S/4/S9n[        U[        U 5      /5      nUS   o3R                  nSoTU:H  of(       d„  [        R
                  " SU4SXE45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=peUS   o3R                  nS/oTU:H  of(       d„  [        R
                  " SU4SXE45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=peg )NrÂ   Ú	bar_chart)rU   r   Úchartrs   )z,%(py3)s
{%(py3)s = %(py1)s.kind
} == %(py6)s©r�   rˆ   r„   úassert %(py8)sr‰   )z7%(py3)s
{%(py3)s = %(py1)s.picture_classes
} == %(py6)s)
r\   r   rf   ri   r�   r�   r”   r•   r–   Úpicture_classes)	r$   rk   rn   r¢   r£   r§   r�   r¥   r«   s	            r)   Útest_match_chart_over_picturerâ   �   sñ   € Ø
€CÜ 3¨¨Ð"6Ð!7Ñ8€EÜ˜5¤4¨£9 +Ó.€GØ�1‰:Ð%�?‰?Ð%˜gÐ%˜gÑ%×%×%×%Ò%ˆ?×%×%Ô%ˆ:×%×%Ó%ˆ?×%×%Ó%˜g×%×%×%×%×%×%Õ%Ø�1‰:Ð6×%Ñ%Ð6¨+¨Ð6¨Ñ6×6×6×6Ò6Ð%×6×6Ô6ˆ:×6×6Ó6Ð%×6×6Ó6¨×6×6×6×6×6×6Ö6r+   c                 óº  • Sn [        U S4/S9n[        U SSS9/n[        X5      nSoCU:H  oU(       Gd"  [        R                  " SU4S	X445      S
[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pTg )NrÂ   r;   rÅ   r]   r<   )r_   re   Úimage_tablers   rÇ   rp   rk   rÈ   rÉ   rÊ   rË   rÌ   s           r)   Ú$test_match_image_table_no_text_layerrå   ˜   sÈ   € Ø
€CÜ  e ˜~Ñ.€Eä  ¨r¸CÑ@ÐAÐSŒ8�EÓBÐSÀmÐSÀmÑS×S×S×SÓSÐB×S×S×S×S×SÕSŒ8×S×S×SÑSŒ8×S×S×S×S×SÖS�E×S×S×SÑS�E×S×SÕSÐA×S×SÓSÐB×S×SÓSÀm×S×S×S×S×S×SÖSr+   c            	     óf  • Sn [        U S4/S9n[        S5      [        S5      /nSn[        XUS9nSoTU:H  of(       Gdm  [        R                  " S	U4S
XE45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=peg )N©rD   rD   rC   ç      à?rÄ   rÅ   ©rD   ç¸…ëQ¸¾?rC   gìQ¸…ëÑ?©rD   ç{®GázÔ?rC   ç¸…ëQ¸Þ?r   rÔ   Údocling_undercountrs   )zJ%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, som_idx=%(py4)s)
} == %(py9)srp   rk   rl   )rv   r�   rw   r‚   r„   r´   úassert %(py11)srŠ   rË   )	Úregionrk   rl   rž   r§   rÙ   rÍ   r¶   Ú@py_format12s	            r)   Útest_match_docling_undercountrò   Ÿ   sú   € Ø!€FÜ ¨Ð 2Ð3Ñ4€EäÐ'Ó(¬$Ð/EÓ*FÐG€DØ)*ÐCŒ8�E¨Ñ+ÐCÐ/CÐCÐ/CÑC×C×C×CÓCÐ+×C×C×C×C×CÕCŒ8×C×C×CÑCŒ8×C×C×C×C×CÖC�E×C×C×CÑC�E×C×C×C×C×CÖC˜4×C×C×CÑC˜4×C×CÕC¨×C×CÓCÐ+×C×CÓCÐ/C×C×C×C×C×C×CÖCr+   c                 ó¸  • Sn [        SS/S9n[        U 5      /n[        X5      nSoCU:H  oU(       Gd"  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pTg )Nrç   )ré   rÄ   )rë   rÄ   rÅ   Ú
som_mergedrs   rÇ   rp   rk   rÈ   rÉ   rÊ   rË   )Úbigrk   r£   r�   rÍ   rµ   r«   rÎ   s           r)   Útest_match_som_mergedrö   §   sÂ   € Ø
€CÜÐ BÐDfÐgÑh€Eä  ›I˜;Ð7Œ8�EÓ'Ð7¨<Ð7¨<Ñ7×7×7×7Ó7Ð'×7×7×7×7×7Õ7Œ8×7×7×7Ñ7Œ8×7×7×7×7×7Ö7�E×7×7×7Ñ7�E×7×7Õ7˜;×7×7Ó7Ð'×7×7Ó7¨<×7×7×7×7×7×7Ö7r+   c                 óz  • Sn [        U S4/S9n[        U/ 5      nU Vs/ s H  o3R                  PM     nnS/oTU:H  of(       do  [        R                  " SU4SXE45      [        R
                  " U5      [        R
                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=peg s  snf )
NrÂ   rÄ   rÅ   Úsom_missrs   r   r€   rƒ   r„   )r\   r   ri   r�   r�   r”   r•   r–   )	r$   rk   rn   ro   r¢   rž   r£   r¤   r¥   s	            r)   Útest_match_som_miss_reportedrù   ®   s…   € Ø
€CÜ  h Ð0Ñ1€EÜ˜5 "Ó%€GÙ#Ó$šG�q�FŒF™GÐ4Ð$¨¨Ð4¨Ñ4×4×4×4Ò4Ð$×4×4Ô4Ð$×4×4Ó4¨×4×4×4×4×4×4Ô4ùÒ$s   ŸB8c                 ó
  • Sn [        U S4/S9n[        U 5      /n[        X5      nS[        [        40n[        UR                  X#U5      u  pV/ ovU:H  oˆ(       d¥  [        R                  " SU4SXg45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n	S	S
U	0-  n
[        [        R                  " U
5      5      eS =p‡UR                  R                  S   o»R                   owR"                  nSoÜU:H  oî(       d™  [        R                  " SU4SXÍ45      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=píUR                  S   o»R                   owR"                  nSoÜU:H  oî(       d™  [        R                  " SU4SXÍ45      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=píUR                  S   o»R                   owR$                  nSoÜU:H  oî(       d™  [        R                  " SU4SXÍ45      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=píg )NrÂ   rÄ   rÅ   r/   rs   ©z%(py0)s == %(py3)sÚerrors©rv   rˆ   úassert %(py5)srx   r   )zJ%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.data
}.num_rows
} == %(py8)s)r�   rˆ   rx   r‰   rÉ   rÊ   rr   r{   )zJ%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.data
}.num_cols
} == %(py8)s)r\   rf   r   r!   r"   r   rL   r�   r�   r‘   r’   r“   r”   r•   r–   rT   r8   r6   r7   )r$   rk   rl   rn   Ú	page_dimsÚunifiedrü   r£   rœ   Ú@py_format4rŸ   r¢   r�   rÍ   rµ   r«   rÎ   s                    r)   Ú6test_graft_replace_rebuilds_body_and_keeps_source_purer  ¸   s-  € Ø
€CÜ  h Ð0Ñ1€EÜ�‹Iˆ;€DÜ˜5Ó'€GØ”VœVÐ$Ð%€Iä,¨U¯^©^¸TÈIÓV�O€GØÐ�R‰<×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�R××××××Ñà�>‰>× Ñ  Ñ#Ð6×(Ñ(Ð6×1Ñ1Ð6°QÐ6°QÑ6×6×6×6Ò6Ð1×6×6Ô6Ð#×6×6Ó6Ð(×6×6Ó6Ð1×6×6Ó6°Q×6×6×6×6×6×6×6à�>‰>˜!ÑÐ/×!Ñ!Ð/×*Ñ*Ð/¨aÐ/¨aÑ/×/×/×/Ò/Ð*×/×/Ô/Ð×/×/Ó/Ð!×/×/Ó/Ð*×/×/Ó/¨a×/×/×/×/×/×/×/Ø�>‰>˜!ÑÐ/×!Ñ!Ð/×*Ñ*Ð/¨aÐ/¨aÑ/×/×/×/Ò/Ð*×/×/Ô/Ð×/×/Ó/Ð!×/×/Ó/Ð*×/×/Ó/¨a×/×/×/×/×/×/×/Ð/r+   c                 óà  • Sn [        U S4/S9n[        U 5      nSUl        [        SSS9[        SS	S9/Ul        [        X/5      n[        UR                  U/US
[        [        405      u  pE/ oeU:H  ow(       d¥  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =pvUR$                  S   n
U
R&                  ow" U5      nSoËU:H  oÝ(       Gd  [        R                  " SU4SX¼45      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[!        [        R"                  " U5      5      eS =n=n=pÜUR)                  5       nSnUU;   of(       d¦  [        R                  " SU4SUU45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =nnSnUU;   of(       d¦  [        R                  " SU4SUU45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =nng )NrÂ   rÄ   rÅ   ú($ in millions)ú(1)zRestated for FX.©Úmarkerr˜   ú(2)z
Unaudited.r/   rs   rû   rü   rý   rþ   rx   r   )zR%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.caption_text
}(%(py3)s)
} == %(py8)sÚtabler   )rv   rw   rˆ   rx   r‰   rÉ   rÊ   z(1) Restated for FX.©Úin©z%(py1)s in %(py3)sÚmd©r�   rˆ   z(2) Unaudited.)r\   rf   Úunitsr   Ú	footnotesr   r   rL   r!   r"   r�   r�   r‘   r’   r“   r”   r•   r–   rT   Úcaption_textÚexport_to_markdown)r$   rk   Úsomrn   r   rü   r£   rœ   r  rŸ   r	  r�   rÍ   rµ   r«   rÎ   r  r¢   s                     r)   Ú1test_graft_carries_units_and_footnotes_onto_tabler  È   sc  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆs‹)€CØ!€C„Iä˜5Ð'9Ñ:Ü˜5 |Ñ4ð€C„Mô ˜5 %Ó(€GÜ,¨U¯^©^¸c¸UÀGÈaÔRXÔZ`ÐQaÐMbÓc�O€GØÐ�R‰<×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�R××××××Ñà�N‰N˜1Ñ€EØ×ÑÐ;Ð˜gÓ&Ð;Ð*;Ð;Ð*;Ñ;×;×;×;Ó;Ð&×;×;×;×;×;Õ;ˆ5×;×;×;Ñ;ˆ5×;×;Õ;Ð×;×;×;×;×;Ô;˜g×;×;×;Ñ;˜g×;×;Õ;Ð&×;×;Ó;Ð*;×;×;×;×;×;×;Õ;ð 
×	#Ñ	#Ó	%€BØ!Ð'Ð! RÑ'×'×'×'Ò'Ð! R×'×'Ô'Ð!×'×'×'×'×'Ô' R×'×'×'Ñ' R×'×'×'×'×'×'Ô'ØÐ!Ð˜rÑ!×!×!×!Ò!Ð˜r×!×!Ô!Ð×!×!×!×!×!Ô!˜r×!×!×!Ñ!˜r×!×!×!×!×!×!Õ!r+   c           	     ó¼   • UR                    Vs/ s H@  o R                  [        UR                  R	                  S5      S   5         R
                  PMB     sn$ s  snf )NÚ/éÿÿÿÿ)ÚcaptionsÚtextsÚintÚcrefÚsplitr˜   )r   r	  r   s      r)   Ú_caption_textsr  Þ   sB   € ØDIÇNÂNÓSÂN¸q�M‰Mœ#˜aŸf™fŸl™l¨3Ó/°Ñ3Ó4Ñ5×:Ô:ÁNÑSÐSùÒSs   �AAc                 óZ  • Sn [        U S4/S9n[        U SS9nSUl        SUl        [	        X/5      n[        UR                  U/US[        [        405      u  pEUR                  S	   n[        XF5      n/ S
Qo‡U:H  o™(       Gd"  [        R                  " SU	4SXx45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " U5      [        R                   " U5      [        R                   " U5      S.-  n
SSU
0-  n[#        [        R$                  " U5      5      eS =n=n=p˜g )NrÂ   rÄ   rÅ   úVisa Debit Programs©rc   ú7The following table presents payment volume by program:r  r/   r   )r!  r  r  rs   rÇ   r  r   rÈ   rÉ   rÊ   )r\   rf   Úcaptionr  r   r   rL   r!   r"   rT   r  r�   r�   r‘   r’   r“   r”   r•   r–   ©r$   rk   r  rn   r   Ú_r£   r�   rÍ   rµ   r«   rÎ   s               r)   Ú:test_graft_carries_caption_title_units_as_ordered_captionsr%  â   s„  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆsÐ/Ñ
0€CØK€C„KØ!€C„IÜ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ#*§>¡>°!Ñ#4ð Œ>˜'Ó5ð ò :ð ð :ñ ÷ ô ïé ô	Ð5÷ ò ïé ÷	õ ïé ð	Œ>÷ ö ïé ð	Œ>÷ ó ïé ÷	õ ïé ð	˜'÷ ö ïé ð	˜'÷ ò ïé ð	Ð#4÷ ð ïé ð	Ð5÷ ð ïé ð	ð :÷ ÷ ÷ ñ ïé ÷	÷ ò r+   c                 óL  • Sn [        U S4/S9n[        U SS9nSUl        [        X/5      n[	        UR
                  U/US[        [        405      u  pEUR                  S   n[        XF5      nSS/o‡U:H  o™(       Gd"  [        R                  " S	U	4S
Xx45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[!        [        R"                  " U5      5      eS =n=n=p˜g )NrÂ   rÄ   rÅ   z(For the 3 Months Ended December 31, 2025r   r  r/   r   rs   rÇ   r  r   rÈ   rÉ   rÊ   )r\   rf   Úsubtitler   r   rL   r!   r"   rT   r  r�   r�   r‘   r’   r“   r”   r•   r–   r#  s               r)   Ú0test_graft_older_artifact_subtitle_still_carriedr(  ñ   sƒ  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆsÐDÑ
E€CØ(€C„LÜ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ#*§>¡>°!Ñ#4ð Œ>˜'Ó5ð Ø2Øð:ð ð :ñ ÷ ô ïé ôÐ5÷ ò ïé ÷õ ïé ðŒ>÷ ö ïé ðŒ>÷ ó ïé ÷õ ïé ð˜'÷ ö ïé ð˜'÷ ò ïé ðÐ#4÷ ð ïé ðÐ5÷ ð ïé ðð :÷ ÷ ÷ ñ ïé ÷÷ ò r+   c            
     óÔ  • Su  p[        U S4US4/S9nSnUR                  R                  [        R                  U[        S[        S5      SS9S	9  [        U 5      nS
Ul        [        U5      nSUl        [        X$U/5      n[        UR                  XE/US[        [        405      u  px/ o˜U	:H  oª(       d¥  [        R                  " SU
4SX‰45      S[        R                   " 5       ;   d  [        R"                  " U5      (       a  [        R$                  " U5      OS[        R$                  " U	5      S.-  nSSU0-  n['        [        R(                  " U5      5      eS =p©UR*                   GH{  n[-        X}5      oã/oþU:H  nU(       GdX  [        R                  " SU4SXï45      S[        R                   " 5       ;   d  [        R"                  " [,        5      (       a  [        R$                  " [,        5      OSS[        R                   " 5       ;   d  [        R"                  " U5      (       a  [        R$                  " U5      OSS[        R                   " 5       ;   d  [        R"                  " U5      (       a  [        R$                  " U5      OS[        R$                  " U5      [        R$                  " U5      S.-  nSSU0-  n['        [        R(                  " U5      5      eS =n=nnGM~     g )N))çš™™™™™©?çš™™™™™É?rí   rÓ   )g¤p=
×£à?r+  çffffffî?rÓ   rÄ   rÅ   z•Concentration of Credit Risk - The following tables present the geographies and property types of collateral underlying the loans' principal amounts:r/   )r*  rê   r,  ç333333Ã?r0   r1   ©Úlabelr˜   r9   zvThe following tables present the geographies and property types of collateral underlying the loans' principal amounts:uM   Concentration of Credit Risk â€” The following tables present the geographiesrs   rû   rü   rý   rþ   rx   )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py7)sr  r   r	  )rv   r�   rw   r‚   rz   r³   r´   )r\   rL   Úadd_textr   ÚTEXTr   r*   rf   r"  r   r   r!   r"   r�   r�   r‘   r’   r“   r”   r•   r–   rT   r  )ÚleftÚrightrk   ÚsentenceÚsom_leftÚ	som_rightrn   r   rü   r£   rœ   r  rŸ   r	  rž   rµ   r§   r    r¶   s                      r)   ÚItest_graft_caption_takes_the_whole_paragraph_for_both_side_by_side_tablesr7  þ   så  € ð
 A�K€DÜ  xÐ 0°5¸(Ð2CÐDÑE€Eð	Pð ð 
‡N�N×ÑÜ×ÑØÜ AÔ,?Ð@XÓ,YÐdjÑkð ñ ô
 �D‹z€Hð P€HÔÜ�U“€IØg€IÔÜ˜5¨YÐ"7Ó8€GÜ,Ø�‰˜Ð-¨w¸¼VÄVÐ<LÐ8Mó�O€Gð Ð�R‰<×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�R××××××ÑØ—•ˆÜ˜gÓ-Ð;°Ð;°Ñ;×;×;×;Ô;Ð-×;×;×;×;×;Õ;Œ~×;×;×;Ñ;Œ~×;×;×;×;×;Ö;˜g×;×;×;Ñ;˜g×;×;×;×;×;Ö; u×;×;×;Ñ; u×;×;Õ;Ð-×;×;Ó;°×;×;×;×;×;×;×;ò  r+   c                 ó^  • Sn [        U S4/S9n[        U 5      nSUl        [        X/5      n[	        UR
                  U/US[        [        405      u  pEUR                  S   n[        XF5      orR                  /o‡U:H  o™(       Gd"  [        R                  " SU	4SXx45      S	[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[!        [        R"                  " U5      5      eS =n=n=p˜g )NrÂ   rÄ   rÅ   zLThe table below sets forth additional information relating to our portfolio:r/   r   rs   rÇ   r  r   rÈ   rÉ   rÊ   ©r\   rf   r"  r   r   rL   r!   r"   rT   r  r�   r�   r‘   r’   r“   r”   r•   r–   r#  s               r)   Ú4test_graft_caption_stands_when_no_paragraph_holds_itr:    s	  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆs‹)€CØ`€C„KÜ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ#*§>¡>°!Ñ#4ÐFŒ>˜'Ó5ÐF¿+¹+¸ÐF¸ÑF×F×F×FÓFÐ5×F×F×F×F×FÕFŒ>×F×F×FÑFŒ>×F×F×F×F×FÖF˜'×F×F×FÑF˜'×F×FÕFÐ#4×F×FÓFÐ5×F×FÓF¸×F×F×F×F×F×FÖFr+   c            
     óÎ  • Sn [        U S4/S9nUR                  R                  [        R                  S[        S[        S5      SS9S	9  [        U SS
9nSUl        SUl	        [        X/5      n[        UR                  U/US[        [        405      u  pEUR                  S   n[        XF5      nS/o‡U:H  o™(       Gd"  [         R"                  " SU	4SXx45      S[$        R&                  " 5       ;   d  [         R(                  " [        5      (       a  [         R*                  " [        5      OSS[$        R&                  " 5       ;   d  [         R(                  " U5      (       a  [         R*                  " U5      OS[         R*                  " U5      [         R*                  " U5      [         R*                  " U5      S.-  n
SSU
0-  n[-        [         R.                  " U5      5      eS =n=n=p˜g )N)rD   r+  rC   rè   rÄ   rÅ   zTable of Contentsr/   )rD   g{®Gáz„?ç333333Ó?g¸…ëQ¸ž?r0   r1   r.  r   r  r   rs   rÇ   r  r   rÈ   rÉ   rÊ   )r\   rL   r0  r   ÚPAGE_HEADERr   r*   rf   r"  r  r   r   r!   r"   rT   r  r�   r�   r‘   r’   r“   r”   r•   r–   r#  s               r)   Ú7test_graft_never_writes_page_furniture_as_a_header_liner>  %  sQ  € ð €CÜ  h Ð0Ñ1€EØ	‡N�N×ÑÜ×&Ñ&Ø Ü AÔ,?Ð@VÓ,WÐbhÑið ñ ô
 ˆsÐ-Ñ
.€CØ%€C„KØ!€C„IÜ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ#*§>¡>°!Ñ#4ÐLŒ>˜'Ó5ÐLÐ:KÐ9LÐLÐ9LÑL×L×L×LÓLÐ5×L×L×L×L×LÕLŒ>×L×L×LÑLŒ>×L×L×L×L×LÖL˜'×L×L×LÑL˜'×L×LÕLÐ#4×L×LÓLÐ5×L×LÓLÐ9L×L×L×L×L×L×LÖLr+   c                 ó\  • Sn [        U S4/S9n[        U SS9nSUl        [        X/5      n[	        UR
                  U/US[        [        405      u  pEUR                  S   n[        XF5      orR                  /o‡U:H  o™(       Gd"  [        R                  " S	U	4S
Xx45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[!        [        R"                  " U5      5      eS =n=n=p˜g )NrÂ   rÄ   rÅ   ÚActivityr   uc   Activity â€” For the three months ended March 31, 2026, the loan portfolio activity was as follows:r/   r   rs   rÇ   r  r   rÈ   rÉ   rÊ   r9  r#  s               r)   Ú9test_graft_title_that_repeats_the_caption_is_written_oncerA  8  s  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆs˜*Ñ
%€Càmð „Kô ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ#*§>¡>°!Ñ#4ÐFŒ>˜'Ó5ÐF¿+¹+¸ÐF¸ÑF×F×F×FÓFÐ5×F×F×F×F×FÕFŒ>×F×F×FÑFŒ>×F×F×F×F×FÖF˜'×F×F×FÑF˜'×F×FÕFÐ#4×F×FÓFÐ5×F×FÓF¸×F×F×F×F×F×FÖFr+   c                 ó”  ^• Sn [        U S4/S9nUR                  mU4S jnU" [        R                  SS5        U" [        R                  SS5        U" [        R                  S	S
5        U" [        R                  SS5        [        U SS9nSUl        [        X/5      n[        TU/US[        [        405      u  pVUR                   Vs/ s H!  owR                  (       d  M  UR                  PM#     nnSo™U;  oª(       d¥  [        R                  " SU
4SX˜45      [        R                   " U	5      S["        R$                  " 5       ;   d  [        R&                  " U5      (       a  [        R                   " U5      OSS.-  nSSU0-  n[)        [        R*                  " U5      5      eS =pšSo™U;  oª(       d¥  [        R                  " SU
4SX˜45      [        R                   " U	5      S["        R$                  " 5       ;   d  [        R&                  " U5      (       a  [        R                   " U5      OSS.-  nSSU0-  n[)        [        R*                  " U5      5      eS =pšS	o™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                   " U	5      S["        R$                  " 5       ;   d  [        R&                  " U5      (       a  [        R                   " U5      OSS.-  nSSU0-  n[)        [        R*                  " U5      5      eS =pšSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                   " U	5      S["        R$                  " 5       ;   d  [        R&                  " U5      (       a  [        R                   " U5      OSS.-  nSSU0-  n[)        [        R*                  " U5      5      eS =pšg s  snf )NrÂ   rÄ   rÅ   c           
     óJ   >• TR                  U U[        S[        U5      SS9S9$ ©Nr/   r0   r1   r.  ©r0  r   r*   ©r/  r˜   Únorm_boxrV   s      €r)   Ú_textÚ;test_graft_dedups_in_region_text_keeps_spine.<locals>._textI  ó2   ø€ Ø�|‰|ØØÜ¨Ô0CÀHÓ0MÐX^Ñ_ð ð 
ð 	
r+   z$539)r+  r+  r<  g      Ð?z
(millions))rÃ   r-  rè   gÃõ(\�ÂÅ?z1. Branded Volume)rD   g)\�Âõ(¼?rÓ   g¤p=
×£À?zFootnote section body)rD   rÓ   rC   gÍÌÌÌÌÌä?z2| Volume | 2025 |
| --- | --- |
| Branded | $539 |©r_   r/   )únot in)z%(py1)s not in %(py3)sr  r  rþ   rx   r
  r  )r\   rL   r   r1  ÚSECTION_HEADERrf   r  r   r   r!   r"   r  r9   r˜   r�   r�   r”   r‘   r’   r“   r•   r–   )r$   rk   rH  r  rn   r   r$  r   r  r¢   r£   r  rŸ   rV   s                @r)   Ú,test_graft_dedups_in_region_text_keeps_spinerN  D  sN  ø€ Ø
€CÜ  h Ð0Ñ1€EØ
�.‰.€Cõ
ñ 
Œ,×
Ñ
˜VÐ%:Ô;Ù	Œ,×
Ñ
˜\Ð+AÔBÙ	Œ,×
%Ñ
%Ð':Ð<RÔSÙ	Œ,×
Ñ
Ð4Ð6KÔLä
ˆsÐSÑ
T€CØ€C„IÜ˜5 %Ó(€GÜ'¨¨c¨U°G¸aÄ&Ì&ÐAQÐ=RÓS�J€Gð %Ÿ]š]Ó5š]˜¯f­f‹VˆQ�VŒV™]€EÐ5ØÐ˜Ñ×××Òˆ6××Ôˆ6×××××Ô˜×××Ñ˜××××××ÓØÐ$˜uÑ$×$×$×$Ò$ˆ<×$×$Ô$ˆ<×$×$×$×$×$Ô$˜u×$×$×$Ñ$˜u×$×$×$×$×$×$Ó$ØÐ' %Ñ'×'×'×'Ò'Ð×'×'Ô'Ð×'×'×'×'×'Ô' %×'×'×'Ñ' %×'×'×'×'×'×'Ó'Ø"Ð+ eÑ+×+×+×+Ò+Ð"×+×+Ô+Ð"×+×+×+×+×+Ô+ e×+×+×+Ñ+ e×+×+×+×+×+×+Ô+ùò	 6s   Ã
OÃ"Oc                 ó0  ^• Sn [        U S4/S9nUR                  mU4S jnU" [        R                  SS5        U" [        R                  SS5        U" [        R                  S	S
5        U" [        R                  SS5        [	        U SS9n[        SSS9[        SSS9/Ul        [        X/5      n[        TU/US[        [        405      u  pVUR                   Vs/ s H!  owR                  (       d  M  UR                  PM#     nnS U 5       n	[        U	5      oª(       + o»(       d¢  SS[        R                   " 5       ;   d  ["        R$                  " [        5      (       a  ["        R&                  " [        5      OS["        R&                  " U	5      ["        R&                  " U
5      S.-  n[)        ["        R*                  " U5      5      eS =n	=p«S U 5       n	[        U	5      oª(       + o»(       d¢  SS[        R                   " 5       ;   d  ["        R$                  " [        5      (       a  ["        R&                  " [        5      OS["        R&                  " U	5      ["        R&                  " U
5      S.-  n[)        ["        R*                  " U5      5      eS =n	=p«S U 5       n	[        U	5      oª(       d¢  SS[        R                   " 5       ;   d  ["        R$                  " [        5      (       a  ["        R&                  " [        5      OS["        R&                  " U	5      ["        R&                  " U
5      S.-  n[)        ["        R*                  " U5      5      eS =pšS U 5       n	[        U	5      oª(       d¢  SS[        R                   " 5       ;   d  ["        R$                  " [        5      (       a  ["        R&                  " [        5      OS["        R&                  " U	5      ["        R&                  " U
5      S.-  n[)        ["        R*                  " U5      5      eS =pšg s  snf )Nrç   rÄ   rÅ   c           
     óJ   >• TR                  U U[        S[        U5      SS9S9$ rD  rE  rF  s      €r)   rH  ÚMtest_graft_dedup_keeps_in_region_text_the_table_does_not_carry.<locals>._textj  rJ  r+   z0(1) Includes the impact of interest rate floors.)rD   g
×£p=
×?rC   gR¸…ëQØ?z}(2) Net of deferred origination fees and other items as of June 30, 2026, recognized in unrealized gain (loss) on securities.)rD   gö(\�ÂõØ?rC   g=
×£p=Ú?u   First mortgage loansâ€™ balance)rD   r+  rè   ç)\�Âõ(Ì?z€As of June 30, 2026, $2.5 billion, or 88.9%, of the outstanding face amount were at variable interest rates linked to Term SOFR.)rD   g…ëQ¸…Û?rC   g®GázÞ?zO| | Face Amount |
| --- | --- |
| First mortgage loans' balance | $ 2,807,310 |rK  r  z,Includes the impact of interest rate floors.r  r  zENet of deferred origination fees and other items as of June 30, 2026,r/   c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)z(1) IncludesN©Ú
startswith©Ú.0r   s     r)   Ú	<genexpr>ÚQtest_graft_dedup_keeps_in_region_text_the_table_does_not_carry.<locals>.<genexpr>Ž  s   é € Ð?º°A—<‘< ×/Ð/ºùó   ‚z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany©rv   rw   r‚   c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)zFirst mortgageNrT  rV  s     r)   rX  rY  �  s   é € ÐAº5°a—<‘<Ð 0×1Ð1º5ùrZ  c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)z
(2) Net ofNrT  rV  s     r)   rX  rY  �  s   é € Ð9²5¨a�|‰|˜L×)Ð)²5ùrZ  ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)z!As of June 30, 2026, $2.5 billionNrT  rV  s     r)   rX  rY  ‘  s   é € ÐPÊ%ÀQ�|‰|Ð?×@Ð@Ê%ùrZ  )r\   rL   r   r1  rf   r   r  r   r   r!   r"   r  r9   r˜   r[  r‘   r’   r�   r“   r”   r•   r–   )r$   rk   rH  r  rn   r   r$  r   r  rœ   rž   r§   rŸ   r¤   rV   s                 @r)   Ú>test_graft_dedup_keeps_in_region_text_the_table_does_not_carryra  b  s°  ø€ ð €CÜ  h Ð0Ñ1€EØ
�.‰.€Cõ
ñ 
Œ,×
Ñ
ÐOÐQgÔhá	Ü×Ñð	>àô	ñ 
Œ,×
Ñ
Ð>Ð@UÔVÙ	Ü×Ñð	?àô	ô ØÐiñ€Cô 	˜5Ð'UÑVÜØÐfñ	
ð€C„Mô ˜5 %Ó(€GÜ'¨¨c¨U°G¸aÄ&Ì&ÐAQÐ=RÓS�J€GØ$Ÿ]š]Ó5š]˜¯f­f‹VˆQ�VŒV™]€EÐ5Ù?¹Ó?Ð?ŒsÐ?Ó?Ð?Ô?Ð?Õ?×?×?×?×?×?Ñ?Œs×?×?×?Ñ?Œs×?×?Õ?Ð?×?×?Ó?Ð?×?×?×?×?×?Ô?ÙA¹5ÓAÐAŒsÐAÓAÐAÔAÐAÕA×A×A×A×A×AÑAŒs×A×A×AÑAŒs×A×AÕAÐA×A×AÓAÐA×A×A×A×A×AÔAÙ9±5Ó9Ð9Œ3Ð9Ó9Ð9Õ9×9×9×9×9×9Ñ9Œ3×9×9×9Ñ9Œ3×9×9Õ9Ð9×9×9Ó9Ð9×9×9×9×9×9Ò9ÙPÉ%ÓPÐPŒ3ÐPÓPÐPÕP×P×P×P×P×PÑPŒ3×P×P×PÑPŒ3×P×PÕPÐP×P×PÓPÐP×P×P×P×P×PÓPùò	 6s   ÃPÃ4Pc                 ó`  • Sn [        U S4/S9n[        U 5      n[        X/5      n[        UR                  U/US[
        [        405      u  pEUR                  S   ofR                  n/ o‡U:H  o™(       d„  [        R                  " SU	4SXx45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
S	S
U
0-  n[        [        R                  " U5      5      eS =n=n=p˜UR                  S   ofR                  n/ o‡U:H  o™(       d„  [        R                  " SU	4SXx45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
S	S
U
0-  n[        [        R                  " U5      5      eS =n=n=p˜g )NrÂ   rÄ   rÅ   r/   r   rs   )z0%(py3)s
{%(py3)s = %(py1)s.captions
} == %(py6)srß   rà   r‰   )z1%(py3)s
{%(py3)s = %(py1)s.footnotes
} == %(py6)s)r\   rf   r   r   rL   r!   r"   rT   r  r�   r�   r”   r•   r–   r  )r$   rk   r  rn   r   r$  r¢   r£   r§   r�   r¥   r«   s               r)   Ú+test_graft_no_attribution_when_som_has_nonerc  ”  s"  € Ø
€CÜ  h Ð0Ñ1€EÜ
ˆs‹)€CÜ˜5 %Ó(€GÜ'¨¯©¸¸¸wÈÌVÔU[ÐL\ÐH]Ó^�J€GØ�>‰>˜!ÑÐ+×%Ñ%Ð+¨Ð+¨Ñ+×+×+×+Ò+Ð%×+×+Ô+Ð×+×+Ó+Ð%×+×+Ó+¨×+×+×+×+×+×+Õ+Ø�>‰>˜!ÑÐ,×&Ñ&Ð,¨"Ð,¨"Ñ,×,×,×,Ò,Ð&×,×,Ô,Ð×,×,Ó,Ð&×,×,Ó,¨"×,×,×,×,×,×,Ö,r+   c                 ó®  • Sn [        U S4/S9n[        U 5      [        S5      /n[        X5      n[        UR                  X#S[
        [        405      u  pE/ oeU:H  ow(       d¥  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S	.-  nS
SU0-  n	[        [        R                  " U	5      5      eS =pvUR                  n[!        U5      n
SoºU:H  oÌ(       Gd"  [        R                  " SU4SX«45      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n
=pËg )NrÂ   rÄ   rÅ   rÒ   r/   rs   rû   rü   rý   rþ   rx   r{   ©zL%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.tables
})
} == %(py8)sr²   r   rÈ   rÉ   rÊ   )r\   rf   r   r   rL   r!   r"   r�   r�   r‘   r’   r“   r”   r•   r–   rT   r²   )Úmatchedrk   rl   rn   r   rü   r£   rœ   r  rŸ   r�   rÍ   rµ   r«   rÎ   s                  r)   Ú#test_graft_insert_adds_missed_tablerg  ž  s[  € Ø"€GÜ ¨(Ð 3Ð4Ñ5€Eô �‹Mœ4Ð 4Ó5Ð6€DÜ˜5Ó'€GÜ,¨U¯^©^¸TÈQÔQWÔY_ÐP`ÐLaÓb�O€GØÐ�R‰<×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�R××××××ÑØ�~‰~Ð#Œ3ˆ~ÓÐ# !Ð# !Ñ#×#×#×#Ó#Ð×#×#×#×#×#Õ#Œ3×#×#×#Ñ#Œ3×#×#×#×#×#Ö#ˆw×#×#×#Ñ#ˆw×#×#Õ#ˆ~×#×#Ó#Ð×#×#Ó# !×#×#×#×#×#×#Ö#r+   c                 óª  • [        S/S9n [        SSSSS9/n[        X5      n[        U R                  XS[
        [        405      u  p4UR                  n[        U5      nSovU:H  oˆ(       Gd"  [        R                  " S	U4S
Xg45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                   " U
5      5      eS =n=n=p‡S U 5       n[#        U5      oÌ(       d¢  SS[        R                  " 5       ;   d  [        R                  " ["        5      (       a  [        R                  " ["        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                   " U5      5      eS =p¼g )NrÑ   rÅ   rÒ   r]   r<   ú
Lost table)r_   re   rc   r/   rs   re  r²   r   rÈ   rÉ   rÊ   c              3  ó,   #   • U  H
  nS U;   v •  M     g7f)ri  N© ©rW  Úes     r)   rX  Ú;test_graft_insert_empty_body_is_surfaced.<locals>.<genexpr>°  s   é € Ð1ª& Qˆ|˜qÖ ª&ùó   ‚r_  r[  r\  )r\   rf   r   r   rL   r!   r"   rT   r²   r�   r�   r‘   r’   r“   r”   r•   r–   r[  )rk   rl   rn   r   rü   r£   r�   rÍ   rµ   r«   rÎ   rœ   rž   r¤   s                 r)   Ú(test_graft_insert_empty_body_is_surfacedrp  ª  s[  € ÜÐ @ÐAÑB€EÜÐ%°¸SÈÑUÐV€DÜ˜5Ó'€GÜ,¨U¯^©^¸TÈQÔQWÔY_ÐP`ÐLaÓb�O€GØ�~‰~Ð#Œ3ˆ~ÓÐ# !Ð# !Ñ#×#×#×#Ó#Ð×#×#×#×#×#Õ#Œ3×#×#×#Ñ#Œ3×#×#×#×#×#Ö#ˆw×#×#×#Ñ#ˆw×#×#Õ#ˆ~×#×#Ó#Ð×#×#Ó# !×#×#×#×#×#×#Õ#Ù1©&Ó1Ð1Œ3Ð1Ó1Ð1Õ1×1×1×1×1×1Ñ1Œ3×1×1×1Ñ1Œ3×1×1Õ1Ð1×1×1Ó1Ð1×1×1×1×1×1Ó1r+   c                 óœ  • Sn [        U S4/S9n[        U/ 5      n[        UR                  / US[        [
        405      u  p4UR                  n[        U5      nSovU:H  oˆ(       Gd"  [        R                  " SU4SXg45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S	.-  n	S
SU	0-  n
[        [        R                  " U
5      5      eS =n=n=p‡S U 5       n[!        U5      oÌ(       d¢  SS[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =p¼g )NrÂ   rÄ   rÅ   r/   rs   re  r²   r   rÈ   rÉ   rÊ   c              3  ó,   #   • U  H
  nS U;   v •  M     g7f)zno SoM matchNrk  rl  s     r)   rX  Ú8test_graft_som_miss_surfaced_as_error.<locals>.<genexpr>¹  s   é € Ð3ªF qˆ~ Ö"ªFùro  r_  r[  r\  )r\   r   r   rL   r!   r"   rT   r²   r�   r�   r‘   r’   r“   r”   r•   r–   r[  )r$   rk   rn   r   rü   r£   r�   rÍ   rµ   r«   rÎ   rœ   rž   r¤   s                 r)   Ú%test_graft_som_miss_surfaced_as_errorrt  ³  sR  € Ø
€CÜ  h Ð0Ñ1€EÜ˜5 "Ó%€GÜ,¨U¯^©^¸RÀÈ1ÌvÔW]ÐN^ÐJ_Ó`�O€GØ�~‰~Ð#Œ3ˆ~ÓÐ# !Ð# !Ñ#×#×#×#Ó#Ð×#×#×#×#×#Õ#Œ3×#×#×#Ñ#Œ3×#×#×#×#×#Ö#ˆw×#×#×#Ñ#ˆw×#×#Õ#ˆ~×#×#Ó#Ð×#×#Ó# !×#×#×#×#×#×#Õ#Ù3©FÓ3Ð3Œ3Ð3Ó3Ð3Õ3×3×3×3×3×3Ñ3Œ3×3×3×3Ñ3Œ3×3×3Õ3Ð3×3×3Ó3Ð3×3×3×3×3×3Ó3r+   c                 ó¸	  ^• Sn SnSn[        U S4US4US4/S9n[        S5      [        S5      [        U5      /n[        X45      nU Vs0 s H  ofR                  U_M     nn[	        U5      n1 Sko˜U	:H  oª(       Gd  [
        R                  " S	U
4S
X‰45      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      [
        R                  " U	5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=p©US   oÝR                  nS/o˜U	:H  oª(       d„  [
        R                  " S	U
4SX‰45      [
        R                  " U5      [
        R                  " U5      [
        R                  " U	5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=n=p©US   oÝR                  nS/o˜U	:H  oª(       d„  [
        R                  " S	U
4SX‰45      [
        R                  " U5      [
        R                  " U5      [
        R                  " U	5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=n=p©US   oÝR                  nS/o˜U	:H  oª(       d„  [
        R                  " S	U
4SX‰45      [
        R                  " U5      [
        R                  " U5      [
        R                  " U	5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=n=p©[        UR                  XES[         ["        405      u  pïUR$                   Vs/ s H  nUR&                  PM     nn[)        S5       Vs/ s H  nSU 3PM
     nnUU:H  oˆ(       dp  [
        R                  " S	U4SUU45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=nnUR$                   Vs0 s H  nUR&                  U_M     snmS U4S jjnU" US   U/5        U" US   U/5        U" US   SS/5        g s  snf s  snf s  snf s  snf )!N)rD   r*  rC   gffffffÖ?)rD   rè   rC   gffffffæ?)rD   gš™™™™™é?rC   r,  rÄ   rÅ   )rD   gìQ¸…ë±?rC   gR¸…ëQÈ?)rD   gáz®GáÊ?rC   g…ëQ¸Õ?>   rÆ   rø   rî   rs   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚsetÚby_kind)rv   r�   rˆ   r„   rà   r‰   rî   z
#/tables/0)z:%(py3)s
{%(py3)s = %(py1)s.docling_table_refs
} == %(py6)srß   rÆ   z
#/tables/1rø   z
#/tables/2r/   é   z	#/tables/r   r€   rƒ   r„   c           
     ó^  >• U R                   n[        U5      n[        U5      oCU:H  oU(       GdÀ  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pT[        U R                   US	S
9 GHž  u  p‰TU   R                  S   R                  n
[        U	5      nU
R                  U
R                  U
R                   U
R"                  4n[$        R&                  o;R                  UR                  UR                   UR"                  4oS" U5      oÜU:H  o"(       dì  [        R                  " SU4SXÍ45      [        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [$        5      (       a  [        R                  " [$        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=p]GM¡     g )Nrs   )zx%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.docling_table_refs
})
} == %(py10)s
{%(py10)s = %(py7)s(%(py8)s)
}r²   ÚmatchÚboxes)rv   r�   rˆ   rx   rz   r‰   rÊ   rÖ   r×   F)Ústrictr   )zL%(py1)s == %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s)
}Úpytest)r�   rˆ   rx   rz   r´   rï   rŠ   )Údocling_table_refsr²   r�   r�   r‘   r’   r“   r”   r•   r–   Úzipr9   r3   r*   r   r   r   r   r}  Úapprox)rz  r{  r£   r�   rØ   rµ   rÎ   rÚ   Úrefr$   ÚgotÚwantr¢   rÙ   r¶   rñ   Úby_refs                   €r)   Ú_assert_resolves_toÚQtest_graft_rewrites_report_refs_to_unified_numbering.<locals>._assert_resolves_toÙ  s
  ø€ Ø×+Ñ+Ð:ŒsÐ+Ó,Ð:´°E³
Ð:°
Ñ:×:×:×:Ó:Ð,×:×:×:×:×:Õ:Œs×:×:×:Ñ:Œs×:×:×:×:×:Ö:�5×:×:×:Ñ:�5×:×:Õ:Ð+×:×:Ó:Ð,×:×:×:×:×:Ô:´×:×:×:Ñ:´×:×:×:×:×:Ö:°E×:×:×:Ñ:°E×:×:Õ:°
×:×:×:×:×:×:Õ:Ü˜E×4Ñ4°eÀEÕJ‰HˆCØ˜‘+×"Ñ" 1Ñ%×*Ñ*ˆCÜ& sÓ+ˆDØ—E‘E˜3Ÿ5™5 #§%¡%¨¯©Ð/Ðb´6·=±=ÐbÇ&Á&È$Ï&É&ÐRV×RXÑRXÐZ^×Z`ÑZ`ÐAaÐb°=ÐAaÓ3bÐbÐ3bÑb×b×b×bÒbÐ/×b×bÔbÐ/×b×b×b×b×bÔb´6×b×b×bÑb´6×b×bÕb°=×b×bÓbÐAa×b×bÓbÐ3b×b×b×b×b×b×b×bÒbò Kr+   )r{  zList[NormBox]ÚreturnÚNone)r\   rf   r   ri   rv  r�   r�   r‘   r’   r“   r”   r•   r–   r~  r   rL   r!   r"   rT   r=   Úrange)ÚmergedÚkeptÚmissedrk   rl   rn   ro   rw  r£   r§   r�   r¥   r«   r¢   r   r$  r   rZ   rž   r¤   r…  r„  s                        @r)   Ú4test_graft_rewrites_report_refs_to_unified_numberingr�  ¼  sZ  ø€ ð $€FØ€DØ"€FÜ ¨Ð 2°T¸8Ð4DÀvÈxÐFXÐYÑZ€EäÐ#Ó$ÜÐ#Ó$ÜˆT‹
ð€Dô
 ˜5Ó'€GÙ")Ó*¢'˜Q�v‰v�qŠy¡'€GÐ*Üˆw‹<ÐHÒHÐHÐHÑH×H×H×HÓHˆ<×H×H×H×H×HÕHŒ3×H×H×HÑHŒ3×H×H×H×H×HÖHˆw×H×H×HÑHˆw×H×HÕHˆ<×H×HÓHÐH×H×H×H×H×H×HÓHØÐ'Ñ(ÐM×;Ñ;ÐMÀ¸~ÐM¸~ÑM×M×M×MÒMÐ;×M×MÔMÐ(×M×MÓMÐ;×M×MÓM¸~×M×M×M×M×M×MÕMØ�9ÑÐB×0Ñ0ÐB°\°NÐB°NÑB×B×B×BÒBÐ0×B×BÔBÐ×B×BÓBÐ0×B×BÓB°N×B×B×B×B×B×BÕBØ�:ÑÐC×1Ñ1ÐC°l°^ÐC°^ÑC×C×C×CÒCÐ1×C×CÔCÐ×C×CÓCÐ1×C×CÓC°^×C×C×C×C×C×CÕCä'¨¯©¸ÈÌFÔTZÐK[ÐG\Ó]�J€Gð !(§¢Ó/¢˜1ˆA�JŒJ¡ÐVÐ/ÌUÐSTÌXÓ3VÊXÈ°iÀ¸s³OÉXÐVÐ3VÐ/Ð3VÑV×V×V×VÒVÐ/Ð3V×V×VÔVÐ/×V×VÓVÐ3V×V×V×V×V×V×VÔVØ%,§^¢^Ó4¢^ ˆa�j‰j˜!Šm¡^Ñ4€F÷cñ ˜ 	Ñ*¨T¨FÔ3Ù˜ 
Ñ+¨f¨XÔ6Ù˜Ð 4Ñ5Ð8NÐPfÐ7gÕhùò- +ùò 0ùÒ3VùÚ4s   Á	SÎ8SÏSÑ=Sc                ó†   • SSK Jn  U  VVVs/ s H  o" VVs/ s H  u  p4U" X4S9PM     snnPM     snnn$ s  snnf s  snnnf )zUA cell_grid / corrected_grid from [(text, box), ...] rows; boxes normalized top-left.r   )ÚGroundedCell)r˜   r$   )Úquber.core.extractors.baser�  )Úrowsr�  Úrowr   r   s        r)   Ú	_groundedr“  è  s6   € å7áEIÕJÂT¸c°SÔ9²S©T¨Q‰\˜qÔ(±SÕ9ÁTÓJÐJùÓ9ùÔJs   �
<—6©<¶<c            	     ó  • SS K n Sn[        US4/S9n[        U5      nSUl        SUl        [        SS/S	S
/SS//5      Ul        [        X#/5      n[        UR                  U/US[        [        405      u  pV/ ovU:H  oˆ(       d¥  [        R                  " SU4SXg45      S[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS[        R"                  " U5      S.-  n	SSU	0-  n
[%        [        R&                  " U
5      5      eS =p‡UR(                  S   nUR*                  nS oÈULoÝ(       dº  [        R                  " SU4SXŒ45      S[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS[        R"                  " U5      [        R"                  " U5      S.-  n
SSU
0-  n[%        [        R&                  " U5      5      eS =n=pÜUR*                  R-                  5       nUS   nSnUU:H  ow(       dp  [        R                  " SU4SUU45      [        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=p}US   nSnUU:H  ow(       dp  [        R                  " SU4SUU45      [        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=p}UR.                  R0                   Vs0 s H  nUR2                  UR4                  4U_M     nnUS    nUR6                  nS oÈULoÝ(       dº  [        R                  " SU4S!XŒ45      S"[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS"[        R"                  " U5      [        R"                  " U5      S.-  n
SSU
0-  n[%        [        R&                  " U5      5      eS =n=pÜUR6                  oˆR8                  n[:        R<                  nUU:H  nU(       Gd#  [        R                  " SU4S#UU45      S"[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS"[        R"                  " U5      [        R"                  " U5      S$[        R                  " 5       ;   d  [        R                   " [:        5      (       a  [        R"                  " [:        5      OS$[        R"                  " U5      S%.-  nS&S'U0-  n[%        [        R&                  " U5      5      eS =n=n=nnUR6                  oˆR>                  nS(nU[        -  nUU:H  nU(       Gd#  [        R                  " SU4S)UU45      S"[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS"[        R"                  " U5      [        R"                  " U5      [        R"                  " U5      S*[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS*S+.-  nS,S-U0-  n[%        [        R&                  " U5      5      eS =n=n=n=nnUR6                  oˆR@                  nS.nS/nUU-
  nU[        -  n UU :H  nU(       Gd8  [        R                  " SU4S0UU 45      S"[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS"[        R"                  " U5      [        R"                  " U5      [        R"                  " U5      [        R"                  " U5      S1[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OS1S2.-  n!S3S4U!0-  n"[%        [        R&                  " U"5      5      eS =n=n=n=n=n=nn US5   nUR6                  nS nUUL oÌ(       d…  [        R                  " S6U4S7UU45      [        R"                  " U5      [        R"                  " U5      [        R"                  " U5      S8.-  nS9S:U0-  n[%        [        R&                  " U5      5      eS =n=n=nnUR-                  S;S<9n#[B        RD                  " U#5      n$U$R(                  S   nUR*                  nS nUULoÌ(       d…  [        R                  " SU4S=UU45      [        R"                  " U5      [        R"                  " U5      [        R"                  " U5      S8.-  nS9S:U0-  n[%        [        R&                  " U5      5      eS =n=n=nnU$R(                  S   R*                  R-                  5       S   nSnUU:H  ow(       dp  [        R                  " SU4SUU45      [        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=p}SnU RF                  oÌ" U#5      nUU;   ow(       Gd  [        R                  " S>U4S?UU45      [        R"                  " U5      S;[        R                  " 5       ;   d  [        R                   " U 5      (       a  [        R"                  " U 5      OS;[        R"                  " U5      S@[        R                  " 5       ;   d  [        R                   " U#5      (       a  [        R"                  " U#5      OS@[        R"                  " U5      SA.-  nS&S'U0-  n[%        [        R&                  " U5      5      eS =n=n=nng s  snf )BNr   rÂ   rÄ   rÅ   z67609452-p1-t1Úab12cd34)r}   )rD   rê   r+  çìQ¸…ëÁ?)r~   )rè   rê   rÓ   r–  )r†   )rD   r+  r+  rR  )Ú2N)Ú3)rD   r<  r+  rì   )r‡   )rè   r<  rÓ   rì   r/   rs   rû   rü   rý   rþ   rx   )úis not)z0%(py2)s
{%(py2)s = %(py0)s.meta
} is not %(py5)sr	  ru   ry   rz   Úquber__table_idr   r€   rƒ   r„   Úquber__content_fingerprintr…   )z0%(py2)s
{%(py2)s = %(py0)s.bbox
} is not %(py5)sÚcell)zn%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.bbox
}.coord_origin
} == %(py8)s
{%(py8)s = %(py6)s.BOTTOMLEFT
}r
   )rv   rw   r‚   r„   r‰   rÉ   rÊ   rD   )zO%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.bbox
}.l
} == (%(py7)s * %(py8)s)r!   )rv   rw   r‚   rz   r‰   rï   rŠ   r   r+  )z\%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.bbox
}.t
} == ((%(py7)s - %(py9)s) * %(py11)s)r"   )rv   rw   r‚   rz   r´   rŠ   zassert %(py14)sr‹   )r/   r/   )Úis)z,%(py3)s
{%(py3)s = %(py1)s.bbox
} is %(py6)srß   rà   r‰   Újson)Úmode)z0%(py3)s
{%(py3)s = %(py1)s.meta
} is not %(py6)sr
  )zK%(py1)s in %(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s.dumps
}(%(py6)s)
}Úpayload)r�   rˆ   rx   r„   r‰   )$rž  r\   rf   Útable_idÚcontent_fingerprintr“  Úcorrected_gridr   r   rL   r!   r"   r�   r�   r‘   r’   r“   r”   r•   r–   rT   ÚmetaÚ
model_dumpr8   r5   r™   rš   r3   r    r
   r#   r   r   r   Úmodel_validateÚdumps)%rž  r$   rk   r  rn   r   rü   r£   rœ   r  rŸ   r	  r�   rž   r    Údumpedr¢   r¤   r¥   r[   Úby_addrrœ  rÍ   r§   r«   rÎ   rµ   rØ   r¶   rñ   rÙ   r¨   rª   rÚ   r¬   r   Úreviveds%                                        r)   Ú<test_graft_binds_identity_and_carries_resolved_cell_geometryr«  ï  s=  € ó à
€CÜ  h Ð0Ñ1€EÜ
ˆs‹)€CØ#€C„LØ(€CÔÜ"à,Ð.MÐNØ,¨kÐ:Ø,Ð.MÐNð	
ó€CÔô ˜5 %Ó(€GÜ,¨U¯^©^¸c¸UÀGÈaÔRXÔZ`ÐQaÐMbÓc�O€GØÐ�R‰<×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�R××××××Ñà�N‰N˜1Ñ€Eà�:‰:Ð!˜TÐ!˜TÐ!×!×!×!Ò!ˆ:×!×!×!×!×!Õ!ˆ5×!×!×!Ñ!ˆ5×!×!Õ!ˆ:×!×!Ó!˜T×!×!×!×!×!×!Ó!Ø�Z‰Z×"Ñ"Ó$€FØÐ#Ñ$Ð8Ð(8Ð8Ð$Ð(8Ñ8×8×8×8Ò8Ð$Ð(8×8×8Ô8Ð$×8×8Ó8Ð(8×8×8×8×8×8×8Ó8ØÐ.Ñ/Ð=°:Ð=Ð/°:Ñ=×=×=×=Ò=Ð/°:×=×=Ô=Ð/×=×=Ó=°:×=×=×=×=×=×=Ó=ð MRÏJÉJ×LbÒLbÓcÒLbÀq�×&Ñ&¨×(>Ñ(>Ð?ÀÒBÑLb€GÐcØ�6‰?€DØ�9‰9Ð ˜DÐ ˜DÐ × × × Ò ˆ9× × × × × Õ ˆ4× × × Ñ ˆ4× × Õ ˆ9× × Ó ˜D× × × × × × Ó Ø�9‰9Ð;×!Ñ!Ð;¤[×%;Ñ%;Ð;Ð!Ð%;Ñ;×;×;×;Ô;Ð!Ð%;×;×;×;×;×;Õ;ˆ4×;×;×;Ñ;ˆ4×;×;Õ;ˆ9×;×;Ó;Ð!×;×;×;×;×;Ô;¤[×;×;×;Ñ;¤[×;×;Õ;Ð%;×;×;×;×;×;×;Ö;Ø�9‰9Ð'�;‰;Ð'˜$Ð'˜$¤™-Ð'ˆ;˜-Ñ'×'×'×'Ô'ˆ;˜-×'×'×'×'×'Õ'ˆ4×'×'×'Ñ'ˆ4×'×'Õ'ˆ9×'×'Ó'ˆ;×'×'Ó'˜$×'×'×'×'×'Ô'¤×'×'×'Ñ'¤×'×'×'×'×'×'×'Ò'Ø�9‰9Ð/�;‰;Ð/˜3Ð/ Ð/˜3 ™:Ð/˜:¬Ñ/Ð/ˆ;Ð/Ñ/×/×/×/Ô/ˆ;Ð/×/×/×/×/×/Õ/ˆ4×/×/×/Ñ/ˆ4×/×/Õ/ˆ9×/×/Ó/ˆ;×/×/Ó/˜3×/×/Ó/ ×/×/×/×/×/Ô/¬×/×/×/Ñ/¬×/×/×/×/×/×/×/Ö/Ø�6‰?Ð'ˆ?×ÑÐ' 4Ð'Ð 4Ð'×'×'×'Ò'Ð 4×'×'Ô'ˆ?×'×'Ó'Ð×'×'Ó' 4×'×'×'×'×'×'Ö'ð × Ñ  fÐ Ð-€GÜ×,Ò,¨WÓ5€GØ�>‰>˜!ÑÐ-Ð×!Ñ!Ð-¨Ð-Ð!¨Ð-×-×-×-Ò-Ð!¨×-×-Ô-Ð×-×-Ó-Ð!×-×-Ó-¨×-×-×-×-×-×-Ö-Ø�>‰>˜!Ñ×!Ñ!×,Ñ,Ó.Ð/@ÑAÐUÐEUÐUÐAÐEUÑU×U×U×UÒUÐAÐEU×U×UÔUÐA×U×UÓUÐEU×U×U×U×U×U×UÓUØÐ2˜tŸz™zÐ2˜z¨'Ó2Ð2ÐÐ2Ñ2×2×2×2Ó2ÐÐ2×2×2Ô2Ð×2×2×2×2×2Ô2˜t×2×2×2Ñ2˜t×2×2Õ2˜z×2×2×2×2×2Ô2¨'×2×2×2Ñ2¨'×2×2Õ2Ð2×2×2×2×2×2×2×2ùò ds   Í#o<)r$   ÚNormBoxr‡  r	   )rk  rk  )rT   z;Sequence[Tuple[NormBox, Literal['native', 'ocr', 'empty']]]rU   z#Sequence[Tuple[NormBox, List[str]]]r‡  r   )
r$   r¬  r_   Ústrre   Úfloatrc   r­  r‡  r   )N)rk   r   rl   zList[ExtractedTable]rm   zOptional[int]r‡  r­  )r   r   r‡  z	List[str])LÚ__doc__Ú
__future__r   Úbuiltinsr‘   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter�   Útypingr   r   r   r   r   r}  Údocling_core.types.doc.baser	   r
   Údocling_core.types.doc.documentr   r   r   r   r   Údocling_core.types.doc.labelsr   Úquber.agents.llm_clientr   r�  r   Úquber.core.fusionr   r   r   Úquber.core.parsers.resultr   r   r   r!   r"   r®  r¬  rŽ   r*   r\   rf   rp   r°   r·   rÀ   rÏ   rÛ   râ   rå   rò   rö   rù   r  r  r  r%  r(  r7  r:  r>  rA  rN  ra  rc  rg  rp  rt  r�  r“  r«  rk  r+   r)   Ú<module>r¼     sB  ðñõ #ç  „ × ;Õ ;ã ß @÷õ õ 7å /Ý 5ß ZÑ Zß MÑ Mà�€ˆØ
��u˜e UÐ*Ñ
+€à<€	ôð KMØ46ð$_ØGð$_à1ð$_ð õ$_ðN (1ÀDÐWYö öò7òRò9ò5òVò7òTòDò8ò5ò0ò "ô,Tòò
ò<ò:GòMò&	Gò,ò</Qòd-ò	$ò2ò4ò&iòXKó+3r+   