
    NgDQ                        U d Z ddlZddlZddlZddl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mZmZmZmZmZmZmZmZ erddlmZ ddlZdZeej        eej        f         Zeee	f         Z  G d d	e!          Z"d
ede#fdZ$de!defdZ%dede&defdZ'	 dVdee#ef         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#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         Z/d"Z0e.e1d#<   d$e.d%e.de.fd&Z2d'e.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e6fd-Z7 ed.          Z8d/ee8         dee8         fd0Z9de
e8ge6f         d/ee8         deee8         ee8         f         fd1Z:d2e+d3e+d4e&de;fd5Z<d6ee,         de-fd7Z=	 dWd8ee8         d9e
e8ge+f         d:ee8         dee8         fd;Z>d<e&d8ee8         deee8d=f                  fd>Z?dXde#d?e&de&fd@Z@dAA                    dB dCD                       ZBde#defdDZCd,edefdEZDdFe-defdGZEd'e.defdHZFdIdJdKdJde,fdLZG edMdJN          ZH G dO dPeeH                   ZIg dQZJg dRZKdSe&defdTZLdSe&defdUZMdS )Yz
Miscellaneous Routines.
    N)escape)AnyBinaryIOCallableDictGenericIterableIteratorListOptionalSetTextIOTupleTypeVarUnionTYPE_CHECKINGcast   )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_filenamez
    Context 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          |          z            )NTFzUnsupported input type: %s)
isinstancepathlibPurePathstropenfile_handlerclosingioIOBaser   AnyIO	TypeErrortype)selfr   r   r   s       J/var/www/html/ai-engine/env/lib/python3.11/site-packages/pdfminer/utils.py__init__zopen_filename.__init__1   s    h 011 	%8}}Hh$$ 	K'+H'Ft'F'F'Fv'F'FDDLLL"),, 	K $UH 5 5D DLLL84>>IJJJ    c                     | j         S N)r"   r)   s    r*   	__enter__zopen_filename.__enter__=   s      r,   exc_typeexc_valexc_tbc                 J    | j         r| j                                         d S d S r.   )r#   r"   close)r)   r1   r2   r3   s       r*   __exit__zopen_filename.__exit__@   s1    < 	&##%%%%%	& 	&r,   )__name__
__module____qualname____doc__
FileOrNamer   r+   r&   r0   objectr6    r,   r*   r   r   *   s         
K 
KC 
K3 
K4 
K 
K 
K 
K!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)r>   s    r*   make_compat_bytesrA   E   s<    fc""55CV$5$5555==??r,   oc                     t          | t                    rOt          j        |           }	 |                     |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detectdecodeUnicodeDecodeErrorr    )rB   encs     r*   make_compat_strrK   K   sv    !U  '**	88C
O,,,! 	 	 	q66MMM	 1vvs   A A"!A"ssizec                     |dk     r
| d |         S t          |           |k    r/|dz
  dz  }d                    | d |         | | d                    S | S )N         z	{} ... {})lenformat)rL   rM   lengths      r*   shorten_strrU   W   sa    axx$x
1vv}}(q!!!GVG*ak:::r,   utf-8ignorebytesorstringrD   	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    rE   r(   rH   )rX   rD   rY   s      r*   compatible_encode_methodr[   a   s`     -%% mU++EESm1D1D-E-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)r\   r]   r^   ppapbpcs          r*   paeth_predictorre   n   sm     	uz!A	QXB	QYB	Q^		B 
RxxB"HH	rr,   predcolorscolumnsbitspercomponentdatac                    |dvrd|z  }t          |          ||z  |z  dz  }||z  dz  }d}d|z  }	t          dt          |          |dz             D ]}
||
         }||
dz   |
dz   |z            }d}|dk    r||z  }n|dk    rVt          |          D ]D\  }}||z
  dk     rd}nt	          |||z
                     }||z   dz  }|t          |f          z  }En\|d	k    r3t          ||	          D ] \  }}||z   dz  }|t          |f          z  }!n#|d
k    rpt          |          D ]_\  }}||z
  dk     rd}nt	          |||z
                     }t	          |	|                   }|||z   d	z  z   dz  }|t          |f          z  }`n|dk    rt          |          D ]\  }}||z
  dk     rd}d}n0t	          |||z
                     }t	          |	||z
                     }t	          |	|                   }t          |||          }||z   dz  }|t          |f          z  }nt          d|z            ||z  }|}	|S )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )   r   z"Unsupported `bitspercomponent': %drl   r,       r   r      rQ         zUnsupported predictor value: %d)
ValueErrorrangerR   	enumerateintrE   zipre   )rf   rg   rh   ri   rj   msgnbytesbppbuf
line_above
scanline_ifilter_typeline_encodedraw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%%25EEoog 00A5F
#
#q
(C
C7"JAs4yy&1*55 N N
:&JNZ!^f-DDE!<CCA &l33 ' '5s7Q;; !II #CCL 1 1I*c1ueX&' A $'|Z#@#@ ' 'w3.ueX&' A !*, 7 7 ' '9s7Q;; !II #CCL 1 1Ijm,,"i'&9a%??3FueX&' A (55 
' 
'
7s7Q;; !I"#KK #CCL 1 1I"%jS&9":":Kjm,,'	7KHH 5C/ueX&
' >LMMMs


Jr,   )r   r   r   r   r   r   MATRIX_IDENTITY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.   r=   )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 )zTranslates a matrix by (x, y).r=   
r   r   abcdefxys
             r*   translate_matrixr      sR    Q1aAFQaAq1uq1u}q(!a%!a%-!*;;;r,   c                 X    | \  }}}}}}|\  }}		 ||z  ||	z  z   |z   ||z  ||	z  z   |z   fS r.   r=   r   s
             r*   apply_matrix_ptr     sM    Q1aAFQ&q51q5=1a!ea!ema///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))r=   )
r   r   r   r   r   r   r   r   ra   qs
             r*   apply_matrix_normr     s@    Q1aAFQq51q5=!a%!a%-''r,   r   c                 :    t          | t          t          f          S r.   )r   rt   floatr   s    r*   isnumberr     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     sI      55D  $;;				
Fr,   c                     g }g }|D ]8} | |          r|                     |           #|                     |           9||fS )z9Split a list into two classes according to the predicate.)append)rf   r   tr   r   s        r*   fsplitr   '  sV    
A
A  499 	HHSMMMMHHSMMMMa4Kr,   v0v1r   c                 h    t          t          |           |z  t          ||z             |z            S )zReturns a discrete range.)rr   rt   )r   r   r   s      r*   dranger   3  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.)INFminmax)r   limitx0y0x1y1r   r   s           r*   	get_boundr   8  sy    cTC4(ERR  A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.Nr=   )r   r   r   maxscorer   scores         r*   pickr   D  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)r   rR   tuple)r   r   rr   s       r*   choplistr   P  sR      
A  	q66Q;;((NNNA
Fr,   defaultc                    t          |           }|s|S |dk    rt          |           S |dk    r.t          t          t	          j        d|           d                   S |dk    r1t          t          t	          j        dd| z             d                   S |dk    r.t          t          t	          j        d|           d                   S |d	k    r.t          t          t	          j        d
|           d                   S t          d|z            )z/Unpacks 1 to 4 or 8 byte integers (big endian).r   rQ   z>Hr   ro   z>Lrm   rp   rl   z>Qzinvalid length: %d)rR   ordr   rt   structunpackr'   )rL   r   rT   s      r*   nunpackr   [  s    VVF 7	11vv	1CtQ//2333	1CtWq[99!<===	1CtQ//2333	1CtQ//2333,v5666r,    c              #   4   K   | ]}t          |          V  d S r.   )chr).0r   s     r*   	<genexpr>r   n  sD       D D	 FFD D D D D Dr,   (   r   r   rQ   ro   rp   rP      rO   rl   	   
                                       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                                                                                                                                                                                                                                                      rn   c                     |                      d          rt          | dd         dd          S d                    d | D                       S )z+Decodes a PDFDocEncoding string to Unicode.s   rQ   Nzutf-16berW   r   c              3   0   K   | ]}t           |         V  d S r.   )PDFDocEncoding)r   r   s     r*   r   zdecode_text.<locals>.<genexpr>z  s'      44Q~a(444444r,   )
startswithr    join)rL   s    r*   decode_textr  u  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   rE   r   r   s    r*   rJ   rJ   }  s%    !U r!99r,   bboxc                 @    | \  }}}}d                     ||||          S )Nz{:.3f},{:.3f},{:.3f},{:.3f}rS   )r  r   r   r   r   s        r*   bbox2strr    s*    RR(//BB???r,   c                 H    | \  }}}}}}d                     ||||||          S )Nz.[{:.2f},{:.2f},{:.2f},{:.2f}, ({:.2f},{:.2f})]r  )r   r   r   r   r   r   r   s          r*   
matrix2strr    s3    Q1aA;BB1aAqRSTTTr,   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 betweeen boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rQ   )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          |           z  S )Nz<Plane objs=%r>)listr/   s    r*   __repr__zPlane.__repr__  s     4::--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.   )rR   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*   extendz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  r   r  r  r   )r)   r   kr   s       r*   r   z	Plane.add  s     @AA 	 	A
""(* !
1JqMHHSMMMM	
sr,   c                 
   |                      |j        |j        |j        |j        f          D ]:}	 | j        |                             |           $# t          t          f$ r Y 7w xY w| j	                            |           dS )zdisplace an object.N)
r  r   r   r   r   r  removeKeyErrorrq   r  )r)   r   r  s      r*   r  zPlane.remove  s     @AA 	 	A
1$$S))))j)   
#s    AA&%A&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  )r7   r8   r9   r:   Rectrt   r+   r    r  r
   r  r  r  r<   boolr  Pointr  r	   r  r   r  r  r=   r,   r*   r  r    s|        4 4T 4S 4$ 4 4 4 4.# . . . .?(<0 ? ? ? ?    ! !4 ! ! ! !
'd 
'x 
' 
' 
' 
'8L1 d    
| 
 
 
 
 
, 4     (<"8      r,   r  )ir   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   r   rp   rP   r   )divmodinsert
ROMAN_ONESROMAN_FIVESr  )r  resultindex	remainder	over_fives        r*   format_int_romanr    sP    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   r   r   )r  rR   stringascii_lowercaser   reverser  )r  r  r  s      r*   format_int_alphar    s     19999F
1**!%!)S1G-H-HIIyf,Y7888 1** NN776??r,   )rV   rW   r.   )r   )Nr:   r$   r   r  r   htmlr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   layoutr   rF   r   r   r    r%   r;   r&   r<   r   rE   rA   rK   rt   rU   r[   re   r   r   r  r  MatrixPathSegmentr   __annotations__r   r   r   r   r  r   r   r   r   rr   r   r   r   r   r   r  r  r  rJ   r  r  r  r  r  r  r  r  r  r=   r,   r*   <module>r     sZ     
			                                            &  $######      7#S")34
fh& & & & &F & & &6c e    	v 	# 	 	 	 	3 c c     QY
5 
5$
503
5JM
5
5 
5 
5 
5# c s s    $^
^^%(^<?^GL^
^ ^ ^ ^B 	eUlUE5%'(	ueUE5%7	8	#J	#ue
	#ueUE
)*	#ueUE5%
78: - , , ,F  6    < <5 <V < < < <0v 0% 0E 0 0 0 0( (E (e ( ( ( (' '4 ' ' ' ' WT]]x|     	2$*% 	Xb\ 	eDHdSUhDV>W 	 	 	 	1u 1% 1C 1E 1 1 1 1
	8E? 	t 	 	 	 	 LP	 		"	%rdEk2	<DRL	b\	 	 	 	 (2, 8E"c'N+C    7 7u 7s 73 7 7 7 7&  D DAD D D D DN55 5S 5 5 5 53 3    @4 @C @ @ @ @
U& US U U U U
&- &} & & & & &4 w~];;;M M M M MGL! M M M` "!!
ooC C    4C C      r,   