§
    eÒ³gü   ã                   ó®  — 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#dS )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    úW/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pdfplumber/utils/geometry.pyÚobjects_to_rectr   	   s   € õ �¨Ñ0Ô0Ñ1Ô1Ð1ó    c                 óF   — 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Ô1Ñ2Ô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ÐLÐLr   Úbboxesc                 ó’   — 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   -   s=   € õ
 ˜v˜,Ñ€BˆˆR�Ý�‰GŒG•S˜‘X”X�s 2™wœw­¨F©¬Ð4Ð4r   ÚaÚbc                 óì   — | \  }}}}|\  }}}}	t          ||¦  «        }
t          ||¦  «        }t          ||	¦  «        }t          ||¦  «        }||
z
  }||z
  }|dk    r|dk    r||z   dk    r|
|||fS d S )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àˆtr   c                 ób   — | \  }}}}||k    s||k    rt          | › d�¦  «        ‚||z
  ||z
  z  S )Nz  has a negative width or height.)Ú
ValueError)r!   Úleftr   Úrightr   s        r   Úcalculate_arearB   E   sK   € Ø#Ñ€Dˆ#ˆu�fØˆe‚|€|�s˜V’|�|Ý˜DÐBÐBÐBÑCÔCÐCØ�D‰L˜V c™\Ñ*Ð*r   c                 ó:  — t          t          | ¦  «        |¦  «        }|€d S 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Ô6€GØ€Øˆtå˜Ñ Ô €DÝ�‰9Œ9€Dà-ð  ð  ˆØ˜$”ZˆˆT‰
ˆ
à�Œ;˜˜UœÑ#€DØ�4ÐÐØ˜Xœ¨Ñ-ˆˆX‰Ø˜”J  d¤Ñ+€Dˆ�MØ˜(”^ d¨5¤kÑ1€Dˆ�Nà€Kr   Úobjsc                 ó    ‡— ˆfd„| D ¦   «         S )z:
    Filters objs to only those intersecting the bbox
    c                 óN   •— g | ]!}t          t          |¦  «        ‰¦  «        ®|‘Œ"S ©N©r=   r"   ©Ú.0r   r!   s     €r   ú
<listcomp>z#intersects_bbox.<locals>.<listcomp>d   s1   ø€ ÐXÐXÐX�CÕ#3µKÀÑ4DÔ4DÀdÑ#KÔ#KÐ#WˆCÐ#WÐ#WÐ#Wr   r&   ©rN   r!   s    `r   Úintersects_bboxrW   `   s    ø€ ð YÐXÐXÐX˜4ÐXÑXÔXÐXr   c                 ó    ‡— ˆfd„| D ¦   «         S )z:
    Filters objs to only those fully within the bbox
    c                 óp   •— g | ]2}t          t          |¦  «        ‰¦  «        t          |¦  «        k    ¯0|‘Œ3S r&   rR   rS   s     €r   rU   zwithin_bbox.<locals>.<listcomp>k   sH   ø€ ð ð ð àÝ�K¨Ñ,Ô,¨dÑ3Ô3µ{À3Ñ7GÔ7GÒGÐGð 	àGÐGÐGr   r&   rV   s    `r   Úwithin_bboxrZ   g   s.   ø€ ðð ð ð àðñ ô ð r   c                 ó    ‡— ˆfd„| D ¦   «         S )z;
    Filters objs to only those fully outside the bbox
    c                 óN   •— g | ]!}t          t          |¦  «        ‰¦  «        ­|‘Œ"S rQ   rR   rS   s     €r   rU   z outside_bbox.<locals>.<listcomp>v   s1   ø€ ÐTÐTÐT�CÕ#3µKÀÑ4DÔ4DÀdÑ#KÔ#KÐ#SˆCÐ#SÐ#SÐ#Sr   r&   rV   s    `r   Úoutside_bboxr]   r   s    ø€ ð UÐTÐTÐT˜4ÐTÑTÔTÐTr   c                 óV   ‡— 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   ó8   •K  — | ]}t          |‰¦  «        V — Œd S rQ   )rM   rS   s     €r   ú	<genexpr>zcrop_to_bbox.<locals>.<genexpr>~   s-   øè è € ÐBÐB°c�h s¨DÑ1Ô1ÐBÐBÐBÐBÐBÐBr   )ÚlistÚfilterrV   s    `r   Úcrop_to_bboxrc   y   s2   ø€ õ
 •�tÐBÐBÐBÐB¸TÐBÑBÔBÑCÔCÑDÔDÐDr   ÚaxisÚvaluec                 ó‚  — |dv sJ ‚|dk    rd| d         |z   fd| d         |z   fg}|dk    rPd| 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  }|                       t          |                      ¦   «         ¦  «        t          |¦  «        z   ¦  «        S )N)ÚhÚvrg   r   r   rh   r   r   rD   Úy0Úy1)Ú	__class__ÚtupleÚitems)r   rd   re   Ú	new_itemss       r   Úmove_objectro   �   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          ‰¦  «        |¦  «        }ˆfd„|D ¦   «         }ˆˆfd„t          ||¦  «        D ¦   «         }t          t	          j        |Ž ¦  «        S )Nrg   rh   ©r   r   r   r   c           	      ó„   •— g | ]<}t          t          t          ‰¦  «        |¦  «        ¦  «        t          |¦  «        z  ‘Œ=S r&   )Úsumr   r   Úlen)rT   ÚclusterrK   s     €r   rU   z snap_objects.<locals>.<listcomp>›   s>   ø€ ÐWÐWÐWÀ7�C••J˜tÑ$Ô$ gÑ.Ô.Ñ/Ô/µ#°g±,´,Ñ>ÐWÐWÐWr   c                 ó8   •‡— g | ]\  }Šˆˆˆfd „|D ¦   «         ‘ŒS )c           	      óD   •— g | ]}t          |‰‰|‰         z
  ¦  «        ‘ŒS r&   )ro   )rT   r   rK   Úavgrd   s     €€€r   rU   z+snap_objects.<locals>.<listcomp>.<listcomp>�   s-   ø€ ÐDÐDÐD°S��S˜$  c¨$¤i¡Ñ	0Ô	0ÐDÐDÐDr   r&   )rT   rv   ry   rK   rd   s     @€€r   rU   z snap_objects.<locals>.<listcomp>œ   sI   øø€ ð ð ð áˆG�Sð 	EÐDÐDÐDÐDÐD¸GÐDÑDÔDðð ð r   )ra   r   r   r)   Ú	itertoolsÚchain)rN   rK   rp   Ú	list_objsÚclustersÚavgsÚsnapped_clustersrd   s    `     @r   Úsnap_objectsr€   —   s§   øø€ Ø˜S¨¸Ð<Ð<¸TÔB€DÝ�T‘
”
€IÝ˜y­*°TÑ*:Ô*:¸IÑFÔF€HØWÐWÐWÐWÈhÐWÑWÔW€Dðð ð ð ð å ¨$Ñ/Ô/ðñ ô Ðõ •	”Ð!1Ð2Ñ3Ô3Ð3r   Úkeyc                 ó2  — |dv sJ ‚| |         }||z
  }||fg}|dk    r0|| d         k    sJ ‚|                      d| d         |z
  f¦  «         �n|dk    r/|| d         k    sJ ‚|                      d|| d         z
  f¦  «         nÑ|dk    rs|| d         k    sJ ‚|                      d| d         |z   f¦  «         |                      d| d         |z
  f¦  «         d	| v r |                      d	| d	         |z
  f¦  «         nX|dk    rR|| d         k    sJ ‚|                      d| d         |z   f¦  «         d
| v r |                      d
| d
         |z
  f¦  «         |                      t          |                      ¦   «         ¦  «        t          |¦  «        z   ¦  «        S )Nrr   r   r   rE   r   r   rD   rF   rj   ri   )Úappendrk   rl   rm   )r   r�   re   Ú	old_valuerL   rn   s         r   Úresize_objectr…   £   så  € ØÐ/Ð/Ð/Ð/Ð/Ø�C”€IØ�9Ñ€Dà	ˆeˆð€Ið ˆd‚{€{Ø˜˜Dœ	Ò!Ð!Ð!Ð!Ø×Ò˜' 3 t¤9¨uÑ#4Ð5Ñ6Ô6Ð6Ñ6Ø	�ŠˆØ˜˜Dœ	Ò!Ð!Ð!Ð!Ø×Ò˜' 5¨3¨t¬9Ñ#4Ð5Ñ6Ô6Ð6Ð6Ø	�ŠˆØ˜˜HœÒ%Ð%Ð%Ð%Ø×Ò˜( C¨¤M°DÑ$8Ð9Ñ:Ô:Ð:Ø×Ò˜( C¨¤M°DÑ$8Ð9Ñ:Ô:Ð:Ø�3ˆ;ˆ;Ø×Ò˜d C¨¤I°Ñ$4Ð5Ñ6Ô6Ð6øØ	�ŠˆØ˜˜Eœ
Ò"Ð"Ð"Ð"Ø×Ò˜( C¨¤M°DÑ$8Ð9Ñ:Ô:Ð:Ø�3ˆ;ˆ;Ø×Ò˜d C¨¤I°Ñ$4Ð5Ñ6Ô6Ð6Ø�=Š=�˜sŸyšy™{œ{Ñ+Ô+­e°IÑ.>Ô.>Ñ>Ñ?Ô?Ð?r   Úcurvec                 óh   ‡ — t          ‰ d         ‰ d         dd …         ¦  «        }ˆ fd„|D ¦   «         S )NÚptsr   c                 ó  •— g | �]\  }}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œ	‘�ŒS )	Ú
curve_edger   r   rD   r   rh   rg   N)	Úobject_typer   r   r   rD   r   rE   rF   Úorientation)r*   r+   Úabs)rT   Úp0Úp1r†   s      €r   rU   z"curve_to_edges.<locals>.<listcomp>À   s  ø€ ð ð ñ ñ ˆ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˜3¸bÀ¼eÀrÈ!Äuºn¸n°s°sÐRVð
	
ð 
	
ðñ ð r   )r)   )r†   Úpoint_pairss   ` r   Úcurve_to_edgesr‘   ¾   sP   ø€ Ý�e˜E”l E¨%¤L°°°Ô$4Ñ5Ô5€Kðð ð ð ð "ðñ ô ð r   Úrectc           	      óž  ‡ — ˆ fd„t          d¦  «        D ¦   «         \  }}}}|                     dd‰ d         ‰ d         ddœ¦  «         |                     dd‰ d	         ‰ d         ‰ d
         z   ‰ d         ‰ d
         z   ddœ¦  «         |                     dd‰ d         ddœ¦  «         |                     dd‰ d         ddœ¦  «         ||||gS )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r&   ©rG   )rT   Úxr’   s     €r   rU   z!rect_to_edges.<locals>.<listcomp>Ñ   s   ø€ Ð=Ð=Ð=¨q¥ T¡
¤
Ð=Ð=Ð=r   é   Ú	rect_edger   rj   r   rg   )r‹   rF   ri   r   rŒ   ri   rF   rD   )r‹   rF   rj   r   rD   rŒ   r   rh   )r‹   rE   r   rŒ   r   )r‹   rE   r   rŒ   )ÚrangeÚupdate)r’   r   r   r@   rA   s   `    r   Úrect_to_edgesr›   Ð   s)  ø€ Ø=Ð=Ð=Ð=µE¸!±H´HÐ=Ñ=Ô=Ñ€Cˆ��uØ‡J‚Jà&ØØ�t”*Ø˜5”kØð	
ð 	
ñô ð ð ‡M‚Mà&ØØ�t”*Ø˜”;  h¤Ñ/Ø˜8”n t¨H¤~Ñ5Øð	
ð 	
ñ	ô 	ð 	ð 	‡K‚Kà&ØØ�t”*Øð		
ð 	
ñô ð ð 
‡L‚Là&ØØ�t”*Øð		
ð 	
ñô ð ð �˜˜uÐ%Ð%r   Úlinec                 óV   — t          | ¦  «        }| d         | d         k    rdnd|d<   |S )Nr   r   rg   rh   rŒ   r•   )rœ   Úedges     r   Úline_to_edgerŸ   ø   s2   € Ý�‰:Œ:€DØ"& u¤+°°h´Ò"?Ð"?˜#˜#Àc€DˆÑØ€Kr   c                 ó†   — | 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£   þ   sQ   € ØˆMÔ€AØ�!€|€|ØˆuˆØ	
ˆfŠˆÝ˜SÑ!Ô!Ð"Ð"å%µÐ?Ð?ÀÔBÀ3ÑGÔGÐGr   ÚedgesrŒ   Ú	edge_typeÚ
min_lengthc                 ó”   ‡‡‡— ‰dvrt          d¦  «        ‚dt          dt          fˆˆˆfd„}t          t	          || ¦  «        ¦  «        S )N)rh   rg   NzOrientation must be 'v' or 'h'Úer   c                 óž   •— | d         dk    rdnd}‰�| d         ‰k    nd}‰d u p| d         ‰k    }t          |o|o| |         ‰k    ¦  «        S )NrŒ   rh   rF   rE   r‹   T)Úbool)r¨   ÚdimÚ
et_correctÚorient_correctr¥   r¦   rŒ   s       €€€r   Útestzfilter_edges.<locals>.test  so   ø€ Ø˜MÔ*¨cÒ1Ð1ˆhˆh°wˆØ6?Ð6K�Q�}Ô%¨Ò2Ð2ÐQUˆ
Ø$¨Ð,ÐO°°-Ô0@ÀKÒ0OˆÝ�JÐL >ÐL°q¸´vÀÒ7KÑMÔMÐMr   )r?   r
   rª   ra   rb   )r¤   rŒ   r¥   r¦   r®   s    ``` r   Úfilter_edgesr¯     s|   øøø€ ð Ð*Ð*Ð*ÝÐ9Ñ:Ô:Ð:ðN•ð N�$ð Nð Nð Nð Nð Nð Nð Nð Nõ •�t˜UÑ#Ô#Ñ$Ô$Ð$r   )NNr   )$rz   Úoperatorr   Útypingr   r   r   Ú_typingr   r	   r
   r   Ú
clusteringr   Ústrr   r   r   r"   r   r   r=   rB   rM   rW   rZ   r]   rc   ro   r€   r…   r‘   r›   rŸ   r£   r¯   r&   r   r   ú<module>rµ      s>  ðØ Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð2˜X eœ_ð 2°°c¸5°jÔ1Að 2ð 2ð 2ð 2ð3˜X eœ_ð 3°ð 3ð 3ð 3ð 3ð ˆj˜˜u d¨HÑ5Ô5€ð�Uð ˜vð ð ð ð ðM�vð M $ s¨E zÔ"2ð Mð Mð Mð Mð5˜ &Ô)ð 5¨fð 5ð 5ð 5ð 5ð˜ð  6ð ¨h°vÔ.>ð ð ð ð ð+˜ð + Eð +ð +ð +ð +ð�%ð ˜vð ¨(°5¬/ð ð ð ð ð(Y˜( 5œ/ð Y°ð Y¸Jð Yð Yð Yð Yð�h˜u”oð ¨Vð ¸
ð ð ð ð ðU�x ”ð U¨fð U¸ð Uð Uð Uð UðE�x ”ð E¨fð E¸ð Eð Eð Eð Eð@�Uð @ #ð @¨eð @¸ð @ð @ð @ð @ð,	4�x ”ð 	4¨cð 	4¸eð 	4È
ð 	4ð 	4ð 	4ð 	4ð@�uð @ 3ð @¨uð @¸ð @ð @ð @ð @ð6˜%ð  Jð ð ð ð ð$%&˜ð %& *ð %&ð %&ð %&ð %&ðP�uð  ð ð ð ð ðH�eð H 
ð Hð Hð Hð Hð "&Ø#Øð	%ð %Ø�EŒ?ð%à˜#”ð%ð ˜Œ}ð%ð ð	%ð
 ð%ð %ð %ð %ð %ð %r   