ó
    �®žj.  ã                   ó
  • S SK Jr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Jr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  S S
KJr  S SKJr  S SKJr  S SKJ r    " S S\5      r! " S S\5      r"S\"S\\#   S\\!   4S jr$g)é    )ÚABCÚabstractmethod)ÚIterableÚIterator)ÚBytesIO)ÚPath)ÚClassVarÚOptionalÚSetÚUnion)ÚBoundingBoxÚSize)ÚSegmentedPdfPageÚTextCell)ÚImage)ÚPaginatedDocumentBackend)ÚPdfBackendOptions)ÚInputFormat)ÚInputDocument)Ú_PdfOutlineItemc                   óä  • \ rS rSr\\S\4S j5       5       r\S\S\	4S j5       r
\S\\   4S j5       r\S\\   4S j5       rS\\\      4S jr\S#S	\S\\   4S
 jj5       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\R2                  4S jj5       r\S\4S j5       r\S\4S j5       rS\	4S  jr\S! 5       rS"r g)%ÚPdfPageBackendé   Úreturnc                 ó   • g ©N© ©Úselfs    ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/pdf_backend.pyÚpage_noÚPdfPageBackend.page_no   s   € ð 	ó    Úbboxc                 ó   • g r   r   )r   r$   s     r    Úget_text_in_rectÚPdfPageBackend.get_text_in_rect   ó   € àr#   c                 ó   • g r   r   r   s    r    Úget_segmented_pageÚ!PdfPageBackend.get_segmented_page   r(   r#   c                 ó   • g r   r   r   s    r    Úget_text_cellsÚPdfPageBackend.get_text_cells#   r(   r#   c                 ó   • g)zñReturn the subset of `get_text_cells()` that actually paints ink on the page.

Text drawn in a rendering mode that paints nothing (PDF 32000 modes 3 and 7) is left out
`None` means this backend cannot tell visible from invisible text at all
Nr   r   s    r    Úget_visible_text_cellsÚ%PdfPageBackend.get_visible_text_cells'   s   € ð r#   Úscalec                 ó   • g)zIReturn bitmap bounds in 72-DPI document coordinates, scaled by ``scale``.Nr   )r   r2   s     r    Úget_bitmap_rectsÚPdfPageBackend.get_bitmap_rects/   ó   � r#   FT)ÚcharsÚshapesÚbitmapsr7   r8   r9   c                ó   • g)zß`True` if any visible element of an enabled category overlaps bbox, else `False`

`None` means this backend cannot answer the query at all, as distinct from `False`, which
means it looked and found no intersecting content.
Nr   )r   r$   r7   r8   r9   s        r    Úhas_content_inÚPdfPageBackend.has_content_in3   ó   € ð r#   gü©ñÒMbP?)Ú
horizontalÚverticalÚ	tolerancer>   r?   r@   c                ó   • g)z÷Return the visible horizontal and/or vertical stroked shape segments.

Boxes use top-left origin.
Segments are returned as degenerate (zero-height or zero-width) boxes with top-left
origin. `None` means this backend cannot answer the query at all
Nr   )r   r>   r?   r@   s       r    Úget_shape_linesÚPdfPageBackend.get_shape_linesB   r=   r#   g        )r@   c                ó   • g)zãReturn the bboxes of visible shapes merged by overlapping bboxes.

Boxes use top-left origin. `None` means this backend cannot answer the query at
all, as distinct from an empty list, which means it looked and found no shapes.
Nr   )r   r@   s     r    Ú"get_connected_shape_bounding_boxesÚ1PdfPageBackend.get_connected_shape_bounding_boxesQ   s   € ð r#   NÚcropboxc                 ó   • g)zDRender a logical page region at ``scale`` pixels per document point.Nr   )r   r2   rG   s      r    Úget_page_imageÚPdfPageBackend.get_page_image[   r6   r#   c                 ó   • g)z/Return the page size in 72-DPI document points.Nr   r   s    r    Úget_sizeÚPdfPageBackend.get_sizea   r6   r#   c                 ó   • g r   r   r   s    r    Úis_validÚPdfPageBackend.is_valide   r(   r#   c                 ó   • g)zzWhy this page is not valid, when the backend knows.

Returns an empty string by default, and for a page that parsed fine.
Ú r   r   s    r    Úget_error_messageÚ PdfPageBackend.get_error_messagei   s   € ð
 r#   c                 ó   • g r   r   r   s    r    ÚunloadÚPdfPageBackend.unloadp   r(   r#   r   )é   )rX   N)!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úpropertyr   Úintr!   r   Ústrr&   r
   r   r*   r   r   r-   Úlistr0   Úfloatr4   Úboolr;   rB   rE   r   rI   r   rL   rO   rS   rV   Ú__static_attributes__r   r#   r    r   r      s  † ØØð˜ó ó ó ðð ð [ð °Só ó ðð ð HÐ-=Ñ$>ó ó ðð ð ¨Ñ 2ó ó ðð¨°°h±Ñ(@ô ð ñX eð X°H¸[Ñ4Iô Xó ðXð ØØòð ðð ð	ð
 ðð ðð 
�$‰õð$  ØØòð ðð ð	ð
 ðð 
�$�{Ñ#Ñ	$õð  %(òØ!ðà	�$�{Ñ#Ñ	$õð àAEñSØðSØ)1°+Ñ)>ðSà	�‰ôSó ðSð
 ð>˜$ó >ó ð>ð ð˜$ó ó ðð 3ô ð ñó ór#   r   c                   óö   ^ • \ rS rSr% Sr\\   \S'    SS\S\	\
\4   S\\   4U 4S jjjr\S\S	\4S
 j5       r\S	\4S j5       rS	\\   4S jrS	\\   4S jr\S	\\   4S j5       r\S	\4S j5       rSrU =r$ )ÚPdfDocumentBackendéu   TÚsupports_random_page_accessÚin_docÚpath_or_streamÚoptionsc           	      óò   >• Uc
  [        5       n[        TU ]	  XU5        U   U R                  U R	                  5       ;  a9  [        SU R                   SSR                  U R	                  5       5       S35      eg )NzIncompatible file format z6 was passed to a PdfDocumentBackend. Valid format are Ú,Ú.)r   ÚsuperÚ__init__Úinput_formatÚsupported_formatsÚRuntimeErrorÚjoin)r   rh   ri   rj   Ú	__class__s       €r    ro   ÚPdfDocumentBackend.__init__x   sž   ø€ ð ‰?Ü'Ó)ˆGÜ‰Ñ˜°Ô9Ùà×Ñ D×$:Ñ$:Ó$<Ó<ÜØ+¨D×,=Ñ,=Ð+>Ð>tÐux×u}Ñu}ð  C÷  Uñ  Uó  Wó  vXð  uYð  YZð  [óð ð =r#   r!   r   c                 ó   • g r   r   )r   r!   s     r    Ú	load_pageÚPdfDocumentBackend.load_pageˆ   r(   r#   c                 ó   • g r   r   r   s    r    Ú
page_countÚPdfDocumentBackend.page_countŒ   r(   r#   c              #   ór   #   • [        U R                  5       5       H  nU R                  U5      v •  M     g 7fr   )Úrangerz   rw   )r   Ú
page_indexs     r    Ú
iter_pagesÚPdfDocumentBackend.iter_pages�   s*   é € Ü §¡Ó 1Ö2ˆJØ—.‘. Ó,Ô,ò 3ùs   ‚57c                 ó   • / $ )a/  Return the PDF bookmark / table-of-contents outline.

A flat, document-ordered list where each entry carries its own depth (``level``). The
default returns an empty list; PDFium-backed backends override this with the real
outline. Backends without an embedded outline (e.g. OCR/image) keep the default.
r   r   s    r    Úget_document_outlineÚ'PdfDocumentBackend.get_document_outline”   s	   € ð ˆ	r#   c                 ó$   • [         R                  1$ r   )r   ÚPDF©Úclss    r    rq   Ú$PdfDocumentBackend.supported_formats�   s   € ä—‘Ð Ð r#   c                 ó   • g)NTr   r†   s    r    Úsupports_paginationÚ&PdfDocumentBackend.supports_pagination¡   s   € àr#   r   r   ) rY   rZ   r[   r\   rg   r	   rb   Ú__annotations__r   r   r   r   r
   r   ro   r   r^   r   rw   rz   r   r   r`   r   r‚   Úclassmethodr   r   rq   rŠ   rc   Ú__classcell__)rt   s   @r    re   re   u   sæ   ø‡ Ø26Ð ¨$¡Ó6ð 04ñ	àðð ˜g t˜mÑ,ðð Ð+Ñ,÷	ð ð  ð ð ¨ó ó ðð ð˜Có ó ðð-˜H ^Ñ4ô -ð d¨?Ñ&;ô ð ð! # kÑ"2ó !ó ð!ð ð Dó ó ör#   re   ÚbackendÚpage_nosr   c              #   óÚ  #   • U R                   (       a#  U H  nU R                  US-
  5      n Uv •  M     g[	        U5      nU(       d  gU R                  5        HN  nUR                  U;  a  UR                  5         M%  UR                  UR                  5         Uv •  U(       a  MN    g   g! [         a    UR                  5         e f = f! [         a    UR                  5         e f = f7f)zÎYield requested page backends, identified by absolute one-based page number.

The caller owns each yielded backend. Unrequested pages and a yielded page
abandoned by closing the iterator are unloaded here.
rX   N)rg   rw   ÚGeneratorExitrV   Úsetr   r!   Úremove)r�   r�   r!   Úpage_backendÚremaining_page_noss        r    Úiter_pdf_page_backendsr—   ¦   sç   é € ð ×*×*ÛˆGØ"×,Ñ,¨W°q©[Ó9ˆLðØ"Ô"ñ  ð 	ä˜X›ÐÞØØ×*Ñ*Ö,ˆØ×ÑÐ'9Ó9Ø×ÑÔ!Ùà×!Ñ! ,×"6Ñ"6Ô7ð	ØÒ÷ "Ð!Ùò -øô !ó Ø×#Ñ#Ô%Øðûô  ó 	Ø×ÑÔ!Øð	üs:   ‚+C+®B-²A(C+ÂCÂC+Â(C+Â-C	Ã	C+ÃC(Ã(C+N)%Úabcr   r   Úcollections.abcr   r   Úior   Úpathlibr   Útypingr	   r
   r   r   Údocling_core.types.docr   r   Údocling_core.types.doc.pager   r   ÚPILr   Ú docling.backend.abstract_backendr   Ú!docling.datamodel.backend_optionsr   Údocling.datamodel.base_modelsr   Údocling.datamodel.documentr   Údocling.utils.pdf_outliner   r   re   r^   r—   r   r#   r    Ú<module>r¥      st   ð÷ $ß .Ý Ý ß 1Ó 1ç 4ß BÝ å EÝ ?Ý 5Ý 4Ý 5ô]�Sô ]ô@.Ð1ô .ðb!Øð!Ø+3°C©=ð!àˆnÑõ!r#   