§
    �ØjÿU  ã            
       óD  — d dl 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	 d dl
mZ d dlZd dlmZ d dlmZ d dlmZ ej                             d¦  «         ej                             d¦  «         d	„ Zd
„ Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd-d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z# G d„ d¦  «        Z$ G d„ d¦  «        Z% G d„ de$¦  «        Z& G d„ de$¦  «        Z' G d „ d!e$¦  «        Z(i Z)d"„ Z*d#„ Z+ G d$„ d%e$¦  «        Z,d.d&„Z-d'„ Z.d(„ Z/d)„ Z0dddd*dddddd+œ	d,„Z1dS )/é    N)Úcontextmanager)Údatetime)ÚPath)Úpymupdf)ÚOCRMode)Úauto_workersFc                 óf   — t          | t          t          f¦  «        rt          | ¦  «        j        S dS )NÚdocument)Ú
isinstanceÚstrr   Ústem©Úinputs    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/pymupdf4llm/batch_converter.pyÚ_derive_stemr      s,   € Ý�%�#�t˜Ñ%Ô%ð  Ý�E‰{Œ{ÔÐØˆ:ó    c                 ó¾   — t          | t          t          f¦  «        r@t          t          | ¦  «                             ¦   «                              ¦   «         ¦  «        S | S ©N)r   r   r   Ú
expanduserÚresolver   s    r   Ú_normalize_input_pathr      sI   € Ý�%�#�t˜Ñ%Ô%ð 7Ý•4˜‘;”;×)Ò)Ñ+Ô+×3Ò3Ñ5Ô5Ñ6Ô6Ð6Ø€Lr   c                 ó¨   — t          | ¦  «        }|s|d fS t          |¦  «        }|j        |k    r|n||z  }|r|                     dd¬¦  «         ||fS )NT)ÚparentsÚexist_ok)r   r   ÚnameÚmkdir)r   Úout_dirr   Úout_pathÚdoc_dirs        r   Ú_prepare_doc_dirr    !   sm   € Ý˜ÑÔ€DØð Ø�TˆzÐå�G‰}Œ}€Hà"œ-¨4Ò/Ð/ˆhˆh°XÀ±_€GØð 3Ø�Š˜d¨TˆÑ2Ô2Ð2Ø�ˆ=Ðr   c                 ó(  — t          j        | ¦  «        }|rt          |¦  «        nd|d<   |                     d¦  «        r|dk    rt	          d¦  «         n<|                     d¦  «        r'|r%|dz  }|                     d¬	¦  «         |j        |d
<   |S )NÚ r   Úembed_imagesÚtxtz+embed_images=True ignored for backend 'txt'Úwrite_imagesÚimagesT)r   Ú
image_path)ÚcopyÚdeepcopyr   ÚgetÚprintr   r   )Úbase_optionsr   ÚbackendÚlocal_optionsÚ	image_dirs        r   Ú_prepare_local_optionsr0   .   s¨   € Ý”M ,Ñ/Ô/€MØ/6Ð>�s 7™|œ|˜|¸B€M�)Ñà×Ò˜Ñ(Ô(ð 5Ø�eÒÐÝÐ?Ñ@Ô@Ð@øØ	×	Ò	˜>Ñ	*Ô	*ð 5¨wð 5Ø˜hÑ&ˆ	Ø�Š ˆÑ&Ô&Ð&à&/¤nˆ�lÑ#àÐr   c              #   óÀ  K  — | sd V — d S t          | ¦  «        dz  }|                     dd¬¦  «        }t          j        }t          j        }t          j        ¦   «         }|t          _        |t          _        t          j        | ¦  «         t          j	        t          j        ¬¦  «         	 d V — t          j        |¦  «         |t          _        |t          _        | 
                    ¦   «          t          j	        d ¬¦  «         d S # t          j        |¦  «         |t          _        |t          _        | 
                    ¦   «          t          j	        d ¬¦  «         w xY w)Nzrun-log.txtÚwúutf-8©Úencoding)Ústream)r   ÚopenÚsysÚstdoutÚstderrÚcwdÚosÚchdirr   Úset_messagesÚclose)r   Úlog_pathÚlog_fileÚ
old_stdoutÚ
old_stderrÚold_cwds         r   Ú_conversion_log_contextrE   >   s/  è è € àð ØˆˆˆØˆå�G‰}Œ}˜}Ñ,€HØ�}Š}˜S¨7ˆ}Ñ3Ô3€Hå”€JÝ”€JÝŒh‰jŒj€GØ…C„JØ…C„JÝ„HˆWÑÔÐÝÔ¥¤
Ð+Ñ+Ô+Ð+ð*Øˆˆˆå
Œ�ÑÔÐØ�Œ
Ø�Œ
Ø�ŠÑÔÐÝÔ DÐ)Ñ)Ô)Ð)Ð)Ð)øõ	 	Œ�ÑÔÐØ�Œ
Ø�Œ
Ø�ŠÑÔÐÝÔ DÐ)Ñ)Ô)Ð)Ð)øøøs   Â+D ÄAEc                 óŒ   — |                       d¦  «        }t          |t          ¦  «        r|j        S t          |¦  «        j        S )NÚuse_ocr)r*   r   r   Údescription)ÚoptionsÚocr_modes     r   Ú_describe_ocr_moderK   Y   s?   € Ø�{Š{˜9Ñ%Ô%€HÝ�(�GÑ$Ô$ð $ØÔ#Ð#Ý�8ÑÔÔ(Ð(r   c                 óü   — t          j        ¦   «         }t          d|                     ¦   «         › �¦  «         t          dt	          | ¦  «        › �¦  «         t          d|                      d¦  «        › �¦  «         d S )NzStart: z
OCR mode: zLayout mode: Úlayout_enabled)r   Únowr+   Ú	isoformatrK   r*   )rI   Ústarts     r   Ú_log_run_startrQ   `   sx   € ÝŒL‰NŒN€EÝ	Ð
'�E—O’OÑ%Ô%Ð
'Ð
'Ñ(Ô(Ð(Ý	Ð
4Õ)¨'Ñ2Ô2Ð
4Ð
4Ñ5Ô5Ð5Ý	Ð
9˜'Ÿ+š+Ð&6Ñ7Ô7Ð
9Ð
9Ñ:Ô:Ð:Ð:Ð:r   c                 óÞ   — t          j        ¦   «         }t          d|                     ¦   «         › �¦  «         t          | rdnd¦  «         |� t          d¦  «         t          |¦  «         d S d S )Nz
End: zStatus: successzStatus: errorz
Exception:)r   rN   r+   rO   )ÚsuccessÚerrorÚends      r   Ú_log_run_endrV   g   sp   € Ý
Œ,‰.Œ.€CÝ	Ð
%�C—M’M‘O”OÐ
%Ð
%Ñ&Ô&Ð&Ý	˜wÐ
;Ð
Ð
¨OÑ<Ô<Ð<ØÐÝˆlÑÔÐÝˆe‰Œˆˆˆð Ðr   c                ó  — |€| S t          |¦  «        st          d¦  «        ‚t          |pi ¦  «        }t          j        |¦  «        }|j        }|||dœ}	|	                     ¦   «         D ]\  }
}|
|v r	|
|vr|||
<   Œ || fi |¤Ž}|€| n|S )Nzconsumer must be callable©r   r-   rI   )ÚcallableÚ	TypeErrorÚdictÚinspectÚ	signatureÚ
parametersÚitems)ÚoutputÚconsumerÚconsumer_kwargsr   r-   rI   Úkwargsr]   ÚparamsÚcontext_valuesr   ÚvalueÚconsumeds                r   Ú_apply_consumerrh   p   sÑ   € ØÐØˆå�HÑÔð 5ÝÐ3Ñ4Ô4Ð4å�/Ð' RÑ(Ô(€FÝÔ! (Ñ+Ô+€IØÔ!€Fð ØØðð €Nð
 &×+Ò+Ñ-Ô-ð !ð !‰ˆˆeØ�6ˆ>ˆ>˜d¨&Ð0Ð0Ø ˆF�4‰Løàˆx˜Ð)Ð) &Ð)Ð)€HØÐ%ˆ6ˆ6¨8Ð3r   c                 óÂ   — t          ||¦  «        \  }}t          t          t          dœ}|                     |¦  «        }|€t          d|› �¦  «        ‚ || ||¦  «         d S )N©ÚmdÚjsonr$   úUnsupported backend: )r    Ú_write_markdownÚ_write_jsonÚ
_write_txtr*   Ú
ValueError)r`   r   r   r-   r   r   ÚwritersÚwriters           r   Ú_write_outputrt   ˆ   su   € Ý$ U¨GÑ4Ô4�M€Dˆ'õ ÝÝðð €Gð
 �[Š[˜Ñ!Ô!€FØ€~ÝÐ:°Ð:Ð:Ñ;Ô;Ð;Ø
€Fˆ6�7˜DÑ!Ô!Ð!Ð!Ð!r   c                 óˆ  — t          | t          t          f¦  «        rR||› d�z  }|                     dd¬¦  «        5 }t	          j        | |dd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          | t          ¦  «        r!||› d�z  }|                     | d¬¦  «         d S t          d	t          | ¦  «        › �¦  «        ‚)
Nú.jsonr2   r3   r4   Fé   ©Úensure_asciiÚindentz.mdú"Unsupported markdown output type: ©
r   Úlistr[   r7   rl   Údumpr   Ú
write_textrq   Útype)Úmd_textr   r   ÚpathÚfs        r   rn   rn   –   s(  € Ý�'�D¥$˜<Ñ(Ô(ð OØ˜D˜˜˜Ñ'ˆØ�YŠY�s WˆYÑ-Ô-ð 	@°ÝŒI�g˜q¨u¸QÐ?Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@å	�G�SÑ	!Ô	!ð OØ˜D˜˜˜Ñ%ˆØ�Š˜¨'ˆÑ2Ô2Ð2Ð2Ð2åÐM½dÀ7¹m¼mÐMÐMÑNÔNÐNó   ¼A"Á"A&Á)A&c                 ód   — ||› d�z  }|                      |                      ¦   «         ¦  «         d S )Nrv   )Úwrite_bytesÚencode)Úobjr   r   r‚   s       r   ro   ro   ¢   s4   € Ø˜�^�^�^Ñ#€DØ×Ò�S—Z’Z‘\”\Ñ"Ô"Ð"Ð"Ð"r   c                 óˆ  — t          | t          t          f¦  «        rR||› d�z  }|                     dd¬¦  «        5 }t	          j        | |dd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          | t          ¦  «        r!||› d�z  }|                     | d¬¦  «         d S t          d	t          | ¦  «        › �¦  «        ‚)
Nrv   r2   r3   r4   Frw   rx   z.txtr{   r|   )r`   r   r   r‚   rƒ   s        r   rp   rp   §   s  € Ý�&�4¥˜,Ñ'Ô'ð NØ˜D˜˜˜Ñ'ˆØ�YŠY�s WˆYÑ-Ô-ð 	?°ÝŒI�f˜a¨e¸AÐ>Ñ>Ô>Ð>ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?å	�F�CÑ	 Ô	 ð NØ˜D˜˜˜Ñ&ˆØ�Š˜¨ˆÑ1Ô1Ð1Ð1Ð1åÐL½dÀ6¹l¼lÐLÐLÑMÔMÐMr„   c                 ó  — t          |¦  «        }t          |¦  «        5  t          |¦  «         	 t          j        | ¦  «        }t          d|j        › �¦  «         |                     ¦   «          t          | ||||¬¦  «        }t          d¦  «         t          | dd |¦  «        cd d d ¦  «         S # t          $ r8}t          d|¦  «         t          | d|d ¦  «        cY d }~cd d d ¦  «         S d }~ww xY w# 1 swxY w Y   d S )NúPages: ©r-   rI   ra   rb   TF)r   rE   rQ   r   r7   r+   Ú
page_countr?   Úconvert_documentrV   ÚBatchResultÚ	Exception)	r   r-   rI   ra   rb   r   ÚdocÚoutÚes	            r   Ú_worker_convert_oner”   ³   s„  € Ý�7‰mŒm€Gå	  Ñ	)Ô	)ð 6ð 6Ý�wÑÔÐð	6Ý”,˜uÑ%Ô%ˆCÝÐ,˜CœNÐ,Ð,Ñ-Ô-Ð-Ø�IŠI‰KŒKˆKå"ØØØØ!Ø /ðñ ô ˆCõ ˜ÑÔÐÝ˜u d¨D°#Ñ6Ô6ð!6ð 6ð 6ð 6ñ 6ô 6ð 6ð 6øõ$ ð 	6ð 	6ð 	6Ý˜ Ñ"Ô"Ð"Ý˜u e¨Q°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5ð)6ð 6ð 6ð 6ñ 6ô 6ð 6ð 6øøøøð$	6øøøð%6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6s;   ŸC5°A3B0Â0
C2Â:!C-ÃC2ÃC5Ã-C2Ã2C5Ã5C9Ã<C9c                ó  — t           j        }t          j        |¦  «        }|                     dd¦  «         t          d| › �¦  «         |rkt           j        t           j        t           j        dœ}| 	                    |¦  «        }|€t          d|› �¦  «        ‚ || fi |¤Ž}	t          |	||| ||¬¦  «        S dt           j        i}| 	                    |¦  «        }|€t          d|› �¦  «        ‚ || fi |¤Ž}	t          |	||| ||¬¦  «        S )	zŸ
    Convert a single document using the selected backend and options.
    This function is used by all strategies (sequential, process pool, persistent).
    rM   NúProcessing document: rj   rm   rX   rk   z(Unsupported backend in non-layout mode: )Úpymupdf4llmÚ_use_layoutr(   r)   Úpopr+   Úto_markdownÚto_jsonÚto_textr*   rq   rh   )
r   r-   rI   ra   rb   rM   Úconversion_optionsÚ
convertersÚ	converterr`   s
             r   rŽ   rŽ   Ò   s_  € õ !Ô,€NÝœ wÑ/Ô/ÐØ×ÒÐ+¨TÑ2Ô2Ð2Ý	Ð
) %Ð
)Ð
)Ñ*Ô*Ð*àð 
åÔ)ÝÔ'ÝÔ&ð
ð 
ˆ
ð
 —N’N 7Ñ+Ô+ˆ	ØÐÝÐ>°WÐ>Ð>Ñ?Ô?Ð?Ø�˜5Ð7Ð7Ð$6Ð7Ð7ˆÝØØØØØØ&ð
ñ 
ô 
ð 	
ð �Ô/Ð0€JØ—’˜wÑ'Ô'€IØÐÝÐMÀGÐMÐMÑNÔNÐNØˆY�uÐ3Ð3Ð 2Ð3Ð3€FÝØØØØØØ"ðñ ô ð r   c                   ó   — e Zd Zd„ ZdS )Ú_BaseStrategyc                 ó   — t           ‚r   )ÚNotImplementedError)ÚselfÚinputsr-   rI   ra   rb   r   Úprogress_callbacks           r   Úrunz_BaseStrategy.run  s
   € õ "Ð!r   N©Ú__name__Ú
__module__Ú__qualname__r§   © r   r   r¡   r¡     s#   € € € € € ð
"ð 
"ð 
"ð 
"ð 
"r   r¡   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r�   z@
    Represents the result of processing a single document.
    c                 ó>   — || _         || _        || _        || _        d S r   )r   rS   rT   r`   )r¤   r   rS   rT   r`   s        r   Ú__init__zBatchResult.__init__  s"   € ØˆŒ
ØˆŒØˆŒ
ØˆŒˆˆr   c                 ó(   — d| j         ›d| j        › d�S )NzBatchResult(input=z
, success=ú))r   rS   )r¤   s    r   Ú__repr__zBatchResult.__repr__  s   € ØK D¤JÐKÐK¸D¼LÐKÐKÐKÐKr   N)r©   rª   r«   Ú__doc__r¯   r²   r¬   r   r   r�   r�     sA   € € € € € ðð ðð ð ðLð Lð Lð Lð Lr   r�   c                   ó   — e Zd Zd„ ZdS )Ú_SequentialStrategyc           	   #   ó(  K  — t          |¦  «        }d}	|D ]û}
t          |
|¦  «        \  }}t          |||¦  «        }t          |¦  «        5  t	          |¦  «         	 t          |
||||¬¦  «        }|�t          ||
||¦  «         t          |
dd |¦  «        }n)# t          $ r}t          |
d|d ¦  «        }Y d }~nd }~ww xY wt          |j
        |j
        s|j        nd ¦  «         d d d ¦  «         n# 1 swxY w Y   |	dz  }	|r ||	|¦  «         |V — Œüd S )Nr   rŒ   TFrw   )Úlenr    r0   rE   rQ   rŽ   rt   r�   r�   rV   rS   rT   )r¤   r¥   r-   rI   ra   rb   r   r¦   ÚtotalÚdoneÚinpÚ_r   r.   r’   Úresultr“   s                    r   r§   z_SequentialStrategy.run'  s´  è è € õ �F‘”ˆØˆàð 	ð 	ˆCÝ)¨#¨wÑ7Ô7‰JˆAˆwÝ2°7¸GÀWÑMÔMˆMå(¨Ñ1Ô1ð ð Ý˜}Ñ-Ô-Ð-ð>Ý*ØØ 'Ø -Ø!)Ø(7ðñ ô �Cð Ð*Ý% c¨3°¸ÑAÔAÐAå(¨¨d°D¸#Ñ>Ô>�F�Føå ð >ð >ð >Ý(¨¨e°Q¸Ñ=Ô=�F�F�F�F�F�Føøøøð>øøøõ Ø”N¸¼Ð$P F¤L LÈDñô ð ð'ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð. �A‰IˆDØ ð /Ø!Ð! $¨Ñ.Ô.Ð.àˆLˆLˆLˆLð?	ð 	s<   ÁC/Á:BÂC/Â
B=Â!B8Â3C/Â8B=Â=&C/Ã/C3	Ã6C3	Nr¨   r¬   r   r   rµ   rµ   &  s#   € € € € € ð,ð ,ð ,ð ,ð ,r   rµ   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_ProcessPoolStrategyc                 ó   — || _         d S r   ©Úworkers©r¤   rÁ   s     r   r¯   z_ProcessPoolStrategy.__init__\  ó   € ØˆŒˆˆr   c              #   ó†  ‡K  — t          |¦  «        }d}	g }
|D ]N}t          ||¦  «        \  }}t          |||¦  «        }|
                     |||||t	          |¦  «        f¦  «         ŒOt
          j                             | j        ¬¦  «        5 Šˆfd„|
D ¦   «         }t          ||¦  «        D ]{\  }}	 | 
                    ¦   «         }|j        r|�t          |j        |||¦  «         n)# t          $ r}t          |d|d ¦  «        }Y d }~nd }~ww xY w|	dz  }	|r ||	|¦  «         |V — Œ|	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   ©Úmax_workersc                 ó6   •— g | ]} ‰j         t          g|¢R Ž ‘ŒS r¬   )Úsubmitr”   )Ú.0ÚargsÚexecutors     €r   ú
<listcomp>z,_ProcessPoolStrategy.run.<locals>.<listcomp>y  s;   ø€ ð ð ð Ø@D��”Õ 3Ð;°dÐ;Ð;Ð;ðð ð r   Frw   )r·   r    r0   Úappendr   Ú
concurrentÚfuturesÚProcessPoolExecutorrÁ   Úzipr¼   rS   rt   r`   r�   r�   )r¤   r¥   r-   rI   ra   rb   r   r¦   r¸   r¹   Ú	task_argsrº   r»   r   r.   rÏ   Úfutr¼   r“   rË   s                      @r   r§   z_ProcessPoolStrategy.run_  sý  øè è € õ �F‘”ˆØˆàˆ	Øð 	ð 	ˆCÝ)¨#¨wÑ7Ô7‰JˆAˆwÝ2°7¸GÀWÑMÔMˆMà×ÒØ�g˜}¨h¸ÍÈWÉÌÐVñô ð ð õ Ô×3Ò3Øœð 4ñ 
ô 
ð 	àðð ð ð ØHQðñ ô ˆGõ   ¨Ñ0Ô0ð ð ‘��Sð>Ø ŸZšZ™\œ\�Fà”~ð L¨'Ð*=Ý% f¤m°S¸'À7ÑKÔKÐKøøå ð >ð >ð >Ý(¨¨e°Q¸Ñ=Ô=�F�F�F�F�F�Føøøøð>øøøð ˜‘	�Ø$ð 3Ø%Ð% d¨EÑ2Ô2Ð2à����ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s<   Â$D6Â24C'Ã&D6Ã'
DÃ1DÄD6ÄDÄD6Ä6D:Ä=D:N©r©   rª   r«   r¯   r§   r¬   r   r   r¾   r¾   [  s2   € € € € € ðð ð ð,ð ,ð ,ð ,ð ,r   r¾   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_StreamingProcessPoolStrategyc                 ó   — || _         d S r   rÀ   rÂ   s     r   r¯   z&_StreamingProcessPoolStrategy.__init__”  rÃ   r   c              #   ó¤  K  — t          |¦  «        }d}	t          j                             | j        ¬¦  «        5 }
i }|D ]X}t          ||¦  «        \  }}t          |||¦  «        }|
                     t          |||||t          |¦  «        ¦  «        }|||<   ŒYt          j         
                    |¦  «        D ]€}||         }	 |                     ¦   «         }|j        r|�t          |j        |||¦  «         n)# t          $ r}t!          |d|d ¦  «        }Y d }~nd }~ww xY w|	dz  }	|r ||	|¦  «         |V — Œ�	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   rÅ   Frw   )r·   rÎ   rÏ   rÐ   rÁ   r    r0   rÈ   r”   r   Úas_completedr¼   rS   rt   r`   r�   r�   )r¤   r¥   r-   rI   ra   rb   r   r¦   r¸   r¹   rË   Úfuture_to_inputrº   r»   r   r.   rÓ   r¼   r“   s                      r   r§   z!_StreamingProcessPoolStrategy.run—  sç  è è € õ �F‘”ˆØˆåÔ×3Ò3Øœð 4ñ 
ô 
ð %	àà ˆOàð +ð +�Ý-¨c°7Ñ;Ô;‘
��7Ý 6°wÀÈÑ QÔ Q�à—o’oÝ'ØØØ!ØØ#Ý˜‘L”Lñô �ð (+� Ñ$Ð$å!Ô)×6Ò6°ÑGÔGð ð �Ø% cÔ*�ð>Ø ŸZšZ™\œ\�Fà”~ð L¨'Ð*=Ý% f¤m°S¸'À7ÑKÔKÐKøøå ð >ð >ð >Ý(¨¨e°Q¸Ñ=Ô=�F�F�F�F�F�Føøøøð>øøøð ˜‘	�Ø$ð 3Ø%Ð% d¨EÑ2Ô2Ð2à����ð!ð+%	ð %	ð %	ñ %	ô %	ð %	ð %	ð %	ð %	ð %	ð %	ð %	øøøð %	ð %	ð %	ð %	ð %	ð %	s<   ¹BEÃ4C6Ã5EÃ6
DÄ DÄEÄDÄEÅE	ÅE	NrÔ   r¬   r   r   rÖ   rÖ   “  s2   € € € € € ðð ð ð2ð 2ð 2ð 2ð 2r   rÖ   c                 óV   — | t           d<   |t           d<   |t           d<   |t           d<   dS )zo
    Initializer for persistent worker processes.
    Runs once per worker and stores all expensive state.
    r-   rI   ra   rb   N)Ú_worker_staterŒ   s       r   Ú_worker_initrÝ   Ó  s3   € ð
  '…M�)ÑØ&…M�)ÑØ (…M�*ÑØ'6…MÐ#Ñ$Ð$Ð$r   c           	      ó´  — t          |¦  «        }t          |¦  «        5  t          t          d         ¦  «         	 t	          j        | ¦  «        }t          d|j        › �¦  «         |                     ¦   «          t          t          d         |t          d         ¦  «        }t          d| › �¦  «         t          | t          d         |t          d         t          d         ¬¦  «        }t          dt          |¦  «        › �¦  «         t          |t          ¦  «        r t          d	t          |¦  «        › �¦  «         nt          d
t          |¦  «        › �¦  «         t!          d¦  «         t#          | dd|¦  «        cddd¦  «         S # t$          $ r8}t!          d|¦  «         t#          | d|d¦  «        cY d}~cddd¦  «         S d}~ww xY w# 1 swxY w Y   dS )zc
    Worker function for persistent pool.
    Reuses OCR/layout state stored in _worker_state.
    rI   r‹   r-   r–   ra   rb   rŒ   zOutput type: zOutput length: zOutput repr: TNF)r   rE   rQ   rÜ   r   r7   r+   r�   r?   r0   rŽ   r€   r   r   r·   ÚreprrV   r�   r�   )r   r   r‘   r.   r’   r“   s         r   Ú_worker_convert_one_persistentrà   Þ  sI  € õ
 �7‰mŒm€Gå	  Ñ	)Ô	)ð %6ð %6Ý•} YÔ/Ñ0Ô0Ð0ð"	6å”,˜uÑ%Ô%ˆCÝÐ,˜CœNÐ,Ð,Ñ-Ô-Ð-Ø�IŠI‰KŒKˆKõ 3Ý˜iÔ(ØÝ˜iÔ(ñô ˆMõ Ð1¨%Ð1Ð1Ñ2Ô2Ð2Ý"ØÝ% iÔ0Ø%Ý& zÔ2Ý -Ð.?Ô @ðñ ô ˆCõ Ð-¥$ s¡)¤)Ð-Ð-Ñ.Ô.Ð.Ý˜#�sÑ#Ô#ð 3ÝÐ2­¨C©¬Ð2Ð2Ñ3Ô3Ð3Ð3åÐ1¥d¨3¡i¤iÐ1Ð1Ñ2Ô2Ð2å˜ÑÔÐÝ˜u d¨D°#Ñ6Ô6ðC%6ð %6ð %6ð %6ñ %6ô %6ð %6ð %6øõF ð 	6ð 	6ð 	6Ý˜ Ñ"Ô"Ð"Ý˜u e¨Q°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5ðK%6ð %6ð %6ð %6ñ %6ô %6ð %6ð %6øøøøðF	6øøøðG%6ð %6ð %6ð %6øøøð %6ð %6ð %6ð %6ð %6ð %6s;   ŸG»E FÆ
G
Æ!GÆ3G
Æ4GÇG
Ç
GÇGÇGc                   ó   — e Zd Zd„ Zd„ ZdS )Ú_PersistentPoolStrategyc                 ó   — || _         d S r   rÀ   rÂ   s     r   r¯   z _PersistentPoolStrategy.__init__  rÃ   r   c              #   ó¨  K  — t          |¦  «        }d}	t          j                             | j        t
          |t          j        |¦  «        ||f¬¦  «        5 }
g }|D ]Q}t          ||¦  «        \  }}| 	                    |
 
                    t          |t          |¦  «        ¦  «        ¦  «         ŒRt          ||¦  «        D ]{\  }}	 |                     ¦   «         }|j        r|�t!          |j        |||¦  «         n)# t$          $ r}t'          |d|d ¦  «        }Y d }~nd }~ww xY w|	dz  }	|r ||	|¦  «         |V — Œ|	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )rÆ   ÚinitializerÚinitargsFrw   )r·   rÎ   rÏ   rÐ   rÁ   rÝ   r(   r)   r    rÍ   rÈ   rà   r   rÑ   r¼   rS   rt   r`   r�   r�   )r¤   r¥   r-   rI   ra   rb   r   r¦   r¸   r¹   rË   rÏ   rº   r»   r   rÓ   r¼   r“   s                     r   r§   z_PersistentPoolStrategy.run  sà  è è € õ �F‘”ˆØˆõ Ô×3Ò3ØœÝ$Ø�tœ}¨WÑ5Ô5°xÀÐQð 4ñ 
ô 
ð 	ð àˆGØð ð �Ý-¨c°7Ñ;Ô;‘
��7à—’Ø—O’OÕ$BÀCÍÈWÉÌÑVÔVñô ð ð õ
   ¨Ñ0Ô0ð ð ‘��Sð>Ø ŸZšZ™\œ\�FØ”~ð L¨'Ð*=Ý% f¤m°S¸'À7ÑKÔKÐKøøå ð >ð >ð >Ý(¨¨e°Q¸Ñ=Ô=�F�F�F�F�F�Føøøøð>øøøð ˜‘	�Ø$ð 3Ø%Ð% d¨EÑ2Ô2Ð2à����ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s=   ÁA,EÃ4C8Ã7EÃ8
DÄDÄEÄDÄEÅEÅENrÔ   r¬   r   r   râ   râ     s2   € € € € € ðð ð ð*ð *ð *ð *ð *r   râ   c                 óˆ   — | dv rt          ¦   «         S |rt          | ¦  «        S |rt          | ¦  «        S t          | ¦  «        S )z;
    Select the appropriate batch processing strategy.
    )Nr   rw   )rµ   râ   rÖ   r¾   ©rÁ   Ú	streamingÚ
persistents      r   Ú_select_strategyrë   H  s[   € ð �,ÐÐÝ"Ñ$Ô$Ð$ð ð 0Ý& wÑ/Ô/Ð/ð ð 6Ý,¨WÑ5Ô5Ð5õ   Ñ(Ô(Ð(r   c                 óˆ  — | dk    rIt          d)i dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“ŽS | dk    rt          ddddddddddddd¬ ¦  «        S | d!k    r:t          d)i dd“dd“dd“dd“dd“dd“d
d“dd“dd“d	d“dd“dd“d"d#“d$d%“d&d'“dd“ŽS t          d(| › �¦  «        ‚)*z6
    Default conversion options for each backend.
    rk   Ú	image_dpié–   r#   FÚfilenamer"   ÚfooterÚ	force_ocrÚ
force_textTÚheaderÚignore_codeÚimage_formatÚpngr'   Úocr_dpiÚocr_functionNÚocr_languageÚengÚpage_chunksÚpage_heightÚpage_separatorsÚpagesÚ
page_widthid  Úshow_progressrG   r%   rl   )rí   rõ   r'   rþ   r÷   r%   r#   r   rò   rG   rñ   rù   rø   r$   Útable_formatÚgridÚtable_max_widthéd   Útable_min_col_widthé
   rm   r¬   )r[   rq   )r-   s    r   Ú_default_optionsr  b  s`  € ð
 �$‚€Ýð 
ð 
ð 
Ø�cð
à˜ð
ð �Rð
ð �5ð	
ð
 �eð
ð �tð
ð �5ð
ð ˜ð
ð ˜ð
ð �rð
ð �Cð
ð ˜ð
ð ˜ð
ð ˜ð
ð ˜ð
ð  "˜Eð!
ð" �$ð#
ð$ �sð%
ð&  ˜%ð'
ð( �Dð)
ð* ˜ð+
ð 	
ð0 
�FÒ	Ð	ÝØØØØØØØØØØØØØð
ñ 
ô 
ð 	
ð  
�EÒ	Ð	Ýð 
ð 
ð 
Ø�Rð
à�4ð
ð �4ð
ð �$ð	
ð
 ˜ð
ð  ˜%ð
ð �tð
ð �Cð
ð �Dð
ð �eð
ð ˜ð
ð ˜ð
ð  ˜ð
ð  ˜Cð
ð !# ð
ð  ˜ð!
ð 	
õ( Ð:°Ð:Ð:Ñ;Ô;Ð;r   c                 óV   — |                      d¦  «        r| st          d¦  «        ‚d S d S )Nr%   z"write_images=True requires out_dir)r*   rq   )r   rI   s     r   Ú_validate_image_output_optionsr	  ©  s@   € Ø‡{‚{�>Ñ"Ô"ð ?¨7ð ?ÝÐ=Ñ>Ô>Ð>ð?ð ?ð ?ð ?r   c                 ó¦   — |rt          | ¦  «        dk    rd S t          |¦  «        j        }d„ | D ¦   «         }||v rt          d|› d�¦  «         d S d S )Nrw   c                 ó,   — h | ]}t          |¦  «        ’ŒS r¬   )r   ©rÉ   rº   s     r   ú	<setcomp>z*_warn_ambiguous_out_dir.<locals>.<setcomp>³  s    € Ð1Ð1Ð1 3�\˜#ÑÔÐ1Ð1Ð1r   z7Warning: out_dir looks like a single-document folder ('ze') while multiple inputs were provided. If this is not intended, use a parent batch output directory.)r·   r   r   r+   )r¥   r   Úout_nameÚstemss       r   Ú_warn_ambiguous_out_dirr  ®  sŠ   € Øð •c˜&‘k”k QÒ&Ð&Øˆå�G‰}Œ}Ô!€HØ1Ð1¨&Ð1Ñ1Ô1€EØ�5ÐÐÝðLØðLð Lð Lñ	
ô 	
ð 	
ð 	
ð 	
ð Ðr   rk   )	rÁ   ré   r   r-   rI   ra   rb   r¦   rê   c       	   	      ó  — t           j        rddl}
t          | t          t
          f¦  «        st          d¦  «        ‚|�@t          t          |¦  «         	                    ¦   «          
                    ¦   «         ¦  «        }d„ | D ¦   «         } t          | |¦  «         |s!t          j        t          |¦  «        ¦  «        }t           j        |d<   t          ||¦  «         |€et!          t#          | ¦  «        |                     dd¦  «        |                     dt&          j        ¦  «        |                     d	¦  «        ¬
¦  «        }t+          |||	¬¦  «        }|                     | ||||||¦  «        }|r|S t	          |¦  «        S )zC
    Convert a batch of documents using the selected strategy.
    r   Nzinputs must be a list or tuplec                 ó,   — g | ]}t          |¦  «        ‘ŒS r¬   )r   r  s     r   rÌ   z!convert_batch.<locals>.<listcomp>Û  s!   € Ð;Ð;Ð;¨SÕ# CÑ(Ô(Ð;Ð;Ð;r   rM   r÷   rî   rG   rø   )Ú
file_countÚuser_dpirJ   Úpluginrè   )r—   r˜   Úonnxruntimer   r}   ÚtuplerZ   r   r   r   r   r  r(   r)   r  r	  r   r·   r*   r   ÚSELECT_KEEP_OLDrë   r§   )r¥   rÁ   ré   r   r-   rI   ra   rb   r¦   rê   r  ÚstrategyÚresultss                r   Úconvert_batchr  Á  s–  € õ  Ôð ØÐÐÐÝ�f�t¥U˜mÑ,Ô,ð :ÝÐ8Ñ9Ô9Ð9ð ÐÝ•d˜7‘m”m×.Ò.Ñ0Ô0×8Ò8Ñ:Ô:Ñ;Ô;ˆð <Ð;°FÐ;Ñ;Ô;€Få˜F GÑ,Ô,Ð,ð ð ;Ý”-Õ 0°Ñ 9Ô 9Ñ:Ô:ˆõ !,Ô 7€GÐÑå" 7¨GÑ4Ô4Ð4à€ÝÝ˜6‘{”{Ø—[’[ ¨CÑ0Ô0Ø—[’[ ­GÔ,CÑDÔDØ—;’;˜~Ñ.Ô.ð	
ñ 
ô 
ˆõ  ØØØðñ ô €Hð �lŠlØØØØØØØñô €Gð ð Øˆõ �‰=Œ=Ðr   r   )F)2Úconcurrent.futuresrÎ   r(   r\   rl   r<   r8   Ú
contextlibr   r   Úpathlibr   r—   r   Úpymupdf4llm.ocrr   Úpymupdf4llm.worker_sizingr   ÚTOOLSÚmupdf_display_errorsÚmupdf_display_warningsr   r   r    r0   rE   rK   rQ   rV   rh   rt   rn   ro   rp   r”   rŽ   r¡   r�   rµ   r¾   rÖ   rÜ   rÝ   rà   râ   rë   r  r	  r  r  r¬   r   r   ú<module>r$     s“  ðØ Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð „× "Ò " 5Ñ )Ô )Ð )Ø „× $Ò $ UÑ +Ô +Ð +ðð ð ðð ð ð
ð 
ð 
ðð ð ð  ð*ð *ñ „ð*ð4)ð )ð )ð;ð ;ð ;ðð ð ð ð4ð 4ð 4ð0"ð "ð "ð	Oð 	Oð 	Oð#ð #ð #ð
	Nð 	Nð 	Nð6ð 6ð 6ð>*ð *ð *ðd"ð "ð "ð "ð "ñ "ô "ð "ðLð Lð Lð Lð Lñ Lô Lð Lð(-ð -ð -ð -ð -˜-ñ -ô -ð -ðj0ð 0ð 0ð 0ð 0˜=ñ 0ô 0ð 0ðp6ð 6ð 6ð 6ð 6 Mñ 6ô 6ð 6ðz €ð7ð 7ð 7ð,6ð ,6ð ,6ðh.ð .ð .ð .ð .˜mñ .ô .ð .ðl)ð )ð )ð )ð4D<ð D<ð D<ðN?ð ?ð ?ð

ð 
ð 
ð, ØØØØØØØØðFð Fð Fð Fð Fð Fð Fr   