§
    tŠtjz×  ã                  ó  — d dl mZ d dlmZmZ d dlZd dlmZ d dlZd dl	m
Z
mZmZmZmZmZmZ d dl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#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ er d dlAmBZBmCZCmDZDmEZE d dlmFZFmGZGmHZHmIZI d dlJmKZKmLZL dZM G d„ de<¦  «        ZN G d„ dejC        ¦  «        ZO G d„ deN¦  «        ZPd#d"„ZQdS )$é    )Úannotations)ÚabcÚdefaultdictN)ÚStringIO)ÚIOÚTYPE_CHECKINGÚAnyÚDefaultDictÚLiteralÚcastÚfinal)Úlib)ÚScalar)ÚEmptyDataErrorÚParserErrorÚParserWarning)Úcache_readonly)Úfind_stack_level)Úastype_array)Úis_bool_dtypeÚis_extension_array_dtypeÚ
is_integerÚis_numeric_dtypeÚis_object_dtypeÚis_string_dtypeÚpandas_dtype)ÚCategoricalDtypeÚExtensionDtype)Úis_dict_like)Ú
algorithms)ÚCategoricalÚExtensionArray)ÚBooleanDtype)ÚIndex)Údedup_namesÚis_potential_multi_index)Ú
ParserBaseÚevaluate_callable_usecolsÚget_na_valuesÚparser_defaultsÚvalidate_parse_dates_presence)ÚHashableÚIteratorÚMappingÚSequence)Ú	ArrayLikeÚDtypeObjÚReadCsvBufferÚT)Ú
MultiIndexÚSeriesu   ï»¿c                  ój  ‡ — e Zd ZU ded<   dQˆ fd„ZedRd	„¦   «         ZdSd„Z	 dTdUd„ZdVd„Z		 dTdWd„Z
dXd„Ze	 	 dYdZd„¦   «         Zed[d$„¦   «         Zed\d&„¦   «         Zd]d(„Zed)„ ¦   «         Zd^d0„Zd_d2„Zd`d4„Zdad7„Zd_d8„Zdbd<„Zdcd>„ZdddA„ZdedC„ZdddD„ZdfdG„ZdddH„ZdgdJ„ZdhdL„ZdTdidM„Z djdO„Z!dkdP„Z"ˆ xZ#S )lÚPythonParserúset[int]Ú_no_thousands_columnsÚfúReadCsvBuffer[str] | listÚreturnÚNonec                óª  •‡ — t          ¦   «                              |¦  «         g ‰ _        g ‰ _        d‰ _        d‰ _        |d         ‰ _        t          ‰ j        ¦  «        r‰ j        ‰ _        n
ˆ fd„‰ _        t          |d         ¦  «        ‰ _
        |d         ‰ _        |d         ‰ _        t          ‰ j        t          ¦  «        rt          ‰ j        ¦  «        ‰ _        |d         ‰ _        |d         ‰ _        |d	         ‰ _        |d
         ‰ _        |d         ‰ _        |d         ‰ _        |                     dd¦  «        ‰ _        |d         ‰ _        |d         ‰ _        |d         ‰ _        t          |t4          ¦  «        r|‰ _        n,t7          |d¦  «        sJ ‚‰                      |¦  «        ‰ _        d‰ _        ‰                      ¦   «         \  }‰ _        ‰ _         ‰  !                    |‰ j"        ¦  «        \  ‰ _#        ‰ _"        ‰ _$        }t5          ‰ j#        ¦  «        ‰ _%        ‰  &                    ¦   «         \  }‰ _%        ‰ _#        ‰ j"        €|‰ _"        ‰ j        €3t5          tO          tQ          ‰ j#        ¦  «        ¦  «        ¦  «        ‰ _        ‰  )                    ¦   «         ‰ _*        tQ          ‰ j        ¦  «        dk    rtW          d¦  «        ‚dS )zN
        Workhorse function for processing nested list into DataFrame
        r   Úskiprowsc                ó   •— | ‰j         v S ©N)r?   )ÚxÚselfs    €ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pandas/io/parsers/python_parser.pyú<lambda>z'PythonParser.__init__.<locals>.<lambda>s   s   ø€  a¨4¬=Ð&8€ ó    Ú
skipfooterÚ	delimiterÚ	quotecharÚ
escapecharÚdoublequoteÚskipinitialspaceÚlineterminatorÚquotingÚskip_blank_linesÚhas_index_namesFÚ	thousandsÚdecimalÚcommentÚreadlineNé   z'Only length-1 decimal markers supported),ÚsuperÚ__init__ÚdataÚbufÚposÚline_posr?   ÚcallableÚskipfuncÚ_validate_skipfooter_argrG   rH   rI   Ú
isinstanceÚstrrJ   rK   rL   rM   rN   rO   ÚgetrP   rQ   rR   rS   ÚlistÚhasattrÚ_make_readerÚ_col_indicesÚ_infer_columnsÚnum_original_columnsÚunnamed_colsÚ_extract_multi_indexer_columnsÚindex_namesÚcolumnsÚ	col_namesÚ
orig_namesÚ_get_index_nameÚrangeÚlenÚ_set_no_thousand_columnsr9   Ú
ValueError)rC   r:   Úkwdsrk   Ú_rj   Ú	__class__s   `     €rD   rW   zPythonParser.__init__c   s¥  øø€ õ 	‰Œ×Ò˜ÑÔÐà>@ˆŒ	ØˆŒØˆŒØˆŒà˜ZÔ(ˆŒå�D”MÑ"Ô"ð 	9Ø œMˆDŒMˆMà8Ð8Ð8Ð8ˆDŒMå2°4¸Ô3EÑFÔFˆŒØ˜kÔ*ˆŒà˜kÔ*ˆŒÝ�d”n¥cÑ*Ô*ð 	1Ý  ¤Ñ0Ô0ˆDŒNà˜|Ô,ˆŒØ Ô.ˆÔØ $Ð%7Ô 8ˆÔØ"Ð#3Ô4ˆÔØ˜I”ˆŒØ $Ð%7Ô 8ˆÔð  $ŸxšxÐ(9¸5ÑAÔAˆÔà˜kÔ*ˆŒØ˜I”ˆŒà˜I”ˆŒõ �a�ÑÔð 	-àˆDŒIˆIå˜1˜jÑ)Ô)Ð)Ð)Ð)à×)Ò)¨!Ñ,Ô,ˆDŒIð /3ˆÔð ×ÒÑ!Ô!ñ		
ØØÔ%ØÔð ×/Ò/ØØÔñ
ô 
ñ	
ØŒLØÔØŒNØõ +/¨t¬|Ñ*<Ô*<ˆŒà59×5IÒ5IÑ5KÔ5KÑ2ˆ�T”_ d¤lØÔÐ#Ø*ˆDÔàÔÐ$Ý $¥U­3¨t¬|Ñ+<Ô+<Ñ%=Ô%=Ñ >Ô >ˆDÔà%)×%BÒ%BÑ%DÔ%DˆÔ"åˆtŒ|ÑÔ Ò!Ð!ÝÐFÑGÔGÐGð "Ð!rF   ú
re.Patternc                ó¼   — t          j        | j        ¦  «        }| j        €d|› d�}n"t          j        | j        ¦  «        }d|› d|› d�}t          j        |¦  «        S )Nz^[\-\+]?[0-9]*(z [0-9]*)?([0-9]?(E|e)\-?[0-9]+)?$z^[\-\+]?([0-9]+z	|[0-9])*()ÚreÚescaperR   rQ   Úcompile)rC   rR   ÚregexrQ   s       rD   ÚnumzPythonParser.numº   sw   € å”)˜DœLÑ)Ô)ˆØŒ>Ð!ØP wÐPÐPÐPˆEˆEåœ	 $¤.Ñ1Ô1ˆIð- 9ð -ð -°wð -ð -ð -ð õ Œz˜%Ñ Ô Ð rF   úIO[str] | ReadCsvBuffer[str]úIterator[list[str]]c                ó°  ‡ ‡‡— ‰ j         Š‰�t          ‰¦  «        dk    �r%‰ j        rt          d¦  «        ‚ G ˆ fd„dt          j        ¦  «        }|}‰�k‰|_         ‰ j        �[‰                      ‰ j        ¦  «        rA‰ 	                    ¦   «         }|sn*‰ xj        dz  c_        ‰                      ‰ j        ¦  «        °A�nn‰ 	                    ¦   «         }‰  
                    |gg¦  «        d         }‰                      ‰ j        ¦  «        s|s]‰ xj        dz  c_        ‰ 	                    ¦   «         }‰  
                    |gg¦  «        d         }‰                      ‰ j        ¦  «        °[|¯]t          t          t                   |¦  «        }|d         }‰ xj        dz  c_        ‰ xj        dz  c_        t	          j        ¦   «                              |¦  «        }|j         |_         t	          j        t%          |¦  «        |¬¦  «        }‰ j                             t          |¦  «        ¦  «         t	          j        ‰|d¬¦  «        }	nˆˆfd	„}
 |
¦   «         }	|	S )
NrU   z<Custom line terminators not supported in python parser (yet)c                  óh   •— e Zd Z” j        Z” j        Z” j        Z” j        Z” j        Z” j        ZdZ	dS )ú,PythonParser._make_reader.<locals>.MyDialectú
N)
Ú__name__Ú
__module__Ú__qualname__rH   rI   rJ   rK   rL   rN   rM   ©rC   s   €rD   Ú	MyDialectr�   Ð   sA   ø€ € € € € Ø œN�	Ø œN�	Ø!œ_�
Ø"Ô.�Ø#'Ô#8Ð Øœ,�Ø!%���rF   r‡   r   )ÚdialectT)rˆ   Ústrictc               3  ó
  •K  — ‰                      ¦   «         } t          j        ‰¦  «        }|                     |                      ¦   «         ¦  «        V — ‰D ]+} |                     |                      ¦   «         ¦  «        V — Œ,d S rA   )rT   rx   rz   ÚsplitÚstrip)ÚlineÚpatr:   Úseps     €€rD   Ú_readz(PythonParser._make_reader.<locals>._read  s}   øè è € Ø—z’z‘|”|�Ý”j ‘o”o�à—i’i §
¢
¡¤Ñ-Ô-Ð-Ð-Ð-àð 2ð 2�DØŸ)š) D§J¢J¡L¤LÑ1Ô1Ð1Ð1Ð1Ð1ð2ð 2rF   )rH   rp   rM   rr   ÚcsvÚDialectr?   r]   rZ   rT   Ú_check_commentsr   rb   r`   r[   ÚSnifferÚsniffÚreaderr   rY   Úextend)rC   r:   r‡   Údiar�   ÚlinesÚ	lines_strÚsniffedÚline_rdrr–   r�   r�   s   ``         @rD   rd   zPythonParser._make_readerÇ   si  øøø€ ØŒnˆàˆ;�#˜c™(œ( aš-™-ØÔ"ð Ý ØRñô ð ð&ð &ð &ð &ð &ð &ð &�CœKñ &ô &ð &ð ˆCàˆØ #�”ð ”=Ð,ØŸ-š-¨¬Ñ1Ô1ð &Ø Ÿzšz™|œ|˜Ø#ð "Ø!Ø˜œ A™˜œð	 Ÿ-š-¨¬Ñ1Ô1ð &ùð —z’z‘|”|�Ø×,Ò,¨t¨f¨XÑ6Ô6°qÔ9�Ø—m’m D¤HÑ-Ô-ð >°Uð >Ø�H”H ‘M�H”HØŸ:š:™<œ<�DØ ×0Ò0°4°&°Ñ:Ô:¸1Ô=�Eð —m’m D¤HÑ-Ô-ð >°Uð >õ !¥¥c¤¨EÑ2Ô2�	ð ! ”|�à�”˜A‘�”Ø�” Ñ"�”Ýœ+™-œ-×-Ò-¨dÑ3Ô3�Ø 'Ô 1�”õ œ:¥h¨t¡n¤n¸cÐBÑBÔB�Ø”—’¥ X¡¤Ñ/Ô/Ð/õ ”Z ¨3°tÐ<Ñ<Ô<ˆFˆFð2ð 2ð 2ð 2ð 2ð 2ð �U‘W”WˆFàˆrF   NÚrowsú
int | Noneú[tuple[Index | None, Sequence[Hashable] | MultiIndex, Mapping[Hashable, ArrayLike | Series]]c                ó$  — 	 |                       |¦  «        }n/# t          $ r" | j        rg }n|                      ¦   «          ‚ Y nw xY wd| _        t	          | j        ¦  «        }|slt          | j        t          | j        | j        ¦  «        ¦  «        }|  	                    || j
        ¦  «        \  }}}|                      || j        ¦  «        }|||fS d }| j        rBt          d„ |d         D ¦   «         ¦  «        t          |¦  «        k    r|d         }|dd …         }|                      |¦  «        }	|                      |	¦  «        \  }
}|                      |
¦  «        }|                      ||¦  «        }|                      |	||¦  «        \  }}|||fS )NFc              3  óD   K  — | ]}t          |d k    p|du ¦  «        V — ŒdS )Ú N)Úint)Ú.0Úvs     rD   ú	<genexpr>z$PythonParser.read.<locals>.<genexpr>7  sH   è è € ð (
ð (
Ø*+�C��R’Ð$˜1 ˜9Ñ%Ô%ð(
ð (
ð (
ð (
ð (
ð (
rF   r   rU   )Ú
_get_linesÚStopIterationÚ_first_chunkÚcloserb   rm   r%   r&   Ú	index_colÚ_get_empty_metaÚdtypeÚ_maybe_make_multi_index_columnsrl   rP   Úsumrp   Ú_rows_to_colsÚ_exclude_implicit_indexÚ_convert_dataÚ_do_date_conversionsÚ_make_index)rC   r�   Úcontentrk   ÚnamesÚindexÚcol_dictÚconv_columnsÚindexnamerowÚalldatarX   Ú	conv_dataÚresult_columnss                rD   ÚreadzPythonParser.read  sÞ  € ð	Ø—o’o dÑ+Ô+ˆGˆGøÝð 	ð 	ð 	ØÔ ð Ø��à—
’
‘”�Øð �ð	øøøð "ˆÔõ '+¨4¬?Ñ&;Ô&;ˆØð 	1õ  Ø”Ý(Ø”OØ”Nñô ñô ˆEð (,×';Ò';ØØ”
ñ(ô (Ñ$ˆE�7˜Hð  ×?Ò?ÀÈÌÑXÔXˆLØ˜,¨Ð0Ð0ð ˆØÔð 	"¥Cð (
ð (
Ø/6°q¬zð(
ñ (
ô (
ñ %
ô %
å�‰\Œ\ò%ð %ð # 1œ:ˆLØ˜a˜b˜b”kˆGà×$Ò$ WÑ-Ô-ˆØ×4Ò4°WÑ=Ô=‰ˆˆgà×&Ò& tÑ,Ô,ˆ	Ø×-Ò-¨g°yÑAÔAˆ	à $× 0Ò 0°¸'À<Ñ PÔ PÑˆˆ~à�n iÐ/Ð/s   ‚ ˜)AÁAr»   úlist[np.ndarray]ú8tuple[Mapping[Hashable, np.ndarray], Sequence[Hashable]]c                ó$  ‡‡‡— t          | j        t          | j        | j        ¦  «        ¦  «        }dŠ| j        rt          | j        ¦  «        Št          ‰¦  «        Š|                      |‰¦  «         ˆˆˆfd„t          |¦  «        D ¦   «         |fS )Nr   c                ó:   •— i | ]\  }}|‰k     ¯|‰|‰z            “ŒS © rÃ   )r¤   ÚiÚnamer»   Úlen_alldataÚoffsets      €€€rD   ú
<dictcomp>z8PythonParser._exclude_implicit_index.<locals>.<dictcomp>[  s4   ø€ ð 
ð 
ð 
Ù*1¨!¨TÈÈ[ÊÈˆD�'˜!˜f™*Ô%ÈÈÈrF   )r%   rm   r&   r«   Ú_implicit_indexrp   Ú_check_data_lengthÚ	enumerate)rC   r»   r¶   rÆ   rÇ   s    ` @@rD   r±   z$PythonParser._exclude_implicit_indexG  s¹   øøø€ õ
 ØŒOÝ$Ø”Ø”ñô ñ
ô 
ˆð ˆØÔð 	)Ý˜œÑ(Ô(ˆFå˜'‘l”lˆØ×Ò  wÑ/Ô/Ð/ð
ð 
ð 
ð 
ð 
ð 
Ý5>¸uÑ5EÔ5Eð
ñ 
ô 
àðð 	rF   Úsizec                ó@   — |€| j         }|                      |¬¦  «        S )N)r�   )Ú	chunksizer¾   )rC   rÌ   s     rD   Ú	get_chunkzPythonParser.get_chunk`  s$   € ð ˆ<à”>ˆDØ�yŠy˜dˆyÑ#Ô#Ð#rF   rX   úMapping[Hashable, np.ndarray]úMapping[Hashable, ArrayLike]c                ó¬  — |                       | j        ¦  «        }|                       | j        ¦  «        }i }i }t          | j        t
          ¦  «        r\| j        D ]S}|�O| j        |         }| j        |         }t          |t          ¦  «        r|| j        vr| j        |         }|||<   |||<   ŒTn| j        }| j        }|  	                    |||||¦  «        S rA   )
Ú_clean_mappingÚ
convertersr­   r_   Ú	na_valuesÚdictÚ
na_fvaluesr£   rm   Ú_convert_to_ndarrays)	rC   rX   Ú
clean_convÚclean_dtypesÚclean_na_valuesÚclean_na_fvaluesÚcolÚna_valueÚ	na_fvalues	            rD   r²   zPythonParser._convert_datal  sú   € ð
 ×(Ò(¨¬Ñ9Ô9ˆ
Ø×*Ò*¨4¬:Ñ6Ô6ˆð ˆØÐå�d”n¥dÑ+Ô+ð 	/Ø”~ð 	6ð 	6�Ø�?Ø#œ~¨cÔ2�HØ $¤°Ô 4�Iå! #¥sÑ+Ô+ð 3°¸4¼?Ð0JÐ0JØ"œo¨cÔ2˜à+3�O CÑ(Ø,5Ð$ SÑ)øð	6ð #œnˆOØ#œÐà×(Ò(ØØØØØñ
ô 
ð 	
rF   Údctr.   údict[Any, np.ndarray]c                óD  — i }t          | j        | j        ¦  «        }|                     ¦   «         D �]m\  }}	|€d n|                     |d ¦  «        }
t          |t          ¦  «        r|                     |d ¦  «        }n|}| j        rt          |||| j	        ¦  «        \  }}nt          ¦   «         t          ¦   «         }}||v rKt          j        |	t          |¦  «        |z  ¦  «        }t          j        |	|t          j        ¦  «         |	||<   ŒÛ|
�Ù|�,t!          j        d|› d�t$          t'          ¦   «         ¬¦  «         	 t)          j        |	|
¦  «        }	ne# t,          $ rX t          j        |	t/          |¦  «        ¦  «                             t          j        ¦  «        }t)          j        |	|
|¦  «        }	Y nw xY w|                      |	t          |¦  «        |z  |d u d¬¦  «        \  }}n²t9          |¦  «        }|pt;          |¦  «        }|o| }|                      |	t          |¦  «        |z  |d u |¦  «        \  }}|�t=          |¦  «        }|rM|j        |k    s|r@|s'|dk    r!tA          |¦  «        rt-          d|› �¦  «        ‚|  !                    |||¦  «        }|||<   �Œo|S )Nz5Both a converter and dtype were specified for column z# - only the converter will be used.©Ú
stacklevelF)Útry_num_boolr   z$Bool column has NA values in column )"r+   Úparse_datesrk   Úitemsra   r_   rÖ   Ú	na_filterr)   Úkeep_default_naÚsetr    ÚisinÚnpÚputmaskÚnanÚwarningsÚwarnr   r   r   Ú	map_inferrr   rb   ÚviewÚuint8Úmap_infer_maskÚ_infer_typesr   r   r   r­   r   Ú_cast_types)rC   rà   rÕ   r×   rÔ   ÚdtypesÚresultÚparse_date_colsÚcÚvaluesÚconv_fÚ	cast_typeÚcol_na_valuesÚcol_na_fvaluesÚmaskÚcvalsÚna_countÚis_eaÚis_str_or_ea_dtyperå   s                       rD   rØ   z!PythonParser._convert_to_ndarrays�  s  € ð ˆÝ7¸Ô8HÈ$Ì,ÑWÔWˆØŸš™œð G	ñ G	‰IˆAˆvØ'Ð/�T�T°Z·^²^ÀAÀtÑ5LÔ5LˆFÝ˜&¥$Ñ'Ô'ð #Ø"ŸJšJ q¨$Ñ/Ô/�	�	ð #�	àŒ~ð =Ý0=Ø�y *¨dÔ.Bñ1ô 1Ñ-�˜~˜~õ 14±´µs±u´u˜~�à�OÐ#Ð#õ "” v­s°=Ñ/AÔ/AÀNÑ/RÑSÔS�Ý”
˜6 4­¬Ñ0Ô0Ð0Ø"��q‘	ØàÐ!àÐ(Ý”MðQØ*+ðQð Qð Qõ &Ý#3Ñ#5Ô#5ðñ ô ð ðFÝ œ]¨6°6Ñ:Ô:�F�FøÝ!ð Fð Fð FÝ%œ?¨6µ4¸	±?´?ÑCÔC×HÒHÍÌÑRÔR�DÝ Ô/°¸ÀÑEÔE�F�F�FðFøøøð #'×"3Ò"3ØÝ˜Ñ&Ô&¨Ñ7Ø Ð%Ø!&ð	 #4ñ #ô #‘��x�xõ 1°Ñ;Ô;�Ø%*Ð%H­o¸iÑ.HÔ.HÐ"ð %.Ð$DÐ2DÐE�ð #'×"3Ò"3ØÝ˜Ñ&Ô&¨Ñ7Ø Ð%Ø ñ	#ô #‘��xð Ð(Ý ,¨YÑ 7Ô 7�IØð B %¤+°Ò":Ð":¸eÐ":Ø ð Y X°¢\ \Ý(¨Ñ3Ô3ð YÝ",Ð-WÐTUÐ-WÐ-WÑ"XÔ"XÐXØ ×,Ò,¨U°I¸qÑAÔA�EàˆF�1‰I‰IØˆs   Ä=EÅAF5Æ4F5rû   r0   rý   r1   c                ó  — t          |t          ¦  «        r�|j        du}t          |j        ¦  «        s|st          j        |dd¬¦  «        }t          |d¬¦  «                             ¦   «          	                    ¦   «         }t          j        ||                     |¦  «        || j        ¬¦  «        }�nLt          |t          ¦  «        rœ|                     ¦   «         }	 t          |t           ¦  «        r5d„ |D ¦   «         }|                     ||| j        | j        | j        ¬¦  «        S |                     ||¬¦  «        S # t(          $ r}t)          d	|› d
�¦  «        |‚d}~ww xY wt          |t*          ¦  «        r|                     |d¬¦  «        }nnt/          |j        t2          ¦  «        rt          j        |dd¬¦  «        }n<	 t5          ||d¬¦  «        }n(# t6          $ r}t7          d|› d|› �¦  «        |‚d}~ww xY w|S )ar  
        Cast values to specified type

        Parameters
        ----------
        values : ndarray or ExtensionArray
        cast_type : np.dtype or ExtensionDtype
           dtype to cast values to
        column : string
            column name - used only for error reporting

        Returns
        -------
        converted : ndarray or ExtensionArray
        NF)ÚskipnaÚconvert_na_value)Úcopy)Útrue_valuesc                ó,   — g | ]}t          |¦  «        ‘ŒS rÃ   )r`   )r¤   Úvals     rD   ú
<listcomp>z,PythonParser._cast_types.<locals>.<listcomp>  s   € Ð!=Ð!=Ð!=¨s¥# c¡(¤(Ð!=Ð!=Ð!=rF   )r­   r	  Úfalse_valuesÚnone_values©r­   zExtension Array: zO must implement _from_sequence_of_strings in order to be used in parser methodsTzUnable to convert column z	 to type )r_   r   Ú
categoriesr   r­   r   Úensure_string_arrayr$   ÚuniqueÚdropnar!   Ú_from_inferred_categoriesÚget_indexerr	  r   Úconstruct_array_typer#   Ú_from_sequence_of_stringsr  rÕ   ÚNotImplementedErrorr"   ÚastypeÚ
issubclassÚtyper`   r   rr   )	rC   rû   rý   ÚcolumnÚ
known_catsÚcatsÚ
array_typeÚ
values_strÚerrs	            rD   rö   zPythonParser._cast_typesä  sx  € õ" �iÕ!1Ñ2Ô2ð 6	Ø"Ô-°TÐ9ˆJå" 6¤<Ñ0Ô0ð ¸ð õ Ô0Ø 5¸5ðñ ô �õ ˜ eÐ,Ñ,Ô,×3Ò3Ñ5Ô5×<Ò<Ñ>Ô>ˆDÝ Ô:Ø�d×&Ò& vÑ.Ô.°	ÀtÔGWðñ ô ˆF‰Fõ
 ˜	¥>Ñ2Ô2ð %	Ø"×7Ò7Ñ9Ô9ˆJðÝ˜i­Ñ6Ô6ð Yð ">Ð!=°fÐ!=Ñ!=Ô!=�JØ%×?Ò?Ø"Ø'Ø$(Ô$4Ø%)Ô%6Ø$(¤Nð @ñ ô ð ð &×?Ò?ÀÈiÐ?ÑXÔXÐXøÝ&ð ð ð Ý)ðV¨
ð Vð Vð Vñô ð ðøøøøðøøøõ ˜¥Ñ/Ô/ð 	Ø—]’] 9°5�]Ñ9Ô9ˆFˆFÝ˜	œ­Ñ,Ô,ð 	õ Ô,Ø˜t°eðñ ô ˆFˆFðÝ% f¨i¸dÐCÑCÔC��øÝð ð ð Ý ØL°ÐLÐLÀÐLÐLñô àðøøøøðøøøð ˆs7   ÃA	D> Ä'D> Ä>
E!ÅEÅE!ÇG Ç
G<Ç!G7Ç7G<Úboolc                óš   — | j         €dS | j         }t          |t          t          t          j        f¦  «        rt          |¦  «        dk    S dS )NFrU   )Úheaderr_   rb   Útuplerì   Úndarrayrp   )rC   r$  s     rD   Ú_have_mi_columnszPythonParser._have_mi_columns.  sF   € àŒ;ÐØ�5à”ˆÝ�f�t¥U­B¬JÐ7Ñ8Ô8ð 	Ý�v‘;”; ’?Ð"à�5rF   ú9tuple[list[list[Scalar | None]], int, set[Scalar | None]]c           
     óˆ  ‡‡‡— | j         Šd}d}t          ¦   «         }| j        ���| j        }| j        }t	          |t
          t          t          j        f¦  «        r|rg t          |¦  «        ¢|d         dz   ‘}n|g}g }t          |¦  «        D �]Ð\  }}	 |  
                    ¦   «         }	| j        |k    r|                      ¦   «         }	| j        |k    °�n/# t          $ �r!}
d| j        cxk     r|k    r„n n�|r||d         k    rst          t          t          |r
|d d…         n|¦  «        ¦  «        }dd                     |¦  «        › dt#          |¦  «        › d�}t%          d	|› d
| j        › d�¦  «        |
‚|rY|dk    rS|r| j                             ¦   «          |                     d gt#          |d         ¦  «        z  ¦  «         |||fcY d }
~
c S | j         st-          d¦  «        |
‚| j         d d …         }	Y d }
~
nd }
~
ww xY wg Šg Št          |	¦  «        D ][\  }}|dk    r;|r	d|› d|› �}nd|› �}‰                     |¦  «         ‰                     |¦  «         ŒF‰                     |¦  «         Œ\|�st/          t0          ¦  «        }ˆfd„t3          t#          ‰¦  «        ¦  «        D ¦   «         ‰z   }|D ]×}‰|         }|}||         }|dk    r°|dk    r'|dz   ||<   |› d|› �}|‰v r|dz  }n||         }|dk    °'| j        �|t7          | j        ¦  «        rh| j                             |¦  «        �N| j                             |¦  «        €4| j                             || j                             |¦  «        i¦  «         |‰|<   |dz   ||<   ŒØnv|rt||d         k    rht#          ‰¦  «        }| j        }|�t#          |¦  «        nd}t#          ‰¦  «        }||k    r	||z
  |k    s|dk    rd}d g|z  Š| j        d         g| _        |                     ‰¦  «         |                     ˆfd„‰D ¦   «         ¦  «         t#          |¦  «        dk    rt#          ‰¦  «        }�ŒÒ|r| j                             ¦   «          ‰��'	 |                      ¦   «         }n# t          $ r d }Y nw xY w|€dnt#          |¦  «        }t#          ‰¦  «        t#          |d         ¦  «        k    r"t#          ‰¦  «        |k    rt%          d¦  «        ‚t#          |¦  «        dk    rt?          d¦  «        ‚| j         �|  !                    |‰|¦  «         nt#          ‰¦  «        }| j"        �Ht#          ‰¦  «        t#          | j"        ¦  «        k    r#ˆfd„tG          | j"        ¦  «        D ¦   «         g}�n ‰g}�n|  !                    ||d         |¦  «        }nýt#          | j$        ¦  «        }|}‰s;t          t3          |¦  «        ¦  «        g}|  !                    ||d         |¦  «        }nª| j         �t#          ‰¦  «        |k    r(|  !                    ‰g‰|¦  «        }t#          ‰¦  «        }nhtK          | j         ¦  «        s4t#          ‰¦  «        t#          | j         ¦  «        k    rt%          d¦  «        ‚‰g}|  !                    ||d         |¦  «         |||fS )Nr   TéÿÿÿÿrU   ú[ú,z
], len of z, zPassed header=z	but only z lines in fileúNo columns to parse from filer¢   z	Unnamed: Ú_level_c                ó   •— g | ]}|‰v¯|‘Œ	S rÃ   rÃ   )r¤   rÄ   Úthis_unnamed_colss     €rD   r  z/PythonParser._infer_columns.<locals>.<listcomp>�  s/   ø€ ð &ð &ð &àØÐ$5Ð5Ð5ð à5Ð5Ð5rF   ú.Fc                ó    •— h | ]
}‰|         ’ŒS rÃ   rÃ   )r¤   rÄ   Úthis_columnss     €rD   ú	<setcomp>z.PythonParser._infer_columns.<locals>.<setcomp>°  s   ø€ Ð$PÐ$PÐ$P¸ \°!¤_Ð$PÐ$PÐ$PrF   zHNumber of passed names did not match number of header fields in the filez*Cannot pass names with multi-index columnsc                ó    •— g | ]
}‰|         ‘ŒS rÃ   rÃ   )r¤   rÄ   r¶   s     €rD   r  z/PythonParser._infer_columns.<locals>.<listcomp>Ó  s   ø€ ÐLÐLÐL¨Q  a¤ÐLÐLÐLrF   )&r¶   rê   r$  r'  r_   rb   r%  rì   r&  rË   Ú_buffered_liner[   Ú
_next_liner¨   Úmapr`   Újoinrp   rr   rY   ÚclearÚappendr   r   r£   ro   r­   r   ra   Úupdater«   Ú	TypeErrorÚusecolsÚ_handle_usecolsre   ÚsortedÚ_header_liner\   )rC   rg   Úclear_bufferrh   r$  Úhave_mi_columnsrk   ÚlevelÚhrr�   r!  ÚjoiÚmsgrÄ   rú   Úcol_nameÚcountsÚcol_loop_orderrÝ   Úold_colÚ	cur_countÚlcÚsicÚicÚunnamed_countÚ
first_lineÚlen_first_data_rowÚncolsr¶   r3  r0  s                               @@@rD   rf   zPythonParser._infer_columns9  sú  øøø€ ð ”
ˆØ ÐØˆÝ+.©5¬5ˆàŒ;Ñ"Ø”[ˆFØ"Ô3ˆOå˜&¥4­µ´
Ð";Ñ<Ô<ð "à"ð =Ø<�t F™|œ|Ð<¨V°B¬Z¸!©^Ð<�Føà ˜�à13ˆGÝ& vÑ.Ô.ð f=ñ f=‘	��rð)Ø×.Ò.Ñ0Ô0�Dàœ-¨2Ò-Ð-Ø#ŸšÑ0Ô0˜ð œ-¨2Ò-Ð-ùøõ %ð )ñ )ð )Ø˜4œ=Ð.Ð.Ò.Ð.¨BÒ.Ð.Ð.Ð.Ð.Ø+ð /Ø/1°V¸B´ZÒ/?Ð/?õ #¥3¥s¸?Ð,V¨F°3°B°3¬K¨KÐPVÑ#WÔ#WÑXÔX˜ØG #§(¢(¨3¡-¤-ÐGÐG½3¸s¹8¼8ÐGÐGÐG˜Ý(ØX¨SÐXÐX¸4¼=ÐXÐXÐXñô à"ð#ð 'ð K¨2°ª6¨6Ø'ð -Ø œHŸNšNÑ,Ô,Ð,ØŸš¨ vµ°G¸B´KÑ0@Ô0@Ñ'@ÑAÔAÐAØ&Ð(<¸lÐJÐJÐJÐJÐJÐJÐJÐJÐJàœ:ð WÝ,Ð-LÑMÔMÐSVÐVàœ: a a aœ=�D�D�D�D�D�Døøøøð1)øøøð4 57�Ø$&Ð!å% d™OœOð 
/ð 
/‘D�A�qØ˜B’w�wØ*ð 7Ø'D°1Ð'DÐ'D¸UÐ'DÐ'D˜H˜Hà'6°1  ˜Hà)×0Ò0°Ñ3Ô3Ð3Ø$×+Ò+¨HÑ5Ô5Ð5Ð5à$×+Ò+¨AÑ.Ô.Ð.Ð.à&ñ 06Ý*5µcÑ*:Ô*:�Fð&ð &ð &ð &å!&¥s¨<Ñ'8Ô'8Ñ!9Ô!9ð&ñ &ô &ð *ñ	&*�Nð ,ð 4ð 4˜Ø*¨1œo˜Ø"%˜Ø$*¨3¤K˜	à$ qš=˜=Ø"+¨a¢- -Ø2;¸a±-  w¡Ø)0Ð&>Ð&>°9Ð&>Ð&> Ø#&¨,Ð#6Ð#6Ø$-°¡N I Ià06°s´ Ið #,¨a¢- -ð !%¤
Ð 6Ý$0°´Ñ$<Ô$<ð !7à$(¤J§N¢N°7Ñ$;Ô$;Ð$GØ$(¤J§N¢N°3Ñ$7Ô$7Ð$?à $¤
× 1Ò 1°3¸¼
¿ºÀwÑ8OÔ8OÐ2PÑ QÔ QÐ QØ*-˜ Q™Ø&/°!¡m˜˜s™˜ð-4ð. %ð 6ð ˜V BœZÒ'Ð'Ý  Ñ.Ô.˜Ø"œn˜Ø),¨�S ™XœX˜X¸a˜Ý(+Ð,=Ñ(>Ô(>˜ð  -Ò/Ð/°B¸±G¸mÒ4KÐ4KÐPRÐVWÒPWÐPWØ+0˜LØ,0¨6°B©;˜LØ(,¬°¬ ~˜DœHà—’˜|Ñ,Ô,Ð,Ø×#Ò#Ð$PÐ$PÐ$PÐ$PÐ>OÐ$PÑ$PÔ$PÑQÔQÐQå�w‘<”< 1Ò$Ð$Ý+.¨|Ñ+<Ô+<Ð(ùàð !Ø”—’Ñ Ô Ð ð Ñ ð&Ø!%§¢Ñ!2Ô!2�J�JøÝ$ð &ð &ð &Ø!%�J�J�Jð&øøøð +5Ð*< Q QÅ#ÀjÁ/Ä/Ð"å�u‘:”:¥ G¨A¤J¡¤Ò/Ð/µC¸±J´JÐASÒ4SÐ4SÝ$ð>ñô ð õ �w‘<”< !Ò#Ð#Ý#Ð$PÑQÔQÐQà”<Ð+ð ×(Ò(¨°%Ð9MÑNÔNÐNÐNå+.¨u©:¬:Ð(ØÔ$Ð0µS¸±Z´ZÅ3ØÔ%ñDô Dò 6ð 6ð  MÐLÐLÐLµ&¸Ô9JÑ2KÔ2KÐLÑLÔLÐM�G‘Gà$˜g�G‘Gà×.Ò.Ø˜W QœZÐ)=ñô ��õ ˜Ô)Ñ*Ô*ˆEØ#(Ð àð AÝ¥ e¡¤Ñ-Ô-Ð.�Ø×.Ò.¨w¸À¼
ÀEÑJÔJ��Ø”Ð%­¨U©¬°uÒ)<Ð)<Ø×.Ò.°¨w¸¸uÑEÔE�Ý'*¨5¡z¤zÐ$Ð$Ý˜dœlÑ+Ô+ð Aµ°E±
´
½cÀ$Ä,Ñ>OÔ>OÒ0OÐ0OÝ ð0ñô ð ð !˜'�Ø×$Ò$ W¨g°a¬j¸%Ñ@Ô@Ð@àÐ,¨lÐ:Ð:s7   Â>CÃH ÃC)G;ÇH Ç&G;Ç;H Ñ>R ÒR"Ò!R"c                ó¾   — | j         �d S 	 |                      ¦   «         }n=# t          $ r0}| j        st	          d¦  «        |‚| j        d d …         }Y d }~nd }~ww xY w|S )Nr-  )r$  r6  r¨   r¶   r   )rC   r�   r!  s      rD   rA  zPythonParser._header_lineð  s„   € ð Œ;Ð"Ø�4ð	!Ø×&Ò&Ñ(Ô(ˆDˆDøÝð 	!ð 	!ð 	!Ø”:ð OÝ$Ð%DÑEÔEÈ3ÐNà”:˜a˜a˜a”=ˆDˆDˆDˆDˆDˆDøøøøð		!øøøð
 ˆs   ‹   
Aª&AÁArk   úlist[list[Scalar | None]]Úusecols_keyúlist[Scalar | None]rg   r£   c                ó¨  ‡‡— | j         ��Gt          | j         ¦  «        rt          | j         |¦  «        Šnût          d„ | j         D ¦   «         ¦  «        r®t	          |¦  «        dk    rt          d¦  «        ‚g Š| j         D ]�}t          |t          ¦  «        rU	 ‰                     | 	                    |¦  «        ¦  «         ŒA# t
          $ r |  
                    | j         |¦  «         Y Œhw xY w‰                     |¦  «         Œ‚n/ˆfd„| j         D ¦   «         }|rt          d|› d�¦  «        ‚| j         Šˆfd„|D ¦   «         }t          ‰¦  «        | _        |S )	zb
        Sets self._col_indices

        usecols_key is used if there are string usecols.
        Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rA   )r_   r`   )r¤   Úus     rD   r¦   z/PythonParser._handle_usecols.<locals>.<genexpr>  s,   è è € Ð>Ð>¨A•Z ¥3Ñ'Ô'Ð>Ð>Ð>Ð>Ð>Ð>rF   rU   z4If using multiple headers, usecols must be integers.c                ó    •— g | ]
}|‰k    ¯|‘ŒS rÃ   rÃ   )r¤   rÝ   rg   s     €rD   r  z0PythonParser._handle_usecols.<locals>.<listcomp>  s+   ø€ ð #ð #ð #Ø°3Ð:NÒ3NÐ3N�CÐ3NÐ3NÐ3NrF   z<Defining usecols with out-of-bounds indices is not allowed. z are out-of-bounds.c                óF   •— g | ]}ˆfd „t          |¦  «        D ¦   «         ‘ŒS )c                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS rÃ   rÃ   )r¤   rÄ   ÚnÚcol_indicess      €rD   r  z;PythonParser._handle_usecols.<locals>.<listcomp>.<listcomp>)  s'   ø€ ÐEÐEÐE‘t�q˜!°A¸Ð4DÐ4D�Ð4DÐ4DÐ4DrF   )rË   )r¤   r  r_  s     €rD   r  z0PythonParser._handle_usecols.<locals>.<listcomp>(  sF   ø€ ð ð ð àð FÐEÐEÐE�y¨Ñ0Ô0ÐEÑEÔEðð ð rF   )r>  r\   r(   Úanyrp   rr   r_   r`   r;  r·   Ú_validate_usecols_namesr   r@  re   )rC   rk   rV  rg   rÝ   Úmissing_usecolsr_  s      `  @rD   r?  zPythonParser._handle_usecolsÿ  sÓ  øø€ ð Œ<Ñ#Ý˜œÑ%Ô%ð +Ý7¸¼ÀkÑRÔR��ÝÐ>Ð>°´Ð>Ñ>Ô>Ñ>Ô>ð +Ý�w‘<”< !Ò#Ð#Ý$ØNñô ð ð !�àœ<ð 0ð 0�CÝ! #¥sÑ+Ô+ð 0ðTØ'×.Ò.¨{×/@Ò/@ÀÑ/EÔ/EÑFÔFÐFÐFøÝ)ð Tð Tð TØ ×8Ò8¸¼À{ÑSÔSÐSÐSÐSðTøøøð $×*Ò*¨3Ñ/Ô/Ð/Ð/ð0ð#ð #ð #ð #Ø#'¤<ð#ñ #ô #�ð #ð Ý%ð@Ø*ð@ð @ð @ñô ð ð #œl�ðð ð ð à%ðñ ô ˆGõ !' {Ñ 3Ô 3ˆDÔØˆs   Â(B?Â?%C'Ã&C'úlist[Scalar]c                ót   — t          | j        ¦  «        dk    r| j        d         S |                      ¦   «         S )zH
        Return a line from buffer, filling buffer if required.
        r   )rp   rY   r7  r†   s    rD   r6  zPythonParser._buffered_line/  s3   € õ ˆtŒx‰=Œ=˜1ÒÐØ”8˜A”;Ðà—?’?Ñ$Ô$Ð$rF   Ú	first_rowc                óÐ  — |s|S t          |d         t          ¦  «        s|S |d         s|S |d         d         }|t          k    r|S |d         }t          |¦  «        dk    rl|d         | j        k    r[d}|d         }|dd…                              |¦  «        dz   }|||…         }t          |¦  «        |dz   k    r|||dz   d…         z  }n
|dd…         }|g}||dd…         z   S )a-  
        Checks whether the file begins with the BOM character.
        If it does, remove it. In addition, if there is quoting
        in the field subsequent to the BOM, remove it as well
        because it technically takes place at the beginning of
        the name, not the middle of it.
        r   rU   é   N)r_   r`   Ú_BOMrp   rI   r·   )	rC   re  Ú	first_eltÚfirst_row_bomÚstartÚquoteÚendÚnew_rowÚnew_row_lists	            rD   Ú_check_for_bomzPythonParser._check_for_bom8  s.  € ð ð 	ØÐõ
 ˜) Aœ,­Ñ,Ô,ð 	ØÐð ˜Œ|ð 	ØÐð ˜a”L ”Oˆ	Ø�ÒÐØÐà! !œˆõ ˆ}ÑÔ Ò!Ð! m°AÔ&6¸$¼.Ò&HÐ&HØˆEØ! !Ô$ˆEØ   Ô#×)Ò)¨%Ñ0Ô0°1Ñ4ˆCð $ E¨# IÔ.ˆGõ �=Ñ!Ô! C¨!¡GÒ+Ð+Ø˜=¨¨q©¨¨Ô3Ñ3�øð $ A B BÔ'ˆGà&- YˆØ˜i¨¨¨œmÑ+Ð+rF   r�   úSequence[Scalar]c                ó:   — | pt          d„ |D ¦   «         ¦  «        S )zô
        Check if a line is empty or not.

        Parameters
        ----------
        line : str, array-like
            The line of data to check.

        Returns
        -------
        boolean : Whether or not the line is empty.
        c              3  ó   K  — | ]}| V — Œd S rA   rÃ   ©r¤   rB   s     rD   r¦   z.PythonParser._is_line_empty.<locals>.<genexpr>z  s$   è è € Ð3Ð3¨ 1˜uÐ3Ð3Ð3Ð3Ð3Ð3rF   )Úall©rC   r�   s     rD   Ú_is_line_emptyzPythonParser._is_line_emptym  s(   € ð ˆxÐ3�3Ð3Ð3¨dÐ3Ñ3Ô3Ñ3Ô3Ð3rF   c                óÌ  — t          | j        t          ¦  «        �r|                      | j        ¦  «        rH| j        t          | j        ¦  «        k    rn*| xj        dz  c_        |                      | j        ¦  «        °H	 	 |                      | j        | j                 g¦  «        d         }| xj        dz  c_        | j        s+|                      | j        | j        dz
           ¦  «        s|rnD| j        r!|  	                    |g¦  «        }|r	|d         }nn# t          $ r}t          |‚d }~ww xY wŒ³nç|                      | j        ¦  «        r>| xj        dz  c_        t          | j        ¦  «         |                      | j        ¦  «        °>	 |                      | j        dz   ¬¦  «        }| xj        dz  c_        |�]|                      |g¦  «        d         }| j        r"|  	                    |g¦  «        }|r	|d         }nn|                      |¦  «        s|rnŒŽ| j        dk    r|                      |¦  «        }| xj        dz  c_        | j                             |¦  «         |S )NrU   Tr   ©Úrow_num)r_   rX   rb   r]   rZ   rp   r“   rO   rw  Ú_remove_empty_linesÚ
IndexErrorr¨   ÚnextÚ_next_iter_linerp  r[   rY   r;  )rC   r�   Úretr!  Ú	orig_lines        rD   r7  zPythonParser._next_line|  sŠ  € Ý�d”i¥Ñ&Ô&ñ )	Ø—-’- ¤Ñ)Ô)ð Ø”8�s 4¤9™~œ~Ò-Ð-ØØ�”˜A‘�”ð —-’- ¤Ñ)Ô)ð ð
1ð1Ø×/Ò/°´¸4¼8Ô1DÐ0EÑFÔFÀqÔI�DØ�H”H ‘M�H”HàÔ0ð Ø×+Ò+¨D¬I°d´hÀ±lÔ,CÑDÔDðØHLðð ØÔ,ð "Ø"×6Ò6¸°vÑ>Ô>˜Øð "Ø#& q¤6˜DØ!øøÝ!ð 1ð 1ð 1Ý'¨SÐ0øøøøð1øøøð1øð" —-’- ¤Ñ)Ô)ð  Ø�”˜A‘�”Ý�T”Y‘”�ð —-’- ¤Ñ)Ô)ð  ðØ ×0Ò0¸¼ÀA¹Ð0ÑFÔF�	Ø�”˜A‘�”àÐ(Ø×/Ò/°°Ñ<Ô<¸QÔ?�DàÔ,ð Ø"×6Ò6¸°vÑ>Ô>˜àð "Ø#& q¤6˜DØ!ð"ð ×,Ò,¨YÑ7Ô7ð ¸4ð Øðð& Œ8�qŠ=ˆ=Ø×&Ò& tÑ,Ô,ˆDàˆŒ˜ÑˆŒØŒ�Š˜ÑÔÐØˆs   Â A-D Ã.'D Ä
D.Ä!D)Ä)D.rG  r`   rz  c                ó  — | j         | j        j        k    rt          |¦  «        ‚| j         | j        j        k    st          | j         ¦  «        r1t          j        d|› d|› d�t          t          ¦   «         ¬¦  «         dS dS )a   
        Alert a user about a malformed row, depending on value of
        `self.on_bad_lines` enum.

        If `self.on_bad_lines` is ERROR, the alert will be `ParserError`.
        If `self.on_bad_lines` is WARN, the alert will be printed out.

        Parameters
        ----------
        msg: str
            The error message to display.
        row_num: int
            The row number where the parsing error occurred.
            Because this row number is displayed, we 1-index,
            even though we 0-index internally.
        zSkipping line z: r‚   rã   N)
Úon_bad_linesÚBadLineHandleMethodÚERRORr   ÚWARNr\   rï   rð   r   r   )rC   rG  rz  s      rD   Ú_alert_malformedzPythonParser._alert_malformed²  s    € ð" Ô Ô 8Ô >Ò>Ð>Ý˜cÑ"Ô"Ð"ØÔ Ô 8Ô =Ò=Ð=ÅØÔñB
ô B
Ð=õ ŒMØ3 Ð3Ð3¨CÐ3Ð3Ð3ÝÝ+Ñ-Ô-ðñ ô ð ð ð ð >Ð=rF   úlist[Scalar] | Nonec                óh  — 	 t          | j        t          ¦  «        rJ ‚t          | j        ¦  «        }|S # t          j        $ rn}| j        | j        j        | j        j	        fv rDt          |¦  «        }d|v sd|v rd}| j        dk    r
d}|d|z   z  }|                      ||¦  «         Y d}~dS d}~ww xY w)a[  
        Wrapper around iterating through `self.data` (CSV source).

        When a CSV error is raised, we check for specific
        error messages that allow us to customize the
        error message displayed to the user.

        Parameters
        ----------
        row_num: int
            The row number of the line being parsed.
        z	NULL bytezline contains NULz„NULL byte detected. This byte cannot be processed in Python's native csv library at the moment, so please pass in engine='c' insteadr   z¡Error could possibly be due to parsing errors in the skipped footer rows (the skipfooter keyword is only applied after Python's csv library has parsed all rows).ú. N)r_   rX   rb   r}  r‘   ÚErrorr‚  rƒ  r„  r…  r`   rG   r†  )rC   rz  r�   ÚerG  Úreasons         rD   r~  zPythonParser._next_iter_lineÎ  sò   € ð	Ý! $¤)­TÑ2Ô2Ð2Ð2Ð2Ý˜œ	‘?”?ˆDàˆKøÝŒyð 	ð 	ð 	ØÔ ØÔ(Ô.ØÔ(Ô-ð%ð ð õ ˜!‘f”f�à #Ð%Ð%Ð)<ÀÐ)CÐ)Cð?ð ð ”? QÒ&Ð&ð%ð ð ˜4 &™=Ñ(�Cà×%Ò% c¨7Ñ3Ô3Ð3Ø�4�4�4�4�4øøøøð5	øøøs   ‚14 ´B1ÁA#B,Â,B1r™   úlist[list[Scalar]]c                ól  — | j         €|S g }|D ]¥}g }|D ]‰}t          |t          ¦  «        r| j         |vs	|| j        v r|                     |¦  «         Œ?|d |                     | j         ¦  «        …         }t          |¦  «        dk    r|                     |¦  «          |                     |¦  «         Œ¦|S )Nr   )rS   r_   r`   rÕ   r;  Úfindrp   )rC   r™   r  r�   ÚrlrB   s         rD   r“   zPythonParser._check_commentsü  sÉ   € ØŒ<ÐØˆLØˆØð 	ð 	ˆDØˆBØð ð �å" 1¥cÑ*Ô*ð
à”|¨1Ð,Ð,Ø˜DœNÐ*Ð*à—I’I˜a‘L”L�L�LàÐ0˜AŸFšF 4¤<Ñ0Ô0Ð0Ô1�AÝ˜1‘v”v ’z�zØŸ	š	 !™œ˜ØØ�JŠJ�r‰NŒNˆNˆNØˆ
rF   úlist[list[T]]c                ó   — d„ |D ¦   «         }|S )a—  
        Iterate through the lines and remove any that are
        either empty or contain only one whitespace value

        Parameters
        ----------
        lines : list of list of Scalars
            The array of lines that we are to filter.

        Returns
        -------
        filtered_lines : list of list of Scalars
            The same array of lines with the "empty" ones removed.
        c                óÈ   — g | ]_}t          |¦  «        d k    sHt          |¦  «        d k    ¯(t          |d         t          ¦  «        r|d                              ¦   «         ¯]|‘Œ`S )rU   r   )rp   r_   r`   rŒ   ©r¤   r�   s     rD   r  z4PythonParser._remove_empty_lines.<locals>.<listcomp>!  sb   € ð 	
ð 	
ð 	
àå�D‘	”	˜A’�å˜‘I”I ’N�N­J°t¸A´wÅÑ,DÔ,D�NÈÈQÌÏÊÉÌ�Nð ð
 #�N�NrF   rÃ   )rC   r™   r  s      rD   r{  z PythonParser._remove_empty_lines  s'   € ð 	
ð 	
àð	
ñ 	
ô 	
ˆð ˆ
rF   c                óN   — | j         €|S |                      || j         d¬¦  «        S )Nr¢   ©r™   ÚsearchÚreplace)rQ   Ú_search_replace_num_columns©rC   r™   s     rD   Ú_check_thousandszPythonParser._check_thousands-  s5   € ØŒ>Ð!ØˆLà×/Ò/Ø ¤¸ð 0ñ 
ô 
ð 	
rF   r—  r˜  c                ó†  — g }|D ]»}g }t          |¦  «        D ]’\  }}t          |t          ¦  «        r9||vs5|| j        v s,| j                             |                     ¦   «         ¦  «        s|                     |¦  «         Œi|                     |                     ||¦  «        ¦  «         Œ“|                     |¦  «         Œ¼|S rA   )	rË   r_   r`   r9   r|   r—  rŒ   r;  r˜  )	rC   r™   r—  r˜  r  r�   r�  rÄ   rB   s	            rD   r™  z(PythonParser._search_replace_num_columns5  sÉ   € ð ˆØð 	ð 	ˆDØˆBÝ! $™œð 	:ð 	:‘��1å" 1¥cÑ*Ô*ð:à Q��Ø˜DÔ6Ð6Ð6Øœ8Ÿ?š?¨1¯7ª7©9¬9Ñ5Ô5ð 7ð —I’I˜a‘L”L�L�Là—I’I˜aŸiši¨°Ñ8Ô8Ñ9Ô9Ð9Ð9Ø�JŠJ�r‰NŒNˆNˆNØˆ
rF   c                ól   — | j         t          d         k    r|S |                      || j         d¬¦  «        S )NrR   r1  r–  )rR   r*   r™  rš  s     rD   Ú_check_decimalzPythonParser._check_decimalH  s?   € ØŒ<�?¨9Ô5Ò5Ð5ØˆLà×/Ò/Ø ¤°cð 0ñ 
ô 
ð 	
rF   ú@tuple[Sequence[Hashable] | None, list[Hashable], list[Hashable]]c                ó¦  — | j         }t          |¦  «        }t          |¦  «        }| j        �| j        }n(	 |                      ¦   «         }n# t          $ r d}Y nw xY w	 |                      ¦   «         }n# t          $ r d}Y nw xY wd}|�é| j        }|durt          |¦  «        | j        z
  }|�Å| j        �¾|durºt          |¦  «        t          |¦  «        | j        z   k    r’t          t          t          |¦  «        ¦  «        ¦  «        | _        | j
        dd…         | _
        t          |¦  «        D ]}|                     d|¦  «         Œt          |¦  «        }t          |¦  «        | _        |||fS |dk    r2d| _        | j        €!t          t          |¦  «        ¦  «        | _        d}n$|                      || j        ¦  «        \  }}	| _        |||fS )aÐ  
        Try several cases to get lines:

        0) There are headers on row 0 and row 1 and their
        total summed lengths equals the length of the next line.
        Treat row 0 as columns and row 1 as indices
        1) Look for implicit index: there are more columns
        on row 1 than row 0. If this is true, assume that row
        1 lists index columns and row 0 lists normal columns.
        2) Get index from the columns if it was listed.
        Nr   FrU   T)rm   rb   rA  r7  r¨   r«   rp   rg   r$  ro   rY   ÚreversedÚinsertrÉ   Ú_clean_index_names)
rC   rk   rm   r�   Ú	next_lineÚimplicit_first_colsr«   rú   Ú
index_namert   s
             rD   rn   zPythonParser._get_index_nameP  s  € ð '+¤oˆÝ˜'‘]”]ˆ
Ý�w‘-”-ˆð ÔÐ(ØÔ$ˆDˆDðØ—’Ñ(Ô(��øÝ ð ð ð Ø���ðøøøð	ØŸšÑ)Ô)ˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøð  ÐØÐð œˆIØ Ð%Ð%Ý&)¨$¡i¤i°$Ô2KÑ&KÐ#ð Ð%Ø”KÐ+Ø UÐ*Ð*å�y‘>”>¥S¨¡Y¤Y°Ô1JÑ%JÒJÐJå%)­%µ°D±	´	Ñ*:Ô*:Ñ%;Ô%;�D”NØ#œx¨¨¨œ|�D”Hå% d™^œ^ð -ð -˜ØŸš q¨!Ñ,Ô,Ð,Ð,õ "& g¡¤�JÝ03°G±´�DÔ-Ø ¨WÐ4Ð4à Ò"Ð"à#'ˆDÔ ØŒ~Ð%Ý!%¥eÐ,?Ñ&@Ô&@Ñ!AÔ!A�”àˆJˆJð /3×.EÒ.EØ˜œñ/ô /Ñ+ˆZ˜˜DœNð ˜: wÐ.Ð.s#   ¶A ÁAÁAÁA3 Á3BÂBrµ   c                óœ  ‡ ‡— ‰ j         }‰ j        r|t          ‰ j        ¦  «        z  }t	          d„ |D ¦   «         ¦  «        }||k    �r‰ j        du�rü‰ j        �€ô‰ j        r‰ j        nd}g }t          |¦  «        }t          |¦  «        }g }|D �]D\  }}	t          |	¦  «        }
|
|k    �rt          ‰ j	        ¦  «        rŸ‰  	                    |	¦  «        }|�‡t          t          t                   |¦  «        }t          |¦  «        |k    r?‰ j        ||z
  |z   z
  }|                     |t          |¦  «        df¦  «         |d |…         }|                     |¦  «         ŒÏ‰ j	        ‰ j        j        ‰ j        j        fv r?‰ j        ||z
  |z   z
  }|                     ||
df¦  «         ‰ j	        ‰ j        j        k    r n�Œ/|                     |	¦  «         �ŒF|D ]w\  }}
}d|› d|dz   › d	|
› �}|dk    r|d
z  }n>‰ j        r7t          ‰ j        ¦  «        dk    r‰ j        t(          j        k    r
d}|d|z   z  }‰                      ||dz   ¦  «         Œxt          t/          j        ||¬¦  «        j        ¦  «        }‰ j        rO‰ j        €J ‚‰ j        Š‰ j        rˆˆ fd„t          |¦  «        D ¦   «         }nˆfd„t          |¦  «        D ¦   «         }|S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S rA   )rp   )r¤   Úrows     rD   r¦   z-PythonParser._rows_to_cols.<locals>.<genexpr>£  s(   è è € Ð2Ð2 3•c˜#‘h”hÐ2Ð2Ð2Ð2Ð2Ð2rF   Fr   r\   Únormalz	Expected z fields in line rU   z, saw z from bad_lines callablezXError could possibly be due to quotes being ignored when a multi-char delimiter is used.r‰  )Ú	min_widthc                ó|   •— g | ]8\  }}|t          ‰j        ¦  «        k     s|t          ‰j        ¦  «        z
  ‰v ¯6|‘Œ9S rÃ   )rp   r«   )r¤   rÄ   Úar_  rC   s      €€rD   r  z.PythonParser._rows_to_cols.<locals>.<listcomp>ä  sY   ø€ ð "ð "ð "á˜˜1à�C ¤Ñ/Ô/Ò/Ð/Ø�s 4¤>Ñ2Ô2Ñ2°kÐAÐAð	 ð BÐAÐArF   c                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS rÃ   rÃ   )r¤   rÄ   r­  r_  s      €rD   r  z.PythonParser._rows_to_cols.<locals>.<listcomp>í  s.   ø€ ð "ð "ð "Ù˜!˜Q¸qÀKÐ?OÐ?O�AÐ?OÐ?OÐ?OrF   )rg   rÉ   rp   r«   Úmaxr>  rG   rË   r\   r‚  r   rb   r   rZ   r;  rƒ  r„  r…  rH   rN   r‘   Ú
QUOTE_NONEr†  r   Úto_object_arrayr3   re   )rC   rµ   Úcol_lenÚmax_lenÚfootersÚ	bad_linesÚiter_contentÚcontent_lenrÄ   Ú_contentÚ
actual_lenÚnew_lrz  ÚsourcerG  rŒ  Úzipped_contentr_  s   `                @rD   r°   zPythonParser._rows_to_cols�  si  øø€ ØÔ+ˆàÔð 	+Ø•s˜4œ>Ñ*Ô*Ñ*ˆGåÐ2Ð2¨'Ð2Ñ2Ô2Ñ2Ô2ˆð
 �WÒÑ ¤°uÐ!<Ñ!<ÀÄÑAUØ)-¬Ð?�d”o�o¸aˆGØˆIå$ WÑ-Ô-ˆLÝ˜g™,œ,ˆKØˆGà+ð -ñ -‘��8Ý  ™]œ]�
Ø Ò'Ñ'Ý Ô 1Ñ2Ô2ð "Ø $× 1Ò 1°(Ñ ;Ô ;˜Ø Ð,Ý$(­­f¬°uÑ$=Ô$=˜EÝ" 5™zœz¨GÒ3Ð3Ø*.¬(°kÀA±oÈÑ6OÑ*P Ø )× 0Ò 0°'½3¸u¹:¼:ÀzÐ1RÑ SÔ SÐ SØ(-¨h¨w¨h¬ Ø#ŸNšN¨5Ñ1Ô1Ð1øàÔ*ØÔ0Ô6ØÔ0Ô5ð/ð ð ð #'¤(¨k¸A©oÀÑ.GÑ"H˜Ø!×(Ò(¨'°:¸xÐ)HÑIÔIÐIØÔ,°Ô0HÔ0NÒNÐNØ!˜Eùà—N’N 8Ñ,Ô,Ð,Ñ,à/8ð 8ð 8Ñ+�˜ VàX ÐXÐX¸À1¹ÐXÐXÈJÐXÐXð ð ˜ZÒ'Ð'ØÐ5Ñ5�C�Cà”Nð
)å˜DœNÑ+Ô+¨aÒ/Ð/Øœ­¬Ò6Ð6ðGð ð ˜4 &™=Ñ(�Cà×%Ò% c¨7°Q©;Ñ7Ô7Ð7Ð7õ �cÔ1°'ÀWÐMÑMÔMÔOÑPÔPˆàŒ<ð 	ØÔ$Ð0Ð0Ð0ØÔ+ˆKàÔ#ð ð"ð "ð "ð "ð "å )¨.Ñ 9Ô 9ð"ñ "ô "��ð"ð "ð "ð "Ý"+¨NÑ";Ô";ð"ñ "ô "�ð ÐrF   c                óô  — | j         }d }|�Tt          | j         ¦  «        |k    r%| j         d |…         | j         |d …         c}| _         n|t          | j         ¦  «        z  }|�€#t          | j        t          ¦  «        r¨| j        t          | j        ¦  «        k    rt          ‚|€)| j        | j        d …         }t          | j        ¦  «        }n&| j        | j        | j        |z   …         }| j        |z   }|                      |¦  «        }|                     |¦  «         || _        �nYg }	 |�¥d}d}| j        �| j        nd}||k     rQt          | j        ¦  «        }|  
                    ||z   ¦  «        s|dz  }|dz  }|                     |¦  «         ||k     °Qt          |¦  «        }	|                      |¦  «        }|                     |¦  «         nAd}	 |                      | j        |z   dz   ¬¦  «        }
|dz  }|
�|                     |
¦  «         Œ>n]# t          $ rP t          |¦  «        }	|                      |¦  «        }|                     |¦  «         t          |¦  «        dk    r‚ Y nw xY w| xj        |	z  c_        g | _         n|}| j        r|d | j         …         }|                      |¦  «        }| j        r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        S )Nr   rU   Try  )rY   rp   r_   rX   rb   rZ   r¨   Ú_remove_skipped_rowsr—   r}  r]   r;  r~  rG   r“   rO   r{  r›  rž  )rC   r�   r™   Únew_rowsÚnew_posÚ	row_indexÚrow_ctrÇ   rn  Úlen_new_rowsÚnext_rows              rD   r§   zPythonParser._get_linesò  s#  € Ø”ˆØˆð Ðå�4”8‰}Œ} Ò$Ð$Ø%)¤X¨e¨t¨e¤_°d´h¸t¸u¸u´oÐ"�˜$œ(˜(ð �˜DœH™œÑ%�àÑÝ˜$œ)¥TÑ*Ô*ð 0)Ø”8�c $¤)™nœnÒ,Ð,Ý'Ð'Ø�<Ø#œy¨¬¨¨Ô4�HÝ! $¤)™nœn�G�Gà#œy¨¬°D´H¸t±OÐ)CÔD�HØ"œh¨™o�Gà×4Ò4°XÑ>Ô>�Ø—’˜XÑ&Ô&Ð&Ø"�”‘ð �ðØÐ'Ø$%˜	Ø!"˜Ø-1¬XÐ-A ¤ Àq˜Ø$ tšm˜mÝ&*¨4¬9¡o¤o˜GØ#'§=¢=°¸)Ñ1CÑ#DÔ#Dð ,Ø &¨!¡ Ø%¨™N˜IØ$ŸOšO¨GÑ4Ô4Ð4ð % tšm˜mõ (+¨8¡}¤}˜Ø#'×#<Ò#<¸XÑ#FÔ#F˜ØŸš XÑ.Ô.Ð.Ð.à ˜ð:Ø'+×';Ò';ÀDÄHÈtÁOÐVWÑDWÐ';Ñ'XÔ'X˜HØ  A™I˜Dà'Ð3Ø (§¢°Ñ 9Ô 9Ð 9ð:ð	 /øõ %ð ð ð Ý#& x¡=¤=�LØ#×8Ò8¸ÑBÔB�HØ—L’L Ñ*Ô*Ð*Ý˜5‘z”z Q’�Øð '�ð	øøøð �”˜LÑ(�”àˆDŒHˆHàˆEàŒ?ð 	.ØÐ,˜Tœ_Ð,Ð,Ô-ˆEà×$Ò$ UÑ+Ô+ˆØÔ ð 	4Ø×,Ò,¨UÑ3Ô3ˆEØ×%Ò% eÑ,Ô,ˆØ×"Ò" 5Ñ)Ô)Ð)s   Ä(C(H ÈAI+É*I+r¿  c                óL   ‡ — ‰ j         rˆ fd„t          |¦  «        D ¦   «         S |S )Nc                óT   •— g | ]$\  }}‰                      |‰j        z   ¦  «        °"|‘Œ%S rÃ   )r]   rZ   )r¤   rÄ   r©  rC   s      €rD   r  z5PythonParser._remove_skipped_rows.<locals>.<listcomp>B  sD   ø€ ð ð ð Ù˜˜3¸T¿]º]È1ÈtÌxÉ<Ñ=XÔ=XðØðð ð rF   )r?   rË   )rC   r¿  s   ` rD   r¾  z!PythonParser._remove_skipped_rows@  sG   ø€ ØŒ=ð 	ðð ð ð Ý"+¨HÑ"5Ô"5ðñ ô ð ð ˆrF   c                ó`  — t          ¦   «         }| j        r0| j        r)| j        €J ‚|                      | j        | j        ¦  «        }| j        rá| j        rÚ| j        €J ‚t          | j        | j        d¬¦  «        D ]´\  }}t          | j        t          ¦  «        s)t          | j        ¦  «        s| 
                    |¦  «         t          | j        t          ¦  «        rR|| j        v rIt          | j        |         ¦  «        rt          | j        |         ¦  «        r| 
                    |¦  «         Œµ|S )NT©r‰   )rê   rk   ræ   re   Ú_set_noconvert_dtype_columnsr­   Úzipr_   rÖ   r   Úaddr   )rC   Úno_thousands_columnsrÄ   rÝ   s       rD   rq   z%PythonParser._set_no_thousand_columnsG  sG  € Ý),©¬ÐØŒ<ð 	˜DÔ,ð 	ØÔ$Ð0Ð0Ð0Ø#'×#DÒ#DØÔ! 4¤<ñ$ô $Ð ð Œ<ð 	0˜DœJð 	0ØÔ$Ð0Ð0Ð0Ý˜dÔ/°´ÀdÐKÑKÔKð 0ð 0‘��3Ý! $¤*­dÑ3Ô3ð 0Õ<LØ”Jñ=ô =ð 0ð )×,Ò,¨QÑ/Ô/Ð/å˜tœz­4Ñ0Ô0ð0à˜tœzÐ)Ð)å,¨T¬Z¸¬_Ñ=Ô=ð *õ )¨¬°C¬Ñ9Ô9ð *ð )×,Ò,¨QÑ/Ô/Ð/øØ#Ð#rF   )r:   r;   r<   r=   )r<   rv   )r:   r}   r<   r~   rA   )r�   rž   r<   rŸ   )r»   r¿   r<   rÀ   )rÌ   rž   r<   rŸ   )rX   rÐ   r<   rÑ   )NN)rà   r.   r<   rá   )rû   r0   rý   r1   r<   r0   )r<   r"  )r<   r(  )rk   rU  rV  rW  rg   r£   r<   rU  )r<   rc  )re  rc  r<   rc  )r�   rq  r<   r"  )rG  r`   rz  r£   r<   r=   )rz  r£   r<   r‡  )r™   r�  r<   r�  ©r™   r‘  r<   r‘  )r™   r�  r—  r`   r˜  r`   r<   r�  )r<   rŸ  )rµ   r�  r<   r¿   )r�   rž   r<   r�  )r¿  r�  r<   r�  )r<   r8   )$rƒ   r„   r…   Ú__annotations__rW   r   r|   rd   r¾   r±   rÏ   r²   r   rØ   rö   r'  rf   rA  r?  r6  rp  rw  r7  r†  r~  r“   r{  r›  r™  rž  rn   r°   r§   r¾  rq   Ú__classcell__)ru   s   @rD   r7   r7   `   s  ø€ € € € € € Ø#Ð#Ð#Ñ#ðUHð UHð UHð UHð UHð UHðn ð
!ð 
!ð 
!ñ „^ð
!ðFð Fð Fð FðR "&ð60ð 60ð 60ð 60ð 60ðpð ð ð ð4 "&ð
$ð 
$ð 
$ð 
$ð 
$ð!
ð !
ð !
ð !
ðF ð ØðRð Rð Rð Rñ „UðRðh ðGð Gð Gñ „UðGðR ðð ð ñ „^ððu;ð u;ð u;ð u;ðn ðð ñ „^ðð.ð .ð .ð .ð`%ð %ð %ð %ð3,ð 3,ð 3,ð 3,ðj4ð 4ð 4ð 4ð4ð 4ð 4ð 4ðlð ð ð ð8,ð ,ð ,ð ,ð\ð ð ð ð*ð ð ð ð8
ð 
ð 
ð 
ðð ð ð ð&
ð 
ð 
ð 
ðK/ð K/ð K/ð K/ðZSð Sð Sð SðjL*ð L*ð L*ð L*ð L*ð\ð ð ð ð$ð $ð $ð $ð $ð $ð $ð $rF   r7   c                  ó>   — e Zd ZdZ	 	 ddd„Zddd„Z	 ddd„Zdd„ZdS )ÚFixedWidthReaderz(
    A reader of fixed-width lines.
    Néd   r:   r}   Úcolspecsú(list[tuple[int, int]] | Literal['infer']rH   ú
str | NonerS   r?   úset[int] | NoneÚinfer_nrowsr£   r<   r=   c           	     óŽ  — || _         d | _        |rd|z   nd| _        || _        |dk    r|                      ||¬¦  «        | _        n|| _        t          | j        t          t          f¦  «        s$t          dt          |¦  «        j        › �¦  «        ‚| j        D ]ª}t          |t          t          f¦  «        r}t          |¦  «        dk    rjt          |d         t          t          j        t          d ¦  «        f¦  «        r5t          |d         t          t          j        t          d ¦  «        f¦  «        st          d	¦  «        ‚Œ«d S )
Nz
z
	 Úinfer)r×  r?   z;column specifications must be a list or tuple, input was a rg  r   rU   zEEach column specification must be 2 element tuple or list of integers)r:   ÚbufferrH   rS   Údetect_colspecsrÓ  r_   r%  rb   r=  r  rƒ   rp   r£   rì   Úinteger)rC   r:   rÓ  rH   rS   r?   r×  Úcolspecs           rD   rW   zFixedWidthReader.__init__f  sW  € ð ˆŒØ'+ˆŒØ/8ÐG˜ )Ñ+Ð+¸iˆŒØˆŒØ�wÒÐØ ×0Ò0Ø'°(ð 1ñ ô ˆDŒMˆMð %ˆDŒMå˜$œ-­%µ¨Ñ7Ô7ð 	Ýð9Ý# H™~œ~Ô6ð9ð 9ñô ð ð
 ”}ð 
	ð 
	ˆGå˜7¥U­D MÑ2Ô2ð	å˜‘L”L AÒ%Ð%Ý˜w qœz­Cµ´½TÀ$¹Z¼ZÐ+HÑIÔIð &å˜w qœz­Cµ´½TÀ$¹Z¼ZÐ+HÑIÔIð &õ  ð:ñô ð ð	 &ð
	ð 
	rF   ú	list[str]c                ó  — |€t          ¦   «         }g }g }t          | j        ¦  «        D ]H\  }}||vr|                     |¦  «         |                     |¦  «         t	          |¦  «        |k    r nŒIt          |¦  «        | _        |S )aÉ  
        Read rows from self.f, skipping as specified.

        We distinguish buffer_rows (the first <= infer_nrows
        lines) from the rows returned to detect_colspecs
        because it's simpler to leave the other locations
        with skiprows logic alone than to modify them to
        deal with the fact we skipped some rows here as
        well.

        Parameters
        ----------
        infer_nrows : int
            Number of rows to read from self.f, not counting
            rows that are skipped.
        skiprows: set, optional
            Indices of rows to skip.

        Returns
        -------
        detect_rows : list of str
            A list containing the rows to read.

        )rê   rË   r:   r;  rp   ÚiterrÚ  )rC   r×  r?   Úbuffer_rowsÚdetect_rowsrÄ   r©  s          rD   Úget_rowszFixedWidthReader.get_rowsŒ  sŸ   € ð2 ÐÝ‘u”uˆHØˆØˆÝ ¤Ñ'Ô'ð 	ð 	‰FˆAˆsØ˜Ð Ð Ø×"Ò" 3Ñ'Ô'Ð'Ø×Ò˜sÑ#Ô#Ð#Ý�;ÑÔ ;Ò.Ð.Ø�ð /å˜;Ñ'Ô'ˆŒØÐrF   úlist[tuple[int, int]]c           	     óà  ‡ — d                      d„ ‰ j        D ¦   «         ¦  «        }t          j        d|› d�¦  «        }‰                      ||¦  «        }|st          d¦  «        ‚t          t          t          |¦  «        ¦  «        }t          j
        |dz   t          ¬¦  «        }‰ j        �ˆ fd„|D ¦   «         }|D ]E}|                     |¦  «        D ]-}	d||	                     ¦   «         |	                     ¦   «         …<   Œ.ŒFt          j        |d¦  «        }
d	|
d	<   t          j        ||
z  dk    ¦  «        d	         }t%          t'          |d d d
…         |dd d
…         d¬¦  «        ¦  «        }|S )Nr¢   c                ó   — g | ]}d |› �‘ŒS )ú\rÃ   rt  s     rD   r  z4FixedWidthReader.detect_colspecs.<locals>.<listcomp>¶  s   € Ð?Ð?Ð?¨1˜h 1˜h˜hÐ?Ð?Ð?rF   z([^z]+)z(No rows from which to infer column widthrU   r  c                óP   •— g | ]"}|                      ‰j        ¦  «        d          ‘Œ#S )r   )Ú	partitionrS   )r¤   r©  rC   s     €rD   r  z4FixedWidthReader.detect_colspecs.<locals>.<listcomp>¾  s,   ø€ ÐCÐCÐC°s�C—M’M $¤,Ñ/Ô/°Ô2ÐCÐCÐCrF   r   rg  TrÈ  )r9  rH   rx   rz   rã  r   r¯  r8  rp   rì   Úzerosr£   rS   Úfinditerrk  rm  ÚrollÚwhererb   rÊ  )rC   r×  r?   Ú
delimitersÚpatternr�   r³  r   r©  ÚmÚshiftedÚedgesÚ
edge_pairss   `            rD   rÛ  z FixedWidthReader.detect_colspecs²  s{  ø€ ð —W’WÐ?Ð?°´Ð?Ñ?Ô?Ñ@Ô@ˆ
Ý”*Ð2 :Ð2Ð2Ð2Ñ3Ô3ˆØ�}Š}˜[¨(Ñ3Ô3ˆØð 	MÝ Ð!KÑLÔLÐLÝ•c�#˜t‘n”nÑ%Ô%ˆÝŒx˜ !™­3Ð/Ñ/Ô/ˆØŒ<Ð#ØCÐCÐCÐC¸dÐCÑCÔCˆDØð 	.ð 	.ˆCØ×%Ò% cÑ*Ô*ð .ð .�Ø,-��Q—W’W‘Y”Y §¢¡¤Ð(Ñ)Ð)ð.å”'˜$ Ñ"Ô"ˆØˆ�‰
Ý”˜$ ™.¨QÒ.Ñ/Ô/°Ô2ˆÝ�#˜e C C a Cœj¨%°°°1°¬+¸dÐCÑCÔCÑDÔDˆ
ØÐrF   c                óæ   ‡ ‡— ‰ j         �A	 t          ‰ j         ¦  «        Šn?# t          $ r d ‰ _         t          ‰ j        ¦  «        ŠY nw xY wt          ‰ j        ¦  «        Šˆˆ fd„‰ j        D ¦   «         S )Nc                óZ   •— g | ]'\  }}‰||…                               ‰j        ¦  «        ‘Œ(S rÃ   )rŒ   rH   )r¤   Úfrom_Útor�   rC   s      €€rD   r  z-FixedWidthReader.__next__.<locals>.<listcomp>Ò  s5   ø€ ÐVÐVÐV¹¸%À��U˜2�X”×$Ò$ T¤^Ñ4Ô4ÐVÐVÐVrF   )rÚ  r}  r¨   r:   rÓ  rv  s   `@rD   Ú__next__zFixedWidthReader.__next__È  sƒ   øø€ ØŒ;Ð"ð$Ý˜DœKÑ(Ô(��øÝ ð $ð $ð $Ø"�”Ý˜DœF‘|”|���ð$øøøõ ˜œ‘<”<ˆDàVÐVÐVÐVÐVÈÌÐVÑVÔVÐVs   ‹   %AÁA)NrÒ  )r:   r}   rÓ  rÔ  rH   rÕ  rS   rÕ  r?   rÖ  r×  r£   r<   r=   rA   )r×  r£   r?   rÖ  r<   rÞ  )rÒ  N)r×  r£   r?   rÖ  r<   rä  )r<   rÞ  )rƒ   r„   r…   Ú__doc__rW   rã  rÛ  rø  rÃ   rF   rD   rÑ  rÑ  a  s”   € € € € € ðð ð %)Øð$ð $ð $ð $ð $ðL$ð $ð $ð $ð $ðN CGðð ð ð ð ð,
Wð 
Wð 
Wð 
Wð 
Wð 
WrF   rÑ  c                  ó*   — e Zd ZdZdd„Zdd	„Zdd„ZdS )ÚFixedWidthFieldParserzl
    Specialization that Converts fixed-width fields into DataFrames.
    See PythonParser for details.
    r:   úReadCsvBuffer[str]r<   r=   c                ó”   — |                      d¦  «        | _        |                      d¦  «        | _        t          j        | |fi |¤Ž d S )NrÓ  r×  )ÚpoprÓ  r×  r7   rW   )rC   r:   rs   s      rD   rW   zFixedWidthFieldParser.__init__Û  sJ   € àŸš Ñ,Ô,ˆŒØŸ8š8 MÑ2Ô2ˆÔÝÔ˜d AÐ.Ð.¨Ð.Ð.Ð.Ð.Ð.rF   r}   rÑ  c                ó\   — t          || j        | j        | j        | j        | j        ¦  «        S rA   )rÑ  rÓ  rH   rS   r?   r×  )rC   r:   s     rD   rd   z"FixedWidthFieldParser._make_readerá  s1   € ÝØØŒMØŒNØŒLØŒMØÔñ
ô 
ð 	
rF   r™   r‘  c                ó   — d„ |D ¦   «         S )z¿
        Returns the list of lines without the empty ones. With fixed-width
        fields, empty lines become arrays of empty strings.

        See PythonParser._remove_empty_lines.
        c                óD   — g | ]}t          d „ |D ¦   «         ¦  «        ¯|‘ŒS )c              3  ój   K  — | ].}t          |t          ¦  «         p|                     ¦   «         V — Œ/d S rA   )r_   r`   rŒ   )r¤   r‹  s     rD   r¦   zGFixedWidthFieldParser._remove_empty_lines.<locals>.<listcomp>.<genexpr>õ  s<   è è € ÐEÐE¸1•z !¥SÑ)Ô)Ð)Ð6¨Q¯WªW©Y¬YÐEÐEÐEÐEÐEÐErF   )r`  r”  s     rD   r  z=FixedWidthFieldParser._remove_empty_lines.<locals>.<listcomp>ò  sE   € ð 
ð 
ð 
àÝÐEÐEÀÐEÑEÔEÑEÔEð
Øð
ð 
ð 
rF   rÃ   rš  s     rD   r{  z)FixedWidthFieldParser._remove_empty_linesë  s#   € ð
ð 
àð
ñ 
ô 
ð 	
rF   N)r:   rü  r<   r=   )r:   r}   r<   rÑ  rÍ  )rƒ   r„   r…   rù  rW   rd   r{  rÃ   rF   rD   rû  rû  Õ  sZ   € € € € € ðð ð
/ð /ð /ð /ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
rF   rû  rG   r£   r<   c                ól   — t          | ¦  «        st          d¦  «        ‚| dk     rt          d¦  «        ‚| S )að  
    Validate the 'skipfooter' parameter.

    Checks whether 'skipfooter' is a non-negative integer.
    Raises a ValueError if that is not the case.

    Parameters
    ----------
    skipfooter : non-negative integer
        The number of rows to skip at the end of the file.

    Returns
    -------
    validated_skipfooter : non-negative integer
        The original input if the validation succeeds.

    Raises
    ------
    ValueError : 'skipfooter' was not a non-negative integer.
    zskipfooter must be an integerr   zskipfooter cannot be negative)r   rr   )rG   s    rD   r^   r^   ù  sC   € õ* �jÑ!Ô!ð :ÝÐ8Ñ9Ô9Ð9à�A‚~€~ÝÐ8Ñ9Ô9Ð9ð ÐrF   )rG   r£   r<   r£   )RÚ
__future__r   Úcollectionsr   r   r‘   Úior   rx   Útypingr   r   r	   r
   r   r   r   rï   Únumpyrì   Úpandas._libsr   Úpandas._typingr   Úpandas.errorsr   r   r   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.core.dtypes.astyper   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   Úpandas.core.dtypes.dtypesr   r   Úpandas.core.dtypes.inferencer   Úpandas.corer    Úpandas.core.arraysr!   r"   Úpandas.core.arrays.booleanr#   Úpandas.core.indexes.apir$   Úpandas.io.commonr%   r&   Úpandas.io.parsers.base_parserr'   r(   r)   r*   r+   Úcollections.abcr,   r-   r.   r/   r0   r1   r2   r3   Úpandasr4   r5   rh  r7   rÑ  rû  r^   rÃ   rF   rD   ú<module>r     s2  ðØ "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð €
€
€
Ø Ð Ð Ð Ð Ð Ø 	€	€	€	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€à Ð Ð Ð à Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5à "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð €ð~$ð ~$ð ~$ð ~$ð ~$�:ñ ~$ô ~$ð ~$ðB(qWð qWð qWð qWð qW�s”|ñ qWô qWð qWðh!
ð !
ð !
ð !
ð !
˜Lñ !
ô !
ð !
ðHð ð ð ð ð rF   