Ë
    ž…j°.  ã                  óÆ   — d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ erd dlZd dlmZ d dlmZ  G d„ de«      Zy)é    )Úannotations)ÚTYPE_CHECKINGN)Úlib)Úimport_optional_dependency)ÚPandas4WarningÚParserErrorÚParserWarning)Úfind_stack_level)Úpandas_dtype)Ú
is_integer)Úarrow_table_to_pandas)Ú
ParserBase)Ú
ReadBuffer)Ú	DataFramec                  óv   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zd„ Zdd„Zdd„Z	dd„Z
	 	 	 	 	 	 dd	„Zdd
„Zdd„Zˆ xZS )ÚArrowParserWrapperz7
    Wrapper for the pyarrow engine for read_csv()
    c                ó`   •— t         ‰| �  |«       || _        || _        | j	                  «        y ©N)ÚsuperÚ__init__ÚkwdsÚsrcÚ_parse_kwds)Úselfr   r   Ú	__class__s      €úg/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/pandas/io/parsers/arrow_parser_wrapper.pyr   zArrowParserWrapper.__init__&   s*   ø€ Ü‰Ñ˜ÔØˆŒ	ØˆŒà×ÑÕó    c                óÞ   — | j                   j                  d«      }|€dn|| _        | j                   d   }t        |t        «      rt        d«      ‚t        | j                   d   «      | _        y)z?
        Validates keywords before passing to pyarrow.
        ÚencodingNzutf-8Ú	na_valuesz?The pyarrow engine doesn't support passing a dict for na_values)r   Úgetr   Ú
isinstanceÚdictÚ
ValueErrorÚlistr    )r   r   r    s      r   r   zArrowParserWrapper._parse_kwds-   sc   € ð  $Ÿy™yŸ}™}¨ZÓ8ˆØ#+Ð#3™¸ˆŒà—I‘I˜kÑ*ˆ	Ü�i¤Ô&ÜØQóð ô ˜dŸi™i¨Ñ4Ó5ˆ�r   c                ó0  — dddddddœ}|j                  «       D ]X  \  }}|| j                  v sŒ| j                  j                  |«      €Œ1| j                  j                  |«      | j                  |<   ŒZ | j                  }t        |t        «      r|g}nd}|| j                  d	<   | j                  j                  «       D ��ci c]  \  }}|�|d
v r||“Œ c}}| _        | j                  j                  d«      }|�¦t        |«      r|| j                  d<   n‹|t        j                  j                  k(  rd| j                  d<   n^|t        j                  j                  k(  rdd„}|| j                  d<   n-|t        j                  j                  k(  rd„ | j                  d<   | j                  j                  «       D ��ci c]  \  }}|�|dv r||“Œ c}}| _        d| j                  d   v | j                  d<   | j                  €;d| j                  v r-| j                  d   D �	cg c]  }	d|	› �‘Œ	 c}	| j                  d<   | j                  du | j                  �| j                  n| j                  d   | j                   dœ| _        yc c}}w c c}}w c c}	w )z:
        Rename some arguments to pass to pyarrow
        Úinclude_columnsÚnull_valuesÚescape_charÚignore_empty_linesÚdecimal_pointÚ
quote_char)Úusecolsr    Ú
escapecharÚskip_blank_linesÚdecimalÚ	quotecharNÚtimestamp_parsers)Ú	delimiterr,   r)   r*   Úon_bad_linesÚinvalid_row_handlerc                óš   — t        j                  d| j                  › d| j                  › d| j                  › �t
        t        «       ¬«       y)Nz	Expected z columns, but found z: )Ú
stacklevelÚskip)ÚwarningsÚwarnÚexpected_columnsÚactual_columnsÚtextr	   r
   )Úinvalid_rows    r   Úhandle_warningz?ArrowParserWrapper._get_pyarrow_options.<locals>.handle_warningl   sL   € Ü—M‘MØ# K×$@Ñ$@Ð#AÐAUØ&×5Ñ5Ð6°b¸×9IÑ9IÐ8JðLä%Ü#3Ó#5õ	ð "r   c                 ó   — y)Nr8   © )Ú_s    r   ú<lambda>z9ArrowParserWrapper._get_pyarrow_options.<locals>.<lambda>w   s   � r   )r'   r(   Útrue_valuesÚfalse_valuesr+   r2   Ú Ústrings_can_be_nullÚfÚskiprows)Úautogenerate_column_namesÚ	skip_rowsr   )ÚreturnÚstr)Úitemsr   r!   ÚpopÚdate_formatr"   rM   Úparse_optionsÚcallabler   ÚBadLineHandleMethodÚERRORÚWARNÚSKIPÚconvert_optionsÚheaderr   Úread_options)
r   ÚmappingÚpandas_nameÚpyarrow_namerP   Úoption_nameÚoption_valuer4   r?   Úns
             r   Ú_get_pyarrow_optionsz'ArrowParserWrapper._get_pyarrow_options;   s˜  € ð
 )Ø&Ø'Ø 4Ø&Ø%ñ
ˆð *1¯©«ò 	EÑ%ˆK˜Ø˜dŸi™iÒ'¨D¯I©I¯M©M¸+Ó,FÑ,RØ*.¯)©)¯-©-¸Ó*D�—	‘	˜,Ò'ð	Eð ×&Ñ&ˆÜ�k¤3Ô'Ø&˜-‰Kð ˆKØ)4ˆ�	‰	Ð%Ñ&ð .2¯Y©Y¯_©_Ó->÷
á)�˜\ØÐ'ØØOñPð ˜Ñ%ó
ˆÔð —y‘y—}‘} ^Ó4ˆØÐ#Ü˜Ô%Ø<H�×"Ñ"Ð#8Ò9Ø¤×!?Ñ!?×!EÑ!EÒEàð ×"Ñ"Ð#8Ò9ð ¤×!?Ñ!?×!DÑ!DÒDó"ð =K�×"Ñ"Ð#8Ò9Ø¤×!?Ñ!?×!DÑ!DÒDÙ<L�×"Ñ"Ð#8Ñ9ð .2¯Y©Y¯_©_Ó->÷ 
á)�˜\ØÐ'Øðñð ˜Ñ%ó 
ˆÔð 79¸D¿I¹IÀmÑ<TÐ6Tˆ×ÑÐ2Ñ3à�;‰;ÐÐ#4¸×8LÑ8LÑ#Là!%×!5Ñ!5Ð6GÑ!Hö7Ø�!�A�3’ò7ˆD× Ñ Ð!2Ñ3ð
 *.¯©¸Ð)<à�{‰{Ð&ð Ÿšà—‘˜:Ñ&ØŸ™ñ
ˆÕùói
ùó> 
ùò"7s   ÃJÆ?JÈ$Jc                ó†  — t        d«      }	  |j                  di | j                  ¤Ž}|S # t        $ rŒ}| j                  j	                  dd «      }|�| j                  |«       | j                  j	                  dt        «       «      }t        j                  |«      rt        d„ |D «       «      st        d«      |‚‚ d }~ww xY w)Núpyarrow.csvr'   r(   c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©r"   rM   ©Ú.0Úxs     r   ú	<genexpr>z:ArrowParserWrapper._get_convert_options.<locals>.<genexpr>¡   s   è ø€ ò 6Ø'(”
˜1œc×"ñ6ùó   ‚z9The 'pyarrow' engine requires all na_values to be stringsrA   )
r   ÚConvertOptionsrW   Ú	TypeErrorr!   Ú_validate_usecolsÚsetr   Úis_list_likeÚall)r   Úpyarrow_csvrW   ÚerrÚincludeÚnullss         r   Ú_get_convert_optionsz'ArrowParserWrapper._get_convert_options–   sÉ   € Ü0°Ó?ˆð	Ø8˜k×8Ñ8ÑP¸4×;OÑ;OÑPˆOð  Ðøô ò 	Ø×*Ñ*×.Ñ.Ð/@À$ÓGˆGØÐ"Ø×&Ñ& wÔ/à×(Ñ(×,Ñ,¨]¼C»EÓBˆEÜ×#Ñ# EÔ*´#ñ 6Ø,1ô6ô 3ô  ØOóàðð ûð	ús   �+ «	C ´BB;Â;C c                óX  — t        |j                  «      }d}| j                  €�| j                  €t	        |«      | _        t        | j                  «      |k7  rMt	        |t        | j                  «      z
  «      D �cg c]  }t        |«      ‘Œ }}|| j                  z   | _        d}|S c c}w )NTF)ÚlenÚcolumnsrX   ÚnamesÚrangerM   )r   ÚtableÚnum_colsÚmulti_index_namedrg   Úcolumns_prefixs         r   Ú_adjust_column_namesz'ArrowParserWrapper._adjust_column_names¬   s’   € Ü�u—}‘}Ó%ˆØ ÐØ�;‰;ÐØ�z‰zÐ!Ü" 8›_�”
Ü�4—:‘:‹ (Ò*ô
 38¸Ä3ÀtÇzÁzÃ?Ñ8RÓ2SÖ!T¨Q¤# a¥&Ð!T�Ð!TØ+¨d¯j©jÑ8�”
Ø$)Ð!Ø Ð ùò "Us   Á;B'c                óø  — | j                   ��l| j                   j                  «       }t        | j                   «      D ]æ  \  }}t        |«      r|j                  |   ||<   n||j                  vrt        d|› d�«      ‚| j                  €ŒN| j                  j                  |«      �|| j                  j                  |«      fn6|j                  |   | j                  j                  |j                  |   «      f\  }}|€ŒÃ||   j                  |«      ||<   | j                  |= Œè |j                  |dd¬«       | j                  €4|s2d gt        |j                  j                  «      z  |j                  _        |S )NzIndex z invalidT)ÚdropÚinplace)Ú	index_colÚcopyÚ	enumerater   rw   r$   Údtyper!   ÚastypeÚ	set_indexrX   rv   Úindexrx   )r   Úframer|   Úindex_to_setÚiÚitemÚkeyÚ	new_dtypes           r   Ú_finalize_indexz"ArrowParserWrapper._finalize_index¼   sP  € Ø�>‰>Ñ%ØŸ>™>×.Ñ.Ó0ˆLÜ$ T§^¡^Ó4ò ,‘��4Ü˜dÔ#Ø&+§m¡m°DÑ&9�L ’Oà §¡Ñ.Ü$ v¨d¨V°8Ð%<Ó=Ð=ð —:‘:Ñ)ð  Ÿ:™:Ÿ>™>¨$Ó/Ð;ð ˜tŸz™zŸ~™~¨dÓ3Ñ4à#Ÿm™m¨DÑ1°4·:±:·>±>À%Ç-Á-ÐPTÑBUÓ3VÐWñ #�C˜ð
 !Ñ,Ø%*¨3¡Z×%6Ñ%6°yÓ%A˜˜c™
Ø ŸJ™J s™Oð!,ð$ �O‰O˜L¨t¸TˆOÔBà�{‰{Ð"Ñ+<Ø%) F¬S°·±×1BÑ1BÓ-CÑ$C�—‘Ô!àˆr   c                ó°  — | j                   ��t        | j                   t        «      rK| j                   j                  «       D ��ci c]  \  }}||j                  v r|t        |«      “Œ! c}}| _         nt        | j                   «      | _         	 |j                  | j                   «      }|S |S c c}}w # t        $ r}t        t        |«      «      |‚d }~ww xY wr   )
r…   r"   r#   rN   rw   r   r†   rk   r$   rM   )r   r‰   ÚkÚvrq   s        r   Ú_finalize_dtypez"ArrowParserWrapper._finalize_dtypeØ   sº   € Ø�:‰:Ð!ô ˜$Ÿ*™*¤dÔ+ð !%§
¡
× 0Ñ 0Ó 2÷á˜˜1Ø˜EŸM™MÑ)ð ”| A“Ñ&ó�•
ô *¨$¯*©*Ó5�”
ð4ØŸ™ T§Z¡ZÓ0�ð ˆˆuˆùóøô ò 4ä ¤ S£Ó*°Ð3ûð4ús   Á$B,ÂB2 Â2	CÂ;CÃCc                ó„   — | j                  |j                  |«      }| j                  ||«      }| j                  |«      }|S )a  
        Processes data read in based on kwargs.

        Parameters
        ----------
        frame : DataFrame
            The DataFrame to process.
        multi_index_named : bool

        Returns
        -------
        DataFrame
            The processed DataFrame.
        )Ú_do_date_conversionsrw   r�   r“   )r   r‰   r|   s      r   Ú_finalize_pandas_outputz*ArrowParserWrapper._finalize_pandas_outputë   sB   € ð" ×)Ñ)¨%¯-©-¸Ó?ˆØ×$Ñ$ UÐ,=Ó>ˆØ×$Ñ$ UÓ+ˆØˆr   c                ó”   — t        j                  |«      rt        d„ |D «       «      st        d«      ‚t	        |«      rt        d«      ‚y )Nc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rd   re   s     r   rh   z7ArrowParserWrapper._validate_usecols.<locals>.<genexpr>  s   è ø€ Ò0UÈ´¸A¼s×1CÑ0Uùri   zwThe pyarrow engine does not allow 'usecols' to be integer column positions. Pass a list of string column names instead.z=The pyarrow engine does not allow 'usecols' to be a callable.)r   rn   ro   r$   rR   )r   r-   s     r   rl   z$ArrowParserWrapper._validate_usecols  sO   € Ü×Ñ˜GÔ$¬SÑ0UÈWÔ0UÔ-UÜðPóð ô �gÔÜØOóð ð r   c           	     ó0  — t        d«      }t        d«      }| j                  «        | j                  «       }	 |j                  | j                   |j
                  d
i | j                  ¤Ž |j                  d
i | j                  ¤Ž|¬«      }| j                  d   }|t        j                  u r¡|j                  } |j                  «       }t!        |j                  j"                  «      D ]Q  \  }	}
|j"                  j%                  |
«      sŒ"|j'                  |	|j)                  |	«      j+                  |«      «      }ŒS |j-                  |«      }| j/                  |«      }t1        j2                  «       5  t1        j4                  ddt6        «       t9        ||d| j:                  | j<                  ¬	«      }ddd«       | j>                  €| j<                  _         | jC                  |«      S # |j                  $ r}t        |«      |‚d}~ww xY w# 1 sw Y   Œ[xY w)zÿ
        Reads the contents of a CSV file into a DataFrame and
        processes it according to the kwargs passed in the
        constructor.

        Returns
        -------
        DataFrame
            The DataFrame created from the CSV file.
        Úpyarrowrb   )rY   rQ   rW   NÚdtype_backendÚignorezmake_block is deprecatedT)r›   Únull_to_int64r…   rx   rA   )"r   r`   rt   Úread_csvr   ÚReadOptionsrY   ÚParseOptionsrQ   ÚArrowInvalidr   r   r   Ú
no_defaultÚschemaÚfloat64r„   ÚtypesÚis_nullrm   ÚfieldÚ	with_typeÚcastr~   r9   Úcatch_warningsÚfilterwarningsr   r   r…   rx   rX   rw   r–   )r   Úparp   rW   rz   Úer›   Ú
new_schemaÚnew_typer‹   Ú
arrow_typer|   r‰   s                r   ÚreadzArrowParserWrapper.read  sã  € ô (¨	Ó2ˆÜ0°Ó?ˆØ×!Ñ!Ô#Ø×3Ñ3Ó5ˆð	(Ø×(Ñ(Ø—‘Ø4˜[×4Ñ4ÑI°t×7HÑ7HÑIØ6˜k×6Ñ6ÑL¸×9KÑ9KÑLØ /ð	 )ó ˆEð Ÿ	™	 /Ñ2ˆð œCŸN™NÑ*ØŸ™ˆJØ!�r—z‘z“|ˆHÜ!*¨5¯<©<×+=Ñ+=Ó!>ò ‘��:Ø—8‘8×#Ñ# JÕ/Ø!+§¡Ø˜:×+Ñ+¨AÓ.×8Ñ8¸ÓBó"‘Jðð —J‘J˜zÓ*ˆEà ×5Ñ5°eÓ<Ðä×$Ñ$Ó&ñ 	Ü×#Ñ#ØØ*Üôô
 *ØØ+Ø"Ø—j‘jØ—j‘jôˆE÷	ð �;‰;ÐØ ŸJ™JˆEŒMà×+Ñ+¨EÐ3DÓEÐEøðK �‰ò 	(Ü˜a“. aÐ'ûð	(ú÷(	ð 	ús%   ¸AG) Å2A HÇ)H	Ç8HÈH	ÈH)r   zReadBuffer[bytes]rL   ÚNone)rL   r²   )rz   zpa.TablerL   Úbool)r‰   r   r|   r³   rL   r   )r‰   r   rL   r   )rL   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r`   rt   r~   r�   r“   r–   rl   r±   Ú__classcell__)r   s   @r   r   r   !   sU   ø„ ñõó6óY
òvó,!ó ó8ð&ØðØ37ðà	óó,	÷<Fr   r   )Ú
__future__r   Útypingr   r9   Úpandas._libsr   Úpandas.compat._optionalr   Úpandas.errorsr   r   r	   Úpandas.util._exceptionsr
   Úpandas.core.dtypes.commonr   Úpandas.core.dtypes.inferencer   Úpandas.io._utilr   Úpandas.io.parsers.base_parserr   rš   r¬   Úpandas._typingr   Úpandasr   r   rA   r   r   ú<module>rÅ      sO   ðÝ "å  Û å Ý >÷ñ õ
õõ 4å 1Ý 4áÛå)å ôgF˜õ gFr   