
    .i.                        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      d/var/www/app/trading-bot/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      $yy}}Z8#+#3IIk*	i&Q  dii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    MM#K$@$@#AAU&556b9I9I8J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dii'DIIMM+,F,R*.))--*D		,'	E &&k3'&-K K)4		%& .2YY__->
)\'OP %
 yy}}^4#%<H""#89!?!?!E!EE ""#89 !?!?!D!DD" =K""#89!?!?!D!DD<L""#89 .2YY__-> 
)\' % 
 79DIIm<T6T23;;#48L8L#L!%!5!56G!H7!A3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'(
1c"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?	8k88P4;O;OPO    	**../@$GG"&&w/((,,]CEBE##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}}% ;;zz!"8_
4::(*
 383tzz?8R2S!TQ#a&!T!T+djj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   >>%>>..0L$T^^4 ,4d#&+mmD&9LO.$vdV8%<== ::)  ::>>$/; tzz~~d34#mmD14::>>%--PTBU3VW #C
 !,%*3Z%6%6y%Ac
 JJsO!,$ OOLtTOB{{"+<%)FS1B1B-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EMM) |A&
 *$**5
4TZZ0 u  4 S*34s   $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As1C0Uri   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$S0UW0U-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It7H7HI6k66L9K9KL /	 ) E 		/2 CNN*J!rzz|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) 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   