
    jzN                     >   U d Z dZdZddl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 ddl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mZmZ ej        dd
         dk    rddlmZ nddlmZ 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e         Z'ee(e'f         Z)dZ*dZ+dZ,dZ-dee(         dee
         fdZ.de/de/de/fdZ0dXde'dee1         de/fdZ2de'de/fdZ3de'de4fdZ5d e/de4fd!Z6de'ddfd"Z7de'd#ee/         de/fd$Z8de'd%e1de/fd&Z9de'de/fd'Z:d(e$d)e$de$fd*Z;de'ddfd+Z<i Z=eee(e/f         e/f         e%d,<   d-ee(e/f         de/fd.Z>d)ede(fd/Z?ed)e(de1fd0            Z@ed)e/de/fd1            Z@ed)e1de1fd2            Z@d)ee1e(e/f         dee1e/f         fd3Z@d4ZAd5ZBd6e1d7e1d8e1de1fd9ZCdYd;e(d<e1ddfd=ZDd;e(ddfd>ZEd?e(d@e(dAe(ddfdBZFd?e(d@e(dAe(ddfdCZGdDe(dAe(ddfdEZHdDe(dAe(ddfdFZId;e(dGe(ddfdHZJd;e(dGe(ddfdIZK	 dZdKe(dLee(ef         dMee(e(f         dNe4ddf
dOZLdPe1de(fdQZMe	 G dR dS                      ZNe	 G dT dUeN                      ZOejP         G dV dW                      ZQdS )[z"Utility functions for PDF library.zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)	dataclass)datetimetimezone)DEFAULT_BUFFER_SIZEBytesIO)SEEK_CUR)
IOAnyDictListOptionalPatternTupleUnioncast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.textreturnc                    | }| d S | d                                          rd| z   } |                     d          r| dz  } |                     dd                              dd                              dd	          } t          |                     d          |                     d
                    }|dk    r|t          |           dz
  k    r| dz  } dD ]Y}	 t          j        | |          }| dd          dk    r |                    t          j	                  }|c S # t          $ r Y Vw xY wt          d|           )Nr   zD:)Zz0000r!   +r    ' -   00)zD:%YzD:%Y%mzD:%Y%m%dz
D:%Y%m%d%HzD:%Y%m%d%H%MzD:%Y%m%d%H%M%SzD:%Y%m%d%H%M%S%zz+0000)tzinfozCan not convert date: )isdigitendswithreplacemaxfindlenr   strptimer   utc
ValueError)r   orgtextifds        V/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/pypdf/_utils.pyparse_iso8824_dater9   R   s_   G|tAw d{}}Z   <<S!!))#s33;;CDDDDIIcNNDIIcNN++A1uuc$ii!m##  	!$**A BCCyG##IIX\I22HHH  	 	 	H	 7g77
8
88s   D!!
D.-D.header1header2c                 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indexr0   r3   r.   )r:   r;   versionspdf_header_indicess       r8   _get_max_pdf_version_headerrA   r   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.
    rB   Tr   )readisspacer0   )rC   rD   txttoks       r8   read_until_whitespacerJ      s`     Ckk!nn;;== 	 	s
s88x JrB   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   )rF   WHITESPACESrC   rI   s     r8   read_non_whitespacerN      s?     ++a..C


kk!nn 

JrB   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   )rL   rF   )rC   rI   cnts      r8   skip_over_whitespacerQ      sM     a.C
C


kk!nnq 

 7NrB   valuec                 v    t          t          |                     D ]}| ||dz            }|t          vr dS dS )z
    Check if the given value consists of whitespace characters only.

    Args:
        value: The bytes to check.

    Returns:
        True if the value only has whitespace characters, otherwise return False.
    r   FT)ranger0   rL   )rR   r>   currents      r8   check_if_whitespace_onlyrV      sP     s5zz""  	)*+%%55 &4rB   c                     |                      d          }|                     dd           |dk    r|dvr|                      d          }|dvd S d S d S )Nr      %)   
   )rF   seekrM   s     r8   skip_over_commentr]      sh    
++a..C
KKA
d{{''++a..C '''' {''rB   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.
    rB   T   Nr   )rF   searchr\   startr0   )rC   r^   namerI   ms        r8   read_until_regexre      s     D	kk"oo 	KLL$$=KK		SYYS%9:A>>>3J!'')),D	 KrB   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   rF   )rC   rf   rF   s      r8   read_block_backwardsri      sh     {{}}w@AAA
KK(###;;wD
KK(###KrB   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   
NrB   rX   )rh   r   r   minr   ri   r0   r=   r\   r   join)rC   line_content
found_crlfrf   blockidxs         r8   read_previous_linerq   
  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&'''rB   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).0r5   js      r8   	<genexpr>z6matrix_multiply.<locals>.<genexpr>.<genexpr>.<genexpr>G  s7      @@$!Q%((U1XX%@@@@@@rB   N)sumzip)rz   colrows     r8   r|   z,matrix_multiply.<locals>.<genexpr>.<genexpr>G  sB      TTSc@@#c3--@@@@@TTTTTTrB   N)tupler~   )rz   r   rs   s    @r8   r|   z"matrix_multiply.<locals>.<genexpr>F  sZ         	TTTTCQRGTTTTT     rB   )r   )rr   rs   s    `r8   matrix_multiplyr   C  s=              rB   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writerF   )rC   radius	output_fhs      r8   mark_locationr   L  s     F
KK	%t	,	, -	F++,,,   F++,,,- - - - - - - - - - - - - - - KKs   A&BB #B B_CACHEsc                 4   t          | t                    r| S t          }| |v r||          S 	 |                     d          }t	          |           dk     r||| <   |S # t
          $ r2 |                     d          }t	          |           dk     r||| <   |cY S w xY w)Nlatin-1r   zutf-8)
isinstancebytesr   encoder0   	Exception)r   bcrs      r8   b_r   [  s    !U 	BBww!u	HHYq66A::BqE   HHWq66A::BqE	s   .A 9BBc                 t    t          | t                    r|                     d          S t          |           S )Nr   )r   r   decodestrrs   s    r8   str_r   m  s1    !U xx	"""1vvrB   c                     d S rx    r   s    r8   ord_r   t      CrB   c                     d S rx   r   r   s    r8   r   r   y  r   rB   c                     d S rx   r   r   s    r8   r   r   ~  r   rB   c                 N    t          | t                    rt          |           S | S rx   )r   r   ordr   s    r8   r   r     s$    !S 1vvHrB   )    rZ   r[      	    s   [ 
	 ]leftupup_leftc                     | |z   |z
  }t          || z
            }t          ||z
            }t          ||z
            }||k    r||k    r| S ||k    r|S |S rx   )abs)r   r   r   p	dist_leftdist_updist_up_lefts          r8   paeth_predictorr     sn    r	GAAHI!b&kkGq7{##LG	\ 9 9	L	 	 	rB   r   msg
stacklevelc                 >    t          j        | t          |           d S )N)r   )warningswarnDeprecationWarning)r   r   s     r8   	deprecater     s     M#)jAAAAAArB   c                      t          |           rx   )r   )r   s    r8   deprecationr     s    
3

rB   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      r8   deprecate_with_replacementr     s(    hooh
H==qAAAAArB   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      r8   deprecation_with_replacementr     s)    !((:xHHIIIIIrB   rc   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   rc   r   s     r8   deprecate_no_replacementr     s)    %,,T:>>BBBBBrB   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     r8   deprecation_no_replacementr     s'    077jIIJJJJJrB   srcc                 T    t          j        |                              |            dS )z
    Use this instead of logger.error directly.

    That allows people to overwrite it more easily.

    See the docs on when to use which:
    https://pypdf.readthedocs.io/en/latest/user/suppress-warnings.html
    N)logging	getLoggererrorr   r   s     r8   logger_errorr     s)     c  %%%%%rB   c                 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)r   r   warningr   s     r8   logger_warningr     s)      c""3'''''rB   F	func_namekwargsaliasesfailc                 &   |                                 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         r8   rename_kwargsr     s    &mmoo  (v &VVHVVV   6!!  / / / / / /$,/ /#/ / /  
  &zz(33F8MVVHVVV+	    rB   r   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 GBr   )r   s    r8   _human_readable_bytesr     sk    u}}	%-(((((	%-(((((%-(((((rB   c                   |    e Zd ZU ddlmZ eed<   eed<   dZe	e
         ed<   dZe	e         ed<   defd	Zdefd
ZdS )Filer   IndirectObjectrc   dataNimageindirect_referencer   c           	      t    | j         j         d| j         dt          t	          | j                             dS )Nz(name=z, data: ))	__class____name__rc   r   r0   r   selfs    r8   __str__zFile.__str__  s>    .)llllDYZ]^b^gZhZhDiDillllrB   c                 l    |                                  d d         dt          | j                   dz   S )NrX   z, hash: r   )r   hashr   r   s    r8   __repr__zFile.__repr__  s2    ||~~crc"%BTY%B%B%BBBrB   )r   
__module____qualname__genericr   r   __annotations__r   r   r   r
   r   r   r   r   rB   r8   r   r     s         ''''''
III
KKKE8C=370777m m m m mC# C C C C C CrB   r   c                   d    e Zd ZU ddlmZ dZee         ed<   dZ	ee         ed<   dededdfd	Z
dS )
	ImageFiler   r   Nr   r   	new_imager   r   c                 v   ddl m} ddlm} ddlm} ddlm}m} | j	        t          d          t          | j	        j        d	          st          d
          t          ||j                  st          d          t                      } |j        |dfi |  ||          }	|	j        d         j        d         j	        J |	j        d         j        d         j	                                        | j	        j        j        | j	        j        dz
  <   | j	        t+          || j	                                                  _	         |t+          || j	                                                            \  }
}}|
J | j        d| j                            d                   |
z   | _        || _        || _        dS )a  
        Replace the Image with a new PIL image.

        Args:
            new_image (PIL.Image.Image): The new PIL image to replace the existing image.
            **kwargs: Additional keyword arguments to pass to `Image.Image.save()`.

        Raises:
            TypeError: If the image is inline or in a PdfReader.
            TypeError: If the image does not belong to a PdfWriter.
            TypeError: If `new_image` is not a PIL Image.

        Note:
            This method replaces the existing image with a new image.
            It is not allowed for inline images or images within a PdfReader.
            The `kwargs` parameter allows passing additional parameters
            to `Image.Image.save()`, such as quality.
        r   )Imager   )	PdfReader)_xobj_to_image)DictionaryObject	PdfObjectNzCan not update an inline image_id_translatedz4Can not update an image not belonging to a PdfWriterznew_image shall be a PIL ImagePDF.)PILr   _readerr   filtersr   r   r   r  r   r   hasattrpdfr   r   savepagesimages
get_object_objectsidnumr   rc   rfindr   r   )r   r   r   r   r   r   r   r  rs   reader	extensionbyte_streamimgs                r8   r-   zImageFile.replace  s   & 	&&&&&& 	,+++++88888888"*<===t.24DEE 	TRSSS)U[11 	><===II	q%**6***1|A%a(;GGGLO"1%8CCEE 	#,T-D-JQ-NO
  $6 	t.99;;	
 	

&4n!4#:#E#E#G#GHH'
 '
#	; $$$I4	 4 445	A		


rB   )r   r   r   r   r   r   r   r
   r   r   r-   r   rB   r8   r   r     s{         ''''''E8C=3707772 2 2 2 2 2 2 2 2rB   r   c                       e Zd Z ej        d          ZdeddfdZdedee	e
ef                  fdZdedefdZdedefd	ZdS )
Versionz^(\d+)(.*)$version_strr   Nc                 H    || _         |                     |          | _        d S rx   )r  _parse_version
components)r   r  s     r8   __init__zVersion.__init__R  s#    &--k::rB   c                 T   |                     d          }g }|D ]}t          j                            |          }|s|                    d|f           ;|                    d          }|                    d          }|d}|                    t          |          |f           |S )Nr  r   r   r   )splitr  COMPONENT_PATTERNmatchr=   groupint)r   r  r  parsed_components	componentr  integer_prefixsuffixs           r8   r  zVersion._parse_versionV  s     &&s++
# 		D 		DI-33I>>E !((!Y888"[[^^N[[^^F%!"$$c.&9&96%BCCCC  rB   otherc                 P    t          |t                    sdS | j        |j        k    S )NF)r   r  r  )r   r&  s     r8   __eq__zVersion.__eq__e  s)    %)) 	5%"222rB   c                    t          |t                    st          dt          |                     t	          t          | j                  t          |j                            }t          |          D ]F}| j        |         \  }}|j        |         \  }}||k     r dS ||k    r dS ||k     r dS ||k    r dS Gt          | j                  t          |j                  k     S )Nz#Version cannot be compared against TF)r   r  r3   typerk   r0   r  rT   )r   r&  min_lenr5   
self_valueself_suffixother_valueother_suffixs           r8   __lt__zVersion.__lt__j  s    %)) 	RP4;;PPQQQc$/**C0@,A,ABBw 	 	A&*oa&8#J(-(8(;%KK''ttk))uu\))tt|++uu , 4?##c%*:&;&;;;rB   )r   r   r   recompiler  r   r  r   r   r!  r  objectboolr(  r
   r0  r   rB   r8   r  r  N  s        "
>22;C ;D ; ; ; ;!# !$uS#X2G ! ! ! !3F 3t 3 3 3 3
<C <D < < < < < <rB   r  rx   )r   )F)R__doc__
__author____author_email__	functoolsr   r1  sysr   dataclassesr   r   r   ior   r   osr   typingr	   r
   r   r   r   r   r   r   r   r   version_infor   typing_extensionserrorsr   r   r   ry   r   r   r   
StreamTyper   StrByteTyper   r   r   r   r9   r   rA   r!  rJ   rN   r4  rQ   rV   r]   re   ri   rq   r   r   r   r   r   r   rL   WHITESPACES_AS_REGEXPr   r   r   r   r   r   r   r   r   r   r   r   r   total_orderingr  r   rB   r8   <module>rE     s&  8 ) ( (
/       				 



  ! ! ! ! ! ! ' ' ' ' ' ' ' ' + + + + + + + +                              BQB7""       ++++++          ',	%
eUE&9 :E%PUBU<VV' )    -2	5%u,- 	    W
CO$M #R  NS 9Xc] 9x/A 9 9 9 9@- - -5 - - - -& *  QV    0
 u          &E d    "!j !T ! ! ! !Z  5    2 c e    06(z 6(e 6( 6( 6( 6(r$<   	* 	 	 	 	 	 +-eCJ&	' , , ,%U

     $C C     
C C    
 
E e    
 
C C    
E#sE/" uS%Z'8     3( # 3      B B3 BC B B B B B S  T        B B B BQU B B B B
J3 J# J3 JSW J J J J
C3 CC CD C C C C
KS Kc Kd K K K K
	&c 	& 	& 	& 	& 	& 	&( (# ($ ( ( ( (( SX  cN59#s(^KO	   B) ) ) ) ) ) C C C C C C C C 8 8 8 8 8 8 8 8v -< -< -< -< -< -< -< -< -< -<rB   