ó
    é›tj  ã                  óÐ   • S r SSKJr  SSKrSSKJs  Jr  SSK	r	SSK
r
SSKJr  SSKJrJr  Su  rr\
R$                  " SS9S	 5       rS
 rSrS rS rS rS rS rS rS rS rS rg)a¾  Cell-box tightening against a PDF with known word positions.

The fixture page mimics the sparse presentation layout where structural
geometry fails: a label column and a right-aligned value column with a wide
whitespace gap, plus a second occurrence of the same value on another line to
exercise nearest-match disambiguation. The PDF is generated with PyMuPDF, so
word rectangles come from the same text layer the tightener reads in
production.
é    )ÚannotationsN)Ú
page_words)Útighten_boxÚtighten_cell_boxes)id  iŒ  Úmodule)Úscopec                óp  • [         R                  " 5       nUR                  [        [        S9nUR                  SSSS9  UR                  SSSS9  UR                  SS	SS9  UR                  S
SSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  U R                  S5      S-  nUR                  [        U5      5        UR                  5         [        US5      u    pEU$ )N)ÚwidthÚheight)é2   éd   zGAAP Net Lossé   )Úfontsize)é  r   ú($0.15))r   éŒ   ú	Per Share)r   r   )r   é´   ú
Net income)r   r   z$15.8)r   éÜ   zQ2'26)r   é  z
Net assets)éi   éý   ú(9)é   )r   r   Ú$)ih  r   ú1,234Útightenzfixture.pdfé   )ÚfitzÚopenÚnew_pageÚPAGE_WÚPAGE_HÚinsert_textÚmktempÚsaveÚstrÚcloser   )Útmp_path_factoryÚdocÚpageÚpathÚ_Ú	extracteds         Ú9/home/mande/repo/quber/tests/core/test_camelot_tighten.pyÚwordsr1      sN  € ä
�)Š)‹+€CØ�<‰<œf¬Vˆ<Ð4€DØ×Ñ�Y ¸"ÐÑ=Ø×Ñ�Z °RÐÑ8Ø×Ñ�Y °bÐÑ9Ø×Ñ�Z °RÐÑ8Ø×Ñ�Y °rÐÑ:Ø×Ñ�Z °2ÐÑ6Ø×Ñ�Y °"ÐÑ5ð 	×Ñ�Y °rÐÑ:Ø×Ñ�Z °ÐÑ3ð 	×Ñ�Z ¨rÐÑ2Ø×Ñ�Z °2ÐÑ6Ø×"Ñ" 9Ó-°Ñ=€DØ‡H�HŒS�‹YÔØ‡I�I„KÜ   qÓ)�O€A€qØÐó    c                ó.   ^• [        U4S jU  5       5      $ )Nc              3  ó<   >#   • U  H  oS    T:X  d  M  Uv •  M     g7f)é   N© )Ú.0ÚwÚtexts     €r0   Ú	<genexpr>Úword_named.<locals>.<genexpr>1   s   øé € Ð1š5�a a¡D¨D¡L—‘š5ùs   ƒ“	)Únext)r1   r9   s    `r0   Ú
word_namedr=   0   s   ø€ ÜÔ1™5Ó1Ó1Ð1r2   )ç      i@g      `@ç      t@g     €b@c           	     ó	  • [        [        SU 5      nS o!UL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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =p2[        U S5      nU  Vs/ s H  owS   S:X  d  M  UPM     n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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p©[        US S9n[        R                  oíS S n	Soþ" XŸS9nUU:H  o3(       Gd8  [        R                  " S
U4SUU45      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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n	=nnUS	   nUS   nUU-
  n
[        S	   n[        S   nUU-
  nS	nUU-  nU
U:  o™(       d¯  [        R                  " SU	4SU
U45      [        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	=n=n=n=nnAg s  snf ) Nr   ©úis not©z%(py0)s is not %(py3)sÚtight©Úpy0Úpy3úassert %(py5)sÚpy5r5   é   ©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚoccurrences)rF   Úpy1rG   Úpy6zassert %(py8)sÚpy8c                ó6   • [        U S   U S   -   S-  S-
  5      $ ©Nr   é   rJ   éŠ   ©Úabs©r8   s    r0   Ú<lambda>Ú1test_tightens_to_printed_extent.<locals>.<lambda>B   s   € ¬C°°1±¸¸!¹±ÀÑ0AÀCÑ0GÔ,Hr2   ©Úkeyç      à?rV   ©z[%(py0)s == %(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s.approx
}(%(py6)s, abs=%(py8)s)
}Úpytest©rF   Úpy2Úpy4rP   rQ   Úpy10úassert %(py12)sÚpy12r   )Ú<)z6(%(py1)s - %(py3)s) < ((%(py7)s - %(py9)s) / %(py12)s))rO   rG   Úpy7Úpy9re   úassert %(py15)sÚpy15)r   ÚBANDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr=   rM   Úminr_   Úapprox)r1   rD   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Úprintedr8   rN   Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9ÚtargetÚ@py_assert3Ú@py_assert7Ú@py_assert9Ú@py_format11Ú@py_format13Ú@py_assert0Ú@py_assert6Ú@py_assert8Ú@py_assert10Ú@py_assert11Ú@py_assert13Ú@py_format14Ú@py_format16s                              r0   Útest_tightens_to_printed_extentr�   :   s¹  € Üœ˜i¨Ó/€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××ÑÜ˜ 	Ó*€Gñ $Ó9še˜¨¡t¨yÑ'8—1™e€KÐ9Üˆ{ÓÐ ˜qÐ ˜qÑ × × × Ó Ð× × × × × Õ Œ3× × × Ñ Œ3× × × × × Ö ˆ{× × × Ñ ˆ{× × Õ Ð× × Ó ˜q× × × × × × Ó Ü�Ñ"HÑI€FÜ—M‘MÐ6¨¨! *Ð6°#Ð6�M *Ñ6Ð6ˆ5Ð6Ñ6×6×6×6Ó6ˆ5Ð6×6×6×6×6×6Õ6ˆ5×6×6×6Ñ6ˆ5×6×6×6×6×6Ö6”F×6×6×6Ñ6”F×6×6Õ6�M×6×6Ó6 *×6×6Ó6°#×6×6Ó6Ð6×6×6×6×6×6×6×6Ð6à�!‰HÐ:�u˜Q‘xÐ:ˆH�xÑÐ:¤D¨¡GÐ:¬d°1©gÐ: G¨gÑ$5Ð:¸Ð:Ð$5¸Ñ#:Ð:ÐÐ#:Ñ:×:×:×:Ò:ÐÐ#:×:×:Ô:ˆH×:×:Ó:�x×:×:Ó: G×:×:Ó:¨g×:×:Ó:¸×:×:×:×:×:×:×:×:Ð:Ùùò :s   ÃRÃ%Rc           	     ó   • Sn[        USU 5      nS o2ULoD(       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 =pC[        S	 U  5       5      n[        U S
5      nUS   n	[        R                  o§S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍUS   n	[        R                  o¨S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍg )N)ç      >@g      e@r>   g      h@r   rA   rC   rD   rE   rH   rI   c              3  óP   #   • U  H  oS    S:X  d  M  US   S:”  d  M  Uv •  M     g7f)r5   ÚNetr   é    Nr6   ©r7   r8   s     r0   r:   Ú7test_multiword_cell_unions_its_words.<locals>.<genexpr>O   s&   é € ÐBšE�q q¡T¨U¡]“°q¸±t¸c±z—‘šEùó   ‚&’&�	&Úincomer   r]   rV   rK   ©z[%(py1)s == %(py11)s
{%(py11)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s, abs=%(py9)s)
}r_   ©rO   rG   rI   rg   rh   Úpy11úassert %(py13)sÚpy13rJ   )r   rl   rm   rn   ro   rp   rq   rr   rs   r<   r=   r_   ru   )r1   ÚbandrD   rv   rw   rx   ry   ÚfirstÚsecondr…   r|   r†   r‡   rˆ   Ú@py_format12r‹   s                   r0   Ú$test_multiword_cell_unions_its_wordsr    I   sì  € Ø&€DÜ˜˜l¨EÓ2€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××Ñô ÑB™EÓBÓB€EÜ˜˜xÓ(€FØ�‰8Ð7”v—}‘}Ð7¨1¡XÐ7°3Ð7�} XÑ7Ð7Ð7Ñ7×7×7×7Ó7ˆ8×7×7Ô7ˆ8×7×7×7×7×7Ô7”v×7×7×7Ñ7”v×7×7Õ7�}×7×7Ó7 X×7×7Ó7°3×7×7Ó7Ð7×7×7×7×7×7×7×7Ñ7Ø�‰8Ð8”v—}‘}Ð8¨A¡YÐ8°CÐ8�} YÑ8Ð8Ð8Ñ8×8×8×8Ó8ˆ8×8×8Ô8ˆ8×8×8×8×8×8Ô8”v×8×8×8Ñ8”v×8×8Õ8�}×8×8Ó8 Y×8×8Ó8°C×8×8Ó8Ð8×8×8×8×8×8×8×8Ò8r2   c           	     ól  • Sn[        [        X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                  " [        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      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=n=pCS
n[        [        X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                  " [        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      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=n=pCg )Nznot printed anywhere©Úis©zB%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py3)s, %(py4)s)
} is %(py9)sr   rk   r1   ©rF   rO   rG   rb   rP   rh   úassert %(py11)sr™   Ú )
r   rk   rl   rm   rn   ro   rp   rq   rr   rs   )r1   rv   r{   r‡   r�   Ú@py_format10rŸ   s          r0   Ú test_unmatched_text_returns_noner©   U   s”  € Ø3ÐCŒ;”tÐ3Ó;ÐC¸tÐC¸tÐC×C×C×CÓCÐ;×C×C×C×C×CÕCŒ;×C×C×CÑCŒ;×C×C×C×C×CÖC”t×C×C×CÑC”t×C×CÕCÐ3×C×C×C×C×CÔC°U×C×C×CÑC°U×C×CÕCÐ;×C×CÓC¸t×C×C×C×C×C×CÕCØÐ/Œ;”t˜RÓ'Ð/¨4Ð/¨4Ð/×/×/×/Ó/Ð'×/×/×/×/×/Õ/Œ;×/×/×/Ñ/Œ;×/×/×/×/×/Ö/”t×/×/×/Ñ/”t×/×/Õ/˜R×/×/×/×/×/Ô/ ×/×/×/Ñ/ ×/×/Õ/Ð'×/×/Ó/¨4×/×/×/×/×/×/Ö/r2   c           	     óx  • Sn[        USU 5      nS o2ULoD(       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 =pC[        S	 U  5       5      n[        R                  o‡S S
 n	So¨" XšS9o²U:H  oD(       Gd7  [        R                  " SU4SX+45      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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n	=p«g )N)r�   g      j@r>   g      m@u   Q2â€™26rA   rC   rD   rE   rH   rI   c              3  óR   #   • U  H  nS US   ;   d  M  US   S:”  d  M  Uv •  M     g7f)Ú26r5   r   éÈ   Nr6   r“   s     r0   r:   Ú5test_typographic_punctuation_folds.<locals>.<genexpr>b   s(   é € ÐCše˜ t¨q°©t¡|“1¸¸!¹¸s¹
—1‘1šeùs   ‚'“'ž	'r5   r]   rV   rK   r^   r_   r`   rd   re   ©r   rl   rm   rn   ro   rp   rq   rr   rs   r<   r_   ru   )r1   rœ   rD   rv   rw   rx   ry   rz   r€   r{   r�   r‚   rƒ   r„   s                 r0   Ú"test_typographic_punctuation_foldsr°   Z   sA  € ð
 '€DÜ˜˜i¨Ó/€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××ÑÜÑC™eÓCÓC€GÜ—M‘MÐ7¨"¨1 +Ð7°3Ð7�M +Ñ7Ð7Ð7Ñ7×7×7×7Ó7ˆ5×7×7×7×7×7Õ7ˆ5×7×7×7Ñ7ˆ5×7×7×7×7×7Ö7”F×7×7×7Ñ7”F×7×7Õ7�M×7×7Ó7 +×7×7Ó7°3×7×7Ó7Ð7×7×7×7×7×7×7×7Ð7r2   c           
     óš  • [         S   [        [         S   -
  [         S   [        [         S   -
  4nSS//nS U//n[        X#U [        5      nUS   S   nS oeUL ow(       do  [        R                  " SU4SXV45      [        R
                  " U5      [        R
                  " U5      S	.-  nS
SU0-  n	[        [        R                  " U	5      5      eS =n=pvUS   S   n
S ozU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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =p·[        S U  5       S S9nU
S   n[        R                  oþS   nSnU" UUS9nUU:H  ow(       Gd  [        R                  " SU4SUU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      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=nnU
S   n[        R                  oþS   n[        U-
  nSnU" UUS9nUU:H  ow(       GdU  [        R                  " SU4SUU45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R
                  " [        5      OS[        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=n=n=nnU
S   n[        R                  oþS   nSnU" UUS9nUU:H  ow(       Gd  [        R                  " SU4SUU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      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=nnU
S   n[        R                  oþS   n[        U-
  nSnU" UUS9nUU:H  ow(       GdU  [        R                  " SU4SUU45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R
                  " [        5      OS[        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=n=n=nng )"Nr   rT   rJ   r   r   r   r¢   )z%(py1)s is %(py4)s)rO   rb   zassert %(py6)srP   rA   rC   ÚgotrE   rH   rI   c              3  ó:   #   • U  H  oS    S:X  d  M  Uv •  M     g7f)r5   r   Nr6   r“   s     r0   r:   Ú6test_grid_round_trips_camelot_frame.<locals>.<genexpr>p   s   é € Ð/’Eˆq˜q™T YÑ.�‰’Eùó   ‚’	c                ó6   • [        U S   U S   -   S-  S-
  5      $ rS   rV   rX   s    r0   rY   Ú5test_grid_round_trips_camelot_frame.<locals>.<lambda>q   s   € ”c˜1˜Q™4 ! A¡$™;¨!Ñ+¨cÑ1Ô2r2   r[   r]   rV   rK   r—   r_   r˜   rš   r›   )zh%(py1)s == %(py13)s
{%(py13)s = %(py5)s
{%(py5)s = %(py3)s.approx
}((%(py6)s - %(py8)s), abs=%(py11)s)
}r$   )rO   rG   rI   rP   rQ   r™   r›   ri   rj   )rk   r$   r   rl   rm   rq   rr   rs   rn   ro   rp   rt   r_   ru   )r1   Úcamelot_bandÚcellsÚboxesÚoutr…   r€   rv   Ú@py_format5r}   r²   rw   rx   ry   rz   r|   r†   r‡   rˆ   rŸ   r‹   r�   r‚   Ú@py_assert12rŒ   s                            r0   Ú#test_grid_round_trips_camelot_framer¾   f   sS  € ä˜‘GœV¤d¨1¡gÑ-¬t°A©w¼ÄÀaÁÑ8HÐI€LØ˜9Ð%Ð&€EØ�LÐ!Ð"€EÜ
˜U¨5´&Ó
9€CØˆq‰6�!‰9Ð˜Ð˜Ð×××Òˆ9××Ôˆ9××Ó˜××××××ÓØ
ˆa‰&�‰)€CØÐ�dˆ?×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�d××××××ÑÜÙ/‘EÓ/Ù2ñ€Gð ˆq‰6Ð7”V—]‘]Ð7¨1¡:Ð7°3Ð7‘] :°3Ñ7Ð7ˆ6Ð7Ñ7×7×7×7Ó7ˆ6Ð7×7×7Ô7ˆ6×7×7×7×7×7Ô7”V×7×7×7Ñ7”V×7×7Õ7�]×7×7Ó7 :×7×7Ó7°3×7×7Ó7Ð7×7×7×7×7×7×7×7Ò7Øˆq‰6Ð@”V—]‘]Ð@°A©JÐ@¤6¨JÑ#6Ð@¸CÐ@‘]Ð#6¸CÑ@Ð@ˆ6Ð@Ñ@×@×@×@Ó@ˆ6Ð@×@×@Ô@ˆ6×@×@×@×@×@Ô@”V×@×@×@Ñ@”V×@×@Õ@�]×@×@×@×@×@Ô@¤6×@×@×@Ñ@¤6×@×@Õ@¨J×@×@Ó@¸C×@×@Ó@Ð@×@×@×@×@×@×@×@Ô@Øˆq‰6Ð7”V—]‘]Ð7¨1¡:Ð7°3Ð7‘] :°3Ñ7Ð7ˆ6Ð7Ñ7×7×7×7Ó7ˆ6Ð7×7×7Ô7ˆ6×7×7×7×7×7Ô7”V×7×7×7Ñ7”V×7×7Õ7�]×7×7Ó7 :×7×7Ó7°3×7×7Ó7Ð7×7×7×7×7×7×7×7Ò7Øˆq‰6Ð@”V—]‘]Ð@°A©JÐ@¤6¨JÑ#6Ð@¸CÐ@‘]Ð#6¸CÑ@Ð@ˆ6Ð@Ñ@×@×@×@Ó@ˆ6Ð@×@×@Ô@ˆ6×@×@×@×@×@Ô@”V×@×@×@Ñ@”V×@×@Õ@�]×@×@×@×@×@Ô@¤6×@×@×@Ñ@¤6×@×@Õ@¨J×@×@Ó@¸C×@×@Ó@Ð@×@×@×@×@×@×@×@Õ@r2   c                ó  • SS//nSS //n[        XU [        5      nX2:H  oD(       dÛ  [        R                  " SU4SX245      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S.-  nS	S
U0-  n[        [        R                  " U5      5      eS ng )Nr§   r   )ç      $@rÀ   g      I@r�   rK   )z%(py0)s == %(py2)sr»   rº   )rF   ra   zassert %(py4)srb   )
r   r$   rl   rm   rn   ro   rp   rq   rr   rs   )r1   r¹   rº   r»   rw   Ú@py_format3r¼   s          r0   Ú,test_empty_text_and_missing_box_pass_throughrÂ   y   s•   € Ø�)ˆ_Ð€EØ&¨Ð-Ð.€EÜ
˜U¨5´&Ó
9€CØ‰<×××Òˆ3×××××Õˆ3×××Ñˆ3×××××Ö�%×××Ñ�%××××××Ór2   c           	     ó¬  • Sn[        USU 5      nS o2ULoD(       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 =pC[        S	 U  5       5      n[        S
 U  5       5      nUS   n	[        R                  o§S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍUS   n	[        R                  o¨S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍg )N)r�   ç      o@r>   ç      q@zNet assets (9)rA   rC   rD   rE   rH   rI   c              3  óP   #   • U  H  oS    S:X  d  M  US   S:”  d  M  Uv •  M     g7f)r5   r‘   r   éð   Nr6   r“   s     r0   r:   Ú<test_superscript_marker_matches_by_tokens.<locals>.<genexpr>„   s&   é € ÐH¢%˜Q¨Q©4°5©=“q¸Q¸q¹TÀC¹Z—q‘q¢%ùr•   c              3  ó:   #   • U  H  oS    S:X  d  M  Uv •  M     g7f)r5   r   Nr6   r“   s     r0   r:   rÈ   …   s   é € Ð4šU˜¨¡d¨e¡m—!‘!šUùrµ   r   r]   rV   rK   r—   r_   r˜   rš   r›   r   r¯   )r1   rœ   rD   rv   rw   rx   ry   Úlabel_firstÚmarkerr…   r|   r†   r‡   rˆ   rŸ   r‹   s                   r0   Ú)test_superscript_marker_matches_by_tokensrÌ   €   sï  € Ø&€DÜ˜Ð.°Ó6€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××ÑÜÑH¡%ÓHÓH€KÜÑ4™UÓ4Ó4€FØ�‰8Ð=”v—}‘}Ð=°¡^Ð=¸Ð=�} ^Ñ=Ð=Ð=Ñ=×=×=×=Ó=ˆ8×=×=Ô=ˆ8×=×=×=×=×=Ô=”v×=×=×=Ñ=”v×=×=Õ=�}×=×=Ó= ^×=×=Ó=¸×=×=Ó=Ð=×=×=×=×=×=×=×=Ñ=Ø�‰8Ð8”v—}‘}Ð8¨A¡YÐ8°CÐ8�} YÑ8Ð8Ð8Ñ8×8×8×8Ó8ˆ8×8×8Ô8ˆ8×8×8×8×8×8Ô8”v×8×8×8Ñ8”v×8×8Õ8�}×8×8Ó8 Y×8×8Ó8°C×8×8Ó8Ð8×8×8×8×8×8×8×8Ò8r2   c           	     ó¬  • Sn[        USU 5      nS o2ULoD(       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 =pC[        S	 U  5       5      n[        S
 U  5       5      nUS   n	[        R                  o§S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍUS   n	[        R                  o¨S   nSoÊ" X¼S9oÙU:H  o3(       G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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=n
=n=pÍg )N)ç     Àr@rÄ   g     Àw@rÅ   z$ 1,234rA   rC   rD   rE   rH   rI   c              3  óP   #   • U  H  oS    S:X  d  M  US   S:”  d  M  Uv •  M     g7f)r5   r   r   rÇ   Nr6   r“   s     r0   r:   ÚAtest_glued_currency_sign_unions_across_the_gap.<locals>.<genexpr>Ž   s&   é € Ð?š5�a a¡D¨C¡K“°A°a±D¸3±J—‘š5ùr•   c              3  ó:   #   • U  H  oS    S:X  d  M  Uv •  M     g7f)r5   r   Nr6   r“   s     r0   r:   rÐ   �   s   é € Ð5šE�q q¡T¨W¡_—‘šEùrµ   r   r]   rV   rK   r—   r_   r˜   rš   r›   rJ   r¯   )r1   rœ   rD   rv   rw   rx   ry   ÚsignÚvaluer…   r|   r†   r‡   rˆ   rŸ   r‹   s                   r0   Ú.test_glued_currency_sign_unions_across_the_gaprÔ   Š   sî  € Ø'€DÜ˜˜i¨Ó/€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××ÑÜÑ?™5Ó?Ó?€DÜÑ5™EÓ5Ó5€EØ�‰8Ð6”v—}‘}Ð6¨!¡WÐ6°#Ð6�} WÑ6Ð6Ð6Ñ6×6×6×6Ó6ˆ8×6×6Ô6ˆ8×6×6×6×6×6Ô6”v×6×6×6Ñ6”v×6×6Õ6�}×6×6Ó6 W×6×6Ó6°#×6×6Ó6Ð6×6×6×6×6×6×6×6Ñ6Ø�‰8Ð7”v—}‘}Ð7¨1¡XÐ7°3Ð7�} XÑ7Ð7Ð7Ñ7×7×7×7Ó7ˆ8×7×7Ô7ˆ8×7×7×7×7×7Ô7”v×7×7×7Ñ7”v×7×7Õ7�}×7×7Ó7 X×7×7Ó7°3×7×7Ó7Ð7×7×7×7×7×7×7×7Ò7r2   c                ó–  • SSK Jn  SnSn[        X#U 5      nS oTUL 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[        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=peU" X 5      n	S o9U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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =p£U  Vs/ s HO  nUS   US   US   -   S-  s=::  a  US   ::  d  M$  O  M(  US   US   US   -   S-  s=::  a  US   ::  d  MI  O  MM  UPMQ     nnU	S   n[        R                  nS U 5       n[        U5      nSnU" UUS9nUU:H  o3(       Gdj  [        R                  " SU4SUU45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n=n=nnU	S   oòS   nS nUU-   ooU:*  o3(       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=n=pFS&o¡" X 5      nS nUUL 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      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g s  snf ),Nr   )Ú
ink_extent)r�   g      V@r?   g      \@zSynthesized Headerr¢   r¤   r   rœ   r1   r¥   r¦   r™   rA   rC   ÚclamprE   rH   rI   rJ   r   rT   c              3  ó*   #   • U  H	  oS    v •  M     g7f)r   Nr6   r“   s     r0   r:   Ú>test_unmatched_cell_clamps_to_contained_ink.<locals>.<genexpr>¡   s   é € Ð(>²v°!¨1®²vùs   ‚r]   rV   rK   )z|%(py1)s == %(py14)s
{%(py14)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py10)s
{%(py10)s = %(py6)s(%(py8)s)
}, abs=%(py12)s)
}r_   rt   )rO   rG   rI   rP   rQ   rc   re   Úpy14zassert %(py16)sÚpy16g{®Gáz„?)ú<=)z%(py1)s <= (%(py4)s + %(py6)s))rO   rb   rP   zassert %(py9)srh   )g      y@rÎ   g     @@g      t@)z9%(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
} is %(py8)srÖ   )rF   ra   rG   rI   rQ   zassert %(py10)src   )Ú%quber.core.extractors.camelot.tightenrÖ   r   rl   rm   rn   ro   rp   rq   rr   rs   r_   ru   rt   )r1   rÖ   rœ   rv   r{   r‡   r�   r¨   rŸ   r×   rw   rx   ry   r8   Úinsider…   r|   r‚   r‰   rŠ   Ú@py_format15Ú@py_format17r€   Ú@py_format8r†   r~   rƒ   s                              r0   Ú+test_unmatched_cell_clamps_to_contained_inkrâ   ”   sÐ  € Ý@ð &€DØ1ÐAŒ;�t°5Ó9ÐA¸TÐA¸TÐA×A×A×AÓAÐ9×A×A×A×A×AÕAŒ;×A×A×AÑAŒ;×A×A×A×A×AÖA�t×A×A×AÑA�t×A×AÕAÐ1×A×A×A×A×AÔA°5×A×A×AÑA°5×A×AÕAÐ9×A×AÓA¸T×A×A×A×A×A×AÕAÙ�tÓ#€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××Ññ óâˆAØ�‰7�q˜‘t˜a ™d‘{ aÑ'Õ2¨4°©7Ñ2ó 	
á2ñ 	
à7;¸A±wÀ1ÀQÁ4È!ÈAÉ$Á;ÐRSÑBSÕ7^ÐW[Ð\]ÑW^Ñ7^ó 	
á7^õ 	
Ùð ð ð
 �‰8ÐH”v—}‘}ÐHÑ(>±vÓ(>ÐH¤SÐ(>Ó%>ÐHÀCÐH‘}Ð%>ÀCÑHÐHˆ8ÐHÑH×H×H×HÓHˆ8ÐH×H×HÔHˆ8×H×H×H×H×HÔH”v×H×H×HÑH”v×H×HÕH�}×H×H×H×H×HÔH¤S×H×H×HÑH¤S×H×HÕHÐ(>×H×HÓHÐ%>×H×HÓHÀC×H×HÓHÐH×H×H×H×H×H×H×HÔHØ�‰8Ð%˜A‘wÐ% Ð%�w ‘~Ð%�~Ñ%×%×%×%Ò%ˆ8×%×%Ô%ˆ8×%×%Ó%�w×%×%Ó% ×%×%×%×%×%×%×%à2ÐBˆ:Ð2Ó:ÐB¸dÐBÐ:¸dÐB×B×B×BÔBÐ:¸d×B×B×B×B×BÕBˆ:×B×B×BÑBˆ:×B×BÕBÐ2×B×B×B×B×BÔB°E×B×B×BÑB°E×B×BÕBÐ:×B×BÓB¸d×B×B×B×B×B×B×Bùòs   É#YÉ=YÊYÊ"YÊ&Y)Ú__doc__Ú
__future__r   Úbuiltinsrn   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterl   r    r_   Úquber.agents.completenessr   rÝ   r   r   r#   r$   Úfixturer1   r=   rk   r�   r    r©   r°   r¾   rÂ   rÌ   rÔ   râ   r6   r2   r0   Ú<module>rë      s€   ðñõ #ç  „ ƒÛ å 0ß Qà�€ˆð ‡‚�hÑñó  ðò22ð $€òò	9ò0ò
	8òAò&ò9ò8óCr2   