Ë
    vl�jü   ã                   óL  — d dl Z d dlmZ d dlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZ dee
   d	eee	f   fd
„Zdee
   d	efd„Z edddd«      Zde
d	efd„Zded	eee	f   fd„Zdee   d	efd„Zdeded	ee   fd„Zded	e	fd„Zde
ded	ee
   fd„Zdee
   ded	efd„Zdee
   ded	efd„Zdee
   ded	efd„Zdee
   ded	efd„Zde
d ed!e	d	e
fd"„Zdee
   d#ed$e	d	efd%„Zde
d&ed!e	d	e
fd'„Zd(e
d	efd)„Zd*e
d	efd+„Z d,e
d	e
fd-„Z!de
d	efd.„Z"	 	 	 d4d/ee
   d0ee   d1ee   d2e	d	ef
d3„Z#y)5é    N)Ú
itemgetter)ÚDictÚIterableÚOptionalé   )ÚT_bboxÚT_numÚT_objÚ
T_obj_listé   )Úcluster_objectsÚobjectsÚreturnc                 ó*   — t        t        | «      «      S )z�
    Given an iterable of objects, return the smallest rectangle (i.e. a
    dict with "x0", "top", "x1", and "bottom" keys) that contains them
    all.
    )Úbbox_to_rectÚobjects_to_bbox©r   s    úO/var/www/html/pp/venv/lib/python3.12/site-packages/pdfplumber/utils/geometry.pyÚobjects_to_rectr   	   s   € ô œ¨Ó0Ó1Ð1ó    c                 ó4   — t        t        t        | «      «      S )zd
    Given an iterable of objects, return the smallest bounding box that
    contains them all.
    )Úmerge_bboxesÚmapÚbbox_getterr   s    r   r   r      s   € ô
 œœK¨Ó1Ó2Ð2r   Úx0ÚtopÚx1ÚbottomÚobjc                 ó   — t        | «      }|S )z0
    Return the bounding box for an object.
    )r   )r   Úbboxs     r   Úobj_to_bboxr"      s   € ô ˜sÓ#€DØ€Kr   r!   c                 ó(   — | d   | d   | d   | d   dœS )zd
    Return the rectangle (i.e a dict with keys "x0", "top", "x1",
    "bottom") for an object.
    r   r   r   é   ©r   r   r   r   © )r!   s    r   r   r   %   s#   € ð
 �q‘' $ q¡'°°a±ÀDÈÁGÑLÐLr   Úbboxesc                 óp   — t        | Ž \  }}}}t        |«      t        |«      t        |«      t        |«      fS )zk
    Given an iterable of bounding boxes, return the smallest bounding box
    that contains them all.
    )ÚzipÚminÚmax)r'   r   r   r   r   s        r   r   r   -   s5   € ô
 ˜v˜,Ñ€BˆˆR�Ü�‹G”S˜“Xœs 2›w¬¨F«Ð4Ð4r   ÚaÚbc                 óÄ   — | \  }}}}|\  }}}}	t        ||«      }
t        ||«      }t        ||	«      }t        ||«      }||
z
  }||z
  }|dk\  r|dk\  r||z   dkD  r|
|||fS y )Nr   )r+   r*   )r,   r-   Úa_leftÚa_topÚa_rightÚa_bottomÚb_leftÚb_topÚb_rightÚb_bottomÚo_leftÚo_rightÚo_bottomÚo_topÚo_widthÚo_heights                   r   Úget_bbox_overlapr=   6   s�   € Ø'(Ñ$€FˆE�7˜HØ'(Ñ$€FˆE�7˜HÜ�˜Ó €FÜ�'˜7Ó#€GÜ�8˜XÓ&€HÜ��uÓ€EØ˜Ñ€GØ˜%Ñ€HØ�1‚}˜ Aš¨(°WÑ*<¸qÒ*@Ø˜˜w¨Ð1Ð1àr   c                 óV   — | \  }}}}||kD  s||kD  rt        | › d�«      ‚||z
  ||z
  z  S )Nz  has a negative width or height.)Ú
ValueError)r!   Úleftr   Úrightr   s        r   Úcalculate_arearB   E   sC   € Ø#Ñ€Dˆ#ˆu�fØˆe‚|�s˜V’|Ü˜D˜6Ð!AÐBÓCÐCØ�D‰L˜V c™\Ñ*Ð*r   c                 óì   — t        t        | «      |«      }|€y t        |«      }t        | «      }dD ]
  }||   ||<   Œ |d   | d   z
  }d|v r| d   |z   |d<   |d   |d   z
  |d<   |d   |d   z
  |d<   |S )	Nr%   r   Údoctopr   r   Úwidthr   Úheight)r=   r"   r   Údict)r   r!   ÚoverlapÚdimsÚcopyÚattrÚdiffs          r   Úclip_objrM   L   s©   € Üœ{¨3Ó/°Ó6€GØ€Øä˜Ó €DÜ�‹9€Dà-ò  ˆØ˜$‘ZˆˆTŠ
ð ð �‰;˜˜U™Ñ#€DØ�4ÑØ˜X™¨Ñ-ˆˆX‰Ø˜‘J  d¡Ñ+€Dˆ�MØ˜(‘^ d¨5¡kÑ1€Dˆ�Nà€Kr   Úobjsc                 óX   — | D �cg c]  }t        t        |«      |«      €Œ|‘Œ c}S c c}w )z:
    Filters objs to only those intersecting the bbox
    ©r=   r"   ©rN   r!   r   s      r   Úintersects_bboxrR   `   s*   € ð  ÖX�CÔ#3´KÀÓ4DÀdÓ#KÑ#WŠCÒXÐXùÒXó   …' 'c                 ón   — | D �cg c]%  }t        t        |«      |«      t        |«      k(  r|‘Œ' c}S c c}w )z:
    Filters objs to only those fully within the bbox
    rP   rQ   s      r   Úwithin_bboxrU   g   s=   € ð öàÜœK¨Ó,¨dÓ3´{À3Ó7GÒGò 	òð ùò s   …*2c                 óX   — | D �cg c]  }t        t        |«      |«      �Œ|‘Œ c}S c c}w )z;
    Filters objs to only those fully outside the bbox
    rP   rQ   s      r   Úoutside_bboxrW   r   s*   € ð  ÖT�CÔ#3´KÀÓ4DÀdÓ#KÑ#SŠCÒTÐTùÒTrS   c                 ó@   ‡— t        t        dˆfd„| D «       «      «      S )zp
    Filters objs to only those intersecting the bbox,
    and crops the extent of the objects to the bbox.
    Nc              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­w)N)rM   )Ú.0r   r!   s     €r   ú	<genexpr>zcrop_to_bbox.<locals>.<genexpr>~   s   øè ø€ ÒB°cœh s¨D×1ÑBùs   ƒ)ÚlistÚfilter)rN   r!   s    `r   Úcrop_to_bboxr^   y   s   ø€ ô
 ”�tÓB¸TÔBÓCÓDÐDr   ÚaxisÚvaluec                 ó4  — |dv sJ ‚|dk(  rd| d   |z   fd| d   |z   fg}|dk(  rAd| d   |z   fd| d   |z   fg}d| v r|d| d   |z   fgz  }d	| v r|d	| d	   |z
  fd
| d
   |z
  fgz  }| j                  t        | j                  «       «      t        «      z   «      S )N)ÚhÚvrb   r   r   rc   r   r   rD   Úy0Úy1)Ú	__class__ÚtupleÚitems)r   r_   r`   Ú	new_itemss       r   Úmove_objectrj   �   sô   € Ø�:ÑÐÐØˆs‚{à�3�t‘9˜uÑ$Ð%Ø�3�t‘9˜uÑ$Ð%ð
ˆ	ð ˆs‚{à�C˜‘J Ñ&Ð'Ø�s˜8‘} uÑ,Ð-ð
ˆ	ð �s‰?Ø˜8 S¨¡]°UÑ%:Ð;Ð<Ñ<ˆIØ�3‰;ØØ�s˜4‘y 5Ñ(Ð)Ø�s˜4‘y 5Ñ(Ð)ðñ ˆIð �=‰=œ˜sŸy™y›{Ó+¬e°IÓ.>Ñ>Ó?Ð?r   rK   Ú	tolerancec                 óœ  — dddddœ|   }t        | «      }t        |t        |«      |«      }|D �cg c],  }t        t	        t        |«      |«      «      t        |«      z  ‘Œ. }}t        ||«      D ���	cg c]&  \  }}|D �	cg c]  }	t        |	|||	|   z
  «      ‘Œ c}	‘Œ( }
}}}	t        t        j                  |
Ž «      S c c}w c c}	w c c}	}}w )Nrb   rc   ©r   r   r   r   )
r\   r   r   Úsumr   Úlenr)   rj   Ú	itertoolsÚchain)rN   rK   rk   r_   Ú	list_objsÚclustersÚclusterÚavgsÚavgr   Úsnapped_clusterss              r   Úsnap_objectsrx   —   sÐ   € Ø˜S¨¸Ñ<¸TÑB€DÜ�T“
€IÜ˜y¬*°TÓ*:¸IÓF€HØNVÖWÀ7ŒC””J˜tÓ$ gÓ.Ó/´#°g³,Ó>ÐW€DÐWô   ¨$Ó/÷ð áˆG�Sð =DÖD°SŒ�S˜$  c¨$¡i¡Õ	0ÔDðÐò ô ”	—‘Ð!1Ð2Ó3Ð3ùò XùâDùôs   °1B=Á3CÁ?CÂCÃCÚkeyc                 ó€  — |dv sJ ‚| |   }||z
  }||fg}|dk(  r$|| d   k  sJ ‚|j                  d| d   |z
  f«       nÍ|dk(  r$|| d   k\  sJ ‚|j                  d|| d   z
  f«       n¤|dk(  rZ|| d   k  sJ ‚|j                  d| d   |z   f«       |j                  d| d   |z
  f«       d	| v r_|j                  d	| d	   |z
  f«       nE|dk(  r@|| d   k\  sJ ‚|j                  d| d   |z   f«       d
| v r|j                  d
| d
   |z
  f«       | j                  t        | j                  «       «      t        |«      z   «      S )Nrm   r   r   rE   r   r   rD   rF   re   rd   )Úappendrf   rg   rh   )r   ry   r`   Ú	old_valuerL   ri   s         r   Úresize_objectr}   £   sŽ  € ØÐ/Ñ/Ð/Ð/Ø�C‘€IØ�9Ñ€Dà	ˆeˆð€Ið ˆd‚{Ø˜˜D™	Ò!Ð!Ð!Ø×Ñ˜' 3 t¡9¨uÑ#4Ð5Õ6Ø	�ŠØ˜˜D™	Ò!Ð!Ð!Ø×Ñ˜' 5¨3¨t©9Ñ#4Ð5Õ6Ø	�ŠØ˜˜H™Ò%Ð%Ð%Ø×Ñ˜( C¨¡M°DÑ$8Ð9Ô:Ø×Ñ˜( C¨¡M°DÑ$8Ð9Ô:Ø�3‰;Ø×Ñ˜d C¨¡I°Ñ$4Ð5Õ6Ø	�ŠØ˜˜E™
Ò"Ð"Ð"Ø×Ñ˜( C¨¡M°DÑ$8Ð9Ô:Ø�3‰;Ø×Ñ˜d C¨¡I°Ñ$4Ð5Ô6Ø�=‰=œ˜sŸy™y›{Ó+¬e°IÓ.>Ñ>Ó?Ð?r   Úcurvec                 óª  — t        | d   | d   dd  «      }|D ��cg c]«  \  }}dt        |d   |d   «      t        |d   |d   «      t        |d   |d   «      t        |d   |d   «      | d   | d   z
  z   t        |d   |d   «      t        |d   |d   z
  «      t        |d   |d   z
  «      |d   |d   k(  rdn|d   |d   k(  rdnd d	œ	‘Œ­ c}}S c c}}w )
NÚptsr   Ú
curve_edger   rD   r   rc   rb   )	Úobject_typer   r   r   rD   r   rE   rF   Úorientation)r)   r*   r+   Úabs)r~   Úpoint_pairsÚp0Úp1s       r   Úcurve_to_edgesrˆ   ¾   s  € Ü�e˜E‘l E¨%¡L°°Ð$4Ó5€Kð "÷ñ ˆB�ð (Ü�b˜‘e˜R ™UÓ#Ü�b˜‘e˜R ™UÓ#Ü�r˜!‘u˜b ™eÓ$Ü˜"˜Q™%  A¡Ó'¨5°©?¸UÀ5¹\Ñ+IÑJÜ˜"˜Q™%  A¡Ó'Ü˜˜A™  A¡™Ó'Ü˜"˜Q™% " Q¡%™-Ó(Ø"$ Q¡%¨2¨a©5¢.™3¸bÀ¹eÀrÈ!Áuºn±sÐRVó
	
óð ùó s   ›B0CÚrectc           	      ó^  — t        d«      D �cg c]  }t        | «      ‘Œ c}\  }}}}|j                  dd| d   | d   ddœ«       |j                  dd| d   | d   | d	   z   | d
   | d	   z   ddœ«       |j                  dd| d   ddœ«       |j                  dd| d   ddœ«       ||||gS c c}w )Né   Ú	rect_edger   re   r   rb   )r‚   rF   rd   r   rƒ   rd   rF   rD   )r‚   rF   re   r   rD   rƒ   r   rc   )r‚   rE   r   rƒ   r   )r‚   rE   r   rƒ   )ÚrangerG   Úupdate)r‰   Úxr   r   r@   rA   s         r   Úrect_to_edgesr�   Ð   së   € Ü49¸!³HÖ=¨q¤ T¥
Ò=Ñ€Cˆ��uØ‡J�Jà&ØØ�t‘*Ø˜5‘kØñ	
ôð ‡M�Mà&ØØ�t‘*Ø˜‘;  h¡Ñ/Ø˜8‘n t¨H¡~Ñ5Øñ	
ô	ð 	‡K�Kà&ØØ�t‘*Øñ		
ôð 
‡L�Là&ØØ�t‘*Øñ		
ôð �˜˜uÐ%Ð%ùòI  >s   ŽB*Úlinec                 ó@   — t        | «      }| d   | d   k(  rdnd|d<   |S )Nr   r   rb   rc   rƒ   )rG   )r‘   Úedges     r   Úline_to_edger”   ø   s+   € Ü�‹:€DØ"& u¡+°°h±Ò"?™#Àc€DˆÑØ€Kr   c                 óf   — | d   }d|v r| gS |dk(  rt        | «      gS t        t        dœ|   | «      S )Nr‚   Ú_edger‘   )r‰   r~   )r”   r�   rˆ   )r   Úts     r   Úobj_to_edgesr˜   þ   sD   € ØˆMÑ€AØ�!�|ØˆuˆØ	
ˆfŠÜ˜SÓ!Ð"Ð"ä%´Ñ?ÀÑBÀ3ÓGÐGr   Úedgesrƒ   Ú	edge_typeÚ
min_lengthc                 óx   ‡‡‡— ‰dvrt        d«      ‚dt        dt        fˆˆˆfd„}t        t	        || «      «      S )N)rc   rb   NzOrientation must be 'v' or 'h'Úer   c                 ó‚   •— | d   dk(  rdnd}‰�| d   ‰k(  nd}‰d u xs | d   ‰k(  }t        |xr |xr | |   ‰k\  «      S )Nrƒ   rc   rF   rE   r‚   T)Úbool)r�   ÚdimÚ
et_correctÚorient_correctrš   r›   rƒ   s       €€€r   Útestzfilter_edges.<locals>.test  sd   ø€ Ø˜MÑ*¨cÒ1‰h°wˆØ6?Ð6K�Q�}Ñ%¨Ò2ÐQUˆ
Ø$¨Ð,ÒO°°-Ñ0@ÀKÑ0OˆÜ�JÒL >ÒL°q¸±vÀÑ7KÓMÐMr   )r?   r
   rŸ   r\   r]   )r™   rƒ   rš   r›   r£   s    ``` r   Úfilter_edgesr¤     sD   ú€ ð Ð*Ñ*ÜÐ9Ó:Ð:ðN”ð Nœ$÷ Nô ”�t˜UÓ#Ó$Ð$r   )NNr   )$rp   Úoperatorr   Útypingr   r   r   Ú_typingr   r	   r
   r   Ú
clusteringr   Ústrr   r   r   r"   r   r   r=   rB   rM   rR   rU   rW   r^   rj   rx   r}   rˆ   r�   r”   r˜   r¤   r&   r   r   ú<module>rª      sŒ  ðÛ Ý ß +Ñ +ç 6Ó 6Ý 'ð2˜X e™_ð 2°°c¸5°jÑ1Aó 2ð3˜X e™_ð 3°ó 3ñ ˜˜u d¨HÓ5€ð�Uð ˜vó ðM�vð M $ s¨E zÑ"2ó Mð5˜ &Ñ)ð 5¨fó 5ð˜ð  6ð ¨h°vÑ.>ó ð+˜ð + Eó +ð�%ð ˜vð ¨(°5©/ó ð(Y˜( 5™/ð Y°ð Y¸Jó Yð�h˜u‘oð ¨Vð ¸
ó ðU�x ‘ð U¨fð U¸ó UðE�x ‘ð E¨fð E¸ó Eð@�Uð @ #ð @¨eð @¸ó @ð,	4�x ‘ð 	4¨cð 	4¸eð 	4È
ó 	4ð@�uð @ 3ð @¨uð @¸ó @ð6˜%ð  Jó ð$%&˜ð %& *ó %&ðP�uð  ó ðH�eð H 
ó Hð "&Ø#Øñ	%Ø�E‰?ð%à˜#‘ð%ð ˜‰}ð%ð ð	%ð
 ô%r   