
    A>i.                        S SK Jr  S SKJr  S SKrS SKJr  S SK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  S SKJr  \(       a  S SKrS SKJr  S SKJr   " S S\5      rg)    )annotations)TYPE_CHECKINGN)lib)import_optional_dependency)Pandas4WarningParserErrorParserWarning)find_stack_level)pandas_dtype)
is_integer)arrow_table_to_pandas)
ParserBase)
ReadBuffer)	DataFramec                     ^  \ rS rSrSrSU 4S jjrSS jrSS jrS rSS jr	SS jr
SS	 jr      SS
 jrSS jrSS jrSrU =r$ )ArrowParserWrapper!   z/
Wrapper for the pyarrow engine for read_csv()
c                \   > [         TU ]  U5        X l        Xl        U R	                  5         g N)super__init__kwdssrc_parse_kwds)selfr   r   	__class__s      e/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pandas/io/parsers/arrow_parser_wrapper.pyr   ArrowParserWrapper.__init__&   s&    	    c                    U R                   R                  S5      nUc  SOUU l        U R                   S   n[        U[        5      (       a  [        S5      e[        U R                   S   5      U l        g)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   ArrowParserWrapper._parse_kwds-   sf      $yy}}Z8#+#3IIk*	i&&Q  dii45r   c                   SSSSSSS.nUR                  5        H\  u  p#X R                  ;   d  M  U R                  R                  U5      c  M4  U R                  R                  U5      U R                  U'   M^     U R                  n[        U[        5      (       a  U/nOSnX@R                  S	'   U R                  R                  5        VVs0 s H  u  pVUc  M
  US
;   d  M  XV_M     snnU l        U R                  R                  S5      nUb  [        U5      (       a  XpR                  S'   OU[        R                  R                  :X  a  SU R                  S'   O`U[        R                  R                  :X  a  SS jnXR                  S'   O.U[        R                  R                  :X  a  S U R                  S'   U R                  R                  5        VVs0 s H  u  pVUc  M
  US;   d  M  XV_M     snnU l        SU R                  S   ;   U R                  S'   U R                  c@  SU R                  ;   a0  U R                  S    V	s/ s H  n	SU	 3PM
     sn	U R                  S'   U R                  SL U R                  b  U R                  OU R                  S   U R                   S.U l        gs  snnf s  snnf s  sn	f )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                    [         R                  " SU R                   SU R                   SU R                   3[
        [        5       S9  g)Nz	Expected z columns, but found z: )
stacklevelskip)warningswarnexpected_columnsactual_columnstextr	   r
   )invalid_rows    r   handle_warning?ArrowParserWrapper._get_pyarrow_options.<locals>.handle_warningl   sL    MM#K$@$@#AAU&556b9I9I8JL%#3#5	 "r   c                    g)Nr;    )_s    r   <lambda>9ArrowParserWrapper._get_pyarrow_options.<locals>.<lambda>w   s    fr   )r*   r+   true_valuesfalse_valuesr.   r5    strings_can_be_nullfskiprows)autogenerate_column_names	skip_rowsr!   )returnstr)itemsr   r#   popdate_formatr$   rR   parse_optionscallabler   BadLineHandleMethodERRORWARNSKIPconvert_optionsheaderr!   read_options)
r   mappingpandas_namepyarrow_namerU   option_nameoption_valuer7   rB   ns
             r   _get_pyarrow_options'ArrowParserWrapper._get_pyarrow_options;   s   
 )&' 4&%
 *1%Kii'DIIMM+,F,R*.))--*D		,' *9 &&k3''&-K K)4		%& .2YY__->
->) & OP &K%->
 yy}}^4#%%<H""#89!?!?!E!EE ""#89 !?!?!D!DD" =K""#89!?!?!D!DD<L""#89 .2YY__-> 
->) &  &K%-> 
 79DIIm<T6T23;;#48L8L#L!%!5!56G!H7!HA!A3!H7D  !23
 *.)<{{& :&
i
> 
"7s*   	J0J0!J0	J6%J6-J6	J<c                   [        S5      n UR                  " S0 U R                  D6nU$ ! [         a  nU R                  R	                  SS 5      nUb  U R                  U5        U R                  R	                  S[        5       5      n[        R                  " U5      (       a  [        S U 5       5      (       d  [        S5      Uee S nAff = f)Npyarrow.csvr*   r+   c              3  B   #    U  H  n[        U[        5      v   M     g 7fr   r$   rR   .0xs     r   	<genexpr>:ArrowParserWrapper._get_convert_options.<locals>.<genexpr>   s      6,1q
1c""E   z9The 'pyarrow' engine requires all na_values to be stringsrE   )
r   ConvertOptionsr\   	TypeErrorr#   _validate_usecolssetr   is_list_likeall)r   pyarrow_csvr\   errincludenullss         r   _get_convert_options'ArrowParserWrapper._get_convert_options   s    0?	)88P4;O;OPO    	**../@$GG"&&w/((,,]CEBE##E**# 6,16 3 3  O 	s   + 
CBCCc                b   [        UR                  5      nSnU R                  c  U R                  c  [	        U5      U l        [        U R                  5      U:w  aO  [	        U[        U R                  5      -
  5       Vs/ s H  n[        U5      PM     nnXPR                  -   U l        SnU$ s  snf )NTF)lencolumnsr]   namesrangerR   )r   tablenum_colsmulti_index_namedrm   columns_prefixs         r   _adjust_column_names'ArrowParserWrapper._adjust_column_names   s    u}}% ;;zz!"8_
4::(*
 383tzz?8R2S!T2SQ#a&2S!T+jj8
$)!   "Us   >B,c                   U R                   Gbv  U R                   R                  5       n[        U R                   5       H  u  pE[        U5      (       a  UR                  U   X4'   OXQR                  ;  a  [        SU S35      eU R                  c  MT  U R                  R                  U5      b  XPR                  R                  U5      4O6UR                  U   U R                  R                  UR                  U   5      4u  pgUc  M  X   R                  U5      X'   U R                  U	 M     UR                  USSS9  U R                  c9  U(       d2  S /[        UR                  R                  5      -  UR                  l        U$ )NzIndex z invalidT)dropinplace)	index_colcopy	enumerater   r   r&   dtyper#   astype	set_indexr]   r~   indexr   )r   framer   index_to_setiitemkey	new_dtypes           r   _finalize_index"ArrowParserWrapper._finalize_index   s@   >>%>>..0L$T^^4d##&+mmD&9LO.$vdV8%<== ::)  ::>>$/; zz~~d34#mmD14::>>%--PTBU3VW #C
 !,%*Z%6%6y%A
 JJsO! 5$ OOLtTOB{{"+<%)FS1B1B-C$C!r   c                   U R                   b  [        U R                   [        5      (       aP  U R                   R                  5        VVs0 s H"  u  p#X!R                  ;   d  M  U[        U5      _M$     snnU l         O[        U R                   5      U l          UR                  U R                   5      nU$ U$ s  snnf ! [         a  n[        [        U5      5      UeS nAff = fr   )
r   r$   r%   rS   r   r   r   rr   r&   rR   )r   r   kvrx   s        r   _finalize_dtype"ArrowParserWrapper._finalize_dtype   s    ::! $**d++ !%

 0 0 2 2MM) 'A|A& 2
 *$**5
4TZZ0 u  4 S*34s$   
B7#B7B= =
C!CC!c                    U R                  UR                  U5      nU R                  X5      nU R                  U5      nU$ )z
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_conversionsr   r   r   )r   r   r   s      r   _finalize_pandas_output*ArrowParserWrapper._finalize_pandas_output   s?    " ))%--?$$U>$$U+r   c                    [         R                  " U5      (       a"  [        S U 5       5      (       d  [        S5      e[	        U5      (       a  [        S5      eg )Nc              3  B   #    U  H  n[        U[        5      v   M     g 7fr   rj   rk   s     r   rn   7ArrowParserWrapper._validate_usecols.<locals>.<genexpr>  s     0UWAs1C1CWrp   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   ru   rv   r&   rW   )r   r0   s     r   rs   $ArrowParserWrapper._validate_usecols  sX    G$$S0UW0U-U-UP  gO  r   c           	     D   [        S5      n[        S5      nU R                  5         U R                  5       n UR                  U R                  UR
                  " S
0 U R                  D6UR                  " S
0 U R                  D6US9nU R                  S   nU[        R                  L a  UR                  nUR                  " 5       n[!        UR                  R"                  5       HV  u  pUR"                  R%                  U
5      (       d  M'  UR'                  XR)                  U	5      R+                  U5      5      nMX     UR-                  U5      nU R/                  U5      n[0        R2                  " 5          [0        R4                  " SS[6        5        [9        UUSU R:                  U R<                  S	9nSSS5        U R>                  c  U R<                  Wl         U RC                  WU5      $ ! UR                   a  n[        U5      UeSnAff = f! , (       d  f       Nb= f)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.
pyarrowrh   )r^   rV   r\   Ndtype_backendignorezmake_block is deprecatedT)r   null_to_int64r   r   rE   )"r   re   r{   read_csvr   ReadOptionsr^   ParseOptionsrV   ArrowInvalidr   r   r   
no_defaultschemafloat64r   typesis_nullrt   field	with_typecastr   r<   catch_warningsfilterwarningsr   r   r   r   r]   r   r   )r   parw   r\   r   er   
new_schemanew_typer   
arrow_typer   r   s                r   readArrowParserWrapper.read  s    (	20?!!#335	((((44It7H7HI)66L9K9KL /	 ) E 		/2 CNN*Jzz|H!*5<<+=+=!>88##J//!+++A.88B"J "? JJz*E 55e<$$&##*
 *+"jjjjE ' ;; JJEM++E3DEEK  	(a.a'	(( '&s$   AG- 7>H-H=H		H
H)	r\   r   r!   r   r"   r   rV   r^   r   )r   zReadBuffer[bytes]rQ   None)rQ   r   )r   zpa.TablerQ   bool)r   r   r   r   rQ   r   )r   r   rQ   r   )rQ   r   )__name__
__module____qualname____firstlineno____doc__r   r   re   r{   r   r   r   r   rs   r   __static_attributes____classcell__)r   s   @r   r   r   !   s[    6Y
v,! 8&37	,	<F <Fr   r   )
__future__r   typingr   r<   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   rE   r   r   <module>r      sO    "     > 
 4 1 4) gF gFr   