ó
    6Þ©j×R  ã                   ó¸  • % S r SSKrSSKJs  Jr  SSKrSSKJ	r	  SSK
JrJrJr  SSKrSSKJr  SSKJr  SSKJrJr  SSKJrJrJr  SS	KJrJr  SS
KJr  SSKJr   SSK!J"r"  Sr#\\$\$\$\$4   \%S'   Sr&Sr'  SGS\S\\\$\$\$\$\(4      S\\(   SS4S jjr)S\S\*\*\(      S\\	   4S jr+/ SQ/ SQ/ SQ/ SQ/ SQ/r,Sr- " S  S!5      r.  SHS"\\/   S#\0S\4S$ jjr1S\*\*\(      S\4S% jr2S&\	S\	4S' jr3S(\$S)\(S\*\\$\$\$\$\(4      4S* jr4S&\	S\4S+ jr5S&\	S\4S, jr6S\4S- jr7S&\	S\4S. jr8S&\	S\4S/ jr9S&\	S\4S0 jr:S&\	S\4S1 jr;S&\	S\4S2 jr<S&\	S\4S3 jr=S&\	S\4S4 jr>S&\	S\4S5 jr?S&\	S\4S6 jr@S&\	S\4S7 jrAS&\	S\4S8 jrBS&\	4S9 jrCS&\	4S: jrDS; rES&\	4S< jrFS&\	S\4S= jrGS> rHS? rIS@ rJ\KSA:X  a  \L" \Rš                  " \NSB/5      5      eSC rOSD rPSE rQS&\	S\4SF jrRg)Iaü  Tests for the grounded structure correction wired into
CamelotCorrespondenceExtractor.

`apply_structure_correction` crops the table region (structural arbiter), pulls
the region text layer (value well), calls the LLM's `vet_structure`, and then
applies a grounding guard: any output value absent from BOTH Camelot's grid and
the page text layer is rejected. These tests exercise that logic with a mock LLM
and monkeypatched PDF/image I/O (no Camelot, rendering, or network), plus
`make_extracted` directly.
é    N)ÚPath)ÚOptionalÚSequenceÚTuple)ÚMonkeyPatch)ÚMockCompleteness)ÚDetectedTableÚDetectorResult)ÚFootnoteDefÚLLMTableCorrectionÚMockLLMClient©ÚCamelotCandidateÚgrid_to_markdown)ÚCamelotCorrespondenceExtractor©Ú
correction)ÚStructureCorrection)ç        r   ç      Y@r   ÚBBOXúdoc.pdfé   ÚmonkeypatchÚwordsÚblocksÚreturnc                 ó¤   ^^• U R                  [        SU4S j5        U R                  [        SU4S j5        U R                  [        SS 5        g)záStub the PDF text-layer reads and the page crop so the correction logic
runs without a real PDF. `words` seeds the page's word layer and `blocks`
its text blocks, the two readings a copied caption or title is checked against.Ú
page_wordsc                 ó    >• SS[        T5      4$ )Ng      ƒ@g     Àˆ@©Úlist)ÚsourceÚpager   s     €Ú@/home/mande/repo/quber/tests/core/test_camelot_correspondence.pyÚ<lambda>Úpatch_io.<locals>.<lambda>,   s   ø€ ÈuÐV[Ô]aÐbgÓ]hÑNió    Úpage_blocksc                 ó   >• [        T5      $ ©Nr!   )r#   r$   r   s     €r%   r&   r'   -   s
   ø€ ÌtÐTZÌ|r(   Úcrop_region_pngc                 ó   • g)Ns   ‰PNG© )Ú
page_imageÚregionÚdpis      r%   r&   r'   .   s   € Ð^hr(   N)ÚsetattrÚcorrection_module)r   r   r   s    ``r%   Úpatch_ior4   $   sB   ù€ ð ×ÑÔ)¨<Ô9iÔjØ×ÑÔ)¨=Ô:[Ô\Ø×ÑÔ)Ð+<Ñ>hÕir(   ÚextÚcellsÚimagec           	      ój   • [         R                  " U R                  X[        [        [
        5      5      $ r+   )ÚasyncioÚrunÚapply_structure_correctionr   ÚSOURCEÚPAGE)r5   r6   r7   s      r%   r:   r:   1   s#   € Ü�;Š;�s×5Ñ5°eÄDÌ&ÔRVÓWÓXÐXr(   )ÚBrandedÚVolumeÚand)ÚTransactionsÚ rB   )ÚRegionÚ2025Ú2024)ÚUSú1,637z1,500)ÚEUz(5.0%)z10.0%zU| Region | 2025 | 2024 |
|---|---|---|
| US | 1,637 | 1,500 |
| EU | (5.0%) | 10.0% |c                   ó*   • \ rS rSrSrS\S\4S jrSrg)ÚStubDetectoréD   z6No-op TableDetector; never called by these unit paths.r/   r   c              ƒ   ó    #   • Un[        / S9$ 7f)N)Útables)r
   )Úselfr/   Ú_s      r%   ÚdetectÚStubDetector.detectG   s   é € ØˆÜ RÑ(Ð(ùs   ‚r.   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r
   rP   Ú__static_attributes__r.   r(   r%   rJ   rJ   D   s   † Ù@ð) tð )°÷ )r(   rJ   ÚllmÚrun_llm_correctionc                 ó<   • [        [        5       [        5       SU US9$ )NF)ÚdetectorÚcompletenessÚrun_box_repairrX   rY   )r   rJ   r   ©rX   rY   s     r%   Úmake_extractorr_   L   s%   € ô *Ü“Ü%Ó'ØØØ-ñð r(   c           
      ó0   • [        SSSSU [        U 5      S9$ )Nzlattice-p1-0Úlatticer   g     ÀW@)Úcandidate_idÚflavorr$   Úaccuracyr6   Úmarkdownr   )r6   s    r%   Ú	candidaterf   Y   s&   € ÜØ#ØØØØÜ! %Ó(ñð r(   Útmp_pathc                 ó2   • U S-  nUR                  S5        U$ )Nzpage-0001.pngs   ‰PNG

)Úwrite_bytes)rg   Úps     r%   r/   r/   d   s   € Ø�?Ñ"€AØ‡M�MÐ&Ô'Ø€Hr(   ÚyÚtextc           	      óŒ   • [        UR                  5       5       VVs/ s H  u  p#SU-  U SU-  S-   U S-   U4PM     snn$ s  snnf )z?One printed line of the page text layer, one word box per word.ç      $@g      "@g       @)Ú	enumerateÚsplit)rk   rl   ÚiÚws       r%   Ú_liners   m   sD   € äBKÈDÏJÉJËLÔBYÔZÒBY¹$¸!ˆT�A‰X�q˜$ ™( S™.¨!¨c©'°1Ó5ÑBYÒZÐZùÓZs   �A c           
      óR  • [        U[        SS5      [        SS5      -   S9  [        SS[        [	        SSS9/S	S
9n[        [        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                   " [        5      OS[        R                   " U5      S.-  n[#        [        R$                  " U5      5      eS nUR&                  ow[        :H  oU(       dý  [        R(                  " SU4SU[        45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        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 =puUR*                  nSo—U	L oU(       dº  [        R(                  " SU4SXy4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=pYUR,                  nSo—U	:H  oU(       dº  [        R(                  " SU4SXy4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=pYUR.                  nSo—U	:H  oU(       dº  [        R(                  " SU4SXy4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=pYUR0                  n[	        SSS9/o—U	:H  oU(       dº  [        R(                  " SU4S Xy4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=pYg )!Nç      4@úBranded Volume and Transactionsç      @@ú)For the 3 Months Ended September 30, 2025©r   ú(1)úPreliminary.©Úmarkerrl   r   ©ÚtitleÚcaptionre   Ú	footnotesÚheader_rowsr   ©rX   ú5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstanceÚresultr   ©Úpy0Úpy1Úpy2Úpy4©ú==©z0%(py2)s
{%(py2)s = %(py0)s.markdown
} == %(py4)sÚMERGED_MARKDOWN©rˆ   rŠ   r‹   úassert %(py6)sÚpy6T©Úis©z5%(py2)s
{%(py2)s = %(py0)s.llm_corrected
} is %(py5)s©rˆ   rŠ   Úpy5úassert %(py7)sÚpy7©z-%(py2)s
{%(py2)s = %(py0)s.title
} == %(py5)s©z/%(py2)s
{%(py2)s = %(py0)s.caption
} == %(py5)s©z1%(py2)s
{%(py2)s = %(py0)s.footnotes
} == %(py5)s)r4   rs   r   r�   r   r_   r   r:   ÚFRAGMENTED_GRIDr/   r…   r   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationre   Ú_call_reprcompareÚllm_correctedr   r€   r�   )rg   r   r   r5   r†   Ú@py_assert3Ú@py_format5Ú@py_assert1Ú@py_format7Ú@py_assert4Ú@py_format6Ú@py_format8s               r%   Útest_correction_vets_structurer®   r   sb  € ÜØÜ�DÐ;Ó<Ü
�ÐAÓ
BñCòô
 $Ø/Ø;Ü Ü e°.ÑAÐBØñ€Jô œ]°jÑAÑ
B€Cä�”o¤z°(Ó';Ó<€Fä�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø�?‰?Ð-œoÑ-×-×-×-Ò-ˆ?œo×-×-×-×-×-Õ-ˆ6×-×-×-Ñ-ˆ6×-×-Õ-ˆ?×-×-×-×-×-Ô-œo×-×-×-Ñ-œo×-×-×-×-×-×-Ó-Ø×ÑÐ' 4Ð' 4Ð'×'×'×'Ò'Ð×'×'×'×'×'Õ'ˆ6×'×'×'Ñ'ˆ6×'×'Õ'Ð×'×'Ó' 4×'×'×'×'×'×'Ó'Ø�<‰<Ð<Ð<Ð<Ð<Ñ<×<×<×<Ò<ˆ<×<×<×<×<×<Õ<ˆ6×<×<×<Ñ<ˆ6×<×<Õ<ˆ<×<×<Ó<Ð<×<×<×<×<×<×<Ó<Ø�>‰>ÐHÐHÐHÐHÑH×H×H×HÒHˆ>×H×H×H×H×HÕHˆ6×H×H×HÑHˆ6×H×HÕHˆ>×H×HÓHÐH×H×H×H×H×H×HÓHØ×ÑÐO¤°5¸~Ñ NÐOÐOÐOÑO×O×O×OÒOÐ×O×O×O×O×OÕOˆ6×O×O×OÑOˆ6×O×OÕOÐ×O×OÓOÐO×O×O×O×O×O×OÔOr(   c                 óº  • [        U[        SS5      S9  [        SS[        / SS9n[	        [        US9S	9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S
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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[!        [        R"                  " U5      5      eS nUR$                  nSo‡U:H  oU(       dº  [        R&                  " SU4SXx4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=pXUR(                  nSo‡U:H  oU(       dº  [        R&                  " SU4SXx4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=pXUR*                  ow[        :H  oU(       dý  [        R&                  " SU4SU[        45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        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 =pug )Nru   uL   Concentration of Credit Risk â€” KREFâ€™s loans (â€œREOâ€�) as a percentage:ry   z$Computation of Basic and Diluted EPSzDConcentration of Credit Risk - KREF's loans ("REO") as a percentage:r   r~   r   rƒ   r„   r…   r†   r   r‡   rB   rŒ   rš   r–   r˜   r™   r›   rŽ   r�   r�   r‘   r’   )r4   rs   r   r�   r_   r   r:   r�   r/   r…   r   rž   rŸ   r    r¡   r¢   r£   r¤   r   r¥   r€   re   )rg   r   r   r5   r†   r§   r¨   r©   r«   r¬   r­   rª   s               r%   Ú?test_correction_drops_title_and_caption_the_page_does_not_printr°   ‹   sS  € ô Øœ5 Ð'uÓvòô $Ø4ØWÜ ØØñ€Jô œ]°jÑAÑ
B€CÜ�”o¤z°(Ó';Ó<€FÜ�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø�<‰<Ð˜2Ð˜2Ñ×××Òˆ<×××××Õˆ6×××Ñˆ6××Õˆ<××Ó˜2××××××ÓØ�>‰>ÐdÐdÐdÐdÑd×d×d×dÒdˆ>×d×d×d×d×dÕdˆ6×d×d×dÑdˆ6×d×dÕdˆ>×d×dÓdÐd×d×d×d×d×d×dÓdà�?‰?Ð-œoÑ-×-×-×-Ò-ˆ?œo×-×-×-×-×-Õ-ˆ6×-×-×-Ñ-ˆ6×-×-Õ-ˆ?×-×-×-×-×-Ô-œo×-×-×-Ñ-œo×-×-×-×-×-×-Ô-r(   c                 ó~  • SSK Jn  [        U SS/S9  [        R                  nSo1" U[
        [        5      oB" U5      nSoeU:H  ow(       Gdò  [        R                  " SU4S	XV45      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS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=n=pv[        U S/S9  [        R                  nSnU" U[
        [        5      nU" U5      nSnUU:H  ow(       Gdó  [        R                  " SU4S	UU45      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS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=n=pv[        R                  nSo1" U[
        [        5      oB" U5      nSoeU:H  ow(       Gdò  [        R                  " SU4S	XV45      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS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=n=pvg )Nr   )Úprinted_titlezPortfolio Informationzas of March 31, 2026©r   z*Portfolio Information as of March 31, 2026rB   rŒ   )z|%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.run
}(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py6)s, %(py7)s)
})
} == %(py14)sr9   r²   r<   r=   )	rˆ   rŠ   Úpy3r—   r’   r™   Úpy9Úpy11Úpy14zassert %(py16)sÚpy16z*Portfolio Information as of
March 31, 2026)Ú7quber.core.extractors.camelot.correspondence.correctionr²   r4   r9   r:   r<   r=   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )
r   r²   r©   r«   Ú@py_assert8Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format15Ú@py_format17s
             r%   Ú)test_located_title_kept_only_when_printedrÀ   ¡   sH  € õ Väˆ[Ð"9Ð;QÐ!RÒSÜ�;‰;ÐgÐ%QÐg�}Ð%QÔSYÔ[_Ó`Ðgˆ;Ð`ÓaÐgÐegÐgÐegÑg×g×g×gÓgÐa×g×g×g×g×gÕgŒ7×g×g×gÑgŒ7×g×gÕgˆ;×g×g×g×g×gÔg�}×g×g×gÑg�}×g×gÕgÐ%Q×g×g×g×g×gÔgÔSY×g×g×gÑgÔSY×g×g×g×g×gÖgÔ[_×g×g×gÑgÔ[_×g×gÕgÐ`×g×gÓgÐa×g×gÓgÐeg×g×g×g×g×g×g×gÑgÜˆ[Ð"OÐ!PÒQä�‰ðØ"NðÙ!Ð"NÔPVÔX\Ó]ðÙÐ]Ó^ðà7ðØ^Ø7ñ	8÷ô ïé ôØ^Ø7÷ò ïé ÷õ ïé ðÜ÷ö ïé ðÜ÷ò ïé ðØ÷ñ ïé ÷õ ïé ðØ!÷ö ïé ðØ!÷ò ïé ðØ"N÷ñ ïé ÷õ ïé ðÜPV÷ö ïé ðÜPV÷ó ïé ÷õ ïé ðÜX\÷ö ïé ðÜX\÷ò ïé ðØ]÷ð ïé ðØ^÷ð ïé ðà7÷÷ ÷ ñ ïé ÷÷ õ ô �;‰;Ð= RÐ=�} R¬´Ó6Ð=ˆ;Ð6Ó7Ð=¸2Ð=¸2Ñ=×=×=×=Ó=Ð7×=×=×=×=×=Õ=Œ7×=×=×=Ñ=Œ7×=×=Õ=ˆ;×=×=×=×=×=Ô=�}×=×=×=Ñ=�}×=×=Õ= R×=×=×=×=×=Ô=¬×=×=×=Ñ=¬×=×=×=×=×=Ö=´×=×=×=Ñ=´×=×=Õ=Ð6×=×=Ó=Ð7×=×=Ó=¸2×=×=×=×=×=×=×=Ò=r(   c                 ó¢  ^	• 0 m	 " U	4S jS[         5      n[        USS/S9  [        U" 5       S9n[        U[        [        U 5      5        T	S   nSoTU:H  of(       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=peg )Nc                   ó,   >^ • \ rS rSrU U4S jrSrU =r$ )Ú@test_correction_hands_the_agent_the_whole_page_text.<locals>.Spyéµ   c              “   óJ   >#   • UTS'   [         TU ]  XX45      I S h  v•N $  N7f)NÚ	page_text)ÚsuperÚvet_structure)rN   Ú	image_pngre   Úregion_textrÆ   Ú	__class__Úseens        €€r%   rÈ   ÚNtest_correction_hands_the_agent_the_whole_page_text.<locals>.Spy.vet_structure¶   s(   øé € Ø )ˆD�ÑÜ™Ñ.¨yÀKÓ[×[Ð[Ñ[ùs   ƒ#œ!�#r.   )rR   rS   rT   rU   rÈ   rW   Ú__classcell__)rË   rÌ   s   @€r%   ÚSpyrÃ   µ   s   ù† ÷	\ô 	\r(   rÏ   u>   Concentration of Credit Risk â€” The following tables present:zGeography(A)
California 17.6r³   rƒ   rÆ   u\   Concentration of Credit Risk â€” The following tables present:

Geography(A)
California 17.6rŒ   )z%(py1)s == %(py4)s)r‰   r‹   r‘   r’   )r   r4   r_   r:   r�   r/   r    r¥   r¢   r£   r¤   )
rg   r   rÏ   r5   Ú@py_assert0r§   Ú@py_assert2r¨   rª   rÌ   s
            @r%   Ú3test_correction_hands_the_agent_the_whole_page_textrÒ   °   sØ   ø€ ð €D÷\Œmô \ô
 ØàLØ+ð
òô ™S›UÑ
#€CÜˆŒ_œj¨Ó2Ô3Ø�Ñð ØiðØiñ÷ ó ïé ôÐØi÷ñ ïé ðÐ÷ ð ïé ðØi÷÷ ÷ ñ ïé ÷÷ ð r(   c                 ó¦  • [        U[        SS5      [        SS5      -   / SQS9  [        SS[        / S	S
9n[	        [        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[!        [        R"                  " U5      5      eS nUR$                  nSo‡U:H  oU(       dº  [        R&                  " SU4SXx4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=pXUR(                  nSo‡U:H  oU(       dº  [        R&                  " SU4SXx4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=pXg )Nru   zGAAP Net Income to Summaryrw   z,Distributable Earnings Reconciliation Income)z8GAAP Net Income to
Distributable Earnings ReconciliationzSummary
Incomez!Cash Available for Distribution
2)r   r   z8GAAP Net Income to Distributable Earnings Reconciliationz Cash Available for Distribution2r   r~   r   rƒ   r„   r…   r†   r   r‡   rŒ   rš   r–   r˜   r™   r›   )r4   rs   r   r�   r_   r   r:   r�   r/   r…   r   rž   rŸ   r    r¡   r¢   r£   r¤   r   r¥   r€   ©rg   r   r   r5   r†   r§   r¨   r©   r«   r¬   r­   s              r%   ÚJtest_correction_keeps_a_title_printed_over_two_lines_or_with_a_superscriptrÕ   È   sê  € ô ØÜ�DÐ6Ó7Ü
�ÐDÓ
EñFò
ò		ô $ØHØ2Ü ØØñ€Jô œ]°jÑAÑ
B€CÜ�”o¤z°(Ó';Ó<€FÜ�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø�<‰<ÐUÐUÐUÐUÑU×U×U×UÒUˆ<×U×U×U×U×UÕUˆ6×U×U×UÑUˆ6×U×UÕUˆ<×U×UÓUÐU×U×U×U×U×U×UÓUØ�>‰>Ð?Ð?Ð?Ð?Ñ?×?×?×?Ò?ˆ>×?×?×?×?×?Õ?ˆ6×?×?×?Ñ?ˆ6×?×?Õ?ˆ>×?×?Ó?Ð?×?×?×?×?×?×?Ô?r(   c           	      óÈ  • [        U5        [        SS[        / SSS9n[        [	        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                   " U5      5      eS nUR"                  nSo‡U:H  oU(       dº  [        R$                  " SU4SXx4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=pXg )Nrv   rB   z4(in millions, except percentages and per share data)r   )r   r€   re   r�   Úunitsr‚   r   rƒ   r„   r…   r†   r   r‡   rŒ   ©z-%(py2)s
{%(py2)s = %(py0)s.units
} == %(py5)sr–   r˜   r™   ©r4   r   r�   r_   r   r:   r�   r/   r…   r   rž   rŸ   r    r¡   r¢   r£   r¤   r×   r¥   rÔ   s              r%   Ú)test_correction_carries_units_attributionrÚ   æ   sU  € ô ˆ[ÔÜ#Ø/ØÜ ØØDØñ€Jô œ]°jÑAÑ
B€Cä�”o¤z°(Ó';Ó<€Fä�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø�<‰<ÐQÐQÐQÐQÑQ×Q×Q×QÒQˆ<×Q×Q×Q×Q×QÕQˆ6×Q×Q×QÑQˆ6×Q×QÕQˆ<×Q×QÓQÐQ×Q×Q×Q×Q×Q×QÔQr(   c                 óÆ  • [        U5        [        SS[        / SS9n[        [	        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      S
.-  n[        [        R                   " U5      5      eS nUR"                  nSo‡U:H  oU(       dº  [        R$                  " SU4SXx4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=pXg )NrB   r   r~   r   rƒ   r„   r…   r†   r   r‡   rŒ   rØ   r–   r˜   r™   rÙ   rÔ   s              r%   Ú$test_correction_units_defaults_emptyrÜ   ú   sJ  € äˆ[ÔÜ#Ø˜"¤À"ÐRSñ€Jô œ]°jÑAÑ
B€Cä�”o¤z°(Ó';Ó<€Fä�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø�<‰<Ð˜2Ð˜2Ñ×××Òˆ<×××××Õˆ6×××Ñˆ6××Õˆ<××Ó˜2××××××Ôr(   c           	      óÐ  • [        U5        [        SS[        / SS/SS9n[        [	        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                   " U5      5      eS nUR"                  nSS/o‡U:H  oU(       dº  [        R$                  " SU4SXx4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=pXg )NrB   rz   Ú*r   )r   r€   re   r�   Úfootnote_refsr‚   r   rƒ   r„   r…   r†   r   r‡   rŒ   ©z5%(py2)s
{%(py2)s = %(py0)s.footnote_refs
} == %(py5)sr–   r˜   r™   ©r4   r   r�   r_   r   r:   r�   r/   r…   r   rž   rŸ   r    r¡   r¢   r£   r¤   rß   r¥   rÔ   s              r%   Ú%test_correction_carries_footnote_refsrâ     s^  € ô ˆ[ÔÜ#ØØÜ ØØ˜c�lØñ€Jô œ]°jÑAÑ
B€Cä�”o¤z°(Ó';Ó<€Fä�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø×ÑÐ/ E¨3 <Ð/ <Ñ/×/×/×/Ò/Ð×/×/×/×/×/Õ/ˆ6×/×/×/Ñ/ˆ6×/×/Õ/Ð×/×/Ó/ <×/×/×/×/×/×/Ô/r(   c                 óÆ  • [        U5        [        SS[        / SS9n[        [	        US9S9n[        U[        [        U 5      5      n[        U[        5      oU(       Gd+  S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                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      S
.-  n[        [        R                   " U5      5      eS nUR"                  n/ o‡U:H  oU(       dº  [        R$                  " SU4SXx4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=pXg )NrB   r   r~   r   rƒ   r„   r…   r†   r   r‡   rŒ   rà   r–   r˜   r™   rá   rÔ   s              r%   Ú+test_correction_footnote_refs_default_emptyrä     sN  € äˆ[ÔÜ#Ø˜"¤À"ÐRSñ€Jô œ]°jÑAÑ
B€Cä�”o¤z°(Ó';Ó<€Fä�fÔ1Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�f×2×2×2Ñ2�f×2×2×2×2×2Ö2Ô1×2×2×2Ñ2Ô1×2×2Õ2Ð2×2×2×2×2×2Ñ2Ø×ÑÐ% 2Ð% 2Ñ%×%×%×%Ò%Ð×%×%×%×%×%Õ%ˆ6×%×%×%Ñ%ˆ6×%×%Õ%Ð×%×%Ó% 2×%×%×%×%×%×%Ô%r(   c                 ó˜  • [        U5        [        [        5       S9n[        U[        [        U 5      5      nS oCULoU(       d¥  [        R                  " SU4SX44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 =pTUR                  n[        [        5      o…U:H  o™(       Gd`  [        R                  " SU	4S	XX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
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=p˜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œg )Nrƒ   ©úis not©z%(py0)s is not %(py3)sr†   ©rˆ   r´   úassert %(py5)sr—   rŒ   ©zN%(py2)s
{%(py2)s = %(py0)s.markdown
} == %(py7)s
{%(py7)s = %(py4)s(%(py5)s)
}r   r�   ©rˆ   rŠ   r‹   r—   r™   úassert %(py9)srµ   Fr“   r•   r–   r˜   r™   )r4   r_   r   r:   r�   r/   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   re   r   r¦   )rg   r   r5   r†   rÑ   r©   Ú@py_format4r¬   Ú@py_assert6r§   r­   Ú@py_format10r«   s                r%   Ú/test_correction_passthrough_marks_not_correctedrñ   +  s¶  € ô ˆ[ÔÜ
œ]›_Ñ
-€Cä�”o¤z°(Ó';Ó<€FàÐ˜Ð×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ˜××××××ÑØ�?‰?Ð?Ô.¬Ó?Ð?Ð?Ñ?×?×?×?Ó?ˆ?×?×?×?×?×?Õ?ˆ6×?×?×?Ñ?ˆ6×?×?Õ?ˆ?×?×?×?×?×?Ô?Ô.×?×?×?Ñ?Ô.×?×?×?×?×?Ö?¬×?×?×?Ñ?¬×?×?Õ?Ð?×?×?×?×?×?×?Ó?Ø×ÑÐ( 5Ð( 5Ð(×(×(×(Ò(Ð×(×(×(×(×(Õ(ˆ6×(×(×(Ñ(ˆ6×(×(Õ(Ð×(×(Ó( 5×(×(×(×(×(×(Ô(r(   c                 óê  • [        U5        [        S-   n[        SSU/ SS9n[        [	        US9S9n[        U 5      n[        U[        U5      nS ovUL 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
S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS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 )Nz
| ZZ | 99,999 | |rB   r   r~   r   rƒ   r“   ©za%(py8)s
{%(py8)s = %(py0)s(%(py1)s, %(py2)s, %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
})
} is %(py11)sr:   r5   r�   r/   rg   ©rˆ   r‰   rŠ   r´   r‹   r’   Úpy8r¶   úassert %(py13)sÚpy13)r4   r�   r   r_   r   r/   r:   r�   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )rg   r   Úinventedr   r5   Ú@py_assert5Ú@py_assert7r»   Ú@py_assert9Ú@py_format12Ú@py_format14s              r%   Ú,test_correction_rejected_on_ungrounded_valuerþ   8  sO  € ô ˆ[ÔÜÐ!6Ñ6€HÜ#¨"°bÀ8ÐWYÐghÑi€JÜ
œ]°jÑAÑ
B€CÜ%/°Ó%9ÐBŒ3ˆs”OÐ%9Ó:ÐB¸dÐB¸dÐB×B×B×BÓBÐ:×B×B×B×B×BÕBŒ3×B×B×BÑBŒ3×B×B×B×B×BÖBˆs×B×B×BÑBˆs×B×B×B×B×BÖB”O×B×B×BÑB”O×B×B×B×B×BÖB¤Z×B×B×BÑB¤Z×B×B×B×B×BÖB°×B×B×BÑB°×B×BÕBÐ%9×B×BÓBÐ:×B×BÓB¸d×B×B×B×B×B×BÖBr(   c                 ó¬  • [        US/S9  [        S-   n[        SSU/ SS9n[        [	        US9S9n[        U[        [        U 5      5      nS oeUL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 =pvSo¥R                   oºU;   of(       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[        R                  " U5      S.-  n	SSU	0-  n[        [        R                  " U5      5      eS =n
=pkg )N)r   r   rn   rn   ú240,083ry   z
| ZZ | 240,083 | |rB   r   r~   r   rƒ   ræ   rè   r†   ré   rê   r—   r   ©Úin©z0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.markdown
}©r‰   r´   r—   r˜   r™   ©r4   r�   r   r_   r   r:   r�   r/   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   re   )rg   r   Ú	recoveredr   r5   r†   rÑ   r©   rî   r¬   rÐ   r«   r­   s                r%   Ú4test_correction_accepts_value_grounded_in_text_layerr  B  s  € ô ˆ[Ð!BÐ CÒDÜÐ"8Ñ8€IÜ#¨"°bÀ9ÐXZÐhiÑj€JÜ
œ]°jÑAÑ
B€CÜ�”o¤z°(Ó';Ó<€FØÐ˜Ð×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ˜××××××ÑØÐ'Ÿ™Ð'˜Ñ'×'×'×'Ò'ˆ9×'×'Ô'ˆ9×'×'×'×'×'Ô'˜×'×'×'Ñ'˜×'×'Õ'˜×'×'×'×'×'×'Ô'r(   c                 óv  • [        U5        [        S-   n[        SSU/ SS9n[        [	        US9S9n[        U[        [        U 5      5      nS oeUL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 =pvSo¥R                   oºU;  of(       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	[        R                  " U5      S.-  n	SSU	0-  n[        [        R                  " U5      5      eS =n
=pk/ nSoeR                   oÖU;   o»o«(       a  SoåR                   oþU;   nUn
U
(       Gd   [        R                  " SU4SXm45      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      S.-  nSSU0-  nUR#                  U5        U(       a­  [        R                  " SW4SWW45      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        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 )!Nõ   
| ZZ | â€” | 1,637 |rB   r   r~   r   rƒ   ræ   rè   r†   ré   rê   r—   õ   â€”)únot in)z4%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.markdown
}r  r˜   r™   z| ZZ |rG   r  )z0%(py3)s in %(py7)s
{%(py7)s = %(py5)s.markdown
})r´   r—   r™   z%(py9)srµ   )z4%(py12)s in %(py16)s
{%(py16)s = %(py14)s.markdown
})Úpy12r·   r¸   z%(py18)sÚpy18r   zassert %(py21)sÚpy21)r4   r�   r   r_   r   r:   r�   r/   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   re   ÚappendÚ_format_boolop)rg   r   Údashedr   r5   r†   rÑ   r©   rî   r¬   rÐ   r«   r­   rï   Ú@py_assert11Ú@py_assert15r¼   rð   r¿   Ú@py_format19Ú@py_format20Ú@py_format22s                         r%   Ú0test_correction_blanks_invented_placeholder_dashr  N  s  € ô ˆ[ÔÜÐ7Ñ7€FÜ#¨"°bÀ6ÐUWÐefÑg€JÜ
œ]°jÑAÑ
B€CÜ�”o¤z°(Ó';Ó<€FØÐ˜Ð×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ˜××××××ÑØÐ'Ÿ™Ð'˜Ñ'×'×'×'Ò'ˆ5×'×'Ô'ˆ5×'×'×'×'×'Ô'˜×'×'×'Ñ'˜×'×'Õ'˜×'×'×'×'×'×'Ó'ÙEˆ8ÐE—‘ÐE�Ñ&×E¨7ÐE·o±oÐE°oÑ+E×E×E×EÖEˆ8×E×EÔEˆ8×E×E×E×E×EÔE�v×E×E×EÑE�v×E×EÕE�×E×E×E×E×E×E×EÓE¨7°o×E×EÔE¨7×E×E×E×E×EÔE°f×E×E×EÑE°f×E×EÕE°o×E×E×E×E×E×E×E×E×E×E×E×E×E×EÑEr(   c                 ó¬  • [        US/S9  [        S-   n[        SSU/ SS9n[        [	        US9S9n[        U[        [        U 5      5      nS oeUL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 =pvSo¥R                   oºU;   of(       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[        R                  " U5      S.-  n	SSU	0-  n[        [        R                  " U5      5      eS =n
=pkg )N)rn   g     à…@ru   g     0†@r
  ry   r	  rB   r   r~   r   rƒ   ræ   rè   r†   ré   rê   r—   r
  r  r  r  r˜   r™   r  )rg   r   r  r   r5   r†   rÑ   r©   rî   r¬   rÐ   r«   r­   s                r%   Ú&test_correction_keeps_printed_nil_dashr  \  s  € ô ˆ[Ð!BÐ CÒDÜÐ7Ñ7€FÜ#¨"°bÀ6ÐUWÐefÑg€JÜ
œ]°jÑAÑ
B€CÜ�”o¤z°(Ó';Ó<€FØÐ˜Ð×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ˜××××××ÑØÐ#—O‘OÐ#�OÑ#×#×#×#Ò#ˆ5×#×#Ô#ˆ5×#×#×#×#×#Ô#�F×#×#×#Ñ#�F×#×#Õ#�O×#×#×#×#×#×#Ô#r(   c                 ó¬  • [        [        5       SS9n[        U 5      n[        U[        U5      nS oCUL 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S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS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 )NFr^   r“   ró   r:   r5   r�   r/   rg   rô   rö   r÷   )r_   r   r/   r:   r�   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   ©rg   r5   rù   rú   r»   rû   rü   rý   s           r%   Ú%test_correction_skipped_when_disabledr  i  s%  € Ü
œ]›_ÀÑ
G€CÜ%/°Ó%9ÐBŒ3ˆs”OÐ%9Ó:ÐB¸dÐB¸dÐB×B×B×BÓBÐ:×B×B×B×B×BÕBŒ3×B×B×BÑBŒ3×B×B×B×B×BÖBˆs×B×B×BÑBˆs×B×B×B×B×BÖB”O×B×B×BÑB”O×B×B×B×B×BÖB¤Z×B×B×BÑB¤Z×B×B×B×B×BÖB°×B×B×BÑB°×B×BÕBÐ%9×B×BÓBÐ:×B×BÓB¸d×B×B×B×B×B×BÖBr(   c                 óš  • [        S S9n[        U 5      n[        U[        U5      nS oCUL 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S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS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:   r5   r�   r/   rg   rô   rö   r÷   )r_   r/   r:   r�   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   r  s           r%   Ú#test_correction_skipped_when_no_llmr  n  s!  € Ü
˜TÑ
"€CÜ%/°Ó%9ÐBŒ3ˆs”OÐ%9Ó:ÐB¸dÐB¸dÐB×B×B×BÓBÐ:×B×B×B×B×BÕBŒ3×B×B×BÑBŒ3×B×B×B×B×BÖBˆs×B×B×BÑBˆs×B×B×B×B×BÖB”O×B×B×BÑB”O×B×B×B×B×BÖB¤Z×B×B×BÑB¤Z×B×B×B×B×BÖB°×B×B×BÑB°×B×BÕBÐ%9×B×BÓBÐ:×B×BÓB¸d×B×B×B×B×B×BÖBr(   c            	      ó\  • [        [        5       S9n S n[        U [        U5      nS o2UL oD(       Gdu  [        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                  " [        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=pCg )
Nrƒ   r“   )zB%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, %(py4)s)
} is %(py9)sr:   r5   r�   )rˆ   r‰   rŠ   r‹   r’   rµ   zassert %(py11)sr¶   )r_   r   r:   r�   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )r5   r§   rù   rº   rú   rð   rü   s          r%   Ú*test_correction_skipped_without_page_imager   s  sØ   € Ü
œ]›_Ñ
-€CØ%)Ð2Œ3ˆs”O TÓ*Ð2¨dÐ2¨dÐ2×2×2×2Ó2Ð*×2×2×2×2×2Õ2Œ3×2×2×2Ñ2Œ3×2×2×2×2×2Ö2ˆs×2×2×2Ñ2ˆs×2×2×2×2×2Ö2”O×2×2×2Ñ2”O×2×2Õ2 T×2×2Ó2Ð*×2×2Ó2¨d×2×2×2×2×2×2Ö2r(   c                 ó,  • [        [        5       S9n/ n[        U 5      n[        XU5      nS oTUL of(       GdÕ  [        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[        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      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=n=peg )Nrƒ   r“   )za%(py9)s
{%(py9)s = %(py0)s(%(py1)s, %(py3)s, %(py7)s
{%(py7)s = %(py4)s(%(py5)s)
})
} is %(py12)sr:   r5   r/   rg   )rˆ   r‰   r´   r‹   r—   r™   rµ   r  úassert %(py14)sr·   )r_   r   r/   r:   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )	rg   r5   rÑ   rï   rº   r  r»   Ú@py_format13r¾   s	            r%   Ú%test_correction_skipped_on_empty_gridr$  x  s  € Ü
œ]›_Ñ
-€CØÐ5œ
 8Ó,Ð5Œ3ˆsÐ,Ó-Ð5°Ð5°Ð5×5×5×5Ó5Ð-×5×5×5×5×5Õ5Œ3×5×5×5Ñ5Œ3×5×5×5×5×5Ö5ˆs×5×5×5Ñ5ˆs×5×5Õ5�B×5×5×5×5×5Ô5œ
×5×5×5Ñ5œ
×5×5×5×5×5Ö5 8×5×5×5Ñ5 8×5×5Õ5Ð,×5×5Ó5Ð-×5×5Ó5°×5×5×5×5×5×5×5Ð5r(   c                 ó2  • [        U5        [        5       nS[        S[        S[        S[        [
           4S jnUR                  USU5        [        US9n[        U 5      n[        U[        U5      nS ovUL 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S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OS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É   re   rÊ   r   c              “   ó(   #   • XU4n[        S5      e7f)Nzllm exploded)ÚRuntimeError)rÉ   re   rÊ   rO   s       r%   ÚboomÚ8test_correction_failure_falls_back_to_grid.<locals>.boom�  s   é € Ø +Ð.ˆÜ˜>Ó*Ð*ùs   ‚rÈ   rƒ   r“   ró   r:   r5   r�   r/   rg   rô   rö   r÷   )r4   r   ÚbytesÚstrr   r   r2   r_   r/   r:   r�   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )rg   r   rX   r(  r5   rù   rú   r»   rû   rü   rý   s              r%   Ú*test_correction_failure_falls_back_to_gridr,  }  sm  € Üˆ[ÔÜ
‹/€Cð+œeð +¬sð +Äð +ÌÔRdÑIeô +ð ×Ñ˜˜_¨dÔ3Ü
˜SÑ
!€Cô &0°Ó%9ÐBŒ3ˆs”OÐ%9Ó:ÐB¸dÐB¸dÐB×B×B×BÓBÐ:×B×B×B×B×BÕBŒ3×B×B×BÑBŒ3×B×B×B×B×BÖBˆs×B×B×BÑBˆs×B×B×B×B×BÖB”O×B×B×BÑB”O×B×B×B×B×BÖB¤Z×B×B×BÑB¤Z×B×B×B×B×BÖB°×B×B×BÑB°×B×BÕBÐ%9×B×BÓBÐ:×B×BÓB¸d×B×B×B×B×B×BÖBr(   c                  ó`
  • [        5       n [        [        5      n[        SSS9nU R	                  U[        USSUR
                  /SS S9nUR                  nSoTU:H  of(       dº  [        R                  " SU4S	XE4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=peUR                  nSoTU:H  of(       dº  [        R                  " SU4SXE4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=peUR                   n/ oTU:H  of(       dº  [        R                  " SU4SXE4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=peUR"                  n[%        [        5      o”U	:H  of(       Gd`  [        R                  " SU4SXI45      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [$        5      (       a  [        R                  " [$        5      OS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=piUR&                  nSoTUL of(       dº  [        R                  " SU4SXE4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=peg )Nr   zBranded volume table©ÚordinalÚdescriptionra   r   Ú	extracted©Úcandr6   Údetectedrc   r#   Ú
source_idsÚstatusr   rŒ   rš   Útabler–   r˜   r™   rB   )z0%(py2)s
{%(py2)s = %(py0)s.subtitle
} == %(py5)srœ   rë   r   r�   rì   rí   rµ   Fr“   r•   )r_   rf   r�   r	   Úmake_extractedrb   r   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   Úsubtitler�   re   r   r¦   )r5   r3  r4  r7  r©   r«   r§   r¬   r­   rï   rð   s              r%   Ú9test_make_extracted_without_correction_uses_grid_defaultsr:  �  sÙ  € Ü
Ó
€CÜ”_Ó%€DÜ QÐ4JÑK€Hà×ÑØÜØØØØ×%Ñ%Ð&ØØð ð 	€Eð �;‰;Ð0Ð0Ð0Ð0Ñ0×0×0×0Ò0ˆ;×0×0×0×0×0Õ0ˆ5×0×0×0Ñ0ˆ5×0×0Õ0ˆ;×0×0Ó0Ð0×0×0×0×0×0×0Ó0Ø�>‰>Ð˜RÐ˜RÑ×××Òˆ>×××××Õˆ5×××Ñˆ5××Õˆ>××Ó˜R××××××ÓØ�?‰?Ð ˜bÐ ˜bÑ × × × Ò ˆ?× × × × × Õ ˆ5× × × Ñ ˆ5× × Õ ˆ?× × Ó ˜b× × × × × × Ó Ø�>‰>Ð>Ô-¬oÓ>Ð>Ð>Ñ>×>×>×>Ó>ˆ>×>×>×>×>×>Õ>ˆ5×>×>×>Ñ>ˆ5×>×>Õ>ˆ>×>×>×>×>×>Ô>Ô-×>×>×>Ñ>Ô-×>×>×>×>×>Ö>¬o×>×>×>Ñ>¬o×>×>Õ>Ð>×>×>×>×>×>×>Ó>Ø×ÑÐ' %Ð' %Ð'×'×'×'Ò'Ð×'×'×'×'×'Õ'ˆ5×'×'×'Ñ'ˆ5×'×'Õ'Ð×'×'Ó' %×'×'×'×'×'×'Ô'r(   c                  óÆ	  • [        5       n [        [        5      n[        SSS9n[	        SS[        SSS9/[        S	SS
9nU R                  U[        USSUR                  /SUS9nUR                  nS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      [        R                  " U5      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =n=pvUR$                  nS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      [        R                  " U5      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =n=pvUR&                  n[        SSS9/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      [        R                  " U5      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =n=pvUR(                  oU[        :H  ow(       dý  [        R                  " SU4SU[        45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        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 =pWUR*                  nS	oeUL 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      [        R                  " U5      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =n=pvg )Nr   údetector descriptionr.  rv   rx   rz   r{   r|   T©r   r€   r�   re   r¦   r‚   ra   r   r1  r2  rŒ   rš   r7  r–   r˜   r™   r›   rœ   rŽ   r�   r�   r‘   r’   r“   r•   )r_   rf   r�   r	   r   r   r�   r8  rb   r   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   r€   r�   re   r¦   )r5   r3  r4  r   r7  r©   r«   r§   r¬   r­   r¨   rª   s               r%   Ú4test_make_extracted_with_correction_populates_fieldsr>  §  sÖ  € Ü
Ó
€CÜ”_Ó%€DÜ QÐ4JÑK€HÜ$Ø/Ø;Ü e°.ÑAÐBÜ ØØñ€Jð ×ÑØÜØØØØ×%Ñ%Ð&ØØð ð 	€Eð �;‰;Ð;Ð;Ð;Ð;Ñ;×;×;×;Ò;ˆ;×;×;×;×;×;Õ;ˆ5×;×;×;Ñ;ˆ5×;×;Õ;ˆ;×;×;Ó;Ð;×;×;×;×;×;×;Ó;Ø�=‰=ÐGÐGÐGÐGÑG×G×G×GÒGˆ=×G×G×G×G×GÕGˆ5×G×G×GÑGˆ5×G×GÕGˆ=×G×GÓGÐG×G×G×G×G×G×GÓGØ�?‰?ÐNœ{°%¸nÑMÐNÐNÐNÑN×N×N×NÒNˆ?×N×N×N×N×NÕNˆ5×N×N×NÑNˆ5×N×NÕNˆ?×N×NÓNÐN×N×N×N×N×N×NÓNØ�>‰>Ð,œ_Ñ,×,×,×,Ò,ˆ>œ_×,×,×,×,×,Õ,ˆ5×,×,×,Ñ,ˆ5×,×,Õ,ˆ>×,×,×,×,×,Ô,œ_×,×,×,Ñ,œ_×,×,×,×,×,×,Ó,Ø×ÑÐ& $Ð& $Ð&×&×&×&Ò&Ð×&×&×&×&×&Õ&ˆ5×&×&×&Ñ&ˆ5×&×&Õ&Ð×&×&Ó& $×&×&×&×&×&×&Ô&r(   c                  óf  • [        5       n [        [        5      n[        SSS9n[	        SS/ [
        SSS9nU R                  U[        USSUR                  /S	US
9nUR                  nS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      [        R                  " U5      S.-  nSSU0-  n	[        [        R                   " U	5      5      eS =n=pvg )Nr   r<  r.  rB   Tr=  ra   r   r1  r2  rŒ   rš   r7  r–   r˜   r™   )r_   rf   r�   r	   r   r�   r8  rb   r   r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )
r5   r3  r4  r   r7  r©   r«   r§   r¬   r­   s
             r%   Ú:test_make_extracted_empty_llm_title_falls_back_to_detectorr@  Æ  sé   € Ü
Ó
€CÜ”_Ó%€DÜ QÐ4JÑK€HÜ$ØØØÜ ØØñ€Jð ×ÑØÜØØØØ×%Ñ%Ð&ØØð ð 	€Eð �;‰;Ð0Ð0Ð0Ð0Ñ0×0×0×0Ò0ˆ;×0×0×0×0×0Õ0ˆ5×0×0×0Ñ0ˆ5×0×0Õ0ˆ;×0×0Ó0Ð0×0×0×0×0×0×0Ô0r(   Ú__main__z-vc                  óÚ  • SSK Jn   So" U5      nSo0" U5      oBU:H  nSo`" U5      otU:H  o…(       a  U(       Gd¥  [        R                  " SXX4SX$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                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        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=n=n=n=n=pgg )Nr   )Únumeric_keysz
$ 8,273.04z8273.04z	8,273.04%)r�   r�   )zP%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py11)s
{%(py11)s = %(py7)s(%(py9)s)
}zT%(py11)s
{%(py11)s = %(py7)s(%(py9)s)
} == %(py16)s
{%(py16)s = %(py12)s(%(py14)s)
}rC  )	rˆ   rŠ   r‹   r™   rµ   r¶   r  r·   r¸   zassert %(py18)sr  )
r¹   rC  r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )rC  r©   r§   rº   r»   rù   r¼   r  rï   r¿   r  s              r%   Ú3test_a_figure_keys_the_same_however_it_was_renderedrD  è  s  € ÝTà$Ð]ˆ<˜Ó%Ð]°iÐ]¨°iÓ)@Ð]Ð)@Ñ]Ð]ÐQ\Ð]ÀLÐQ\ÓD]Ð]ÐD]Ñ]×]×]×]×]Ò]Ð%ÐD]×]×]×]×]×]Õ]ˆ<×]×]×]Ñ]ˆ<×]×]Õ]˜×]×]Ó]Ð%×]×]×]×]×]Ô]¨×]×]×]Ñ]¨×]×]Õ]°i×]×]Ó]Ð)@×]×]×]×]×]Ô]ÀL×]×]×]Ñ]ÀL×]×]Õ]ÐQ\×]×]Ó]ÐD]×]×]×]×]×]×]×]Ö]r(   c            	      óN  • SSK Jn   SnSnSo0" UUUS9nS1oTU:H  of(       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      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=peg )Nr   ©Úungrounded_valuesz| Cash | 99,999,999 |ú| Cash | 21,249,107 |úCash 21,249,107©Ú	correctedÚgrid_mdrÆ   Ú99999999rŒ   )z_%(py8)s
{%(py8)s = %(py0)s(corrected=%(py2)s, grid_md=%(py4)s, page_text=%(py6)s)
} == %(py11)srG  )rˆ   rŠ   r‹   r’   rõ   r¶   rö   r÷   )
r¹   rG  r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )	rG  r©   r§   rù   rú   r»   rû   rü   rý   s	            r%   Ú@test_a_value_neither_the_grid_nor_the_page_carries_is_ungroundedrN  î  s\  € ÝYð *ðà'ðð $ðÐØ)Ø'Ø#ñð ð ˆð	ð 
ñ	÷ ó ÷ Ñô	ð ð 
÷	ò ÷ ‰v÷	õ ïé ð	Ð÷ ö ÷ ‰Ið	Ð÷ ò ÷ ‰Ið	Ø)÷ð ÷ ‰Ið	à'÷ð ÷ ‰Ið	ð $÷ð ÷ ‰Ið	ð ÷ ð ÷ ‰Ið	ð 
÷	÷ ÷ ñ ÷ Ñ÷	÷ ö r(   c            
      ó  • SSK Jn   SnSnSnU " UUUS9n[        5       nUU:H  of(       GdM  [        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      [        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=peg )Nr   rF  rH  z
| Cash | |rI  rJ  rŒ   )zx%(py8)s
{%(py8)s = %(py0)s(corrected=%(py2)s, grid_md=%(py4)s, page_text=%(py6)s)
} == %(py12)s
{%(py12)s = %(py10)s()
}rG  Úset)rˆ   rŠ   r‹   r’   rõ   Úpy10r  r"  r·   )r¹   rG  rP  r    r¥   rž   rŸ   r¡   r¢   r£   r¤   )	rG  r©   r§   rù   rú   r  rû   r#  r¾   s	            r%   ÚGtest_a_value_the_page_carries_is_grounded_even_where_the_grid_missed_itrR  ø  s†  € ÝYð .ðð !ðð (ð	ÙØ-Ø Ø'ñ	
ðô ‹5ðð	
ð
 ñ	÷ô ïé ôð	
ð
 ÷ò ïé ÷õ ïé ðØ÷ö ïé ðØ÷ò ïé ðà-÷ð ïé ðð !÷ð ïé ðð (÷	ð ïé ðð	
÷ñ ïé ÷õ ïé ðô ÷ö ïé ðô ÷ò ïé ðð ÷÷ ÷ ñ ïé ÷÷ ö r(   c           
      ód  ^ ^• [        U5        [        S-   n[        [        SSU/ SS9S9mS[        4UU 4S jjnU" SS	9nS
oTULof(       d¥  [
        R                  " SU4SXE4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
=peSo”R                  o©U
;   oU(       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[
        R                  " U
5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS
=n	=pZSoc" US	9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      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS
=n=n=píg
)zÜThe page prints no text under such a table, so the only thing the check
could compare against is the grid it was asked to correct. A thousands
separator restored from a misread has to stand, and the flag is what decides.z
| ZZ | 19,543,903 | |rB   r   r~   r   Úground_valuesc                 óÂ   >• [         R                  " [        R                  " [        [        T5      [        [        [        T[         R                  " S5      SU 5	      5      $ )Nr   éÈ   )
r9   r:   r3   Úcorrect_structurer�   r/   r   r<   r=   Ú	Semaphore)rT  rX   rg   s    €€r%   ÚcorrectÚDtest_a_table_read_off_an_image_is_not_value_checked.<locals>.correct  sM   ø€ Ü�{Š{Ü×/Ò/ÜÜ˜8Ó$ÜÜÜØÜ×!Ò! !Ó$ØØó
ó
ð 	
r(   F)rT  Nræ   rè   Úkeptré   rê   r—   z
19,543,903r  r  r  r˜   r™   Tr“   )z>%(py4)s
{%(py4)s = %(py0)s(ground_values=%(py2)s)
} is %(py7)srY  )rˆ   rŠ   r‹   r™   rí   rµ   )r4   r�   r   r   Úboolr    r¥   rž   rŸ   r¡   r¢   r£   r¤   re   )rg   r   ÚrepairedrY  r[  rÑ   r©   rî   r¬   rÐ   r«   r­   r§   rï   rù   rð   rX   s   `               @r%   Ú3test_a_table_read_off_an_image_is_not_value_checkedr^    s›  ù€ ô ˆ[ÔÜÐ!:Ñ:€HÜ
Ü%¨B¸ÀXÐY[ÐijÑkñ€Cð
œt÷ 
ð 
ñ  Ñ'€DØÐ�tÐ×××Òˆ4×××××Õˆ4×××Ñˆ4××Õ�t××××××ÑØÐ(Ÿ=™=Ð(˜=Ñ(×(×(×(Ò(ˆ<×(×(Ô(ˆ<×(×(×(×(×(Ô(˜4×(×(×(Ñ(˜4×(×(Õ(˜=×(×(×(×(×(×(Ó(Ø!%Ð.ˆ7 Ñ&Ð.¨$Ð.¨$Ð.×.×.×.Ò.Ð&×.×.×.×.×.Õ.ˆ7×.×.×.Ñ.ˆ7×.×.Õ. ×.×.Ó.Ð&×.×.Ó.¨$×.×.×.×.×.×.Ö.r(   )r.   r.   )NT)SrV   Úbuiltinsrž   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter    r9   Úpathlibr   Útypingr   r   r   ÚpytestÚ_pytest.monkeypatchr   Úquber.agents.completenessr   Úquber.agents.detectorr	   r
   Úquber.agents.llm_clientr   r   r   Ú%quber.core.extractors.camelot.acquirer   r   Ú,quber.core.extractors.camelot.correspondencer   r   r3   r¹   r   r   ÚfloatÚ__annotations__r<   r=   r+  r4   r"   r:   r�   r�   rJ   Úobjectr\  r_   rf   r/   rs   r®   r°   rÀ   rÒ   rÕ   rÚ   rÜ   râ   rä   rñ   rþ   r  r  r  r  r  r   r$  r,  r:  r>  r@  rR   Ú
SystemExitÚmainÚ__file__rD  rN  rR  r^  r.   r(   r%   Ú<module>rr     sI  ðò	÷ „ ƒÝ ß ,Ñ ,ã Ý +å 6ß ?ß RÑ Rß Tõõõ Xà*B€€eˆE�5˜% Ð&Ñ'Ó BØ	€Ø€ð
 ?AØñ
jØð
jà�E˜% ¨¨u°cÐ9Ñ:Ñ;ð
jð �S‰Mð
jð 
õ	
jðYÐ+ð Y°D¸¸c¹±Oð YÈHÐUYÉNô Yò !ÚÚÚÚð€ð m€÷)ñ )ð !Ø#ñ
Ø	�&Ñ	ð
àð
ð $õ
ð�T˜$˜s™)‘_ð Ð)9ô ð˜ð  $ô ð[ˆUð [˜#ð [ $ u¨U°E¸5À%ÈÐ-LÑ'MÑ"Nô [ð
P¨Tð PÀô Pð2.Èdð .Ðalô .ð,>¸;ô >ðÀ$ð ÐU`ô ð0@Øð@Ø!,ô@ð<R¸ð RÈ;ô Rð(°4ð Àkô ð0°Dð 0À{ô 0ð*&¸$ð &È[ô &ð
)¸dð 
)ÐQ\ô 
)ðC¸4ð CÈkô Cð	(À4ð 	(ÐVaô 	(ðF¸tð FÐR]ô Fð
$°Tð 
$Èô 
$ðC°Dô Cð
C°$ô Cò
3ð
6°Dô 6ð
C¸ð CÈKô Cò&(ò.'ò>1ð6 ˆzÓÙ
�V—[’[ (¨DÐ!1Ó2Ó
3Ð3ò^òò
ð/À$ð /ÐU`õ /r(   