o
    5cL<                     @  s  d dl mZ d dlmZ d dlmZmZmZmZ d dl	Z	d dl
Zd dlm  mZ d dlmZmZmZm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"m#Z# ermd dl$m%Z%m&Z& G dd de"Z'dddZ(dddZ)dS )    )annotations)defaultdict)TYPE_CHECKINGHashableMappingSequenceN)	ArrayLikeDtypeArgDtypeObjReadCsvBuffer)DtypeWarning)find_stack_level)is_categorical_dtypepandas_dtype)union_categoricals)ExtensionDtype)ensure_index_from_sequences)
ParserBaseis_index_col)Index
MultiIndexc                      sp   e Zd ZU ded< ded< d! fd	d
Zd"ddZd"ddZ	d#d$ddZd%ddZdd Z	d&d'dd Z
  ZS )(CParserWrapperbool
low_memoryzparsers.TextReader_readersrcReadCsvBuffer[str]returnNonec                   st  t  | | _| }|dd _ jdu|d<  j|d<  jj	|d< dD ]}||d  q(t
|dd |d< tj|fi | _ jj _ jd u } jjd u rYd  _n  jj j|\ _ _ _} jd u r jr fdd	t jjD  _n	tt jj _ jd d   _ jrވ  j j jd usJ  jd
krt js  j t jtkr·fdd	t  jD  _t jtk rވ  j  ! j  "   j _ j#s1 jj$dkrt% jrd _& ' j j\} _ _ jd u r| _ jjd u r1|s1 jd us(J d gt j  _ jj$dk _(d S )Nr   Fallow_leading_colsusecolson_bad_lines)storage_optionsencoding
memory_mapcompressionerror_bad_lineswarn_bad_linesdtypec                   s   g | ]	} j  | qS  )prefix).0iselfr)   X/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/io/parsers/c_parser_wrapper.py
<listcomp>j   s    z+CParserWrapper.__init__.<locals>.<listcomp>stringc                   $   g | ]\}}| v s| v r|qS r)   r)   )r+   r,   nr    r)   r/   r0      s    r   T))super__init__kwdscopypopr   	index_colr    r!   valueensure_dtype_objsgetparsers
TextReaderr   unnamed_colsnamesheader_extract_multi_indexer_columnsindex_names	col_namesr*   rangetable_widthlist
orig_names_evaluate_usecolsusecols_dtypesetissubset_validate_usecols_nameslen	enumerate_validate_parse_dates_presence_set_noconvert_columns_has_complex_date_colleading_colsr   _name_processed_clean_index_names_implicit_index)r.   r   r7   keypassed_namesrD   	__class__)r.   r    r/   r6   1   s   


	





zCParserWrapper.__init__c                 C  s&   z| j   W d S  ty   Y d S w N)r   close
ValueErrorr-   r)   r)   r/   r]      s
   zCParserWrapper.closec                   s^   | j dusJ dd t| j D   fdd| jD }| || j}|D ]}| j| q$dS )z
        Set the columns that should not undergo dtype conversions.

        Currently, any column that is involved with date parsing will not
        undergo such conversions.
        Nc                 S  s   i | ]\}}||qS r)   r)   )r+   r,   xr)   r)   r/   
<dictcomp>       z9CParserWrapper._set_noconvert_columns.<locals>.<dictcomp>c                   s   g | ]} | qS r)   r)   r+   r_   
names_dictr)   r/   r0          z9CParserWrapper._set_noconvert_columns.<locals>.<listcomp>)rI   rP   rA   _set_noconvert_dtype_columnsr   set_noconvert)r.   col_indicesnoconvert_columnscolr)   rc   r/   rR      s   z%CParserWrapper._set_noconvert_columnsNnrows
int | None_tuple[Index | MultiIndex | None, Sequence[Hashable] | MultiIndex, Mapping[Hashable, ArrayLike]]c              
     sN  z| j r| j|}t|}n| j|}W nM tyc   | jr^d| _| | j}| j	|| j
| j| jdd\} }|  | j | jd urL|    fdd| D }| |f Y S |    w d| _| j}| jjr| jrutdg }t| jjD ]"}| j
d u r||}	n|| j
| }	| j|	|dd}	||	 q}t|}| jd ur| |}| |}t| }
d	d t||
D }| ||\}}| || j}nOt| }
| jd usJ t | j}| |}| jd ur| |}d
d |
D }| jd u r| !|| dd t||
D }| ||\}}| "|||\}}|||fS )NFr(   r(   c                   s   i | ]\}}| v r||qS r)   r)   )r+   kvcolumnsr)   r/   r`      s    z'CParserWrapper.read.<locals>.<dictcomp>z file structure not yet supportedT)try_parse_datesc                 S     i | ]	\}\}}||qS r)   r)   r+   ro   r,   rp   r)   r)   r/   r`   "      c                 S  s   g | ]}|d  qS )   r)   rb   r)   r)   r/   r0   :  re   z'CParserWrapper.read.<locals>.<listcomp>c                 S  rt   r)   r)   ru   r)   r)   r/   r`   >  rv   )#r   r   read_low_memory_concatenate_chunksreadStopIteration_first_chunk_maybe_dedup_namesrI   _get_empty_metar:   rD   r7   r=   _maybe_make_multi_index_columnsrE   r    _filter_usecolsitemsr]   rA   rT   rS   NotImplementedErrorrF   r9   _maybe_parse_datesappendr   sortedzip_do_date_conversionsrH   _check_data_length_make_index)r.   rk   chunksdatarA   indexcol_dictarraysr,   values	data_tupscolumn_names	date_dataalldatar)   rq   r/   rz      sv   













zCParserWrapper.readrA   Sequence[Hashable]c                   s@   |  | j|  d urt|t kr fddt|D }|S )Nc                   r2   r)   r)   )r+   r,   namer4   r)   r/   r0   I  s    z2CParserWrapper._filter_usecols.<locals>.<listcomp>)rJ   r    rO   rP   )r.   rA   r)   r4   r/   r   E  s   
zCParserWrapper._filter_usecolsc                 C  sH   t | jjd }d }| jjdkr | jd ur | || j\}}| _||fS )Nr   )rH   r   rB   rT   r:   rV   )r.   rA   	idx_namesr)   r)   r/   _get_index_namesN  s   zCParserWrapper._get_index_namesTr   intrs   c                 C  s   |r|  |r| |}|S r\   )_should_parse_dates
_date_conv)r.   r   r   rs   r)   r)   r/   r   Y  s   
z!CParserWrapper._maybe_parse_dates)r   r   r   r   )r   r   r\   )rk   rl   r   rm   )rA   r   r   r   )T)r   r   rs   r   )__name__
__module____qualname____annotations__r6   r]   rR   rz   r   r   r   __classcell__r)   r)   rZ   r/   r   -   s   
  


k	r   r   list[dict[int, ArrayLike]]r   dictc                   s  t | d  }g }i }|D ]\  fdd| D }dd |D }dd |D }t|dkrAt|g }|ttkrA|t  |	 }t
|rRt|dd	| < qt|trc| }	|	|| < qt|| < q|rd
|}
dd|
 dg}tj|tt d |S )z
    Concatenate chunks of data read with low_memory=True.

    The tricky part is handling Categoricals, where different chunks
    may have different inferred categories.
    r   c                   s   g | ]}|  qS r)   )r9   )r+   chunkr   r)   r/   r0   k  ra   z'_concatenate_chunks.<locals>.<listcomp>c                 S  s   h | ]}|j qS r)   rn   )r+   ar)   r)   r/   	<setcomp>m  s    z&_concatenate_chunks.<locals>.<setcomp>c                 S  s   h | ]}t |s|qS r)   )r   rb   r)   r)   r/   r   o  s    rw   F)sort_categories, z	Columns (zK) have mixed types. Specify dtype option on import or set low_memory=False.)
stacklevel)rH   keysrO   npfind_common_typer(   objectr   strr9   r   r   
isinstancer   construct_array_type_concat_same_typeconcatenatejoinwarningswarnr   r   )r   rA   warning_columnsresultarrsdtypesnumpy_dtypescommon_typer(   
array_typewarning_nameswarning_messager)   r   r/   ry   _  s>   



ry   r(   *DtypeArg | dict[Hashable, DtypeArg] | None*DtypeObj | dict[Hashable, DtypeObj] | Nonec                   sx   t tr$t  t fdd} D ]
}t| ||< q|S t tr2fddD S dur:tS S )zc
    Ensure we have either None, a dtype object, or a dictionary mapping to
    dtype objects.
    c                     s    S r\   r)   r)   )default_dtyper)   r/   <lambda>  s    z#ensure_dtype_objs.<locals>.<lambda>c                   s   i | ]	}|t  | qS r)   )r   )r+   ro   rn   r)   r/   r`     rv   z%ensure_dtype_objs.<locals>.<dictcomp>N)r   r   r   default_factoryr   r   )r(   dtype_convertedrX   r)   )r   r(   r/   r<     s   

r<   )r   r   r   r   )r(   r   r   r   )*
__future__r   collectionsr   typingr   r   r   r   r   numpyr   pandas._libs.parsers_libsr>   pandas._typingr   r	   r
   r   pandas.errorsr   pandas.util._exceptionsr   pandas.core.dtypes.commonr   r   pandas.core.dtypes.concatr   pandas.core.dtypes.dtypesr   pandas.core.indexes.apir   pandas.io.parsers.base_parserr   r   pandasr   r   r   ry   r<   r)   r)   r)   r/   <module>   s*      
4A