ó
    5ûojŸ  ã                  ó  • S r SSKJr  SSKrSSKJs  Jr  SSK	J
r
  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJr  SSS jjrSS	 jrSSS
 jjrSS jrSS jrSS jrSS jrSS jr SS jr!SS jr"SS jr#SS jr$SS jr%SS jr&SS jr'g)a  Deterministic logic of figure-value reconciliation.

The two readers are agents and are exercised by the measurement runs, not
here; these tests pin the pure logic between them: fragment normalization,
scoping by overlap, value normalization, and the tie that assigns statuses.
é    )ÚannotationsN)ÚOptional)ÚCELL_STATUS_REFERENCE)ÚBoxÚFigureRecord)ÚPageFragmentÚParsedValueÚ	ReadValueÚfragments_in_boxÚ
norm_valueÚpage_fragmentsÚpicture_for_valueÚtie_pagec                ó   • [        SX!U S9$ )Né   )ÚpageÚtextÚboxÚpicture_ref)r   )r   Úfig_boxr   s      Ú7/home/mande/repo/quber/tests/core/test_figure_values.pyÚfigurer      s   € Ü˜Q TÀKÑPÐPó    c                ó   • XX#S.$ )N©ÚleftÚtopÚrightÚbottom© r   s       r   r   r      s   € Ø¨uÑGÐGr   c           
     ó@   • [        XU=(       d    [        SSSS5      S9$ )Nçš™™™™™¹?çš™™™™™É?g¸…ëQ¸¾?)Úidr   r   )r   r   )Úfidr   Úfrag_boxs      r   Úfragmentr'   "   s   € Ü˜3¨x×/S¼3¸sÀCÈÈdÓ;SÑTÐTr   c            	     ó   • SSSS/ SQS.S/ SQS	S
S.S/ SQS./S.n [        U 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 Vs/ s H  owR                  PM     nnS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)US   nUR                  nSoLU: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      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”UR                  nS#S#S$S$S%.oLU: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      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”UR                  nS	oLUL o™(       dº  [        R                  " S'U	4S(XÄ45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”UR                  nS
oLU: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      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”US*   nUR                  nS+S+S,S,S%.oLU: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      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”UR                  nS.oLUL o™(       dº  [        R                  " S'U	4S(XÄ45      S-[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS-[        R                  " U5      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=p”g s  snf )/Né   g      ƒ@g     Àˆ@z  )r   r   é
   r*   )r   r   ú$1,108.1)gš™™™™™N@gÍÌÌÌÌÌS@gš™™™™™^@gÍÌÌÌÌÌc@Tçš™™™™™é?)r   r   Úfrom_ocrÚ
confidenceÚRevenue)r   r   i2  iŒ  )Úpage_noÚwidthÚheightÚcellsé   ©ú==©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚ	fragments©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8zp3.c1zp3.c2©z%(py1)s == %(py4)s©r<   Úpy4úassert %(py6)sr>   r   )z,%(py2)s
{%(py2)s = %(py0)s.text
} == %(py5)sÚfirst©r;   Úpy2Úpy5úassert %(py7)sÚpy7r"   r#   r   )z+%(py2)s
{%(py2)s = %(py0)s.box
} == %(py5)s©Úis)z0%(py2)s
{%(py2)s = %(py0)s.from_ocr
} is %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.confidence
} == %(py5)sr   ç        ç      à?ÚsecondF)r   r8   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr$   r   r   r-   r.   )Ú
cells_pager9   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9ÚfÚ@py_assert0Ú@py_assert3Ú@py_format5rE   Ú@py_assert1Ú@py_format6Ú@py_format8rO   s                   r   Ú/test_page_fragments_normalizes_and_skips_blanksre   &   s  € àØØà¢.Ñ1ØÒ(BÐPTÐdgÑhØÒ'7Ñ8ð
ñ		€Jô ˜zÓ*€IÜˆy‹>Ð˜QÐ˜QÑ×××Óˆ>×××××ÕŒ3×××ÑŒ3×××××Öˆy×××Ñˆy××Õˆ>××Ó˜Q××××××Óñ $Ó$š)�Q�DŒD™)Ð:Ð$¨°'Ð(:Ð:Ð(:Ñ:×:×:×:Ò:Ð$×:×:Ô:Ð$×:×:Ó:Ð(:×:×:×:×:×:×:Ó:Ø�a‰L€EØ�:‰:Ð#˜Ð#˜Ñ#×#×#×#Ò#ˆ:×#×#×#×#×#Õ#ˆ5×#×#×#Ñ#ˆ5×#×#Õ#ˆ:×#×#Ó#˜×#×#×#×#×#×#Ó#Ø�9‰9ÐN ¨S¸3È#ÑNÐNÐNÑN×N×N×NÒNˆ9×N×N×N×N×NÕNˆ5×N×N×NÑNˆ5×N×NÕNˆ9×N×NÓNÐN×N×N×N×N×N×NÓNØ�>‰>Ð!˜TÐ!˜TÐ!×!×!×!Ò!ˆ>×!×!×!×!×!Õ!ˆ5×!×!×!Ñ!ˆ5×!×!Õ!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Ó!Ø×ÑÐ"˜sÐ"˜sÑ"×"×"×"Ò"Ð×"×"×"×"×"Õ"ˆ5×"×"×"Ñ"ˆ5×"×"Õ"Ð×"×"Ó"˜s×"×"×"×"×"×"Ó"Ø�q‰\€FØ�:‰:ÐO #¨c¸CÈ3ÑOÐOÐOÑO×O×O×OÒOˆ:×O×O×O×O×OÕOˆ6×O×O×OÑOˆ6×O×OÕOˆ:×O×OÓOÐO×O×O×O×O×O×OÓOØ�?‰?Ð#˜eÐ#˜eÐ#×#×#×#Ò#ˆ?×#×#×#×#×#Õ#ˆ6×#×#×#Ñ#ˆ6×#×#Õ#ˆ?×#×#Ó#˜e×#×#×#×#×#×#Ô#ùò %s   Å\c                 ó:  • [        SS[        SSSS5      5      [        SS[        SSS	S
5      5      [        SS[        SSSS5      5      [        SS[        SSS	S5      5      /n [        SSSS5      n[        X5       Vs/ s H  o"R                  PM     nnS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 s  snf )NÚinsideÚar#   ç333333Ó?g      Ð?ÚoutsideÚbr,   çÍÌÌÌÌÌì?ç333333ë?zstraddling-mostly-inÚcçÍÌÌÌÌÌÜ?gš™™™™™á?zstraddling-mostly-outÚdç¸…ëQ¸Þ?r"   ç¤p=
×£à?ç333333ã?r5   rA   rB   rD   r>   )	r'   r   r   r$   rP   rQ   rU   rV   rW   )r9   Úscoper^   r_   r`   rY   ra   r\   s           r   Ú(test_fragments_in_box_selects_by_overlapru   @   sç   € ä�˜3¤ C¨¨c°4Ó 8Ó9Ü�˜C¤ S¨#¨s°DÓ!9Ó:ÜÐ'¨¬c°$¸¸TÀ4Ó.HÓIÜÐ(¨#¬s°4¸¸cÀ4Ó/HÓIð	€Iô ��S˜$ Ó$€EÜ*¨9Ô<Ó=Ò<�Q�DŒDÑ<ÐcÐ=À(ÐLbÐAcÐcÐAcÑc×c×c×cÒcÐ=×c×cÔcÐ=×c×cÓcÐAc×c×c×c×c×c×cÔcùÒ=s   Á>Dc                 ó†  • 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 [        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 [        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 [        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 [        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 [        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 [        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=p2g )Nr+   ú1108.1r5   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   )r;   rG   rC   rJ   úassert %(py9)sÚpy9z($46.8)z-46.8u   $â€“ÚDASHÚ-z21.8%z21.8zN/Azn/a)	r   rP   rQ   rR   rS   rT   rU   rV   rW   )rb   r`   Ú@py_assert6rZ   rd   Ú@py_format10s         r   Útest_norm_value_formsr~   K   s�  € Ø Ð-Œ:�jÓ!Ð- XÐ- XÑ-×-×-×-Ò-Ð!×-×-×-×-×-Õ-Œ:×-×-×-Ñ-Œ:×-×-Õ-�j×-×-Ó-Ð!×-×-Ó- X×-×-×-×-×-×-Õ-ØÐ+Œ:�hÓÐ+ 8Ð+ 8Ñ+×+×+×+Ò+Ð×+×+×+×+×+Õ+Œ:×+×+×+Ñ+Œ:×+×+Õ+�h×+×+Ó+Ð×+×+Ó+ 8×+×+×+×+×+×+Õ+ØÐ+Œ:�iÓ Ð+ GÐ+ GÑ+×+×+×+Ò+Ð ×+×+×+×+×+Õ+Œ:×+×+×+Ñ+Œ:×+×+Õ+�i×+×+Ó+Ð ×+×+Ó+ G×+×+×+×+×+×+Õ+ØÐ'Œ:�fÓÐ' Ð' Ñ'×'×'×'Ò'Ð×'×'×'×'×'Õ'Œ:×'×'×'Ñ'Œ:×'×'Õ'�f×'×'Ó'Ð×'×'Ó' ×'×'×'×'×'×'Õ'ØÐ$Œ:�c‹?Ð$˜fÐ$˜fÑ$×$×$×$Ò$ˆ?×$×$×$×$×$Õ$Œ:×$×$×$Ñ$Œ:×$×$Õ$�c×$×$Ó$ˆ?×$×$Ó$˜f×$×$×$×$×$×$Õ$ØÐ(Œ:�gÓÐ( &Ð( &Ñ(×(×(×(Ò(Ð×(×(×(×(×(Õ(Œ:×(×(×(Ñ(Œ:×(×(Õ(�g×(×(Ó(Ð×(×(Ó( &×(×(×(×(×(×(Õ(ØÐ%Œ:�eÓÐ% Ð% Ñ%×%×%×%Ò%Ð×%×%×%×%×%Õ%Œ:×%×%×%Ñ%Œ:×%×%Õ%�e×%×%Ó%Ð×%×%Ó% ×%×%×%×%×%×%Ö%r   c                 ó  • [        SS[        SSSS5      5      n [        S[        S[        SSS	S	5      5      /[	        S
SS9/[        S
SS/S9/U /S9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   nUR                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”UR                   nS oHUL o™(       dº  [        R                  " SU	4SX„45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”UR                  o€R                  o8U:H  o™(       Gd  [        R                  " SU	4SXƒ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S [        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS [        R                  " U5      S!.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p“UR"                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”UR$                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”g )$Núp1.c0r+   ri   çš™™™™™Ù?çáz®GáÚ?r   z#/pictures/0rM   rN   r/   rw   ©ÚlabelÚvalue©r„   r…   Úfragment_ids©r   ÚfiguresÚscan_valuesÚlocal_valuesr9   r5   r7   r8   Úoutr:   r?   r@   r   Ú
reconciled©z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sr…   rF   rI   rJ   rK   )z,%(py2)s
{%(py2)s = %(py0)s.note
} is %(py5)s©zD%(py2)s
{%(py2)s = %(py0)s.box
} == %(py6)s
{%(py6)s = %(py4)s.box
}Úfrag©r;   rG   rC   r>   ©z-%(py2)s
{%(py2)s = %(py0)s.value
} == %(py5)s)z3%(py2)s
{%(py2)s = %(py0)s.picture_ref
} == %(py5)s)r'   r   r   r   r	   r
   r8   rP   rQ   rR   rS   rT   rU   rV   rW   ÚstatusÚnoter…   r   ©r�   rŒ   rY   rZ   r[   r\   r]   r…   rb   r`   rc   rd   s               r   Ú6test_tie_agreement_with_containing_fragment_reconcilesr–   U   sS  € Ü�G˜Z¬¨S°#°s¸DÓ)AÓB€DÜ
ØÜ˜¬¨C°°c¸3Ó(?Ó@ÐAÜ  y¸ÑAÐBÜ i°zÐQXÐPYÑZÐ[Ø�&ñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓØ�‰F€EØ�<‰<Ð'˜<Ð'˜<Ñ'×'×'×'Ò'ˆ<×'×'×'×'×'Õ'ˆ5×'×'×'Ñ'ˆ5×'×'Õ'ˆ<×'×'Ó'˜<×'×'×'×'×'×'Ó'Ø�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ5×××Ñˆ5××Õˆ:××Ó˜××××××ÓØ�9‰9Ð Ÿ™Ð ˜Ñ × × × Ó ˆ9× × × × × Õ ˆ5× × × Ñ ˆ5× × Õ ˆ9× × × × × Ô ˜× × × Ñ ˜× × Õ ˜× × × × × × Ó Ø�;‰;Ð$˜*Ð$˜*Ñ$×$×$×$Ò$ˆ;×$×$×$×$×$Õ$ˆ5×$×$×$Ñ$ˆ5×$×$Õ$ˆ;×$×$Ó$˜*×$×$×$×$×$×$Ó$Ø×ÑÐ. Ð. Ñ.×.×.×.Ò.Ð×.×.×.×.×.Õ.ˆ5×.×.×.Ñ.ˆ5×.×.Õ.Ð×.×.Ó. ×.×.×.×.×.×.Ô.r   c                 ó¦
  • [        SS[        SSSS5      5      n [        S/ [        SSS	9/[	        SS
S/S9/U /S9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   nUR                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”UR                  o€R                  o8U:H  o™(       Gd  [        R                  " SU	4SXƒ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p“/ o‡R                  n	S oÉULo3oÓ(       a  SoçR                  oþU;   nUnU(       Gd   [        R                  " SU4S Xœ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U	5      [        R                  " U5      S!.-  nS"S#U0-  nUR!                  U5        U(       a­  [        R                  " S$W4S%WW45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S&.-  nS'S(U0-  nUR!                  U5        [        R"                  " US5      0 -  nS)S*U0-  n[        [        R                  " U5      5      eS =n=n=n	=n=n=n=nng )+Nr€   z$46.8ri   r�   r‚   r   ÚFFOú47.9rƒ   ú$47.9r†   rˆ   r5   r7   r8   rŒ   r:   r?   r@   r   Úvalue_misreadrŽ   r…   rF   rI   rJ   r�   r�   r‘   z'$46.8')úis not)z0%(py4)s
{%(py4)s = %(py2)s.note
} is not %(py7)s)rG   rC   rJ   z%(py9)sry   ©Úin)z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.note
})Úpy12Úpy14Úpy16z%(py18)sÚpy18úassert %(py21)sÚpy21)r'   r   r   r	   r
   r8   rP   rQ   rR   rS   rT   rU   rV   rW   r“   r”   ÚappendÚ_format_boolop)r�   rŒ   rY   rZ   r[   r\   r]   r…   rb   r`   rc   rd   r|   r_   Ú@py_assert11Ú@py_assert15Ú@py_assert13r}   Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22s                         r   Ú4test_tie_agreed_value_over_wrong_fragment_is_misreadr®   g   sÚ  € Ü�G˜W¤c¨#¨s°C¸Ó&>Ó?€DÜ
ØØÜ  u°FÑ;Ð<Ü e°7È'ÈÑSÐTØ�&ñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓØ�‰F€EØ�<‰<Ð*˜?Ð*˜?Ñ*×*×*×*Ò*ˆ<×*×*×*×*×*Õ*ˆ5×*×*×*Ñ*ˆ5×*×*Õ*ˆ<×*×*Ó*˜?×*×*×*×*×*×*Ó*Ø�9‰9Ð Ÿ™Ð ˜Ñ × × × Ó ˆ9× × × × × Õ ˆ5× × × Ñ ˆ5× × Õ ˆ9× × × × × Ô ˜× × × Ñ ˜× × Õ ˜× × × × × × Ó Ù=�:‰:Ð=˜TÐ=˜TÐ!×= iÐ=·:±:Ð=°:Ñ&=×=×=×=Ö=ˆ:×=×=×=×=×=Õ=ˆ5×=×=×=Ñ=ˆ5×=×=Õ=ˆ:×=×=Ó=˜T×=×=×=×=×=×=×=Ó= i°:×=×=Ô= i×=×=×=×=×=Ô=°5×=×=×=Ñ=°5×=×=Õ=°:×=×=×=×=×=×=×=×=×=×=×=×=×=×=Ñ=r   c            	     óœ  • [        S/ [        SSS9// / S9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   nUR                  nSo7U:H  oˆ(       dº  [        R                  " SU4SXs45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pƒUR                  nSnUU:H  oˆ(       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=pƒUR                  nSo7U:H  oˆ(       dº  [        R                  " SU4SXs45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pƒg )Nr   ÚNOIz12.3rƒ   rˆ   r5   r7   r8   rŒ   r:   r?   r@   r   Úvalue_unreconciledrŽ   r…   rF   rI   rJ   zbone measurement, from the figure description; uncontradicted, not corroborated on the printed page©z,%(py2)s
{%(py2)s = %(py0)s.note
} == %(py5)sr’   )r   r	   r8   rP   rQ   rR   rS   rT   rU   rV   rW   r“   r”   r…   ©rŒ   rY   rZ   r[   r\   r]   r…   rb   r`   rc   rd   s              r   Ú(test_tie_scan_only_value_is_unreconciledr´   w   sd  € Ü
ØØÜ  u°FÑ;Ð<ØØñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓØ�‰F€EØ�<‰<Ð/Ð/Ð/Ð/Ñ/×/×/×/Ò/ˆ<×/×/×/×/×/Õ/ˆ5×/×/×/Ñ/ˆ5×/×/Õ/ˆ<×/×/Ó/Ð/×/×/×/×/×/×/Ó/à�
‰
ðàoðØØoñ	p÷ó ïé ôØØo÷ò ïé ÷õ ïé ðØ÷ö ïé ðØ÷ò ïé ðØ÷ð ïé ðào÷÷ ÷ ñ ïé ÷÷ ð �;‰;Ð ˜&Ð ˜&Ñ × × × Ò ˆ;× × × × × Õ ˆ5× × × Ñ ˆ5× × Õ ˆ;× × Ó ˜&× × × × × × Ô r   c                 ó  • [        SS5      n [        S/ / [        SSS/S9/U /S9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   nUR                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”UR                  nSoHU: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      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p”g )Nr€   z$12.3r   r°   r†   rˆ   r5   r7   r8   rŒ   r:   r?   r@   r   r±   rŽ   r…   rF   rI   rJ   zSone measurement, read from the page; uncontradicted, not independently corroboratedr²   )r'   r   r
   r8   rP   rQ   rR   rS   rT   rU   rV   rW   r“   r”   r•   s               r   Ú)test_tie_local_only_value_is_unreconciledr¶   ‰   s¶  € Ü�G˜WÓ%€DÜ
ØØØÜ e°7È'ÈÑSÐTØ�&ñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓØ�‰F€EØ�<‰<Ð/Ð/Ð/Ð/Ñ/×/×/×/Ò/ˆ<×/×/×/×/×/Õ/ˆ5×/×/×/Ñ/ˆ5×/×/Õ/ˆ<×/×/Ó/Ð/×/×/×/×/×/×/Ó/Ø�:‰:ÐnÐnÐnÐnÑn×n×n×nÒnˆ:×n×n×n×n×nÕnˆ5×n×n×nÑnˆ5×n×nÕnˆ:×n×nÓnÐn×n×n×n×n×n×nÔnr   c                 óX  • [        SS[        SSSS5      5      n [        SS[        SSSS5      5      n[        S	/ [        S
SS9[        SSS9/[	        S
SS/S9[	        SSS/S9/X/S9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 Vs/ s H  oˆR                  PM     n	nS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	=p:US   o™R                  o0R                  oÃU:H  oU(       dÏ  [        R                  " SU4SX<4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=p\US	   o™R                  o1R                  oÃU:H  oU(       dÏ  [        R                  " SU4SX<4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=p\g s  snf )#Nr€   rš   r#   ri   g{®GázÔ?zp1.c1rs   gffffffæ?r   r/   rƒ   ÚExpensesr†   rˆ   r4   r5   r7   r8   rŒ   r:   r?   r@   r�   rA   rB   rD   r>   r   )zD%(py3)s
{%(py3)s = %(py1)s.box
} == %(py7)s
{%(py7)s = %(py5)s.box
}Úfrag_a)r<   r=   rH   rJ   rx   ry   Úfrag_b)r'   r   r   r	   r
   r8   rP   rQ   rR   rS   rT   rU   rV   rW   r“   )r¹   rº   rŒ   rY   rZ   r[   r\   r]   Úvr_   r`   ra   r|   rd   r}   s                  r   Ú)test_tie_repeated_values_resolve_by_countr¼   ˜   sˆ  € Ü�g˜w¬¨C°°c¸4Ó(@ÓA€FÜ�g˜w¬¨C°°c¸4Ó(@ÓA€FÜ
ØØä˜i¨wÑ7Ü˜j°Ñ8ð
ô
 ˜I¨WÀGÀ9ÑMÜ˜J¨gÀWÀIÑNð
ð Ð"ñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓÙ!Ó"šc˜�HŒH™cÐBÐ" |°\Ð&BÐBÐ&BÑB×B×B×BÒBÐ"×B×BÔBÐ"×B×BÓBÐ&B×B×B×B×B×B×BÓBØˆq‰6Ð#�:‰:Ð#Ÿ™Ð#˜Ñ#×#×#×#Ò#ˆ:×#×#Ô#ˆ6×#×#Ó#ˆ:×#×#×#×#×#Ô#˜×#×#×#Ñ#˜×#×#Õ#˜×#×#×#×#×#×#Õ#Øˆq‰6Ð#�:‰:Ð#Ÿ™Ð#˜Ñ#×#×#×#Ò#ˆ:×#×#Ô#ˆ6×#×#Ó#ˆ:×#×#×#×#×#Ô#˜×#×#×#Ñ#˜×#×#Õ#˜×#×#×#×#×#×#Ö#ùò #s   ÆP'c                 óª  • [        S/ [        SSS9/[        SS/ S9// S9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   nUR                  nSo7U:H  oˆ(       dº  [        R
                  " SU4SXs45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pƒUR                  nSo7U:H  oˆ(       dº  [        R
                  " SU4SXs45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pƒUR                  nS o7UL oˆ(       dº  [        R
                  " SU4SXs45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pƒg )Nr   r˜   r™   rƒ   rš   r†   rˆ   r5   r7   r8   rŒ   r:   r?   r@   r   r±   rŽ   r…   rF   rI   rJ   zKcorroborated by both readings, but not anchored to printed text on the pager²   rK   )z+%(py2)s
{%(py2)s = %(py0)s.box
} is %(py5)s)r   r	   r
   r8   rP   rQ   rR   rS   rT   rU   rV   rW   r“   r”   r   r³   s              r   Ú6test_tie_match_without_cited_fragments_is_unreconciledr¾   ®   s  € Ü
ØØÜ  u°FÑ;Ð<Ü e°7ÈÑLÐMØñ€Cô ˆs‹8Ð�qÐ�q‰=×××Óˆ8×××××ÕŒ3×××ÑŒ3×××××Öˆs×××Ñˆs××Õˆ8××Ó�q××××××ÓØ�‰F€EØ�<‰<Ð/Ð/Ð/Ð/Ñ/×/×/×/Ò/ˆ<×/×/×/×/×/Õ/ˆ5×/×/×/Ñ/ˆ5×/×/Õ/ˆ<×/×/Ó/Ð/×/×/×/×/×/×/Ó/Ø�:‰:ÐfÐfÐfÐfÑf×f×f×fÒfˆ:×f×f×f×f×fÕfˆ5×f×f×fÑfˆ5×f×fÕfˆ:×f×fÓfÐf×f×f×f×f×f×fÓfØ�9‰9Ð˜Ð˜Ð×××Òˆ9×××××Õˆ5×××Ñˆ5××Õˆ9××Ó˜××××××Ôr   c                 óÆ  • [        S[        SSSS5      SS9[        S[        SSSS5      S	S9/n S
nSnSnSn[        XX45      nSn[        XU5      nSo‡U:H  o™(       GdÞ  [        R                  " SU	4SXx45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS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      [        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˜S nSn[        XU5      nSoNU:H  oÿ(       Gd7  [        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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=pôS nSn[        XU5      nS oNUL oÿ(       Gd7  [        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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=pôS nSn[        XU5      nS oNUL oÿ(       Gd7  [        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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=pôg ) Nú#/pictures/1rM   ro   ç      ð?zHotel 16% of $46.0 total)r   ú#/pictures/2rN   zSouth 40%, Industrial 16%rm   ri   rl   g…ëQ¸Õ?z40%r5   ©z‚%(py16)s
{%(py16)s = %(py0)s(%(py1)s, %(py12)s
{%(py12)s = %(py2)s(%(py4)s, %(py6)s, %(py8)s, %(py10)s)
}, %(py14)s)
} == %(py19)sr   r‰   r   ©r;   r<   rG   rC   r>   r@   Úpy10rŸ   r    r¡   Úpy19r£   r¤   z$46.0)zC%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s)
} == %(py10)s)r;   r<   r=   rH   rJ   rÅ   zassert %(py12)srŸ   z16%rK   )zC%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s)
} is %(py10)sz$99.9©r   r   r   rP   rQ   rR   rS   rT   rU   rV   rW   )r‰   r`   rZ   Ú@py_assert7Ú@py_assert9r§   r©   r¨   Ú@py_assert18Ú@py_assert17r¬   r­   rY   r[   r|   Ú@py_assert8Ú@py_format11Ú@py_format13s                     r   Ú4test_picture_for_value_prefers_the_containing_figurerÏ   ½   s�  € äˆ~œs 3¨¨T°3Ó7Ð>XÑYÜˆ~œs 3¨¨S°#Ó6Ð=XÑYð€Gð
 +/ÐY°ÐY°SÐY¸$ÐY¤c¨$°SÓ&?ÐYÀÐYÔ˜WÀÓGÐYÈ>ÐYÈ>ÑY×Y×Y×YÓYÐG×Y×Y×Y×Y×YÕYÔ×Y×Y×YÑYÔ×Y×Y×Y×Y×YÖY˜W×Y×Y×YÑY˜W×Y×Y×Y×Y×YÖY¤c×Y×Y×YÑY¤c×Y×YÕY¨$×Y×YÓY°×Y×YÓY°S×Y×YÓY¸$×Y×YÓYÐ&?×Y×YÓYÀ×Y×YÓYÐG×Y×YÓYÈ>×Y×Y×Y×Y×Y×Y×Y×Yà&*ÐF¨GÐFÔ˜W¨GÓ4ÐF¸ÐF¸ÑF×F×F×FÓFÐ4×F×F×F×F×FÕFÔ×F×F×FÑFÔ×F×F×F×F×FÖF˜W×F×F×FÑF˜W×F×FÕF d×F×FÓF¨G×F×FÓFÐ4×F×FÓF¸×F×F×F×F×F×F×Fà&*Ð:¨EÐ:Ô˜W¨EÓ2Ð:°dÐ:°dÐ:×:×:×:Ó:Ð2×:×:×:×:×:Õ:Ô×:×:×:Ñ:Ô×:×:×:×:×:Ö:˜W×:×:×:Ñ:˜W×:×:Õ: d×:×:Ó:¨E×:×:Ó:Ð2×:×:Ó:°d×:×:×:×:×:×:×:Ø&*Ð<¨GÐ<Ô˜W¨GÓ4Ð<¸Ð<¸Ð<×<×<×<Ó<Ð4×<×<×<×<×<Õ<Ô×<×<×<Ñ<Ô×<×<×<×<×<Ö<˜W×<×<×<Ñ<˜W×<×<Õ< d×<×<Ó<¨G×<×<Ó<Ð4×<×<Ó<¸×<×<×<×<×<×<×<Ð<r   c                 ó   • [        S[        SSSS5      5      [        S[        SSSS5      5      /n SnSnSnSn[        XX45      nS	n[        XU5      nSo‡U:H  o™(       GdÞ  [        R                  " S
U	4SXx45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS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      [        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˜g )NrÀ   rM   rÁ   rÂ   r�   rs   rq   rr   z7%r5   rÃ   r   r‰   r   rÄ   r£   r¤   rÇ   )r‰   r`   rZ   rÈ   rÉ   r§   r©   r¨   rÊ   rË   r¬   r­   s               r   Ú7test_picture_for_value_nested_figures_take_the_smallestrÑ   Ë   s^  € äˆ~œs 3¨¨S°#Ó6Ó7Üˆ~œs 3¨¨S°#Ó6Ó7ð€Gð +/ÐZ°ÐZ°dÐZ¸DÐZ¤c¨$°dÓ&AÐZÀ4ÐZÔ˜WÀ4ÓHÐZÈNÐZÈNÑZ×Z×Z×ZÓZÐH×Z×Z×Z×Z×ZÕZÔ×Z×Z×ZÑZÔ×Z×Z×Z×Z×ZÖZ˜W×Z×Z×ZÑZ˜W×Z×Z×Z×Z×ZÖZ¤c×Z×Z×ZÑZ¤c×Z×ZÕZ¨$×Z×ZÓZ°×Z×ZÓZ°d×Z×ZÓZ¸D×Z×ZÓZÐ&A×Z×ZÓZÀ4×Z×ZÓZÐH×Z×ZÓZÈN×Z×Z×Z×Z×Z×Z×Z×ZÐZr   c                 ó|  • [          V s0 s H  o R                  U _M     nn S GH�  nX!;   o3(       dÛ  [        R                  " SU4SX!45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS nX   ofR                  nS	o‡UL o™(       d„  [        R                  " S
U	4SXx45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=n=p˜GM“     g s  sn f )N)r›   r±   r�   )z%(py0)s in %(py2)sÚcodeÚby_code)r;   rG   zassert %(py4)srC   TrK   )z/%(py3)s
{%(py3)s = %(py1)s.inspect
} is %(py6)s)r<   r=   r>   r?   r@   )r   rÓ   rP   rQ   rR   rS   rT   rU   rV   rW   Úinspect)ÚsrÔ   rÓ   rb   Ú@py_format3ra   r_   rY   rZ   r[   r\   r]   s               r   Ú)test_figure_value_statuses_are_registeredrØ   Ó   sý   € Ý"7Ó8Ò"7˜Q�v‰v�qŠyÑ"7€GÐ8Ü7ˆØ‰×××Òˆt×××××Õˆt×××Ñˆt×××××Ö�w×××Ñ�w××××××ÒØ‰}Ð,×$Ñ$Ð,¨Ð,¨Ð,×,×,×,Ò,Ð$×,×,Ô,ˆ}×,×,Ó,Ð$×,×,Ó,¨×,×,×,×,×,×,×,Ð,ò 8ùò 9s   ‰F9)NÚ )r   Ústrr   úOptional[Box]r   rÚ   Úreturnr   )
r   Úfloatr   rÝ   r   rÝ   r   rÝ   rÜ   r   )N)r%   rÚ   r   rÚ   r&   rÛ   rÜ   r   )rÜ   ÚNone)(Ú__doc__Ú
__future__r   ÚbuiltinsrR   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterP   Útypingr   Úquber.core.extractors.baser   Úquber.core.figures.modelsr   r   Úquber.core.figures.valuesr   r	   r
   r   r   r   r   r   r   r   r'   re   ru   r~   r–   r®   r´   r¶   r¼   r¾   rÏ   rÑ   rØ   r    r   r   Ú<module>ré      s}   ðñõ #ç  „ Õ å <ß 7÷	÷ 	ó 	öQôHöUô$ô4dô&ô/ô$>ô !ô$oô$ô,ô=ô[õ-r   