ó
    5ûoj  ã                  ór   • S r SSKJr  SSKrSSKJs  Jr  SSK	r	SSK
JrJrJr  S	S jrS
S jrS
S jrS
S jrg)a  Geometry and provenance behavior of the OCR grounding well.

The engine itself is exercised by the QUE-324 measurement runs, not here;
these tests pin the pure logic a consumer depends on: pixel-to-point
conversion, region scoping by overlap, and page lookup.
é    )ÚannotationsN)ÚDocumentWellÚOcrFragmentÚPageWellc                ó   • [        U SXSS9$ )Né   gÍÌÌÌÌÌì?)ÚidÚpageÚtextÚbboxÚ
confidence)r   )Úfidr   s     Ú2/home/mande/repo/quber/tests/core/test_ocr_well.pyÚfragmentr      s   € Ü˜# A¨CÀsÑKÐKó    c                 ó¦  • [        SSSSS[        SS5      [        SS	5      [        S
S5      [        SS5      /S9n SnU R                  U5       Vs/ s H  o"R                  PM     nnSS
/oCU:H  oU(       d¥  [        R
                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =pTU R                  USS9 Vs/ s H  o"R                  PM     n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=pIg s  snf s  snf )Nr   zpage.pngé,  éd  é  Úinside)éd   r   é–   éx   Úoutside)é�  r   iÂ  i¤  ústraddling-mostly-in)éŒ   r   éÒ   r   ústraddling-mostly-out)é¾   r   r   r   ©r
   ÚimageÚdpiÚwidthÚheightÚ	fragments)éZ   r'   éÈ   r(   ©ú==)z%(py0)s == %(py3)sÚgot)Úpy0Úpy3zassert %(py5)sÚpy5g{®Gáz„?)Úmin_overlap)r   r   r   )z%(py1)s == %(py4)s)Úpy1Úpy4zassert %(py6)sÚpy6)r   r   Úfragments_in_boxr	   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)ÚwellÚregionÚfr+   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert0Ú@py_assert3Ú@py_format5Ú@py_format7s               r   Ú(test_fragments_in_box_selects_by_overlaprG      s�  € ÜØØØØØä�XÐ3Ó4Ü�YÐ 4Ó5ÜÐ+Ð-AÓBÜÐ,Ð.BÓCð	
ñ€Dð  €FØ×.Ñ.¨vÔ6Ó
7Ò6�A�4Œ4Ñ6€CÐ
7ØÐ3Ð4Ð4Ð4Ñ4×4×4×4Ò4ˆ3×4×4×4×4×4Õ4ˆ3×4×4×4Ñ4ˆ3×4×4Õ4Ð4×4×4×4×4×4×4Ñ4Ø×/Ñ/°ÀDÐ/ÑIÓJÒI�Q�DŒDÑIð ÐJò Oð ð Oñ ÷ ó ïé ô	ÐJ÷ ñ ïé ð	ÐJ÷ ð ïé ð	ð O÷ ÷ ÷ ñ ïé ÷	÷ ð ùò 8ùâJs   ÁG	Ä/Gc            	     óB  • [        SSS SS/ S9n [        SSU /S9nUR                  nSo2" U5      oDU L oU(       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      [        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 =n=n=pE[        R                  " [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Né   zp7.pngi¤  i˜  r!   zdeck.pdfÚrapidocr)ÚsourceÚengineÚpages)Úis)zJ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.page
}(%(py4)s)
} is %(py8)sÚdocr
   )r,   Úpy2r1   r2   Úpy8zassert %(py10)sÚpy10é   )r   r   r
   r4   r5   r6   r7   r8   r9   r:   r;   ÚpytestÚraisesÚKeyError)r
   rO   r@   rD   Ú@py_assert5Ú@py_assert7Ú@py_format9Ú@py_format11s           r   Útest_document_well_page_lookupr[   +   sï   € Ü˜ (°¸DÈÐY[Ñ\€DÜ
˜j°ÀDÀ6Ñ
J€CØ�8‰8Ð�AÐˆ8�A‹;Ð˜$Ð×××Óˆ;×××××Õˆ3×××Ñˆ3××Õˆ8××Ó�A××Óˆ;×××××Ô˜$×××Ñ˜$×××××××Ü	�Š”xÕ	 Ø�‰�Œ÷ 
!×	 Ö	 ús   Å5FÆ
Fc            
     ó<  • SSK Jn   SoU-  nSo2U-  n[        R                  nSoe" U5      otU:H  oˆ(       GdL  [        R
                  " SU4SXG45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=n=n=n=n=pgSoU-  nSo2U-  n[        R                  nSoe" U5      otU:H  oˆ(       GdL  [        R
                  " SU4SXG45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS	[        R                  " U5      [        R                  " U5      [        R                  " U5      S
.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=n=n=n=n=pgg )Nr   )ÚPOINTS_PER_INCHr   iö	  r   r)   )zi((%(py0)s / %(py2)s) * %(py5)s) == %(py14)s
{%(py14)s = %(py10)s
{%(py10)s = %(py8)s.approx
}(%(py12)s)
}r]   rT   )r,   rP   r.   rQ   rR   Úpy12Úpy14zassert %(py16)sÚpy16iä  r   )Úquber.core.ocr.wellr]   rT   Úapproxr4   r5   r6   r7   r8   r9   r:   r;   )r]   r@   rD   Ú@py_assert4Ú@py_assert6Ú@py_assert9Ú@py_assert11Ú@py_assert13rX   Ú@py_format15Ú@py_format17s              r   Útest_bbox_units_follow_dpirj   3   s¿  € õ 4à Ð=˜SÑ Ð= 4Ð= 4Ñ'Ð=¬6¯=©=Ð=¸Ð=¨=¸Ó+=Ð=Ð+=Ñ=×=×=×=Ó=Ð'×=×=×=×=×=Õ=ˆ?×=×=×=Ñ=ˆ?×=×=Õ=˜S×=×=Ó= 4×=×=×=×=×=Ô=¬6×=×=×=Ñ=¬6×=×=Õ=¨=×=×=Ó=¸×=×=Ó=Ð+=×=×=×=×=×=×=×=Õ=Ø Ð=˜SÑ Ð= 4Ð= 4Ñ'Ð=¬6¯=©=Ð=¸Ð=¨=¸Ó+=Ð=Ð+=Ñ=×=×=×=Ó=Ð'×=×=×=×=×=Õ=ˆ?×=×=×=Ñ=ˆ?×=×=Õ=˜S×=×=Ó= 4×=×=×=×=×=Ô=¬6×=×=×=Ñ=¬6×=×=Õ=¨=×=×=Ó=¸×=×=Ó=Ð+=×=×=×=×=×=×=×=Ö=r   )r   Ústrr   z!tuple[float, float, float, float]Úreturnr   )rl   ÚNone)Ú__doc__Ú
__future__r   Úbuiltinsr6   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter4   rT   Úquber.core.ocrr   r   r   r   rG   r[   rj   © r   r   Ú<module>rv      s1   ðñõ #ç  „ ƒç >Ñ >ôLôô0õ>r   