ó
    /j-j…   ã                   ón   • S r SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  S	S
K	J
r
   " S S\
5      rg)z*Implementation of the Stream table parser.é    Né   )Ú	TextEdges)Úbbox_from_str)Úbbox_from_textlines)Útext_in_bbox)Útext_in_bbox_per_axisé   )ÚTextBaseParserc                   ób   ^ • \ rS rSrSr          S	U 4S jjrS rU 4S jrS rS r	Sr
U =r$ )
ÚStreamé   a´  Stream method of parsing looks for spaces between text to parse the table.

If you want to specify columns when specifying multiple table
areas, make sure that the length of both lists are equal.

Parameters
----------
table_regions : list, optional (default: None)
    List of page regions that may contain tables of the form x1,y1,x2,y2
    where (x1, y1) -> left-top and (x2, y2) -> right-bottom
    in PDF coordinate space.
table_areas : list, optional (default: None)
    List of table area strings of the form x1,y1,x2,y2
    where (x1, y1) -> left-top and (x2, y2) -> right-bottom
    in PDF coordinate space.
columns : list, optional (default: None)
    List of column x-coordinates strings where the coordinates
    are comma-separated.
split_text : bool, optional (default: False)
    Split text that spans across multiple cells.
flag_size : bool, optional (default: False)
    Flag text based on font size. Useful to detect
    super/subscripts. Adds <s></s> around flagged text.
strip_text : str, optional (default: '')
    Characters that should be stripped from a string before
    assigning it to a cell.
edge_tol : int, optional (default: 50)
    Tolerance parameter for extending textedges vertically.
row_tol : int, optional (default: 2)
    Tolerance parameter used to combine text vertically,
    to generate rows.
column_tol : int, optional (default: 0)
    Tolerance parameter used to combine text horizontally,
    to generate columns.

c                 óB   >• [         TU ]  SUUUUUUUUU	U
S9  / U l        g )NÚstream)
Útable_regionsÚtable_areasÚcolumnsÚ
split_textÚ	flag_sizeÚ
strip_textÚreplace_textÚedge_tolÚrow_tolÚ
column_tol)ÚsuperÚ__init__Ú	textedges)Úselfr   r   r   r   r   r   r   r   r   r   ÚkwargsÚ	__class__s               €ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/camelot/parsers/stream.pyr   ÚStream.__init__3   sA   ø€ ô 	‰ÑØØ'Ø#Øà!ØØ!Ø%ØØØ!ð 	ñ 	
ð ˆ�ó    c                 ó,  • UR                  S S9  [        U R                  S9nUR                  U5        UR	                  5       nU R
                  R                  U5        UR                  X5      nU(       d  SSU R                  U R                  4S0nU$ )a6  Anssi Nurminen's Table detection algorithm.

A general implementation of the table detection algorithm
described by Anssi Nurminen's master's thesis.
Link: https://dspace.cc.tut.fi/dpub/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3

Assumes that tables are situated relatively far apart
vertically.
c                 ó4   • U R                   * U R                  4$ ©N)Úy0Úx0©Úxs    r    Ú<lambda>Ú2Stream._nurminen_table_detection.<locals>.<lambda>\   s   €  q§t¡t e¨Q¯T©T¡]r"   ©Úkey)r   r   N)
Úsortr   r   ÚgenerateÚget_relevantr   ÚextendÚget_table_areasÚ	pdf_widthÚ
pdf_height)r   Ú	textlinesr   Úrelevant_textedgesÚ
table_bboxs        r    Ú_nurminen_table_detectionÚ Stream._nurminen_table_detectionQ   s…   € ð 	�‰Ñ2ˆÑ3Ü t§}¡}Ñ5ˆ	à×Ñ˜9Ô%à&×3Ñ3Ó5ÐØ�‰×ÑÐ0Ô1à×.Ñ.¨yÓMˆ
æØ˜a §¡°·±ÐAÀ4ÐHˆJàÐr"   c                 óF   >• [         TU ]  U5        U R                  Ul        g)z*Record data about the origin of the table.N)r   Úrecord_parse_metadatar   Ú
_textedges)r   Útabler   s     €r    r;   ÚStream.record_parse_metadatak   s   ø€ ä‰Ñ% eÔ,ØŸ>™>ˆÕr"   c                 óP  • U R                   cp  U R                  nU R                  bE  / nU R                   H"  n[        [	        U5      U R                  5      nM$     UR                  W5        U R                  U5      nO#0 nU R                    H  nS U[	        U5      '   M     X@l        g r%   )r   Úhorizontal_textr   r   r   r1   r8   Útable_bbox_parses)r   Úhor_textÚ
region_strÚregion_textrA   Úarea_strs         r    Ú_generate_table_bboxÚStream._generate_table_bboxp   sŸ   € Ø×ÑÑ#Ø×+Ñ+ˆHØ×!Ñ!Ñ-à�Ø"&×"4Ô"4�JÜ".Ü% jÓ1°4×3GÑ3Gó#’Kñ #5ð —‘ Ô,à $× >Ñ >¸xÓ HÑà "ÐØ ×,Ô,�Ø=AÐ!¤-°Ó"9Ó:ñ -à!2Õr"   c           
      ó˜  • [        XR                  U R                  5      U l        [	        U R                  S   U R                  S   -   5      u  p4pVU R                  U R                  S   U R                  S9nU R                  XvU5      nU V	s/ s H  n	[        U	5      PM     n
n	Ub=  U/U-   U/-   n[        S[        U5      S-
  5       Vs/ s H  oËU   X¼S-      4PM     nnGOF[        U
5      (       d  X54/nGO0[        [        U
5      U
R                  S9nUS:X  ae  [        [        S U
5      5      n
U
(       a  [        [        U
5      U
R                  S9nO*[        S U 5       5      n[         R"                  " S	U 3S
S9  U V	Vs/ s H5  n	[        U	5      U:X  d  M  U	  H  oîR$                  UR&                  4PM     M7     nn	nU R)                  [+        U5      U R,                  S9n/ n[        S[        U5      5       H}  nX¼S-
     S   nX¼   S   nUR/                  U R                   VVs/ s H@  nU R                  U     H)  nUR$                  U:”  d  M  UR&                  U:  d  M'  UPM+     MB     snn5        M     U(       a¢  U R                   VVs/ s HJ  nU R                  U     H3  nUR$                  US   S   :”  d  UR&                  US   S   :  d  M1  UPM5     ML     nnnUR/                  U5        U R1                  X¿U R                  5      nU R3                  X³U5      nX¸S S 4$ s  sn	f s  snf s  snn	f s  snnf s  snnf )NÚ
horizontalÚvertical)r   r   r	   r,   c                 ó   • U S:g  $ )Nr	   © r(   s    r    r*   Ú3Stream._generate_columns_and_rows.<locals>.<lambda>¡   s   € °Q¸!²Vr"   c              3   óH   #   • U  H  o(       a  [        U5      OUv •  M     g 7fr%   )Úfloat)Ú.0r)   s     r    Ú	<genexpr>Ú4Stream._generate_columns_and_rows.<locals>.<genexpr>¦   s   é € Ð$HÂ4¸aµ¤U¨1¤X¸Ô%9Â4ùs   ‚ "zNo tables found in table area r   )Ú
stacklevel)r   éÿÿÿÿ)r   r@   Úvertical_textÚt_bboxr   Ú_group_rowsr   Ú
_join_rowsÚlenÚrangeÚmaxÚsetÚcountÚlistÚfilterÚtupleÚwarningsÚwarnr'   Úx1Ú_merge_columnsÚsortedr   r1   Ú_add_columnsÚ_join_columns)r   ÚbboxÚ	user_colsÚ
text_x_minÚ
text_y_minÚ
text_x_maxÚ
text_y_maxÚrows_groupedÚrowsÚrÚelementsÚcolsÚiÚncolsÚtÚ
inner_textÚleftÚrightÚ	directionÚ
outer_texts                       r    Ú_generate_columns_and_rowsÚ!Stream._generate_columns_and_rowsƒ   s&  € ä+Ø×&Ñ&¨×(:Ñ(:ó
ˆŒô :MØ�K‰K˜Ñ%¨¯©°JÑ(?Ñ?ó:
Ñ6ˆ
 
ð ×'Ñ'¨¯©°LÑ(AÈ4Ï<É<Ð'ÐXˆØ�‰˜|¸ÓDˆÙ$0Ó1¢L˜q”C˜–F¡LˆÐ1àÑ Ø�< )Ñ+¨z¨lÑ:ˆDÜ49¸!¼SÀ»YÈ¹]Ô4KÓLÒ4K¨q˜!‘W˜d q¡5™kÓ*Ñ4KˆDÐL‰Dô �x—=‘=Ø#Ð0Ð1’äœC ›M¨x¯~©~Ñ>�Ø˜A“:ô  $¤FÑ+;¸XÓ$FÓG�HÞÜ #¤C¨£M°x·~±~Ñ F™ô  %Ñ$HÁ4Ó$HÓH˜Ü ŸšØ<¸T¸FÐCÐPQòñ +7ôÚ*6 Q¼#¸a»&ÀE¹/“LÔSTÈa—T‘T˜1Ÿ4™4“LÑST‘L©,ð ñ ð ×*Ñ*¬6°$«<ÀDÇOÁOÐ*ÐT�Ø�
Ü˜q¤# d£)Ö,�AØ A¡™; q™>�DØ ™G A™J�EØ×%Ñ%ð .2¯[ª[ôâ-8 	Ø%)§[¡[°Õ%; Ø Ÿt™t d™{ó ð 01¯t©t°e©|÷ á%;ñ Ù-8òöñ -ö" ð *.¯ªô"â)4˜IØ!%§¡¨YÕ!7˜AØŸ4™4 $ r¡(¨1¡+Ó-°·±¸¸Q¹À¹
Ñ1B÷ á!7ñ Ù)4ð ñ "ð ×%Ñ% jÔ1Ø×,Ñ,¨T¸t¿|¹|ÓL�DØ×-Ñ-¨dÀ
ÓK�DØ˜4 Ð%Ð%ùòw 2ùò Mùó.ùóùó"s7   ÂL0ÃL5ÆL:Æ%L:È/'M ÉM É,
M ÊAMË
M)rV   rA   r   )
NNNFFÚ Né2   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r8   r;   rF   r{   Ú__static_attributes__Ú__classcell__)r   s   @r    r   r      sI   ø† ñ#ðN ØØØØØØØØØ÷ò<õ4*ò
3÷&G&ð G&r"   r   )rƒ   ra   Úcorer   Úutilsr   r   r   r   Úbaser
   r   rL   r"   r    Ú<module>r‰      s+   ðÙ 0ã å Ý !Ý 'Ý  Ý )Ý  ô}&ˆ^õ }&r"   