ó
    øù.j7  ã                  ó€   • S r SSKJr  SSKrSSKrSSKJr  SSKrSrSr	Sr
\" S5      rSS	 jrS
 r\S:X  a  \" 5         gg)a‰  Draw both dual-flow result sets onto the source PDF.

Reads a DualResult JSON (from `quber dual`) and overlays, per page:
- VISUAL flow boxes in blue  (normalized 0..1, top-left origin) labeled V#: title
- CAMELOT flow boxes in red  (PDF points, bottom-left origin -> converted)
  labeled with the is_table verdict, so the two independent flows and their
  divergence are visible on one page.
é    )ÚannotationsN)ÚPath)ç        g{®GázÔ?gq=
×£pí?)g333333ë?çš™™™™™¹?r   )gffffffî?gš™™™™™á?r   zexperiments/que246/renderc           
     óœ  • [         R                  " U R                  5       5      n[        R                  " [        U5      5      n0 nUS    H'  nUR                  US   / 5      R                  U5        M)     0 nUS    H*  nUR                  US   S   / 5      R                  U5        M,     [        UR                  5       GH¿  nX8   n	U	R                  R                  U	R                  R                  pºUR                  US-   / 5       H‰  nUS   u  pÍpï[        R                  " XÊ-  XÛ-  Xê-  Xû-  5      nU	R                  U[         SS9  U	R#                  UR$                  S	-   ['        S
UR(                  S-
  5      4SUS    SUS    3S[         S9  M‹     UR                  US-   / 5       HÑ  nUS   S   nU(       d  M  Uu  nnnn[        R                  " UUU-
  UUU-
  5      nUR                  S5      nU(       a  UR                  S5      OS nU(       a  [*        O[,        nU	R                  UUSSS9  U	R#                  UR$                  S	-   [/        US-
  UR0                  S-   5      4SUS   S    SU 3SUS9  MÓ     GMÂ     [2        R5                  SSS9  [2        SUR6                  S S   S!3-  nUR9                  [        U5      5        U$ )"NÚvisualÚpageÚcamelotÚ	candidateé   Úregiongš™™™™™ù?)ÚcolorÚwidthé   é   é   ÚVÚordinalz: Útitleé   )Úfontsizer   ÚbboxÚclassificationÚis_tableg      ð?z[3] 0)r   r   Údashesé   é	   zC Úflavorz
 is_table=T)ÚparentsÚexist_okÚdual_boxed_é   z.pdf)ÚjsonÚloadsÚ	read_textÚfitzÚopenÚstrÚ
setdefaultÚappendÚrangeÚ
page_countÚrectr   ÚheightÚgetÚRectÚ	draw_rectÚVISUALÚinsert_textÚx0ÚmaxÚy0ÚCAMELOT_TABLEÚCAMELOT_NOTÚminÚy1ÚOUTÚmkdirÚstemÚsave)Ú	dual_jsonÚsourceÚdataÚdocÚvisual_by_pageÚvÚcamelot_by_pageÚcÚpnor	   ÚwÚhr4   r6   Úx1r:   r-   r   Úx1cÚy1cÚx2cÚy2cÚclsr   r   Úouts                             Ú6/home/mande/repo/quber/experiments/que246/draw_dual.pyÚdrawrR      s£  € Ü�:Š:�i×)Ñ)Ó+Ó,€DÜ
�)Š)”C˜“KÓ
 €Cà&(€NØ�(Œ^ˆØ×!Ñ! ! F¡)¨RÓ0×7Ñ7¸Ö:ñ à')€OØ�)Œ_ˆØ×"Ñ" 1 [¡>°&Ñ#9¸2Ó>×EÑEÀaÖHñ ô �S—^‘^×$ˆØ‰xˆØ�y‰y�‰ §	¡	× 0Ñ 0ˆ1Ø×#Ñ# C¨!¡G¨RÖ0ˆAØ˜x™[‰NˆB�BÜ—9’9˜R™V R¡V¨R©V°R±VÓ<ˆDØ�N‰N˜4¤v°SˆNÑ9Ø×Ñ˜dŸg™g¨™k¬3¨q°$·'±'¸A±+Ó+>Ð?Ø   9¡ ¨b°°7±°Ð=ÈÔQWð ó Yñ	 1ð !×$Ñ$ S¨1¡W¨bÖ1ˆAØ�[‘> &Ñ)ˆDÞÙØ!%ÑˆC��c˜3Ü—9’9˜S ! c¡'¨3°°C±Ó8ˆDØ—%‘%Ð(Ó)ˆCÞ.1�s—w‘w˜zÔ*°tˆHÞ%-•M´;ˆEØ�N‰N˜4 u°CÀˆNÑHØ×Ñ˜dŸg™g¨™k¬3¨q°1©u°d·g±gÀ±kÓ+BÐCØ! ! K¡.°Ñ":Ð!;¸:ÀhÀZÐPÐ[\Ðdið ó kô 2ñ %ô, ‡I�I�d T€IÑ*Ü
�+˜fŸk™k¨#¨2Ð.Ð/¨tÐ4Ñ
4€CØ‡H�HŒS�‹XÔØ€Jó    c                 óô   • / SQn [        [        R                  5      S:”  a  [        [        R                  S   5      O
[        S5      nU  H*  u  p#[	        X-  [        U5      5      n[        SU 35        M,     g )N))zBHE_991.dual.jsonzdocuments/BHE_991.pdf)z8Q2FY25-Visa-Operational-Performance-Data-FINAL.dual.jsonz<documents/Q2FY25-Visa-Operational-Performance-Data-FINAL.pdf)zTMUS_Q225_991.dual.jsonzdocuments/TMUS_Q225_991.pdfr   z%/home/mande/.claude/jobs/a95a5f59/tmpzsaved )ÚlenÚsysÚargvr   rR   Úprint)ÚpairsÚtmpÚjsÚpdfrP   s        rQ   Úmainr]   ?   s`   € ò€Eô  #¤3§8¡8›}¨qÓ0Œ$Œs�x‰x˜‰{Ô
´dÐ;bÓ6c€CÛ‰ˆÜ�3‘8œT #›YÓ'ˆÜ��s�eˆnÖò rS   Ú__main__)r?   r   r@   r   Úreturnr   )Ú__doc__Ú
__future__r   r#   rV   Úpathlibr   r&   r2   r7   r8   r;   rR   r]   Ú__name__© rS   rQ   Ú<module>re      sT   ðñõ #ã Û 
Ý ã à	€Ø"€Ø€Ù
Ð&Ó'€ô$òN
ð ˆzÓÙ…Fð rS   