
    Mh,                        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
  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rS SKJr  S SKJrJr  S SKJr  \(       a  S SKJr   " S S\5      rg)    )annotations)TYPE_CHECKINGN)using_pyarrow_string_dtype)lib)import_optional_dependency)ParserErrorParserWarning)find_stack_level)pandas_dtype)
is_integer)	DataFrame)_arrow_dtype_mappingarrow_string_types_mapper)
ParserBase)
ReadBufferc                  b   ^  \ rS rSrSrS
U 4S j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      X/var/www/html/env/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)	delimiterr0   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_warningk   sL    MM#K$@$@#AAU&556b9I9I8JL%#3#5	 "r    c                    g)Nr<    )_s    r   <lambda>9ArrowParserWrapper._get_pyarrow_options.<locals>.<lambda>v   s    fr    )r+   r,   true_valuesfalse_valuesr/   r6    strings_can_be_nullfskiprows)autogenerate_column_names	skip_rowsr"   )returnstr)itemsr   r$   popdate_formatr%   rS   parse_optionscallabler   BadLineHandleMethodERRORWARNSKIPconvert_optionsheaderr"   read_options)
r   mappingpandas_namepyarrow_namerV   option_nameoption_valuer8   rC   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  "") !?!?!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                d   [        UR                  5      nSnU R                  c  U R                  c  U R                  c  [	        U5      U l        [        U R                  5      U:w  a>  [        [	        U[        U R                  5      -
  5      5      U R                  -   U l        SnU R                  Ul        U R                  UR                  U5      u  pAU R                  Gbv  U R                  R                  5       n[        U R                  5       H  u  pg[        U5      (       a  UR                  U   XV'   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  pU	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 R                  b  [#        U R                  [$        5      (       aP  U R                  R'                  5        V
Vs0 s H"  u  pXR                  ;   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      eSnAff = f)z
Processes data read in based on kwargs.

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

Returns
-------
DataFrame
    The processed DataFrame.
TNFzIndex z invalid)dropinplace)lencolumnsr^   namesranger(   _do_date_conversions	index_colcopy	enumerater   r'   dtyper$   astype	set_indexindexr%   r&   rT   r   	TypeError)r   framenum_colsmulti_index_namedrG   index_to_setiitemkey	new_dtypekves                r   _finalize_pandas_output*ArrowParserWrapper._finalize_pandas_output   s    u}}% ;;zz!;;&!&xDJ4::(*
 "%3tzz?(B"CDtzzQ
$)! JJEM,,U]]EB>>%>>..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!::! $**d++ !%

 0 0 2 2MM) 'A|A& 2
 *$**5
$TZZ0 u  $ m#$s$   "L;L0L 
L/L**L/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   r%   rS   .0xs     r   	<genexpr>7ArrowParserWrapper._validate_usecols.<locals>.<genexpr>   s     0UWAs1C1CW   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   is_list_likeallr'   rX   )r   r1   s     r   _validate_usecols$ArrowParserWrapper._validate_usecols   sX    G$$S0UW0U-U-UP  gO  r    c           	        [        S5      n[        S5      nU R                  5          UR                  " S0 U R                  D6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*                  R0                  5       HV  u  pUR0                  R3                  U5      (       d  M'  U	R                  XR5                  U5      R7                  U
5      5      n	MX     UR9                  U	5      nUS:X  a  UR;                  [<        R>                  S
9nOUS:X  aI  [A        5       n[<        RB                  " 5       XRE                  5       '   UR;                  UR
                  S
9nO7[G        5       (       a  UR;                  [I        5       S
9nOUR;                  5       nU RK                  U5      $ ! [         a    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      ee f = f! UR"                   a  n[%        U5      UeSnAff = 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.
pyarrowzpyarrow.csvr+   Nr,   c              3  B   #    U  H  n[        U[        5      v   M     g 7fr   r   r   s     r   r   *ArrowParserWrapper.read.<locals>.<genexpr>   s      6,1q
1c""Er   z9The 'pyarrow' engine requires all na_values to be strings)r_   rW   r]   dtype_backend)types_mappernumpy_nullablerF   )&r   rf   ConvertOptionsr]   rw   r$   r   setr   r   r   read_csvr   ReadOptionsr_   ParseOptionsrW   ArrowInvalidr   r   
no_defaultschemafloat64rr   typesis_nullfield	with_typecast	to_pandaspd
ArrowDtyper   
Int64Dtypenullr   r   r   )r   papyarrow_csvr]   includenullstabler   r   
new_schemanew_typer|   
arrow_typerx   dtype_mappings                  r   readArrowParserWrapper.read   s}    (	20?!!#	)88P4;O;OPO 	((((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I%OOO?E.. 12M')}}M'')$OO1B1BOCE'))OO1J1LOME OO%E++E22k  	**../@$GG"&&w/((,,]CEBE##E**# 6,16 3 3  O  	,  	(a.a'	(s%   H AJ8 BJ58KKK)	r]   rs   r"   r   r#   rm   rW   r_   r   )r   zReadBuffer[bytes]rR   None)rR   r   )rx   r   rR   r   )rR   r   )__name__
__module____qualname____firstlineno____doc__r   r   rf   r   r   r   __static_attributes____classcell__)r   s   @r   r   r       s1    6Y
vGR	F3 F3r    r   )
__future__r   typingr   r=   pandas._configr   pandas._libsr   pandas.compat._optionalr   pandas.errorsr   r	   pandas.util._exceptionsr
   pandas.core.dtypes.commonr   pandas.core.dtypes.inferencer   pandasr   r   pandas.io._utilr   r   pandas.io.parsers.base_parserr   pandas._typingr   r   rF   r    r   <module>r      sK    "    5  > 5 2 3   5)O3 O3r    