
    #j[                     \   U d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZ ddlmZmZ erddlmZ ddlZddlZdZeej        eej        f         Zeeef         Z G d	 d
          Z dede!fdZ"de#defdZ$dede%defdZ&	 	 d]de!ez  dededefdZ'de%de%de%de%fdZ(de%de%de%d e!de!f
d!Z)d"e%de%de%de%d e!de!fd#Z*e+e,e,f         Z-e+e,e,e,e,f         Z.e+e,e,e,e,e,e,f         Z/ee+e         e+ee,e,f         e+ee,e,e,e,f         e+ee,e,e,e,e,e,f         f         Z0d$Z1e/e2d%<   dede.fd&Z3d'e/d(e/de/fd)Z4d*e/d+e-de/fd,Z5d*e/d+e-de-fd-Z6d*e/d.e.de.fd/Z7d*e/d+e-de-fd0Z8d1e#de9fd2Z: ed3          Z;d4ee;         dee;         fd5Z<d"ee;ge9f         d4ee;         de+e=e;         e=e;         f         fd6Z>d7e,d8e,d9e%de?fd:Z@d;ee-         de.fd<ZA	 d^d=ee;         d>ee;ge,f         d?e;dz  de;dz  fd@ZBdAe%d=ee;         dee+e;dBf                  fdCZCd_de!dDe%de%fdEZDdFE                    dG dHD                       ZFde!defdIZGd1edefdJZHdKe.defdLZId*e/defdMZJdNdOdPdOde-fdQZK edRdOS          ZL G dT dUeeL                   ZMg dVZNg dWZOdXe%defdYZPdXe%defdZZQd[e!de!fd\ZRdS )`zMiscellaneous Routines.    N)CallableIterableIterator)escape)TYPE_CHECKINGAnyBinaryIOGenericTextIOTypeVarUnioncast)PDFTypeErrorPDFValueError)LTComponentic                   N    e Zd ZdZdedededdfdZdefdZd	e	d
e	de	ddfdZ
dS )open_filenamezContext manager that allows opening a filename
    (str or pathlib.PurePath type is supported) and closes it on exit,
    (just like `open`), but does nothing for file-like objects.
    filenameargskwargsreturnNc                 r   t          |t          j                  rt          |          }t          |t                    rt	          |g|R i || _        d| _        d S t          |t          j                  r#t          t          |          | _        d| _        d S t          dt          |                     )NTFzUnsupported input type: )
isinstancepathlibPurePathstropenfile_handlerclosingioIOBaser   AnyIOr   type)selfr   r   r   s       V/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pdfminer/utils.py__init__zopen_filename.__init__*   s    h 011 	%8}}Hh$$ 	L'+H'Ft'F'F'Fv'F'FDDLLL"),, 	L $UH 5 5D DLLLJ$x..JJKKK    c                     | j         S N)r   r$   s    r%   	__enter__zopen_filename.__enter__6   s      r'   exc_typeexc_valexc_tbc                 J    | j         r| j                                         d S d S r)   )r   r   close)r$   r,   r-   r.   s       r%   __exit__zopen_filename.__exit__9   s1    < 	&##%%%%%	& 	&r'   )__name__
__module____qualname____doc__
FileOrNamer   r&   r"   r+   objectr1    r'   r%   r   r   $   s         

L 
LC 
L3 
L4 
L 
L 
L 
L!5 ! ! ! !& && && &T & & & & & &r'   r   in_strr   c                     t          | t                    s$J t          t          |                                 |                                 S )z'Converts to bytes, encoding to unicode.)r   r   r#   encode)r9   s    r%   make_compat_bytesr<   >   s<    fc""55CV$5$555"==??r'   oc                    t          | t                    rft          j        |           }|d         t	          |           S 	 |                     |d                   S # t          $ r t	          |           cY S w xY wt	          |           S )z>Converts everything to string, if bytes guessing the encoding.encoding)r   bytescharset_normalizerdetectr   decodeUnicodeDecodeError)r=   encs     r%   make_compat_strrF   D   s    !U 	 '**z?"q66M	88C
O,,,! 	 	 	q66MMM	 1vvs   A A98A9ssizec                     |dk     r
| d |         S t          |           |k    r |dz
  dz  }| d |          d| | d           S | S )N         z ... )len)rG   rH   lengths      r%   shorten_strrO   R   s_    axx$x
1vv}}(qGVG*001fWXX;000r'   utf-8ignorebytesorstringr?   	erractionc                     t          | t                    r| S t          | t                    s$J t          t          |                                 |                     ||          S )z^When Py2 str.encode is called, it often means bytes.encode in Py3.

    This does either.
    )r   r   r@   r#   rC   )rR   r?   rS   s      r%   compatible_encode_methodrU   \   s`     -%% mU++EESm1D1D-E-EEE+)444r'   leftabove
upper_leftc                     | |z   |z
  }t          || z
            }t          ||z
            }t          ||z
            }||k    r||k    r| S ||k    r|S |S r)   )abs)rV   rW   rX   ppapbpcs          r%   paeth_predictorr_   k   sm     	uz!A	QXB	QYB	Q^		B 
RxxB"HH	rr'   colorscolumnsbitspercomponentdatac                 x   |dk    rd| }t          |          | |dz  z  }||z  }g }t          dt          |          |          D ]d}g }	t          |          D ];}
|||
z            }|
|k    r||	|
|z
           z  }|dz  }|	                    |           <|                    |	           et          |          S )zReverse the effect of the TIFF predictor 2

    Documentation:
    https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf
    (Section 14, page 64)
        Unsupported `bitspercomponent': r      )r   rangerM   appendextendr@   )r`   ra   rb   rc   	error_msgbppnbytesbuf
scanline_irawi	new_values               r%   apply_tiff_predictorrs   }   s     1I7GII	I&&&
$)
*Cs]FCAs4yy&11  
v 	" 	"AZ!^,ICxxSS\)	S 	JJy!!!!

3::r'   predc                     |dvrd| }t          |          ||z  |z  dz  }||z  dz  }g }t          d|z            }	t          dt          |          |dz             D ]}
||
         }||
dz   |
dz   |z            }g }|dk    rt          |          }n|dk    rWt	          |          D ]E\  }}||z
  dk     rdnt          |||z
                     }||z   dz  }|                    |           Fnc|dk    r7t          ||	d	
          D ]"\  }}||z   dz  }|                    |           #n&|dk    rqt	          |          D ]`\  }}||z
  dk     rdnt          |||z
                     }t          |	|                   }|||z   dz  z   dz  }|                    |           an|dk    rt	          |          D ]\  }}||z
  dk     rd}d}n0t          |||z
                     }t          |	||z
                     }t          |	|                   }t          |||          }||z   dz  }|                    |           nt          d|           |	                    |           |}	t          |          S )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )re      rf   re       r   rv      rL   F)strict      zUnsupported predictor value: )r   listrh   rM   	enumerateintri   zipr_   rj   r@   )rt   r`   ra   rb   rc   msgrm   rl   rn   
line_abovero   filter_typeline_encodedrp   jsub_x	raw_x_bppraw_xup_xprior_x	average_xpaeth_xprior_x_bpppaeths                           r%   apply_png_predictorr      s(    v%%C1ACCC   g 00A5F
#
#q
(C
Cg'((JAs4yy&1*55 H H
:&JNZ!^f-DDE!|$$CCA &l33 " "5!"S1AA#c!c'l2C2C	*c1

5!!!!"
 A "%\:e!L!L!L " "g3.

5!!!!" A !*, 7 7 " "9!"S1AA#c!c'l2C2C	jm,,"i'&9a%??3F

5!!!!	" A (55 
" 
"
7s7Q;; !I"#KK #CCL 1 1I"%jS&9":":Kjm,,'	7KHH 5C/

5!!!!
"   M M MNNN

3

::r'   )rv   r   r   rv   r   r   MATRIX_IDENTITYc                     	 | \  }}}}t          |          t          |          t          |          t          |          fS # t          $ r}t          d          |d }~ww xY w)NzCould not parse rectangle)float
ValueErrorr   )r=   x0y0x1y1errs         r%   
parse_rectr     sq    BRRRyy%))U2YYb		99 B B B788cABs   A A 
A"AA"m1m0c                     | \  }}}}}}|\  }}	}
}}}	 ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |z   |	|z  ||z  z   |z   fS r)   r8   )r   r   a1b1c1d1e1f1a0b0c0d0e0f0s                 r%   mult_matrixr     s    !RRR!RRR5
R"r'
R"r'
R"r'
R"r'
R"r'B
R"r'B r'   mvc                 ^    | \  }}}}}}|\  }}	||||||z  |	|z  z   |z   ||z  |	|z  z   |z   fS )zTranslates a matrix by (x, y) inside the projection.

    The matrix is changed so that its origin is at the specified point in its own
    coordinate system. Note that this is different from translating it within the
    original coordinate system.r8   
r   r   abcdefxys
             r%   translate_matrixr     sT     Q1aAFQaAq1uq1u}q(!a%!a%-!*;;;r'   c                 V    | \  }}}}}}|\  }}	||z  ||	z  z   |z   ||z  ||	z  z   |z   fS )zApplies a matrix to a point.r8   r   s
             r%   apply_matrix_ptr   '  sJ    Q1aAFQq51q5=1a!ea!ema///r'   rectc           	      T   |\  }}}}||f}||f}||f}||f}	t          | |          \  }
}t          | |          \  }}t          | |          \  }}t          | |	          \  }}t          |
|||          t          ||||          t          |
|||          t          ||||          fS )a  Applies a matrix to a rectangle.

    Note that the result is not a rotated rectangle, but a rectangle with the same
    orientation that tightly fits the outside of the rotated content.

    :param m: The rotation matrix.
    :param rect: The rectangle coordinates (x0, y0, x1, y1), where x0 < x1 and y0 < y1.
    :returns a rectangle with the same orientation, but that would fit the rotated
        content.
    )r   minmax)r   r   r   r   r   r   left_bottomright_bottom	right_topleft_topleft1bottom1right1bottom2right2top1left2top2s                     r%   apply_matrix_rectr   .  s     RRr(K8LRIBxH&q+66UG'<88VW$Q	22NVT#Ax00MUD 	E5&&))GWdD))E5&&))GWdD))	 r'   c                 J    | \  }}}}}}|\  }}	||z  ||	z  z   ||z  ||	z  z   fS )zCEquivalent to apply_matrix_pt(M, (p,q)) - apply_matrix_pt(M, (0,0))r8   )
r   r   r   r   r   r   _e_fr[   qs
             r%   apply_matrix_normr   L  s@    Q1aRFQq51q5=!a%!a%-''r'   r   c                 :    t          | t          t          f          S r)   )r   r~   r   r   s    r%   isnumberr   V  s    a#u&&&r'   _Tobjsc              #   l   K   t                      }| D ] }||v r|                    |           |V  !dS )zEliminates duplicated elements.N)setadd)r   doneobjs      r%   uniqr   ]  sN      55D  $;;					 r'   c                     g }g }|D ]8} | |          r|                     |           #|                     |           9||fS )z9Split a list into two classes according to the predicate.)ri   )rt   r   tr   r   s        r%   fsplitr   g  sV    
A
A  499 	HHSMMMMHHSMMMMa4Kr'   v0v1r   c                 h    t          t          |           |z  t          ||z             |z            S )zReturns a discrete range.)rh   r~   )r   r   r   s      r%   dranger   s  s+    RAs26{{a/000r'   ptsc                     t           t           t            t            f}|\  }}}}| D ]E\  }}t          ||          }t          ||          }t          ||          }t          ||          }F||||fS )z7Compute a minimal rectangle that covers all the points.)INFr   r   )r   limitr   r   r   r   r   r   s           r%   	get_boundr   x  sy    cTC4(ERR  1QZZQZZQZZQZZr2r>r'   seqfuncmaxobjc                 B    d}| D ]} ||          }|||k     r||}}|S )z;Picks the object obj where func(obj) has the highest value.Nr8   )r   r   r   maxscorer   scores         r%   pickr     sD     H . .S		x%//"'vXMr'   n.c              #      K   g }|D ]=}|                     |           t          |          | k    rt          |          V  g }>dS )z$Groups every n elements of the list.N)ri   rM   tuple)r   r   rr   s       r%   choplistr     sW      
A  	q66Q;;((NNNA	 r'   defaultc                 b    t          |           }|s|S t                              | dd          S )z7Unpacks variable-length unsigned integers (big endian).bigF)	byteordersigned)rM   r~   
from_bytes)rG   r   rN   s      r%   nunpackr     s3    VVF @~~a5~???r'    c              #   4   K   | ]}t          |          V  d S r)   )chr).0r   s     r%   	<genexpr>r     sD       D D	 FFD D D D D Dr'   (   r   rv   rL   rz   r{   rK      rJ   re   	   
                                       r  i  i  i  i  i  i  i  i      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   r   i"   i    i!   i&   i   i   i  iD   i9   i:   i"  i0   i   i   i   i   i   i   i"!  i  i  iA  iR  i`  ix  i}  i1  iB  iS  ia  i~  r   i                                       r                                                                                                                                                                                                                                                      rx   c                     |                      d          rt          | dd         dd          S d                    d | D                       S )z+Decodes a PDFDocEncoding string to Unicode.s   rL   Nzutf-16berQ   r   c              3   0   K   | ]}t           |         V  d S r)   )PDFDocEncoding)r   r   s     r%   r   zdecode_text.<locals>.<genexpr>  s'      44Q~a(444444r'   )
startswithr   join)rG   s    r%   decode_textr    sQ    ||K   51QRR5*h///ww44!444444r'   c                 N    t          | t                    rdS t          |           S )z"Encodes a string for SGML/XML/HTMLr   )r   r@   r   r   s    r%   rE   rE     s%    !U r!99r'   bboxc                 2    | \  }}}}|dd|dd|dd|dS )Nz.3f,r8   )r  r   r   r   r   s        r%   bbox2strr    s@    RR111r1111111111r'   c                 J    | \  }}}}}}d|dd|dd|dd|dd|dd|ddS )N[z.2fr  z, (z)]r8   )r   r   r   r   r   r   r   s          r%   
matrix2strr    s_    Q1aABqBBBqBBBqBBBqBBBBBBBBBBBr'   obj1r   obj2c                 *   t          | j        |j                  t          | j        |j                  }}t          | j        |j                  t          | j        |j                  }}||z
  ||z
  }}|| j        z
  |j        z
  || j        z
  |j        z
  }	}|dk     rX|	dk     rR| j        | j        z   dz  | j        | j        z   dz  }}
|j        |j        z   dz  |j        |j        z   dz  }}|
|z
  ||z
  fS t          d|          t          d|	          fS )a  A distance function between two TextBoxes.

    Consider the bounding rectangle for obj1 and obj2.
    Return vector between 2 boxes boundaries if they don't overlap, otherwise
    returns vector between boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rL   )r   r   r   r   r   r   widthheight)r  r  r   r   r   r   owohiwihxc1yc1xc2yc2s                 r%   vecBetweenBoxesr    s    DGTW%%s47DG'<'<RDGTW%%s47DG'<'<RRbRTZ$*,b4;.>.LR	Avv"q&&w(A-$'0AQ/Fcw(A-$'0AQ/FcSy#)##1bzz3q"::%%r'   LTComponentT)boundc                       e Zd ZdZddededdfdZdefdZde	e
         fd	Zdefd
ZdedefdZdede	e         fdZdee
         ddfdZde
ddfdZde
ddfdZdede	e
         fdZdS )PlanezA set-like data structure for objects placed on a plane.

    Can efficiently find objects in a certain rectangular area.
    It maintains two parallel lists of objects, each of
    which is sorted by its x or y coordinate.
    r  r  gridsizer   Nc                     g | _         t                      | _        i | _        || _        |\  | _        | _        | _        | _        d S r)   )	_seqr   _objs_gridr  r   r   r   r   )r$   r  r  s      r%   r&   zPlane.__init__  s<    (*	(+
68
 /3,$'47DGGGr'   c                 (    dt          |           dS )Nz<Plane objs=>)r|   r*   s    r%   __repr__zPlane.__repr__  s    -d4jj----r'   c                 *      fd j         D             S )Nc              3   .   K   | ]}|j         v |V  d S r)   r  )r   r   r$   s     r%   r   z!Plane.__iter__.<locals>.<genexpr>  s/      >>C4:,=,=,=,=,=,=>>r'   )r  r*   s   `r%   __iter__zPlane.__iter__  s    >>>>ty>>>>r'   c                 *    t          | j                  S r)   )rM   r  r*   s    r%   __len__zPlane.__len__  s    4:r'   r   c                     || j         v S r)   r  )r$   r   s     r%   __contains__zPlane.__contains__  s    dj  r'   c              #     K   |\  }}}}|| j         k    s!| j        |k    s|| j        k    s| j        |k    rd S t	          | j         |          }t	          | j        |          }t          | j        |          }t          | j        |          }t          ||| j                  D ]!}t          ||| j                  D ]}||fV  	"d S r)   )r   r   r   r   r   r   r   r  )r$   r  r   r   r   r   grid_ygrid_xs           r%   	_getrangezPlane._getrange  s      RR==DGrMMR47]]dgmmF""""RT]33 	' 	'F R77 ' 'v&&&&&'	' 	'r'   r   c                 :    |D ]}|                      |           d S r)   )r   )r$   r   r   s      r%   rj   zPlane.extend	  s,     	 	CHHSMMMM	 	r'   c                 >   |                      |j        |j        |j        |j        f          D ]:}|| j        vrg }|| j        |<   n| j        |         }|                    |           ;| j                            |           | j        	                    |           dS )zPlace an object.N)
r  r   r   r   r   r  ri   r  r  r   )r$   r   kr   s       r%   r   z	Plane.add  s     @AA 	 	A
""(* !
1JqMHHSMMMM	
sr'   c                 H   |                      |j        |j        |j        |j        f          D ]Y}t          j        t          t                    5  | j	        |         
                    |           ddd           n# 1 swxY w Y   Z| j        
                    |           dS )zDisplace an object.N)r  r   r   r   r   
contextlibsuppressKeyErrorr   r  remover  )r$   r   r  s      r%   r  zPlane.remove  s     @AA 	* 	*A$Xz:: * *
1$$S)))* * * * * * * * * * * * * * *
#s   !A<<B 	B 	c              #   .  K   |\  }}}}t                      }|                     |          D ]g}|| j        vr| j        |         D ]M}||v r|                    |           |j        |k    s!||j        k    s|j        |k    s||j        k    rI|V  NhdS )z)Finds objects that are in a certain area.N)r   r  r  r   r   r   r   r   )	r$   r  r   r   r   r   r   r  r   s	            r%   findz
Plane.find   s      RRuu%% 		 		A
""z!}  $;;6R<<2<<36R<<2<<						 		r'   )r  )r2   r3   r4   r5   Rectr~   r&   r   r  r   r  r  r  r7   boolr  Pointr  r   rj   r   r  r  r8   r'   r%   r  r    s|        4 4T 4S 4$ 4 4 4 4.# . . . .?(<0 ? ? ? ?    ! !4 ! ! ! !
'd 
'x 
' 
' 
' 
'8L1 d    
| 
 
 
 
 
, 4     (<"8      r'   r  )rq   r   r   r   )r   lr   valuec                 x   d| cxk     rdk     sn J g }d}| dk    r
t          | d          \  } }|dk    rF|                    dt          |                    |                    dt          |dz                       n|dk    rC|                    dt          |                    |                    dt          |                    nV|dk    }|r&|                    dt          |                    |dz  }|                    |rdndt          |         |z             |dz  }| dk    
d                    |          S )	z,Format a number as lowercase Roman numerals.r   i  r   r   rv   r{   rK   r   )divmodinsert
ROMAN_ONESROMAN_FIVESr  )r
  resultindex	remainder	over_fives        r%   format_int_romanr  4  sN   utFE
1**!%,,y>>MM!Z.///MM!Z	23333!^^MM!Z.///MM![/0000!QI aU!3444Q	MMy/!!aE1BY1NOOO
 1**  776??r'   c                 $   | dk    sJ g }| dk    rXt          | dz
  t          t          j                            \  } }|                    t          j        |                    | dk    X|                                 d                    |          S )z5Format a number as lowercase letters a-z, aa-zz, etc.r   rv   r   )r  rM   stringascii_lowercaseri   reverser  )r
  r  r  s      r%   format_int_alphar  M  s    19999F
1**!%!)S1G-H-HIIyf,Y7888 1** NN776??r'   paddedc                     t          |           dk    r| S | d         dk    r| S t          |           k    r| S t          fd|  d         D                       r| d          S | S )a1  Remove block padding as described in PDF 1.7 section 7.6.2:

    > For an original message length of M, the pad shall consist of 16 -
    (M mod 16) bytes whose value shall also be 16 - (M mod 16).
    > Note that the pad is present when M is evenly divisible by 16;
    it contains 16 bytes of 0x10.
    r   r  c              3   $   K   | ]
}|k    V  d S r)   r8   )r   r   paddings     r%   r   zunpad_aes.<locals>.<genexpr>l  s'      
3
3A1<
3
3
3
3
3
3r'   N)rM   all)r  r  s    @r%   	unpad_aesr   Z  s     6{{aRjG||V

3
3
3
3		!2
3
3
333 !ixi  Mr'   )rP   rQ   r)   )r   )Sr5   r    r   r  collections.abcr   r   r   htmlr   typingr   r   r	   r
   r   r   r   r   pdfminer.pdfexceptionsr   r   pdfminer.layoutr   r   rA   r   r   r   r!   r6   r"   r   r@   r<   r7   rF   r~   rO   rU   r_   rs   r   r   r   r  r  MatrixPathSegmentr   __annotations__r   r   r   r   r   r   r  r   r   r   r|   r   rh   r   r   r   r   r   r  r  r  rE   r  r  r  r  r  r  r  r  r  r   r8   r'   r%   <module>r)     s      				   8 8 8 8 8 8 8 8 8 8      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ? > > > > > > > ,++++++         7#S")34
fh& & & & & & & &4c e    v #    3 c c     5 53;55 5 		5 5 5 5# c s s    $14<A
   8\
\\ \ 	\
 \ \ \ \ \~ 	eUlUE5%'(	ueUE5%7	8	#J	#ue
	#ueUE
)*	#ueUE5%
78: - , , ,B# B$ B B B BF  6    < <5 <V < < < <0v 0% 0E 0 0 0 0 t     <( (E (e ( ( ( (' '4 ' ' ' ' WT]]x|     	2$*% 	Xb\ 	eDHdSUhDV>W 	 	 	 	1u 1% 1C 1E 1 1 1 1
	8E? 	t 	 	 	 	  	"
B4;
 I $Y	    (2, 8E"c'N+C    @ @u @s @3 @ @ @ @  D DAD D D D DN55 5S 5 5 5 53 3    24 2C 2 2 2 2
C& CS C C C C
&- &} & & & & &4 w~];;;K K K K KGL! K K K\ "!!
ooC C    2
C 
C 
 
 
 
e       r'   