
     h@:                        U d Z dZdZddlZddlZddlZddlmZ ddlm	Z	 ddl
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mZ 	 dd
lmZ n# e$ r	 dd
lmZ Y nw xY wddlmZmZmZ eeeeef         eeeef         eeeef         f         Z ee!d<   eeeeeeef         Z"ee!d<   eZ#ee$e#f         Z%dZ&dZ'dZ(dZ)de*de*de*fdZ+dSde#dee,         de*fdZ-de#de*fdZ.de#de/fdZ0de#ddfdZ1de#dee*         de*fdZ2de#de,de*fd Z3de#de*fd!Z4d"e d#e de fd$Z5de#ddfd%Z6i Z7eee$e*f         e*f         e!d&<   d'ee$e*f         de*fd(Z8ed#e$de$fd)            Z9ed#e*de$fd*            Z9d#ee$e*f         de$fd+Z9ed#e$de,fd,            Z:ed#e*de*fd-            Z:ed#e,de,fd.            Z:d#ee,e$e*f         dee,e*f         fd/Z:d#e*de*fd0Z;d1e,de$fd2Z<d3Z=d4e,d5e,d6e,de,fd7Z>dTd9e$d:e,ddfd;Z?d9e$ddfd<Z@	 dUd>e$d?e$d@e$ddfdAZA	 dUd>e$d?e$d@e$ddfdBZBdUdCe$d@e$ddfdDZCdUdCe$d@e$ddfdEZDd9e$dFe$ddfdGZEdHe$defdIZF	 dVdKe$dLee$ef         dHee$e$f         dMe/ddf
dNZGdOe,de$fdPZHe	 G dQ dR                      ZIdS )Wz"Utility functions for PDF library.zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N
getencoder)	dataclass)DEFAULT_BUFFER_SIZE)SEEK_CUR)	IOAnyCallableDictOptionalPatternTupleUnionoverload)	TypeAlias   )STREAM_TRUNCATED_PREMATURELYDeprecationErrorPdfStreamErrorTransformationMatrixTypeCompressedTransformationMatrixz1{} is deprecated and will be removed in pypdf {}.z-{} is deprecated and was removed in pypdf {}.zA{} is deprecated and will be removed in pypdf {}. Use {} instead.z={} is deprecated and was removed in pypdf {}. Use {} instead.header1header2returnc                 6   d}g }| |v r(|                     |                    |                      ||v r(|                     |                    |                     t          |          dk    rt          d| d|d          |t	          |                   S )N)s   %PDF-1.3s   %PDF-1.4s   %PDF-1.5s   %PDF-1.6s   %PDF-1.7s   %PDF-2.0r   zneither z nor z are proper headers)appendindexlen
ValueErrormax)r   r   versionspdf_header_indicess       H/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pypdf/_utils.py_get_max_pdf_version_headerr$   O   s    H (!!(.."9"9:::(!!(.."9"9:::
!##RGRRGRRRSSSC*++,,    streammaxcharsc                     d}	 |                      d          }|                                s|sn||z  }t          |          |k    rnF|S )a;  
    Read non-whitespace characters and return them.

    Stops upon encountering whitespace or when maxchars is reached.

    Args:
        stream: The data stream from which was read.
        maxchars: The maximum number of bytes returned; by default unlimited.

    Returns:
        The data which was read.
    r%   Tr   )readisspacer   )r&   r'   txttoks       r#   read_until_whitespacer-   b   s`     Ckk!nn;;== 	 	s
s88x Jr%   c                 ~    |                      d          }|t          v r|                      d          }|t          v |S )z
    Find and read the next non-whitespace character (ignores whitespace).

    Args:
        stream: The data stream from which was read.

    Returns:
        The data which was read.
    r   )r)   WHITESPACESr&   r,   s     r#   read_non_whitespacer1   z   s?     ++a..C


kk!nn 

Jr%   c                     t           d         }d}|t           v r#|                     d          }|dz  }|t           v #|dk    S )a  
    Similar to read_non_whitespace, but return a boolean if more than one
    whitespace character was read.

    Args:
        stream: The data stream from which was read.

    Returns:
        True if more than one whitespace was skipped, otherwise return False.
    r   r   )r/   r)   )r&   r,   cnts      r#   skip_over_whitespacer4      sM     a.C
C


kk!nnq 

 7Nr%   c                     |                      d          }|                     dd           |dk    r|dvr|                      d          }|dvd S d S d S )Nr      %)   
   )r)   seekr0   s     r#   skip_over_commentr;      sh    
++a..C
KKA
d{{''++a..C '''' {''r%   regexc                 N   d}	 |                      d          }|s|S |                    ||z             }|h|                     |                                t	          |          t	          |          z   z
  d           ||z   d|                                         }n||z  }|S )z
    Read until the regular expression pattern matched (ignore the match).
    Treats EOF on the underlying stream as the end of the token to be matched.

    Args:
        regex: re.Pattern

    Returns:
        The read bytes.
    r%   T   Nr   )r)   searchr:   startr   )r&   r<   namer,   ms        r#   read_until_regexrC      s     D	kk"oo 	KLL$$=KK		SYYS%9:A>>>3J!'')),D	 Kr%   to_readc                     |                                  |k     rt          d          |                     | t                     |                     |          }|                     | t                     |S )a  
    Given a stream at position X, read a block of size to_read ending at position X.

    This changes the stream's position to the beginning of where the block was
    read.

    Args:
        stream:
        to_read:

    Returns:
        The data which was read.
    z!Could not read malformed PDF file)tellr   r:   r   r)   )r&   rD   r)   s      r#   read_block_backwardsrG      sh     {{}}w@AAA
KK(###;;wD
KK(###Kr%   c                    g }d}|                                  dk    rt          t                    	 t          t          |                                            }|dk    rnt          | |          }t          |          dz
  }|s-|dk    r||         dvr|dz  }|dk    r
||         dv|dk    rd}|rF|                    ||dz   d                    |dk    r||         dv r|dz  }|dk    r
||         dv n|                    |           |dk    r|                     |dz   t                     nd
                    |ddd                   S )	a   
    Given a byte stream with current position X, return the previous line.

    All characters between the first CR/LF byte found before X
    (or, the start of the file, if no such byte is found) and position X
    After this call, the stream will be positioned one byte after the
    first non-CRLF character found beyond the first CR/LF byte before X,
    or, if no such byte is found, at the beginning of the stream.

    Args:
        stream: StreamType:

    Returns:
        The data which was read.
    Fr   Tr   s   
Nr%   r6   )rF   r   r   minr   rG   r   r   r:   r   join)r&   line_content
found_crlfrD   blockidxs         r#   read_previous_linerO      s     LJ{{}}9::: )6;;==99a<< %VW55%jj1n 	" ((uSz88q ((uSz88axx!
 	'
 cAgii 0111((uSzW44q ((uSzW44
 &&&!88 KKa***A D 88L2&'''r%   abc                 :    t          fd| D                       S )Nc              3   ^   K   | ]&t          fd t           D                       V  'dS )c              3   f   K   | ]+}t          d  t          |          D                       V  ,dS )c              3   Z   K   | ]&\  }}t          |          t          |          z  V  'd S N)float).0ijs      r#   	<genexpr>z6matrix_multiply.<locals>.<genexpr>.<genexpr>.<genexpr>  s7      @@$!Q%((U1XX%@@@@@@r%   N)sumzip)rX   colrows     r#   r[   z,matrix_multiply.<locals>.<genexpr>.<genexpr>  sB      TTSc@@#c3--@@@@@TTTTTTr%   N)tupler]   )rX   r_   rQ   s    @r#   r[   z"matrix_multiply.<locals>.<genexpr>  sZ         	TTTTCQRGTTTTT     r%   )r`   )rP   rQ   s    `r#   matrix_multiplyra     s=              r%   c                    d}|                      | d           t          dd          5 }|                    |                     |                     |                    d           |                    |                     |                     ddd           n# 1 swxY w Y   |                      | d           dS )z5Create text file showing current location in context.i  r   zpypdf_pdfLocation.txtwbs   HEREN)r:   openwriter)   )r&   radius	output_fhs      r#   mark_locationrh     s     F
KK	%t	,	, -	F++,,,   F++,,,- - - - - - - - - - - - - - - KKs   A&BB #B B_CACHEsc                 4   t           }| |v r||          S t          | t                    r| S 	 |                     d          }t	          |           dk     r||| <   |S # t
          $ r2 |                     d          }t	          |           dk     r||| <   |cY S w xY w)Nlatin-1   zutf-8)ri   
isinstancebytesencoder   	Exception)rj   bcrs      r#   b_rt   '  s    	BBww!u!U 	HHYq66A::BqE   HHWq66A::BqE	s   .A 9BBc                     d S rV    rQ   s    r#   str_rx   9      Cr%   c                     d S rV   rv   rw   s    r#   rx   rx   >  ry   r%   c                 Z    t          | t                    r|                     d          S | S )Nrl   )rn   ro   decoderw   s    r#   rx   rx   C  s+    !U xx	"""r%   c                     d S rV   rv   rw   s    r#   ord_r~   J  ry   r%   c                     d S rV   rv   rw   s    r#   r~   r~   O  ry   r%   c                     d S rV   rv   rw   s    r#   r~   r~   T  ry   r%   c                 N    t          | t                    rt          |           S | S rV   )rn   strordrw   s    r#   r~   r~   Y  s$    !S 1vvHr%   c                 F    t          d          } ||           }|d         S )N	hex_codecr   r   )rQ   codercodeds      r#   	hexencoder   _  s%    {##EE!HHE8Or%   numc                 H    t          |                               dd          S )NL )hexreplace)r   s    r#   hex_strr   e  s    s88C$$$r%   )    r8   r9      	    leftupup_leftc                     | |z   |z
  }t          || z
            }t          ||z
            }t          ||z
            }||k    r||k    r| S ||k    r|S |S rV   )abs)r   r   r   p	dist_leftdist_updist_up_lefts          r#   paeth_predictorr   l  sn    r	GAAHI!b&kkGq7{##LG	\ 9 9	L	 	 	r%      msg
stacklevelc                 >    t          j        | t          |           d S )N)r   )warningswarnDeprecationWarning)r   r   s     r#   	deprecater   z  s     M#)jAAAAAAr%   c                      t          |           rV   )r   )r   s    r#   deprecationr   ~  s    
3

r%   3.0.0old_namenew_name
removed_inc                 Z    t          t                              | ||          d           dS )zIRaise an exception that a feature will be removed, but has a replacement.   N)r   DEPR_MSGformatr   r   r   s      r#   deprecate_with_replacementr     s*     hooh
H==qAAAAAr%   c                 X    t          t                              | ||                     dS )zMRaise an exception that a feature was already removed, but has a replacement.N)r   DEPR_MSG_HAPPENEDr   r   s      r#   deprecation_with_replacementr     s+     !((:xHHIIIIIr%   rA   c                 X    t          t                              | |          d           dS )zFRaise an exception that a feature will be removed without replacement.r   N)r   DEPR_MSG_NO_REPLACEMENTr   rA   r   s     r#   deprecate_no_replacementr     s)    %,,T:>>BBBBBr%   c                 V    t          t                              | |                     dS )zJRaise an exception that a feature was already removed without replacement.N)r    DEPR_MSG_NO_REPLACEMENT_HAPPENEDr   r   s     r#   deprecation_no_replacementr     s'    077jIIJJJJJr%   srcc                 T    t          j        |                              |            dS )a  
    Use this instead of logger.warning directly.

    That allows people to overwrite it more easily.

    ## Exception, warnings.warn, logger_warning
    - Exceptions should be used if the user should write code that deals with
      an error case, e.g. the PDF being completely broken.
    - warnings.warn should be used if the user needs to fix their code, e.g.
      DeprecationWarnings
    - logger_warning should be used if the user needs to know that an issue was
      handled by pypdf, e.g. a non-compliant PDF being read in a way that
      pypdf could apply a robustness fix to still read it. This applies mainly
      to strict=False mode.
    N)logging	getLoggerwarning)r   r   s     r#   logger_warningr     s)      c""3'''''r%   aliasesc                  0     dt           dt          f fd}|S )z
    Decorator for deprecated term "bookmark".

    To be used for methods and function arguments
        outline_item = a bookmark
        outline = a collection of outline items.
    funcr   c                 v     t          j                   dt          dt          dt          f fd            }|S )Nargskwargsr   c                  D    t          j        |d            | i |S )NT)fail)rename_kwargs__name__)r   r   r   r   s     r#   wrapperz9deprecation_bookmark.<locals>.decoration.<locals>.wrapper  s1    $-tDDDD4((((r%   )	functoolswrapsr	   )r   r   r   s   ` r#   
decorationz(deprecation_bookmark.<locals>.decoration  sX    				)3 	)# 	)# 	) 	) 	) 	) 	) 	) 
		) r%   )r
   r	   )r   r   s   ` r#   deprecation_bookmarkr     s7     c       r%   F	func_namer   r   c                 &   |                                 D ]{\  }}||v rr|rt          | d| d          ||v rt          |  d| d| d| d| d
          |                    |          ||<   t	          j        | d| dt                     |d	S )
z
    Helper function to deprecate arguments.

    Args:
        func_name: Name of the function to be deprecated
        kwargs:
        aliases:
        fail:
    z# is deprecated as an argument. Use z insteadz received both z and z as an argument. z is deprecated. Use z	 instead.)messagecategoryN)itemsr   	TypeErrorpopr   r   r   )r   r   r   r   old_termnew_terms         r#   r   r     s    &mmoo  (v &VVHVVV   6!!  / / / / / /$,/ /#/ / /  
  &zz(33F8MVVHVVV+	    r%   ro   c                 f    | dk     r|  dS | dk     r	| dz  ddS | dk     r	| dz  ddS | dz  ddS )	Ni  z Bytei@B z.1fz kBi ʚ;z MBz GBrv   )ro   s    r#   _human_readable_bytesr     sk    u}}	%-(((((	%-(((((%-(((((r%   c                   <    e Zd ZU eed<   eed<   defdZdefdZdS )FilerA   datar   c                 \    d| j          dt          t          | j                             dS )N
File(name=, data: ))rA   r   r   r   selfs    r#   __str__zFile.__str__  s.    WDIWW/DS^^/T/TWWWWr%   c                     d| j          dt          t          | j                             dt	          | j                   dS )Nr   r   z, hash: r   )rA   r   r   r   hashr   s    r#   __repr__zFile.__repr__  sC    pDIpp/DS^^/T/Tpp^bcgcl^m^mppppr%   N)r   
__module____qualname__r   __annotations__ro   r   r   rv   r%   r#   r   r     sj         
III
KKKX X X X Xq# q q q q q qr%   r   rV   )r   )r   )F)J__doc__
__author____author_email__r   r   r   codecsr   dataclassesr   ior   osr   typingr   r	   r
   r   r   r   r   r   r   r   ImportErrortyping_extensionserrorsr   r   r   rW   r   r   r   
StreamTyper   StrByteTyper   r   r   r   ro   r$   intr-   r1   boolr4   r;   rC   rG   rO   ra   rh   ri   rt   rx   r~   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   rv   r%   r#   <module>r      s  8 ) ( (
/              ! ! ! ! ! ! " " " " " "      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
,        , , ,++++++++,          ',	%
eUE&9 :E%PUBU<VV' )    -2	5%u,- 	    
CO$M #R  NS - - -5 - - - -& *  QV    0
 u          &!j !T ! ! ! !Z  5    2 c e    06(z 6(e 6( 6( 6( 6(r$<   	* 	 	 	 	 	 +-eCJ&	' , , ,%U

     $ 
C C    
 
E c    
E#u* #     
C C    
 
E e    
 
C C    
E#sE/" uS%Z'8     5    % % % % % % 3# 3      B B3 BC B B B B B S  T        
 5<B BB B.1B	B B B B 5<J JJ J.1J	J J J JC C3 CC Cd C C C C
K KS Kc K K K K K
( (# ($ ( ( ( (&C H    * SX  cN59#s(^KO	   B) ) ) ) ) ) q q q q q q q q q qs   A
 
AA