
    cMhH+                        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 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mZ d dlmZ  G d de          ZdS )    )annotations)TYPE_CHECKINGN)lib)import_optional_dependency)ParserErrorParserWarning)find_stack_level)pandas_dtype)
is_integer)arrow_table_to_pandas)
ParserBase)
ReadBuffer)	DataFramec                  L     e Zd ZdZd f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()
    srcReadBuffer[bytes]returnNonec                    t                                          |           || _        || _        |                                  d S N)super__init__kwdsr   _parse_kwds)selfr   r   	__class__s      f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/io/parsers/arrow_parser_wrapper.pyr   zArrowParserWrapper.__init__   sA    	    c                    | j                             d          }|dn|| _        | j         d         }t          |t                    rt          d          t          | j         d                   | _        dS )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&   sv      $y}}Z88#+#3Ik*	i&& 	Q   di455r   c                   ddddddd}|                                 D ]J\  }}|| j        v r<| j                            |          "| j                            |          | j        |<   K| j        }t          |t                    r|g}nd}|| j        d	<   d
 | j                                         D             | _        | j                            d          }|~t          |          r|| j        d<   nd|t          j
        j        k    rd| j        d<   nD|t          j
        j        k    rdd}|| j        d<   n |t          j
        j        k    rd | j        d<   d | j                                         D             | _        d| j        d         v | j        d<   | j        (d| j        v rd | j        d         D             | j        d<   | j        du | j        | j        n| j        d         | j        d| _        dS )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_parsersc                &    i | ]\  }}||dv ||S )N)	delimiterr.   r+   r,    .0option_nameoption_values      r   
<dictcomp>z;ArrowParserWrapper._get_pyarrow_options.<locals>.<dictcomp>S   sI     
 
 
)\'OP P P P Pr   on_bad_linesinvalid_row_handlerr   strc                    t          j        d| j         d| j         d| j         t
          t                                 dS )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_warninge   si    MLK$@ L L&5L L9D9IL L%#3#5#5	    "6r   c                    dS )NrB   r7   )_s    r   <lambda>z9ArrowParserWrapper._get_pyarrow_options.<locals>.<lambda>p   s    f r   c                &    i | ]\  }}||dv ||S )N)r)   r*   true_valuesfalse_valuesr-   r4   r7   r8   s      r   r<   z;ArrowParserWrapper._get_pyarrow_options.<locals>.<dictcomp>r   sF      
  
  
)\'    r    strings_can_be_nullc                    g | ]}d | S )fr7   )r9   ns     r   
<listcomp>z;ArrowParserWrapper._get_pyarrow_options.<locals>.<listcomp>   s+     7 7 7A7 7 7r   skiprows)autogenerate_column_names	skip_rowsr!   )r   r?   )itemsr   r#   popdate_formatr$   r?   parse_optionscallabler   BadLineHandleMethodERRORWARNSKIPconvert_optionsheaderr!   read_options)r   mappingpandas_namepyarrow_namer[   r=   rI   s          r   _get_pyarrow_optionsz'ArrowParserWrapper._get_pyarrow_options4   sx   
 )&' 4&%
 
 *1 	E 	E%Kdi''DIMM+,F,F,R*.)--*D*D	,'
 &k3'' 	&-KK K)4	%&
 
-1Y__->->
 
 
 y}}^44#%% M<H"#899!?!EEE  ")  !?!DDD" " " " =K"#899!?!DDD<L<L"#89 
  
-1Y__->-> 
  
  
 79DIm<T6T23;#48L#L#L7 7!%!56G!H7 7 7D !23
 *.)<{& :&
 
r   framer   c                ~   t          j                  }d}| j        | j        | j        t	          |          | _        t          | j                  |k    r?d t	          |t          | j                  z
            D             }|| j        z   | _        d}| j        _        |                     j                  \  }| j        Q| j                                        }t          | j                  D ]\  }}t          |          rj        |         ||<   n|j        vrt          d| d          | j        | j                            |          || j                            |          fn1j        |         | j                            j        |                   f\  }	}
|
&|	                             |
          |	<   | j        |	= ܉                    |dd           | j        )|s'dgt          j        j                  z  j        _        | j        t!          | j        t"                    r+fd| j                                        D             | _        nt'          | j                  | _        	                     | j                  n!# t(          $ r}t          |          d}~ww xY wS )	z
        Processes data read in based on kwargs.

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

        Returns
        -------
        DataFrame
            The processed DataFrame.
        TNc                ,    g | ]}t          |          S r7   )r?   r9   xs     r   rU   z>ArrowParserWrapper._finalize_pandas_output.<locals>.<listcomp>   s    !T!T!TQ#a&&!T!T!Tr   FzIndex z invalid)dropinplacec                H    i | ]\  }}|j         v |t          |          S r7   )columnsr
   )r9   kvri   s      r   r<   z>ArrowParserWrapper._finalize_pandas_output.<locals>.<dictcomp>   s<       1EM)) |A)))r   )lenrq   rc   namesrange_do_date_conversions	index_colcopy	enumerater   r&   dtyper#   astype	set_indexindexr$   r%   rY   r
   	TypeError)r   ri   num_colsmulti_index_namedcolumns_prefixrK   index_to_setiitemkey	new_dtypees    `          r   _finalize_pandas_outputz*ArrowParserWrapper._finalize_pandas_output   s    u}%% ;z!;&!&xDJ4:(**
 "U!T%3tz??8R2S2S!T!T!T+dj8
$)! JEM,,U]EBB5>%>..00L$T^44 , ,4d## >&+mD&9LOO..$%<d%<%<%<=== :)  :>>$//; tz~~d3344#mD14:>>%-PTBU3V3VW #C
 !,%*3Z%6%6y%A%Ac
 JsOOOLtTOBBB{"+<"%)FS1B-C-C$C!:! $*d++ 6    $
 0 0 2 2  

 *$*55
$TZ00 $ $ $ mm#$ s   J 
J:&J55J:c                    t          j        |          r(t          d |D                       st          d          t	          |          rt          d          d S )Nc              3  @   K   | ]}t          |t                    V  d S r   r$   r?   rl   s     r   	<genexpr>z7ArrowParserWrapper._validate_usecols.<locals>.<genexpr>   s,      0U0UAs1C1C0U0U0U0U0U0Ur   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&   r]   )r   r/   s     r   _validate_usecolsz$ArrowParserWrapper._validate_usecols   s|    G$$ 	S0U0UW0U0U0U-U-U 	P   g 	O  	 	r   c           	        t          d          }t          d          }|                                  	  |j        di | j        }n# t          $ r | j                            dd          }||                     |           | j                            dt                                }t          j	        |          rt          d |D                       st	          d           w xY w	 |                    | j         |j        di | j         |j        di | j        |          }n"# |j        $ r}t%          |          |d}~ww xY w| j        d	         }|t          j        u r|j        }	|                                }
t/          |j        j                  D ][\  }}|j                            |          r<|	                    ||	                    |                              |
                    }	\|                    |	          }t;          j                    5  t;          j        d
dt@                     tC          ||d          }ddd           n# 1 swxY w Y   | "                    |          S )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  @   K   | ]}t          |t                    V  d S r   r   rl   s     r   r   z*ArrowParserWrapper.read.<locals>.<genexpr>   s=       6 6'(
1c""6 6 6 6 6 6r   z9The 'pyarrow' engine requires all na_values to be strings)rd   r\   rb   dtype_backendignorezmake_block is deprecatedT)r   null_to_int64r7   )#r   rh   ConvertOptionsrb   r   r#   r   setr   r   r   read_csvr   ReadOptionsrd   ParseOptionsr\   ArrowInvalidr   r   
no_defaultschemafloat64rz   typesis_nullfield	with_typecastrC   catch_warningsfilterwarningsDeprecationWarningr   r   )r   papyarrow_csvrb   includenullstabler   r   
new_schemanew_typer   
arrow_typeri   s                 r   readzArrowParserWrapper.read   s
    (	220??!!###	8k8PP4;OPPOO 	 	 	*../@$GGG"&&w///(,,]CEEBBE#E** # 6 6,16 6 6 3 3   O   		(((4[4IIt7HII6k6LL9KLL /	 )  EE  	( 	( 	(a..a'	( 	/2 CN**Jzz||H!*5<+=!>!>  :8##J// !+:++A..88BB" "J JJz**E$&& 	 	#*"  
 *]$  E	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ++E222s6   A B!C(,>D+ +
E
5EE
 .II!I)r   r   r   r   )r   r   )ri   r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   rh   r   r   r   __classcell__)r   s   @r   r   r      s              6 6 6 6Y
 Y
 Y
 Y
vH H H HT	 	 	 	C3 C3 C3 C3 C3 C3 C3 C3r   r   )
__future__r   typingr   rC   pandas._libsr   pandas.compat._optionalr   pandas.errorsr   r   pandas.util._exceptionsr	   pandas.core.dtypes.commonr
   pandas.core.dtypes.inferencer   pandas.io._utilr   pandas.io.parsers.base_parserr   pandas._typingr   pandasr   r   r7   r   r   <module>r      sD   " " " " " "                    > > > > > >        5 4 4 4 4 4 2 2 2 2 2 2 3 3 3 3 3 3 1 1 1 1 1 1 4 4 4 4 4 4 !))))))      M3 M3 M3 M3 M3 M3 M3 M3 M3 M3r   