ó
    �®žjô]  ã                   ó´  • S SK r S SKJrJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKrS SKJrJrJr  S SKJrJrJrJr  S SKJrJrJrJrJrJrJrJrJ r   S S	K!J"r"  S S
KJ#r#  S SK$J%r%J&r&  S SK'J(r(J)r)  S SK*J+r+  S SK,J-r-J.r.  S SK/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6J7r7  \	(       a  S SK8J9r9  \ Rt                  " \;5      r<\=" \R|                  \R~                  15      r@S\\   S\A\   4S jrBSSS.S\CS\DS-  S\4S jjrESSSS.S\CS\CS \CS!\CS"\CS\4S# jjrF " S$ S%\&5      rG " S& S'\%5      rHS(\\\4   S)\
\I   S*\J\D\D4   S\A\D   S-  4S+ jrK " S, S-\)5      rL " S. S/\(5      rMg)0é    N)ÚIterableÚIterator)ÚBytesIO)ÚPath)ÚTYPE_CHECKINGÚOptionalÚUnion)ÚBoundingBoxÚCoordOriginÚSize)ÚPdfCellRenderingModeÚPdfTextCellÚSegmentedPdfPageÚTextCell)	ÚContentConfigÚContentLevelÚDecodeConfigÚDoclingPdfParserÚDoclingThreadedPdfParserÚPageParseResultÚPdfDocumentÚRenderConfigÚThreadedPdfParserConfig)ÚImage)ÚPdfPage)ÚManagedPdfiumDocumentBackendÚManagedPdfiumPageBackend)ÚPdfDocumentBackendÚPdfPageBackend)ÚAcceleratorOptions)ÚPdfBackendOptionsÚ"ThreadedDoclingParseBackendOptions)ÚDEFAULT_PAGE_RANGE)ÚDocumentLoadError)Úpypdfium2_lock)Ú_PdfOutlineItemÚ"extract_outline_from_docling_parse)ÚInputDocumentÚcellsÚreturnc                 óˆ   • U  Vs/ s H0  n[        U[        5      (       a  UR                  [        ;  d  M.  UPM2     sn$ s  snf )z.Keep only the cells that paint ink on the page)Ú
isinstancer   Úrendering_modeÚ_INVISIBLE_RENDERING_MODES)r)   Úcells     Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/docling_parse_backend.pyÚ_visible_text_cellsr1   ?   sE   € ñ óâˆDÜ˜$¤×,Ñ,Ø×ÑÔ&@Ñ@÷ 	Ùñð ùò s   …-?¶?T©Úenforce_same_fontÚ#release_native_memory_every_n_pagesr3   r4   c                 ó*   • [        U S9nUb  Xl        U$ )N©r3   )r   r4   )r3   r4   Úconfigs      r0   Ú!_make_docling_parse_decode_configr8   I   s    € ô
 Ð,=Ñ>€Fà*Ñ6Ø5XÔ2à€Mó    F)Úmaterialize_char_cellsÚcompute_shapesÚinclude_bitmap_bytesÚcreate_wordsÚcreate_textlinesr:   r;   r<   c           	      óæ   • [         R                  n[         R                  n[         R                  n[	        U(       a  UOU (       d  U(       a  UOUU (       a  UOUU(       a  UOUU(       a  UOUUUS9$ )N)Úchar_cells_content_levelÚword_cells_content_levelÚline_cells_content_levelÚshapes_content_levelÚbitmaps_content_levelr<   )r   ÚCOMPUTEÚCOMPUTE_AND_MATERIALIZEÚSKIPr   )r=   r>   r:   r;   r<   ÚcomputeÚmaterializeÚskips           r0   Ú'_make_docling_parse_page_content_configrK   V   sk   € ô ×"Ñ"€GÜ×6Ñ6€KÜ×Ñ€Däö &ñ ö Ö 0ñ àæ0<¡À$Þ0@¡Àdö )7™W¸DØ)ð 2ñ!ð r9   c                   ód  ^ • \ rS rSrSSSSSSSS.S\S\S\S\S	\S
\S\S\S\S\4U 4S jjjr\	S\4S j5       r
S\4S jrS!S jrS\4S jrS\S\4S jrS\\   4S jrS\\   4S jrS\\\      4S jrS"S\S\\   4S jjr S#S\S\\   S\R6                  4S jjrS\4S jrS!S jrS r U =r!$ )$ÚDoclingParsePageBackendév   TF)r=   r>   r:   Úinclude_bitmap_imagesÚ
keep_charsÚ
keep_linesÚkeep_imagesÚdp_docÚpage_objÚpage_nor=   r>   r:   rO   rP   rQ   rR   c       
         ó  >• [         TU ]  5         X l        Xl        X0l        X@l        XPl        X`l        Xpl        X€l	        X�l
        X l        S U l        SU l        U R                  S L=(       a    U R                  S LU l        g )NF)ÚsuperÚ__init__Ú_ppageÚ_dp_docÚ_page_noÚ_create_wordsÚ_create_textlinesÚ_materialize_char_cellsÚ_include_bitmap_imagesÚ_keep_charsÚ_keep_linesÚ_keep_imagesÚ_dpageÚ	_unloadedÚvalid)ÚselfrS   rT   rU   r=   r>   r:   rO   rP   rQ   rR   Ú	__class__s              €r0   rX   Ú DoclingParsePageBackend.__init__w   su   ø€ ô 	‰ÑÔØŒØ.4ŒØŒà)ÔØ!1ÔØ'=Ô$Ø&;Ô#à%ÔØ%ÔØ'Ôà26ˆŒØˆŒØ—k‘k¨Ð-×M°D·L±LÈÐ4Lˆ�
r9   r*   c                 ó    • U R                   S-   $ )Né   )r[   ©rf   s    r0   rU   ÚDoclingParsePageBackend.page_no—   s   € à�}‰}˜qÑ Ð r9   c                 óB   • U R                   c   S5       eU R                   $ )NzPage backend was unloaded.)rY   rk   s    r0   Ú_require_pageÚ%DoclingParsePageBackend._require_page›   s"   € Ø�{‰{Ñ&ÐDÐ(DÓDÐ&Ø�{‰{Ðr9   c                 ó–  • U R                   b  g [        U R                  U R                  U R                  SU R
                  S9nU R                  c   eU R                  R                  U R                  S-   US9nUR                   Vs/ s H(  nUR                  UR                  R                  5      PM*       nUR                   Vs/ s H'  o3R                  UR                  R                  5      PM)       nUR                   Vs/ s H'  o3R                  UR                  R                  5      PM)       nX l         g s  snf s  snf s  snf )NT©r=   r>   r:   r;   r<   rj   )Úcontent_config)rc   rK   r\   r]   r^   r_   rZ   Úget_pager[   Útextline_cellsÚto_top_left_originÚ	dimensionÚheightÚ
char_cellsÚ
word_cells)rf   rr   Úseg_pageÚtcs       r0   Ú_ensure_parsedÚ&DoclingParsePageBackend._ensure_parsedŸ   s)  € Ø�;‰;Ñ"Øä@Ø×+Ñ+Ø!×3Ñ3Ø#'×#?Ñ#?ØØ!%×!<Ñ!<ñ
ˆð �|‰|Ñ'Ð'Ð'Ø—<‘<×(Ñ(Ø�M‰M˜AÑØ)ð )ð 
ˆð ×-Ò-ó	
â-�ð ×!Ñ! (×"4Ñ"4×";Ñ";Ö<Ù-ñ	
ð EM×DWÒDWÓXÒDW¸b×	Ñ	˜x×1Ñ1×8Ñ8Ö	9ÑDWÑXØDL×DWÒDWÓXÒDW¸b×	Ñ	˜x×1Ñ1×8Ñ8Ö	9ÑDWÑXà�ùò	
ùò 	YùÚXs   Â/D<Ã.EÄ.Ec                 ó   • U R                   $ ©N)re   rk   s    r0   Úis_validÚ DoclingParsePageBackend.is_valid»   s   € Ø�z‰zÐr9   Úbboxc                 ó²  • U R                  5         U R                  c   eSnU R                  5       nSn[        U R                  R                  5       H€  u  pVUR
                  R                  5       R                  UR                  S9R                  U5      nUR                  U5      nUS:”  d  M^  [        U5      S:”  a  US-  nX&R                  -  nM‚     U$ )NÚ rj   )Úpage_heightç      à?r   Ú )r|   rc   Úget_sizeÚ	enumeratert   ÚrectÚto_bounding_boxru   rw   ÚscaledÚintersection_over_selfÚlenÚtext)	rf   r‚   Ú
text_pieceÚ	page_sizeÚscaleÚir/   Ú	cell_bboxÚoverlap_fracs	            r0   Úget_text_in_rectÚ(DoclingParsePageBackend.get_text_in_rect¾   sÍ   € Ø×ÑÔØ�{‰{Ñ&Ð&Ð&ð ˆ
Ø—M‘M“Oˆ	ð ð 	ô ! §¡×!;Ñ!;Ö<‰GˆAà—	‘	×)Ñ)Ó+ß#Ñ#°	×0@Ñ0@Ð#ÐAß‘˜“ð ð %×;Ñ;¸DÓAˆLà˜cÕ!Ü�z“? QÓ&Ø #Ñ%�JØŸi™iÑ'’
ñ =ð Ðr9   c                 ó:   • U R                  5         U R                  $ r   )r|   rc   rk   s    r0   Úget_segmented_pageÚ*DoclingParsePageBackend.get_segmented_pageÚ   s   € Ø×ÑÔØ�{‰{Ðr9   c                 ól   • U R                  5         U R                  c   eU R                  R                  $ r   )r|   rc   rt   rk   s    r0   Úget_text_cellsÚ&DoclingParsePageBackend.get_text_cellsÞ   s.   € Ø×ÑÔØ�{‰{Ñ&Ð&Ð&à�{‰{×)Ñ)Ð)r9   c                 ó~   • U R                  5         U R                  c   e[        U R                  R                  5      $ r   )r|   rc   r1   rt   rk   s    r0   Úget_visible_text_cellsÚ.DoclingParsePageBackend.get_visible_text_cellsä   s3   € Ø×ÑÔØ�{‰{Ñ&Ð&Ð&ä" 4§;¡;×#=Ñ#=Ó>Ð>r9   r’   c              #   ó`  #   • U R                  5         U R                  c   eSnU R                  R                  nU Hm  nUR                  R	                  5       R                  U R                  5       R                  5      nUR                  5       U:”  d  MZ  UR                  US9nUv •  Mo     g 7f©Nr   )r’   )
r|   rc   Úbitmap_resourcesrŠ   r‹   ru   rˆ   rw   ÚarearŒ   )rf   r’   ÚAREA_THRESHOLDÚimagesÚimgÚcropboxs         r0   Úget_bitmap_rectsÚ(DoclingParsePageBackend.get_bitmap_rectsê   s�   é € Ø×ÑÔØ�{‰{Ñ&Ð&Ð&àˆà—‘×-Ñ-ˆãˆCØ—h‘h×.Ñ.Ó0×CÑCØ—‘“×&Ñ&óˆGð �|‰|‹~ Õ.Ø!Ÿ.™.¨u˜.Ð5�à”ò ùs   ‚BB.ÂB.r¨   c                 ó  • U R                  5       nU(       dK  [        SUR                  SUR                  [        R
                  S9n[        SSSS[        R                  S9nOeUR                  UR                  5      R                  5       nUR                  UR                  -
  Ul	        UR                  UR                  -
  Ul
        [           U R                  R                  US-  SUR                  5       S9nUR                  5       R!                  5       nUR#                  5         S S S 5        WR%                  ['        UR                  U-  5      ['        UR                  U-  5      4S9nU$ ! , (       d  f       NM= f)Nr   )ÚlÚrÚtÚbÚcoord_origing      ø?)r’   ÚrotationÚcrop)Úsize)rˆ   r
   Úwidthrw   r   ÚTOPLEFTÚ
BOTTOMLEFTÚto_bottom_left_originÚ
model_copyr­   r®   r%   rY   ÚrenderÚas_tupleÚto_pilÚcopyÚcloseÚresizeÚround)rf   r’   r¨   r‘   ÚpadboxÚbitmapÚimages          r0   Úget_page_imageÚ&DoclingParsePageBackend.get_page_imageü   s?  € ð —M‘M“Oˆ	æÜ!ØØ—/‘/ØØ×"Ñ"Ü(×0Ñ0ñˆGô !Ø�q˜A ´×1GÑ1Gñ‰Fð ×2Ñ2°9×3CÑ3CÓD×OÑOÓQˆFØ —‘¨¯©Ñ1ˆFŒHØ ×'Ñ'¨&¯(©(Ñ2ˆFŒHæØ—[‘[×'Ñ'Ø˜c‘kØØ—_‘_Ó&ð (ð ˆFð
 —M‘M“O×(Ñ(Ó*ˆEØ�L‰LŒN÷ ð —‘Ü˜Ÿ™¨Ñ-Ó.´°g·n±nÀuÑ6LÓ0MÐNð ð 
ˆð ˆ÷ �^ús   ÃAE0Å0
E>c                 ó°   • [            U R                  5       n[        UR                  5       UR	                  5       S9sS S S 5        $ ! , (       d  f       g = f©N)r´   rw   )r%   rn   r   Ú	get_widthÚ
get_height)rf   Úpages     r0   rˆ   Ú DoclingParsePageBackend.get_size   s5   € ÞØ×%Ñ%Ó'ˆDÜ˜dŸn™nÓ.°t·±Ó7HÑI÷ �^�^ús   ‡6AÁ
Ac                 ót  • U R                   (       dK  U R                  b>  U R                  R                  U R                  S-   U R                  S-   45        SU l         [           U R
                  b  U R
                  R                  5         S S S 5        S U l        S U l        S U l        g ! , (       d  f       N$= f)Nrj   é   T)rd   rZ   Úunload_pagesr[   r%   rY   r½   rc   rk   s    r0   Ú_close_native_pageÚ*DoclingParsePageBackend._close_native_page+  sƒ   € Ø�~�~ $§,¡,Ñ":Ø�L‰L×%Ñ% t§}¡}°qÑ'8¸$¿-¹-È!Ñ:KÐ&LÔMØ!ˆDŒNæØ�{‰{Ñ&Ø—‘×!Ñ!Ô#÷ ð ˆŒØˆŒØˆ�÷ �^ús   Á#(B)Â)
B7)r]   r\   rZ   rc   r_   r`   rb   ra   r^   r[   rY   rd   re   ©r*   N©rj   ©rj   N)"Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   ÚintÚboolrX   ÚpropertyrU   rn   r|   r€   r
   Ústrr–   r   r   r™   r   r   rœ   ÚlistrŸ   Úfloatr©   r   rÃ   r   rˆ   rÎ   Ú__static_attributes__Ú__classcell__©rg   s   @r0   rM   rM   v   sv  ø† ð "Ø!%Ø',Ø&+Ø Ø Ø òNð ðNð ð	Nð
 ðNð ðNð ðNð !%ðNð  $ðNð ðNð ðNð ÷Nð Nð@ ð!˜ó !ó ð!ð˜wô ôð8˜$ô ð [ð °Sô ð8 HÐ-=Ñ$>ô ð* ¨Ñ 2ô *ð?¨°°h±Ñ(@ô ?ñ eð °H¸[Ñ4Iõ ð& BFñ"Øð"Ø)1°+Ñ)>ð"à	�‰õ"ðHJ˜$ô J÷ò r9   rM   c            	       ó¨   ^ • \ rS rSr SSSS\\\4   S\\   4U 4S jjjr	S\
4S jr SS	\
S
\S\S\4S jjrS\4S jrS\\   4S jrSS jrSrU =r$ )ÚDoclingParseDocumentBackendi9  Úin_docr(   Úpath_or_streamÚoptionsc                 ó  >• Uc
  [        5       n[        TU ]	  XU5        U R                  R                  (       a$  U R                  R                  R                  5       OS nU    [           [        R                  " U R                  US9U l
        S S S 5        [        SS9U l        [        U R                  R                  S9nU R                  R                  U R                  UUS9U l        U R                   c  [)        SU R*                   S35      eg ! , (       d  f       NŠ= f! ["         a[  n[%        U5      R'                  5       nU(       a  [)        SU R*                   SU 35      Ue[)        SU R*                   S35      UeS nAff = f)	N©ÚpasswordÚfatal©Úloglevelr6   )rã   rç   Údecode_configú&docling-parse could not load document ú: Ú.)r!   rW   rX   rä   rç   Úget_secret_valuer%   Úpdfiumr   rã   Ú_pdocr   Úparserr8   r3   ÚloadrS   ÚRuntimeErrorrÚ   Ústripr$   Údocument_hash)	rf   râ   rã   rä   rç   rë   ÚeÚdetailrg   s	           €r0   rX   Ú$DoclingParseDocumentBackend.__init__:  su  ø€ ð ‰?Ü'Ó)ˆGÜ‰Ñ˜°Ô9ð 9=¿¹×8M×8MˆD�L‰L×!Ñ!×2Ñ2Ô4ÐSWð 	ñ 	ð	ÞÜ#×/Ò/°×0CÑ0CÈhÑW�”
÷  ä*°GÑ<ˆDŒKÜ=Ø"&§,¡,×"@Ñ"@ñˆMð Ÿ+™+×*Ñ*Ø#×2Ñ2Ø!Ø+ð +ð ˆDŒKð" �;‰;ÑÜ#Ø8¸×9KÑ9KÐ8LÈAÐNóð ð ÷/  •ûô ó 
	ô ˜“V—\‘\“^ˆFÞÜ'Ø<¸T×=OÑ=OÐ<PÐPRÐSYÐRZÐ[óàðô $Ø8¸×9KÑ9KÐ8LÈAÐNóàðûð
	ús2   Á#D# Á)%DÂAD# Ä
D ÄD# Ä#
FÄ-AFÆFr*   c                 óÂ   • [        U R                  5      nU R                  c   eU R                  R                  5       nX:w  a  [        R                  SU SU 35        U$ )NzInconsistent number of pages: z!=)rŽ   rñ   rS   Únumber_of_pagesÚ_logÚerror)rf   Úlen_1Úlen_2s      r0   Ú
page_countÚ&DoclingParseDocumentBackend.page_counte  sW   € ô �D—J‘J“ˆØ�{‰{Ñ&Ð&Ð&Ø—‘×+Ñ+Ó-ˆà‹>Ü�J‰JÐ7¸°w¸bÀÀÐHÔIàˆr9   rU   r=   r>   c           
      ó   • U R                   c   e[           U R                  U   nS S S 5        [        U R                   WUUUU R                  R
                  U R                  R                  S9$ ! , (       d  f       NO= f)N)rS   rT   rU   r=   r>   r:   rO   )rS   r%   rñ   rM   rä   r^   rO   )rf   rU   r=   r>   Úppages        r0   Ú	load_pageÚ%DoclingParseDocumentBackend.load_pageq  sn   € ð �{‰{Ñ&Ð&Ð&ÞØ—J‘J˜wÑ'ˆE÷ ô 'Ø—;‘;ØØØ%Ø-Ø#'§<¡<×#GÑ#GØ"&§,¡,×"DÑ"Dñ
ð 	
÷ �^ús   –A/Á/
A=c                 ó(   • U R                  5       S:„  $ ©Nr   )r   rk   s    r0   r€   Ú$DoclingParseDocumentBackend.is_valid‚  s   € Ø�‰Ó  1Ñ$Ð$r9   c                 óJ   • U R                   c  / $ [        U R                   5      $ )zPExtract the outline via docling-parse's native table-of-contents (no pypdfium2).)rS   r'   rk   s    r0   Úget_document_outlineÚ0DoclingParseDocumentBackend.get_document_outline…  s    € à�;‰;ÑØˆIÜ1°$·+±+Ó>Ð>r9   c                 ó   • U R                   b!  U R                   R                  5         S U l         U R                  b2  [            U R                  R	                  5         S S S 5        S U l        g g ! [
         a     Nf = f! , (       d  f       N'= fr   )rS   Úunloadrñ   r%   r½   Ú	Exceptionrk   s    r0   Ú_close_native_documentÚ2DoclingParseDocumentBackend._close_native_document‹  st   € Ø�;‰;Ñ"Ø�K‰K×ÑÔ ØˆDŒKà�:‰:Ñ!ÞðØ—J‘J×$Ñ$Ô&÷  ð
 ˆD�Jð "øô !ó Ùðú÷  •ús*   ÁA?ÁA/Á/
A<Á9A?Á;A<Á<A?Á?
B)rñ   rS   rò   r   )TTrÐ   )rÓ   rÔ   rÕ   rÖ   r	   r   r   r   r!   rX   r×   r   rØ   rM   r  r€   rÛ   r&   r
  r  rÝ   rÞ   rß   s   @r0   rá   rá   9  s�   ø† ð
 04ñ	)àð)ð ˜g t˜mÑ,ð)ð Ð+Ñ,÷	)ð )ðV
˜Cô 
ð QUñ
Øð
Ø*.ð
ØIMð
à	 õ
ð"%˜$ô %ð? d¨?Ñ&;ô ?÷ò r9   rá   rã   rç   Ú
page_rangec                 ó@  • Uu  p4U[         :X  a  g [           [        R                  " XS9n [	        U5      nUR                  5          S S S 5        [        UW5      nX7:”  a  / $ [        [        X7S-   5      5      $ ! UR                  5         f = f! , (       d  f       NM= f)Nræ   rj   )	r#   r%   rð   r   rŽ   r½   ÚminrÛ   Úrange)rã   rç   r  Ú
start_pageÚend_pageÚpdocr   Úclipped_end_pages           r0   Ú_resolve_threaded_page_numbersr  ™  s‹   € ð
 &Ñ€JàÔ'Ó'Øæ	Ü×!Ò! .ÑDˆð	Ü˜T›ˆJà�J‰J�L÷ 
ô ˜8 ZÓ0ÐØÓ$Øˆ	ä”�j°QÑ"6Ó7Ó8Ð8øð �J‰J�Lú÷ 
�ús!   –B¬A:·BÁ:BÂBÂ
Bc                   ó¤  • \ rS rSrS&S\S\4S jjr\S\4S j5       r	S\4S jr
S\4S	 jrS
\S\4S jrS\\   4S jrS\\   4S jrS\\\      4S jrS'S\S\\   4S jjrSSSS.S
\S\S\S\S\\   4
S jjrSSSS.S\S\S\S\\\      4S jjrSS.S\S\\\      4S jjr S(S\S!\\   S\R8                  4S" jjrS\4S# jrS)S$ jr S%r!g )*ÚThreadedDoclingParsePageBackendi±  TÚresultÚrenderedc                 ó*   • Xl         X l        S U l        g r   )Ú_resultÚ	_renderedÚ	_seg_page)rf   r  r  s      r0   rX   Ú(ThreadedDoclingParsePageBackend.__init__²  s   € ØŒØ!ŒØ59ˆ�r9   r*   c                 ó.   • U R                   R                  $ r   )r  Úpage_numberrk   s    r0   rU   Ú'ThreadedDoclingParsePageBackend.page_no·  s   € à�|‰|×'Ñ'Ð'r9   c                 ó.   • U R                   R                  $ r   )r  Úsuccessrk   s    r0   r€   Ú(ThreadedDoclingParsePageBackend.is_valid»  s   € Ø�|‰|×#Ñ#Ð#r9   c                 ó.   • U R                   R                  $ r   )r  Úerror_messagerk   s    r0   Úget_error_messageÚ1ThreadedDoclingParsePageBackend.get_error_message¾  s   € Ø�|‰|×)Ñ)Ð)r9   r‚   c                 óò   • U R                  5       nUc  gSnUR                   HP  nUR                  R                  5       nUR	                  U5      nUS:”  d  M6  U(       a  US-  nX4R
                  -  nMR     U$ )Nr„   r†   r‡   )r™   rt   rŠ   r‹   r�   r�   )rf   r‚   Úsegmented_pager�   r/   r”   r•   s          r0   r–   Ú0ThreadedDoclingParsePageBackend.get_text_in_rectÁ  sy   € Ø×0Ñ0Ó2ˆØÑ!Øàˆ
Ø"×1Ô1ˆDØŸ	™	×1Ñ1Ó3ˆIØ$×;Ñ;¸DÓAˆLØ˜cÕ!ÞØ #Ñ%�JØŸi™iÑ'’
ñ 2ð Ðr9   c                 ó¤  • U R                  5       (       d  g U R                  c¢  U R                  R                  5       nUR                  R
                  nUR                   H  nUR                  U5        M     UR                   H  nUR                  U5        M     UR                   H  nUR                  U5        M     Xl        U R                  $ r   )
r€   r!  r  rs   rv   rw   rt   ru   rx   ry   )rf   rz   r…   r{   s       r0   r™   Ú2ThreadedDoclingParsePageBackend.get_segmented_pageÑ  s¦   € Ø�}‰}�‰ØØ�>‰>Ñ!Ø—|‘|×,Ñ,Ó.ˆHØ"×,Ñ,×3Ñ3ˆKØ×-Ô-�Ø×%Ñ% kÖ2ñ .à×)Ô)�Ø×%Ñ% kÖ2ñ *à×)Ô)�Ø×%Ñ% kÖ2ñ *à%ŒNØ�~‰~Ðr9   c                 óD   • U R                  5       nUc  / $ UR                  $ r   )r™   rt   ©rf   r.  s     r0   rœ   Ú.ThreadedDoclingParsePageBackend.get_text_cellsà  s'   € Ø×0Ñ0Ó2ˆØÑ!ØˆIØ×,Ñ,Ð,r9   c                 óV   • U R                  5       nUc  / $ [        UR                  5      $ r   )r™   r1   rt   r3  s     r0   rŸ   Ú6ThreadedDoclingParsePageBackend.get_visible_text_cellsæ  s,   € Ø×0Ñ0Ó2ˆØÑ!ØˆIÜ" >×#@Ñ#@ÓAÐAr9   r’   c                 óH  • U R                  5       nUc  / $ U R                  5       R                  n/ nUR                   H`  nUR                  R                  5       R                  U5      nUR                  5       S:”  d  MB  UR                  UR                  US95        Mb     U$ r¢   )
r™   rˆ   rw   r£   rŠ   r‹   ru   r¤   ÚappendrŒ   )rf   r’   r.  r…   Ú	cropboxesÚimage_resourcer¨   s          r0   r©   Ú0ThreadedDoclingParsePageBackend.get_bitmap_rectsì  s”   € Ø×0Ñ0Ó2ˆØÑ!ØˆIà—m‘m“o×,Ñ,ˆØ')ˆ	Ø,×=Ô=ˆNØ$×)Ñ)×9Ñ9Ó;×NÑNØóˆGð �|‰|‹~ Õ!Ø× Ñ  §¡°e Ð!<Ö=ñ >ð Ðr9   F)ÚcharsÚshapesÚbitmapsr<  r=  r>  c                ób   • U R                  5       (       d  gU R                  R                  XX4S9$ )NF)r‚   r<  r=  r>  )r€   r  Úintersects_with)rf   r‚   r<  r=  r>  s        r0   Úhas_content_inÚ.ThreadedDoclingParsePageBackend.has_content_inû  s3   € ð �}‰}�‰ØØ�|‰|×+Ñ+Ø¨6ð ,ð 
ð 	
r9   gü©ñÒMbP?©Ú
horizontalÚverticalÚ	tolerancerD  rE  rF  c                óâ   • U R                  5       (       d  / $ U R                  5       R                  nU R                  R	                  XUS9 Vs/ s H  nUR                  U5      PM     sn$ s  snf )NrC  )r€   rˆ   rw   r  Úget_shape_linesru   )rf   rD  rE  rF  r…   r‚   s         r0   rH  Ú/ThreadedDoclingParsePageBackend.get_shape_lines	  st   € ð �}‰}�‰ØˆIà—m‘m“o×,Ñ,ˆð Ÿ™×4Ñ4Ø%ÀIð 5ñ ó
ò�ð ×#Ñ# KÖ0ññ
ð 	
ùò 
s   ÁA,g        ©rF  c                óà   • U R                  5       (       d  / $ U R                  5       R                  nU R                  R	                  US9 Vs/ s H  nUR                  U5      PM     sn$ s  snf )NrJ  )r€   rˆ   rw   r  Ú"get_connected_shape_bounding_boxesru   )rf   rF  r…   r‚   s       r0   rL  ÚBThreadedDoclingParsePageBackend.get_connected_shape_bounding_boxes  ss   € ð �}‰}�‰ØˆIà—m‘m“o×,Ñ,ˆð Ÿ™×GÑGØ#ð Hñ ó
ò�ð ×#Ñ# KÖ0ññ
ð 	
ùò 
s   ÁA+Nr¨   c                 ó¦   • U R                   (       d  [        SU R                   S35      eU R                  R	                  XS9R                  S5      $ )Nz=This backend was configured with render_pages=False, so page z8 was parsed but never rendered and no page image exists.)r’   r¨   ÚRGB)r   rô   rU   r  Ú	get_imageÚconvert)rf   r’   r¨   s      r0   rÃ   Ú.ThreadedDoclingParsePageBackend.get_page_image)  sR   € ð �~�~ÜØOØ—<‘<�.Ð XðZóð ð �|‰|×%Ñ%¨EÐ%ÐC×KÑKÈEÓRÐRr9   c                 óf   • [        U R                  R                  U R                  R                  S9$ rÆ   )r   r  Ú
page_widthr…   rk   s    r0   rˆ   Ú(ThreadedDoclingParsePageBackend.get_size3  s#   € Ü˜$Ÿ,™,×1Ñ1¸$¿,¹,×:RÑ:RÑSÐSr9   c                 ó   • g r   © rk   s    r0   r  Ú&ThreadedDoclingParsePageBackend.unload6  s   € Ør9   )r   r  r!  )TrÑ   rÒ   rÐ   )"rÓ   rÔ   rÕ   rÖ   r   rØ   rX   rÙ   r×   rU   r€   rÚ   r+  r
   r–   r   r   r™   r   r   rœ   rÛ   rŸ   rÜ   r©   rA  rH  rL  r   rÃ   r   rˆ   r  rÝ   rW  r9   r0   r  r  ±  s�  † ñ:˜ð :¸$õ :ð
 ð(˜ó (ó ð(ð$˜$ô $ð* 3ô *ð [ð °Sô ð  HÐ-=Ñ$>ô ð- ¨Ñ 2ô -ðB¨°°h±Ñ(@ô Bñ eð °H¸[Ñ4Iõ ð& ØØò
ð ð
ð ð	
ð
 ð
ð ð
ð 
�$‰õ
ð"  ØØò
ð ð
ð ð	
ð
 ð
ð 
�$�{Ñ#Ñ	$õ
ð& %(ò
Ø!ð
à	�$�{Ñ#Ñ	$õ
ð BFñSØðSØ)1°+Ñ)>ðSà	�‰õSðT˜$ô T÷r9   r  c                   ó¸   ^ • \ rS rSrSr SSSS\\\4   S\\	   4U 4S jjjr
S\4S	 jrS\4S
 jrS\\   4S jrS\S\4S jrS\\   4S jrSU 4S jjrSrU =r$ )Ú#ThreadedDoclingParseDocumentBackendi:  Frâ   r(   rã   rä   c           	      ó   >• Uc
  [        5       n[        TU ]	  XU5        U   SU l        SU l        U R
                  R                  (       a$  U R
                  R                  R                  5       OS n[        U R
                  [        5      (       a  U R
                  O	[        5       nUR                  b  UR                  O[        5       R                  nUR                  U l        S nU R                  (       a  [        5       nUR                   Ul        [%        U R
                  R&                  UR(                  S9n[+        SSU R
                  R,                  U R                  U R
                  R.                  S9n	[1        [3        SUUU	S9US9U l         [7        U R8                  UUR:                  R<                  5      n
[        U R8                  [>        5      (       a  U R8                  RA                  S5        U R4                  RC                  U R8                  UU
S	9U l"        g ! [F        [H        4 a[  n[K        U5      RM                  5       nU(       a  [O        S
U RP                   SU 35      Ue[O        S
U RP                   S35      UeS nAff = f)NFr2   Trq   rè   )rê   ÚthreadsÚrender_configÚpage_content_config)Úparser_configrë   r   )rç   Úpage_numbersrì   rí   rî   ))r!   rW   rX   Ú_closedÚ
_iteratingrä   rç   rï   r,   r"   Úparser_threadsr    Únum_threadsÚrender_pagesÚ_render_pagesr   Úrender_scaler’   r8   r3   r4   rK   r^   rO   r   r   rò   r  rã   Úlimitsr  r   Úseekró   Údoc_keyrô   Ú
ValueErrorrÚ   rõ   r$   rö   )rf   râ   rã   rä   rç   Úthreaded_optionsrc  r]  rë   rr   Úrequested_page_numbersr÷   rø   rg   s                €r0   rX   Ú,ThreadedDoclingParseDocumentBackend.__init__=  sV  ø€ ð ‰?Ü'Ó)ˆGÜ‰Ñ˜°Ô9ÙØˆŒØˆŒð 9=¿¹×8M×8MˆD�L‰L×!Ñ!×2Ñ2Ô4ÐSWð 	ô
 ˜$Ÿ,™,Ô(J×KÑKð �LŠLä3Ó5ð 	ð  ×.Ñ.Ñ:ð ×+Ò+ä#Ó%×1Ñ1ð 	ð
 .×:Ñ:ˆÔØ-1ˆØ××Ü(›NˆMØ"2×"?Ñ"?ˆMÔÜ9Ø"Ÿl™l×<Ñ<à ×DÑDñ
ˆô AØØ!Ø#'§<¡<×#GÑ#Gà×-Ñ-Ø!%§¡×!CÑ!Cñ
ˆô /Ü1Ø Ø&Ø+Ø$2ñ	ð (ñ
ˆŒð	Ü%CØ×#Ñ#ØØ—‘×(Ñ(ó&Ð"ô ˜$×-Ñ-¬w×7Ñ7Ø×#Ñ#×(Ñ(¨Ô+ØŸ;™;×+Ñ+Ø×#Ñ#Ø!Ø3ð ,ð ˆD�Løô
 œjÐ)ó 	ô ˜“V—\‘\“^ˆFÞÜ'Ø<¸T×=OÑ=OÐ<PÐPRÐSYÐRZÐ[óàðô $Ø8¸×9KÑ9KÐ8LÈAÐNóàðûð	ús   ÆBH" È"JÈ2AJÊJr*   c                 óX   • U R                   (       + =(       a    U R                  5       S:„  $ r  )ra  r   rk   s    r0   r€   Ú,ThreadedDoclingParseDocumentBackend.is_valid‘  s    € Ø—<‘<Ô×9 D§O¡OÓ$5¸Ñ$9Ð9r9   c                 óL   • U R                   R                  U R                  5      $ r   )rò   r   rj  rk   s    r0   r   Ú.ThreadedDoclingParseDocumentBackend.page_count”  s   € Ø�{‰{×%Ñ% d§l¡lÓ3Ð3r9   c                 ó¨  • U R                   R                  (       a$  U R                   R                  R                  5       OSn[        U R                  [
        5      (       a  U R                  R                  S5        [        SS9R                  U R                  SUS9nUc  / $  [        U5      UR                  5         $ ! UR                  5         f = f)z÷Extract the outline via docling-parse (this backend holds no pypdfium2 handle).

The threaded parser exposes no table-of-contents accessor, so a lightweight lazy
docling-parse document is loaded purely to read the (cheap, structure-only) outline.
Nr   rè   ré   T)rã   Úlazyrç   )rä   rç   rï   r,   rã   r   ri  r   ró   r'   r  )rf   rç   rS   s      r0   r
  Ú8ThreadedDoclingParseDocumentBackend.get_document_outline—  sª   € ð 9=¿¹×8M×8MˆD�L‰L×!Ñ!×2Ñ2Ô4ÐSWð 	ô �d×)Ñ)¬7×3Ñ3Ø×Ñ×$Ñ$ QÔ'Ü!¨7Ñ3×8Ñ8Ø×.Ñ.°TÀHð 9ð 
ˆð ‰>ØˆIð	Ü5°fÓ=à�M‰M�OøˆF�M‰M�Oús   Â$
B? Â?CrU   c                 ó   • [        S5      e)Nz?ThreadedDoclingParseDocumentBackend only supports iter_pages().)ÚNotImplementedError)rf   rU   s     r0   r  Ú-ThreadedDoclingParseDocumentBackend.load_page¬  s   € Ü!ØMó
ð 	
r9   c              #   ó”   #   • SU l         U R                  R                  5        H  n[        XR                  S9v •  M     SU l         g 7f)NT)r  F)rb  rò   Úiterate_resultsr  rf  )rf   r  s     r0   Ú
iter_pagesÚ.ThreadedDoclingParseDocumentBackend.iter_pages±  s;   é € ØˆŒØ—k‘k×1Ñ1Ö3ˆFÜ1°&×CUÑCUÑVÔVñ 4àˆ�ùs   ‚AAc                 ó`  >• U R                   (       a  g SU l         U R                  R                  5       (       a;  U R                  R                  5         U R                  R                  5       (       a  M;  SU l        U R                  R                  U R                  5        [        TU ]  5         g )NTF)ra  rò   Ú	has_tasksÚget_taskrb  r  rj  rW   )rf   rg   s    €r0   r  Ú*ThreadedDoclingParseDocumentBackend.unload·  su   ø€ Ø�<�<ØØˆŒð �k‰k×#Ñ#×%Ñ%Ø�K‰K× Ñ Ô"ð �k‰k×#Ñ#×%Ó%àˆŒØ�‰×Ñ˜4Ÿ<™<Ô(Ü‰‰Õr9   )ra  rb  rf  rj  rò   r   rÐ   )rÓ   rÔ   rÕ   rÖ   Úsupports_random_page_accessr	   r   r   r   r!   rX   rØ   r€   r×   r   rÛ   r&   r
  r   r  r   r  r{  r  rÝ   rÞ   rß   s   @r0   rZ  rZ  :  s¡   ø† Ø"'Ðð 04ñ	RàðRð ˜g t˜mÑ,ðRð Ð+Ñ,÷	Rð Rðh:˜$ô :ð4˜Cô 4ð d¨?Ñ&;ô ð*
 ð 
¨ô 
ð
 ˜HÐ%DÑEô  ÷
õ 
r9   rZ  )NÚloggingÚcollections.abcr   r   Úior   Úpathlibr   Útypingr   r   r	   Ú	pypdfium2rð   Údocling_core.types.docr
   r   r   Údocling_core.types.doc.pager   r   r   r   Údocling_parse.pdf_parserr   r   r   r   r   r   r   r   r   ÚPILr   r   Ú&docling.backend.managed_pdfium_backendr   r   Údocling.backend.pdf_backendr   r   Ú%docling.datamodel.accelerator_optionsr    Ú!docling.datamodel.backend_optionsr!   r"   Údocling.datamodel.settingsr#   Údocling.exceptionsr$   Údocling.utils.locksr%   Údocling.utils.pdf_outliner&   r'   Údocling.datamodel.documentr(   Ú	getLoggerrÓ   rü   Ú	frozensetÚ	INVISIBLEÚONLY_CLIPPINGr.   rÛ   r1   rØ   r×   r8   rK   rM   rá   rÚ   Útupler  r  rZ  rW  r9   r0   Ú<module>rš     s¹  ðó ß .Ý Ý ß 1Ñ 1ã ß AÑ A÷ó ÷
÷ 
õ 
õ Ý ÷÷ KÝ D÷õ :Ý 0Ý .÷ö
 Ý8à×Ò˜Ó"€ñ
 'Ø×#Ñ#Ð%9×%GÑ%GÐHóÐ ð
˜x¨Ñ1ð °d¸8±nô ð #Ø6:ò
àð
ð *-¨t©ð
ð õ	
ð" $)ØØ!&òàðð ðð !ð	ð
 ðð ðð õô@@Ð6ô @ôF]Ð">ô ]ð@9Ø˜' 4˜-Ñ(ð9à�s‰mð9ð �c˜3�h‘ð9ð 
ˆ#�Y�Ñô	9ô0F nô FôRGÐ*<õ Gr9   