ó
    �®žjDÆ  ã                  ó   • 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rSSKJ	r	J
r
  SSKJrJr  SSKJr  SSKJrJrJrJrJr  SSKrSSKJrJrJrJrJrJr  SS	KJ r   SS
K!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)J*r*  SSK+J,r,  SSK-J.r.J/r/  SSK0J1r1  SSK2J3r3J4r4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;  SSK<J=r=J>r>  SSK?J@r@JArAJBrB  SSKCJDrDJErE  SSKFJGrGJHrH  SSKIJJrJJKrK  SSKLJMrM  \Rœ                  " \O5      rP\)R¢                  \)R¢                  \)R¢                  \)R¢                  S.rRSS.           S*S jjrS\ " S S5      5       rT\ " S S5      5       rU " S  S!5      rV " S" S#5      rW " S$ S%\W5      rX\ " S& S'5      5       rY " S( S)\G5      rZg)+a¾  Thread-safe, production-ready PDF pipeline
================================================
A self-contained, thread-safe PDF conversion pipeline exploiting parallelism between pipeline stages and models.

* **Per-run isolation** - every :py:meth:`execute` call uses its own bounded queues and worker
  threads so that concurrent invocations never share mutable state.
* **Deterministic run identifiers** - pages are tracked with an internal *run-id* instead of
  relying on :pyfunc:`id`, which may clash after garbage collection.
* **Explicit back-pressure & shutdown** - producers block on full queues; queue *close()*
  propagates downstream so stages terminate deterministically without sentinels.
* **Minimal shared state** - heavyweight models are initialised once per pipeline instance
  and only read by worker threads; no runtime mutability is exposed.
* **Strict typing & clean API usage** - code is fully annotated and respects *coding_rules.md*.
é    )ÚannotationsN)ÚdefaultdictÚdeque)Ú	dataclassÚfield)ÚPath)ÚAnyÚCallableÚIterableÚSequenceÚcast)ÚDocItemÚImageRefÚPageItemÚPictureItemÚSizeÚ	TableItem)ÚAbstractDocumentBackend)ÚPdfDocumentBackendÚiter_pdf_page_backends)ÚAssembledUnitÚConversionStatusÚDoclingComponentTypeÚ	ErrorItemÚFailureCategoryÚPage)ÚConversionResult)ÚLayoutPostprocessorOptionsÚThreadedPdfPipelineOptions)Úsettings)Úget_layout_factoryÚget_ocr_factoryÚget_table_structure_factory)ÚCodeFormulaVlmModel)ÚHeadingHierarchyModel)ÚLayoutPostprocessingModel)ÚPageAssembleModelÚPageAssembleOptions)ÚPagePreprocessingModelÚPagePreprocessingOptionsÚresolve_skip_cell_extraction)ÚReadingOrderModelÚReadingOrderOptions)ÚConvertPipelineÚget_expected_page_nos)ÚProfilingScopeÚTimeRecorder)Úchunkify)ÚocrÚlayoutÚtableÚassemble©Úpage_noc                óh   • [        U U[        U5      =(       d    UR                  R                  UUS9$ )N)Úcomponent_typeÚmodule_nameÚerror_messageÚcategoryr8   )r   ÚstrÚ	__class__Ú__name__©r:   r;   Úerrorr=   r8   s        Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/pipeline/standard_pdf_pipeline.pyÚ_make_error_itemrD   i   s3   € ô Ø%ØÜ˜%“j×< E§O¡O×$<Ñ$<ØØñð ó    c                  ól   • \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
rS\S'   S
rS\S'   SrS\S'   Sr	g
)ÚThreadedIteméz   z.Envelope that travels between pipeline stages.zPage | NoneÚpayloadÚintÚrun_idr8   r   Úconv_resNzException | NonerB   zErrorItem | NoneÚfailureFÚboolÚ	is_failed© )
r@   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__rB   rM   rO   Ú__static_attributes__rP   rE   rC   rG   rG   z   s;   ‡ á8àÓØƒKØƒLØÓØ"€EÐÓ"Ø $€GÐÓ$Ø€IˆtÖrE   rG   c                  ó¤   • \ rS rSr% Sr\" \S9rS\S'   \" \S9r	S\S'   Sr
S	\S
'   \SS j5       r\SS j5       r\SS j5       r\SS j5       rSrg)ÚProcessingResulté‡   z%Aggregated outcome of a pipeline run.©Údefault_factoryz
list[Page]Úpagesz-list[tuple[int, Exception, ErrorItem | None]]Úfailed_pagesr   rJ   Útotal_expectedc                ó,   • [        U R                  5      $ ©N)Úlenr\   ©Úselfs    rC   Úsuccess_countÚProcessingResult.success_count‘   s   € ä�4—:‘:‹ÐrE   c                ó,   • [        U R                  5      $ r`   )ra   r]   rb   s    rC   Úfailure_countÚProcessingResult.failure_count•   s   € ä�4×$Ñ$Ó%Ð%rE   c                óT   • SU R                   s=:  =(       a    U R                  :  $ s  $ ©Nr   )rd   r^   rb   s    rC   Úis_partial_successÚ#ProcessingResult.is_partial_success™   s'   € à�4×%Ñ%×;Ó;¨×(;Ñ(;Ñ;Ð;Ñ;Ð;rE   c                óL   • U R                   S:H  =(       a    U R                  S:„  $ rj   )rd   rg   rb   s    rC   Úis_complete_failureÚ$ProcessingResult.is_complete_failure�   s#   € à×!Ñ! QÑ&×A¨4×+=Ñ+=ÀÑ+AÐArE   rP   N)ÚreturnrJ   ©rp   rN   )r@   rQ   rR   rS   rT   r   Úlistr\   rU   r]   r^   Úpropertyrd   rg   rk   rn   rV   rP   rE   rC   rX   rX   ‡   s†   ‡ á/á¨dÑ3€Eˆ:Ó3ÙBGØñC€LÐ?ó ð €N�CÓàóó ðð ó&ó ð&ð ó<ó ð<ð óBó óBrE   rX   c                  ó`   • \ rS rSrSrSrS
S jrSSS jjrSSS jjrSS jr	\
SS	 j5       rSrg)ÚThreadedQueueé¢   zLBounded queue with blocking put/ get_batch and explicit *close()* semantics.)Ú_closedÚ_itemsÚ_lockÚ_maxÚ
_not_emptyÚ	_not_fullc                ó  • Xl         [        5       U l        [        R                  " 5       U l        [        R                  " U R
                  5      U l        [        R                  " U R
                  5      U l        SU l	        g ©NF)
rz   r   rx   Ú	threadingÚLockry   Ú	Conditionr|   r{   rw   )rc   Úmax_sizes     rC   Ú__init__ÚThreadedQueue.__init__§   sQ   € Ø!Œ	Ü+0«7ˆŒÜ—^’^Ó%ˆŒ
Ü"×,Ò,¨T¯Z©ZÓ8ˆŒÜ#×-Ò-¨d¯j©jÓ9ˆŒØˆ�rE   Nc                óî  • U R                      U R                  (       a
   SSS5        g[        R                  " 5       n[	        U R
                  5      U R                  :¼  a«  U R                  (       dš  UbG  U[        R                  " 5       U-
  -
  nUS::  a
   SSS5        gU R                   R                  U5        OU R                   R                  5         [	        U R
                  5      U R                  :¼  a  U R                  (       d  Mš  U R                  (       a
   SSS5        gU R
                  R                  U5        U R                  R                  5          SSS5        g! , (       d  f       g= f)zJBlock until queue accepts *item* or is closed.  Returns *False* if closed.NFr   T)r|   rw   ÚtimeÚ	monotonicra   rx   rz   ÚwaitÚappendr{   Únotify)rc   ÚitemÚtimeoutÚstartÚ	remainings        rC   ÚputÚThreadedQueue.put°   s÷   € à�^‹^Ø�|�|Ø÷ ˆ^ô —N’NÓ$ˆEÜ�d—k‘kÓ" d§i¡iÓ/¸¿¿ØÑ&Ø '¬4¯>ª>Ó+;¸eÑ+CÑ D�IØ  A“~Ø$÷ ˆ^ð —N‘N×'Ñ'¨	Õ2à—N‘N×'Ñ'Ô)ô �d—k‘kÓ" d§i¡iÓ/¸¿¿¹ð �|�|Ø÷ ˆ^ð �K‰K×Ñ˜tÔ$Ø�O‰O×"Ñ"Ô$Ø÷! �^Ž^ús$   �E&©A.E&Â A*E&ÄE&Ä'6E&Å&
E4c                óð  • U R                      [        R                  " 5       nU R                  (       dš  U R                  (       d‰  UbH  U[        R                  " 5       U-
  -
  nUS::  a  / sSSS5        $ U R                   R                  U5        OU R                   R                  5         U R                  (       d  U R                  (       d  M‰  / nU R                  (       aZ  [        U5      U:  aK  UR                  U R                  R                  5       5        U R                  (       a  [        U5      U:  a  MK  U(       a  U R                  R                  5         UsSSS5        $ ! , (       d  f       g= f)uS   Return up to *size* items.  Blocks until â‰¥1 item present or queue closed/timeout.Nr   )r{   r†   r‡   rx   rw   rˆ   ra   r‰   Úpopleftr|   Ú
notify_all)rc   ÚsizerŒ   r�   rŽ   Úbatchs         rC   Ú	get_batchÚThreadedQueue.get_batchÅ   sê   € à�_‹_Ü—N’NÓ$ˆEØ—k—k¨$¯,¯,ØÑ&Ø '¬4¯>ª>Ó+;¸eÑ+CÑ D�IØ  A“~Ø!÷ ‰_ð —O‘O×(Ñ(¨Õ3à—O‘O×(Ñ(Ô*ð —k—k¨$¯,¯,©,ð )+ˆEØ—+—+¤# e£*¨tÓ"3Ø—‘˜TŸ[™[×0Ñ0Ó2Ô3ð —+—+¤# e£*¨tÕ"3æØ—‘×)Ñ)Ô+Ø÷ �_�_ús    �AE'Á4AE'ÃA+E'Ä;"E'Å'
E5c                óÆ   • U R                      SU l        U R                  R                  5         U R                  R                  5         S S S 5        g ! , (       d  f       g = f)NT)ry   rw   r{   r“   r|   rb   s    rC   ÚcloseÚThreadedQueue.closeÙ   s:   € Ø�Z‹ZØˆDŒLØ�O‰O×&Ñ&Ô(Ø�N‰N×%Ñ%Ô'÷ �ZŽZús   �<AÁ
A c                ó   • U R                   $ r`   )rw   rb   s    rC   ÚclosedÚThreadedQueue.closedà   s   € à�|‰|ÐrE   )r‚   rJ   rp   ÚNoner`   )r‹   rG   rŒ   úfloat | Nonerp   rN   )r”   rJ   rŒ   rŸ   rp   úlist[ThreadedItem]©rp   rž   rq   )r@   rQ   rR   rS   rT   Ú	__slots__rƒ   r�   r–   r™   rs   rœ   rV   rP   rE   rC   ru   ru   ¢   s2   † ÙVàQ€Iôöö*ô((ð óó órE   ru   c                  óŒ   • \ rS rSrSrSSSS.                 SS jjrSS jrSS jrSS	 jrSS
 jr	SS jr
SS jrSrg)ÚThreadedPipelineStageéå   z4A single pipeline stage backed by one worker thread.ç      .@N)Úshutdown_timeoutÚpostprocessÚtimed_out_run_idsc               óÊ   • Xl         X l        X0l        X@l        X`l        [        U5      U l        / U l        S U l        SU l	        Xpl
        Ub  UU l        g [        5       U l        g r~   )ÚnameÚmodelÚ
batch_sizeÚbatch_timeoutr§   ru   Úinput_queueÚ_outputsÚ_threadÚ_runningÚ_postprocessÚsetÚ_timed_out_run_ids)	rc   r«   r¬   r­   r®   Úqueue_max_sizer§   r¨   r©   s	            rC   rƒ   ÚThreadedPipelineStage.__init__è   se   € ð Œ	ØŒ
Ø$ŒØ*ÔØ 0ÔÜ(¨Ó8ˆÔØ-/ˆŒØ04ˆŒØˆŒØ'Ôà!2Ñ!>Ðð 	ÕÜDGÃEð 	ÕrE   c                ó:   • U R                   R                  U5        g r`   )r°   r‰   )rc   Úqs     rC   Úadd_output_queueÚ&ThreadedPipelineStage.add_output_queue  s   € Ø�‰×Ñ˜QÕrE   c                óÎ   • U R                   (       a  g SU l         [        R                  " U R                  SU R                   3SS9U l        U R
                  R                  5         g )NTzStage-F©Útargetr«   Údaemon)r²   r   ÚThreadÚ_runr«   r±   r�   rb   s    rC   r�   ÚThreadedPipelineStage.start  sM   € Ø�=�=ØØˆŒÜ ×'Ò'Ø—9‘9 V¨D¯I©I¨;Ð#7Àñ
ˆŒð 	�‰×ÑÕrE   c                ób  • U R                   (       d  g SU l         U R                  R                  5         U R                  bo  U R                  R	                  U R
                  S9  U R                  R                  5       (       a,  [        R                  SU R                  U R
                  5        g g g )NF©rŒ   z…Stage %s thread did not terminate within %.1fs. Thread is likely stuck in a blocking call and will be abandoned (resources may leak).)
r²   r¯   r™   r±   Újoinr§   Úis_aliveÚ_logÚwarningr«   rb   s    rC   ÚstopÚThreadedPipelineStage.stop  s‰   € Ø�}�}ØØˆŒØ×Ñ×ÑÔ Ø�<‰<Ñ#à�L‰L×Ñ d×&;Ñ&;ÐÑ<Ø�|‰|×$Ñ$×&Ñ&Ü—‘ðlà—I‘IØ×)Ñ)õ	ð 'ð $rE   c                ó.  •  U R                   (       aˆ  U R                  R                  U R                  U R                  5      nU(       d  U R                  R
                  (       a  O5U R                  U5      nU R                  U5        U R                   (       a  Mˆ  U R                   H  nUR                  5         M     g ! [         a#    [        R                  SU R                  5         NPf = f! U R                   H  nUR                  5         M     f = f)NzFatal error in stage %s)r²   r¯   r–   r­   r®   rœ   Ú_process_batchÚ_emitÚ	ExceptionrÇ   Ú	exceptionr«   r°   r™   )rc   r•   Ú	processedr¹   s       rC   rÁ   ÚThreadedPipelineStage._run!  sÄ   € ð	Ø—-—-Ø×(Ñ(×2Ñ2°4·?±?ÀD×DVÑDVÓW�Þ ×!1Ñ!1×!8×!8ØØ ×/Ñ/°Ó6�	Ø—
‘
˜9Ô%ð —-—-‘-ð —]”]�Ø—‘–	ò #øô ó 	AÜ�N‰NÐ4°d·i±iÖ@ð	Aûð —]”]�Ø—‘–	ò #ús0   ‚A#B? Á%C/ Á&3B? Â?*C,Ã)C/ Ã+C,Ã,C/ Ã/%Dc                óþ  • [        [        5      nU H   nX#R                     R                  U5        M"     / nUR	                  5        GHY  u  pVXPR
                  ;   a¯  U H–  nSUl        UR                  c  [        S5      Ul        UR                  b  M6  UR                  =(       d    [        S5      n[        [        R                  U R                  U[        R                  UR                   S9Ul	        M˜     UR#                  U5        MÄ  U V	s/ s H  o™R                  (       a  M  U	PM     n
n	U
(       d  UR#                  U5        GM   U
 V	s/ s H  o™R$                  c  M  X™R$                  4PM      nn	['        U5      ['        U
5      :w  aw  U
 H]  nSUl        [        S5      nX‡l        [        [        R                  U R                  U[        R(                  UR                   S9Ul	        M_     UR#                  U5        GM¾  U VVs/ s H  u  pÍUPM	     nnn[*        R-                  [.        R0                  5      (       a*  [2        R2                  " 5       n[2        R4                  " 5       n[        U R7                  U
S   R8                  U5      5      n[*        R-                  [.        R0                  5      (       ah  [*        R;                  SU R                  UU
 Vs/ s H  owR                   PM     snW[2        R2                  " 5       [2        R4                  " 5       W-
  5        ['        U5      ['        U5      :w  a  [        SU R                   S	35      e[=        U5       H;  u  nnUR                  [?        UUU
U   R                   U
U   R8                  S
95        M=     GM\     U$ s  sn	f s  sn	f s  snnf s  snf ! [@         aµ  n[*        R                  SU R                  UUSS9  U
 Hq  nSUl        UUl        [        [        RB                  U R                  U[D        RG                  U R                  [        R(                  5      UR                   S9Ul	        Ms     UR#                  U5         SnAGM/  SnAff = f)z>Run *model* on *batch* grouped by run_id to maximise batching.TNúdocument timeout exceededrA   úPage payload is Noner   zRPIPELINE_PROFILING Stage %s: run_id=%d pages=%s start=%.3f end=%.3f duration=%.3fszModel z returned wrong number of pages©rI   rK   r8   rL   zStage %s failed for run %d: %s©Úexc_info)$r   rr   rK   r‰   Úitemsrµ   rO   rB   ÚRuntimeErrorrM   rD   r   ÚPIPELINEr«   r   ÚTIMEOUTr8   ÚextendrI   ra   ÚUNKNOWNrÇ   ÚisEnabledForÚloggingÚDEBUGr†   r‡   r¬   rL   ÚdebugÚ	enumeraterG   rÎ   ÚMODELÚSTAGE_FAILURE_CATEGORYÚget)rc   r•   ÚgroupsÚitmÚresultÚridrØ   ÚitrB   ÚiÚgoodÚpages_with_payloadsÚ_rI   r\   Ú_t_startÚ_t_monoÚprocessed_pagesÚidxÚpageÚexcs                        rC   rÌ   Ú$ThreadedPipelineStage._process_batch0  s¤  € ä0;¼DÓ0AˆÛˆCØ—:‘:Ñ×%Ñ% cÖ*ñ ð &(ˆØ Ÿ,™,Ÿ.‰JˆCð ×-Ñ-Ó-Û�BØ#'�B”LØ—x‘xÑ'Ü#/Ð0KÓ#L˜œØ—z‘zÓ)Ø "§¡× U¬LÐ9TÓ,U˜Ü%5Ü+?×+HÑ+HØ(,¯	©	Ø"'Ü%4×%<Ñ%<Ø$&§J¡Jñ&˜ž
ñ  ð —‘˜eÔ$Ùá38Ó'L²5¨aÇÅ¯±5ˆDÐ'LÞØ—‘˜eÔ$ÚðA%ñ -1ó'Ú,0 q·I±I“N�QŸ	™	“N©Dð $ð 'ô Ð*Ó+¬s°4«yÓ8ã"˜Ø'+˜œÜ ,Ð-CÓ D˜Ø#(œÜ%5Ü+?×+HÑ+HØ(,¯	©	Ø"'Ü%4×%<Ñ%<Ø$&§J¡Jñ&˜ž
ñ	 #ð —M‘M %Ô(Úá?RÔ$SÒ?R±°£WÑ?R�Ñ$SÜ×$Ñ$¤W§]¡]×3Ñ3Ü#Ÿyšy›{�HÜ"ŸnšnÓ.�GÜ"& t§z¡z°$°q±'×2BÑ2BÀEÓ'JÓ"K�Ü×$Ñ$¤W§]¡]×3Ñ3Ü—J‘JØlØŸ	™	ØÙ.2Ó3ªd¨Ÿœ©dÑ3Ø ÜŸ	š	›ÜŸšÓ(¨7Ñ2ôô �Ó'¬3¨u«:Ó5Ü&Ø  §¡ Ð+JÐKóð ô "+¨?Ö!;‘I�C˜Ø—M‘MÜ$Ø$(Ø#&Ø$(¨¡I×$5Ñ$5Ø%)¨#¡Y×%7Ñ%7ñ	öô "<ñA )ðt ˆùòM (Mùò'ùó& %Tùò 4øô$ ó %Ü—
‘
Ø4°d·i±iÀÀcÐTXð ñ ó �BØ#'�B”LØ"�B”HÜ!1Ü';×'AÑ'AØ$(§I¡IØ!Ü!7×!;Ñ!;Ø ŸI™I¤×'>Ñ'>ó"ð !#§
¡
ñ"�B–Jñ ð —‘˜e×$Ó$ûð!%ús^   ÄN(Ä(N(ÅN=ÅN-Å$N-Å5BN=ÈN=ÈN2ÈCN=ËN8Ë3B.N=Î-N=Î=
Q<ÏB)Q7Ñ7Q<c                óè   • U Hl  nU R                   b  U R                  U5        U R                   H;  nUR                  U5      (       a  M  [        R	                  SU R
                  5        M=     Mn     g )Nz*Output queue closed while emitting from %s)r³   r°   r�   rÇ   rB   r«   )rc   rØ   r‹   r¹   s       rC   rÍ   ÚThreadedPipelineStage._emit”  sT   € ÛˆDØ× Ñ Ñ,Ø×!Ñ! $Ô'Ø—]”]�Ø—u‘u˜T—{“{Ü—J‘JÐKÈTÏYÉYÖWó #ò rE   )r°   r³   r²   r±   rµ   r­   r®   r¯   r¬   r«   r§   )r«   r>   r¬   r	   r­   rJ   r®   Úfloatr¶   rJ   r§   rø   r¨   z%Callable[[ThreadedItem], None] | Noner©   úset[int] | Nonerp   rž   )r¹   ru   rp   rž   r¡   ©r•   zSequence[ThreadedItem]rp   r    )rØ   zIterable[ThreadedItem]rp   rž   )r@   rQ   rR   rS   rT   rƒ   rº   r�   rÉ   rÁ   rÌ   rÍ   rV   rP   rE   rC   r¤   r¤   å   s�   † Ù>ð #'Ø=AØ-1ñ
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð  ð
ð ;ð
ð +ð
ð 
õ
ô6 ôôô"ôa÷HXrE   r¤   c                  óZ   ^ • \ rS rSrSrSSS.           S	U 4S jjjrS
S jrSrU =r$ )ÚPreprocessThreadedStagei�  zKPipeline stage that validates pre-attached backends and runs preprocessing.r¦   N)r§   r©   c          
     ó,   >• [         TU ]  SUSUUUUS9  g )NÚ
preprocessé   ©r«   r¬   r­   r®   r¶   r§   r©   )Úsuperrƒ   )rc   r®   r¶   r¬   r§   r©   r?   s         €rC   rƒ   Ú PreprocessThreadedStage.__init__   s,   ø€ ô 	‰ÑØØØØ'Ø)Ø-Ø/ð 	ò 	
rE   c                ó  • [        [        5      nU H   nX#R                     R                  U5        M"     / nUR	                  5        GHb  u  pVXPR
                  ;   a¯  U H–  nSUl        UR                  c  [        S5      Ul        UR                  b  M6  UR                  =(       d    [        S5      n[        [        R                  U R                  U[        R                  UR                   S9Ul	        M˜     UR#                  U5        MÄ  U V	s/ s H  o™R                  (       a  M  U	PM     n
n	U
(       d  UR#                  U5        GM  / n/ nU
 GH§  nUR$                  nUcm  SUl        [        S5      nX‡l        [        [        R                  U R                  U[        R&                  UR                   S9Ul	        UR                  U5        M€  UR(                  cm  SUl        [        S5      nX‡l        [        [        R                  U R                  U[        R&                  UR                   S9Ul	        UR                  U5        Mú  UR(                  R+                  5       (       d|  SUl        [        SUR                    S35      nX‡l        [        [        R,                  U R                  U[        R.                  UR                   S9Ul	        UR                  U5        GM•  UR                  X}45        GMª     UR#                  U5        U(       d  GMÐ   [0        R3                  [4        R6                  5      (       a*  [8        R8                  " 5       n[8        R:                  " 5       nU VVs/ s H  u  noÝPM	     nnn[        U R=                  US   S   R>                  U5      5      n[0        R3                  [4        R6                  5      (       ac  [0        RA                  S	UU VVs/ s H  u  nnUR                   PM     snnW[8        R8                  " 5       [8        R:                  " 5       W-
  5        [C        U5      [C        U5      :w  a  [        S
5      e[E        U5       HA  u  nnUR                  [G        UUUU   S   R                   UU   S   R>                  S95        MC     GMe     U$ s  sn	f s  snnf s  snnf ! [H         a¾  n[0        R                  SUU VVs/ s H  u  nnUR                   PM     Os  snnf snnUSS9  U HV  u  nnSUl        UUl        [        [        RJ                  U R                  U[        R&                  UR                   S9Ul	        MX     UR#                  S U 5       5         S nAGM=  S nAff = f)NTrÓ   rA   rÔ   z/Page backend must be attached before preprocesszPage z failed to parse.r   zZPIPELINE_PROFILING Stage preprocess: run_id=%d pages=%s start=%.3f end=%.3f duration=%.3fsz:PagePreprocessingModel returned unexpected number of pagesrÕ   z0Stage preprocess failed for run %d, pages %s: %sFrÖ   c              3  ó*   #   • U  H	  u  pUv •  M     g 7fr`   rP   )Ú.0rê   rî   s      rC   Ú	<genexpr>Ú9PreprocessThreadedStage._process_batch.<locals>.<genexpr>6  s   é € Ð4ªe¡U R�bªeùs   ‚)&r   rr   rK   r‰   rØ   rµ   rO   rB   rÙ   rM   rD   r   rÚ   r«   r   rÛ   r8   rÜ   rI   rÝ   Ú_backendÚis_validÚDOCUMENT_BACKENDÚBACKEND_FAILURErÇ   rÞ   rß   rà   r†   r‡   r¬   rL   rá   ra   râ   rG   rÎ   rã   )rc   r•   ræ   rç   rè   ré   rØ   rê   rB   rë   rì   ÚinvalidÚvalidró   rï   rð   rî   r\   rñ   rò   Úprocessed_pagerô   s                         rC   rÌ   Ú&PreprocessThreadedStage._process_batch³  s~  € Ü0;¼DÓ0AˆÛˆCØ—:‘:Ñ×%Ñ% cÖ*ñ ð &(ˆØ Ÿ,™,Ÿ.‰JˆCð ×-Ñ-Ó-Û�BØ#'�B”LØ—x‘xÑ'Ü#/Ð0KÓ#L˜œØ—z‘zÓ)Ø "§¡× U¬LÐ9TÓ,U˜Ü%5Ü+?×+HÑ+HØ(,¯	©	Ø"'Ü%4×%<Ñ%<Ø$&§J¡Jñ&˜ž
ñ  ð —‘˜eÔ$Ùá$Ó8šu˜!¯K­K—A™uˆDÐ8ÞØ—‘˜eÔ$Úð +-ˆGØ57ˆEÜ�Ø—z‘z�Ø‘<Ø#'�B”LÜ(Ð)?Ó@�EØ$”HÜ!1Ü';×'DÑ'DØ$(§I¡IØ#Ü!0×!8Ñ!8Ø "§
¡
ñ"�B”Jð —N‘N 2Ö&Ø—]‘]Ñ*Ø#'�B”LÜ(ØIó�Eð  %”HÜ!1Ü';×'DÑ'DØ$(§I¡IØ#Ü!0×!8Ñ!8Ø "§
¡
ñ"�B”Jð —N‘N 2Ö&ØŸ™×/Ñ/×1Ñ1Ø#'�B”LÜ(¨5°·±°Ð>OÐ)PÓQ�EØ$”HÜ!1Ü';×'LÑ'LØ$(§I¡IØ#Ü!0×!@Ñ!@Ø "§
¡
ñ"�B”Jð —N‘N 2×&à—L‘L " ×,ñS ðV �M‰M˜'Ô"æÚð05Ü×$Ñ$¤W§]¡]×3Ñ3Ü#Ÿyšy›{�HÜ"ŸnšnÓ.�GÙ-2Ô3ªU¡' ! Tš©U�Ñ3Ü"&Ø—J‘J˜u Q™x¨™{×3Ñ3°UÓ;ó#�ô ×$Ñ$¤W§]¡]×3Ñ3Ü—J‘JØtØÙ16Ô7²©¨¨A˜Ÿœ±Ò7Ø ÜŸ	š	›ÜŸšÓ(¨7Ñ2ôô �Ó'¬3¨u«:Ó5Ü&ØTóð ô ,5°_Ö+EÑ'�C˜Ø—M‘MÜ$Ø$2Ø#&Ø$)¨#¡J¨q¡M×$9Ñ$9Ø%*¨3¡Z°¡]×%;Ñ%;ñ	öô ,FñE )ð| ˆùòU 9ùóz 4ùó 8øô$ ó 5Ü—
‘
ØFØÙ-2Ô3ªU¡E B¨�R—Z”ZªUùÖ3ØØ"ð ñ ó #‘E�B˜Ø#'�B”LØ"�B”HÜ!1Ü';×'AÑ'AØ$(§I¡IØ!Ü!0×!8Ñ!8Ø "§
¡
ñ"�B–Jñ #ð —‘Ñ4©eÓ4×4Ó4ûð%5úsR   ÄR1Ä(R1ÌASÍ0R6Í>A,SÏ*R<ÐB'SÒ6SÓ
V
ÓVÓ"S<Ó;BVÖV
rP   )r®   rø   r¶   rJ   r¬   r	   r§   rø   r©   rù   rp   rž   rú   )	r@   rQ   rR   rS   rT   rƒ   rÌ   rV   Ú__classcell__©r?   s   @rC   rü   rü   �  s`   ø† ÙUð #'Ø-1ñ
ð ð
ð ð	
ð
 ð
ð  ð
ð +ð
ð 
÷
ð 
÷&Dò DrE   rü   c                  óN   • \ rS rSr% SrS\S'   S\S'   S\S'   \" \S	9rS
\S'   Sr	g)Ú
RunContexti:  z#Wiring for a single *execute* call.zlist[ThreadedPipelineStage]Ústagesr¤   Úfirst_stageru   Úoutput_queuerZ   úset[int]r©   rP   N)
r@   rQ   rR   rS   rT   rU   r   r´   r©   rV   rP   rE   rC   r  r  :  s'   ‡ á-à'Ó'Ø&Ó&ØÓÙ"'¸Ñ"<Ð�xÖ<rE   r  c                  óæ   ^ • \ rS rSrSrSU 4S jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jr S       SS
 jjrSS jr      SS jr\SS j5       r\SS j5       rSS jrSS jrSrU =r$ ) ÚStandardPdfPipelineiI  z9High-performance PDF pipeline with multi-threaded stages.c                ó”   >• [         TU ]  U5        Xl        [        R                  " S5      U l        0 U l        U R                  5         g )Nrÿ   )r  rƒ   Úpipeline_optionsÚ	itertoolsÚcountÚ_run_seqÚ_page_sizes_by_noÚ_init_models)rc   r  r?   s     €rC   rƒ   ÚStandardPdfPipeline.__init__L  s=   ø€ Ü‰ÑÐ)Ô*Ø<LÔÜ!Ÿš¨Ó*ˆŒØ24ˆÔð 	×ÑÕrE   c           	     óD  • U R                   nU R                  R                  =(       d3    U R                  R                  =(       d    U R                  R                  U l        [        [        U R                  R                  [        U R                  5      S9S9U l
        U R                  U5      U l        [        U R                  R                  S9nUR                  U R                  R                   UU R                  R"                  U R                  R$                  S9U l        U R                  R                   n[)        [+        UR,                  UR.                  UR0                  U R&                  R2                  S9S9U l        [7        U R                  R                  S9nUR                  U R                  R8                  U R                  R:                  UU R                  R"                  U R                  R$                  S9U l        [?        [A        5       S9U l!        [E        [G        5       S9U l$        [K        U R                  RL                  S9U l'        U R                  RP                  RS                  U R                  RT                  U R                  RV                  S.S9n[Y        U R                  RT                  =(       d    U R                  RV                  U R                   UU R                  R"                  U R                  R$                  S	9/U RZ                  QU l-        []        U R                  RV                  U R                  RT                  U R                  R^                  U R                  R`                  U R                  Rb                  45      U l2        g )
N)Úimages_scaleÚskip_cell_extraction)Úoptions©Úallow_external_plugins)r%  Úartifacts_pathÚaccelerator_optionsÚenable_remote_services)Úskip_cell_assignmentÚkeep_empty_clustersÚcreate_orphan_clustersÚrun_postprocessor)r%  Úenabledr(  r)  r*  )Úextract_codeÚextract_formulas)Úupdate)r/  r(  r%  r)  r*  )3r(  r  Úgenerate_page_imagesÚgenerate_picture_imagesÚgenerate_table_imagesÚkeep_imagesr)   r*   r#  r+   Úpreprocessing_modelÚ_make_ocr_modelÚ	ocr_modelr!   r'  Úcreate_instanceÚlayout_optionsr)  r*  Úlayout_modelr&   r   r+  r,  r-  Úrequires_layout_postprocessingÚlayout_postprocessing_modelr#   Útable_structure_optionsÚdo_table_structureÚtable_modelr'   r(   Úassemble_modelr,   r-   Úreading_order_modelr%   Úheading_hierarchy_optionsÚheading_hierarchy_modelÚcode_formula_optionsÚ
model_copyÚdo_code_enrichmentÚdo_formula_enrichmentr$   Úenrichment_pipeÚanyÚdo_picture_classificationÚdo_picture_descriptionÚdo_chart_extractionÚkeep_backend)rc   Úart_pathÚlayout_factoryÚloÚtable_factoryÚcode_formula_optss         rC   r   Ú StandardPdfPipeline._init_modelsY  s  € Ø×&Ñ&ˆà×!Ñ!×6Ñ6÷ ;Ø×$Ñ$×<Ñ<÷;à×$Ñ$×:Ñ:ð 	Ôô
 $:Ü,Ø!×2Ñ2×?Ñ?Ü%AØ×)Ñ)ó&ññ$
ˆÔ ð ×-Ñ-¨hÓ7ˆŒÜ+Ø#'×#8Ñ#8×#OÑ#Oñ
ˆð +×:Ñ:Ø×)Ñ)×8Ñ8Ø#Ø $× 5Ñ 5× IÑ IØ#'×#8Ñ#8×#OÑ#Oð	 ;ð 
ˆÔð ×"Ñ"×1Ñ1ˆÜ+DÜ.Ø%'×%<Ñ%<Ø$&×$:Ñ$:Ø')×'@Ñ'@Ø"&×"3Ñ"3×"RÑ"Rñ	ñ,
ˆÔ(ô 4Ø#'×#8Ñ#8×#OÑ#Oñ
ˆð )×8Ñ8Ø×)Ñ)×AÑAØ×)Ñ)×<Ñ<Ø#Ø $× 5Ñ 5× IÑ IØ#'×#8Ñ#8×#OÑ#Oð 9ð 
ˆÔô 0Ô8KÓ8MÑNˆÔÜ#4Ô=PÓ=RÑ#SˆÔ Ü'<Ø×)Ñ)×CÑCñ(
ˆÔ$ð !×1Ñ1×FÑF×QÑQà $× 5Ñ 5× HÑ HØ$(×$9Ñ$9×$OÑ$Oñð Rð 
Ðô  Ø×-Ñ-×@Ñ@÷ ?Ø×(Ñ(×>Ñ>Ø#×2Ñ2Ø)Ø$(×$9Ñ$9×$MÑ$MØ'+×'<Ñ'<×'SÑ'Sñð 
ð ×!Ñ!ð 
ˆÔô  à×%Ñ%×;Ñ;Ø×%Ñ%×8Ñ8Ø×%Ñ%×?Ñ?Ø×%Ñ%×<Ñ<Ø×%Ñ%×9Ñ9ðó
ˆÕrE   c                óØ   • [        U R                  R                  S9nUR                  U R                  R                  U R                  R
                  UU R                  R                  S9$ )Nr&  )r%  r/  r(  r)  )r"   r  r'  r:  Úocr_optionsÚdo_ocrr)  )rc   rP  Úfactorys      rC   r8  Ú#StandardPdfPipeline._make_ocr_model°  se   € Ü!Ø#'×#8Ñ#8×#OÑ#Oñ
ˆð ×&Ñ&Ø×)Ñ)×5Ñ5Ø×)Ñ)×0Ñ0Ø#Ø $× 5Ñ 5× IÑ Ið	 'ð 
ð 	
rE   c                ó  • UR                   nUc  g U R                  (       d  0 Ul        U R                  (       d.  UR                  b!  UR                  R                  5         S Ul        U R                  R                  (       d  S Ul        g g r`   )	rI   r6  Ú_image_cacherO  r  Úunloadr  Úgenerate_parsed_pagesÚparsed_page)rc   r‹   ró   s      rC   Ú_release_page_resourcesÚ+StandardPdfPipeline._release_page_resources»  si   € Ø�|‰|ˆØ‰<ØØ××Ø "ˆDÔØ× ×  T§]¡]Ñ%>Ø�M‰M× Ñ Ô"Ø ˆDŒMØ×$Ñ$×:×:Ø#ˆDÕð ;rE   c                óŒ  • U R                   n[        5       n[        UR                  UR                  U R
                  UR                  US9n[        SU R                  UR                  UR                  UR                  UR                  US9n[        SU R                  UR                  UR                  UR                  UR                  US9n[        SU R                  SUR                  UR                  UR                  US9n[        SU R                  UR                  UR                  UR                  UR                  US9n[        SU R                  SUR                  UR                  UR                  U R                   US	9n[#        UR                  5      n	UR%                  UR&                  5        UR%                  UR&                  5        UR%                  UR&                  5        UR%                  UR&                  5        UR%                  UR&                  5        UR%                  U	5        X4XVXx/n
[)        U
UU	US
9$ )N)r®   r¶   r¬   r§   r©   r3   r   r4   Úlayout_postprocessrÿ   r5   r6   )r«   r¬   r­   r®   r¶   r§   r¨   r©   )r  r  r  r©   )r  r´   rü   Úbatch_polling_interval_secondsr¶   r7  Ústage_shutdown_timeout_secondsr¤   r9  Úocr_batch_sizer<  Úlayout_batch_sizer>  rA  Útable_batch_sizerB  r`  ru   rº   r¯   r  )rc   Úoptsr©   rþ   r3   r4   rc  r5   r6   Úoutput_qr  s              rC   Ú_create_run_ctxÚ#StandardPdfPipeline._create_run_ctxË  s%  € Ø×$Ñ$ˆÜ&)£eÐÜ,Ø×=Ñ=Ø×.Ñ.Ø×*Ñ*Ø!×@Ñ@Ø/ñ
ˆ
ô $ØØ—.‘.Ø×*Ñ*Ø×=Ñ=Ø×.Ñ.Ø!×@Ñ@Ø/ñ
ˆô 'ØØ×#Ñ#Ø×-Ñ-Ø×=Ñ=Ø×.Ñ.Ø!×@Ñ@Ø/ñ
ˆô 3Ø%Ø×2Ñ2ØØ×=Ñ=Ø×.Ñ.Ø!×@Ñ@Ø/ñ
Ðô &ØØ×"Ñ"Ø×,Ñ,Ø×=Ñ=Ø×.Ñ.Ø!×@Ñ@Ø/ñ
ˆô )ØØ×%Ñ%ØØ×=Ñ=Ø×.Ñ.Ø!×@Ñ@Ø×4Ñ4Ø/ñ	
ˆô ! ×!4Ñ!4Ó5ˆØ×#Ñ# F×$6Ñ$6Ô7Ø×Ñ §¡Ô0Ø×ÑÐ/×;Ñ;Ô<Ø×+Ñ+¨E×,=Ñ,=Ô>Ø×Ñ˜x×3Ñ3Ô4Ø×!Ñ! (Ô+à 6¸uÐOˆÜØØ"Ø!Ø/ñ	
ð 	
rE   c                ó   • [        U5      $ r`   )r/   ©rc   rL   s     rC   Ú_get_expected_page_nosÚ*StandardPdfPipeline._get_expected_page_nos  s   € Ü$ XÓ.Ð.rE   c                óV  ^ ^^^^^^^^• 0 T l         [        T R                  5      m[        TR                  R
                  [        5      (       d   eTR                  R
                  mT R                  R                  nUR                  (       a&  UR                  (       a  TR                  5       Tl        T R                  T5      mT(       d  [        R                  Tl        T$ 0 mT H,  n[#        US9nTR$                  R'                  U5        UTU'   M.     [)        T5      nT R+                  5       mTR,                   H  nUR/                  5         M     [1        US9mSn[2        R4                  " 5       nSn	/ mSU4S jjn
SUUUUUUUU 4S jjn[6        R8                  " UST 3SS9nUR/                  5          TR:                  TR<                  -   U:  Ga‰  T R                  R>                  b®  U	(       d§  [2        R4                  " 5       U-
  nUT R                  R>                  :”  au  [@        RC                  S	US
 ST R                  R>                  S
 S35        Sn	TRD                  RG                  T5        TRH                  RJ                  RM                  5         GOÄTRN                  RQ                  USS9nU H½  nURR                  T:w  a  M  URT                  (       d  URV                  (       aR  URV                  =(       d    [Y        S5      nTRZ                  R'                  UR\                  UUR^                  45        M‰  UR`                  c   eTR$                  R'                  UR`                  5        M¿     U(       dÀ  TRN                  Rb                  (       a¥  [e        [g        T5      U
" 5       -
  5      nU(       a�  T(       a  TS   O
[Y        S5      nTRZ                  Ri                  U Vs/ s HC  nUU[k        [l        Rn                  T Rp                  Rr                  U[t        Rv                  US94PME     sn5        O TR:                  TR<                  -   U:  a  GM‰  U	(       a‰  [e        [g        T5      U
" 5       -
  5      nU Hg  n[Y        S5      nTRZ                  R'                  UU[k        [l        Rn                  T Rp                  Rr                  U[t        Rx                  US945        Mi     TR,                   H  nUR{                  5         M     TRN                  RM                  5         T R                  R|                  nUR                  US9  UR�                  5       (       a  [@        RC                  STU5        T Rƒ                  TTU	S9  T$ s  snf ! TR,                   H  nUR{                  5         M     TRN                  RM                  5         T R                  R|                  nUR                  US9  UR�                  5       (       a  [@        RC                  STU5        f f = f)a§  Stream-build the document with a dedicated producer thread.

Note: If a worker thread gets stuck in a blocking call (model inference or PDF backend
iter_pages/get_size), that thread will be abandoned after a brief wait
(`PdfPipelineOptions.stage_shutdown_timeout_seconds`, 15s by default) during cleanup.
The thread continues running until the blocking call completes, potentially holding
resources (e.g., pypdfium2_lock).
r7   )r^   é    Fc                 ó¾   >• TR                    V Vs1 s H  u  n   oS:”  d  M  U iM     nn nTR                   Vs1 s H  o3R                  iM     snU-  $ s  snn f s  snf rj   )r]   r\   r8   )r8   rî   Úfailed_page_nosró   Úprocs       €rC   Ú_completed_page_nosÚ@StandardPdfPipeline._build_document.<locals>._completed_page_nosC  s\   ø€ à-1×->Ò->ôÚ->™M˜G Q¨ÈAÁ+—Ñ->ð ñ ð .2¯ZªZÓ8ªZ T—L”L©ZÑ8¸?ÑJÐJùóùò 9s   ‘A¢A¹Ac            
     óL  >•  [        TT5       HÉ  n TR                  U R                  5      nUc  U R                  5         M3  Xl         U R                  5       Ul        UR                  T
R                  UR                  '   TR                  R                  R                  [        UT	UR                  TS95      (       a  M²  U R                  5         S Ul          O    TR                  R                  R#                  5         g ! [         a0    U R                  5       (       a  U R                  5         S Ul        e  Nºf = f! [         a1  nTR                  U5        [        R!                  ST	USS9   S nAN˜S nAff = f! TR                  R                  R#                  5         f = f)NrÕ   zProducer failed for run %d: %sTrÖ   )r   rå   r8   r]  r  Úget_sizer”   r  rÎ   r	  r  r¯   r�   rG   r‰   rÇ   rB   r™   )Úpage_backendró   rô   ÚbackendrL   ÚctxÚexpected_page_nosÚ
page_by_noÚproducer_errorrK   rc   s      €€€€€€€€rC   Ú_produce_pagesÚ;StandardPdfPipeline._build_document.<locals>._produce_pagesI  sg  ø€ ð4Ü$:¸7ÐDUÖ$V�LØ%Ÿ>™>¨,×*>Ñ*>Ó?�DØ‘|Ø$×+Ñ+Ô-Ù Ø$0”Mð"Ø$0×$9Ñ$9Ó$;˜œ	Ø?C¿y¹y˜×.Ñ.¨t¯|©|Ñ<ð Ÿ?™?×6Ñ6×:Ñ:Ü$Ø$(Ø#)Ø$(§L¡LØ%-ñ	÷ó ð %×+Ñ+Ô-Ø(,˜œÙò1 %Wð: —‘×+Ñ+×1Ñ1Õ3øô) %ó "Ø'×0Ñ0×2Ñ2Ø(×/Ñ/Ô1Ø,0˜DœMØ!ñ 3ð"ûô  ó YØ×%Ñ% cÔ*Ü—
‘
Ð;¸VÀSÐSW�
ÖXûðYûð —‘×+Ñ+×1Ñ1Õ3úsf   ƒAD? Á	8DÂ<D? ÃD? ÃE= ÃD? ÃE= Ä7D<Ä9D? Ä;D<Ä<D? Ä?
E:Å	'E5Å0E= Å5E:Å:E= Å=&F#zPageProducer-r½   zDocument processing time (z.3fzs) exceeded timeout of ÚsTgš™™™™™©?rÄ   zunknown errorr   zpipeline terminated earlyrA   rÓ   zPProducer thread for run %d did not terminate within %.1fs and will be abandoned.)Útimeout_exceeded)rp   r  r¡   )Br  Únextr  Ú
isinstanceÚinputr  r   r  rD  r/  Úuse_bookmarksÚget_document_outlineÚ_pdf_outlinero  r   ÚFAILUREÚstatusr   r\   r‰   ra   rk  r  r�   rX   r†   r‡   r   rÀ   rd   rg   Údocument_timeoutrÇ   rÈ   r©   Úaddr  r¯   r™   r  r–   rK   rO   rB   rÙ   r]   r8   rM   rI   rœ   Úsortedr´   rÜ   rD   r   rÚ   r?   r@   r   rÝ   rÛ   rÉ   re  rÅ   rÆ   Ú_integrate_results)rc   rL   Úhh_optsr8   ró   Útotal_pagesÚstr­   Ú
start_timerƒ  rv  r€  Úproducer_threadÚelapsed_timeÚ	out_batchrç   rB   Úmissing_page_nosr§   r{  r|  r}  r~  ru  r  rK   s   ``                 @@@@@@@rC   Ú_build_documentÚ#StandardPdfPipeline._build_document  sR  ÿø€ ð "$ˆÔÜ�d—m‘mÓ$ˆÜ˜(Ÿ.™.×1Ñ1Ô3E×FÑFÐFÐFØ—.‘.×)Ñ)ˆð ×'Ñ'×AÑAˆØ�?�?˜w×4×4Ø$+×$@Ñ$@Ó$BˆHÔ!à ×7Ñ7¸ÓAÐÞ Ü.×6Ñ6ˆHŒOØˆOà&(ˆ
Û(ˆGÜ Ñ(ˆDØ�N‰N×!Ñ! $Ô'Ø"&ˆJ�wÓñ )ô
 Ð0Ó1ˆØ×.Ñ.Ó0ˆØ—*”*ˆBØ�H‰HŽJñ ô  ¨{Ñ;ˆØˆ
Ü—^’^Ó%ˆ
Ø ÐØ*,ˆ÷	K÷	4ö 	4ôB $×*Ò*Ø!¨-¸°xÐ(@Èñ
ˆð 	×ÑÔð[	Ø×$Ñ$ t×'9Ñ'9Ñ9¸KÔGð ×)Ñ)×:Ñ:ÑFÞ,ä#'§>¢>Ó#3°jÑ#@�LØ# d×&;Ñ&;×&LÑ&LÓLÜŸ™Ø8¸ÀcÐ8Jð K3Ø37×3HÑ3H×3YÑ3YÐZ]Ð2^Ð^_ðaôð ,0Ð(Ø×-Ñ-×1Ñ1°&Ô9ØŸ™×3Ñ3×9Ñ9Ô;áð  ×,Ñ,×6Ñ6°zÈ4Ð6ÐP�	Û$�CØ—z‘z VÓ+Ù Ø—}—}¨¯	¯	Ø #§	¡	× J¬\¸/Ó-J˜Ø×)Ñ)×0Ñ0°#·+±+¸uÀcÇkÁkÐ1RÖSà"Ÿ{™{Ñ6Ð6Ð6ØŸ
™
×)Ñ)¨#¯+©+Ö6ñ %ö ! S×%5Ñ%5×%<×%<Ü'-ÜÐ-Ó.Ñ1DÓ1FÑFó(Ð$ö (ö  .ð +¨1Ò-ä!-Ð.IÓ!Jð ð
 ×)Ñ)×0Ñ0ñ 0@óò 0@ Gð %,Ø$)Ü$4Ü7K×7TÑ7TØ48·N±N×4KÑ4KØ.3Ü1@×1HÑ1HØ07ñ%&ó
!"ñ 0@ñôð  ðs ×$Ñ$ t×'9Ñ'9Ñ9¸KÖGöx  Ü#)ÜÐ)Ó*Ñ-@Ó-BÑBó$Ð ó  0�GÜ(Ð)DÓE�EØ×%Ñ%×,Ñ,à#Ø!Ü,Ü/C×/LÑ/LØ,0¯N©N×,CÑ,CØ&+Ü)8×)@Ñ)@Ø(/ñð
öñ  0ð  —j”j�Ø—‘–	ñ !à×Ñ×"Ñ"Ô$Ø#×4Ñ4×SÑSÐØ× Ñ Ð)9Ð Ñ:Ø×'Ñ'×)Ñ)Ü—‘ØfØØ$ôð 	×Ñ ¨$ÐAQÐÑRØˆùògøðL —j”j�Ø—‘–	ñ !à×Ñ×"Ñ"Ô$Ø#×4Ñ4×SÑSÐØ× Ñ Ð)9Ð Ñ:Ø×'Ñ'×)Ñ)Ü—‘ØfØØ$õð *ús(   Æ:H5V Ï/A
VÐ9%V Ñ!BV ÖV ÖBX(c                ó¬  • UR                    Vs0 s H  oDR                  U_M     nnUR                    Vs/ s H"  oDR                  U;   d  M  XTR                     PM$     snUl         UR                   H–  u  pgnUb  UR                  R	                  U5        M&  UR                  R	                  [        [        R                  U R                  R                  U=(       d    [        S5      [        R                  US:”  a  UOS S95        M˜     U(       a¹  UR                  S:”  a©  S[        UR                   5       SUR                   S[        UR                  5       S3n	[        [        R                  U R                  R                  U	[        R                   S9n
UR                  R	                  U
5        ["        R$                  Ul        OcUR(                  (       a  ["        R*                  Ul        O<UR,                  (       a  ["        R$                  Ul        O["        R.                  Ul        U R0                  (       d  UR                    H
  n0 Ul        M     UR                    Ha  nU R4                  (       d'  UR6                  b  UR6                  R9                  5         U R:                  R<                  (       a  MX  U?S Ul        Mc     g s  snf s  snf )	NzPage failed to process.r   rA   z"Pipeline stage timeout: processed Ú/z pages successfully, z pages failed or incomplete.)r:   r;   r<   r=   ) r\   r8   r]   Úerrorsr‰   rD   r   rÚ   r?   r@   rÙ   r   rÝ   r^   ra   r   rÛ   r   ÚPARTIAL_SUCCESSr‹  rn   rŠ  rk   ÚSUCCESSr6  r\  rO  r  r]  r  r^  r_  )rc   rL   ru  rƒ  ÚpÚpage_mapr8   rB   rM   Útimeout_msgÚtimeout_errors              rC   r�  Ú&StandardPdfPipeline._integrate_resultsÐ  s,  € ð +/¯*ª*Ó5ª* Q—I‘I˜q’L©*ˆÐ5ð *2¯ªó
Ú)7 A¿9¹9ÈÑ;PÓˆH—Y‘YÔ©ñ
ˆŒð (,×'8Ô'8Ñ#ˆG˜GØÑ"Ø—‘×&Ñ& wÔ/ÙØ�O‰O×"Ñ"Ü Ü#7×#@Ñ#@Ø $§¡× 7Ñ 7Ø×J¤<Ð0IÓ#JÜ,×4Ñ4Ø'.°£{™G¸ñöñ	 (9ö  × 3Ñ 3°aÓ 7ð 5´S¸¿¹³_Ð4EÀQÀt×GZÑGZÐF[Ð[pÜ�t×(Ñ(Ó)Ð*Ð*FðHð ô &Ü3×<Ñ<Ø ŸN™N×3Ñ3Ø)Ü(×0Ñ0ñ	ˆMð �O‰O×"Ñ" =Ô1Ü.×>Ñ>ˆH�OØ×%×%Ü.×6Ñ6ˆH�OØ×$×$Ü.×>Ñ>ˆH�Oä.×6Ñ6ˆHŒOØ××Ø—^”^�Ø!#�–ñ $à—”ˆAØ×$×$¨¯©Ñ)?Ø—
‘
×!Ñ!Ô#Ø×(Ñ(×>×>Ñ>Ø�MØ $�–ò  ùòU 6ùò
s   �KµKÁKc           
     óv  ^• / / / pCn[        US[        R                  S9   UR                   H…  nUR                  (       d  M  UR                  UR                  R                  5        UR                  UR                  R                  5        UR                  UR                  R                  5        M‡     [        X#US9Ul        U R                  U5      Ul        U R                  U5      Ul        U R                  R                  (       a‰  UR                   Hy  nUR                  c   eUR                   n["        R$                  " UR                  ['        SU R                  R(                  -  5      S9UR                  R                  U   l        M{     [*        R,                  " 5          [*        R.                  " S[0        S9  U R                  R2                  (       d  U R                  R4                  (       GaÎ  U R                  R(                  nUR                  R7                  5        GH™  u  pš[9        U	[:        5      (       a  [=        U	R>                  5      S:X  a  M6  [9        U	[@        5      (       a  U R                  R2                  (       d4  [9        U	[B        5      (       d  M}  U R                  R4                  (       d  Mš  U	R>                  S   R                   m[E        U4S	 jUR                   5       [G        S
S 5      5      nUc   eURH                  c   eUR                  c   eU	R>                  S   RJ                  RM                  US9RO                  URH                  RP                  U-  S9nUR                  RS                  URU                  5       5      n["        R$                  " U['        SU-  5      S9U	l        GMœ     S S S 5        [=        UR                  5      S:”  Gaß  [*        R,                  " 5          [*        R.                  " S[V        SS9  [Y        [Z        R\                  " UR^                  R                  Ra                  5        Vs/ s H  oÝRb                  PM     sn5      5      UR^                  l1        [Y        [Z        Rd                  " UR^                  R                  Ra                  5        Vs/ s H  oÝRf                  PM     snSS95      UR^                  l3        [Y        [Z        R\                  " UR^                  R                  Ra                  5        Vs/ s H  oÝRh                  PM     sn5      5      UR^                  l4        [Y        [Z        R\                  " UR^                  R                  Ra                  5        Vs/ s H  oÝRj                  PM     sn5      5      UR^                  l5        S S S 5        U Rm                  XRo                  U5      S9  S S S 5        U$ ! , (       d  f       GN0= fs  snf s  snf s  snf s  snf ! , (       d  f       N\= f! , (       d  f       U$ = f)NÚdoc_assemble)Úscope)ÚelementsÚheadersÚbodyéH   )ÚdpiÚignore)r=   r   c              3  óJ   >#   • U  H  oR                   T:X  d  M  Uv •  M     g 7fr`   r7   )r  rŸ  Úpage_ixs     €rC   r  Ú9StandardPdfPipeline._assemble_document.<locals>.<genexpr>3  s   øé € Ð SªN q¿i¹iÈ7Ñ>R§¡ªNùs   ƒ#š	#r   )Úscale)Úpage_heightz-Mean of empty slice|All-NaN slice encountered)r=   Úmessagegš™™™™™¹?)r¹   )r}  )8r1   r0   ÚDOCUMENTr\   Ú	assembledrÜ   r§  r¨  r©  r   rC  ÚdocumentrE  r  r3  Úimager8   r   Úfrom_pilrJ   r#  ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningr4  r5  Úiterate_itemsr…  r   ra   Úprovr   r   r„  r   r”   ÚbboxÚscaledÚto_top_left_originÚheightÚcropÚas_tupleÚRuntimeWarningrø   ÚnpÚnanmeanÚ
confidenceÚvaluesÚlayout_scoreÚnanquantileÚparse_scoreÚtable_scoreÚ	ocr_scoreÚ_add_failed_pages_to_documentro  )rc   rL   r§  r¨  r©  rŸ  ró   r8   r°  ÚelementÚ_levelÚ	crop_bboxÚ
cropped_imÚcr®  s                 @rC   Ú_assemble_documentÚ&StandardPdfPipeline._assemble_document  s¾  ø€ Ø"$ b¨"˜4ˆÜ˜( N¼.×:QÑ:QÓRØ—^”^�Ø—;—;‘;Ø—O‘O A§K¡K×$8Ñ$8Ô9Ø—N‘N 1§;¡;×#6Ñ#6Ô7Ø—K‘K §¡× 0Ñ 0Ö1ñ	 $ô
 "/Ø!¸ñ"ˆHÔð !%× 8Ñ 8¸Ó BˆHÔØ $× <Ñ <¸XÓ FˆHÔð ×$Ñ$×9×9Ø$ŸNœN�DØŸ:™:Ñ1Ð1Ð1Ø"Ÿl™l�GÜ=E×=NÒ=NØŸ
™
¬¨B°×1FÑ1F×1SÑ1SÑ,SÓ(Tñ>�H×%Ñ%×+Ñ+¨GÑ4Ö:ñ +ô ×(Ò(Õ*Ü×'Ò'¨Ô;MÒNà×)Ñ)×A×AØ×,Ñ,×B×BÐBà ×1Ñ1×>Ñ>�EØ+3×+<Ñ+<×+JÑ+J×+L™˜Ü)¨'´7×;Ñ;¼sÀ7Ç<Á<Ó?PÐTUÓ?UÙ$ä& w´×<Ñ<Ø $× 5Ñ 5× M× Mä& w´	×:Ó:Ø $× 5Ñ 5× K× KÑ Kà&-§l¡l°1¡o×&=Ñ&=˜GÜ#'Ü S¨H¯NªNÓ SÜ $ V¨TÓ 2ó$˜Dð $(Ñ#3Ð3Ð#3Ø#'§9¡9Ñ#8Ð8Ð#8Ø#'§:¡:Ñ#9Ð9Ð#9ð !(§¡¨Q¡ß!%¡§f¡f°5 fÐ&9ß!3Ñ!3Ø04·	±	×0@Ñ0@À5Ñ0Hð "4ð ""ð &ð *.¯©¯©¸×9KÑ9KÓ9MÓ)N˜JÜ,4×,=Ò,=Ø *´°B¸±J³ñ-˜GŸMñ9 ,M÷ +ôP �8—>‘>Ó" QÔ&Ü×,Ò,Õ.Ü×+Ò+Ø Ü!/Ø Oòô
 8=ÜŸ
š
Ø5=×5HÑ5H×5NÑ5N×5UÑ5UÔ5WÓXÒ5W°Ÿ^œ^Ñ5WÑXóó8�H×'Ñ'Ô4ô
 7<ÜŸšØ4<×4GÑ4G×4MÑ4M×4TÑ4TÔ4VÓWÒ4V¨qŸ]œ]Ñ4VÑWØ!ñó7�H×'Ñ'Ô3ô 7<ÜŸ
š
Ø4<×4GÑ4G×4MÑ4M×4TÑ4TÔ4VÓWÒ4V¨qŸ]œ]Ñ4VÑWóó7�H×'Ñ'Ô3ô
 5:ÜŸ
š
Ø2:×2EÑ2E×2KÑ2K×2RÑ2RÔ2TÓUÒ2T¨QŸ[œ[Ñ2TÑUóó5�H×'Ñ'Ô1÷- /ð< ×.Ñ.Ø×,GÑ,GÈÓ,Qð /ñ ÷{ SðB ˆ÷W +Ö*üòb Yùò
 Xùò Xùò
 V÷1 /Õ.ú÷ SÔRðB ˆúsŠ    X)ÁE'X)Æ*C:W2Ê(W2ËDW2Ï	7X)Ð AXÑXÑ+AXÓ X	ÓAXÔ)XÔ>AXÖXÖ(X×&X)×2
X	×<X)ØXØ
X&	Ø"X)Ø)
X8c           	     ó¨  • UR                   c  g[        UR                   R                  R                  5       5      n[        U5      U-
  nU(       d  g[	        U5       HI  nU R
                  R                  U[        SSS95      n[        UUSS9UR                   R                  U'   MK     [        R                  S[        U5      [	        U5      5        g)aˆ  Add failed/skipped pages to DoclingDocument.pages.

This ensures that page break markers are correctly generated for documents
where some pages failed to parse. Without this, export functions would not
know about the missing pages and would generate incorrect page break counts.

The failed pages are added with their size information (if available from
the backend) but without any content.
Ng        )ÚwidthrÁ  )r8   r”   r¶  z-Added %d failed/skipped pages to document: %s)rµ  r´   r\   ÚkeysrŽ  r  rå   r   r   rÇ   rá   ra   )rc   rL   r}  Úexisting_page_nosr—  r8   r”   s          rC   rÎ  Ú1StandardPdfPipeline._add_failed_pages_to_documentm  sÅ   € ð ×ÑÑ$Øô   × 1Ñ 1× 7Ñ 7× <Ñ <Ó >Ó?ÐÜÐ0Ó1Ð4EÑEÐæØäÐ.Ö/ˆGØ×)Ñ)×-Ñ-¨g´tÀ#ÈcÑ7RÓSˆDô 08ØØØñ0ˆH×Ñ×#Ñ# GÓ,ñ	 0ô 	�
‰
Ø;ÜÐ Ó!ÜÐ#Ó$õ	
rE   c                ó   • [        5       $ r`   )r   )Úclss    rC   Úget_default_optionsÚ'StandardPdfPipeline.get_default_options”  s   € ä)Ó+Ð+rE   c                ó"   • [        U[        5      $ r`   )r…  r   )rÜ  r{  s     rC   Úis_backend_supportedÚ(StandardPdfPipeline.is_backend_supported˜  s   € ä˜'Ô#5Ó6Ð6rE   c                ó   • UR                   $ r`   )r‹  rn  s     rC   Ú_determine_statusÚ%StandardPdfPipeline._determine_statusœ  s   € Ø�‰ÐrE   c                ó
  • 0 U l         UR                   H,  nUR                  c  M  UR                  R                  5         M.     UR                  R                  (       a%  UR                  R                  R                  5         g g r`   )r  r\   r  r]  r†  )rc   rL   rŸ  s      rC   Ú_unloadÚStandardPdfPipeline._unloadŸ  s\   € Ø!#ˆÔØ—”ˆAØ�z‰zÓ%Ø—
‘
×!Ñ!Ö#ñ  ð �>‰>×"×"Ø�N‰N×#Ñ#×*Ñ*Õ,ð #rE   )r  r  rB  rJ  rE  rO  r6  r<  r>  r9  r  r7  rC  rA  )r  r   rp   rž   r¡   )rP  zPath | Nonerp   r	   )r‹   rG   rp   rž   )rp   r  )rL   r   rp   ú	list[int])rL   r   rp   r   )F)rL   r   ru  rX   rƒ  rN   rp   rž   )rL   r   r}  rè  rp   rž   )rp   r   )r{  r   rp   rN   )rL   r   rp   r   )rL   r   rp   rž   )r@   rQ   rR   rS   rT   rƒ   r   r8  r`  rk  ro  r˜  r�  rÔ  rÎ  ÚclassmethodrÝ  rà  rã  ræ  rV   r  r  s   @rC   r  r  I  s¼   ø† ÙC÷ôT
ôn	
ô
$ô H
ôV/ôtðv "'ð	5%à"ð5%ð ð5%ð ð	5%ð
 
õ5%ôpcðJ$
Ø(ð$
Ø=Fð$
à	ô$
ðN ó,ó ð,ð ó7ó ð7ô÷-ò -rE   r  )r:   r   r;   r>   rB   rÎ   r=   r   r8   z
int | Nonerp   r   )[rT   Ú
__future__r   r  rß   r   r†   r¸  Úcollectionsr   r   Údataclassesr   r   Úpathlibr   Útypingr	   r
   r   r   r   ÚnumpyrÅ  Údocling_core.types.docr   r   r   r   r   r   Ú docling.backend.abstract_backendr   Údocling.backend.pdf_backendr   r   Údocling.datamodel.base_modelsr   r   r   r   r   r   Údocling.datamodel.documentr   Ú"docling.datamodel.pipeline_optionsr   r   Údocling.datamodel.settingsr    Údocling.models.factoriesr!   r"   r#   Ú9docling.models.stages.code_formula.code_formula_vlm_modelr$   Ú?docling.models.stages.heading_hierarchy.heading_hierarchy_modelr%   Ú8docling.models.stages.layout.layout_postprocessing_modelr&   Ú7docling.models.stages.page_assemble.page_assemble_modelr'   r(   ÚAdocling.models.stages.page_preprocessing.page_preprocessing_modelr)   r*   r+   Ú6docling.models.stages.reading_order.readingorder_modelr,   r-   Údocling.pipeline.base_pipeliner.   r/   Údocling.utils.profilingr0   r1   Údocling.utils.utilsr2   Ú	getLoggerr@   rÇ   ÚINFERENCE_FAILURErä   rD   rG   rX   ru   r¤   rü   r  r  rP   rE   rC   Ú<module>r     s¡  ðñõ #ã Û Û Û Û ß *ß (Ý ß :Õ :ã ÷÷ õ Eß R÷÷ õ 8÷õ 0÷ñ õ
õõ÷÷ñ ÷
÷÷ AÝ (à×Ò˜Ó"€ð ×,Ñ,Ø×/Ñ/Ø×.Ñ.Ø×1Ñ1ñ	Ð ð$ ñà(ðð ðð ð	ð
 ðð ðð õð" ÷	ð 	ó ð	ð ÷Bð Bó ðB÷4@ñ @÷FuXñ uXôpZÐ3ô Zðz ÷=ð =ó ð=ô\	-˜/õ \	-rE   