ó
    tºDj£3  ã                  ó   • S r SSKJr  SSKrSSKJs  Jr  SSK	J
r
JrJrJrJr  SrSrS rS rS	 rS
 rS r/ SQr/ SQrSrSrS rS rS rS rSSK	JrJr  / SQ/ SQ/ SQ/r / SQr!Sr"S r#S r$S r%S r&S r'SSK	J(r(J)r)  / SQr*S  r+S! r,S" r-S# r.g)$aå  Unit tests for the deterministic text-layer completeness check (QUE-230).

The end-to-end pipeline runs an LLM detector whose table boxes vary run to
run, so an e2e assertion on a single document is not a stable regression
guard. These tests instead drive ``completeness_verdict`` directly with the
exact geometries captured from real documents (page 612x792 pt), so the
truncation logic is verified independently of the detector.

Geometries are taken from:
- Visa Q1FY25 p4 "Processed Transactions": the "12 Months Ended / 240,083"
  summary row dropped below the captured rows -> must flag bottom edge.
- TMUS Q2'25 p24 Non-GAAP reconciliation: the "Net income margin" row's
  eight quarterly percentages dropped at the bottom edge (~3.5 pt out) ->
  must flag bottom edge.
- Visa Q1FY25 p1: two near-identical vertically stacked quarter tables; the
  neighbor's values sit ~63 pt from this table's edge -> must NOT flag
  (the edge-band guard; this is the case that previously false-flagged).
é    )ÚannotationsN)ÚMissingFigureÚcompleteness_verdictÚinfer_columnsÚ	round_offÚvalue_tokensg      ƒ@g     Àˆ@c                 ó†  • [        S5      n / SQ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 )	NzIAsia 240,083 growth 12.3% in 2024 on day 31 ref (1) sub 1,234.50 share 5%)Ú240083z12.3%z1234.50z5%©ú==)z%(py0)s == %(py3)sÚtoks©Úpy0Úpy3úassert %(py5)sÚpy5)	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6s        Ú1/home/mande/repo/quber/tests/test_completeness.pyÚ<test_value_tokens_keeps_figures_and_drops_years_days_markersr    "   sl   € ÜÐcÓd€Dò 8Ð7Ð7Ñ7×7×7×7Ò7ˆ4×7×7×7×7×7Õ7ˆ4×7×7×7Ñ7ˆ4×7×7Õ7Ð7×7×7×7×7×7×7Ò7ó    c                 óŠ  • S/n S[         -  S[        -  S[         -  S[        -  4nSnSS/n[        [         [        X1X5      nUR                  nS	oeUL ow(       dº  [        R
                  " S
U4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=pvSo¤R                  ojU;   o»(       dº  [        R
                  " SU4SX¦45      [        R                  " U
5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n
=p¶So¤R                  ojU;   o»(       dº  [        R
                  " SU4SX¦45      [        R                  " U
5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n
=p¶g )N©gfffff&H@g33333³a@g     °q@gÍÌÌÌÌtp@ç      D@ç     €@ç      r@ç     �…@z`| Period | (millions) | Growth |
| Dec 31, 2024 | 63,797 | 11% |
| Dec 31, 2023 | 57,472 | 9% |
©ç      d@g     �€@ç     `h@g     à€@ú63,797)r)   g     …@ç      g@g     X…@ú240,083F©Úis©z0%(py2)s
{%(py2)s = %(py0)s.complete
} is %(py5)sÚv©r   Úpy2r   úassert %(py7)sÚpy7úbelow the last extracted row©Úin©z+%(py1)s in %(py5)s
{%(py5)s = %(py3)s.gap
}©Úpy1r   r   r
   ©ÚPAGE_WÚPAGE_Hr   Úcompleter   r   r   r   r   r   r   r   Úgap©Úextracted_bboxesÚregion_bboxÚmarkdownÚwordsr1   r   Ú@py_assert4Ú@py_assert3r   Ú@py_format8Ú@py_assert0r   s               r   Ú(test_bottom_edge_drop_visa_p4_is_flaggedrJ   )   sž  € à3Ð4ÐØœ&‘= %¬&¡.°%¼&±.À%Ì&Á.ÐQ€Kàmð ð 	/Ø/ð€Eô 	œV¤V¨UÐAQÓ\€AØ�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ1×××Ñˆ1××Õˆ:××Ó˜××××××ÓØ)Ð2¯U©UÐ2¨UÑ2×2×2×2Ò2Ð)×2×2Ô2Ð)×2×2×2×2×2Ô2¨Q×2×2×2Ñ2¨Q×2×2Õ2¨U×2×2×2×2×2×2Ó2ØÐ—u‘uÐ�uÑ×××Òˆ8××Ôˆ8×××××Ô�q×××Ñ�q××Õ�u××××××Ôr!   c                 óÞ  • S/n S[         -  S[        -  S[         -  S[        -  4nSnSS/n[        [         [        X1X5      nUR                  nS	oeUL ow(       dº  [        R
                  " S
U4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=pvSo¤R                  ojU;   o»(       dº  [        R
                  " SU4SX¦45      [        R                  " U
5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n
=p¶g )N)g…ëQ¸^8@g
×£p=*y@gR¸…ë%‚@gö(\�Âñ‚@g      4@ç     €f@g     H‚@g      y@z9| Net income | 2,374 | 2,925 |
| Net income margin | | |
)g     Àl@ç     @x@g      p@ç     àx@z14.7)g     0q@rM   g     ðr@rN   z17.8Fr.   r0   r1   r2   r4   r5   r6   r7   r9   r:   r<   rA   s               r   Ú)test_bottom_edge_drop_tmus_p24_is_flaggedrO   :   s.  € ð 8Ð8ÐØœ&‘= %¬&¡.°%¼&±.À%Ì&Á.ÐQ€KØL€Hà,Ø,ð€Eô 	œV¤V¨UÐAQÓ\€AØ�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ1×××Ñˆ1××Õˆ:××Ó˜××××××ÓØ)Ð2¯U©UÐ2¨UÑ2×2×2×2Ò2Ð)×2×2Ô2Ð)×2×2×2×2×2Ô2¨Q×2×2×2Ñ2¨Q×2×2Õ2¨U×2×2×2×2×2×2Ô2r!   c                 ó2  • S/n S[         -  S[        -  S[         -  S[        -  4nSnSS/n[        [         [        X1X5      nUR                  nS	oeUL ow(       dº  [        R
                  " S
U4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=pvg )N)g33333@@g33333“s@gÍÌÌÌÌD€@g     €€@g      >@g     @o@g     h€@g     `ƒ@zH| Asia Pacific | $603 | (0.5%) | 0.8% |
| Canada | 118 | 6.9% | 10.5% |
)ç      d@ç     È€@r,   ç     �@z0.4%)g     @u@rR   g     @w@rS   z11,935Tr.   r0   r1   r2   r4   r5   ©r=   r>   r   r?   r   r   r   r   r   r   r   r   ©
rB   rC   rD   rE   r1   r   rF   rG   r   rH   s
             r   Ú4test_stacked_neighbor_values_are_not_flagged_visa_p1rV   I   s¿   € ð 5Ð5ÐØœ&‘= %¬&¡.°%¼&±.À%Ì&Á.ÐQ€KØ[€Hà,Ø.ð€Eô 	œV¤V¨UÐAQÓ\€AØ�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ1×××Ñˆ1××Õˆ:××Ó˜××××××Ôr!   c                 ó0  • S/n S[         -  S[        -  S[         -  S[        -  4nSnS/n[        [         [        X1X5      nUR                  nSoeUL ow(       dº  [        R
                  " S	U4S
XV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=pvg )Nr#   r$   r%   r&   r'   z | Dec 31, 2024 | 63,797 | 11% |
r(   Tr.   r0   r1   r2   r4   r5   rT   rU   s
             r   Ú/test_present_values_within_span_are_not_flaggedrX   X   s¶   € Ø3Ð4ÐØœ&‘= %¬&¡.°%¼&±.À%Ì&Á.ÐQ€KØ2€HØ3Ð4€EÜœV¤V¨UÐAQÓ\€AØ�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ1×××Ñˆ1××Õˆ:××Ó˜××××××Ôr!   )©ç      N@ç     @Z@ç     ÀW@ç     À\@ÚAlpha©ç     €a@r[   rQ   r]   ú10.0©ç      n@r[   ç     �p@r]   ú20.0©rZ   ç     @_@g      W@ç     à`@ÚBeta©r`   rg   rQ   rh   z11.0©rc   rg   rd   rh   z21.0))ç      M@ç     `c@ç      Y@rQ   ÚGamma)r`   rm   rQ   rQ   ú12.0)rc   rm   rd   rQ   ú22.0©ç      I@rn   ç     Àr@ç     Àb@zB|  | Col1 | Col2 |
| Alpha | 10.0 | 20.0 |
| Beta | 11.0 | 21.0 |
c                 óV  • [        [        [        5      n [        U 5      nSo!U:H  o3(       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=p2/ o`S	   nS
o'U-
  n[        U5      n	So©U
:  o»oË(       a  U S   nSoí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é   r   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚcols©r   r;   r   Úpy6úassert %(py8)sÚpy8r   ç     c@é   é   ç     �o@©Ú<)z<%(py9)s
{%(py9)s = %(py2)s((%(py4)s - %(py6)s))
} < %(py12)sÚabs)r3   Úpy4r|   Úpy9Úpy12z%(py14)sÚpy14)zA%(py23)s
{%(py23)s = %(py16)s((%(py18)s - %(py20)s))
} < %(py26)s)Úpy16Úpy18Úpy20Úpy23Úpy26z%(py28)sÚpy28zassert %(py31)sÚpy31)r   ÚCAPTURED_WORDSÚCAPTURED_SPANry   r   r   r   r   r   r   r   r   r…   ÚappendÚ_format_boolop)rz   r   Ú@py_assert5rF   Ú@py_format7Ú@py_format9r   rG   Ú@py_assert7Ú@py_assert8Ú@py_assert11Ú@py_assert10rI   Ú@py_assert17Ú@py_assert19Ú@py_assert21Ú@py_assert22Ú@py_assert25Ú@py_assert24Ú@py_format13Ú@py_format15Ú@py_format27Ú@py_format29Ú@py_format30Ú@py_format32s                            r   Ú,test_infer_columns_finds_two_numeric_columnsr¨   v   sñ  € Üœ¬Ó7€DÜˆt‹9Ð˜Ð˜‰>×××Óˆ9×××××ÕŒ3×××ÑŒ3×××××Öˆt×××Ñˆt××Õˆ9××Ó˜××××××ÓÙ@�A‰wÐ@˜Ð@˜‰Ð@Œ3ˆÓÐ@ !Ð@ !Ñ#×@¨D°©GÐ@°eÐ@°e©OÐ@¬¨OÓ(<Ð@¸qÐ@Ð(<¸qÑ(@×@×@×@Ö@Ð×@×@×@×@×@Õ@Œ3×@×@×@Ñ@Œ3×@×@Õ@ˆw×@×@Ó@˜×@×@Ó@Ð×@×@Ó@ !×@×@×@×@×@×@×@Ó@Ð(<¸q×@×@×@×@×@Õ@¬×@×@×@Ñ@¬×@×@Õ@¨G×@×@Ó@°e×@×@Ó@Ð(<×@×@Ó@¸q×@×@×@×@×@×@×@×@×@×@×@×@×@×@×@Õ@r!   c                 óì  • [         [        -   n [        SSSSS9[        SSSSS9/n[        [        U [
        U5      u  p#SoDU;   oU(       d¥  [        R                  " S	U4S
XB4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 =pEU Vs1 s H  oˆR                  iM     nnSS1o”U	:H  oU(       do  [        R                  " SU4SXI45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=pYS 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 Vs1 s H  oˆR                   iM     nnSS1o”U	:H  oU(       do  [        R                  " SU4SXI45      [        R                  " U5      [        R                  " U	5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=pYg s  snf s  snf )Nrp   r   r)   Úbottom©ÚvalueÚxÚyÚedgerq   r‚   z| Gamma | 12.0 | 22.0 |r7   )z%(py1)s in %(py3)sÚnew_md)r;   r   r   r   r   ©z%(py1)s == %(py4)s©r;   r†   úassert %(py6)sr|   c              3  ó>   #   • U  H  oR                   S :H  v •  M     g7f)ro   N)Ú	row_label)Ú.0Úps     r   Ú	<genexpr>ÚKtest_round_off_appends_bottom_row_with_values_in_columns.<locals>.<genexpr>…   s   é € Ð6ªv¨!�{‰{˜gÖ%ªvùó   ‚ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall©r   r3   r†   r�   rw   )r‘   ÚDROPPED_BOTTOMr   r   ÚCAPTURED_MDr’   r   r   r   r   r   r   r   r   r¬   r¼   Úcolumn)rE   Úfigsr°   ÚplacedrI   r   r   r   r·   rG   Ú@py_format5r–   r   s                r   Ú8test_round_off_appends_bottom_row_with_values_in_columnsrÄ   |   sÐ  € Üœ^Ñ+€Eä˜F e¨u¸8ÑDÜ˜F e¨u¸8ÑDð€Dô œ{¨E´=À$ÓG�N€FØ$Ð.¨Ñ.×.×.×.Ò.Ð$×.×.Ô.Ð$×.×.×.×.×.Ô.¨×.×.×.Ñ.¨×.×.×.×.×.×.Ó.Ù#Ó$šV˜�GŒG™VÐ8Ð$¨°Ð(8Ð8Ð(8Ñ8×8×8×8Ò8Ð$×8×8Ô8Ð$×8×8Ó8Ð(8×8×8×8×8×8×8Ó8Ù6©vÓ6Ð6Œ3Ð6Ó6Ð6Õ6×6×6×6×6×6Ñ6Œ3×6×6×6Ñ6Œ3×6×6Õ6Ð6×6×6Ó6Ð6×6×6×6×6×6Ò6Ù$Ó%šf˜�HŒH™fÐ/Ð%¨!¨Q¨Ð/¨Ñ/×/×/×/Ò/Ð%×/×/Ô/Ð%×/×/Ó/¨×/×/×/×/×/×/Ô/ùò %ùâ%s   Ã6K,ÉK1c                 ó  • [         [        -   n S[        S-
  S[        S-
  4/nS[        -  S[        -  S[        -  S[        -  4n[	        [        [        XU[
        5      n/ oCR                  nS	oeUL owo‡(       a  UR                  o™nU(       Gdh  [        R                  " S
U4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  o´R                  U5        U(       av  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W	5      S.-  oÄR                  U5        [        R                  " US5      0 -  nSSU0-  n[!        [        R"                  " U5      5      eS =n=n=n=n=pi[%        [
        U [&        UR                  5      u  nnU(       dp  SSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS0-  n[!        [        R"                  " U5      5      e[	        [        [        XX5      nUR                  nSnUUL oU(       d»  [        R                  " S
U4SUU45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n
[!        [        R"                  " U
5      5      eS =n=nng )Nrs   ru   rt   rn   r$   g     €V@g     `s@ç     àe@Fr.   )z0%(py4)s
{%(py4)s = %(py2)s.complete
} is %(py7)sÚbefore)r3   r†   r5   z%(py9)sr‡   z/%(py13)s
{%(py13)s = %(py11)s.missing_figures
})Úpy11Úpy13r   zassert %(py16)srŠ   zassert %(py0)sr   rÂ   Tr0   Úafterr2   r4   r5   )r‘   r¾   r>   r=   r   r¿   r?   Úmissing_figuresr   r   r   r   r   r   r“   r”   r   r   r   r’   )rE   rB   ÚregionrÇ   r   rG   Ú@py_assert6r•   rI   Ú@py_assert12rH   Ú@py_format10Ú@py_format14r£   Ú@py_format17r°   rÂ   Ú@py_format1rÊ   rF   r   s                        r   Ú'test_round_off_then_reaudit_is_completerÓ   ‰   sæ  € äœ^Ñ+€EØœv¨™~¨u´f¸u±nÐEÐFÐØ”V‰m˜T¤F™]¨E´F©N¸EÄF¹NÐK€FÜ!¤&¬&°%ÐAQÔS^Ó_€FÙ>�?‰?Ð>˜eÐ>˜eÐ#×>¨×(>Ñ(>×>×>×>Õ>ˆ?×>×>×>×>×>Õ>ˆ6×>×>×>Ñ>ˆ6×>×>Õ>ˆ?×>×>Ó>˜e×>×>×>×>×>×>×>×>×>×>Ð>¨×>×>×>Ñ>¨×>×>Õ>Ð(>×>×>×>×>×>×>×>×>×>×>×>×>Ó>Üœ{¨E´=À&×BXÑBXÓY�N€FˆFÞ‡M‡M‡M‡M‡M‚Mˆ6‡M‡M‡M�Mˆ6‡M‡M‡M‡M‡M€MÜ ¤¬°Ð@PÓY€EØ�>‰>Ð!˜TÐ!ˆ>˜TÐ!×!×!×!Ò!ˆ>˜T×!×!×!×!×!Õ!ˆ5×!×!×!Ñ!ˆ5×!×!Õ!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Õ!r!   c                 óè  • / SQn / SQnSnSn[        SSSSS	9[        S
SSSS	9/n[        X0U-   X$5      u  pVUR                  5       S   nSo‡U:H  o™(       do  [        R                  " SU	4SXx45      [        R
                  " U5      [        R
                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p˜[        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Üg )N))rZ   ç      i@r\   ç     àj@r^   )r`   rÕ   rQ   rÖ   ra   )rc   rÕ   rd   rÖ   re   ))rl   r,   rn   r*   ÚHeader)r`   r,   rQ   r*   ú9.0)rc   r,   rd   r*   ú19.0)rs   g      i@rt   g     €k@z| Alpha | 10.0 | 20.0 |
rØ   r   g     Àg@Útopr«   rÙ   r‚   r   z| Header | 9.0 | 19.0 |r   r±   r²   r³   r|   rw   rx   ry   rÂ   r{   r}   r~   )r   r   Ú
splitlinesr   r   r   r   r   ry   r   r   r   )ÚcapturedÚdropped_topÚspanÚmdrÁ   r°   rÂ   rI   rG   r   rÃ   r–   r•   rF   r—   s                  r   Ú%test_round_off_inserts_top_row_at_toprà   –   sA  € ò€Hò
€Kð
 '€DØ	$€Bä˜E U¨e¸%Ñ@Ü˜F e¨u¸5ÑAð€Dô ˜r¨kÑ#9¸4ÓF�N€FØ×ÑÓ˜qÑ!Ð>Ð%>Ð>Ð%>Ñ>×>×>×>Ò>Ð!×>×>Ô>Ð!×>×>Ó>Ð%>×>×>×>×>×>×>Ó>Üˆv‹;Ð˜!Ð˜!Ñ×××Óˆ;×××××ÕŒ3×××ÑŒ3×××××Öˆv×××Ñˆv××Õˆ;××Ó˜!××××××Ôr!   )Únumeric_grid_columnsÚround_off_grid)Ú úDec 31, 2024zJune 30, 2025)zTotal current assetsú	1,504,229ú	1,396,990)úTotal assetsú	2,139,464rã   ))r`   r[   rQ   r]   rå   )rc   r[   rd   r]   ræ   )rs   ç     àa@g     ÀR@ç      c@ÚTotal)g     €S@ré   g     €[@rê   Úassets)r`   ré   rQ   rê   rè   )rc   ré   rd   rê   ú	2,030,845c                 ót  • [        [        5      n S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                  " [        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 =p!g )
Nr�   rw   r   rx   rá   ÚGRIDr{   r}   r~   )
rá   rï   r   r   r   r   r   r   r   r   )r   r•   rF   r–   r—   s        r   Ú2test_numeric_grid_columns_identifies_value_columnsrð   Å   sœ   € Ü¤Ó%Ð/¨!¨Q¨Ð/¨Ñ/×/×/×/Ó/Ð%×/×/×/×/×/Õ/Ô×/×/×/Ñ/Ô×/×/×/×/×/Ö/¤×/×/×/Ñ/¤×/×/Õ/Ð%×/×/Ó/¨×/×/×/×/×/×/Ô/r!   c            	     ó~
  • [        SSSSS9/n [        [        [        [        U 5      u  p[        U5      n[        [        5      oCU:H  oU(       Gd³  [        R                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OSS	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OSS
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pTUS   n/ SQ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=p9/ n[        U5      nSoEU:H  oÝo�(       a:  US   oîR                  nSnUU:H  nUnU(       a  US   nUR                  nSnUU:H  nUnU(       Gd:  [        R                  " SU4SXT4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-  o|R!                  U5        U(       aõ  [        R                  " SW4SWW45      [        R                  " W5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR!                  U5        U(       aw  [        R                  " SW4SWW4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g )%Nrí   ç     €o@ç     €b@rª   r«   r   )zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}ry   Ú	new_cellsrï   )r   r;   r   r   r|   r~   zassert %(py10)sÚpy10rw   )rç   rè   rí   r±   r²   r³   r|   r�   r   rç   )z0%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
} == %(py8)srÂ   )r3   r   r   r~   z%(py10)s)z2%(py15)s
{%(py15)s = %(py13)s.column
} == %(py18)s)rÉ   Úpy15r‹   z%(py20)srŒ   )z5%(py25)s
{%(py25)s = %(py23)s.row_label
} == %(py28)s)r�   Úpy25r�   z%(py30)sÚpy30zassert %(py33)sÚpy33)r   râ   rï   Ú
GRID_WORDSÚ	GRID_SPANry   r   r   r   r   r   r   r   r   rÀ   rµ   r“   r”   )rÁ   rô   rÂ   r   r˜   rF   r—   Ú@py_format11rI   rG   rÃ   r–   r   rÍ   rÎ   Ú@py_assert14rœ   Ú@py_assert16rŸ   r¡   Ú@py_assert27Ú@py_assert26Ú@py_format19Ú@py_format21r¥   Ú@py_format31r§   Ú@py_format34s                               r   Ú<test_round_off_grid_fills_existing_row_in_place_no_duplicater  É   sÊ  € Ü ¨u¸ÀHÑMÐN€DÜ&¤t¬Z¼ÀDÓIÑ€Iäˆy‹>Ð&œS¤›YÐ&˜YÑ&×&×&×&Ó&ˆ>×&×&×&×&×&Õ&Œ3×&×&×&Ñ&Œ3×&×&×&×&×&Ö&ˆy×&×&×&Ñ&ˆy×&×&Õ&ˆ>×&×&×&×&×&Ô&œS×&×&×&Ñ&œS×&×&×&×&×&Ö&¤×&×&×&Ñ&¤×&×&Õ&˜Y×&×&×&×&×&×&Ó&Ø�Q‰<ÐEÒEÐEÐEÑE×E×E×EÒEˆ<×E×EÔEˆ<×E×EÓEÐE×E×E×E×E×E×EÓEÙ_Œ3ˆv‹;Ð_˜!Ð_˜!Ñ×_  q¡	Ð_× 0Ñ 0Ð_°AÐ_Ð 0°AÑ 5×_Ñ_¸&À¹)Ð_¸)×:MÑ:MÐ_ÐQ_Ð_Ð:MÐQ_Ñ:_×_×_×_Ö_ˆ;×_×_×_×_×_Õ_Œ3×_×_×_Ñ_Œ3×_×_×_×_×_Ö_ˆv×_×_×_Ñ_ˆv×_×_Õ_ˆ;×_×_Ó_˜!×_×_×_×_×_×_×_Ò_Ð 0°A×_×_Ô_ 	×_×_Ó_Ð 0×_×_Ó_°A×_×_×_×_×_×_×_Ó_Ð:MÐQ_×_×_Ô_¸)×_×_Ó_Ð:M×_×_Ó_ÐQ_×_×_×_×_×_×_×_×_×_×_×_×_×_×_×_Ó_r!   c                 óv  • [        SSSSS9/n [        [        [        [        U 5      u  pUS   S   nSoCU:H  oU(       do  [
        R                  " S	U4S
X445      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=pTUS   S   nSoCU:H  oU(       do  [
        R                  " S	U4S
X445      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=pTg )Nz	9,999,999ç      c@ró   rª   r«   rw   r�   rè   r   r±   r²   r³   r|   )
r   râ   rï   rú   rû   r   r   r   r   r   )rÁ   rô   Ú_rI   rG   r   rÃ   r–   s           r   Ú=test_round_off_grid_does_not_overwrite_existing_camelot_valuer	  Ò   sÉ   € ä ¨u¸ÀHÑMÐN€DÜ!¤$¬
´I¸tÓD�L€IØ�Q‰<˜‰?Ð)˜kÐ)˜kÑ)×)×)×)Ò)ˆ?×)×)Ô)ˆ?×)×)Ó)˜k×)×)×)×)×)×)Ó)à�Q‰<˜‰?Ð)˜kÐ)˜kÑ)×)×)×)Ò)ˆ?×)×)Ô)ˆ?×)×)Ó)˜k×)×)×)×)×)×)Ô)r!   c            
     óü  • [        SSSSS9[        SSSSS9/n [        S/-   n[        [        U[        U 5      u  p#[        U5      n[        [        5      nS	oeU-   otU:H  oˆ(       GdÈ  [        R                  " S
U4SXG45      S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      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	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=n=pgUS   n/ SQoËU:H  oD(       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=pLS U 5       n[        U5      oÌ(       d¢  SS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =püg )NÚ100r  g     @e@rª   r«   Ú200rò   )rs   g     àd@g      T@g      f@ÚGoodwillr�   r   ©z[%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == (%(py8)s
{%(py8)s = %(py5)s(%(py6)s)
} + %(py10)s)ry   rô   rï   ©r   r;   r   r   r|   r~   rõ   úassert %(py13)srÉ   éÿÿÿÿ)r  r  r  r±   r²   r³   r|   c              3  ó>   #   • U  H  n[        U5      S :H  v •  M     g7f)é   N)ry   )r¶   Úrs     r   r¸   ÚJtest_round_off_grid_appends_new_row_when_no_label_match.<locals>.<genexpr>ä   s   é € Ð.¢I˜qŒs�1‹v˜Ž{¢Iùrº   r»   r¼   r½   )r   rú   râ   rï   rû   ry   r   r   r   r   r   r   r   r   r¼   )rÁ   rE   rô   r  r   r˜   Ú@py_assert9rš   rF   Ú@py_format12rÐ   rI   rG   rÃ   r–   r   s                   r   Ú7test_round_off_grid_appends_new_row_when_no_label_matchr  Û   sì  € ä˜E U¨e¸(ÑCÜ˜E U¨e¸(ÑCð€Dô Ð@ÐAÑA€EÜ!¤$¨¬y¸$Ó?�L€IÜˆy‹>Ð*œS¤›YÐ*¨Ð*¨™]Ð*˜]Ñ*×*×*×*Ó*ˆ>×*×*×*×*×*Õ*Œ3×*×*×*Ñ*Œ3×*×*×*×*×*Ö*ˆy×*×*×*Ñ*ˆy×*×*Õ*ˆ>×*×*×*×*×*Ô*œS×*×*×*Ñ*œS×*×*×*×*×*Ö*¤×*×*×*Ñ*¤×*×*Õ*˜Y×*×*Ó*¨×*×*×*×*×*×*×*Ø�R‰=Ð6Ò6Ð6Ð6Ñ6×6×6×6Ò6ˆ=×6×6Ô6ˆ=×6×6Ó6Ð6×6×6×6×6×6×6Ó6Ù.¡IÓ.Ð.Œ3Ð.Ó.Ð.Õ.×.×.×.×.×.Ñ.Œ3×.×.×.Ñ.Œ3×.×.Õ.Ð.×.×.Ó.Ð.×.×.×.×.×.Ó.r!   c            
     ó<
  • / SQ/ SQ/ SQ/n / SQnSn[        SSSS	S
9/n[        XX#5      u  pE[        U5      n[        U 5      nSo‡U-   o–U	:H  oª(       GdÀ  [        R                  " SU
4SXi45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n
=n=p‰U S   n/ SQoíU:H  of(       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=pn/ nUS   S   nSnUU:H  oªoÚ(       a  US   S   nSnUU:H  nUnU(       Gd  [        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        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[        U5      nSnUU:H  oª(       Gd  [        R                  " SU
4S&UU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=n
ng )*N)ÚPeriodz
(millions)ÚGrowth)z3 Months Endedrã   rã   )rä   r+   ú11%))r`   r`   rQ   ru   r+   )rc   r`   rd   ru   r  )rs   rÆ   g     €Q@r,   ÚDec)g     @R@rÆ   r\   r,   z31,)g     €X@rÆ   g     €^@r,   Ú2024)r`   rÆ   rQ   r,   r-   rr   r-   r  rL   rª   r«   r�   r   r  ry   rô   Úgridr  r  rÉ   rw   r±   r²   r³   r|   r  r   rä   )z%(py3)s == %(py6)s)r   r|   z%(py8)sr~   )z%(py11)s == %(py14)s)rÈ   r‰   ú%(py16)srŠ   zassert %(py19)sÚpy19rx   rÂ   r{   r}   )r   râ   ry   r   r   r   r   r   r   r   r   r“   r”   )r  rE   rÞ   rÁ   rô   rÂ   r   r˜   r  rš   rF   r  rÐ   rI   rG   rÃ   r–   r   r•   r›   Ú@py_assert13rÎ   r—   r£   rÑ   Ú@py_format18Ú@py_format20s                              r   Ú>test_round_off_grid_duplicate_label_appends_not_fills_full_rowr%  ç   sÞ  € ò 	+Ú"Ú)ð€Dò
€Eð '€DÜ 	¨U°eÀ(ÑKÐL€DÜ& t°DÓ?Ñ€IÜˆy‹>Ð*œS ›YÐ*¨Ð*¨™]Ð*˜]Ñ*×*×*×*Ó*ˆ>×*×*×*×*×*Õ*Œ3×*×*×*Ñ*Œ3×*×*×*×*×*Ö*ˆy×*×*×*Ñ*ˆy×*×*Õ*ˆ>×*×*×*×*×*Ô*œS×*×*×*Ñ*œS×*×*×*×*×*Ö* ×*×*×*Ñ* ×*×*Õ*˜Y×*×*Ó*¨×*×*×*×*×*×*×*Ø�‰7Ð7Ò7Ð7Ð7Ñ7×7×7×7Ò7ˆ7×7×7Ô7ˆ7×7×7Ó7Ð7×7×7×7×7×7×7Ó7ÙOˆ9�R‰=˜ÑÐO˜~ÐOÐ˜~Ñ-×O°)¸B±-ÀÑ2BÐOÀiÐOÐ2BÀiÑ2O×O×O×OÖOÐ˜~×O×OÔOÐ×O×OÓO˜~×O×O×O×O×O×O×OÓOÐ2BÀi×O×OÔOÐ2B×O×OÓOÀi×O×O×O×O×O×O×O×O×O×O×O×O×O×OÐOÜˆv‹;Ð˜!Ðˆ;˜!Ñ×××Óˆ;˜!×××××ÕŒ3×××ÑŒ3×××××Öˆv×××Ñˆv××Õˆ;××Ó˜!××××××Õr!   )Ú
repair_boxÚtabular_bands)rY   r_   rb   rf   rj   rk   )rZ   rm   rt   rQ   zdue to higher gross additionsc                 óŽ  • [        [        5      n [        U 5      nSo!U:H  o3(       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=p2U S	   u  pgp‰XgX‰4n
S
oºU:H  o(       do  [        R                  " SU4SX«45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=pg )Nr�   r   rx   ry   Úbandsr{   r}   r~   r   )r[   rh   rZ   rd   r±   r²   r³   r|   )r'  Ú
BAND_WORDSry   r   r   r   r   r   r   r   r   )r)  r   r•   rF   r–   r—   rÚ   ÚbotÚxlÚxrrI   rG   rÃ   s                r   Ú1test_tabular_bands_finds_data_band_excludes_proser.    sý   € Üœ*Ó%€EÜˆu‹:Ð˜Ð˜‰?×××Óˆ:×××××ÕŒ3×××ÑŒ3×××××Öˆu×××Ñˆu××Õˆ:××Ó˜××××××ÓØ˜Q‘xÑ€CˆbØ�bÐÐ<Ð!<Ð<Ð!<Ñ<×<×<×<Ò<Ð×<×<Ô<Ð×<×<Ó<Ð!<×<×<×<×<×<×<Ô<r!   c            	     ó*  • [        [        5      n SS[        -  SS[        -  4n[        X[        [        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/ oBS   nSoˆ[        -  o—U	-
  n
[        U
5      nSoËU:  oÝoí(       a)  US   nSnU[        -  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      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  nUR                  U5        U(       Ga2  [
        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      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        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=nng )Ngš™™™™™É?g     ÀY@g      à?ré   ©úis not©z%(py0)s is not %(py3)sÚrepr   r   r   r   rZ   ç�íµ ÷Æ°>rw   rd   rƒ   ©zJ%(py11)s
{%(py11)s = %(py2)s((%(py4)s - (%(py6)s / %(py7)s)))
} < %(py14)sr…   r=   ©r3   r†   r|   r5   rÈ   r‰   r   rŠ   ©zN%(py27)s
{%(py27)s = %(py18)s((%(py20)s - (%(py22)s / %(py23)s)))
} < %(py30)s©r‹   rŒ   Úpy22r�   Úpy27rø   ú%(py32)sÚpy32úassert %(py35)sÚpy35©r'  r*  r>   r&  r=   r   r   r   r   r   r   r   r   r…   r“   r”   ©r)  Úboxr3  r   r   r   r   rG   r•   r™   r  r›   r"  rÎ   rI   r�   rž   r¡   r    r   Ú@py_assert29Ú@py_assert28r£   rÑ   r  Ú@py_format33r  Ú@py_format36s                               r   Ú-test_repair_box_snaps_overlapping_box_to_bandrF    s>  € Üœ*Ó%€EØ�œ‘  u¬v¡~Ð
6€CÜ
�S¤¬Ó
0€CØÐ�dˆ?×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�d××××××ÑÙU�1‰vÐU˜ÐUœv™ÐU˜Ñ%ÐUŒ3Ð%Ó&ÐU¨ÐU¨Ñ-×U°c¸!±fÐU¸uÐU¸uÄv¹~ÐU°f¸~Ñ6MÐU´#Ð6MÓ2NÐUÐQUÐUÐ2NÐQUÑ2U×U×U×UÖUÐ&×U×U×U×U×UÕUŒ3×U×U×UÑUŒ3×U×UÕUˆv×U×UÓU˜×U×U×U×U×UÔUœv×U×U×UÑUœv×U×UÕUÐ&×U×UÓU¨×U×U×U×U×U×U×UÔUÐ2NÐQU×U×U×U×U×UÕU´#×U×U×UÑU´#×U×UÕU°f×U×UÓU¸u×U×U×U×U×UÔUÄv×U×U×UÑUÄv×U×UÕUÐ2N×U×UÓUÐQU×U×U×U×U×U×U×U×U×U×U×U×U×U×U×U×UÑUr!   c            	     ó*  • [        [        5      n SS[        -  SS[        -  4n[        X[        [        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/ oBS   nSoˆ[        -  o—U	-
  n
[        U
5      nSoËU:  oÝoí(       a)  US   nSnU[        -  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      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  nUR                  U5        U(       Ga2  [
        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      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        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=nng )Nçš™™™™™¹?r)   çÍÌÌÌÌÌì?rÆ   r0  r2  r3  r   r   r   r�   r[   r4  r  rh   rƒ   r5  r…   r>   r6  r   rŠ   r7  r8  r;  r<  r   r=  r>  r?  r@  s                               r   Ú2test_repair_box_pulls_offset_box_up_to_nearby_bandrJ     s>  € äœ*Ó%€EØ�œ‘  u¬v¡~Ð
6€CÜ
�S¤¬Ó
0€CØÐ�dˆ?×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�d××××××ÑÙV�1‰vÐV˜ÐV¤™ÐV˜Ñ&ÐVŒ3Ð&Ó'ÐV¨$ÐV¨$Ñ.×V°s¸1±vÐVÀÐVÀÌÁÐV°vÀÑ7NÐV´3Ð7NÓ3OÐVÐRVÐVÐ3OÐRVÑ3V×V×V×VÖVÐ'×V×V×V×V×VÕVŒ3×V×V×VÑVŒ3×V×VÕVˆv×V×VÓV˜×V×V×V×V×VÔV¤×V×V×VÑV¤×V×VÕVÐ'×V×VÓV¨$×V×V×V×V×V×V×VÔVÐ3OÐRV×V×V×V×V×VÕV´3×V×V×VÑV´3×V×VÕV°v×V×VÓVÀ×V×V×V×V×VÔVÌ×V×V×VÑVÌ×V×VÕVÐ3O×V×VÓVÐRV×V×V×V×V×V×V×V×V×V×V×V×V×V×V×V×VÑVr!   c            
     ó’  • [        [        5      n SS[        -  SS[        -  4n[        X[        [        5      nS o2UL 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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      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=pCg )NrH  g      y@rI  g      |@r.   )zK%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, %(py3)s, %(py4)s)
} is %(py9)sr&  rA  r)  r=   r>   )r   r;   r3   r   r†   r|   r‡   zassert %(py11)srÈ   )r'  r*  r>   r&  r=   r   r   r   r   r   r   r   r   )r)  rA  r•   r™   r˜   rÏ   r  s          r   Ú:test_repair_box_returns_none_for_phantom_far_from_any_bandrL  )  s   € äœ*Ó%€EØ�œ‘  u¬v¡~Ð
6€CÜ�c¤&¬&Ó1Ð9°TÐ9°TÐ9×9×9×9Ó9Ð1×9×9×9×9×9Õ9Œ:×9×9×9Ñ9Œ:×9×9×9×9×9Ö9�c×9×9×9Ñ9�c×9×9×9×9×9Ö9˜5×9×9×9Ñ9˜5×9×9×9×9×9Ö9¤&×9×9×9Ñ9¤&×9×9×9×9×9Ö9¬&×9×9×9Ñ9¬&×9×9Õ9Ð1×9×9Ó9°T×9×9×9×9×9×9Ô9r!   )/Ú__doc__Ú
__future__r   Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úquber.agents.completenessr   r   r   r   r   r=   r>   r    rJ   rO   rV   rX   r‘   r¾   r’   r¿   r¨   rÄ   rÓ   rà   rá   râ   rï   rú   rû   rð   r  r	  r  r%  r&  r'  r*  r.  rF  rJ  rL  © r!   r   Ú<module>rU     sÕ   ðñõ& #ç  „ ÷ õ ð 
€Ø	€ò8òò"3òòò€ò€ð
 ,€ØU€òAò
0ò
"ò÷: Kò *Ú6Ú%ð€ò
€
ð (€	ò0ò`ò*ò	/ò÷8 @ò€
ò=òVòWó:r!   