ó
    !Ø.j&  ã                  ób  • S r SSKJr  SSKrSSKrSSKrSSKJr  SSKrSSK	J
r
  SSKJrJrJrJr  SSKJrJr  SSKJr  SS	KJrJrJrJr  S
u  rr\" S5      r\" S5      r\" S5      \" S5      \" S5      /r/ SQr/ SQr SS0r!S r"S r#S r$S r%S r&\'S:X  a  \RP                  " \&" 5       5        gg)a	  Compare every finishing option on identical model output.

Phase 1 calls the vision+grid anatomy model ONCE per page (cached to JSON)
to get the raw located boxes. Phase 2 applies each finishing option as pure
post-processing on that same output, so differences are attributable to the
finishing, not run-to-run model variation. Produces one annotated PDF per
finishing (all documents concatenated) plus side-by-side panels for the
pages that actually discriminate between options.

Finishings:
  raw      anatomy boxes, no post-processing
  declash  + remove stacked-box overlap (anti-contamination)
  pad6     + declash + 6pt symmetric pad (anti-clip margin)
  pad12    + declash + 12pt symmetric pad
  snap     + declash + line-walking title-snap (best edges, most fragile)
é    )ÚannotationsN)ÚPath)ÚImage)Úanatomy_promptÚdeclash_stackedÚ	pad_boxesÚsnap_titles)Ú
draw_boxesÚrender_page)Ú
page_words)ÚGridFlagResultÚLocatedTableÚflags_to_locatedÚoverlay_grid)é$   é   zexperiments/que245/renderz+experiments/que245/results/raw_located.jsonzdocuments/BHE_991.pdfz<documents/Q2FY25-Visa-Operational-Performance-Data-FINAL.pdfzdocuments/TMUS_Q225_991.pdf))ÚBHE_991é   )r   é   )r   é   )ú.Q2FY25-Visa-Operational-Performance-Data-FINALr   )r   é   )ÚTMUS_Q225_991é   )ÚrawÚdeclashÚpad6Úpad12Úsnapr   )éÜ   r   r   c                óþ   • U S:X  a  U$ U S:X  a  [        XX45      $ U S:X  a  [        [        XUS5      X#U5      $ U S:X  a  [        [        XUS5      X#U5      $ U S:X  a  [        [        XX45      X#U5      $ [        U 5      e)Nr   r   r   g      @r   g      (@r   )r   r   r	   Ú
ValueError)ÚnameÚlocatedÚwordsÚpwÚphs        Ú?/home/mande/repo/quber/experiments/que245/compare_finishings.pyÚapply_finishingr)   A   s‰   € Øˆuƒ}ØˆØˆyÓÜ˜w¨rÓ6Ð6Øˆvƒ~Üœy¨°b¸#Ó>ÀÈ2ÓNÐNØˆwƒÜœy¨°b¸$Ó?ÀÈBÓOÐOØˆvƒ~Üœ?¨7¸2ÓBÀEÈrÓRÐRÜ
�TÓ
Ðó    c               ƒ  ób  #   • [         R                  5       (       a  [        S[          35        g SSKJn   U " [        [        [        5      [        [        S9R                  nSSK	J
n  0 n[         GHÈ  n[        R                  " [        U5      5      n[        UR                   5       GH‹  n["        R$                  " 5        n['        U5      S-  nXV   R)                  SS9R+                  [        U5      5        ['        U5      S	-  n	[-        X‰[        [        5        U" U	R/                  5       S
S9n
UR1                  SU
/5      I S h  v•N nS S S 5        [3        XFS-   5      u  pÍn[5        WR6                  R8                  XìU[        [        5      nUR:                   SUS-    3nU Vs/ s Hc  nUR<                  UR>                  [A        URB                  5      [A        URD                  5      [A        URF                  5      URH                  S.PMe     snUU'   [        SU S[K        U5       S35        GMŽ     GMË     [         RL                  RO                  SSS9  [         RQ                  [R        RT                  " USS95        [        S[          35        g  GNO! , (       d  f       GNT= fs  snf 7f)Nzusing cached r   )ÚFlexGridLocator)ÚrowsÚcols)ÚBinaryContentzp.pngéÈ   ©Údpizg.pngz	image/png)ÚdataÚ
media_typezFlag the tables using the grid.r   Ú|)ÚordinalÚtitleÚregionÚ	grid_rowsÚ	grid_colsÚ	tightenedz  ú: z tablesT)ÚparentsÚexist_ok)Úindentúsaved )+ÚCACHEÚexistsÚprintÚexperiments.que245.approachesr,   r   ÚROWSÚCOLSÚagentÚpydantic_air/   ÚDOCSÚfitzÚopenÚstrÚrangeÚ
page_countÚtempfileÚTemporaryDirectoryr   Ú
get_pixmapÚsaver   Ú
read_bytesÚrunr   r   ÚoutputÚtablesÚstemr6   r7   Úlistr8   r9   r:   r;   ÚlenÚparentÚmkdirÚ
write_textÚjsonÚdumps)r,   rG   r/   ÚoutÚpdfÚdocÚpnoÚtÚipÚgriddedÚimgÚresr&   r'   r%   r$   Úkeys                    r(   Úphase1_collectri   O   s  é € Ü‡|�|‡~�~Ü�œe˜WÐ%Ô&ØÝ=áœN¬4´Ó6¼TÌÑM×SÑS€EÝ)à
€CßˆtˆÜ�iŠiœ˜C›Ó!ˆÜ˜Ÿ™×(ˆCÜ×,Ò,Ô.°!Ü˜!“W˜wÑ&�Ø‘×#Ñ#¨Ð#Ð,×1Ñ1´#°b³'Ô:Ü˜q›' GÑ+�Ü˜R¬$´Ô5Ù#¨×);Ñ);Ó)=È+ÑV�Ø!ŸI™IÐ'HÈ#Ð&NÓO×O�÷ /ô ' s°!©GÓ4‰MˆB�EÜ& s§z¡z×'8Ñ'8¸%ÀRÌÌtÓTˆGØ—X‘X�J˜a  A¡˜wÐ'ˆCñ
 !ó	ò !�Að ŸI™I°·±Ä4ÈÏÉÃ>Ü" 1§;¡;Ó/¼dÀ1Ç;Á;Ó>OØŸk™kô+ñ !ñ	ˆC�‰Hô �B�s�e˜2œc '›l˜^¨7Ð3×4ô# )ñ ô( 
‡L�L×Ñ˜t¨dÐÑ3Ü	×Ñ”T—Z’Z ¨AÑ.Ô/Ü	ˆF”5�'Ð
Õò P÷ /Ö.üòùs@   ‚B>J/Ã BJÅJ
ÅJÅAJ/Æ'A*J*ÈBJ/ÊJÊ
J'Ê"J/c                óD   • U  Vs/ s H  n[        S0 UD6PM     sn$ s  snf )N© )r   )ÚdictsÚds     r(   Ú_located_fromrn   r   s"   € Ù',Ó-¢u !ŒLÑ˜1Ô¡uÑ-Ð-ùÒ-s   …c                 ó~
  ^+• [         R                  " [        R                  5       5      n [         GHò  n[
        R                  " 5       n[         GH™  n[
        R                  " [        U5      5      n[        UR                  5       GHK  nXE   nUR                  R                  UR                  R                  p‡UR                   SUS-    3n	[        U R!                  U	/ 5      5      n
[#        X5S-   5      u    p¼[%        XXÇU5      nSnU HÃ  nUR&                  u  nnnn[
        R(                  " [+        UU5      U-  [+        UU5      U-  [-        UU5      U-  [-        UU5      U-  5      nUR/                  UUSS9  UR1                  UR2                  S-   [-        SUR4                  S-
  5      4UR6                   S	UR8                   3S
US9  MÅ     GMN     UR;                  U5        GMœ     [<        SU S3-  nUR?                  [        U5      5        [A        SU 35        GMõ     SSK!J"nJ#n   URI                  SS5      nSnUS-  n[N         GH¹  u  m+n[Q        U+4S j[         5       5      n[#        X55      u    p¼[
        R                  " [        U5      5      US-
     nUR                  R                  UR                  R                  p‡T+ SU 3n	[        U R!                  U	/ 5      5      n
[         Vs0 s H  o[%        XXÇU5      _M     nnURS                  5        VVs/ s H  nU  H  nUR&                  PM     M     nnnU(       a?  [-        S[+        S U 5       5      S-
  5      n[+        S[-        S U 5       5      S-   5      nOSu  nn[U        UU-  U-  5      [U        UU-  U-  5      n!n / n"[         Hj  n[W        X5US9n#[Y        U#UUU    Vs/ s H  oÿR&                  PM     snS4/5      n#U"R[                  UU#R]                  SU U#R                  U!45      45        Ml     U"S   S   R                  n$U"S   S   R                  n%[^        R`                  " SU$U%S -   [c        U"5      -  4S!5      n&URe                  U&5      n'[g        U"5       H@  u  n(u  nn#U(U%S -   -  n)U'Ri                  S"U)S"-   4U S#US$9  U&Rk                  U#SU)S -   45        MB     [<        S%T+S S&  S'U S(3-  n*U&R?                  U*5        [A        SU* 35        GM¼     g ! [J         a    URM                  5       n GNéf = fs  snf s  snnf s  snf ))Nr5   r   )ç        g{®GázÔ?gq=
×£pí?gffffffö?)ÚcolorÚwidthr   r   r   r<   é   )Úfontsizerq   Úfinish_z.pdfr@   r   )Ú	ImageDrawÚ	ImageFontz4/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttfé   é–   g      R@c              3  óJ   >#   • U  H  oR                   T:X  d  M  Uv •  M     g 7f©N)rW   )Ú.0rm   rW   s     €r(   Ú	<genexpr>Ú phase2_render.<locals>.<genexpr>œ   s   øé € Ð5šd˜§f¡f°¡n—1‘1šdùs   ƒ#š	#rp   c              3  óF   #   • U  H  n[        US    US   5      v •  M     g7f©r   r   N)Úmin©r|   Úbs     r(   r}   r~   ¥   ó    é € ÐA²y°!œc ! A¡$¨¨!©Ÿo˜o²yùó   ‚!g¸…ëQ¸®?g      ð?c              3  óF   #   • U  H  n[        US    US   5      v •  M     g7fr€   )Úmaxr‚   s     r(   r}   r~   ¦   r„   r…   g{®Gáz¤?)rp   gš™™™™™Ù?r1   )éÒ   é   r‰   ÚRGBé   )éÿ   rŒ   rŒ   é   )r   r   é    )ÚfillÚfontÚpanel_é   Ú_pz.png)6r]   ÚloadsrA   Ú	read_textÚ
FINISHINGSrJ   rK   rI   rL   rM   rN   Úrectrr   ÚheightrW   rn   Úgetr   r)   r8   ÚRectr�   r‡   Ú	draw_rectÚinsert_textÚx0Úy0r6   r7   Ú
insert_pdfÚRENDERrR   rC   ÚPILrv   rw   ÚtruetypeÚ	ExceptionÚload_defaultÚDISCRIMINATINGÚnextÚvaluesÚintr   r
   ÚappendÚcropr   ÚnewrY   ÚDrawÚ	enumerateÚtextÚpaste),r   r#   Úmasterr`   Úsrcrb   ÚpageÚwÚhrh   r$   Ú_r%   ÚfinÚcolrc   r�   rž   Úx1Úy1r—   Úoutprv   rw   r�   r2   ÚscaleÚpgÚfinsÚfrƒ   Ú	all_boxesÚtop_pxÚbot_pxÚcropsÚimÚcwÚchÚsheetrm   ÚiÚyor_   rW   s,                                              @r(   Úphase2_renderrÉ   v   s¹  ø€ Ü
�*Š*”U—_‘_Ó&Ó
'€C÷ �
ˆÜ—’“ˆß�4ˆCÜ—)’)œC ›HÓ%ˆCÜ˜SŸ^™^×,�Ø‘x�Ø—y‘y—‘¨¯	©	×(8Ñ(8�1ØŸ™˜
 ! C¨¡E 7Ð+�Ü'¨¯©°°RÓ(8Ó9�Ü(¨°A©gÓ6‘��1Ü% d°U¸qÓA�Ø'�Û�AØ%&§X¡X‘N�B˜˜B ÜŸ9š9¤S¨¨R£[°1¡_´c¸"¸b³kÀA±oÄsÈ2ÈrÃ{ÐUVÁÔX[Ð\^Ð`bÓXcÐfgÑXgÓh�DØ—N‘N 4¨s¸#�NÑ>Ø×$Ñ$ d§g¡g°¡k´3°q¸$¿'¹'ÀA¹+Ó3FÐ%GØ()¯	©	 {°"°Q·W±W°IÐ%>ÈÐRUð %ó Wô	 ñ -ð ×Ñ˜c×"ñ! ô" ˜' $  tÐ,Ñ,ˆØ�‰”C˜“IÔÜ��t�fˆo×ñ+ ÷4 )ð(Ø×!Ñ!Ð"XÐZ\Ó]ˆð €CØ�$‰J€Eß#�^‰	ˆˆcÜÔ5�dÓ5Ó5ˆÜ  Ó*‰ˆˆ1Ü�YŠY”s˜3“xÓ   q¡Ñ)ˆØ�w‰w�}‰}˜bŸg™gŸn™nˆ1Ø��a˜�uˆoˆÜ §¡¨¨RÓ 0Ó1ˆÝNXÓYÊjÀd”o d°U¸qÓAÒAÉjˆÐYØ'+§{¡{¤}Ô@¢} !¼a¸�Q—X”X¹a‘X¡}ˆ	Ñ@ÞÜ�Sœ#ÑA±yÓAÓAÀDÑHÓIˆBÜ�Sœ#ÑA±yÓAÓAÀDÑHÓI‰Bà‰FˆB�Ü˜R !™V e™^Ó,¬c°"°q±&¸5±.Ó.A�ˆØˆßˆDÜ˜S¨3Ñ/ˆBÜ˜B $¸4Àº:Ó(Fº:°a¯¬¹:Ñ(FÈÐ!VÐ WÓXˆBØ�L‰L˜$ §¡¨¨F°B·H±H¸fÐ(EÓ FÐGÖHñ ð �1‰X�a‰[×ÑˆØ�1‰X�a‰[×ÑˆÜ—	’	˜% " r¨B¡w´#°e³*Ñ&<Ð!=¸ÓOˆØ�N‰N˜5Ó!ˆÜ& uÖ-‰MˆA‰z��bØ�b˜2‘g‘ˆBØ�F‰F�A�r˜A‘v�; 4 &°À$ˆFÑGØ�K‰K˜˜Q  R¡˜LÖ)ñ .ô ˜  S b 	˜{¨"¨S¨E°Ð6Ñ6ˆØ�
‰
�3ŒÜ��s�eˆn×ò= $øô	 ó (Ø×%Ñ%Ó'‹ð(üò ZùÛ@ùò )Gs$   È0T Ë7T/Ì# T4ÏT:ÔT,Ô+T,c               ƒ  óH   #   • [        5       I S h  v•N   [        5         g  N7fr{   )ri   rÉ   rk   r*   r(   ÚmainrË   ¼   s   é € Ü
Ó
×ÐÜ…Oñ ùs   ‚"� ‘"Ú__main__))Ú__doc__Ú
__future__r   Úasyncior]   rO   Úpathlibr   rJ   r¡   r   rD   r   r   r   r	   Úexperiments.que245.overlayr
   r   Úquber.agents.completenessr   Úquber.agents.grid_locatorr   r   r   r   rE   rF   r    rA   rI   r¥   r–   ÚCOLORSr)   ri   rn   rÉ   rË   Ú__name__rT   rk   r*   r(   Ú<module>rÖ      sÓ   ðñõ" #ã Û Û Ý ã Ý ÷ó ÷ ?Ý 0÷ó ð �
€€dÙ	Ð)Ó	*€ÙÐ:Ó;€ñ 	Ð	 Ó!ÙÐ	GÓHÙÐ	&Ó'ð€ò€ò 9€
Ø
�Ð	€òò òF.òCòLð
 ˆzÓØ‡K‚K‘“Õð r*   