ó
    �®žj¿M  ã                   óþ  • S SK r S SKrS SKJr  S SKJr  S SKJr  S SK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JrJr  S SKJrJr  S S	KJrJrJr  S S
KJr  S SK J!r!  S SK"J#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-  \R\                  " \/5      r0S\!S\4S jr1 S SK2r2Sr3 " S S\5\5      r6\7" \Rp                  \Rr                  15      r:Sr;S\\   S\<\=\   \=\   4   4S jr> " S S\-\,5      r?g! \4 a    Sr3 NZf = f)é    N)Úabstractmethod)ÚIterable)ÚEnum)ÚPath)ÚBoundingBoxÚCoordOriginÚSize)ÚBoundingRectangleÚPdfCellRenderingModeÚPdfPageGeometryÚPdfTextCellÚSegmentedPdfPageÚTextCell)ÚImageÚ	ImageDraw)Úbinary_dilationÚfind_objectsÚlabel)ÚAcceleratorOptions)ÚPage)ÚConversionResult)ÚOcrModeÚ
OcrOptions)Úsettings)ÚBoundingBoxSpatialIndex)ÚBaseModelWithOptionsÚBasePageModelÚpageÚreturnc                 óþ   • U R                   R                  U R                   R                  p![        SSUSUUSU[        R
                  S9	n[        SX!S[        R
                  S9n[        [        SUSUUUUUS9/ / / S9$ )z‰A minimal SegmentedPdfPage for pages whose native parse was skipped
(PagePreprocessingOptions.skip_cell_extraction), sized from the page.r   )	Úr_x0Úr_y0Úr_x1Úr_y1Úr_x2Úr_y2Úr_x3Úr_y3Úcoord_origin©ÚlÚtÚrÚbr)   g        Úcrop_box)ÚangleÚrectÚboundary_typeÚart_bboxÚ
bleed_bboxÚ	crop_bboxÚ
media_bboxÚ	trim_bbox)Ú	dimensionÚ
char_cellsÚ
word_cellsÚtextline_cells)	ÚsizeÚwidthÚheightr
   r   Ú
BOTTOMLEFTr   r   r   )r   r=   r>   r1   Úbboxs        ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/models/base_ocr_model.pyÚ_empty_segmented_pagerB   #   sœ   € ð —I‘I—O‘O T§Y¡Y×%5Ñ%5ˆ6ô ØØØØØØØØÜ ×+Ñ+ñ
€Dô ˜˜f°Ä×AWÑAWÑX€Dô Ü!ØØØ$ØØØØØñ	
ð ØØñð ó    TFc                   ó   • \ rS rSrSrSrSrg)Ú_MergeCellsPriorityéV   Úpdf_cells_firstÚocr_cells_first© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	PDF_FIRSTÚ	OCR_FIRSTÚ__static_attributes__rI   rC   rA   rE   rE   V   s   † à!€Ið "ƒIrC   rE   Úcellsc                 ó¼   • / n/ nU  HP  n[        U[        5      (       a'  UR                  [        ;   a  UR	                  U5        M?  UR	                  U5        MR     X4$ )zõSplit cells into (visible, invisible), preserving the order within each group.

Cells carrying no rendering mode (plain `TextCell`, e.g. OCR output) count as visible,
as does `UNKNOWN` (-1): no `Tr` operator means the PDF default mode 0 (fill).
)Ú
isinstancer   Úrendering_modeÚ_INVISIBLE_RENDERING_MODESÚappend)rQ   ÚvisibleÚ	invisibleÚcells       rA   Ú_segregate_by_visibilityrZ   h   sY   € ð !€GØ "€IÛˆä�tœ[×)Ñ)Ø×#Ñ#Ô'AÓAà×Ñ˜TÖ"à�N‰N˜4Ö ñ ð ÐÐrC   c                   óª  • \ rS rSrSrSrS\S\S-  S\S\	4S	 jr
S
\S\\   4S jrS
\S\\   4S jrS
\S\\   4S jr S"S\S\\   S\\\\   4   4S jjr S#S\\   S
\S\S\S-  SS4
S jjr S$S\\   S\\   S\S\S\\   4
S jjrS\\   S\\   S\\   4S jrS%S\4S jjr\S\S\\   S\\   4S j5       r\\S\ \   4S  j5       5       r!S!r"g)&ÚBaseOcrModelé}   zE
Base class for all OCR models.
It offers common OCR functionalities
é   ÚenabledÚartifacts_pathNÚoptionsÚaccelerator_optionsc                ó   • Xl         X0l        g ©N©r_   ra   )Úselfr_   r`   ra   rb   s        rA   Ú__init__ÚBaseOcrModel.__init__…   s   € ð ŒØ�rC   r   r   c                 ó8  • UR                   c   eU R                  R                  [        R                  :X  d(  U R                  R                  [        R
                  :X  a  U R                  U5      nU$ U R                  R                  [        R                  :X  a  U R                  U5      nU$ U R                  R                  [        R                  :X  aD  [        SSUR                   R                  UR                   R                  [        R                  S9/nW$ )zM
Produce the input rects for the OCR according to the logic for each OcrMode
r   r*   )r<   ra   Úmoder   ÚDEFAULTÚPDF_AWARE_LAYOUT_REGIONSÚ _find_pdf_aware_layout_ocr_rectsÚLAYOUT_REGIONSÚ_find_layout_ocr_rectsÚ	FULL_PAGEr   r=   r>   r   ÚTOPLEFT)rf   r   Ú	ocr_rectss      rA   Úget_ocr_rectsÚBaseOcrModel.get_ocr_rects�   sè   € ð �y‰yÑ$Ð$Ð$ð �L‰L×Ñ¤§¡Ó0Ø�|‰|× Ñ ¤G×$DÑ$DÓDà×=Ñ=¸dÓCˆIð Ðð �\‰\×Ñ¤'×"8Ñ"8Ó8Ø×3Ñ3°DÓ9ˆIð Ðð �\‰\×Ñ¤'×"3Ñ"3Ó3ô ØØØ—i‘i—o‘oØ—i‘i×&Ñ&Ü!,×!4Ñ!4ñðˆIð ÐrC   c                 ó
  • UR                   R                  c  / $ UR                   R                  R                   Vs/ s H  o"R                  PM     nnU R	                  UR
                  U[        R                  S9u  pCU$ s  snf )zW
1. Collect the bboxes of all layout clusters.
2. Deduplicate the candidate ocr_rects.
©Údilation_size)ÚpredictionsÚlayoutÚclustersr@   Ú_deduplicate_rectsr<   r\   ÚDEFAULT_DILATION_SIZE)rf   r   Úcrr   Ú_s        rA   ro   Ú#BaseOcrModel._find_layout_ocr_rects®   s   € ð
 ×Ñ×"Ñ"Ñ*ØˆIð &*×%5Ñ%5×%<Ñ%<×%EÒ%EÓFÒ%E —V”VÑ%Eˆ	ÐFð ×.Ñ.Ø�I‰I�y´×0RÑ0Rð /ð 
‰ˆð Ðùò Gs   ¼B c                 ó>  • UR                   R                  c  / $ UR                  c  U R                  U5      $ UR                  c   eUR                  n[        SSUR                  R                  UR                  R                  [        R                  S9nUR                  US9SLnSnSnU(       dÖ  UR                  5       nUc  UR                  5       n[        5       n[        U5       H.  u  p‰UR                  X‰R                   R#                  5       5        M0     [%        UR'                  5       5      n
UR)                  5       nUb  U
R+                  U5        [        5       n[        U
5       H  u  pŒUR                  XŒ5        M     / nUR                   R                  R,                   HÃ  nUR.                  nU(       a  UR                  USSSS9nO&Uc   e[1        S UR3                  U5       5       5      nU(       a  UR5                  U5        Mi  U(       a  UR                  USSSS9nO&Uc   e[1        S	 UR3                  U5       5       5      nU(       a  M²  UR5                  U5        MÅ     U R7                  UR                  U[8        R:                  S
9u  nnU$ )a˜  
Compute the OCR rects from the layout clusters of a programmatic PDF.

1. Start from the layout clusters.
2. Eliminate clusters that intersect exclusively with programmatic text PDF cells
   The following clusters therefore remain:
   - Clusters without any overlapping PDF cell.
   - Clusters with at least one overlapping non-text region (e.g. bitmap, shape).
3. Deduplicate the remaining cluster bboxes.
Nr   r*   )r@   FT)r@   ÚcharsÚshapesÚbitmapsc              3   ó&   #   • U  H  nS v •  M	     g7f©TNrI   ©Ú.0r~   s     rA   Ú	<genexpr>Ú@BaseOcrModel._find_pdf_aware_layout_ocr_rects.<locals>.<genexpr>ý   s   é € ð #Ú"K˜Q•DÒ"Kùó   ‚c              3   ó&   #   • U  H  nS v •  M	     g7fr…   rI   r†   s     rA   rˆ   r‰     s   é € ÐSÒ-R¨�tÒ-RùrŠ   rv   )rx   ry   Ú_backendro   r<   r   r=   r>   r   rq   Úhas_content_inÚget_visible_text_cellsÚget_text_cellsr   Ú	enumerateÚinsertr1   Úto_bounding_boxÚlistÚget_bitmap_rectsÚ"get_connected_shape_bounding_boxesÚextendrz   r@   ÚanyÚintersectionrV   r{   r\   r|   )rf   r   ÚbackendÚ	page_bboxÚuse_backend_queriesÚ
text_indexÚnon_text_indexÚ
text_cellsÚiÚ	text_cellÚnon_text_boxesÚshape_boxesr@   rr   ÚclusterÚcluster_bboxÚhas_non_textÚhas_textr~   s                      rA   rm   Ú-BaseOcrModel._find_pdf_aware_layout_ocr_rects¿   s„  € ð ×Ñ×"Ñ"Ñ*ØˆIØ�=‰=Ñ Ø×.Ñ.¨tÓ4Ð4à�y‰yÑ$Ð$Ð$Ø—-‘-ˆô  ØØØ�i‰i�o‰oØ�i‰i×ÑÜ$×,Ñ,ñ
ˆ	ð &×4Ñ4¸)Ð4ÐDÈDÐPÐà59ˆ
Ø9=ˆÞ"à ×7Ñ7Ó9ˆJØÑ!Ø$×3Ñ3Ó5�
ä0Ó2ˆJÜ )¨*Ö 5‘�Ø×!Ñ! !§^¡^×%CÑ%CÓ%EÖFñ !6ô " '×":Ñ":Ó"<Ó=ˆNØ!×DÑDÓFˆKØÑ&Ø×%Ñ% kÔ2ä4Ó6ˆNÜ$ ^Ö4‘�Ø×%Ñ% aÖ.ñ 5ð (*ˆ	Ø×'Ñ'×.Ñ.×7Ô7ˆGØ"Ÿ<™<ˆLæ"Ø&×5Ñ5Ø%¨U¸4Èð  6ð  ‘ð &Ñ1Ð1Ð1Ü"ñ #Ø"0×"=Ñ"=¸lÔ"Kó#ó  �ö Ø× Ñ  Ô.Ùö #Ø"×1Ñ1Ø%¨T¸%Èð 2ð ‘ð "Ñ-Ð-Ð-ÜÑS¨Z×-DÑ-DÀ\Ô-RÓSÓS�ç�8Ø× Ñ  Ö.ñ7 8ð< ×.Ñ.Ø�I‰I�y´×0RÑ0Rð /ð 
‰ˆˆ9ð ÐrC   r<   Úrectsc                 óü  • [         R                  " S[        UR                  5      [        UR                  5      45      n[
        R                  " U5      nU HW  nUR                  5       u  pxpš[        U5      [        U5      [        U	5      [        U
5      4u  pxpšUR                  Xx4Xš4/SS9  MY     [        R                  " U5      nUS:”  as  [        R                  " X34[        R                  S9n[        (       a7  [        R                  " US:„  R!                  [        R                  5      USS9nO[#        US:„  US9n[%        US:„  5      u  pÞ['        U5      nU Vs/ s HX  n[)        US   R*                  US   R*                  US   R,                  S-
  US   R,                  S-
  [.        R0                  S9PMZ     nn[        R2                  " US:„  5      UR                  UR                  -  -  nUU4$ s  snf )	aá  
Deduplicate the given rects and compute the coverage ratio defined as sum(rects)/image_size

1. Rasterize the rects into a blank binary black-white image.
   - The background is black and the rects are white.
2. Optionally apply a small binary dilation on the rects.
3. Identify the bounding boxes around the "white" regions of the binary image.
4. Compute the coverage as the ratio of white pixels in the image to the page area.
5. Return the coverage and the discovered bboxes.
Ú1é   )Úfillr   )Údtype)Ú
iterations)Ú	structurer*   )r   ÚnewÚroundr=   r>   r   ÚDrawÚas_tupleÚ	rectangleÚnpÚarrayÚonesÚuint8ÚCV2_INSTALLEDÚcv2ÚdilateÚastyper   r   r   r   ÚstartÚstopr   rq   Úsum)rf   r<   r¨   rw   ÚimageÚdrawr1   Úx0Úy0Úx1Úy1Únp_imageÚkernelÚlabeled_imager~   ÚslicesÚslcÚbounding_boxesÚ	area_fracs                      rA   r{   ÚBaseOcrModel._deduplicate_rects  s¼  € ô —	’	Ø”%˜Ÿ
™
Ó#¤U¨4¯;©;Ó%7Ð8ó
ˆô
 �~Š~˜eÓ$ˆÛˆDØ!Ÿ]™]›_‰NˆB�BÜ" 2›Y¬¨b«	´5¸³9¼eÀB»iÐG‰NˆB�BØ�N‰N˜R˜H r hÐ/°aˆNÓ8ñ ô
 —8’8˜E“?ˆà˜1Óä—W’W˜mÐ;Ä2Ç8Á8ÑLˆFßŠ}ÜŸ:š:Ø ‘\×)Ñ)¬"¯(©(Ó3°VÈñ‘ô +¨8°a©<À6ÑJ�ô ! ¨A¡Ó.Ñˆô ˜mÓ,ˆñ ó	
ò �ô Ø�a‘&—,‘,Ø�a‘&—,‘,Ø�a‘&—+‘+ ‘/Ø�a‘&—+‘+ ‘/Ü(×0Ñ0ôñ ð 	ð 	
ô —F’F˜8 a™<Ó(¨D¯J©J¸¿¹Ñ,DÑEˆ	Ø˜>Ð*Ð*ùò	
s   Å!AG9Ú	ocr_cellsÚconv_resÚpriorityc                 óD  • UR                   nU R                  R                  [        R                  :X  a  UnOaUcH  U R                  R                  [        R
                  :X  a  [        R                  O[        R                  nU R                  UUU[        S9n[        U5       H  u  pxXxl        M     UR                  c  [        U5      Ul        XbR                  l        [!        U5      S:„  UR                  l        U R                  R                  [        R                  :X  aò  UR                  R$                   V	s/ s H  o™R&                  (       d  M  U	PM     sn	UR                  l        UR                  R(                   V	s/ s H  o™R&                  (       d  M  U	PM     sn	UR                  l        [!        UR                  R$                  5      S:„  UR                  l        [!        UR                  R(                  5      S:„  UR                  l        U V	s/ s H!  o™R&                  (       d  M  U	R.                  PM#     n
n	U
(       aF  [1        [2        R4                  " U
5      5      UR.                  R6                  UR8                     l        ggs  sn	f s  sn	f s  sn	f )aÜ  
Post-process the OCR cells and update the page object according to the algorithm:

- If FULL_PAGE: Any existing PDF cells are ignored and only the OCR cells are used.
- If LAYOUT_REGIONS or PDF_AWARE_LAYOUT_REGIONS and the priority parameter is None,
  the priority is auto-selected based on the OcrMode:
      - OCR_FIRST when LAYOUT_REGIONS
      - PDF_FIRST when PDF_AWARE_LAYOUT_REGIONS
  Check the comments on _MergeCellsPriority for the semantic of each priority value
N)Úsegregate_pdf_cellsr   )rQ   ra   rj   r   rp   rn   rE   rO   rN   Ú_merge_ocr_and_pdf_cellsÚ&_PDF_CELLS_POST_PROCESSING_SEGREGATIONr�   ÚindexÚparsed_pagerB   r;   ÚlenÚ	has_linesr:   Úfrom_ocrr9   Ú	has_wordsÚ	has_charsÚ
confidenceÚfloatrµ   ÚmeanÚpagesÚpage_noÚ	ocr_score)rf   rÎ   r   rÏ   rÐ   Úexisting_cellsÚfinal_cellsrŸ   rY   r}   Úocr_confidencess              rA   Úpost_process_cellsÚBaseOcrModel.post_process_cellsP  s  € ð$ Ÿ™ˆð �<‰<×Ñ¤× 1Ñ 1Ó1Ø#‰KàÑð —|‘|×(Ñ(¬G×,BÑ,BÓBô (×1Ò1ä,×6Ñ6ð ð
 ×7Ñ7ØØØÜ$Jð	 8ð ˆKô ! Ö-‰GˆAØŽJñ .ð ×ÑÑ#ô  5°TÓ:ˆDÔð +6×ÑÔ'Ü%(¨Ó%5¸Ñ%9ˆ×ÑÔ"ð �<‰<×Ñ¤× 1Ñ 1Ó1à×+Ñ+×6Ò6ó+Ú6�a¿*½*—Ñ6ñ+ˆD×ÑÔ'ð  ×+Ñ+×6Ò6ó+Ú6�a¿*½*—Ñ6ñ+ˆD×ÑÔ'ô *-¨T×-=Ñ-=×-HÑ-HÓ)IÈAÑ)MˆD×ÑÔ&Ü),¨T×-=Ñ-=×-HÑ-HÓ)IÈAÑ)MˆD×ÑÔ&á1<ÓK²¨AÇ
Å
›<˜1Ÿ<œ<±ˆÐKÞÜ@EÜ—’˜Ó(óAˆH×Ñ×%Ñ% d§l¡lÑ3Õ=ð ùò+ùò+ùò Ls$   Ä=JÅJÆJÆJÈJÈ3JÚ	pdf_cellsrÒ   c                 óÌ   • U(       a  [        U5      u  pVO[        U5      / peU[        R                  :X  a  XQp‡OXp‡U R	                  Xx5      n	U(       a  U R	                  X–5      n	U	$ )a!  
Merge PDF and OCR cells, resolving overlaps according to `priority`.

When `segregate_pdf_cells` is True, the OCR cells are merged only with the visible PDF
cells and the invisible ones are put back afterwards. Otherwise, the OCR cells are merged
with all the PDF cells indiscriminately.
)rZ   r“   rE   rN   Ú_merge_cells_by_priority)
rf   rÎ   rç   rÐ   rÒ   Úvisible_cellsÚinvisible_cellsÚprioritized_cellsÚsecondary_cellsÚmerged_cellss
             rA   rÓ   Ú%BaseOcrModel._merge_ocr_and_pdf_cells“  sh   € ö  Ü-EÀiÓ-PÑ*ˆM˜?ä-1°)«_¸b˜?ð Ô*×4Ñ4Ó4Ø1>™à1:˜à×4Ñ4Ð5FÓXˆö Ø×8Ñ8¸ÓWˆLàÐrC   rì   rí   c                 óð  ^• [        5       n[        U5      n[        U5      [        U5      ::  a›  [        U5       H.  u  pVUR	                  XVR
                  R                  5       5        M0     U HV  n[        S UR                  UR
                  R                  5       5       5       5      nU(       a  ME  UR                  U5        MX     U$ [        U5       H.  u  pVUR	                  XVR
                  R                  5       5        M0     [        5       mU H;  nTR                  UR                  UR
                  R                  5       5      5        M=     UR                  U4S j[        U5       5       5        U$ )zR
Keep every prioritized cell, plus the secondary cells that overlap none of them.
c              3   ó&   #   • U  H  nS v •  M	     g7fr…   rI   r†   s     rA   rˆ   Ú8BaseOcrModel._merge_cells_by_priority.<locals>.<genexpr>Ê  s   é € ð Ú"O˜Q•DÒ"OùrŠ   c              3   ó<   >#   • U  H  u  pUT;  d  M  Uv •  M     g 7frd   rI   )r‡   rŸ   rY   Úoverlapping_idss      €rA   rˆ   rò   ×  s$   øé € ð  â9‘G�AØ˜OÑ+÷ ‘Ú9ùs   ƒ“	)r   r“   r×   r�   r‘   r1   r’   r—   r˜   rV   ÚsetÚupdater–   )	rf   rì   rí   Úidxrî   rŸ   rY   Úoverlapsrô   s	           @rA   ré   Ú%BaseOcrModel._merge_cells_by_priority·  s;  ø€ ô &Ó'ˆô Ð-Ó.ˆäÐ Ó!¤S¨Ó%9Ó9ô %Ð%6Ö7‘�Ø—
‘
˜1Ÿi™i×7Ñ7Ó9Ö:ñ 8ã'�Üñ Ø"%×"2Ñ"2°4·9±9×3LÑ3LÓ3NÔ"Oóó �÷  �xØ ×'Ñ'¨Ö-ñ (ð( Ðô % _Ö5‘�Ø—
‘
˜1Ÿi™i×7Ñ7Ó9Ö:ñ 6ä(+«ˆOÛ)�Ø×&Ñ& s×'7Ñ'7¸¿	¹	×8QÑ8QÓ8SÓ'TÖUñ *à×Ñô  ä(¨Ô9ó ô ð ÐrC   Úshowc                 ó¸  • [         R                  " UR                  5      nUR                  UR                  R                  -  nUR
                  UR                  R
                  -  n[        R                  " US5      nU H=  n	U	R                  5       u  p«pÍX·-  nX×-  nX¦-  n
XÆ-  nSnUR                  X«4XÍ4/USS9  M?     UR                   Hn  nUR                  R                  5       R                  5       u  p«pÍX·-  nX×-  nX¦-  n
XÆ-  nXÛ::  a  X½p½UR                  (       a  SOSnUR                  X«4XÍ4/US9  Mp     U(       a  UR                  5         g[        [         R"                  R$                  5      SUR&                  R(                  R*                   3-  nUR-                  S	S	S
9  USUR.                  S S3-  nUR1                  [3        U5      SS9  g)z]
- OCR input rects: Yellow panes
- OCR detected text: Magenta bboxes
- PDF text: Gray bboxes
ÚRGBA)éÿ   rý   r   é(   N)r¬   ÚoutlineÚmagentaÚgray)rÿ   Údebug_T)ÚparentsÚexist_okÚ	ocr_page_Ú05z.pngÚpng)Úformat)ÚcopyÚdeepcopyrÀ   r=   r<   r>   r   r²   r³   r´   rQ   r1   r’   rÙ   rú   r   r   ÚdebugÚdebug_output_pathÚinputÚfileÚstemÚmkdirrà   ÚsaveÚstr)rf   rÏ   r   rr   rú   rÀ   Úscale_xÚscale_yrÁ   r1   rÂ   rÃ   rÄ   rÅ   Úshade_colorÚtcÚcolorÚout_pathÚout_files                      rA   Údraw_ocr_rects_and_cellsÚ%BaseOcrModel.draw_ocr_rects_and_cellsß  s­  € ô —’˜dŸj™jÓ)ˆØ—+‘+ §	¡	§¡Ñ/ˆØ—,‘, §¡×!1Ñ!1Ñ1ˆä�~Š~˜e VÓ,ˆó ˆDØ!Ÿ]™]›_‰NˆB�BØ‰MˆBØ‰MˆBØ‰MˆBØ‰MˆBà+ˆKØ�N‰N˜R˜H r hÐ/°kÈ4ˆNÓPñ ð —*”*ˆBØŸW™W×4Ñ4Ó6×?Ñ?ÓA‰NˆB�BØ‰MˆBØ‰MˆBØ‰MˆBØ‰MˆBà‹xØ�Bà!#§§‘I°&ˆEà�N‰N˜R˜H r hÐ/¸ˆNÓ?ñ ö Ø�J‰J�Lô ”X—^‘^×5Ñ5Ó6Ø˜8Ÿ>™>×.Ñ.×3Ñ3Ð4Ð5ñ6ð ð �N‰N 4°$ˆNÑ7à I¨d¯l©l¸2Ð->¸dÐ"CÑCˆHØ�J‰J”s˜8“}¨UˆJÒ3rC   Ú
page_batchc                 ó   • g rd   rI   )rf   rÏ   r  s      rA   Ú__call__ÚBaseOcrModel.__call__  s   € ð 	rC   c                 ó   • g rd   rI   )Úclss    rA   Úget_options_typeÚBaseOcrModel.get_options_type  s   € ð 	rC   re   )r   rd   )T)F)#rJ   rK   rL   rM   Ú__doc__r|   Úboolr   r   r   rg   r   r“   r   rs   ro   rm   r	   r   ÚtuplerÝ   r{   r   r   rE   rå   rÓ   ré   r  r   r  ÚclassmethodÚtyper"  rP   rI   rC   rA   r\   r\   }   sí  † ñð
 Ðð	ð ð	ð ˜t™ð		ð
 ð	ð 0ô	ð $ð ¨4°Ñ+<ô ð<¨4ð °D¸Ñ4Eô ð"W°Tð W¸dÀ;Ñ>Oô Wðt GHñ6+Øð6+Ø!)¨+Ñ!6ð6+à	ˆu�d˜;Ñ'Ð'Ñ	(õ6+ðz 04ñAà˜‘>ðAð ðAð #ð	Að
 &¨Ñ,ðAð 
õAðP %)ñ"à˜‘>ð"ð ˜‘>ð"ð &ð	"ð
 "ð"ð 
ˆh‰õ"ðH&à ™>ð&ð ˜h™ð&ð 
ˆh‰ô	&ñP04Èõ 04ðd ðØ(ðØ6>¸t±nðà	�$‰óó ðð
 Øð  jÑ!1ó ó ó órC   r\   )@r	  ÚloggingÚabcr   Úcollections.abcr   Úenumr   Úpathlibr   Únumpyrµ   Údocling_core.types.docr   r   r	   Údocling_core.types.doc.pager
   r   r   r   r   r   ÚPILr   r   Úscipy.ndimager   r   r   Ú%docling.datamodel.accelerator_optionsr   Údocling.datamodel.base_modelsr   Údocling.datamodel.documentr   Ú"docling.datamodel.pipeline_optionsr   r   Údocling.datamodel.settingsr   Údocling.datamodel.spatialr   Údocling.models.base_modelr   r   Ú	getLoggerrJ   Ú_logrB   rº   r¹   ÚImportErrorr  rE   Ú	frozensetÚ	INVISIBLEÚONLY_CLIPPINGrU   rÔ   r&  r“   rZ   r\   rI   rC   rA   Ú<module>r@     s
  ðó Û Ý Ý $Ý Ý ã ß AÑ A÷÷ ÷ !ß >Ñ >å DÝ .Ý 7ß BÝ /Ý =ß Ià×Ò˜Ó"€ð( ð (Ð)9ô (ðVÛà€Mô
"˜#˜tô "ñ 'Ø×#Ñ#Ð%9×%GÑ%GÐHóÐ ð *.Ð &ðØ�HÑðà
ˆ4�‰>˜4 ™>Ð)Ñ*ôô*]�=Ð"6õ ]øðW ó Ø‚Mðús   ÂC1 Ã1C<Ã;C<