
    *'h6                        U d 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 ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddl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$ ed   Z&e e'd<   dZ(e)e'd<   	 d+de
e*ee   ef   de)de&de)de	e&e+f   f
dZ,de-de	e)e)f   de)de-fdZ.de*de	e)e)f   de-de#jF                  fd Z/de	e)e)f   de-de&de*d!e)d"e*de	e#jF                  e*e*e+f   fd#Z0de	e)e)f   de-de&de*d!e)de	e#jF                  e*e*e+f   fd$Z1d%e#jF                  d&ee*ef   d'ede
e*ee   ef   d(e+de#jF                  fd)Z2d&ee*ef   d!e)de
e*ee   ef   de	e&e+f   fd*Z3y# e%$ r	  e%d      w xY w),z9Code in here is only used by pypdf.filters._xobj_to_image    N)BytesIO)AnyDictListLiteralTupleUnioncast   )check_if_whitespace_onlylogger_warning)ColorSpaces)FilterTypes)ImageAttributes)EmptyImageDataErrorPdfReadError)ArrayObjectDecodedStreamObjectEncodedStreamObjectIndirectObject
NullObjectTextStringObject   )   
   )	TypeAlias)ImageUnidentifiedImageErrorz]pillow is required to do image extraction. It can be installed via 'pip install pypdf[image]')	 1RGB2bits4bitsPLRGBACMYKmode_str_typer   MAX_IMAGE_MODE_NESTING_DEPTHcolor_spacecolor_components	prev_modedepthreturnc                    |t         kD  rt        d      t        | t              ryt        | t              rnt        | t
              st        d|       | d   j                  d      rd| d   dd z   } nE| d   d	k(  r:| d
   j                         }t        t        |d         }|j                  dd      } n| d   dk(  r1| d
   j                         } t        | |||d
z         \  }}|dv rd}||fS | d   dk(  r=| d   } t        | t              r| j                         } t        | |||d
z         \  }}|dfS | d   dk(  r}| }t        | d
         }| d   } t        | t              r| j                         } | dk(  r+|d
k(  r&|d
   d   dk7  rt        d|d
   d    dt               yt        | |||d
z         \  }}||fS dddddddd }|j                  |       xs  t        |j!                               |   xs |}||dk(  fS )!z
    Returns:
        Image mode, not taking into account mask (transparency).
        ColorInversion is required (like for some DeviceCMYK).

    z^Color spaces nested too deeply. If required, consider increasing MAX_IMAGE_MODE_NESTING_DEPTH.)r   FzCannot interpret color spacer   z/Calz/Device   N	/ICCBasedr   z/Nz
/Alternater   /Indexed)r!   r'   r$   /Separationr   Tz/DeviceN/DeviceCMYKz/BlackzColor z8 converted to Gray. Please share PDF with pypdf dev team)r%   Tr    r%   r!   r'   r"   r#   )1bitz/DeviceGraypalettez
/DeviceRGBr4   2bit4bit)r)   r   
isinstancer   strlist
startswith
get_objectr
   intget_get_imagemoder   lenr   __name__values)	r*   r+   r,   r-   icc_profilemodeinvert_colororiginal_color_spacemode_maps	            `/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/pypdf/_xobj_image_helpers.pyr@   r@   *   s    ++l
 	
 +z*+s#T**K
 	
 
Q	"	"6	*+a."44	Q;	&!!n//1[%67!oolB7	Q:	%!!n//1+)9eai
l ?"D\!!	Q=	(!!nk>2%002K+)9eai
l Tz	Q:	%*{1~.!!nk>2%002K-',<,A#A&q)X51!4Q788pq +)9eai
l \!! *H 	[! 	!"#34	 	     datasizebitsc                 &   d|z  dz
  }t        |d   |d   z        }d}d|z
  }t        |d         D ]S  }|d|z
  k7  r
|dz  }d|z
  }t        |d         D ].  }| |   |z	  |z  ||||d   z  z   <   ||z  }|dk  s%|dz  }d|z
  }0 U t        |      S )Nr   r      )	bytearrayrangebytes)	rK   rL   rM   maskbyte_buffer
data_indexbityxs	            rI   	bits2byterY   }   s    I?DDGd1g-.KJ
d(C47^ 	!d(?!OJd(CtAw 	A,0,<,Ct+KKAQK(4KCQwa
$h			 rJ   rE   c                 L   	 t        j                  | ||      }|S # t        $ r~}|d   |d   z  }t        |      }|dk(  rt	        d      |||z  dk7  r||t        |       z  |z  dj                  fd|D              }t        j                  | ||      }Y d }~|S d }~ww xY w)Nr   r   z9Data is 0 bytes, cannot process an image from empty data.rJ   c              3   N   K   | ]  }t        |ft              z          y wN)rR   r>   ).0rX   ks     rI   	<genexpr>z,_extended_image_frombytes.<locals>.<genexpr>   s      ;qdSVm,;s   "%)r   	frombytes
ValueErrorrA   r   join)rE   rL   rK   imgexcnb_pixdata_lengthr^   s          @rI   _extended_image_frombytesrg      s    0oodD$/ J  0a47"$i!%K 1$ISY,xx;d;;oodD$/J0s    	B#A3BB#colorsobj_as_textc           
      X   d}d}t        |t              r|d   dk(  rd |D        \  }}}	|dk(  rd}t        || d      }n|d	k(  rd}t        || d
      }t        || |      |dk(  rt        t        t
        f      rj                         t        t              rj                  t        t              rj                         	 ddddddt        dd      d      \  }
}}j                  dk(  rd|
z  }t              }||k7  r\||k  r-t        d| d| dt               t!        dg||z
  z        z  n%t#        |d       st        d| d| dt               d| d|
 |
d gdj%                  fdt'        j(                  d         D              }t+        j,                  |j(                  |      n@j/                  |      t              	dz   |
z  k7  rt        d| t               dn|dk(  r.dj%                  D cg c]  }t!        |||g       c}      d}n|dk(  rg }fdt'        dd
t              d
z  z  d
      D        D ]{  \  }}}}t1        dd|dz  z
  z  d|dz  z
  z        }t1        dd|dz  z
  z  d|dz  z
  z        }t1        dd|dz  z
  z  d|dz  z
  z        }|j3                  t!        |||f             } dj%                  |      d}j5                  |        j/                  |t6        j8                  k(  rdnd      nDt        |t<              s4|d   d#k(  r,t        |||      d   }||k7  rt+        j,                  || |      |dk(  rd$}d%}||d&fS c c}w # t:        $ r t        d! d"t               dY 5w xY w)'zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngPNGr   r2   c              3   <   K   | ]  }|j                           y wr\   )r=   )r]   values     rI   r_   z _handle_flate.<locals>.<genexpr>   s     +X5E,<,<,>+Xs   r"   r$   r   r#   r0   )r   r   r   )r   r$   r%   )r   r$   r!   )r0   r$   r'   )r    r%   r$   r!   r'   r   r    z#Not enough lookup values: Expected z, got .Nz!Too many lookup values: Expected rJ   c              3      K   | ]6  d j                  fdt        j                  d         D               8 yw)rJ   c              3   X   K   | ]!  }j                  |f      d kD  rdnd    # yw)   r   r   N)getpixel)r]   rX   
colors_arrrc   rW   s     rI   r_   z*_handle_flate.<locals>.<genexpr>.<genexpr>   s4       #aV(<s(B1Js   '*r   N)rb   rQ   rL   )r]   rW   rs   rc   s    @rI   r_   z _handle_flate.<locals>.<genexpr>   s>      
 	 HH !&sxx{!3 s   <A r   zInvalid Lookup Table in r%   r!   r'   c              3   .   K   | ]  }||d z      yw)r0   N )r]   nlookups     rI   r_   z _handle_flate.<locals>.<genexpr>   s!      +./q1q5)+s      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr1   z.tifTIFFF)r9   r   rY   rg   r   r   get_datar   original_bytesr:   encoder@   rE   rA   r   rB   rR   r   rb   rQ   rL   r   r`   convertr>   append
putpaletter   DEVICE_GRAYKeyErrorr   )rL   rK   rE   r*   rh   ri   	extensionimage_formatbasehivalnbconvexpected_countactual_countarrb_rgb_c_m_y_k_r_g_bmode2rs   rc   rw   s                            @@@rI   _handle_flater      s"    IL +{+A*0L+XK+X(T5&wtQ'	tQ'
#D$
5Cj f24GHI__&Ff./**Ffc"]]_FA	Q " &( T1b)!,.NBd xx3!"R"6{>1#n4&A.AQQWXdWeefg$ %~/L(M"NN5f^_6MN&??OvVbUccde$ $O^4F$Sbk6"#;7
hh 
 #388A;/  oodCHHc:kk$'v;519"22"%=k]#KXV!FS[ XX&HAuaAY'7&HIF D V^D+38AVPQAQ<RTU3V+ 9BB !BH!5R#X!FG BH!5R#X!FG BH!5R#X!FGE2r2,$789 !XXd^F D%NN64N8++T[-D-D%Dc%PCZ0[^{5R {FD9!<5=//%t4Cv~	i..7 'IQ  	vUV F	s   N NN)(N)c                    d}t        j                  t        |      d      }t        |||      \  }}|dk(  rt	        t
        |j                        }|dv }|j                  dk(  r|dk(  rd}|j                  |k(  s|j                  |hdd	hk(  r|}nT|j                  |hdd
hk(  r0t        j                  ||j                  |j                               }n|j                  |      }|j                  d
k(  r|j                  d      }d}	||	||fS )zb
    Process image encoded in flateEncode
    Returns img, image_format, extension, inversion
    z.jp2)JPEG2000)formatsr   )r'   r&   r!   r%   r$   r'   r   )r   openr   r@   r
   r(   rE   r`   rL   tobytesr~   )
rL   rK   rE   r*   rh   r   img1rF   rc   r   s
             rI   _handle_jpxr     s     I::gdm];D'VTBD,rzM499-y(yyFtu}yyDTYY-#s;
))T	vv.	. oodDIIt||~>ll4  xx6kk% Li55rJ   rc   x_object_objlfiltersrF   c                   	 |j                  t        j                  | j                  dk(  r"|t        j
                  t        j                  fv s|r-| j                  dk(  rddgt        | j                               z  nd       t        |t              r|d   j                         dk(  rd t        |t              r4|d   j                         dk(  rddgt        | j                               z  t        fdt        t                    D              s_g }t        dt              d	      D ]3  }|   	|d
z      |j                  	fdt        d      D               5 | j                  |      } | S )Nr'   r%   g      ?g        r   r2   r3   c              3   4   K   | ]  }|   |d z  k(    yw)r   Nru   )r]   idecodes     rI   r_   z _apply_decode.<locals>.<genexpr>T  s     %UQfQi1q5&8%Us   r   r   c              3   R   K   | ]  }t        d |d z  z
  z  z   z           yw)g     o@N)round)r]   jdmaxdmins     rI   r_   z _apply_decode.<locals>.<genexpr>Y  s2      FGeq5yD4K84?@As   $'   )r?   IADECODErE   FT
DCT_DECODE
JPX_DECODErA   getbandsr9   r   r=   allrQ   extendpoint)
rc   r   r   r*   rF   lutr   r   r   r   s
          @@@rI   _apply_decoder   8  sL    
		 XXH0N$NS sc#,,.)	)
 F 	;,N%%':5;,N%%'=8sc#,,.11#%U%FBT%U"Uq#f+q) 	A!9D!a%=DJJ KPQT: 	 iinJrJ   c                 H   t         j                  | v r&| t         j                     t        j                  k(  rd}| j	                  dd      dk  r't        | j	                  dd       ddd      \  }}||fS t        ||dk(  rt        |t              sd|vrd	n|d      \  }}||fS )
Nr!   z/BitsPerComponentrO   rV   r   r   r   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr?   r@   r9   r   )r   rh   r*   rE   rF   s        rI   _get_mode_and_invert_colorr   `  s     	,&(K,B,BB $+Q/!3+ 3Q78<a
l"  , !";
;k1  
l rJ   )r   )4__doc__sysior   typingr   r   r   r   r   r	   r
   _utilsr   r   	constantsr   r   r   r   r   errorsr   r   genericr   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr(   __annotations__r)   r>   r:   boolr@   rR   rY   rg   r   r   r   r   ru   rJ   rI   <module>r      s   ? 
  ? ? ? < " ( , 5  BQ7" +1 #>y  %' c & 	P sDIs*+P P  P  	P 
 =$P fE sCx   $
38_,1
[[(l/
S/l/
l/ l/ 	l/
 l/ l/ 5;;S$&'l/^#6
S/#6
#6 #6 	#6
 #6 5;;S$&'#6L%	%sCx.% % sDIs*+	%
 % [[%PsCx.*-<A#tCyRUBU<V
=$G
  
	= s   2E5 5F