U
    -e!                     @  sp   d dl mZ d dlmZ 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 G d	d
 d
eZdS )    )annotations)
ReadBuffer)import_optional_dependency)
is_integerN)	DataFrame)_arrow_dtype_mapping)
ParserBasec                      s\   e Zd ZdZddd fddZdd Zdd	d
dZdddddZdd	ddZ  Z	S )ArrowParserWrapperz7
    Wrapper for the pyarrow engine for read_csv()
    zReadBuffer[bytes]None)srcreturnc                   s$   t  | || _|| _|   d S )N)super__init__kwdsr   _parse_kwds)selfr   r   	__class__ g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pandas/io/parsers/arrow_parser_wrapper.pyr      s    zArrowParserWrapper.__init__c                 C  sf   | j d}|dkrdn|| _| | j d \| _| _| j d }t|trRtdt	| j d | _
dS )z?
        Validates keywords before passing to pyarrow.
        encodingNzutf-8usecols	na_valuesz?The pyarrow engine doesn't support passing a dict for na_values)r   getr   Z_validate_usecols_argr   Zusecols_dtype
isinstancedict
ValueErrorlistr   )r   r   r   r   r   r   r      s    

zArrowParserWrapper._parse_kwds)r   c                 C  s   dddddd}|  D ]4\}}|| jkr| j|dk	r| j|| j|< qdd	 | j  D | _d
d	 | j  D | _| jdk| jdk	r| 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)r   r   
escapecharZskip_blank_linesdecimalNc                 S  s&   i | ]\}}|d k	r|dkr||qS )N)	delimiter
quote_charr    r!   r   .0Zoption_nameZoption_valuer   r   r   
<dictcomp>;   s    z;ArrowParserWrapper._get_pyarrow_options.<locals>.<dictcomp>c                 S  s&   i | ]\}}|d k	r|dkr||qS )N)r   r   Ztrue_valuesZfalse_valuesr"   r   r'   r   r   r   r)   B   s    Zskiprows)Zautogenerate_column_namesZ	skip_rowsr   )	itemsr   r   popparse_optionsconvert_optionsheaderr   read_options)r   mappingZpandas_nameZpyarrow_namer   r   r   _get_pyarrow_options,   s*    z'ArrowParserWrapper._get_pyarrow_optionsr   )framer   c              
   C  sj  t |j}d}| jdkrn| jdkr6| jdkr6t|| _t | j|krftt|t | j | j | _d}| j|_| |j|\|_}| jdk	rt| jD ]<\}}t	|r|j| | j|< q||jkrt
d| dq|j| jddd | jdkr|sdgt |jj |j_| jddk	rfz|| jd}W n, tk
rd } zt
|W 5 d}~X Y nX |S )z
        Processes data read in based on kwargs.

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

        Returns
        -------
        DataFrame
            The processed DataFrame.
        TNFzIndex z invalid)ZdropZinplaceZdtype)lencolumnsr.   namesranger   Z_do_date_conversionsZ	index_col	enumerater   r   Z	set_indexindexr   r   Zastype	TypeError)r   r2   Znum_colsZmulti_index_namediitemer   r   r   _finalize_pandas_outputW   s4    





z*ArrowParserWrapper._finalize_pandas_outputc                 C  s   t d}|   |j| j|jf | j|jf | j|jf | j	d}| j
d dkr`|jtjd}n(| j
d dkr|jt jd}n| }| |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.
        zpyarrow.csv)r/   r,   r-   Zdtype_backendZpyarrow)Ztypes_mapperZnumpy_nullable)r   r1   Zread_csvr   ZReadOptionsr/   ZParseOptionsr,   ZConvertOptionsr-   r   Z	to_pandaspdZ
ArrowDtyper   r   r=   )r   Zpyarrow_csvtabler2   r   r   r   read   s    zArrowParserWrapper.read)
__name__
__module____qualname____doc__r   r   r1   r=   r@   __classcell__r   r   r   r   r	      s   +3r	   )
__future__r   Zpandas._typingr   Zpandas.compat._optionalr   Zpandas.core.dtypes.inferencer   Zpandasr>   r   Zpandas.io._utilr   Zpandas.io.parsers.base_parserr   r	   r   r   r   r   <module>   s   