ó
    &s¥j5D  ã                   óF  • 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
r
SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  Sr Sr!S6S\"S\"S	\"S
\"S\#S\$\	S4   4S jjr%S r&S r'S r(S r)S r*S r+S r,S r-  S7S\$\"\"\"\"4   S\.S\$\.\.4   S\4S jjr/S r0S r1S r2S r3S r4S  r5 " S! S"\65      r7 " S# S$\65      r8 " S% S&5      r9S'\9S\4S( jr:S) r;S* r<S+\
Rz                  4S, jr>S+\
Rz                  4S- jr?S. r@S/ rAS\B\$\	S4      4S0 jrCS1 rDS2 rES3 rFS4 rGS5 rHg)8aY  Deterministic-core tests for the GridLocator (no LLM).

Covers the grid-cell -> normalized-box mapping, the text-layer tightening
(alone-in-rows recovers the full word extent; side-by-side stays confined to
its columns; no text -> None so the caller keeps the coarse region), and the
shares-rows detection that drives which branch a flag takes.
é    N)ÚAny)ÚDEFAULT_COLSÚDEFAULT_ROWSÚGRID_LOCATE_MAX_ATTEMPTSÚSTACKED_MIN_COL_OVERLAPÚGridFlagÚLocatedTableÚPydanticAIGridLocatorÚblank_column_bandsÚbuild_promptÚcol_span_overlap_fractionÚcolumn_indexÚcolumn_labelsÚdeclash_side_by_sideÚdeclash_stackedÚflags_to_locatedÚgrid_region_normÚis_transient_llm_errorÚ	pad_boxesÚstub_column_followsÚtighten_regiong      ƒ@g     Àˆ@Úx0Úy0Úx1Úy1ÚtextÚreturn.c                 ó   • XX#USSS4$ )z#A minimal PyMuPDF-style word tuple.r   © )r   r   r   r   r   s        Ú1/home/mande/repo/quber/tests/test_grid_locator.pyÚwordr!   )   s   € à�B˜D ! Q¨Ð*Ð*ó    c                  ór
  • Sn [        U 5      nSo!U:H  o3(       d×  [        R                  " SU4SX4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=p2S	n Sn[        X5      nS
ocU:H  ow(       dì  [        R                  " SU4SX64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=pvSn Sn[        X5      nSocU:H  ow(       dì  [        R                  " SU4SX64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=pvSn Sn[        X5      nS
ocU:H  ow(       dì  [        R                  " SU4SX64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=pvSn Sn[        X5      nS
ocU:H  ow(       dì  [        R                  " SU4SX64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=pvg )Né   ÚABCDEFGHIJKL©ú==)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   )Úpy0Úpy2Úpy4Úpy7úassert %(py9)sÚpy9ÚAr   ©z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)sr   ©r(   r)   r*   Úpy6r-   úassert %(py11)sÚpy11ÚLé   Ú ÚZ)
r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   )	Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10Ú@py_assert8Ú@py_assert7Ú@py_format12s	            r    Útest_column_labels_and_indexrI   .   sÏ  € ØÐ.Œ=˜ÓÐ. Ð. Ñ.×.×.×.Ò.Ð×.×.×.×.×.Õ.Œ=×.×.×.Ñ.Œ=×.×.Õ.˜×.×.Ó.Ð×.×.Ó. ×.×.×.×.×.×.Õ.ØÐ%˜RÐ%Œ<˜Ó Ð% AÐ% AÑ%×%×%×%Ò%Ð ×%×%×%×%×%Õ%Œ<×%×%×%Ñ%Œ<×%×%Õ%˜×%×%Ó%˜R×%×%Ó%Ð ×%×%Ó% A×%×%×%×%×%×%×%ØÐ&˜RÐ&Œ<˜Ó Ð& BÐ& BÑ&×&×&×&Ò&Ð ×&×&×&×&×&Õ&Œ<×&×&×&Ñ&Œ<×&×&Õ&˜×&×&Ó&˜R×&×&Ó&Ð ×&×&Ó& B×&×&×&×&×&×&×&àÐ$˜BÐ$Œ<˜ÓÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$Œ<×$×$×$Ñ$Œ<×$×$Õ$˜×$×$Ó$˜B×$×$Ó$Ð×$×$Ó$ 1×$×$×$×$×$×$×$ØÐ%˜RÐ%Œ<˜Ó Ð% AÐ% AÑ%×%×%×%Ò%Ð ×%×%×%×%×%Õ%Œ<×%×%×%Ñ%Œ<×%×%Õ%˜×%×%Ó%˜R×%×%Ó%Ð ×%×%Ó% A×%×%×%×%×%×%×%Ð%r"   c            	      ó  • [        SSSSSS5      n U S   nSo!U:H  o3(       do  [        R                  " SU4S	X45      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[	        [        R
                  " U5      5      eS =n=p2U S   nSo!U:H  o3(       do  [        R                  " SU4S	X45      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[	        [        R
                  " U5      5      eS =n=p2U S   nSnSorU-  o†U-
  n	[        U	5      n
SoºU:  oÌ(       Gd  [        R                  " SU4SX«45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n	=n
=pËU S   nSnSorU-  o†U-
  n	[        U	5      n
SoºU:  oÌ(       Gd  [        R                  " SU4SX«45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n	=n
=pËg )Né   é   r   r5   é   r$   ç        r&   ©z%(py1)s == %(py4)s©Úpy1r*   úassert %(py6)sr1   é   ç      ð?é   é   ç•Ö&è.>©Ú<)zJ%(py10)s
{%(py10)s = %(py0)s((%(py2)s - (%(py4)s / %(py6)s)))
} < %(py13)sÚabs)r(   r)   r*   r1   Úpy10Úpy13zassert %(py15)sÚpy15)
r   r8   r9   r=   r>   r?   rZ   r:   r;   r<   )ÚboxÚ@py_assert0rA   Ú@py_assert2Ú@py_format5Ú@py_format7r@   rC   rG   rF   Ú@py_assert9Ú@py_assert12Ú@py_assert11Ú@py_format14Ú@py_format16s                  r    Ú(test_grid_region_norm_maps_rows_and_colsrh   7   s  € ä
˜1˜a  B¨¨BÓ
/€CØˆq‰6Ð�SÐ�S‰=×××Òˆ6××Ôˆ6××Ó�S××××××ÓØˆq‰6Ð�SÐ�S‰=×××Òˆ6××Ôˆ6××Ó�S××××××ÓØ�1‰vÐ&˜Ð&˜BÐ&˜B™Ð&˜‰Ð&Œ3ˆÓÐ& $Ð& $Ñ&×&×&×&Ó&Ð×&×&×&×&×&Õ&Œ3×&×&×&Ñ&Œ3×&×&Õ&ˆv×&×&Ó&˜×&×&Ó&˜B×&×&Ó&Ð×&×&Ó& $×&×&×&×&×&×&×&Õ&Ø�1‰vÐ&˜Ð&˜BÐ&˜B™Ð&˜‰Ð&Œ3ˆÓÐ& $Ð& $Ñ&×&×&×&Ó&Ð×&×&×&×&×&Õ&Œ3×&×&×&Ñ&Œ3×&×&Õ&ˆv×&×&Ó&˜×&×&Ó&˜B×&×&Ó&Ð×&×&Ó& $×&×&×&×&×&×&×&Ö&r"   c                  óŒ  • [        SSSSSS5      n SoU:H  o"(       d¥  [        R                  " SU4SX45      S	[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS =p!g )NrU   rM   r   r5   r$   )rN   rN   rT   rT   r&   ©z%(py0)s == %(py3)sr^   ©r(   Úpy3úassert %(py5)sÚpy5)	r   r8   r9   r:   r;   r<   r=   r>   r?   )r^   r`   r@   Ú@py_format4Ú@py_format6s        r    Ú+test_grid_region_norm_clamps_to_unit_squarerq   @   ss   € Ü
˜1˜b ! R¨¨RÓ
0€CØ&Ð&Ð&Ñ&×&×&×&Ò&ˆ3×&×&×&×&×&Õ&ˆ3×&×&×&Ñ&ˆ3×&×&Õ&Ð&×&×&×&×&×&×&Ò&r"   c            
      ó  • [        SSSS[        [        5      n [        SSSSS	5      [        S
SSSS5      [        SSSSS5      [        SSSSS5      /n[	        X[
        [        SS9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 =pCUS   oD[
        -  nSo‡U-
  n	[        U	5      n
SoºU:  oÌ(       Gd?  [        R                  " SU4S X«4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
=pËUS&   oD[
        -  nSo‡U-
  n	[        U	5      n
SoºU:  oÌ(       Gd?  [        R                  " SU4S X«4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
=pËg )'Né   é   rK   é   é.   i  éZ   é"  ÚRegionéÒ   i  z1,234éh  é  é�  i$  z5.1%é@  iJ  ÚUSF©Úshares_rows©úis not©z%(py0)s is not %(py3)sÚtightrk   rm   rn   r   rT   rX   ©zH%(py9)s
{%(py9)s = %(py0)s(((%(py2)s * %(py3)s) - %(py6)s))
} < %(py12)srZ   ÚPAGE_W©r(   r)   rl   r1   r-   Úpy12úassert %(py14)sÚpy14rS   )r   r   r   r!   r   r‡   ÚPAGE_Hr8   r9   r:   r;   r<   r=   r>   r?   rZ   )ÚregionÚwordsr…   r`   r@   ro   rp   Ú@py_assert4rC   rG   rF   re   Ú@py_assert10Ú@py_format13Ú@py_format15s                  r    Ú0test_tighten_alone_recovers_clipped_label_columnr“   E   sd  € ô ˜b " a¨¬L¼,ÓG€FäˆR��b˜#˜xÓ(ÜˆS�#�s˜C Ó)ÜˆS�#�s˜C Ó(ÜˆR��b˜#˜tÓ$ð	€Eô ˜6¬&´&ÀeÑL€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××Ñà�Q‰xÐ,œ&Ñ Ð, 2Ð, 2Ñ%Ð,Œ3Ð%Ó&Ð,¨Ð,¨Ñ,×,×,×,Ó,Ð&×,×,×,×,×,Õ,Œ3×,×,×,Ñ,Œ3×,×,Õ,ˆx×,×,×,×,×,Ô,œ&×,×,×,Ñ,œ&×,×,Õ, 2×,×,Ó,Ð&×,×,Ó,¨×,×,×,×,×,×,×,Ó,Ø�Q‰xÐ-œ&Ñ Ð- 3Ð- 3Ñ&Ð-Œ3Ð&Ó'Ð-¨#Ð-¨#Ñ-×-×-×-Ó-Ð'×-×-×-×-×-Õ-Œ3×-×-×-Ñ-Œ3×-×-Õ-ˆx×-×-×-×-×-Ô-œ&×-×-×-Ñ-œ&×-×-Õ- 3×-×-Ó-Ð'×-×-Ó-¨#×-×-×-×-×-×-×-Ô-r"   c            
      óú  • [        SSSS[        [        5      n [        SSSSS	5      [        SS
SSS5      [        SSSSS5      [        SS
SSS5      /n[	        X[
        [        SS9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 =pCUS   ow[
        -  nSo˜U	:  oª(       dÂ  [        R                  " SU
4SX‰45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS[        R                  " U	5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=n=p©g )#Né   ru   rU   rV   rv   éx   é»   é‚   Úlefté–   é´   é    Ú456é2  é¿  Úrighté|  Ú789Tr€   r‚   r„   r…   rk   rm   rn   rS   éú   rX   )z(%(py1)s * %(py2)s) < %(py6)sr‡   )rQ   r)   r1   úassert %(py8)sÚpy8©r   r   r   r!   r   r‡   rŒ   r8   r9   r:   r;   r<   r=   r>   r?   )r�   rŽ   r…   r`   r@   ro   rp   r_   rA   rC   r�   rb   Ú@py_format9s                r    Ú.test_tighten_side_by_side_stays_within_columnsr¨   V   sD  € ô ˜a  A q¬,¼ÓE€FäˆR��c˜3 Ó'ÜˆS�#�s˜C Ó'ÜˆS�#�s˜C Ó)ÜˆS�#�s˜C Ó'ð	€Eô ˜6¬&´&ÀdÑK€EØÐ˜Ð×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ˜××××××Ñà�‰8Ð"”fÑÐ"˜sÐ"˜sÑ"×"×"×"Ò"Ð×"×"Ô"ˆ8×"×"×"×"×"Ô"”f×"×"×"Ñ"”f×"×"Õ"˜s×"×"×"×"×"×"Ö"r"   c                  óÌ  • [        SSSS[        [        5      n [        SSSSS	5      /nS
n[	        X[
        [        US9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                  " 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[        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 )NrS   rK   r   r5   rv   iX  rw   ib  z	far belowFr€   )Úis)za%(py8)s
{%(py8)s = %(py0)s(%(py1)s, %(py2)s, %(py3)s, %(py4)s, shares_rows=%(py6)s)
} is %(py11)sr   r�   rŽ   r‡   rŒ   )r(   rQ   r)   rl   r*   r1   r¥   r3   zassert %(py13)sr\   r¦   )r�   rŽ   rC   rG   r�   rc   rH   rf   s           r    Ú!test_tighten_no_text_returns_noner«   f   s=  € ô ˜a  A r¬<¼ÓF€FÜ�"�c˜2˜s KÓ0Ð1€EØEJÐSŒ>˜&¬´ÀUÑKÐSÈtÐSÈtÐS×S×S×SÓSÐK×S×S×S×S×SÕSŒ>×S×S×SÑSŒ>×S×S×S×S×SÖS˜&×S×S×SÑS˜&×S×S×S×S×SÖS %×S×S×SÑS %×S×S×S×S×SÖS¬×S×S×SÑS¬×S×S×S×S×SÖS´×S×S×SÑS´×S×SÕSÀU×S×SÓSÐK×S×SÓSÈt×S×S×S×S×S×SÖSr"   c            
      óÊ  • [        SSSSSSS9[        SS	S
SSSS9/n [        SSSSS5      [        SSSSS5      /n[        X[        [        [
        [        5      n[        U5      nSoCU:H  oU(       Gd  [        R                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pTS U 5       n[!        U5      o™(       d¢  SS[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U	5      S.-  n
[        [        R                  " U
5      5      eS =p‰US   R"                  S   o²S   R"                  S   o›U	:  o3(       do  [        R                  " S U4S!X¹45      [        R                  " U5      [        R                  " U	5      S".-  n
S#S$U
0-  n[        [        R                  " U5      5      eS =n=p9g )%NrU   Út1rK   rL   r.   ÚE©ÚordinalÚtitleÚ	row_startÚrow_endÚ	col_startÚcol_endrS   Út2rs   é   rv   éd   é,  én   Úrow1rx   Úrow2r&   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚlocated©r(   rQ   rl   r1   r¤   r¥   c              3   ó8   #   • U  H  oR                   v •  M     g 7f©N)Ú	tightened)Ú.0Úts     r    Ú	<genexpr>Ú?test_flags_to_located_stacked_are_not_shared.<locals>.<genexpr>{   s   é € Ð,¢G˜q�{Ž{¢Gùs   ‚z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall©r(   r)   r*   r   rV   rX   ©ú%(py1)s < %(py4)srP   rR   r1   )r   r!   r   r‡   rŒ   r   r   r¾   r8   r9   r:   r;   r<   r=   r>   r?   rÈ   r�   )ÚflagsrŽ   r¿   r`   rC   r�   rb   r§   r@   rA   ra   r_   s               r    Ú,test_flags_to_located_stacked_are_not_sharedrÍ   n   sÍ  € ô 	˜ $°!¸QÈ#ÐWZÑ[Ü˜ $°"¸bÈCÐY\Ñ]ð€Eô
 	ˆR��c˜3 Ó'ÜˆR��c˜3 Ó'ð€Eô ˜u¬V´V¼\Ì<ÓX€GÜˆw‹<Ð˜1Ð˜1Ñ×××Óˆ<×××××ÕŒ3×××ÑŒ3×××××Öˆw×××Ñˆw××Õˆ<××Ó˜1××××××ÓÙ,¡GÓ,Ð,Œ3Ð,Ó,Ð,Õ,×,×,×,×,×,Ñ,Œ3×,×,×,Ñ,Œ3×,×,Õ,Ð,×,×,Ó,Ð,×,×,×,×,×,Ò,à�1‰:×Ñ˜QÑÐ6¨!¡*×"3Ñ"3°AÑ"6Ð6Ð"6Ñ6×6×6×6Ò6Ð×6×6Ô6Ð×6×6Ó6Ð"6×6×6×6×6×6×6Ô6r"   c            
      óL  • [        SSSSSSS9[        SS	SSS
SS9/n [        SSSSS5      [        SSSSS	5      /n[        X[        [        [
        [        5      n[        U5      nSoCU:H  oU(       Gd  [        R                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pTUS   R                   S   o‚S   R                   S   o˜U	:  o3(       do  [        R                  " SU4SX‰45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p9g )NrU   r™   r•   ru   ÚBÚDr¯   rS   r    ÚGÚIrv   r¸   r—   rœ   rž   rŸ   r&   r½   r¾   r¿   rÀ   r¤   r¥   r   rX   rÊ   rP   rR   r1   )r   r!   r   r‡   rŒ   r   r   r¾   r8   r9   r:   r;   r<   r=   r>   r?   r�   )rÌ   rŽ   r¿   r`   rC   r�   rb   r§   r_   rA   ra   s              r    Ú-test_flags_to_located_side_by_side_share_rowsrÓ   €   sf  € ä˜ &°A¸qÈCÐY\Ñ]Ü˜ '°QÀÈSÐZ]Ñ^ð€Eô
 	ˆR��c˜3 Ó'ÜˆS�#�s˜C Ó)ð€Eô ˜u¬V´V¼\Ì<ÓX€GÜˆw‹<Ð˜1Ð˜1Ñ×××Óˆ<×××××ÕŒ3×××ÑŒ3×××××Öˆw×××Ñˆw××Õˆ<××Ó˜1××××××Óà�1‰:×Ñ˜QÑÐ6¨!¡*×"3Ñ"3°AÑ"6Ð6Ð"6Ñ6×6×6×6Ò6Ð×6×6Ô6Ð×6×6Ó6Ð"6×6×6×6×6×6×6Ô6r"   r�   r°   Ú	grid_colsc           	      ó   • [        USU SUSS9$ )NrÅ   )rU   rU   T©r°   r±   r�   Ú	grid_rowsrÔ   rÃ   )r	   )r�   r°   rÔ   s      r    r¿   r¿   �   s   € ô
 Ø˜s¨6¸VÈyÐdhñð r"   c            
      ó¾  • [        [        S5      /[        [        S5      S   R                  n U S   nSnSo3[        -  oBU-
  oQU-
  n[        U5      nSo‡U:  o™(       GdT  [        R                  " SU	4SXx45      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n=p˜U S   nSnSo3[        -  oBU-
  oQU-
  n[        U5      nSo‡U:  o™(       GdT  [        R                  " SU	4SXx45      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n=p˜U S   nSnSo3[        -  oBU-   oQU-
  n[        U5      nSo‡U:  o™(       GdT  [        R                  " SU	4SXx45      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        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=n=p˜[        [        S5      /[        [        S5      S   R                  n/ oS   nSo=U:H  oîoþ(       a  US   nSo–U	:H  nUnU(       Gd	  [        R                  " SU4SXÓ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR                  U5        U(       aa  [        R                  " SW4SXi45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  nUR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=nn	g ) N)çš™™™™™¹?rÙ   çÍÌÌÌÌÌì?rÚ   g      @r   rÙ   rL   rW   rX   )zV%(py12)s
{%(py12)s = %(py0)s((%(py2)s - (%(py4)s - (%(py6)s / %(py7)s))))
} < %(py15)srZ   r‡   )r(   r)   r*   r1   r+   r‰   r]   úassert %(py17)sÚpy17rU   rŒ   rS   rÚ   )zV%(py12)s
{%(py12)s = %(py0)s((%(py2)s - (%(py4)s + (%(py6)s / %(py7)s))))
} < %(py15)s)çü©ñÒMbP?rÝ   ç      à?rÞ   rN   r&   ©z%(py3)s == %(py6)s©rl   r1   ú%(py8)sr¥   ©z%(py11)s == %(py14)s©r3   r‹   ú%(py16)sÚpy16úassert %(py19)sÚpy19)r   r¿   r‡   rŒ   r�   rZ   r8   r9   r:   r;   r<   r=   r>   r?   ÚappendÚ_format_boolop)Úgrownr@   rA   rC   rF   rc   r�   re   Ú@py_assert14Ú@py_assert13rg   Ú@py_format18Úedger`   r�   r_   rd   rb   r§   r’   Ú@py_format17Ú@py_format20s                         r    Útest_pad_boxes_grows_and_clampsrñ   ™   sŸ  € Ü”wÐ3Ó4Ð5´v¼vÀsÓKÈAÑN×UÑU€EØ�Q‰xÐ4˜3Ð4 Ð4¤V¡Ð4 Ñ+Ð4Ð+Ñ,Ð4Œ3Ð,Ó-Ð4°Ð4°Ñ4×4×4×4Ó4Ð-×4×4×4×4×4Õ4Œ3×4×4×4Ñ4Œ3×4×4Õ4ˆx×4×4Ó4˜3×4×4Ó4 ×4×4×4×4×4Ô4¤V×4×4×4Ñ4¤V×4×4Õ4Ð-×4×4Ó4°×4×4×4×4×4×4×4×4Ø�Q‰xÐ4˜3Ð4 Ð4¤V¡Ð4 Ñ+Ð4Ð+Ñ,Ð4Œ3Ð,Ó-Ð4°Ð4°Ñ4×4×4×4Ó4Ð-×4×4×4×4×4Õ4Œ3×4×4×4Ñ4Œ3×4×4Õ4ˆx×4×4Ó4˜3×4×4Ó4 ×4×4×4×4×4Ô4¤V×4×4×4Ñ4¤V×4×4Õ4Ð-×4×4Ó4°×4×4×4×4×4×4×4×4Ø�Q‰xÐ4˜3Ð4 Ð4¤V¡Ð4 Ñ+Ð4Ð+Ñ,Ð4Œ3Ð,Ó-Ð4°Ð4°Ñ4×4×4×4Ó4Ð-×4×4×4×4×4Õ4Œ3×4×4×4Ñ4Œ3×4×4Õ4ˆx×4×4Ó4˜3×4×4Ó4 ×4×4×4×4×4Ô4¤V×4×4×4Ñ4¤V×4×4Õ4Ð-×4×4Ó4°×4×4×4×4×4×4×4×4ä”gÐ6Ó7Ð8¼&Ä&È#ÓNÈqÑQ×XÑX€DÙ,�‰7Ð,�cÐ,�c‰>×,˜d 1™gÐ,¨Ð,¨™n×,×,×,Ö,ˆ7×,×,Ô,ˆ7×,×,Ó,�c×,×,×,×,×,×,×,Ó,˜g×,×,Ô,˜g×,×,Ó,¨×,×,×,×,×,×,×,×,×,×,×,×,×,×,Ñ,r"   c                  ó:  • [        SSS9n [        SSS9n[        SSSS	S
5      /n[        X/U[        [        5      nUS   R
                  S   oD[        -  nS	oeU-
  n[        U5      nSo˜U	:  oª(       Gd?  [        R                  " SU
4SX‰4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=p©US   R
                  S   oCS   R
                  S   n[        XM5      ocS   R
                  S   oãS   R
                  S   n	[!        Xé5      oöU:*  ow(       Gdi  [        R                  " SU4SXo45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=pŸg )N©çš™™™™™©?rô   çffffffî?çš™™™™™Ù?rU   ©r°   )rô   gÃõ(\�ÂÕ?rõ   ç333333ã?rS   é2   éð   r¹   r£   zlast-upper-rowr   rV   rT   rX   r†   rZ   rŒ   rˆ   rŠ   r‹   )ú<=)zd%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} <= %(py14)s
{%(py14)s = %(py8)s(%(py10)s, %(py12)s)
}ÚmaxÚmin)r(   r)   r*   r1   r¥   r[   r‰   r‹   úassert %(py16)srå   )r¿   r!   r   r‡   rŒ   r�   rZ   r8   r9   r:   r;   r<   r=   r>   r?   rü   rý   )ÚupperÚlowerrŽ   Úoutr@   r�   rC   rG   rF   re   r�   r‘   r’   rA   rc   rì   rï   s                    r    Ú-test_declash_pulls_upper_bottom_off_lower_topr  £   s0  € ô Ð,°aÑ8€EÜÐ,°aÑ8€EÜ�"�c˜3 Ð%5Ó6Ð7€EÜ
˜5˜.¨%´¼Ó
@€CØ�1‰v�}‰}˜QÑÐ5¤&Ñ(Ð5¨3Ð5¨3Ñ.Ð5Œ3Ð.Ó/Ð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×5×5Ô5¤&×5×5×5Ñ5¤&×5×5Õ5¨3×5×5Ó5Ð/×5×5Ó5°#×5×5×5×5×5×5×5Ó5à�1‰v�}‰}˜QÑÐ] Q¡§¡¨qÑ!1Ð]Œ3ÐÓ2Ð]¸a¹&¿-¹-ÈÑ:JÐ]ÐPQÉFÏMÉMÐZ[ÑL\Ð]´cÐ:JÓ6]Ð]Ð6]Ñ]×]×]×]Ó]Ð2×]×]×]×]×]Õ]Œ3×]×]×]Ñ]Œ3×]×]Õ]Ð×]×]Ó]Ð!1×]×]Ó]Ð2×]×]×]×]×]Ô]´c×]×]×]Ñ]´c×]×]Õ]Ð:J×]×]Ó]ÐL\×]×]Ó]Ð6]×]×]×]×]×]×]×]Ô]r"   c            
      óœ  • [        SSSSSSS9n [        SSS	S
SSS9n[        SSSSS5      [        SSSSS5      /n[        X/U[        [        5      nUS   R
                  S   [        -  nSnSoeU-   nSo‡U-  o”U	-
  n
[        U
5      nSoËU:  oÝ(       GdL  [        R                  " SU4SX¼45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        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=pÜUS   R
                  S   nU[        -  nUU:H  of(       dù  [        R                  " SU4SUU45      [        R                  " U5      S [        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS!.-  nS"S#U0-  n[        [        R                  " U5      5      eS =n=nnS$oTU:„  nU(       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 =nng )*NrU   r6   ró   )rV   r$   ©r   r5   TrÖ   rS   )rô   g{®GázÔ?rõ   rø   )rs   é   rù   éÿ   r¹   i  zupper-last-rowi  r}   i  zlower-first-rowr   rV   rT   rX   )zV%(py12)s
{%(py12)s = %(py0)s((%(py1)s - ((%(py3)s + %(py5)s) / %(py8)s)))
} < %(py15)srZ   Úseam)r(   rQ   rl   rn   r¥   r‰   r]   rÛ   rÜ   r&   )z(%(py1)s * %(py2)s) == %(py5)srŒ   )rQ   r)   rn   úassert %(py7)sr+   g     8p@)Ú>)z%(py0)s > %(py3)srk   rm   rn   )r	   r!   r   r‡   rŒ   r�   rZ   r8   r9   r:   r;   r<   r=   r>   r?   )rÿ   r   rŽ   r  r  r`   r�   rB   rG   rc   r�   re   rë   rì   rg   rí   r_   rA   rp   rD   r@   ro   s                         r    Ú4test_declash_seam_lands_in_blank_band_between_tablesr
  ¯   sh  € ô ØØØ'ØØØñ€Eô ØØØ'ØØØñ€Eô 	ˆR��c˜3Ð 0Ó1ÜˆR��c˜3Ð 1Ó2ð€Eô ˜5˜.¨%´¼Ó
@€CØˆq‰6�=‰=˜ÑœfÑ$€DØÐ,˜SÐ,˜S‘yÐ, AÐ, A‘oÐ,�oÑ%Ð,Œ3Ð%Ó&Ð,¨Ð,¨Ñ,×,×,×,Ó,Ð&×,×,×,×,×,Õ,Œ3×,×,×,Ñ,Œ3×,×,×,×,×,Ö,ˆt×,×,×,Ñ,ˆt×,×,Õ,�s×,×,Ó,˜S×,×,Ó, A×,×,Ó,Ð&×,×,Ó,¨×,×,×,×,×,×,×,×,Øˆq‰6�=‰=˜ÑÐ,ÐœfÑ$Ð,Ð$¨Ñ,×,×,×,Ò,Ð$¨×,×,Ô,Ð×,×,×,×,×,Ô,œf×,×,×,Ñ,œf×,×,×,×,×,Ö,¨×,×,×,Ñ,¨×,×,×,×,×,×,Ö,ØÐ�%‰<×××Óˆ4×××××Õˆ4×××Ñˆ4××Õ�%××××××Ór"   c                  ó†  • [        SSSS9n [        SSSS9n[        SS	S
SS5      [        SS	SSS5      /n[        X/U[        [        5      nUS   oDR
                  oPR
                  oeU:H  ow(       dÏ  [        R                  " SU4SXV45      [        R                  " U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=n=pvUS   oDR
                  oQR
                  oeU:H  ow(       dÏ  [        R                  " SU4SXV45      [        R                  " U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=n=pvg )N)g¤ß¾œ3²?ç=,Ôšæ·?gÆÜµ„|Ðá?g£’:MÜ?rU   ©rU   r•   )r°   rÔ   )gV}®¶bÝ?r  grùé·¯í?gªñÒMbÔ?rS   ©rL   é
   rù   éÈ   r¹   rz   zleft-rowr~   éô  z	right-rowr   r&   ©zJ%(py3)s
{%(py3)s = %(py1)s.region
} == %(py7)s
{%(py7)s = %(py5)s.region
}r™   ©rQ   rl   rn   r+   r,   r-   r    )r¿   r!   r   r‡   rŒ   r�   r8   r9   r=   r:   r;   r<   r>   r?   )
r™   r    rŽ   r  r_   r`   rB   r�   rD   rE   s
             r    Ú/test_declash_leaves_side_by_side_pair_untouchedr  Ð   sc  € ô Ð3¸QÈ&ÑQ€DÜÐ4¸aÈ7ÑS€EäˆR��c˜3 
Ó+ÜˆS�#�s˜C Ó-ð€Eô ˜4˜-¨´¼Ó
?€CØˆq‰6Ð'�=‰=Ð'ŸK™KÐ'˜KÑ'×'×'×'Ò'ˆ=×'×'Ô'ˆ6×'×'Ó'ˆ=×'×'×'×'×'Ô'˜D×'×'×'Ñ'˜D×'×'Õ'˜K×'×'×'×'×'×'Õ'Øˆq‰6Ð(�=‰=Ð(ŸL™LÐ(˜LÑ(×(×(×(Ò(ˆ=×(×(Ô(ˆ6×(×(Ó(ˆ=×(×(×(×(×(Ô(˜E×(×(×(Ñ(˜E×(×(Õ(˜L×(×(×(×(×(×(Ö(r"   c                  óì  • Sn Sn[        X5      nSo2U:H  oD(       dì  [        R                  " SU4SX#4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=pCS
n Sn[        X5      nSo2U:H  oD(       dì  [        R                  " SU4SX#4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=pCS
n Sn[        X5      o"[        :  oD(       Gd/  [        R                  " SU4SU[        45      S[        R                  " 5       ;   d  [        R
                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS =n =n=p$g )Nr  )r   rK   rT   r&   r/   r   r0   r2   r3   r  r  rN   )r•   r  rX   )z8%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} < %(py8)sr   )r(   r)   r*   r1   r¥   úassert %(py10)sr[   )
r   r8   r9   r:   r;   r<   r=   r>   r?   r   )	r@   rA   rC   rF   rG   rE   rH   r§   Ú@py_format11s	            r    Ú8test_col_span_overlap_classifies_stacked_vs_side_by_sider  â   sÜ  € à%,Ð<¨fÐ<Ô$ WÓ5Ð<¸Ð<¸Ñ<×<×<×<Ò<Ð5×<×<×<×<×<Õ<Ô$×<×<×<Ñ<Ô$×<×<Õ< W×<×<Ó<¨f×<×<Ó<Ð5×<×<Ó<¸×<×<×<×<×<×<×<à%+Ð<¨WÐ<Ô$ VÓ5Ð<¸Ð<¸Ñ<×<×<×<Ò<Ð5×<×<×<×<×<Õ<Ô$×<×<×<Ñ<Ô$×<×<Õ< V×<×<Ó<¨W×<×<Ó<Ð5×<×<Ó<¸×<×<×<×<×<×<×<à%+ÐO¨WÐOÔ$ VÓ5ÐOÔ8OÑO×O×O×OÓOÐ5Ô8O×O×O×O×O×OÕOÔ$×O×O×OÑOÔ$×O×OÕO V×O×OÓO¨W×O×OÓOÐ5×O×O×O×O×OÔOÔ8O×O×O×OÑOÔ8O×O×O×O×O×O×O×OÐOr"   c            
      ób  • [        SSS9n [        SSS9n[        X/[        SSSS	S
5      /[        [        5      nUS   o3R
                  o@R
                  oTU:H  of(       dÏ  [        R                  " SU4SXE45      [        R                  " U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=n=peUS   o3R
                  oAR
                  oTU:H  of(       dÏ  [        R                  " SU4SXE45      [        R                  " U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=n=peg )N)rô   rô   rõ   ç333333Ó?rU   r÷   )rô   rÞ   rõ   çffffffæ?rS   rù   r  r¹   rz   Úxr   r&   r  rÿ   r  r,   r-   r   )r¿   r   r!   r‡   rŒ   r�   r8   r9   r=   r:   r;   r<   r>   r?   )	rÿ   r   r  r_   r`   rB   r�   rD   rE   s	            r    Ú test_declash_no_op_when_disjointr  ë   sE  € ÜÐ,°aÑ8€EÜÐ,°aÑ8€EÜ
˜5˜.¬4°°C¸¸cÀ3Ó+GÐ*HÌ&ÔRXÓ
Y€CØˆq‰6Ð(�=‰=Ð(ŸL™LÐ(˜LÑ(×(×(×(Ò(ˆ=×(×(Ô(ˆ6×(×(Ó(ˆ=×(×(×(×(×(Ô(˜E×(×(×(Ñ(˜E×(×(Õ(˜L×(×(×(×(×(×(Õ(Øˆq‰6Ð(�=‰=Ð(ŸL™LÐ(˜LÑ(×(×(×(Ò(ˆ=×(×(Ô(ˆ6×(×(Ó(ˆ=×(×(×(×(×(Ô(˜E×(×(×(Ñ(˜E×(×(Õ(˜L×(×(×(×(×(×(Ö(r"   c                   ó8   ^ • \ rS rSrSrS\SS4U 4S jjrSrU =r$ )Ú_StatusErroréó   z>Stand-in for an LLM client error carrying an HTTP status_code.Ústatus_coder   Nc                 ó6   >• [         TU ]  SU 35        Xl        g )Nzstatus )ÚsuperÚ__init__r!  )Úselfr!  Ú	__class__s     €r    r$  Ú_StatusError.__init__ö   s   ø€ Ü‰Ñ˜7 ; -Ð0Ô1Ø&Õr"   )r!  )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úintr$  Ú__static_attributes__Ú__classcell__)r&  s   @r    r  r  ó   s   ø† ÙHð' Cð '¨D÷ 'õ 'r"   r  c                   ó   • \ rS rSrSrSrg)Ú_RateLimitErroréû   z7Stand-in matched by class name rather than status_code.r   N)r(  r)  r*  r+  r,  r.  r   r"   r    r1  r1  û   s   † ÜAr"   r1  c            	       óH   • \ rS rSrSrSS\S\S\SS4S jjrS	\S\4S
 jr	Sr
g)Ú
_FakeAgentr  zsMinimal stand-in for the pydantic-ai Agent: fails the first
`fail_times` calls with `exc`, then returns a sentinel.ÚexcÚ
fail_timesÚsentinelr   Nc                 ó6   • Xl         X l        X0l        SU l        g )Nr   )r5  r6  r7  Úcalls)r%  r5  r6  r7  s       r    r$  Ú_FakeAgent.__init__  s   € ØŒØ$ŒØ ŒØˆ�
r"   Ú_inputsc              ƒ   ó˜   #   • U =R                   S-  sl         U R                   U R                  ::  a  U R                  eU R                  $ 7f)NrU   )r9  r6  r5  r7  )r%  r;  s     r    ÚrunÚ_FakeAgent.run	  s5   é € Ø�
Š
�a‰�
Ø�:‰:˜Ÿ™Ó(Ø—(‘(ˆNØ�}‰}Ðùs   ‚AA
)r9  r5  r6  r7  )ÚOK)r(  r)  r*  r+  r,  Ú	Exceptionr-  Úobjectr$  r=  r.  r   r"   r    r4  r4  ÿ   s<   † ñ?ñ˜Ið °3ð À&ð ÐTXõ ð ð ¨F÷ r"   r4  Úagentc                 óD   • [         R                  [        5      nXl        U$ rÂ   )rA  Ú__new__r
   rB  )rB  Úlocs     r    Ú_locator_with_agentrF    s   € ô �.‰.Ô.Ó
/€CØ„IØ€Jr"   c                  ó”	  • Sn [        U 5      n[        U5      o"(       Gd
  S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[        [        R                  " U5      5      eS =n =pSn [        U 5      n[        U5      o"(       Gd
  S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[        [        R                  " U5      5      eS =n =pSn [        U 5      n[        U5      o"(       + oD(       Gd
  S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[        [        R                  " U5      5      eS =n =n=p$S	n [        U 5      n[        U5      o"(       + oD(       Gd
  S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[        [        R                  " U5      5      eS =n =n=p$g )
Né­  zJassert %(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py1)s(%(py3)s)
})
}r   r  ©r(   rQ   rl   rn   r+   i  r}   úNassert not %(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py1)s(%(py3)s)
})
}i‘  )	r  r   r:   r;   r8   r<   r=   r>   r?   )r`   r�   rB   rD   rF   r§   s         r    Ú%test_is_transient_llm_error_by_statusrK    sv  € Ø/2Ð4¤,¨sÓ"3Ð4Ô!Ð"3Ó4Ð4Ö4×4×4×4×4×4Ñ4Ô!×4×4×4Ñ4Ô!×4×4×4×4×4Ö4¤,×4×4×4Ñ4¤,×4×4Õ4¨s×4×4Ó4Ð"3×4×4Ó4Ð4×4×4×4×4×4Ô4Ø/2Ð4¤,¨sÓ"3Ð4Ô!Ð"3Ó4Ð4Ö4×4×4×4×4×4Ñ4Ô!×4×4×4Ñ4Ô!×4×4×4×4×4Ö4¤,×4×4×4Ñ4¤,×4×4Õ4¨s×4×4Ó4Ð"3×4×4Ó4Ð4×4×4×4×4×4Ô4Ø36Ð8¤l°3Ó&7Ð8Ô%Ð&7Ó8Ð8Ô8Ð8Ö8×8×8×8×8×8Ñ8Ô%×8×8×8Ñ8Ô%×8×8×8×8×8Ö8¤l×8×8×8Ñ8¤l×8×8Õ8°3×8×8Ó8Ð&7×8×8Ó8Ð8×8×8×8×8×8Ö8Ø36Ð8¤l°3Ó&7Ð8Ô%Ð&7Ó8Ð8Ô8Ð8Ö8×8×8×8×8×8Ñ8Ô%×8×8×8Ñ8Ô%×8×8×8×8×8Ö8¤l×8×8×8Ñ8¤l×8×8Õ8°3×8×8Ó8Ð&7×8×8Ó8Ð8×8×8×8×8×8×8r"   c                  ó–  • [        5       n [        U 5      o(       dõ  S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      S.-  n[        [        R                  " U5      5      eS =pSn [        U 5      n[        U5      o3(       + oD(       Gd
  S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[        [        R                  " U5      5      eS =n =n=p4g )	NzCassert %(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s()
})
}r   r1  )r(   rQ   rl   rn   úmalformed requestrJ  Ú
ValueErrorrI  )
r1  r   r:   r;   r8   r<   r=   r>   r?   rN  )r`   r�   rp   rB   rF   r§   s         r    Ú)test_is_transient_llm_error_by_class_namerO    s,  € Ü"1Ó"3Ð4Ô!Ð"3Ó4Ð4Õ4×4×4×4×4×4Ñ4Ô!×4×4×4Ñ4Ô!×4×4×4×4×4Ö4¤/×4×4×4Ñ4¤/×4×4Õ4Ð"3×4×4Ó4Ð4×4×4×4×4×4Ò4Ø1DÐF¤jÐ1DÓ&EÐFÔ%Ð&EÓFÐFÔFÐFÖF×F×F×F×F×FÑFÔ%×F×F×FÑFÔ%×F×F×F×F×FÖF¤j×F×F×FÑF¤j×F×FÕFÐ1D×F×FÓFÐ&E×F×FÓFÐF×F×F×F×F×F×Fr"   Úmonkeypatchc                 óè  • S[         SS 4S jnU R                  [        SU5        [        [	        S5      SSS9n[        U5      n[        R                  " UR                  S S	S
95      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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =peUR                   nSo–U	:H  oª(       dº  [        R                  " SU
4SXi4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 )NÚ_secondsr   c              “   ó   #   • g 7frÂ   r   ©rR  s    r    Ú	_no_sleepÚCtest_run_locator_retries_transient_then_succeeds.<locals>._no_sleep%  ó   é € Øùó   ‚ÚsleeprH  rS   r¿   )r6  r7  r•   ©ÚimageÚpager&   rj   r  rk   rm   rn   rV   ©z-%(py2)s
{%(py2)s = %(py0)s.calls
} == %(py5)srB  ©r(   r)   rn   r  r+   )ÚfloatÚsetattrÚasyncior4  r  rF  r=  Úrun_locator_with_retryr8   r9   r:   r;   r<   r=   r>   r?   r9  )rP  rU  rB  rE  r  r`   r@   ro   rp   r�   rA   rD   s               r    Ú0test_run_locator_retries_transient_then_succeedsrc  $  s.  € ð¤%ð ¨Dô ð ×Ñœ ¨)Ô4Ü”| CÓ(°QÀÑK€EÜ
˜eÓ
$€Cä
�+Š+�c×0Ñ0°tÀ!Ð0ÐDÓ
E€CàÐ�)Ñ×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�)××××××ÑØ�;‰;Ð˜!Ð˜!Ñ×××Òˆ;×××××Õˆ5×××Ñˆ5××Õˆ;××Ó˜!××××××Ôr"   c                 ón  • S[         SS 4S jnU R                  [        SU5        [        [	        S5      SS9n[        U5      n[        R                  " [        5         [        R                  " UR                  S SS	95        S S S 5        UR                  oD[        :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 =pEg ! , (       d  f       GN*= f)NrR  r   c              “   ó   #   • g 7frÂ   r   rT  s    r    rU  ÚDtest_run_locator_raises_after_budget_never_silent.<locals>._no_sleep3  rW  rX  rY  rH  éc   ©r6  é   rZ  r&   )z-%(py2)s
{%(py2)s = %(py0)s.calls
} == %(py4)srB  r   rÉ   rR   r1   )r_  r`  ra  r4  r  rF  ÚpytestÚraisesr=  rb  r9  r   r8   r9   r:   r;   r<   r=   r>   r?   )rP  rU  rB  rE  r@   rA   ra   rb   s           r    Ú1test_run_locator_raises_after_budget_never_silentrl  2  s  € ð¤%ð ¨Dô ð ×Ñœ ¨)Ô4Ü”| CÓ(°RÑ8€EÜ
˜eÓ
$€Cô 
�Š”|Õ	$Ü�Š�C×.Ñ.°TÀÐ.ÐBÔC÷ 
%à�;‰;Ð2Ô2Ñ2×2×2×2Ò2ˆ;Ô2×2×2×2×2×2Õ2ˆ5×2×2×2Ñ2ˆ5×2×2Õ2ˆ;×2×2×2×2×2Ô2Ô2×2×2×2Ñ2Ô2×2×2×2×2×2×2Ô2÷ 
%Ö	$ús   Á%F%Æ%
F4c                  óž  • [        [        S5      SS9n [        U 5      n[        R                  " [        5         [
        R                  " UR                  S SS95        S S S 5        U R                  nSo2U:H  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      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                   " U5      5      eS =n=pCg ! , (       d  f       Næ= f)NrM  rg  rh  rU   rZ  r&   r]  rB  r^  r  r+   )r4  rN  rF  rj  rk  ra  r=  rb  r9  r8   r9   r:   r;   r<   r=   r>   r?   )rB  rE  r@   r�   rA   rp   rD   s          r    Ú1test_run_locator_non_transient_raises_immediatelyrn  A  sÃ   € Ü”zÐ"5Ó6À2ÑF€EÜ
˜eÓ
$€Cä	�Š”zÕ	"Ü�Š�C×.Ñ.°TÀÐ.ÐBÔC÷ 
#à�;‰;Ð˜!Ð˜!Ñ×××Òˆ;×××××Õˆ5×××Ñˆ5××Õˆ;××Ó˜!××××××Ô÷ 
#Õ	"ús   ¹%D>Ä>
Ec            	      ó
  • [        [        [        5      n U R                  S5      nU R                  S5      nX:  o0R                  nSoT" U5      obU:  os(       a  U(       Gdf  [        R
                  " SX74SXU4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[        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=pVSoªU ;   ow(       d¥  [        R
                  " SU4SX 45      [        R                  " U
5      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS =p§g )NzTwo tables stacked verticallyzprinted SIDE BY SIDEzWhen unsure, prefer ONE region©rY   rY   )z%(py0)s < %(py3)szL%(py3)s < %(py10)s
{%(py10)s = %(py6)s
{%(py6)s = %(py4)s.index
}(%(py8)s)
}ÚstackedÚsideÚprompt)r(   rl   r*   r1   r¥   r[   úassert %(py12)sr‰   zDone to the left of the other in the same
  rows, are separate tables)Úin)z%(py1)s in %(py3)s)rQ   rl   rm   rn   )r   r   r   Úindexr8   r9   r:   r;   r<   r=   r>   r?   )rs  rq  rr  r@   rC   rG   rc   r`   r  r‘   r_   ro   rp   s                r    Ú1test_prompt_counts_side_by_side_tables_separatelyrw  J  sg  € ô œ,¬Ó5€FØ�l‰lÐ:Ó;€GØ�<‰<Ð.Ó/€DØÑJÐJŸL™LÐJÐ)IÐJ˜LÐ)IÓJÐJÐJÑJ×J×J×J×JÒJˆ7ÐJ×J×J×J×J×JÕJˆ7×J×J×JÑJˆ7×J×J×J×J×JÖJ�T×J×J×JÑJ�T×J×J×J×J×JÖJ˜F×J×J×JÑJ˜F×J×JÕJ˜L×J×JÓJÐ)I×J×JÓJÐJ×J×J×J×J×J×J×JØRÐ\ÐV\Ñ\×\×\×\Ò\ÐR×\×\Ô\ÐR×\×\×\×\×\Ô\ÐV\×\×\×\Ñ\ÐV\×\×\×\×\×\×\Ô\r"   c                  ó@  • [        SSSSS5      [        SSSSS5      /n [        [        S	S
S5      5       He  u  pU [        SUSUS-   SU 35      [        SUSUS-   S5      [        SUSUS-   S5      [        SUSUS-   SU 35      [        SUSUS-   S5      /-  n Mg     U $ )Néæ   éN   r¹   éX   Ú
collaterali.  r¡   Úoutstandingr˜   éÝ   rs   é<   r–   é	   ÚLeftrz   rú   z1.0i  i'  z2.0i:  r{   ÚRightiÖ  r  z3.0)r!   Ú	enumerateÚrange)rŽ   ÚkÚys      r    Ú_side_by_side_wordsr‡  U  sÈ   € ô �#�r˜3  LÓ1´4¸¸RÀÀbÈ-Ó3XÐY€EÜœ%  S¨"Ó-Ö.‰ˆØÜ��Q˜˜Q ™U d¨1¨# JÓ/Ü��a˜˜a !™e UÓ+Ü��a˜˜a !™e UÓ+Ü��a˜˜a !™e u¨Q¨C [Ó1Ü��a˜˜a !™e UÓ+ð
ñ 	
Šñ /ð €Lr"   c                  óª	  • [        5       n [        U SSSS5      n[        U5      nSo2U:H  oD(       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=pCUS   S   nSo‡U-
  n[        U5      n	So©U
:  o»(       dì  [        R                  " SU4SXš4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º/ oqS   S   nSo8U-
  n[        U5      nSoûU:  nUnU(       a#  US   S   nSnUU-
  n[        U5      nSnUU:  nUnU(       Gd  [        R                  " SU4SX¿4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UR                  U5        U(       aß  [        R                  " SW4SWW45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " W5      [        R                  " W5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR                  U5        [        R                  " US5      0 -  nS S!U0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=n=n=n=n=n=n=nng )"Nç     Àl@g     €u@g     €Q@rS   r&   r½   r¾   ÚbandsrÀ   r¤   r¥   r   rU   ç     ðp@rT   rX   )z<%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} < %(py10)srZ   )r(   r)   r*   r+   r[   rt  r‰   ç     pr@ç      s@)z<%(py9)s
{%(py9)s = %(py2)s((%(py4)s - %(py6)s))
} < %(py12)s)r)   r*   r1   r-   r‰   z%(py14)sr‹   )zA%(py23)s
{%(py23)s = %(py16)s((%(py18)s - %(py20)s))
} < %(py26)s)rå   Úpy18Úpy20Úpy23Úpy26z%(py28)sÚpy28zassert %(py31)sÚpy31)r‡  r   r¾   r8   r9   r:   r;   r<   r=   r>   r?   rZ   rè   ré   )rŽ   rŠ  r`   rC   r�   rb   r§   r@   rA   rB   rc   rF   r  r‘   rG   re   r�   r_   Ú@py_assert17Ú@py_assert19Ú@py_assert21Ú@py_assert22Ú@py_assert25Ú@py_assert24r’   Ú@py_format27Ú@py_format29Ú@py_format30Ú@py_format32s                                r    Ú8test_blank_column_bands_ignore_a_prose_row_crossing_themrž  e  s¸  € ÜÓ!€Eô
 ˜u e¨U°D¸%Ó@€EÜˆu‹:Ð˜Ð˜‰?×××Óˆ:×××××ÕŒ3×××ÑŒ3×××××Öˆu×××Ñˆu××Õˆ:××Ó˜××××××ÓØ�Q‰x˜‰{Ð)˜UÐ)˜UÑ"Ð)Œ3Ð"Ó#Ð) cÐ) cÑ)×)×)×)Ò)Ð#×)×)×)×)×)Õ)Œ3×)×)×)Ñ)Œ3×)×)Õ)ˆ{×)×)Ó)˜U×)×)Ó)Ð#×)×)Ó) c×)×)×)×)×)×)×)Ñ)ÙL�Q‰x˜‰{ÐL˜UÐL˜UÑ"ÐLŒ3Ð"Ó#ÐL cÐL cÑ)×LÑL°%¸±(¸1±+ÐLÀÐL°+ÀÑ2EÐL¬cÐ2EÓ.FÐLÈÐLÐ.FÈÑ.L×L×L×LÖLÐ#×L×L×L×L×LÕLŒ3×L×L×LÑLŒ3×L×LÕLˆ{×L×LÓL˜U×L×LÓLÐ#×L×LÓL c×L×L×L×L×L×L×LÓLÐ.FÈ×L×L×L×L×LÕL¬c×L×L×LÑL¬c×L×LÕL°+×L×LÓLÀ×L×LÓLÐ.F×L×LÓLÈ×L×L×L×L×L×L×L×L×L×L×L×L×L×L×LÕLr"   c            	      ó  • [        5       n SnSnSn[        XX#5      oD(       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[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n=p4SnSnSn[        XX#5      oD(       + of(       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[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n=n=pFg )
Nr�  ç      ^@r‰  zGassert %(py9)s
{%(py9)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s, %(py7)s)
}r   rŽ   )r(   rQ   rl   rn   r+   r-   r‹  zKassert not %(py9)s
{%(py9)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s, %(py7)s)
})	r‡  r   r:   r;   r8   r<   r=   r>   r?   )rŽ   r`   r�   rB   rF   rE   r�   r  s           r    Ú1test_stub_column_follows_reads_labels_not_figuresr¡  q  s]  € ÜÓ!€EØ&+Ð:¨UÐ:°EÐ:Ô˜u¨UÓ:Ð:Ö:×:×:×:×:×:Ñ:Ô×:×:×:Ñ:Ô×:×:×:×:×:Ö:˜u×:×:×:Ñ:˜u×:×:Õ: e×:×:Ó:¨U×:×:Ó:°E×:×:Ó:Ð:×:×:×:×:×:Ö:Ø*/Ð>°Ð>¸Ð>Ô" 5°Ó>Ð>Ô>Ð>Ö>×>×>×>×>×>Ñ>Ô"×>×>×>Ñ>Ô"×>×>×>×>×>Ö> 5×>×>×>Ñ> 5×>×>Õ>¨%×>×>Ó>°×>×>Ó>¸×>×>Ó>Ð>×>×>×>×>×>×>Ñ>r"   c                  óˆ  • [        SSS5       V s/ s H  n [        SU SU S-   S5      PM     nn SnS	nS
nSn[        XX4U5      n/ ovU:H  oˆ(       Gda  [        R                  " SU4SXg45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        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=p‡g s  sn f )Nr˜   r~  rs   r¸   r¹   r€  Úwideg     Àb@g     @o@r   r‰  r&   )zW%(py11)s
{%(py11)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s, %(py7)s, %(py9)s)
} == %(py14)sr   rŽ   )r(   rQ   rl   rn   r+   r-   r3   r‹   rþ   rå   )r„  r!   r   r8   r9   r:   r;   r<   r=   r>   r?   )r†  rŽ   r`   r�   rB   rF   r�   rì   rd   r’   rï   s              r    Ú-test_blank_column_bands_none_inside_one_tabler¤  w  s  € ä7<¸SÀ#ÀrÔ7JÓKÒ7J°!ŒT�#�q˜#˜q 1™u fÖ-Ñ7J€EÐKØ%*ÐF¨EÐF°5ÐF¸%ÐFÔ˜e¨E¸%Ó@ÐFÀBÐFÀBÑF×F×F×FÓFÐ@×F×F×F×F×FÕFÔ×F×F×FÑFÔ×F×F×F×F×FÖF˜e×F×F×FÑF˜e×F×FÕF U×F×FÓF¨E×F×FÓF°5×F×FÓF¸%×F×FÓFÐ@×F×FÓFÀB×F×F×F×F×F×F×FÔFùò Ls   �F?c            	      óê  • [        5       n [        SSS[        -  S[        -  S[        -  S[        -  4SSS	S
9n[        SSS[        -  S[        -  S[        -  S[        -  4SSS	S
9n[	        X/U [        [        5      nUS   R
                  S   [        -  nUS   R
                  S   [        -  nXE-
  n[        U5      nSo‡U:  o™(       GdX  [        R                  " SU	4SXx45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=n=p˜SoÌU:  nSoäU:  om(       a  U(       d»  [        R                  " SXÖ4SXÄU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=n=pn/ nUS   R
                  S   oÑR
                  S   oíU:H  owoÇ(       a(  US   R
                  S   nUR
                  S   nUU:H  nUnU(       Gd
  [        R                  " S U4S!XÞ45      [        R                  " U5      [        R                  " U5      S".-  nS#SU0-  n
UR                  U
5        U(       ab  [        R                  " S W4S$WW45      [        R                  " U5      [        R                  " U5      S%.-  nS&S'U0-  nUR                  U5        [        R                   " US5      0 -  nS(S)U0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=nn/ nUS   R
                  S   oÑR
                  S   oíU:H  owoÇ(       a(  US   R
                  S*   nUR
                  S*   nUU:H  nUnU(       Gd
  [        R                  " S U4S!XÞ45      [        R                  " U5      [        R                  " U5      S".-  nS#SU0-  n
UR                  U
5        U(       ab  [        R                  " S U4S$UU45      [        R                  " U5      [        R                  " U5      S%.-  nS&S'U0-  nUR                  U5        [        R                   " US5      0 -  nS(S)U0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=nng )+NrU   r6   é,   r–   iU  ry  ©rL   r5   )r   rL   TrÖ   rS   r|   i8  )r•   r5   r   g�íµ ÷Æ°>rX   )z;%(py5)s
{%(py5)s = %(py0)s((%(py1)s - %(py2)s))
} < %(py8)srZ   Úl_x1Úr_x0)r(   rQ   r)   rn   r¥   r  r[   rŒ  r�  rp  )rË   z%(py4)s < %(py6)s)rQ   r*   r1   r¤   r¥   r&   rß   rà   rá   râ   rã   rä   rå   ræ   rç   rV   )r‡  r	   r‡   rŒ   r   r�   rZ   r8   r9   r:   r;   r<   r=   r>   r?   rè   ré   )rŽ   r™   r    r  r¨  r©  rA   r�   rG   rB   r§   r  r_   r`   rC   rb   r@   r�   rì   rd   r’   rï   rí   rð   s                           r    ÚJtest_declash_side_by_side_snaps_the_shared_edge_column_to_the_blank_columnrª  }  s�  € ÜÓ!€Eô ØØØ”V‘˜S¤6™\¨3´©<¸¼v¹ÐFØØØñ€Dô ØØØ”f‘˜c¤F™l¨C´&©L¸#Ä¹,ÐGØØØñ€Eô  ˜}¨e´V¼VÓ
D€CØˆq‰6�=‰=˜ÑœfÑ$€DØˆq‰6�=‰=˜ÑœfÑ$€DØ‰{Ð"Œ3ˆ{ÓÐ"˜dÐ"˜dÑ"×"×"×"Ó"Ð×"×"×"×"×"Õ"Œ3×"×"×"Ñ"Œ3×"×"×"×"×"Ö"ˆt×"×"×"Ñ"ˆt×"×"×"×"×"Ö"�d×"×"×"Ñ"�d×"×"Õ"Ð×"×"Ó"˜d×"×"×"×"×"×"Õ"ØÐ�4ÑÐ˜%Ð˜%Ñ××××Ñˆ5˜%××Ôˆ5×××××Ô�4×××Ñ�4××Õ˜%××××××ÕÙUˆ3ˆq‰6�=‰=˜ÑÐUŸ{™{¨1™~ÐU˜~Ñ-×U°#°a±&·-±-ÀÑ2BÐUÀeÇlÁlÐSTÁoÐUÐ2BÀoÑ2U×U×U×UÖUÐ×U×UÔUÐ×U×UÓU˜~×U×U×U×U×U×U×UÓUÐ2BÀo×U×UÔUÐ2B×U×UÓUÀo×U×U×U×U×U×U×U×U×U×U×U×U×U×UÐUÙTˆ3ˆq‰6�=‰=˜ÑÐTŸ{™{¨1™~ÐT˜~Ñ-×T°#°a±&·-±-ÀÑ2BÐTÀdÇkÁkÐRSÁnÐTÐ2BÀnÑ2T×T×T×TÖTÐ×T×TÔTÐ×T×TÓT˜~×T×T×T×T×T×T×TÓTÐ2BÀn×T×TÔTÐ2B×T×TÓTÀn×T×T×T×T×T×T×T×T×T×T×T×T×T×TÑTr"   c            	      ó´  • [        5       n [        SSSSSSS9n[        SSS	S
SSS9n[        X/U [        [        5       Vs/ s H  o3R
                  PM     nnUR
                  UR
                  /oTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pe[        SSSSSSS9n	[        SSSSSSS9n
[        Xš/U [        [        5       Vs/ s H  o3R
                  PM     nnU	R
                  U
R
                  /oTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peg s  snf s  snf )NrU   r6   )rÙ   rÙ   rÚ   rö   )rK   é   )rU   r  TrÖ   rS   )rÙ   gR¸…ëQØ?rÚ   r  )r¬  é   r&   rO   rP   rR   r1   )gìQ¸…ë±?ç333333Ã?g¸…ëQ¸Þ?r  r§  )r   r•   )g¤p=
×£à?r®  gÃõ(\�Âí?r  )r‡  r	   r   r‡   rŒ   r�   r8   r9   r=   r>   r?   )rŽ   rÿ   r   rÅ   r_   rA   r`   ra   rb   r™   r    s              r    ÚBtest_declash_side_by_side_leaves_stacked_and_separated_pairs_aloner¯  ›  sý  € ÜÓ!€EÜØØØ%ØØØñ€Eô ØØØ%ØØØñ€Eô 3°E°>À5Ì&ÔRXÔYÓZÒY˜�HŒHÑYð ÐZØ�‰Ø�‰ð_ð ð _ñ ÷ ó ïé ôÐZ÷ ñ ïé ðÐZ÷ ð ïé ðð _÷ ÷ ÷ ñ ïé ÷÷ ô ØØØ'ØØØñ€Dô ØØØ'ØØØñ€Eô 3°D°=À%ÌÔQWÔXÓYÒX˜�HŒHÑXð ÐYØ�‰Ø�‰ð^ð ð ^ñ ÷ ó ïé ôÐY÷ ñ ïé ðÐY÷ ð ïé ðð ^÷ ÷ ÷ ñ ïé ÷÷ ð ùò) [ùò( Zs   Á GÄ"G)r  )rU   )r   rU   )Ir,  Úbuiltinsr:   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter8   ra  Útypingr   rj  Úquber.agents.grid_locatorr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r‡   rŒ   r_  ÚstrÚtupler!   rI   rh   rq   r“   r¨   r«   rÍ   rÓ   r-  r¿   rñ   r  r
  r  r  r  r@  r  r1  r4  rF  rK  rO  ÚMonkeyPatchrc  rl  rn  rw  Úlistr‡  rž  r¡  r¤  rª  r¯  r   r"   r    Ú<module>rº     s³  ðñ÷ „ ƒÝ ã ÷÷ ÷ ÷ ÷ ó ð. 
€Ø	€ñ+ˆUð +˜ð + 5ð +¨eð +¸3ð +ÈÈsÐTWÈxÉõ +ò
&ò'ò'ò
.ò"#ò Tò7ò$7ð" Ø!'ñØ�%˜  uÐ,Ñ-ðàðð �S˜#�X‰ðð õ	ò-ò	^òòB)ò$Pò)ô'�9ô 'ôB�iô B÷ñ ð"˜zð Ð.Cô ò9òGð
À&×BTÑBTô ð3À6×CUÑCUô 3òò]ð˜T %¨¨S¨¡/Ñ2ô ò 	Mò?òGòUó<)r"   