
    TAiYl                       S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
JrJrJr  SSKJr  SSKJr  SSKJrJrJr  SS	KJr  SSKrSS
KJr  SSKJrJrJrJrJ r J!r!J"r"J#r#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+  SSK,J-r-J.r.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7J8r8  \Rr                  " \:5      r;Sr<Sr=Sr>\" S\?5      r@ " S S\5      rAS5S jrBS6S jrCS6S jrD      S7S jrE          S8S jrFS rG          S8S  jrH S9             S:S! jjrIS;S" jrJ        S<S# jrK      S=S$ jrLS>S% jrM        S?S& jrN          S@S' jrO          SAS( jrP          SBS) jrQ          S8S* jrR          SCS+ jrSSDS, jrTSES- jrU            SFS. jrV\+" 5       rW\W4           SGS/ jjrXSHS1 jrY\:S2:X  a2  \Y" \R                  S0   \R                  S3   \R                  S4   5        gg)Iz/Post-processing image optimization of OCR PDFs.    )annotationsN)defaultdict)CallableIterator
MutableSetSequence)fspath)Path)Any
NamedTupleNewType)compress)Version)	
DictionaryNameObjectObjectStreamModePdfPdfErrorPdfImageStreamUnsupportedImageTypeError)"HifiPrintImageNotTranscodableError)Image)ExecutorSerialExecutor)ghostscriptjbig2encpngquant)
PdfContext)ProgressBar)OutputFileAccessError)IMG2PDF_KWARGSsafe_symlinkK   F   i'  Xrefc                  .    \ rS rSr% SrS\S'   S\S'   Srg)	XrefExt4   z$A PDF xref and image extension pair.r'   xrefstrext N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r.       M/var/www/html/land-ocr/venv/lib/python3.13/site-packages/ocrmypdf/optimize.pyr)   r)   4   s    .
J	Hr6   r)   c                    XS U 3-  $ )z@Return the name of an image file for a given xref and extension.08dr.   )rootr+   r-   s      r7   img_namer;   ;   s    #Jse$$$r6   c                    [        XS5      $ )z/Return the name of a PNG file for a given xref..pngr;   r:   r+   s     r7   png_namer@   @       D''r6   c                    [        XS5      $ )z0Return the name of a JPEG file for a given xref..jpgr>   r?   s     r7   jpg_namerD   E   rA   r6   c                T   U R                   [        R                  :w  a  g[        U R                  [
        5      (       a  U R                  S:  a  [        R                  SU S35        g[        U R                  [
        5      (       a?  [        U R                  [
        5      (       a   U R                  S:  d  U R                  S:  a  [        R                  SU S35        g[        U 5      n[        UR                  5      S:  a  UR                  S   nUR                  S   n[        UR                  5      S	:X  a  US   [        R                  :X  aw  US   bq  US   R                  [        R                  S5      S:X  aJ  US   [        R                   :X  a3  US   (       d)  [        R                  SU S
35        UR                  S   nO)[        R                  SU S35        gUR                  S   nUR"                  S:  a  [        R                  SU S35        gUS   [        R$                  :X  a  [        R                  SU S35        gUS   [        R&                  :X  a3  US   R                  SS5      S:  a  [        R                  SU S35        g[        R(                  U ;   a  [        R                  SU S35        gU R                  [        R*                  [-        5       5      R                  [        R.                  S5      b  [        R                  SU S35        gX%4$ )z%Determine if an image is extractable.Nd   xref z': skipping image with small stream size   z0: skipping image with unusually small dimensions   r      zQ: found image compressed as /FlateDecode /DCTDecode, marked for JPEG optimizationz2: skipping image with multiple compression filtersz: skipping wide gamut imagez: skipping JPEG2000 imagez/Kz: skipping CCITT Group 3 imagez": skipping image with Decode tablez&: skipping image whose SMask has Matte)Subtyper   r   
isinstanceLengthintlogdebugWidthHeightr   lenfilter_decodeparmsFlateDecodeget	Predictor	DCTDecodebits_per_component	JPXDecodeCCITTFaxDecodeDecodeSMaskr   Matte)imager+   pimfirst_filtdpsecond_filtdpfiltdps         r7   extract_image_filterrd   J   s    }}

"ellC((ELL3,>		E$FGHu{{C((%,,,,;;?<<!		E$OPQ
5/C
3!!"Q&--a0..q1&&'1,Q4#3#33Q+Q##DNNA6!;a DNN2!!$IIv / / ++A.FIIdV#UVW''*
!		E$:;<ayDNN"		E$89:ayD'''F1IMM$,Ba,G		E$=>?{{e		E$ABCyyZ\*..tzz4@L
 			E$EFG;r6   c                   A[        X#5      nUc  gUu  pgUR                  S:X  Ga  US   [        R                  :w  a  [        R
                  " 5       (       a  UR                  R                  [        R                  S5      nUc  UR                  (       a   [        R                  UR                  l        XS -  n	U	R                  S5       n
UR                  U
S9nSSS5        U	R                  U	R                  SW-   5      5         Ub  XR                  l        OUR                  ? [)        USU-   5      $ g! , (       d  f       Nc= f! [         aS  nS[!        U5      ;   a>  ["        R%                  S	U S
35         SnAUb  XR                  l        gUR                  ?ge SnAf[&         a#     Ub  XR                  l        gUR                  ?gf = f! Ub  XR                  l        f UR                  ?f = f)z,Extract an image, saving it as a JBIG2 file.NrI   r   r9   wbstreamz	.prejbig2z/DecoderG   z.: skipping image with unsupported Decode table)rd   rY   r   JBIG2Decoder   	availableobjrV   
ColorSpace
image_mask
DeviceGrayopen
extract_torenamewith_suffixNotImplementedErrorr,   rO   rP   r   r)   )pdfr:   r_   r+   optionsresultr`   rc   
colorspaceimgnamefr-   es                r7   extract_image_jbig2r{      s    	!%.F~KC 	!#1I)))   WW[[$7
!S^^+%)__":.\\$'1...2C (
 w22;3DEF ))3GG&*4s!233- (' ' A&IIv%ST   ))3GG&* ,  ))3GG&* ))3GG&*sT   6E
 D9+E
 9
EE
 

G(F"<G !F""G/G GG "G7c                    U R                   S:  a  gU R                   S:  a#  [        R                  " 5       [        S5      :  a  gg)NrJ   Tz10.6.0F)optimizer   versionr   )ru   rc   s     r7   _should_optimize_jpegr      s>    1! 3 3 59J J r6   c                   [        X#5      nUc  gUu  pgUR                  S:X  a  gUS   [        R                  :X  ak  [	        XG5      (       a[   XS -  nUR                  S5       n	UR                  U	S9n
SSS5        UR                  UR                  W
5      5        [        X:5      $ UR                  (       a^  UR                  UR                  ;   aD  UR                  S:  a4  UR!                  5       R#                  [%        X5      5        [        US5      $ UR                  (       dO  UR                  UR                  ;   a5   UR!                  5       R#                  [%        X5      5        [        US5      $ UR                  (       ds  UR                  [        R,                  :X  aU  UR                  S:X  aE  UR.                  (       d4  UR!                  5       R#                  [%        X5      5        [        US5      $ g! , (       d  f       GN= f! [        [        4 a     gf = f! [&         a    [(        R+                  S	5         gf = f)
zGeneric image extraction.NrI   r   r9   rf   rg      r=   z8PDF contains an atypical image that cannot be optimized.)rd   rY   r   rX   r   ro   rp   rq   rr   r   r   r)   indexedrw   SIMPLE_COLORSPACESr}   as_pil_imagesaver@   rs   rO   warningICCBasedjbig2_lossy)rt   r:   r_   r+   ru   rv   r`   rc   rx   ry   r-   s              r7   extract_image_genericr      s    "%.F~KC "ayDNN"'<W'M'M	Sz*Gd#qnnAn. $NN7..s34 t!!NNc444! 	 45tV$$[[S^^s/E/EE	##HT$89 tV$$KKNNdmm+""a'##
 	 45tV$$I $# *+MN 		" # 	KKRS	s<   H $G;4(H (H# ;
H
H H H #IIc                6   US:  a  [         R                  S5        g UR                  R                  n[        U5      R                  5        GH8  u  pU	R                  S   S:w  a  M  [        U	R                  S   5      n
X;   d  X;   a  M?  [        R                  U	;   aO  U	R                  [        R                  :X  a1  [         R                  SU SU 35        [        U U	UUUUUS-   5        M  [        R                  U	;   aL  [        U	R                  R                  S   5      nUR                  U5        [         R                  SU S	35        UR                  U
5        [         R                  SU
 S
35        X;  d  GM4  X%U
'   GM;     g! [         a     gf = f)zIFind all image XRefs or Form XObject and add to the include/exclude sets.
   z2Recursion depth exceeded in _find_image_xrefs_pageNrI   r   zRecursing into Form XObject z	 in page rG   z': skipping image because it is an SMaskz': treating as an optimization candidate)rO   r   	ResourcesXObjectAttributeErrordictitemsobjgenr'   r   rK   FormrP   _find_image_xrefs_containerr]   add)rt   	containerpagenoinclude_xrefsexclude_xrefspageno_for_xrefdepthxobjs_imnamer_   r+   
smask_xrefs               r7   r   r     si    rzHI##++ u+++-<<?aELLO$ D$9<<5 U]]dii%?II4WIYvhOP'	 ::ekk0034Jj)IIj\)PQR$		E$FGH&$*D!7 .  s   F 
FFc           	         [        5       n[        5       n0 n[        U R                  5       H  u  pE[        XR                  XAX#5        M     X-
  nXc4$ N)set	enumeratepagesr   rk   )rt   r   r   r   r   pageworking_xrefss          r7   _find_image_xrefsr   2  sP    &)eM&)eM')O!#)),#6-	
 -
 "1M))r6   c           	   #    #    Sn[        U 5      u  pVU H=  nU R                  US45      n U" XXUS9n	U	(       a  U	u  pXg   [        X{5      4v   M=  M?     g! [         a"    [        R                  SU S35        US-  n Mm  f = f7f)a  Extract image using extract_fn.

Enumerate images on each page, lookup their xref/ID number in the PDF.
Exclude images that are soft masks (i.e. alpha transparency related).
Record the page number on which an image is first used, since images may be
used on multiple pages (or multiple times on the same page).

Current we do not check Form XObjects or other objects that may contain
images, and we don't evaluate alternate images or thumbnails.

extract_fn must decide if wants to extract the image in this context. If
it does a tuple should be returned: (xref, ext) where .ext is the file
extension. extract_fn must also extract the file it finds interesting.
r   )rt   r:   r_   r+   ru   rG   z0: While extracting this image, an error occurredrI   N)r   
get_objectr)   	ExceptionrO   	exception)rt   r:   ru   
extract_fnerrorsr   r   r+   r_   rv   _r-   s               r7   extract_imagesr   @  s     ( F%6s%;"May)	@%GF %+WT-???    	MMvMN aKF		s'   (BA#B(B>BBBc                ~   / n/ n[        XU[        5       Hu  u  pV[        R                  SU5        UR                  S:X  a  UR                  UR                  5        MH  UR                  S:X  d  MZ  UR                  UR                  5        Mw     [        R                  S[        U5       S[        U5       35        X44$ )z1Extract any >=2bpp image we think we can improve.z%sr=   rC   zOptimizable images: JPEGs: z PNGs: )r   r   rO   rP   r-   appendr+   rS   )rt   r:   ru   jpegspngsr   xref_exts          r7   extract_images_genericr   g  s     ED%c:OP		$!<<6!KK&\\V#LL' Q II+CJ<ws4ykJK;r6   c                    [        [        5      n[        XU[        5       H&  u  pEXBR                  -  nX6   R                  U5        M(     [        R                  S[        U5       35        U$ )z@Extract any bitonal image that we think we can improve as JBIG2.z"Optimizable images: JBIG2 groups: )	r   listr   r{   jbig2_page_group_sizer   rO   rP   rS   )rt   r:   ru   jbig2_groupsr   r   groups          r7   extract_images_jbig2r   w  se    t$L*3g?RS777""8, T II23|3D2EFGr6   c                  ^ S
U4S jjnS
U4S jjnTR                   S:  a  Un[        R                  nOUn[        R                  nU" STR                  [        [        U 5      SSTR                  (       + S9UU" X5      S9  g	)z'Produce JBIG2 images from their groups.c              3     >^ #    UR                  5        H0  u  p#SUS 3n[        T 5      U 4S jU 5       UTR                  4v   M2     g 7f)Nr   r9   c              3  @   >#    U  H  u  p[        TX5      v   M     g 7fr   r>   ).0r+   r-   r:   s      r7   	<genexpr>B_produce_jbig2_images.<locals>.jbig2_group_args.<locals>.<genexpr>  s     FIyt$**Is   )r   r	   jbig2_threshold)r:   groupsr   	xref_extsprefixru   s   `    r7   jbig2_group_args/_produce_jbig2_images.<locals>.jbig2_group_args  sL      &EU3K(FtFIF''	  !/s   AA
c           	   3     >#    UR                  5        HP  u  p#SUS 3n[        U5       H6  u  pVUu  px[        U 5      [        XU5      X SUS 3-  T	R                  4v   M8     MR     g 7f)Nr   r9   .04d)r   r   r	   r;   r   )
r:   r   r   r   r   nr   r+   r-   ru   s
            r7   jbig2_single_args0_produce_jbig2_images.<locals>.jbig2_single_args  sv      &EU3K(F(3$	4LT-XQqg..++	   4 !/s   A&A)rI   TJBIG2item)totaldescunitdisableuse_threadsmax_workersprogress_kwargstasktask_argumentsN)r:   r
   r   dict[int, list[XrefExt]])r   r   convert_groupconvert_singlejobsr   rS   progress_bar)r   r:   ru   executorr   r   
jbig2_argsjbig2_converts     `     r7   _produce_jbig2_imagesr     s~    
 $$q(%
 ..&
 //LLl#,,,	
 !$5r6   c                   [        XX45        UR                  5        H  u  pVSUS 3nX'S-   -  nUR                  5       (       a%  UR                  5       n	[	        X	5      n
[        U
S9nOUR                  S:X  a  SnO[        U5      e[        U5       HU  u  pUu  pX'SUS 3-   -  nUR                  5       nU R                  US	5      nUR                  U[        R                  US
9  MW     M     g)an  Convert images to JBIG2 and insert into PDF.

When the JBIG2 page group size is > 1 we do several JBIG2 images at once
and build a symbol dictionary that will span several pages. Each JBIG2
image must reference to its symbol dictionary. If too many pages shared the
same dictionary JBIG2 encoding becomes more expensive and less efficient.
The default value of 10 was determined through testing. Currently this
must be lossy encoding since jbig2enc does not support refinement coding.

When the JBIG2 symbolic coder is not used, each JBIG2 stands on its own
and needs no dictionary. Currently this must be lossless JBIG2.
r   r9   z.sym)JBIG2GlobalsrI   Nr   r   r   filterdecode_parms)r   r   exists
read_bytesr   r   r   FileNotFoundErrorr   r   writer   ri   )rt   r   r:   ru   r   r   r   r   jbig2_symfilejbig2_globals_datajbig2_globalsjbig2_globals_dictr   r   r+   r   jbig2_im_filejbig2_im_dataim_objs                      r7   convert_to_jbig2r     s    * ,g@(..0s$0!!!.!9!9!;"3;M!+!G**a/!%#M22$Y/KAGD q3[$89M)446M^^D!,FLLd&6&6EW   0 1r6   c                P   [         R                  " U5       nUR                  USUS9  S S S 5        UR                  5       R                  UR                  5       R                  :  a-  [
        R                  SU  S35        UR                  5         U S 4$ X4$ ! , (       d  f       Nt= f)NT)r}   qualityrG   z, jpeg, made larger - skip)r   ro   r   statst_sizerO   rP   unlink)r+   in_jpgopt_jpgjpeg_qualityims        r7   _optimize_jpegr     s     
F	r
$= 
 ||~ 5 55		E$9:;Tz= 
	s   B
B%c                   ^ ^^^ S	UUU4S jjnS
U 4S jjnU" STR                   [        S[        T5      STR                  (       + S9[        U" 5       US9  g)z2Optimize JPEGs according to optimization settings.c               3  |   >#    T H1  n [        TU 5      nUR                  S5      nXUTR                  4v   M3     g 7f)Nz.opt.jpg)rD   rr   r   )r+   r   r   r   ru   r:   s      r7   	jpeg_args"transcode_jpegs.<locals>.jpeg_args  s?     DdD)F((4G)=)=== s   9<c                   > U u  p#U(       a@  UR                  5       nTR                  US5      nUR                  U[        R                  S9  UR                  5         g Nr   )r   )r   r   r   r   rX   update)rv   pbarr+   r   compdatar   rt   s         r7   finish_jpeg$transcode_jpegs.<locals>.finish_jpeg  sH    ))+H^^D!,FLL$..L9r6   TzRecompressing JPEGsr_   r   r   r   r   r   r   r   r   r   task_finishedN)returnz&Iterator[tuple[Xref, Path, Path, int]])rv   tuple[Xref, Path | None]r  r!   )r   r   rS   r   r   )rt   r   r:   ru   r   r   r  s   ````   r7   transcode_jpegsr    sT    
> > LL&e*,,,	
  {!r6   c                x   [        X#5      nUc  g Uu  pgUS   [        R                  :X  a  US   (       d  SUR                  s=::  a  S::  aS  O  OPUR	                  [        R
                  S5      [        :  a(  UR	                  [        R                  S5      [        :  d  UR                  S:X  a  [        US5      $ g )Nr   rI   rJ   r   z.memory)	rd   r   rX   r}   rV   rQ   FLATE_JPEG_THRESHOLDrR   r)   )rt   r:   r_   r+   ru   rv   _pimrc   s           r7   _find_deflatable_jpegr    s     "%.F~LD 	q	T^^#q	 W%%**IIdjj!,/CCIIdkk1-0DD1$ tY''r6   c                   U   U R                  US5      n UR                  5       n S S S 5        [        WU5      n[	        U5      [	        U5      :  a  US4$ X&4$ ! [         a    US4s sS S S 5        $ f = f! , (       d  f       NV= f)Nr   r6   )r   read_raw_bytesr   r   rS   )rt   lockr+   	complevelxobjdatar  s          r7   _deflate_jpegr  )  s     
~~dA&	&&(D 
 i(H
8}D	!Sy>  	9 
		 
s(   A8AA5)A84A55A88
Bc                  ^ ^	^
^ / m
[        T X[        5       H;  u  pEUR                  n[        R	                  SU S35        T
R                  U5        M=     UR                  S:X  a  SOSm	[        R                  " 5       mSU	U
UU 4S jjnSUU 4S jjnU" SUR                  [        S	[        T
5      S
UR                  (       + S9[        U" 5       US9  g)zApply FlateDecode to JPEGs.

This is a lossless compression method that is supported by all PDF viewers,
and generally results in a smaller file size compared to straight DCTDecode
images.
rG   z!: marking this JPEG as deflatabler   	      c               3  0   >#    T H  n TTU T4v   M     g 7fr   r.   )r+   r  r   r  rt   s    r7   deflate_args#deflate_jpegs.<locals>.deflate_argsJ  s     DtT9,, s   c                  > U u  p#[        U5      S:  aK  T   TR                  US5      nUR                  U[        R                  [        R
                  /S9  S S S 5        UR                  5         g ! , (       d  f       N= fr  )rS   r   r   r   rU   rX   r  )rv   r  r+   r  r  r  rt   s        r7   finishdeflate_jpegs.<locals>.finishN  s`    x=1~~dA.

8T-=-=t~~,N
O  	 s   AA11
A?TzDeflating JPEGsr_   r  r  N)r
  r   )rv   tuple[Xref, bytes]r  r!   )r   r  r+   rO   rP   r   r}   	threadingLockr   r   rS   r   r  )rt   r:   ru   r   _pagenor   r+   r  r  r  r   r  s   `        @@@r7   deflate_jpegsr%  8  s     E+C@UV}}		E$@ABT W
 %%*I >>D- -  LL"e*,,,	
 #~r6   c                \   UR                  S5      nUR                  S5       n[        R                  " [	        U5      4SU0[
        D6  S S S 5        [        R                  " U5       n[        [        UR                  S   R                  R                  5       5      5      nU R                  U5      nU R                  US5      nUR                  UR                  5       UR                   UR"                  S9  [%        UR'                  5       5      [%        UR'                  5       5      -
  n	1 Skn
X-  n	UR'                  5        H0  nU[(        R*                  :w  d  M  [-        U5      U
;  d  M*  X{   X'   M2     U	 H  nX	 M     S S S 5        g! , (       d  f       GNH= f! , (       d  f       g= f)Nz.png.pdfrf   outputstreamr   r   >	   /ID/OC/OPI/Mask/SMask/Intent	/Metadata/Interpolate/StructParentT)rr   ro   img2pdfconvertr	   r#   r   nextiterr   imagesvaluescopy_foreignr   r   r  FilterDecodeParmsr   keysr   rM   r,   )rt   filenamer+   outputry   	pdf_imageforeign_imagelocal_imager   del_keyskeep_fieldskeys               r7   _transcode_pngrC  e  se   !!*-F	T	ax(KqKNK 
 
&	YT)//!"4";";"B"B"DEF&&}5a(&&(%%$00 	 	
 v{{}%K,<,<,>(??

 	##%Cdkk!c#hk&A). & C ? 
B I 
	 
	B s$   'F(C0FF-F
F
F+c                  ^^^^	^
 [        5       m	UR                  S:  a  [        SUR                  S-
  5      [	        SUR                  S-   5      4m
UUU	U
U4S jnU" SUR
                  [        S[        T5      SUR                  (       + S9[        R                  U" 5       S	9  T	 H  n[        TU5      n[        XU5        M     g
)z Apply lossy transcoding to PNGs.rJ   r   rF   c               3     >#    T HO  n [         R                  T" TU 5      5        T" TU 5      [        TU 5      TS   TS   4v   TR                  U 5        MQ     g 7f)Nr   rI   )rO   rP   r@   r   )r+   image_name_fnr5  modifiedpng_qualityr:   s    r7   pngquant_args%transcode_pngs.<locals>.pngquant_args  s]     		-d34!$-T4(NN	  T" s   AATPNGsr_   r  r   N)r   r}   maxrH  minr   r   rS   r   r   quantizer@   rC  )rt   r5  rF  r:   ru   r   rI  r+   r;  rG  rH  s    ```     @@r7   transcode_pngsrO    s     "%H1G''",-W((2-.

		# 		# 	 &k#000	 ""(?	
 D$'sd+ r6   c           	        UR                   nUR                  S:X  a  [        X5        U$ UR                  S:X  a  UR                  S:  a  [        OSUl        UR
                  S:X  a  UR                  S:  a  [        OSUl        UR                  S:X  a  UR                  (       a  SOSUl        [        R                  " U 5       nUR                  S-  nUR                  SS	9  [        XgU5      u  p[        XhXuU5        [        XgXT5        [!        Xi["        XuU5        [%        XgU5      n
['        XjXuU5        UR)                  S
5      nUR+                  5         UR,                  " U40 UD6  SSS5        U R/                  5       R0                  nWR/                  5       R0                  nUS:X  a"  [3        S[4        R6                  " 5        S35      eSX-  -
  nUS:  aY  [8        R;                  S5        [        R                  " U 5       nUR+                  5         UR,                  " U40 UD6  SSS5        U$ [        X5        U$ ! , (       d  f       N= f! , (       d  f       U$ = f)zOptimize images in a PDF file.r   r   (      r   rI   r5  T)exist_okz.opt.pdfNzeOutput file not created after optimizing. We probably ran out of disk space in the temporary folder: r   zLImage optimization did not improve the file - optimizations will not be used)ru   r}   r$   r   DEFAULT_JPEG_QUALITYrH  DEFAULT_PNG_QUALITYr   r   r   ro   parentmkdirr   r  r%  rO  r@   r   r   rr   remove_unreferenced_resourcesr   r   r   r"   tempfile
gettempdirrO   info)
input_fileoutput_filecontextsave_settingsr   ru   rt   r:   r   r   r   target_file
input_sizeoutput_sizesavingss                  r7   r}   r}     s'    ooG1Z-q 7>7G7G!7K3QSa5<5E5E5I1r$$).5.A.Aq%	*	!!H,

D
!,S@D8<c3 	s(D8D+Cw?D8D!--j9))+..# 
& "**J""$,,Ka#::B:M:M:O9PPQS
 	
 +**G{-	

 XXj!S--/HH[2M2 "  	[.Q 
	D "! s   B%I $I 
I
I rI   c                h   SSK Jn  SSKJn   " S S5      n[	        U 5      n U" U U[        U5      SSSS9nU" 5        n[        XxU SS5      n	[	        U5      S	-  n
[        U U
U	[        S
S
[        R                  S95        U" [        U
5      [        U5      5        SSS5        g! , (       d  f       g= f)z.Entry point for direct optimization of a file.r   )copy)TemporaryDirectoryc                      \ rS rSrSrS rSrg)main.<locals>.OptimizeOptionsi  zEmulate ocrmypdf's options.c                    Xl         X l        X0l        X@l        XPl        SU l        X`l        SU l        SU l        SU l	        g )Nr   g333333?TF)
r\  r   r}   r   rH  r   r   r   quietr   )selfr\  r   	optimize_r   rH  jb2lossys          r7   __init__&main.<locals>.OptimizeOptions.__init__  sD     )OI%M ,*)*D&'#'D DJ %Dr6   )
r\  r   r   r   r   r   r}   rH  r   rj  N)r/   r0   r1   r2   r3   rn  r5   r.   r6   r7   OptimizeOptionsrh    s
    )	&r6   rp  F)r\  r   rl  r   rH  rm  Nzout.pdfT)compress_streamspreserve_pdfaobject_stream_mode)shutilre  rY  rf  r
   rN   r    r}   r   r   generater	   )infileoutfilelevelr   re  rf  rp  ru   tmpdirr^  tmpouts              r7   mainr{    s    +& &" &\Fe*G 
	WfdDAf	)!%"#3#<#<			
 	VF^VG_- 
		s   AB##
B1__main__rJ   r   )r:   r
   r+   r'   r-   r,   r
  r
   )r:   r
   r+   r'   r
  r
   )r_   r   r+   r'   r
  z+tuple[PdfImage, tuple[Name, Object]] | None)
rt   r   r:   r
   r_   r   r+   r'   r
  zXrefExt | None)r   )rt   r   r   r   r   rN   r   MutableSet[Xref]r   r}  r   zdict[Xref, int]r   rN   )rt   r   )rt   r   r:   r
   r   zCallable[..., XrefExt | None]r
  zIterator[tuple[int, XrefExt]])rt   r   r:   r
   r
  ztuple[list[Xref], list[Xref]])rt   r   r:   r
   r
  r   )r   r   r:   r
   r   r   r
  None)
rt   r   r   r   r:   r
   r   r   r
  r~  )
r+   r'   r   r
   r   r
   r   rN   r
  r  )
rt   r   r   Sequence[Xref]r:   r
   r   r   r
  r~  )
rt   r   r  zthreading.Lockr+   r'   r  rN   r
  r!  )rt   r   r:   r
   r   r   r
  r~  )rt   r   r;  r
   r+   r'   r
  bool)rt   r   r5  r  rF  zCallable[[Path, Xref], Path]r:   r
   r   r   r
  r~  )r\  r
   r]  r
   r^  r    r_  zdict[str, Any]r   r   r
  r
   )rI   )[r3   
__future__r   loggingsysrY  r"  collectionsr   collections.abcr   r   r   r   osr	   pathlibr
   typingr   r   r   zlibr   r1  packaging.versionr   pikepdfr   r   r   r   r   r   r   r   r   pikepdf.models.imager   PILr   ocrmypdf._concurrentr   r   ocrmypdf._execr   r   r   ocrmypdf._jobcontextr    ocrmypdf._progressbarr!   ocrmypdf.exceptionsr"   ocrmypdf.helpersr#   r$   	getLoggerr/   rO   rT  rU  r  rN   r'   r)   r;   r@   rD   rd   r{   r   r   r   r   r   r   r   r   r   r   r  r  r  r%  rC  rO  DEFAULT_EXECUTORr}   r{  argvr.   r6   r7   <module>r     s   6 "  
   # D D   + +   %
 
 
 D  9 : : + - 5 9!    vsj %
(
(
AAA0AH111$*12611h444$*42644| ,+	,+,+ ,+ $	,+
 $,+ %,+ ,+^*$@	$@
$@ .	$@
 #$@N	" .*.26.KS.	.b*	*** *
 * 
*Z



'+
;>

	#+/DL	D$*264	"*.;>*Z&R*,	*,*, 0*, 	*, *, 
*,Z "#  *<<< < "	<
 < 
<~-.` z!chhqk388A;/ r6   