ó
    é=jÖ>  ã                  ó–  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr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JrJrJrJr  SS	KJr  SS
K J!r!J"r"  \	" \#5      RI                  5       RJ                  S   r&\&S-  r'Sr(Sr)\	" \#5      RI                  5       RT                  S-  r+\RX                  " S5      r- " S S\5      r. " S S\5      r/ " S S\5      r0 " S S\5      r1S(S jr2Sr3S(S jr4S(S jr5S)S jr6S*S jr7              S+S jr8    S,S  jr9      S-S! jr:S.S" jr;S/S# jr<            S0S$ jr=S1S% jr>\?S&:X  at  \@" \R‚                  5      S':”  a  \	" \R‚                  S'   5      O\'rB\@" \R‚                  5      S:”  a  \C" \R‚                  S   5      O\(rD\Rv                  " \;" \B\D5      5        gg)2a  QUE-270 probe: can the Set-of-Mark vision model find footnote blocks?

Question this answers
---------------------
Today the per-table structure-correction step captures a footnote only when the
definition block falls inside that table's crop, and `share_footnotes` then
spreads it page-wide by marker string alone. That marker-only sharing mis-attributes
when a page carries two independent footnote namespaces. This probe tests a
grounded alternative: detect footnote BLOCKS visually as their own page regions,
ground each to the PDF text layer, read its leading marker deterministically, and
associate it to a table by GEOMETRY (the block sits directly below the table's
column band), confirmed by the marker the table references.

Two detector shapes are run on the SAME gridded page image so the visual model's
capability can be compared directly:

  A. Separate footnote-only locator pass (one extra vision call; dedicated prompt).
  B. Extended locator that returns tables AND footnote blocks in one call.

Nothing in the production package is modified. The probe reuses the prod scaffold
read-only: `overlay_grid`, the grid geometry, `tighten_region`, `page_words`, and
the real `PydanticAIGridLocator` for table regions in approach A.

Run
---
    uv run python experiments/que270/footnote_finder_probe.py            # Visa p11
    uv run python experiments/que270/footnote_finder_probe.py <pdf> <page>

Outputs a side-by-side report to stdout and writes the gridded page image plus a
JSON dump of both runs under experiments/que270/out/.
é    )ÚannotationsN)ÚPath)ÚAnyÚListÚOptionalÚSequenceÚTuple)Ú	BaseModelÚField)Ú
page_words)ÚDEFAULT_COLSÚDEFAULT_ROWSÚPydanticAIGridLocatorÚcolumn_indexÚcolumn_labelsÚgrid_region_normÚoverlay_gridÚtighten_region)Úrender_pages)ÚDEFAULT_LLM_MODELÚget_settingsé   z:.cache/s3/qubera-docs/visa/Q1-2026-Earnings-Release_vF.pdfé   éÈ   Úoutu/   ^\s*(?:\((\d{1,2})\)|(\d{1,2})\.|([*â€ â€¡Â§]))c                  ó¶   • \ rS rSr% \" SSS9rS\S'   \" \SS9rS	\S
'   \" SS9r	S\S'   \" SS9r
S\S'   \" SS9rS\S'   \" SS9rS\S'   \" SSS9rS\S'   Srg)ÚFootnoteBlockFlagéH   é   z+1-based reading order of the footnote block)ÚgeÚdescriptionÚintÚordinalz@The marker each footnote line leads with, e.g. ['(1)','(2)','*'])Údefault_factoryr!   z	List[str]Úmarkersz(Printed grid row at the block's TOP edge)r!   Ú	row_startz+Printed grid row at the block's BOTTOM edgeÚrow_endz3Printed grid column LETTER at the block's LEFT edgeÚstrÚ	col_startz4Printed grid column LETTER at the block's RIGHT edgeÚcol_endÚ z&First few words of the block, verbatim)Údefaultr!   Útext_preview© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r#   Ú__annotations__Úlistr%   r&   r'   r)   r*   r-   Ú__static_attributes__r.   ó    ÚB/home/mande/repo/quber/experiments/que270/footnote_finder_probe.pyr   r   H   s   ‡ Ù˜AÐ+XÑY€GˆSÓYÙØØVñ€GˆYó ñ Ð'QÑR€IˆsÓRÙÐ%RÑS€GˆSÓSÙÐ'\Ñ]€IˆsÓ]ÙÐ%[Ñ\€GˆSÓ\Ù bÐ6^Ñ_€L�#Ö_r6   r   c                  ó,   • \ rS rSr% \" \S9rS\S'   Srg)ÚFootnoteFinderResultéU   ©r$   úList[FootnoteBlockFlag]Úblocksr.   N)	r/   r0   r1   r2   r   r4   r=   r3   r5   r.   r6   r7   r9   r9   U   s   ‡ Ù&+¸DÑ&A€FÐ#ÖAr6   r9   c                  ój   • \ rS rSr% \" SS9rS\S'   \" SS9rS\S	'   S\S
'   S\S'   S\S'   S\S'   Srg)Ú	TableFlagéY   r   )r    r"   r#   r+   )r,   r(   Útitler&   r'   r)   r*   r.   N)	r/   r0   r1   r2   r   r#   r3   rA   r5   r.   r6   r7   r?   r?   Y   s3   ‡ Ù˜A‘;€GˆSÓÙ˜rÑ"€Eˆ3Ó"ØƒNØƒLØƒNØ†Lr6   r?   c                  óB   • \ rS rSr% \" \S9rS\S'   \" \S9rS\S'   Sr	g)	ÚCombinedResultéb   r;   zList[TableFlag]Útablesr<   r=   r.   N)
r/   r0   r1   r2   r   r4   rE   r3   r=   r5   r.   r6   r7   rC   rC   b   s!   ‡ Ù#°DÑ9€FˆOÓ9Ù&+¸DÑ&A€FÐ#ÖAr6   rC   c           	     ó<   • [        U5      S   nSU  SU  SU SU S3	$ )Néÿÿÿÿz$The page image has a grid overlaid: z+ numbered horizontal rows (1 at the top to z2 at the bottom, labeled on BOTH side margins) and z$ lettered columns (A at the left to z� at the right, labeled top and bottom). Read the printed row numbers and column letters off the grid; never estimate coordinates.)r   )ÚrowsÚcolsÚlasts      r7   Ú_grid_preamblerK   j   sE   € Ü˜Ó˜rÑ"€Dà
.¨t¨fð 5Ø�ÐIÈ$Èð P%Ø%) Fð +[ð	\ðr6   u·  A FOOTNOTE BLOCK is one or more short notes that explain a marker used elsewhere on the page. Each line leads with a marker: a parenthesized or superscript number ((1), (2), a raised 1/2), an asterisk *, or a dagger / double-dagger / section sign. Footnote blocks are visually distinct: smaller or lighter text, set off below a table by whitespace or a thin rule, usually near the bottom of the page.

Do NOT report any of the following as a footnote block:
- a bulleted list (lines led by a round bullet, dash, or square) â€” that is body text;
- a numbered list that is the document's main content (full sentences, not tied to a marker that appears up in a table);
- a table row, a column header, a title, a units/scale caption, or a prose paragraph;
- page furniture (page number, running header, URL).
The distinguishing test: a footnote's marker also appears attached to a header or cell somewhere in a table above it. A bullet's marker does not.c           	     ó|   • [        X5       S[         S[        R                  " [        R                  5       SS9 S3$ )Nz

a•  

Find every FOOTNOTE BLOCK on the page. For each, in reading order, report:
- ordinal (1 = first, top-to-bottom)
- markers: the marker each line in the block leads with, in order (e.g. ["(1)","(2)"])
- row_start / row_end: printed grid rows at the block's top and bottom edges
- col_start / col_end: printed grid column letters at the block's left and right edges
- text_preview: the first several words of the block, copied verbatim

If the page has no footnote block, return an empty list. Never invent a footnote
from a marker that has no distinct note text below the table.

Return ONLY a JSON object conforming to this schema (no prose, no code fences):

r   ©ÚindentÚ
)rK   Ú_FOOTNOTE_DEFINITIONÚjsonÚdumpsr9   Úmodel_json_schema©rH   rI   s     r7   Úfootnote_only_promptrU   …   sJ   € ä�ÓÐ ð äÐ ð ô ‡‚Ô ×2Ñ2Ó4¸QÑ?Ð @ð Að#ð r6   c           	     ó|   • [        X5       S[         S[        R                  " [        R                  5       SS9 S3$ )Na~  

Report TWO things on this page: its tables, and its footnote blocks.

TABLES: a block where values line up in two or more vertical columns across rows.
Bound the whole table (title, headers, row labels, body, totals). A bulleted or
numbered list, a single column of figures, and prose are NOT tables. For each
table report ordinal, title, row_start, row_end, col_start, col_end.

a  

For each footnote block report ordinal, markers, row_start, row_end, col_start,
col_end, text_preview (as in the footnote schema). Footnotes are NOT tables and
must not appear in the tables list.

Return ONLY a JSON object conforming to this schema (no prose, no code fences):

r   rM   rO   )rK   rP   rQ   rR   rC   rS   rT   s     r7   Úcombined_promptrW   ›   sJ   € ä�ÓÐ ð 	ô Ð ð ô ‡‚ŒN×,Ñ,Ó.°qÑ9Ð :ð ;ð%ð r6   c           	     óö   • SSK Jn  SSKJn  [	        5       R
                  nUR                  =(       d    [        nUR                  (       d  [        S5      eSSK
Jn  U" XTR                  5      nU" UUU U" SS9S9$ )	Nr   )ÚAgent)ÚModelSettingsz>ANTHROPIC_AUTH_TOKEN not set; this probe needs the real model.)Úmake_oauth_anthropic_modelg        )Útemperature)Úoutput_typeÚsystem_promptÚmodel_settings)Úpydantic_airY   Úpydantic_ai.settingsrZ   r   ÚllmÚmodelr   Úanthropic_auth_tokenÚRuntimeErrorÚquber.agents._oauth_gater[   )r^   r]   rY   rZ   rb   rc   r[   Ú
anth_models           r7   Ú_build_agentrh   µ   sj   € Ý!Ý2ä
‹.×
Ñ
€CØ�I‰I×*Ô*€EØ×#×#ÜÐ[Ó\Ð\ÝCá+¨E×3KÑ3KÓL€JÙØØØ#Ù$°Ñ5ñ	ð r6   c              ƒ  ó¨   #   • SSK Jn  [        X5      nU" UR                  5       SS9nUR	                  SU/5      I S h  v•N nUR
                  $  N7f)Nr   )ÚBinaryContentz	image/png)ÚdataÚ
media_typezReport using the grid.)r`   rj   rh   Ú
read_bytesÚrunÚoutput)r^   r]   Úgriddedrj   ÚagentÚimageÚresults          r7   Ú
_run_agentrt   È   sN   é € Ý)ä˜Ó4€EÙ˜w×1Ñ1Ó3ÀÑL€EØ—9‘9Ð6¸Ð>Ó?×?€FØ�=‰=Ðñ @ùs   ‚=A¿AÁ Ac                óN  • [        U R                  U5      n[        U R                  U5      nXv:  a  Xvpv[        U R                  U R
                  XgXE5      nUS   SU-  -
  U-  n	US   SU-  -   U-  n
U Vs/ s H#  o¹US   US   -   S-  s=::  a  U
::  d  M  O  M!  UPM%     nn/ n[        U5       H—  nU Vs/ s H  o»S   R                  5       PM     nn[        U5      S:¼  d  M6  [        R                  US   5      (       d  MU  [        R                  " SUS   5      (       d  Mv  UR                  [        S	 U 5       5      5        M™     U(       a  [        U5      S
-
  OUS   U-  nU
nU Vs/ s H$  nUUS   US   -   S-  s=::  a  U::  d  M  O  M"  UPM&     nnUS   UU-  US   UU-  4nUR                  S S9  SR                  S U 5       5      n[        R                  U5      nU(       a!  [!        S UR#                  5        5       S5      OSnUUU4$ s  snf s  snf s  snf )zPCoarse grid flag -> tight box, grounded text, and leading marker from PDF words.r   g      @é   g      ø?r   é   r   z	^[A-Za-z]c              3  ó*   #   • U  H	  oS    v •  M     g7f)r   Nr.   ©Ú.0Úws     r7   Ú	<genexpr>Ú _ground_block.<locals>.<genexpr>ó   s   é € Ð$8²4¨a q¦T²4ùó   ‚g      ð?c                ó@   • [        U S   U S   -   S-  S-  5      U S   4$ )Nr   rv   r   rw   r   )Úround©r{   s    r7   Ú<lambda>Ú_ground_block.<locals>.<lambda>ø   s(   € œu a¨¡d¨Q¨q©T¡k°QÑ%6¸Ñ%:Ó;¸Q¸q¹TÑBr6   ©ÚkeyÚ c              3  ó*   #   • U  H	  oS    v •  M     g7f)rw   Nr.   ry   s     r7   r|   r}   ù   s   é € Ð)¢&˜Q�a–D¢&ùr~   c              3  ó6   #   • U  H  o(       d  M  Uv •  M     g 7f©Nr.   )rz   Úgs     r7   r|   r}   û   s   é € Ð.šj˜«A—1‘1šjùs   ‚
�	N)r   r)   r*   r   r&   r'   Ú_group_linesÚstripÚlenÚ_LEADING_MARKERÚmatchÚreÚappendÚminÚsortÚjoinÚnextÚgroups)ÚflagÚwordsÚpage_wÚpage_hrH   rI   Úc0Úc1ÚcoarseÚ
search_topÚ
search_botr{   ÚbandÚdef_line_topsÚlineÚtoksÚtop_yÚbot_yÚinsideÚboxÚtextÚmÚmarkers                          r7   Ú_ground_blockr«   Ô   s  € ô 
�d—n‘n dÓ	+€BÜ	�d—l‘l DÓ	)€BØ	ƒwØˆBÜ˜dŸn™n¨d¯l©l¸BÀDÓO€Fð ˜‘)˜c D™jÑ(¨FÑ2€JØ˜‘)˜c D™jÑ(¨FÑ2€JÙÓN’u�!¨q°©t°a¸±d©{¸aÑ.?Õ MÀ:Ñ M‹AÑ M�A‘u€DÐNØ!#€MÜ˜TÖ"ˆÙ&*Ó+¢d �!‘—
‘
–¡dˆÐ+Üˆt‹9˜�>œo×3Ñ3°D¸±G×<Ó<ÄÇÂÈ,ÐX\Ð]^ÑX_×A`ÓA`Ø× Ñ ¤Ñ$8±4Ó$8Ó!8Ö9ñ #ö +8ŒS�Ó #Ò%¸VÀA¹YÈÑ=O€EØ€EÙÓFš�A %¨A¨a©D°1°Q±4©K¸1Ñ+<Õ"EÀÑ"E‹aÑ"E�a™€FÐFØ�!‰9�e˜f‘n f¨Q¡i°¸±Ð
@€CØ
‡K�KÑB€KÑCØ�8‰8Ñ)¡&Ó)Ó)€DÜ×Ñ˜dÓ#€AÞ9:ŒTÑ.˜aŸh™hœjÓ.°Ô5À€FØ��fÐÐùò Oùò ,ùò
 Gs*   Á6HÂHÂHÂ6HÅ-H"ÆH"ÆH"c                ó,  • / n[        U S S9 Hi  nUS   US   -   S-  nU(       a?  [        X1S   S   S   US   S   S   -   S-  -
  5      S::  a  US   R                  U5        MW  UR                  U/5        Mk     U H  nUR                  S	 S9  M     U$ )
zLCluster words into text lines by vertical center, each sorted left-to-right.c                ó   • U S   U S   -   S-  $ )Nr   rv   r   r.   r�   s    r7   r‚   Ú_group_lines.<locals>.<lambda>  s   € ¨!¨A©$°°1±©+¸Ò):r6   r„   r   rv   r   rG   r   g      @c                ó   • U S   $ )Nr   r.   r�   s    r7   r‚   r®     s   €   !¢r6   )ÚsortedÚabsr‘   r“   )r˜   Úlinesr{   Úycr¢   s        r7   r‹   r‹   ÿ   s¦   € ð AC€EÜ�EÑ:Ô;ˆØ�‰d�Q�q‘T‰k˜QÑˆÞ”S˜ R™y¨™|¨A™°°r±¸1±¸a±Ñ@ÀAÑEÑEÓFÈ#ÓMØ�"‰I×Ñ˜QÖà�L‰L˜!˜Öñ <ó ˆØ�	‰	‘nˆ	Ó%ñ à€Lr6   c                ój  • [        U S   U S   5      [        U S   U S   5      [        U S   U S   5      [        U S   U S   5      4u  p#pESnSnU H_  u  nu  pšp¼[        X›5      [        X›5      [        X¬5      pþn[        XN5      [        X-5      -
  nUS::  a  MH  X?-
  nUS:¼  d  MT  UU:  d  M\  UUpgMa     U$ )zQOrdinal of the nearest table whose column band overlaps and sits ABOVE the block.r   r   r   rv   Ng    eÍÍAg{®Gáz”¿)r’   Úmax)Ú	block_boxrE   Úbx0Úby0Úbx1Ú_ÚbestÚbest_gapr#   Útx0Úty0Útx1Úty1Út_x0Út_x1Út_bottomÚ	x_overlapÚgaps                     r7   Ú
_associaterÆ     sÌ   € ô
 ˜I a™L¨)°A©,Ó7¼¸YÀq¹\È9ÐUVÉ<Ó9XÜ˜I a™L¨)°A©,Ó7¼¸YÀq¹\È9ÐUVÉ<Ó9XðZÑ€Cˆcà€DØ€HÛ)/Ñ%ˆÑ%�#˜CÜ" 3›}¬c°#«m¼SÀ»]�HˆÜ˜“N¤S¨£^Ñ3ˆ	Ø˜‹>ÙØ‰nˆØ�%�<˜C (�NØ  '’dñ *0ð €Kr6   c              ƒ  óÖ  #   • [         R                  SSS9  [        SU  35        [        SU S[        5       R                  R
                  =(       d    [         S[         35        [        S5        [        X5      u  p#n[        R                  " SS	9 n[        U [        [        U5      5      nXaS
-
     n[         U R                   SU S3-  n[        Xx[        [         5        [#        5       n	U	R%                  XpU5      I S h  v•N n
U
 Vs/ s H  o»R&                  UR(                  4PM     nn[        S[+        U5       S35        U H  u  pÞ[        SU S[-        U5       35        M!     [        S5        [        S5        [        S5        [/        [1        [        [         5      [2        U5      I S h  v•N n[5        UR6                  XBX<5        [        S5        [        S5        [        S5        [/        [9        [        [         5      [:        U5      I S h  v•N nUR<                   Vs/ s H#  o»R&                  [?        U[        [         5      4PM%     nn[        S[+        UR<                  5       S[+        UR6                  5       S35        [5        UR6                  XBUU5        S S S 5        [         U R                   SU S3-  nURA                  [B        RD                  " WRG                  5       WRG                  5       W VVs/ s H  u  nnUUS.PM     snnS.SS95        [        SU 35        [        SW 35        g  GN=s  snf  GN• GN5s  snf ! , (       d  f       N´= fs  snnf 7f)NT)ÚparentsÚexist_okzPDF : zpage: z
   model: z   dpi: zN==============================================================================zque270-)Úprefixr   z-pz-gridded.pngz
Real grid locator found z
 table(s):z  table z	: region=zO
------------------------------------------------------------------------------u2   APPROACH A â€” separate footnote-only locator passzN------------------------------------------------------------------------------u>   APPROACH B â€” extended locator (tables + footnotes, one call)zcombined call reported z table(s), z footnote block(s)z
-runs.json)r#   Úregion)Ú
approach_aÚ
approach_bÚreal_tablesr   rM   z
Wrote zGridded image: )$ÚOUT_DIRÚmkdirÚprintr   rb   rc   r   ÚDPIr   ÚtempfileÚTemporaryDirectoryr   r   Ústemr   r   r   r   Úlocater#   rË   r�   Ú_fmtrt   rU   r9   Ú_report_blocksr=   rW   rC   rE   Ú_flag_regionÚ
write_textrQ   rR   Ú
model_dump)ÚpdfÚpager™   rš   r˜   ÚtmpÚimagesÚpage_imgrp   ÚlocatorÚlocatedÚtrÎ   r#   rË   ÚaÚbÚb_tablesÚdumpÚoÚrs                        r7   rn   rn   &  sÒ  é € Ü‡M�M˜$¨€MÑ.Ü	ˆF�3�%ˆ.ÔÜ	ˆF�4�&˜
¤<£>×#5Ñ#5×#;Ñ#;×#PÔ?PÐ"QÐQYÔZ]ÐY^Ð
_Ô`Ü	ˆ(„Oä& sÓ1Ñ€F�Eä	×	$Ò	$¨IÒ	6¸#Ü˜c¤3¬¨S«	Ó2ˆØ ™(Ñ#ˆÜ˜sŸx™x˜j¨¨4¨&°Ð=Ñ=ˆÜ�X¬´lÔCô (Ó)ˆØŸ™ x°dÓ;×;ˆÙ6=Ó>²g°Ÿ	™	 1§8¡8Ó,±gˆÐ>äÐ*¬3¨{Ó+;Ð*<¸JÐGÔHÛ*‰OˆGÜ�H˜W˜I Y¬t°F«|¨nÐ=Ö>ñ  +ô 	ˆoÔÜÐBÔCÜˆhŒÜÔ1´,ÄÓMÔOcÐelÓm×mˆÜ�q—x‘x °ÔDô 	ˆoÔÜÐNÔOÜˆhŒÜœ_¬\¼<ÓHÌ.ÐZaÓb×bˆØVW×V^ÒV^Ó_ÒV^ÐQR—Y‘Y¤¨Q´¼lÓ KÓLÑV^ˆÐ_ÜÐ'¬¨A¯H©H« °kÄ#ÀaÇhÁhÃ-ÀÐPbÐcÔdÜ�q—x‘x °¸ÔA÷; 
7ô> ˜Ÿ™�z  D 6¨Ð4Ñ4€DØ‡O�OÜ�
Š
àŸl™l›nØŸl™l›nÙHSÔTÊÁÀÀ1¨A¸Ô ;ÉÒTñð
 ñ	
ô	ô 
ˆH�T�FÐ
ÔÜ	ˆO˜G˜9Ð
%Õ&òG <ùÚ>ò nò cùÚ_÷7 
7Õ	6üóJ  Uùsƒ   ‚BM)ÂA/MÄL?ÄMÄ!MÄ,BMÆ2MÆ3A"MÈM
ÈMÈ(*MÉAMÊ$AM)ÌM#Ì*M)Ì?MÍMÍ
MÍMÍ
M ÍM)c                óª   • [        U R                  U5      [        U R                  U5      pCXC:  a  XCpC[        U R                  U R
                  X4X5      $ r‰   )r   r)   r*   r   r&   r'   )r—   rH   rI   r›   rœ   s        r7   rÙ   rÙ   \  sB   € Ü˜$Ÿ.™.¨$Ó/´¸d¿l¹lÈDÓ1QˆØ	ƒwØˆBÜ˜DŸN™N¨D¯L©L¸"À$ÓMÐMr6   c           	     óš  • U (       d  [        S5        g U  H²  n[        XQX#[        [        5      u  pgnU(       a  [	        Xd5      OS n	[        U5      S:”  a  US S S-   OUn
[        SUR                   SUR                   35        [        S[        U5       35        [        SU< S35        [        S	U	 S
35        [        SU
 35        M´     g )Nz  (no footnote blocks reported)éd   z...z  block z: model markers=z    grounded region : z    grounded marker : z%  (read from PDF text, not the model)z    associated table: z+  (nearest table above with column overlap)z    grounded text   : )	rÑ   r«   r   r   rÆ   r�   r#   r%   r×   )r=   r˜   r™   rš   rE   Úblkr§   r¨   rª   ÚownerÚpreviews              r7   rØ   rØ   c  sÅ   € ö ÜÐ/Ô0ØÛˆÜ)¨#°fÄlÔT`ÓaÑˆ�6Þ+.”
˜3Ô'°DˆÜ*-¨d«)°c«/�4˜˜�: Ò%¸tˆÜ�˜Ÿ™˜Ð%5°c·k±k°]ÐCÔDÜÐ&¤t¨C£y kÐ2Ô3ÜÐ& v¡jÐ0UÐVÔWÜÐ& u gÐ-XÐYÔZÜÐ& w iÐ0Ö1ò r6   c                óF   • U c  gSSR                  S U  5       5      -   S-   $ )NÚNoneÚ(z, c              3  ó(   #   • U  H  oS  v •  M
     g7f)z.3fNr.   )rz   Úvs     r7   r|   Ú_fmt.<locals>.<genexpr>{  s   é € Ð6ªv¨! ˜Wœ:ªvùs   ‚Ú))r”   )rË   s    r7   r×   r×   x  s)   € Ø�~ØØ�—‘Ñ6©vÓ6Ó6Ñ6¸Ñ<Ð<r6   Ú__main__r   )rH   r"   rI   r"   Úreturnr(   )r^   r(   r]   r   rø   r   )r^   r(   r]   r   rp   r   rø   r   )r—   r   r˜   ú0Sequence[Tuple[float, float, float, float, str]]r™   Úfloatrš   rú   rH   r"   rI   r"   rø   zFTuple[Optional[Tuple[float, float, float, float]], str, Optional[str]])r˜   rù   rø   z2List[List[Tuple[float, float, float, float, str]]])r¶   ú!Tuple[float, float, float, float]rE   ú7Sequence[Tuple[int, Tuple[float, float, float, float]]]rø   zOptional[int])rÜ   r   rÝ   r"   rø   rñ   )r—   r   rH   r"   rI   r"   rø   rû   )r=   zSequence[FootnoteBlockFlag]r˜   rù   r™   rú   rš   rú   rE   rü   rø   rñ   )rË   z+Optional[Tuple[float, float, float, float]]rø   r(   )EÚ__doc__Ú
__future__r   ÚasynciorQ   r�   ÚsysrÓ   Úpathlibr   Útypingr   r   r   r   r	   Úpydanticr
   r   Úquber.agents.completenessr   Úquber.agents.grid_locatorr   r   r   r   r   r   r   r   Ú%quber.core.extractors.camelot.acquirer   Úquber.settingsr   r   Ú__file__ÚresolverÈ   ÚREPOÚDEFAULT_PDFÚDEFAULT_PAGErÒ   ÚparentrÏ   ÚcompilerŽ   r   r9   r?   rC   rK   rP   rU   rW   rh   rt   r«   r‹   rÆ   rn   rÙ   rØ   r×   r/   r�   ÚargvÚpdf_argr"   Úpage_argr.   r6   r7   Ú<module>r     s3  ðñõ@ #ã Û Û 	Û 
Û Ý ß 7Õ 7ç %å 0÷	÷ 	ó 	õ ?ß :áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€ØÐQÑQ€Ø€Ø	€Ù
ˆx‹.×
 Ñ
 Ó
"×
)Ñ
)¨EÑ
1€ð —*’*ÐOÓP€ô
`˜	ô 
`ôB˜9ô Bô�	ô ôB�Yô BôðAð ô"ô,ô4ô&ð(Ø
ð(à;ð(ð ð(ð ð	(ð
 ð(ð ð(ð Lô(ðVØ;ðà7ôð Ø0ðàCðð ôô.3'ôlNð2Ø'ð2à;ð2ð ð2ð ð	2ð
 Dð2ð 
ô2ô*=ð ˆzÓÙ#& s§x¡x£=°1Ó#4‰d�3—8‘8˜A‘;Ô¸+€GÙ#& s§x¡x£=°1Ó#4‰s�3—8‘8˜A‘;Ô¸,€HØ‡K‚K‘�G˜XÓ&Õ'ð r6   