
    j5jIh                       d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZ ddlm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# 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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7  ejp                  e9      Z:dZ;dZ<dZ= ede>      Z? G d de      Z@d5dZAd6dZBd6dZC	 	 	 	 	 	 d7dZD	 	 	 	 	 	 	 	 	 	 d8dZEd ZF	 	 	 	 	 	 	 	 	 	 d8dZG	 	 d9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d:d ZHd;d!ZI	 	 	 	 	 	 	 	 d<d"ZJ	 	 	 	 	 	 d=d#ZKd>d$ZL	 	 	 	 	 	 	 	 d?d%ZM	 	 	 	 	 	 	 	 	 	 d@d&ZN	 	 	 	 	 	 	 	 	 	 dAd'ZO	 	 	 	 	 	 	 	 	 	 dBd(ZPdCd)ZQ	 	 	 	 	 	 	 	 	 	 d8d*ZR	 	 	 	 	 	 	 	 	 	 dDd+ZSdEd,ZTdFd-ZU	 	 	 	 	 	 	 	 	 	 	 	 dGd.ZV e*       ZWeWf	 	 	 	 	 	 	 	 	 	 	 dHd/ZXdId1ZYe9d2k(  r2 eYej                  d0   ej                  d3   ej                  d4          yy)Jz/Post-processing image optimization of OCR PDFs.    )annotationsN)CallableIterator
MutableSetSequence)fspath)Path)Any
NamedTupleNewType)compress)Version)
Array
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                  &    e Zd ZU dZded<   ded<   y)XrefExtz$A PDF xref and image extension pair.r'   xrefstrextN)__name__
__module____qualname____doc____annotations__     G/var/www/html/qr/venv/lib/python3.12/site-packages/ocrmypdf/optimize.pyr)   r)   4   s    .
J	Hr3   r)   c                    | |d| z  S )z@Return the name of an image file for a given xref and extension.08dr2   )rootr*   r,   s      r4   img_namer8   ;   s    T#Jse$$$r3   c                    t        | |d      S )z/Return the name of a PNG file for a given xref..pngr8   r7   r*   s     r4   png_namer=   @       D$''r3   c                    t        | |d      S )z0Return the name of a JPEG file for a given xref..jpgr;   r<   s     r4   jpg_namerA   E   r>   r3   c                   | j                   t        j                  k7  ryt        | j                  t
              r| j                  dk  rt        j                  d| d       yt        | j                  t
              r8t        | j                  t
              r| j                  dk  s| j                  dk  rt        j                  d| d       yt        |       }t        |j                        dkD  r|j                  d   }|j                  d   }t        |j                        d	k(  r|d   t        j                  k(  ro|d   j|d   j                  t        j                  d      dk(  rD|d   t        j                   k(  r.|d   s)t        j                  d| d
       |j                  d   }n)t        j                  d| d       y|j                  d   }|j"                  dkD  rt        j                  d| d       y|d   t        j$                  k(  rt        j                  d| d       y|d   t        j&                  k(  r2|d   j                  dd      dk\  rt        j                  d| d       yt        j(                  | v rt        j                  d| d       y| j                  t        j*                  t-                     j                  t        j.                  d      t        j                  d| d       y||fS )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         r4   extract_image_filterra   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;r3   c                   ~t        ||      }|y|\  }}|j                  dk(  r	|d   t        j                  k7  rt	        j
                         r|j                  j                  t        j                  d      }||j                  r	 t        j                  |j                  _        ||dz  }	|	j                  d      5 }
|j                  |
      }ddd       |	j                  |	j                  dz                	 |||j                  _        n|j                  `	 t)        |d|z         S y# 1 sw Y   ^xY w# t        $ rQ}dt!        |      v r>t"        j%                  d	| d
       Y d}~|||j                  _        y|j                  `y d}~wt&        $ r# Y |||j                  _        y|j                  `yw xY w# |||j                  _        w |j                  `w xY w)z,Extract an image, saving it as a JBIG2 file.NrF   r   r6   wbstreamz	.prejbig2z/DecoderD   z.: skipping image with unsupported Decode table)ra   rV   r   JBIG2Decoder   	availableobjrS   
ColorSpace
image_mask
DeviceGrayopen
extract_torenamewith_suffixNotImplementedErrorr+   rL   rM   r   r)   )pdfr7   r\   r*   optionsresultr]   r`   
colorspaceimgnamefr,   es                r4   extract_image_jbig2rx      s    	!%.F~KC 	!#1I)))  WW[[$7
!S^^+%)__"D:.\\$' 31...2C3
 w22;3DEF ))3CGG&*4s!233-3 3 ' A&IIv%ST   ))3CGG&* ,  ))3CGG&* ))3CGG&*sT   	7D<  D0+D< 0D95D< <	G &F+G FG G ?G  G "G%c                    | j                   dk\  ry| j                   dk  xr  t        j                         t        d      k\  S )NrG   Tz10.6.0)optimizer   versionr   )rr   r`   s     r4   _should_optimize_jpegr|      s>    1 aNK$7$7$9WX=N$NNr3   c                :   t        ||      }|y|\  }}|j                  dk(  ry|d   t        j                  k(  rlt	        ||      r`	 ||dz  }|j                  d      5 }	|j                  |	      }
ddd       |j                  |j                  
             t        ||
      S |j                  r\|j                  |j                  v rD|j                  dk\  r5|j!                         j#                  t%        ||             t        |d      S |j                  sN|j                  |j                  v r6	 |j!                         j#                  t%        ||             t        |d      S |j                  sa|j                  t        j,                  k(  rD|j                  dk(  r5|j!                         j#                  t%        ||             t        |d      S y# 1 sw Y   fxY w# t        t        f$ r Y yw xY w# t&        $ r t(        j+                  d	       Y yw xY w)
zGeneric image extraction.NrF   r   r6   rc   rd      r:   z8PDF contains an atypical image that cannot be optimized.)ra   rV   r   rU   r|   rl   rm   rn   ro   r   r   r)   indexedrt   SIMPLE_COLORSPACESrz   as_pil_imagesaver=   rp   rL   warningICCBased)rq   r7   r\   r*   rr   rs   r]   r`   ru   rv   r,   s              r4   extract_image_genericr      s    "%.F~KC "ayDNN"'<Wf'M	Sz*Gd# /qnnAn./NN7..s34 tS!!NNc444! 	t 45tV$$[[S^^s/E/EE	##HT4$89 tV$$KKNNdmm+""a' 	t 45tV$$E/ / *+MN 		" # 	KKRS	s<   G$  G3(G$ 4)G9 G!G$ $G65G69HHc                ^   |
t               }|dkD  rt        j                  d       y	 |j                  j                  }t        |      j                         D ]C  \  }	}
|
j                  d   dk7  rt        |
j                  d         }||v s||v r;t        j                  |
v rd|
j                  t        j                  k(  rG||v ro|j                  |       t        j                  d|	 d|        t        | |
|||||dz   |       t        j                  |
v rLt        |
j                  j                  d         }|j                  |       t        j                  d| d	       |j                  |       t        j                  d| d
       ||vs?|||<   F y# t
        $ r Y yw xY w)zIFind all image XRefs or Form XObject and add to the include/exclude sets.N
   z2Recursion depth exceeded in _find_image_xrefs_pagerF   r   zRecursing into Form XObject z	 in page rD   z': skipping image because it is an SMaskz': treating as an optimization candidate)setrL   rM   	ResourcesXObjectAttributeErrordictitemsobjgenr'   r   rH   Formadd_find_image_xrefs_containerrZ   )rq   	containerpagenoinclude_xrefsexclude_xrefspageno_for_xrefdepthvisited_formsxobjs_imnamer\   r*   
smask_xrefs                r4   r   r      s    rz 			FG##++ u+++- +<<?aELLO$= DM$9<<5 U]]dii%?}$d#II4WIYvhOP'		 ::ekk0034Jj)IIj\)PQR$		E$FGH&$*OD!=+  s   F   	F,+F,c           	         t               }t               }i }t        | j                        D ]  \  }}t        | |j                  ||||       ! ||z
  }||fS N)r   	enumeratepagesr   rh   )rq   r   r   r   r   pageworking_xrefss          r4   _find_image_xrefsr   :  sa    &)eM&)eM')O!#)), 
#6=-	


 "M1M/))r3   c              #  B  K   d}t        |       \  }}|D ]>  }| j                  |df      }	  || ||||      }	|	s'|	\  }
}||   t        ||      f @ y	# t        $ r< t        j                  d| d       t        j                  d| dd       |dz  }Y w xY ww)
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   )rq   r7   r\   r*   rr   rD   zl: this image could not be processed by the optimizer and was left unchanged. The output file is still valid.z!: image optimization error detailT)exc_inforF   N)r   
get_objectr)   	ExceptionrL   r   rM   )rq   r7   rr   
extract_fnerrorsr   r   r*   r\   rs   _r,   s               r4   extract_imagesr   H  s     ( F%6s%;"M? @ay)	@d%dGF  3%d+WT3-???+@  	
 KKv  
 IIdV#DEPTIUaKF	s-   )BABBABBBBc                x   g }g }t        | ||t              D ]q  \  }}t        j                  d|       |j                  dk(  r|j                  |j                         G|j                  dk(  sW|j                  |j                         s t        j                  dt        |       dt        |              ||fS )z1Extract any >=2bpp image we think we can improve.z%sr:   r@   zOptimizable images: JPEGs: z PNGs: )r   r   rL   rM   r,   appendr*   rP   )rq   r7   rr   jpegspngsr   xref_exts          r4   extract_images_genericr   v  s     ED%c4:OP (8		$!<<6!KK&\\V#LL'( II+CJ<ws4ykJK$;r3   c                    g }t        | ||t              D ]  \  }}|j                  |        t        j	                  dt        |              |S )z@Extract any bitonal image that we think we can improve as JBIG2.zOptimizable images: JBIG2: )r   rx   r   rL   rM   rP   )rq   r7   rr   jbig2_images_pagenor   s         r4   extract_images_jbig2r     sW    L+Cw@ST &H%& II+C,=+>?@r3   c           
           fd} |dj                   t        t               ddj                         t        j
                   |              y)z:Produce JBIG2 images using lossless single-image encoding.c               3     K   D ]4  } | \  }}t              t        ||      |ddz  j                  f 6 y w)Nr6   .jbig2)r   r8   jbig2_threshold)r   r*   r,   r   rr   r7   s      r4   
jbig2_argsz)_produce_jbig2_images.<locals>.jbig2_args  sV     $ 	H ID#ttS)$s6**''	 	s   ;>TJBIG2r\   )totaldescunitdisableuse_threadsmax_workersprogress_kwargstasktask_argumentsN)jobsr   rP   progress_barr   convert_single)r   r7   rr   executorr   s   ```  r4   _produce_jbig2_imagesr     sN    
 LLl#,,,	
 $$!|r3   c                    t        ||||       |D ]T  }|\  }}||ddz  }|j                         }	| j                  |d      }
|
j                  |	t        j
                  d       V y)zConvert images to JBIG2 and insert into PDF.

    Each JBIG2 image is encoded independently using lossless compression.
    No symbol dictionary (JBIG2Globals) is used.
    r6   r   r   Nfilterdecode_parms)r   
read_bytesr   writer   rf   )rq   r   r7   rr   r   r   r*   r   jbig2_im_filejbig2_im_dataim_objs              r4   convert_to_jbig2r     su     ,gx@  Pa$s622%002a(]4+;+;$OPr3   c                   t        j                  |      5 }ddi}t        |t              rd|cxk  rdk  rn n||d<    |j                  |fi | d d d        |j                         j                  |j                         j                  kD  r-t        j                  d|  d       |j                          | d fS | |fS # 1 sw Y   oxY w)Nrz   Tr   rC   qualityrD   z, jpeg, made larger - skip)
r   rl   rI   rK   r   statst_sizerL   rM   unlink)r*   in_jpgopt_jpgjpg_qualityimsave_kwargss         r4   _optimize_jpegr     s     
F	 (r'14&8k3'A,Bs,B%0K	"';'	( ||~ 5 55		E$9:;Tz=( (s   ;B??Cc           
          d	fd}d
 fd} |dj                   t        dt              dj                         t         |       |       y)z2Optimize JPEGs according to optimization settings.c               3  z   K   D ]1  } t        |       }|j                  d      }| ||j                  f 3 y w)Nz.opt.jpg)rA   ro   r   )r*   r   r   r   rr   r7   s      r4   	jpeg_argsz"transcode_jpegs.<locals>.jpeg_args  sG      	=DdD)F((4G)<)<<<	=s   8;c                    | \  }}|rC|j                         }j                  |d      }|j                  |t        j                         |j                          y Nr   )r   )r   r   r   r   rU   update)rs   pbarr*   r   compdatar   rq   s         r4   finish_jpegz$transcode_jpegs.<locals>.finish_jpeg  sJ    g))+H^^D!,FLL$..L9r3   TzRecompressing JPEGsr\   r   r   r   r   r   r   r   r   r   task_finishedN)returnz&Iterator[tuple[Xref, Path, Path, int]])rs   tuple[Xref, Path | None]r   r!   )r   r   rP   r   r   )rq   r   r7   rr   r   r   r   s   ````   r4   transcode_jpegsr     sO    
= LL&e*,,,	
  {!r3   c                    | j                  t        j                        }|yt        |t              rt        j
                  t        |      v S |t        j
                  k(  S )z?Check if the image already has FlateDecode in its filter chain.F)rS   r   FilterrI   r   rR   list)r\   filts     r4   _already_flate_encodedr     sL    99T[[!D|$4:--4####r3   c                |   t        ||      }|y |\  }}t        |      ry |d   t        j                  k(  r|d   sd|j                  cxk  rdk  rQn nN|j                  t        j                  d      t        k  r'|j                  t        j                  d      t        k  s|j                  dk(  rt        |d      S y )Nr   rF   rG   r~   z.memory)
ra   r   r   rU   rz   rS   rN   FLATE_JPEG_THRESHOLDrO   r)   )rq   r7   r\   r*   rr   rs   _pimr`   s           r4   _find_deflatable_jpegr     s     "%.F~LD& e$ 	q	T^^#q	 W%%**IIdjj!,/CCIIdkk1-0DD1$ tY''r3   c                   |5  | j                  |d      }	 |j                         }	 d d d        t        |      }t	        |      t	        |      k\  r|dfS ||fS # t        $ r |dfcY cd d d        S w xY w# 1 sw Y   PxY w)Nr   r3   )r   read_raw_bytesr   r   rP   )rq   lockr*   	complevelxobjdatar   s          r4   _deflate_jpegr     s     
 ~~dA&	&&(D i(H
8}D	!Sy>  	9 		 s(   A7AA4(A73A44A77B c           
        	
 g 
t         ||t              D ];  \  }}|j                  }t        j	                  d| d       
j                  |       = |j                  dk(  rdnd	t        j                         d	
 fd}d fd} |d|j                  t        d	t        
      d
|j                         t         |       |       y)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.
    rD   z!: marking this JPEG as deflatabler~   	      c               3  ,   K   D ]
  } | f  y wr   r2   )r*   r   r   r   rq   s    r4   deflate_argsz#deflate_jpegs.<locals>.deflate_args>  s%      	-DtT9,,	-s   c                    | \  }}t        |      dkD  rN5  j                  |d      }|j                  |t        j                  t        j
                  g       d d d        |j                          y # 1 sw Y   xY wr   )rP   r   r   r   rR   rU   r   )rs   r   r*   r   r   r   rq   s        r4   finishzdeflate_jpegs.<locals>.finishB  sn    hx=1 P~~dA.

8T-=-=t~~,N
OP 	P Ps   AA44A=TzDeflating JPEGsr\   r   r   N)r   r   )rs   tuple[Xref, bytes]r   r!   )r   r   r*   rL   rM   r   rz   	threadingLockr   r   rP   r   r   )rq   r7   rr   r   r   r   r*   r  r  r   r   r   s   `        @@@r4   deflate_jpegsr  ,  s     E+Cw@UV }}		E$@ABT
 %%*I >>D- - LL"e*,,,	
 #~r3   c                B   |j                  d      }|j                  d      5 }t        j                  t	        |      fd|it
         d d d        t        j                  |      5 }t        t        |j                  d   j                  j                                     }| j                  |      }| j                  |d      }|j                  |j                         |j                   |j"                         t%        |j'                               t%        |j'                               z
  }	h d}
|	|
z  }	|j'                         D ],  }|t(        j*                  k7  st-        |      |
vs%||   ||<   . |	D ]  }||=  	 d d d        y# 1 sw Y   AxY w# 1 sw Y   yxY w)Nz.png.pdfrc   outputstreamr   r   >	   /ID/OC/OPI/Mask/SMask/Intent	/Metadata/Interpolate/StructParentT)ro   rl   img2pdfconvertr   r#   r   nextiterr   imagesvaluescopy_foreignr   r   r   r   DecodeParmsr   keysr   rJ   r+   )rq   filenamer*   outputrv   	pdf_imageforeign_imagelocal_imager   del_keyskeep_fieldskeys               r4   _transcode_pngr%  Y  s   !!*-F	T	 Lax(KqKNKL 
&	  YT)//!"4";";"B"B"DEF&&}5a(&&(%%$00 	 	
 v{{}%K,<,<,>(??

 	K##% 	/Cdkk!c#hk&A)#.s	/  	Cs	? B IL L B s$   &F&C5FF*FFFc           
       	
 t               	|j                  dk\  rt        d|j                  dz
        t	        d|j                  dz         f
	
fd} |d|j
                  t        dt              d|j                         t        j                   |       	       	D ]  }t        |      }t        | ||        y
)z Apply lossy transcoding to PNGs.rG   r   rC   c               3     K   D ]N  } t         j                   |               |       t        |       d   d   f j                  |        P y w)Nr   rF   )rL   rM   r=   r   )r*   image_name_fnr  modifiedpng_qualityr7   s    r4   pngquant_argsz%transcode_pngs.<locals>.pngquant_args  sc      #		-d34!$-T4(NN	  T"#s   AATPNGsr\   r   r   N)r   rz   maxr*  minr   r   rP   r   r   quantizer=   r%  )rq   r  r(  r7   rr   r   r+  r*   r  r)  r*  s    ```     @@r4   transcode_pngsr0    s     "%H1G''",-W((2-.

		# 		# 	 &k#000	 ""(?	
  ,D$'sHd+,r3   c           	     `   |j                   }|j                  dk(  rt        | |       |S |j                  s|j                  dk  rt        nd|_        |j
                  s|j                  dk  rt        nd|_        t        j                  |       5 }|j                  dz  }|j                  d       t        |||      \  }}	t        |||||       t        ||||       t        ||	t        |||       t!        |||      }
t#        ||
|||       |j%                  d      }|j'                           |j(                  |fi | d	d	d	       | j+                         j,                  }j+                         j,                  }|dk(  r!t/        d
t1        j2                          d      d||z  z
  }|dk  rXt4        j7                  d       t        j                  |       5 }|j'                           |j(                  |fi | d	d	d	       |S t        ||       |S # 1 sw Y   xY w# 1 sw Y   |S xY w)zOptimize images in a PDF file.r   r~   (      r  T)exist_okz.opt.pdfNzeOutput file not created after optimizing. We probably ran out of disk space in the temporary folder: .rF   zLImage optimization did not improve the file - optimizations will not be used)rr   rz   r$   r   DEFAULT_JPEG_QUALITYr*  DEFAULT_PNG_QUALITYr   rl   parentmkdirr   r   r  r0  r=   r   r   ro   remove_unreferenced_resourcesr   r   r   r"   tempfile
gettempdirrL   info)
input_fileoutput_filecontextsave_settingsr   rr   rq   r7   r   r   r   target_file
input_sizeoutput_sizesavingss                  r4   rz   rz     s&    ooG1Z-6=6F6F6J2PR5<5E5E5I1r	*	 /!!H,

D
!,S$@tUD'8<c4(3 	sD(D'8D+Cw?lD'8D!--j9))+..#/& "**J""$,,Ka#::B:M:M:O9PPQS
 	
 +
**G{-	

 XXj! 	3S--/CHH[2M2	3  	[+.Q/ /D	3 s   B3H$H#H #H-rF   c                |   ddl m} ddlm} ddlm} t        |       }  || ||t        |      ddddd	      } |       5 }t        |t        |      | d	d	      }	t        |      d
z  }
t        | |
|	t        ddt        j                                |t        |
      t        |             d	d	d	       y	# 1 sw Y   y	xY w)z.Entry point for direct optimization of a file.r   )copy)TemporaryDirectory)
OcrOptionsg333333?TF)	r>  r?  r   rz   r   r*  r   quietr   Nzout.pdf)compress_streamspreserve_pdfaobject_stream_mode)shutilrG  r;  rH  ocrmypdf._optionsrI  r	   rK   r    rz   r   r   generater   )infileoutfilelevelr   rG  rH  rI  rr   tmpdirr@  tmpouts              r4   mainrV    s    +,&\F U
G 
	 .Wd6lFD$Gf	)!%"#3#<#<			
 	VF^VG_-. . .s   A*B22B;__main__rG   r~   )r7   r	   r*   r'   r,   r+   r   r	   )r7   r	   r*   r'   r   r	   )r\   r   r*   r'   r   z+tuple[PdfImage, tuple[Name, Object]] | None)
rq   r   r7   r	   r\   r   r*   r'   r   zXrefExt | None)r   N)rq   r   r   r   r   rK   r   MutableSet[Xref]r   rX  r   zdict[Xref, int]r   rK   r   zMutableSet[Xref] | None)rq   r   )rq   r   r7   r	   r   zCallable[..., XrefExt | None]r   zIterator[tuple[int, XrefExt]])rq   r   r7   r	   r   ztuple[list[Xref], list[Xref]])rq   r   r7   r	   r   list[XrefExt])r   rY  r7   r	   r   r   r   None)
rq   r   r   rY  r7   r	   r   r   r   rZ  )
r*   r'   r   r	   r   r	   r   rK   r   r   )
rq   r   r   Sequence[Xref]r7   r	   r   r   r   rZ  )r\   r   r   bool)
rq   r   r   zthreading.Lockr*   r'   r   rK   r   r  )rq   r   r7   r	   r   r   r   rZ  )rq   r   r  r	   r*   r'   r   r\  )rq   r   r  r[  r(  zCallable[[Path, Xref], Path]r7   r	   r   r   r   rZ  )r>  r	   r?  r	   r@  r    rA  zdict[str, Any]r   r   r   r	   )rF   )[r0   
__future__r   loggingsysr;  r  collections.abcr   r   r   r   osr   pathlibr	   typingr
   r   r   zlibr   r  packaging.versionr   pikepdfr   r   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-   rL   r6  r7  r   rK   r'   r)   r8   r=   rA   ra   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r%  r0  DEFAULT_EXECUTORrz   rV  argvr2   r3   r4   <module>rr     s   6 "  
   D D   + +   %   D  9 : : + - 5 9g!    vsj %
(
(
AAA0AH111$*12611hO222$*22622x -18+	8+8+ 8+ $	8+
 $8+ %8+ 8+ +8+v*+@	+@
+@ .	+@
 #+@\	" '+@H	:P	PP P
 P 
P,
'+:= 	#+/DL	D$$*26<	"*.;>*Z&R*,	*,*, 0*, 	*, *, 
*,Z "#  *::: : "	:
 : 
:z#.L z!chhqk388A;/ r3   