ó
    �®žj´  ã                   ó>  • % S SK r S SKrS SKrS SKJr  S SKJrJr  S SKJ	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  S SKJr  S S	KJr  S S
KJr  \R6                  " \5      rSr\\   \ S'   Sr!\\"   \ S'   S\"S\/ \"4   S\#\ RH                     4S jr% " S S\5      r&g)é    N)ÚCallable)ÚBytesIOÚStringIO)ÚPath)ÚFinalÚSetÚUnion)ÚDoclingDocumentÚDocumentOriginÚ	TableCellÚ	TableData)ÚDeclarativeDocumentBackend)ÚInputFormat)ÚInputDocument)ÚDocumentLoadErrori   Ú_SNIFF_SAMPLE_SIZEz,;	|:Ú_DELIMITERSÚheadÚread_sampleÚreturnc                 óæ   •  [         R                  " 5       R                  U [        5      $ ! [         R                   a1    [         R                  " 5       R                  U" 5       [        5      s $ f = f)aÖ  Detect the dialect from the first line, falling back to a larger sample.

The first line is enough for most files and is what the sniffer reads best:
it rejects samples whose rows hold different numbers of delimiters. It is
not enough when a quoted field spans several lines, because the line is cut
mid-quote; retrying with a sample that closes the quote recovers those.
`read_sample` is only called on that fallback path.

Raises csv.Error if neither can be detected.
)ÚcsvÚSnifferÚsniffr   ÚError)r   r   s     ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/csv_backend.pyÚ_sniff_dialectr      sN   € ð?Ü�{Š{‹}×"Ñ" 4¬Ó5Ð5øÜ�9‰9ó ?Ü�{Š{‹}×"Ñ"¡;£=´+Ó>Ò>ð?ús   ‚(+ «AA0Á/A0c                   ó¢   ^ • \ rS rSr% \\S'   SSS\\\4   4U 4S jjr	S\
4S jr\S\
4S	 j5       rS
 r\S\\   4S j5       rS\4S jrSrU =r$ )ÚCsvDocumentBackendé,   ÚcontentÚin_docr   Úpath_or_streamc                 óÈ  >• [         TU ]  X5         [        U R                  [        5      (       a8  [        U R                  R                  5       R                  S5      5      U l        OH[        U R                  [        5      (       a)  [        U R                  R                  S5      5      U l        SU l        g ! [         a  n[        SU R                   35      UeS nAff = f)Nz	utf-8-sigTz5CsvDocumentBackend could not load document with hash )ÚsuperÚ__init__Ú
isinstancer#   r   r   ÚgetvalueÚdecoder!   r   Ú	read_textÚvalidÚ	Exceptionr   Údocument_hash)Úselfr"   r#   ÚeÚ	__class__s       €r   r&   ÚCsvDocumentBackend.__init__/   sÂ   ø€ Ü‰Ñ˜Ô0ð	Ü˜$×-Ñ-¬w×7Ñ7Ü'Ø×'Ñ'×0Ñ0Ó2×9Ñ9¸+ÓFó �•ô ˜D×/Ñ/´×6Ñ6Ü'¨×(;Ñ(;×(EÑ(EÀkÓ(RÓS�”ØˆDŒJð
 	øô	 ó 	Ü#ØGÈ×HZÑHZÐG[Ð\óàðûð	ús   ’B&B9 Â9
C!ÃCÃC!r   c                 ó   • U R                   $ ©N)r+   ©r.   s    r   Úis_validÚCsvDocumentBackend.is_validD   s   € Ø�z‰zÐó    c                 ó   • g)NF© ©Úclss    r   Úsupports_paginationÚ&CsvDocumentBackend.supports_paginationG   s   € àr7   c                 ó„   • [        U R                  [        5      (       a  U R                  R                  5         S U l        g r3   )r'   r#   r   Úcloser4   s    r   ÚunloadÚCsvDocumentBackend.unloadK   s/   € Ü�d×)Ñ)¬7×3Ñ3Ø×Ñ×%Ñ%Ô'Ø"ˆÕr7   c                 ó$   • [         R                  1$ r3   )r   ÚCSVr:   s    r   Úsupported_formatsÚ$CsvDocumentBackend.supported_formatsP   s   € ä—‘Ð Ð r7   c                 ó   ^ ^• T R                   R                  5       nS[        4U 4S jjn [        X5      nUR                  [
        ;  a  [        SUR                   S35      e[        R                  SUR                   S35         T R                   R                  S
5        [        R                  " T R                   USS9n[        U5      T l        [        R                  S[!        T R                  5       S35        [#        T R$                  R&                  =(       d    SST R(                  S9n[+        T R$                  R,                  =(       d    SUS9nT R/                  5       (       Ga>  T R                  (       d  [        R1                  S5        U$ [!        T R                  S
   5      m[3        U4S jT R                   5       5      nU(       d  [4        R6                  " ST S35        [!        T R                  5      n	[9        S T R                   5       5      n
[;        U	U
/ S9n[=        T R                  5       HW  u  pÍ[=        U5       HC  u  pï[?        [        U5      SSUUS-   UUS-   US
:H  SS9	nUR@                  RC                  U5        ME     MY     URE                  US9   U$ [        ST R(                   S35      e! [        R                   a4  n[        R                  SU S35        [        R                  n S	nAGN€S	nAff = f)z7
Parses the CSV data into a structured document model.
r   c                  óx   >• T R                   R                  S5        T R                   R                  [        5      $ )Nr   )r!   ÚseekÚreadr   r4   s   €r   r   Ú/CsvDocumentBackend.convert.<locals>.read_sample]   s+   ø€ Ø�L‰L×Ñ˜aÔ Ø—<‘<×$Ñ$Ô%7Ó8Ð8r7   z*Cannot convert csv with unknown delimiter Ú.zParsing CSV with delimiter: "Ú"zCould not detect delimiter (z ), using default comma delimiterNr   T)ÚdialectÚstrictz	Detected z lineszfile.csvztext/csv)ÚfilenameÚmimetypeÚbinary_hash)ÚnameÚoriginz,CSV file is empty, returning empty document.c              3   ó@   >#   • U  H  n[        U5      T:H  v •  M     g 7fr3   ©Úlen)Ú.0ÚrowÚexpected_lengths     €r   Ú	<genexpr>Ú-CsvDocumentBackend.convert.<locals>.<genexpr>…   s   øé € Ð VÊÀ¤ S£¨_Ö!<Êùs   ƒz;Inconsistent column lengths detected in CSV data. Expected z_ columns, but found rows with varying lengths. Ensure all rows have the same number of columns.c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr3   rU   )rW   rX   s     r   rZ   r[   Ž   s   é € ÐA²=¨Cœs 3Ÿx˜x²=ùs   ‚)Únum_rowsÚnum_colsÚtable_cellsé   F)	ÚtextÚrow_spanÚcol_spanÚstart_row_offset_idxÚend_row_offset_idxÚstart_col_offset_idxÚend_col_offset_idxÚcolumn_headerÚ
row_header)ÚdatazCannot convert doc with z$ because the backend failed to init.)#r!   ÚreadlineÚstrr   Ú	delimiterr   ÚRuntimeErrorÚ_logÚinfor   r   ÚexcelrH   ÚreaderÚlistÚcsv_datarV   r   ÚfilerR   r-   r
   Ústemr5   ÚwarningÚallÚwarningsÚwarnÚmaxr   Ú	enumerater   r_   ÚappendÚ	add_table)r.   r   r   rM   r/   ÚresultrS   ÚdocÚ
is_uniformr]   r^   Ú
table_dataÚrow_idxrX   Úcol_idxÚ
cell_valueÚcellrY   s   `                @r   ÚconvertÚCsvDocumentBackend.convertT   s­  ù€ ð �|‰|×$Ñ$Ó&ˆð	9œS÷ 	9ð	 Ü)7¸Ó)JˆGØ× Ñ ¬Ó3Ü"Ø@À×ARÑARÐ@SÐSTÐUóð ô —	‘	Ð9¸'×:KÑ:KÐ9LÈAÐNÕOð 	�‰×Ñ˜!ÔÜ—’˜DŸL™L°'À$ÑGˆÜ˜V›ˆŒÜ�	‰	�Iœc $§-¡-Ó0Ð1°Ð8Ô9ô  Ø—Y‘Y—^‘^×1 zØØ×*Ñ*ñ
ˆô  4§9¡9§>¡>×#?°ZÈÑOˆà�=‰=�?Š?à—=—=Ü—‘ÐKÔLðT ˆ
ôQ #& d§m¡m°AÑ&6Ó"7�Ü Ô VÈÏÊÓ VÓV�
Þ!Ü—M’Mð$Ø$3Ð#4ð 5KðLôô ˜tŸ}™}Ó-�ÜÑA°4·=²=ÓAÓA�ä&Ø%Ø%Ø "ñ�
ô %.¨d¯m©mÖ$<‘L�GÜ/8¸®~Ñ+˜Ü(Ü!$ Z£Ø%&Ø%&Ø18Ø/6¸©{Ø18Ø/6¸©{Ø*1°Q©,Ø',ñ
 ˜ð #×.Ñ.×5Ñ5°dÖ;ó 0>ñ %=ð —‘ :�Ò.ð ˆ
ô	 Ø*¨4×+=Ñ+=Ð*>Ð>bÐcóð øô �y‰yó 	 ä�I‰IØ.¨q¨cÐ1QÐRôô —i‘iŽGûð	 ús   ¬AK ËLË)LÌL)r!   rt   r#   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotations__r	   r   r   r&   Úboolr5   Úclassmethodr<   r@   r   r   rD   r
   r‡   Ú__static_attributes__Ú__classcell__)r0   s   @r   r   r   ,   s…   ø‡ ØÓð˜ð ÀÀgÈtÀmÑ@T÷ ð*˜$ô ð ð Dó ó ðò#ð
 ð! # kÑ"2ó !ó ð!ðX˜÷ Xò Xr7   r   )'r   Úloggingry   Úcollections.abcr   Úior   r   Úpathlibr   Útypingr   r   r	   Údocling_core.types.docr
   r   r   r   Ú docling.backend.abstract_backendr   Údocling.datamodel.base_modelsr   Údocling.datamodel.documentr   Údocling.exceptionsr   Ú	getLoggerr‰   ro   r   Úintr�   r   rl   ÚtypeÚDialectr   r   r9   r7   r   Ú<module>r       s›   ðô Û Û Ý $ß  Ý ß $Ñ $ç XÓ Xå GÝ 5Ý 4Ý 0à×Ò˜Ó"€ð "&Ð �E˜#‘JÓ %Ø"€ˆU�3‰ZÓ "ð?˜ð ?¨8°B¸°GÑ+<ð ?ÀÀcÇkÁkÑARô ?ô"@Ð3õ @r7   