+
    xȇiz                       ^ RI Ht ^ RIHtHt ^ RIt^ RIHt ^ RIt^ RI	H
t
HtHtHtHtHtHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHt ^ R
IHt ^ RI H!t! ^ RI"H#t#H$t$H%t%H&t&H't'H(t(H)t) ^ RI*H+t+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2H3t3 ^ RI4H5t5 ^ RI6H7t7 ^ RI8H9t9H:t: ^ RI;H<t<H=t=H>t>H?t?H@t@ ]'       d!   ^ RIAHBtBHCtCHDtDHEtE ^ RIHFtFHGtGHHtHHItI ^ RIJHKtKHLtL RtM ! R R]<4      tN ! R R]P                  4      tO ! R R]N4      tPR R  ltQR# )!    )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                    a  ] tR t^`t$ R]R&   R V 3R llt]R R l4       tR R ltR=R	 R
 llt	R R lt
R=R R lltR R lt]R>R R ll4       t]R R l4       t]R R l4       tR R lt]R 4       tR R ltR R ltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 lt R=R6 R7 llt!R8 R9 lt"R: R; lt#R<t$V ;t%# )?PythonParserset[int]_no_thousands_columnsc                    V ^8  d   QhRRRR/# )   fzReadCsvBuffer[str] | listreturnNone )formats   "o/Users/max/.openclaw/workspace/postharvest/venv/lib/python3.14/site-packages/pandas/io/parsers/python_parser.py__annotate__PythonParser.__annotate__c   s#     UH UH3 UH UH    c                  <a  \         SS `  V4       . S n        . S n        ^ S n        ^ S n        VR,          S n        \        S P                  4      '       d   S P                  S n        MV 3R lS n        \        VR,          4      S n
        VR,          S n        VR,          S n        \        S P                  \        4      '       d   \        S P                  4      S n        VR,          S n        VR,          S n        VR,          S n        VR	,          S n        VR
,          S n        VR,          S n        VP+                  RR4      S n        VR,          S n        VR,          S n        VR,          S n        \        V\4        4      '       d	   VS n        M*\7        VR4      '       g   Q hS P9                  V4      S n        RS n        S P=                  4       w  pS n        S n         S PC                  VS PD                  4      w  S n#        S n"        S n$        p\5        S PF                  4      S n%        S PM                  4       w  pS n%        S n#        S PD                  f   VS n"        S P:                  f-   \5        \O        \Q        S PF                  4      4      4      S n        S PS                  4       S n*        \Q        S P0                  4      ^8w  d   \W        R4      hR# )z>
Workhorse function for processing nested list into DataFrame
skiprowsc                "   < V SP                   9   # N)rF   )xselfs   &rA   <lambda>'PythonParser.__init__.<locals>.<lambda>s   s    a4==&8rD   
skipfooter	delimiter	quotechar
escapechardoublequoteskipinitialspacelineterminatorquotingskip_blank_lineshas_index_namesF	thousandsdecimalcommentreadlineNz'Only length-1 decimal markers supported),super__init__databufposline_posrF   callableskipfunc_validate_skipfooter_argrM   rN   rO   
isinstancestrrP   rQ   rR   rS   rT   rU   getrV   rW   rX   rY   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)rJ   r<   kwdsrp   _ro   	__class__s   f&,   rA   r\   PythonParser.__init__c   s_    	>@	Z(DMM"" MMDM8DM243EFk*k*dnnc** 0DN|,. $%7 8"#34I $%7 8  $xx(95Ak*II aDI1j))))))!,DI /3 !		
% //
	
LN +/t||*<595I5I5K2T_dl#*D$ $U3t||+<%= >D%)%B%B%D"t||!FGG "rD   c                   V ^8  d   QhRR/# )r;   r=   z
re.Patternr?   )r@   s   "rA   rB   rC      s     
! 
!Z 
!rD   c                	    \         P                  ! V P                  4      pV P                  f   RV R2pM)\         P                  ! V P                  4      pRV RV R2p\         P                  ! V4      # )Nz^[\-\+]?[0-9]*(z [0-9]*)?([0-9]?(E|e)\-?[0-9]+)?$z^[\-\+]?([0-9]+z	|[0-9])*()reescaperX   rW   compile)rJ   rX   regexrW   s   &   rA   numPythonParser.num   sm    ))DLL)>>!&wi/OPE		$..1I"9+Ywi @, -  zz%  rD   c                    V ^8  d   QhRRRR/# )r;   r<   IO[str] | ReadCsvBuffer[str]r=   zIterator[list[str]]r?   )r@   s   "rA   rB   rC      s      F F: F?R FrD   c                	  a aa S P                   oSe   \        S4      ^8X  Ed0   S P                  '       d   \        R4      h ! V 3R lR\        P
                  4      pTpSen   SVn         S P                  eW   S P                  S P                  4      '       d6   SP                  4       pV'       g   EMS ;P                  ^,          un        KV  EMhSP                  4       pS P                  V..4      ^ ,          pS P                  S P                  4      '       g	   V'       gF   S ;P                  ^,          un        SP                  4       pS P                  V..4      ^ ,          pKn  \        \        \        ,          V4      pV^ ,          pS ;P                  ^,          un        S ;P                  ^,          un        \        P                  ! 4       P!                  V4      pVP                   Vn         \        P"                  ! \%        V4      VR7      pS P&                  P)                  \        V4      4       \        P"                  ! SVRR7      p	V	# VV3R lp
V
! 4       p	V	# )Nz<Custom line terminators not supported in python parser (yet)c                     < ] tR t^t Z P                  t Z P
                  t Z P                  t Z P                  t Z P                  t Z P                  t	Rt
RtR# ),PythonParser._make_reader.<locals>.MyDialect
r?   N)__name__
__module____qualname____firstlineno__rN   rO   rP   rQ   rR   rT   rS   __static_attributes__rJ   s   rA   	MyDialectr      sC     NN	 NN	!__
"..#'#8#8 ,,!%rD   r   )dialectT)r   strictc               3     <"   SP                  4       p \        P                  ! S4      pVP                  V P	                  4       4      x  S F$  p VP                  V P	                  4       4      x  K&  	  R # 5irH   )rZ   r~   r   splitstrip)linepatr<   seps     rA   _read(PythonParser._make_reader.<locals>._read  sR     zz|jjoii

--D))DJJL11 s   A4A7)rN   ru   rS   rw   csvDialectrF   rb   r_   rZ   _check_commentsr   rg   re   r`   Sniffersniffreaderr   r^   extend)rJ   r<   r   diar   lines	lines_strsniffedline_rdrr   r   r   s   ff         @rA   ri   PythonParser._make_reader   s   nn;#c(a-""" R &CKK & C # ==,--11 zz|#!A zz|,,tfX6q9mmDHH--UHHMH::<D 004&:1=E cE2	 !|A"++---d3 ' 1 1 ::htncBX/ ZZ3t<F 2 WFrD   c                    V ^8  d   QhRRRR/# )r;   rows
int | Noner=   [tuple[Index | None, Sequence[Hashable] | MultiIndex, Mapping[Hashable, ArrayLike | Series]]r?   )r@   s   "rA   rB   rC     s     60 6060
60rD   c                	    V P                  V4      pR T n        \	        T P
                  4      pT'       gs   \        T P
                  \        T P
                  T P                  4      4      pT P                  TT P                  4      w  rSpT P                  Y0P                  4      pYWT3# RpT P                  '       d:   \        R T^ ,           4       4      \        T4      8X  d   T^ ,          pTR,          pT P!                  T4      p	T P#                  T	4      w  rT P%                  T
4      pT P'                  Y;4      pT P)                  YT4      w  r\Y\T3#   \         d*    T P                  '       d   . p ELcT P                  4        h i ; i)FNc              3  V   "   T F  p\        VR 8H  ;'       g    VRJ 4      x  K!  	  R# 5i) N)int).0vs   & rA   	<genexpr>$PythonParser.read.<locals>.<genexpr>7  s+      (
/9!CR$$19%%zs   ))   NN)
_get_linesStopIteration_first_chunkcloserg   rr   r%   r&   	index_col_get_empty_metadtype_maybe_make_multi_index_columnsrq   rV   sumru   _rows_to_cols_exclude_implicit_index_convert_data_do_date_conversions_make_index)rJ   r   contentrp   namesindexcol_dictconv_columnsindexnamerowalldatar]   	conv_dataresult_columnss   &&           rA   readPythonParser.read  sy   	ood+G " '+4??&;  (OONNE (,';';

($EH  ??XL00 C (
/6qz(
 %
\% #1:LbkG$$W-44W=&&t,	--gA	 $ 0 0< Pi//[  	   

	s   E F1F6Fc                    V ^8  d   QhRRRR/# )r;   r   list[np.ndarray]r=   z8tuple[Mapping[Hashable, np.ndarray], Sequence[Hashable]]r?   )r@   s   "rA   rB   rC   G  s      ! 
BrD   c                	l   \        V P                  \        V P                  V P                  4      4      p^ pV P                  '       d   \        V P                  4      p\        V4      pV P                  W!4       \        V4       UUu/ uF  w  rVWT8  g   K  WaWS,           ,          bK  	  uppV3# u uppi )r   )r%   rr   r&   r   _implicit_indexru   _check_data_length	enumerate)rJ   r   r   offsetlen_alldatainames   &&     rA   r   $PythonParser._exclude_implicit_indexG  s    
 OO$
 (F'l/ 6?u5E
5E'!%D!*%%5E
 	 
s   
B0B0c                    V ^8  d   QhRRRR/# )r;   sizer   r=   r   r?   )r@   s   "rA   rB   rC   `  s     
$ 
$
$

$rD   c                	F    Vf   V P                   pV P                  VR7      # )N)r   )	chunksizer   )rJ   r   s   &&rA   	get_chunkPythonParser.get_chunk`  s#     <>>Dyydy##rD   c                    V ^8  d   QhRRRR/# )r;   r]   zMapping[Hashable, np.ndarray]r=   zMapping[Hashable, ArrayLike]r?   )r@   s   "rA   rB   rC   l  s     !
 !
+!
 
&!
rD   c                	   V P                  V P                  4      pV P                  V P                  4      p/ p/ p\        V P                  \
        4      '       d   V P                   Fp  pVf   K	  V P                  V,          pV P                  V,          p\        V\        4      '       d$   W`P                  9  d   V P                  V,          pWtV&   WV&   Kr  	  MV P                  pV P                  pV P                  VVVVV4      # rH   )
_clean_mapping
convertersr   rd   	na_valuesdict
na_fvaluesr   rr   _convert_to_ndarrays)	rJ   r]   
clean_convclean_dtypesclean_na_valuesclean_na_fvaluescolna_value	na_fvalues	   &&       rA   r   PythonParser._convert_datal  s    
 ((9
**4::6 dnnd++~~?#~~c2H $ 4I!#s++??0J"ooc2+3C(,5S) & #nnO#((
 	
rD   c                    V ^8  d   QhRRRR/# )r;   dctr.   r=   zdict[Any, np.ndarray]r?   )r@   s   "rA   rB   rC     s"     R RR 
RrD   c                	   / p\        V P                  V P                  4      pVP                  4        EF   w  rVf   R MVP	                  VR 4      p
\        V\        4      '       d   VP	                  VR 4      pMTpV P                  '       d   \        WW0P                  4      w  rM\        4       \        4       rW9   dS   \        P                  ! V	\        V4      V,          4      p\        P                  ! W\        P                  4       WV&   K  V
ep   Ve*   \         P"                  ! RV R2\$        \'        4       R7        \(        P*                  ! W4      p	V P7                  V	\        V4      V,          VR J RR7      w  ppM\9        V4      pT;'       g    \;        V4      pT;'       d    T'       * pV P7                  V	\        V4      V,          VR J V4      w  ppVe   \=        V4      pV'       dZ   VP>                  V8w  g	   V'       dA   V'       g'   V^ 8  d    \A        V4      '       d   \-        RV 24      hV PC                  WV4      pWV&   EK#  	  V#   \,         dY    \        P                  ! T	\/        T4      4      P1                  \        P2                  4      p\(        P4                  ! YT4      p	 ELbi ; i)Nz5Both a converter and dtype were specified for column z# - only the converter will be used.
stacklevelF)try_num_boolz$Bool column has NA values in column )"r+   parse_datesrp   itemsrf   rd   r   	na_filterr)   keep_default_nasetr    isinnpputmasknanwarningswarnr   r   r   	map_inferrw   rg   viewuint8map_infer_mask_infer_typesr   r   r   r   r   _cast_types)rJ   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   &&&&&&              rA   r   !PythonParser._convert_to_ndarrays  ss    78H8H$,,WIA'/TZ^^At5LF&$''"JJq$/	 #	~~~0=*.B.B1-~ 14su~# "vs=/AN/RS

60"q	!(MM**+,OQ &#3#5F ]]6:F
 #'"3"3&7%!&	 #4 #x 1;%*%H%Hoi.H" %.$D$D2DE #'"3"3&7% 	#x ( ,Y 7I%++":e X\(33",/STUSV-W"XX ,,UqAE1IO %P G " F%??64	?CHHRD //EFFs   IAJ=<J=c               $    V ^8  d   QhRRRRRR/# )r;   r  r0   r  r1   r=   r?   )r@   s   "rA   rB   rC     s&     G G) G GY GrD   c                :   \        V\        4      '       d   VP                  RJp\        VP                  4      '       g"   V'       g   \
        P                  ! VRRR7      p\        VRR7      P                  4       P                  4       p\        P                  ! WUP                  V4      W P                  R7      pV# \        V\        4      '       d   VP                  4       p \        V\         4      '       dO   V Uu. uF  p\#        V4      NK  	  ppVP%                  VVV P                  V P&                  V P(                  R7      # VP%                  WR7      # \        V\,        4      '       d   VP/                  VRR7      pV# \1        VP2                  \"        4      '       d   \
        P                  ! VR
RR7      pV#  \5        WR
R7      pV# u upi   \*         d   p	\+        RT R	24      T	hRp	?	ii ; i  \6         d   p	\7        RT RT 24      T	hRp	?	ii ; i)a  
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_values)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 )rd   r   
categoriesr   r   r   ensure_string_arrayr$   uniquedropnar!   _from_inferred_categoriesget_indexerr  r   construct_array_typer#   re   _from_sequence_of_stringsr  r   NotImplementedErrorr"   astype
issubclasstyper   rw   )
rJ   r  r  column
known_catscats
array_typeval
values_strerrs
   &&&&      rA   r  PythonParser._cast_types  s   " i!122"--T9J"6<<00 0055 e,335<<>D ::&&v.	GWGWFV M 	>22"779Ji66 7=!=fs#c(fJ!=%??"'$($4$4%)%6%6$(NN @   &???XX //]]95]9F  	,, ,,teF %fdC
 A "> ' )'
| 4V V $   /xyLsH   $G >G5G G G8 G G5 G00G58HHHc                   V ^8  d   QhRR/# )r;   r=   boolr?   )r@   s   "rA   rB   rC   /  s      $ rD   c                	    V P                   f   R# V P                   p\        V\        \        \        P
                  34      '       d   \        V4      ^8  # R# )NF)headerrd   rg   tupler   ndarrayru   )rJ   r6  s   & rA   _have_mi_columnsPythonParser._have_mi_columns.  sA    ;;ftUBJJ788v;?"rD   c                   V ^8  d   QhRR/# )r;   r=   z9tuple[list[list[Scalar | None]], int, set[Scalar | None]]r?   )r@   s   "rA   rB   rC   9  s     u; u;	Bu;rD   c           
     	R   V P                   p^ pRp\        4       pV P                  Ee   V P                  pV P                  p\	        V\
        \        \        P                  34      '       d'   V'       d   . \        V4      OVR,          ^,           NpMV.p. p\        V4       EF  w  r V P                  4       p
V P                  V	8:  d   V P                  4       p
K#   . p. p\        V
4       FX  w  ppVR8X  d;   V'       d
   RV RV 2pMRV 2pVP+                  V4       VP+                  V4       KG  VP+                  V4       KZ  	  V'       EgL   \/        \0        4      p\3        \#        V4      4       Uu. uF  pVV9  g   K  VNK  	  upV,           pV EF   pVV,          pTpVV,          pV^ 8  d   V^ 8  d1   V^,           VV&   V RV 2pVV9   d   V^,          pK,  VV,          pK7  V P4                  e   \7        V P4                  4      '       dq   V P4                  P9                  V4      eT   V P4                  P9                  V4      f7   V P4                  P;                  VV P4                  P9                  V4      /4       VVV&   V^,           VV&   EK  	  MV'       d   WR,          8X  du   \#        V4      pV P<                  pVe   \#        V4      M^ p\#        V4      pVV8w  d   VV,
          V8  g   V^ 8X  d&   RpR.V,          pV P&                  R,          .V n        VP+                  V4       TP;                  V Uu0 uF  pVV,          kK  	  up4       \#        V4      ^8X  g   EK  \#        V4      pEK  	  V'       d   V P&                  P)                  4        VEe
    V P                  4       pVf   ^ M
\#        V4      p\#        V4      \#        V^ ,          4      8  d   \#        V4      V8  d   \%        R4      h\#        V4      ^8  d   \?        R4      hV P@                  e   V PC                  WqV4       M\#        V4      pV PD                  eS   \#        V4      \#        V PD                  4      8w  d0   \G        V PD                  4       Uu. uF  pVV,          NK  	  up.pEMV.pEMV PC                  Ww^ ,          V4      pM\#        V PH                  4      pTpV'       g0   \        \3        V4      4      .pV PC                  Ww^ ,          V4      pMV P@                  e   \#        V4      V8  d!   V PC                  V.VV4      p\#        V4      pMe\K        V P@                  4      '       g/   \#        V4      \#        V P@                  4      8w  d   \%        R4      hV.pV PC                  Ww^ ,          V4       WrV3#   \         Ed7   p^ T P                  u;8  d   T	8:  d}   M MyT'       d   YR,          8w  de   \        \        \        T'       d   TRR MT4      4      pRRP!                  T4       R\#        T4       R2p\%        RT RT P                   R	24      ThT'       d^   T	^ 8  dW   T'       d   T P&                  P)                  4        TP+                  R.\#        TR,          4      ,          4       YrT3u Rp?u # T P                   '       g   \-        R
4      ThT P                   R,          p
 Rp?EL Rp?ii ; iu upi u upi   \         d    Rp ELfi ; iu upi )r   TN[,z
], len of z, zPassed header=z	but only z lines in fileNo columns to parse from fileNNNr   z	Unnamed: _level_.FzHNumber of passed names did not match number of header fields in the filez*Cannot pass names with multi-index columns)&r   r   r6  r9  rd   rg   r7  r   r8  r   _buffered_liner`   
_next_liner   mapre   joinru   rw   r^   clearappendr   r   r   rt   r   r   rf   updater   	TypeErrorusecols_handle_usecolsrj   sorted_header_linera   )rJ   r   rl   clear_bufferrm   r6  have_mi_columnsrp   levelhrr   r1  joimsgthis_columnsthis_unnamed_colsr   r
  col_namecountscol_loop_orderr   old_col	cur_countlcsicicunnamed_count
first_linelen_first_data_rowncolss   &                              rA   rk   PythonParser._infer_columns9  sI    

 +.5;;"[[F"33O&4

";<<"<tF|<VBZ!^<F 13G&v.	)..0D--2-#0 .: 57$&!%dODAqBw*)21#WUG'DH)21#H)003$++H5$++A. , '*5c*:F
 "'s<'8!9&!9A$55 !9& *	&*N ,*1o"%$*3K	$q="+a-2;a-w)0	9+&>#&,#6$-NI06sI !%

 6$0$<$<$(JJNN7$;$G$(JJNN3$7$? $

 1 13

w8O2P Q*-Q&/!ms- ,. % BZ' ."nn),SXa(+,=(> -/BGm4KPRVWPW+0L,06B;L(,~DH|,##>O$P>O\!__>O$PQw<1$+.|+<(M /P    &!%!2J +5*<Q#j/"u:GAJ/CJAS4S$>  w<!##$PQQ<<+ ((9MN+.u:($$0SZ3%%D 6 399J9J2KL2KQa2KLMG$gG..QZ)= ))*E#( e-...w
EJ%Uu)<..wuE'*5z$dll++E
c$,,>O0O 0  !'$$Waj%@l::u % )4==.B.+rBZ/? #3s?F3BKPV#WX !#((3-
3s8*BG(,SE4==/X"# '26' HHNN,vGBK0@'@A&lJJ:::,-LMSVV::a=D1)Z&^ %Q % &!%J&,  Msh   *3W7	\\\
*\ \$\#[>1A8[>*[>9A[>?\[>[>>\\! \!c                	    V P                   e   R #  V P                  4       pV#   \         d=   pT P                  '       g   \	        R4      ThT P                  R,          p R p?T# R p?ii ; i)Nr?  r@  )r6  rD  r   r   r   )rJ   r   r1  s   &  rA   rO  PythonParser._header_line  sf     ;;"	!&&(D   	!:::$%DE3N::a=D	!s   $ A+1A&&A+c               (    V ^8  d   QhRRRRRRRR/# )r;   rp   zlist[list[Scalar | None]]usecols_keyzlist[Scalar | None]rl   r   r=   r?   )r@   s   "rA   rB   rC     s2     . .*. ). "	.
 
#.rD   c                   V P                   Ee   \        V P                   4      '       d   \        V P                   V4      pEM\        ;QJ d&    R V P                    4       F  '       g   K   RM	  RM! R V P                    4       4      '       d|   \	        V4      ^8  d   \        R4      h. pV P                    FM  p\        V\        4      '       d$    VP                  VP                  V4      4       K<  VP                  V4       KO  	  MFV P                    Uu. uF  qUV8  g   K  VNK  	  ppV'       d   \        RV R24      hV P                   pV UUU	u. uF*  p\        V4       UU	u. uF  w  rW9   g   K  V	NK  	  up	pNK,  	  pppp	\        V4      V n        V#   \
         d"    T P                  T P                   T4        EK  i ; iu upi u up	pi u up	ppi )zJ
Sets self._col_indices

usecols_key is used if there are string usecols.
c              3  B   "   T F  p\        V\        4      x  K  	  R # 5irH   )rd   re   )r   us   & rA   r   /PythonParser._handle_usecols.<locals>.<genexpr>  s     >AZ3''s   TFz4If using multiple headers, usecols must be integers.z<Defining usecols with out-of-bounds indices is not allowed. z are out-of-bounds.)rL  ra   r(   anyru   rw   rd   re   rI  r   _validate_usecols_namesr   r   rN  rj   )
rJ   rp   rh  rl   col_indicesr   missing_usecolsr+  r   ns
   &&&&      rA   rM  PythonParser._handle_usecols  s    <<#%%7kR>>>>>>w<!#$N  !<<C!#s++T'..{/@/@/EF $**3/ ( $(<<##/C:N3NCC<   # #%V*++>@  #ll &%F  )0E0tqA4D0E%   !'{ 3D)  * T 88{SST
# Fs<    FG'GG+
G:G G'G
	G
Gc                   V ^8  d   QhRR/# r;   r=   list[Scalar]r?   )r@   s   "rA   rB   rC   /  s     % % %rD   c                |    \        V P                  4      ^ 8  d   V P                  ^ ,          # V P                  4       # )z8
Return a line from buffer, filling buffer if required.
)ru   r^   rE  r   s   &rA   rD  PythonParser._buffered_line/  s/     txx=188A;??$$rD   c                    V ^8  d   QhRRRR/# )r;   	first_rowru  r=   r?   )r@   s   "rA   rB   rC   8  s     3, 3, 3, 3,rD   c                   V'       g   V# \        V^ ,          \        4      '       g   V# V^ ,          '       g   V# V^ ,          ^ ,          pV\        8w  d   V# V^ ,          p\        V4      ^8  dq   V^,          V P                  8X  dY   ^pV^,          pVR,          P                  V4      ^,           pW4V p\        V4      V^,           8  d   WsV^,           R ,          pM	VR,          pV.pWR,          ,           # )z
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;   NNNr   )rd   re   _BOMru   rO   r   )	rJ   ry  	first_eltfirst_row_bomstartquoteendnew_rownew_row_lists	   &&       rA   _check_for_bomPythonParser._check_for_bom8  s     
 )A,,, || aLO	!! }!mA&6$..&HE!!$E#))%014C $#.G =!C!G+q33 $B'G&-Ym++rD   c                    V ^8  d   QhRRRR/# )r;   r   zSequence[Scalar]r=   r4  r?   )r@   s   "rA   rB   rC   m  s     4 4#3 4 4rD   c                    V'       * ;'       g5    \         ;QJ d    R V 4       F  '       d   K   R# 	  R# ! R V 4       4      # )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  .   "   T F  q'       * x  K  	  R # 5irH   r?   )r   rI   s   & rA   r   .PythonParser._is_line_empty.<locals>.<genexpr>z  s     3duuds   FT)all)rJ   r   s   &&rA   _is_line_emptyPythonParser._is_line_emptym  s7     x33333d33333333d333rD   c                   V ^8  d   QhRR/# rt  r?   )r@   s   "rA   rB   rC   |  s     4 4L 4rD   c                	   \        V P                  \        4      '       EdA   V P                  V P                  4      '       dA   V P                  \        V P                  4      8  d   MV ;P                  ^,          un        Ka    V P                  V P                  V P                  ,          .4      ^ ,          pV ;P                  ^,          un        V P                  '       gD   V P                  V P                  V P                  ^,
          ,          4      '       g	   V'       d   EMBV P                  '       d(   V P                  V.4      pV'       d   V^ ,          pEMK  K  V P                  V P                  4      '       d1   V ;P                  ^,          un        \        V P                  4       KQ   V P                  V P                  ^,           R7      pV ;P                  ^,          un        Vf   KC  V P                  V.4      ^ ,          pV P                  '       d'   V P                  V.4      pV'       d   V^ ,          pM$K  V P                  V4      '       g   V'       g   K   V P                  ^8X  d   V P                  V4      pV ;P                  ^,          un        V P                   P#                  V4       V#   \         d   p\        ThRp?ii ; i)r   Nrow_num)rd   r]   rg   rb   r_   ru   r   rU   r  _remove_empty_lines
IndexErrorr   next_next_iter_liner  r`   r^   rI  )rJ   r   retr1  	orig_lines   &    rA   rE  PythonParser._next_line|  s	   dii&&--))88s499~-A1//4881D0EFqIDHHMH000++DIIdhhl,CDD,,,"66v>#&q6D!  - --))ATYY 00A0F	A(//<Q?D,,,"66v>#&q6D!  ,,Y7744
 88q=&&t,D? " 1'S01s7   AK $8K K 'K 9K 	K KKKc               $    V ^8  d   QhRRRRRR/# )r;   rU  re   r  r   r=   r>   r?   )r@   s   "rA   rB   rC     s!      C # $ rD   c                B   V P                   V P                  P                  8X  d   \        V4      hV P                   V P                  P                  8X  g   \        V P                   4      '       d/   \        P                  ! RV RV R2\        \        4       R7       R# R# )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   WARNra   r   r   r   r   )rJ   rU  r  s   &&&rA   _alert_malformedPythonParser._alert_malformed  s    "  8 8 > >>c"" 8 8 = ==B
 B
 MM 	C53+-B
rD   c                    V ^8  d   QhRRRR/# )r;   r  r   r=   zlist[Scalar] | Noner?   )r@   s   "rA   rB   rC     s     , ,s ,/B ,rD   c                    \        V P                  \        4      '       d   Q h\        V P                  4      pV#   \        P
                   d   pT P                  T P                  P                  T P                  P                  39   dP   \        T4      pRT9   g   RT9   d   RpT P                  ^ 8  d   RpTRT,           ,          pT P                  YA4        Rp?R# Rp?ii ; i)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 NULzNULL byte detected. This byte cannot be processed in Python's native csv library at the moment, so please pass in engine='c' insteadzError 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)rd   r]   rg   r  r   Errorr  r  r  r  re   rM   r  )rJ   r  r   erU  reasons   &&    rA   r  PythonParser._next_iter_line  s    	!$))T2222		?DKyy 	  ((..((--%  !f#%)<)C?  ??Q&%  4&=(C%%c35	s   8; C%B
C  C%c                    V ^8  d   QhRRRR/# r;   r   list[list[Scalar]]r=   r?   )r@   s   "rA   rB   rC     s      %7 <N rD   c                	   V P                   f   V# . pV F  p. pV F  p\        V\        4      '       d"   V P                   V9  g   WPP                  9   d   VP	                  V4       KM  VR VP                  V P                   4       p\        V4      ^ 8  d   VP	                  V4        M	  VP	                  V4       K  	  V# rH   )rY   rd   re   r   rI  findru   )rJ   r   r  r   rlrI   s   &&    rA   r   PythonParser._check_comments  s    <<LDB"1c**||1,NN*IIaL0AFF4<<01A1vz		!  JJrN  
rD   c                    V ^8  d   QhRRRR/# r;   r   zlist[list[T]]r=   r?   )r@   s   "rA   rB   rC     s       = rD   c                    V Uu. uFc  p\        V4      ^8  gO   \        V4      ^8X  g   K%  \        V^ ,          \        4      '       d    V^ ,          P                  4       '       g   Ka  VNKe  	  ppV# u upi )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.
)ru   rd   re   r   )rJ   r   r   r  s   &&  rA   r   PythonParser._remove_empty_lines  sl    $ 	
D	AIN 
 -7tAw,D,DQ D 	 	
 
	
s   "A27A2(A2c                    V ^8  d   QhRRRR/# r  r?   )r@   s   "rA   rB   rC   -  s     
 
&8 
=O 
rD   c                	\    V P                   f   V# V P                  WP                   RR7      # )Nr   r   searchreplace)rW   _search_replace_num_columnsrJ   r   s   &&rA   _check_thousandsPythonParser._check_thousands-  s2    >>!L// 0 
 	
rD   c               (    V ^8  d   QhRRRRRRRR/# )r;   r   r  r  re   r  r=   r?   )r@   s   "rA   rB   rC   5  s,      '14?B	rD   c                	   . pV F  p. p\        V4       F  w  rx\        V\        4      '       dF   W(9  g@   WpP                  9   g0   V P                  P                  VP                  4       4      '       g   VP                  V4       Ks  VP                  VP                  W#4      4       K  	  VP                  V4       K  	  V# rH   )	r   rd   re   r9   r   r  r   rI  r  )	rJ   r   r  r  r  r   r  r   rI   s	   &&&&     rA   r  (PythonParser._search_replace_num_columns5  s     DB!$"1c**66688??177955IIaLIIaii89 ( JJrN  
rD   c                    V ^8  d   QhRRRR/# r  r?   )r@   s   "rA   rB   rC   H  s     
 
$6 
;M 
rD   c                	x    V P                   \        R ,          8X  d   V# V P                  WP                   RR7      # )rX   rB  r  )rX   r*   r  r  s   &&rA   _check_decimalPythonParser._check_decimalH  s9    <<?955L//c 0 
 	
rD   c                   V ^8  d   QhRR/# )r;   r=   z@tuple[Sequence[Hashable] | None, list[Hashable], list[Hashable]]r?   )r@   s   "rA   rB   rC   P  s     K/ K/	IK/rD   c                   V P                   p\        V4      p\        V4      pV P                  e   V P                  pM V P                  4       p V P                  4       p^ pVe   V P
                  pVRJd   \        V4      V P                  ,
          pVe   V P                  e   VRJd   \        V4      \        V4      V P                  ,           8X  d~   \        \        \        V4      4      4      V n        V P                  R,          V n
        \        V4       F  pVP                  ^ V4       K  	  \        V4      p\        V4      V n        W2V3# V^ 8  d2   RV n        V P
                  f   \        \        V4      4      V n        RpM#V P                  WP
                  4      w  rV n        WV3#   \         d    Rp ELsi ; i  \         d    Rp ELvi ; i)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.
NFr   T)rr   rg   rO  rE  r   r   ru   rl   r6  rt   r^   reversedinsertr   _clean_index_names)
rJ   rp   rr   r   	next_lineimplicit_first_colsr   r
  
index_namery   s
   &         rA   rs   PythonParser._get_index_nameP  s    '+oo']
w- ($$D(
	)I
   I%&)$i$2K2K&K# %KK+U*y>SY1J1J%JJ%)%D	*:%;DN#xx|DH%d^q!, , "&gJ03GD-W44"#'D ~~%!%e,?&@!AJ /3.E.E/+ZDN w..g !   	I	s#   F2 G 2GGGGc                    V ^8  d   QhRRRR/# )r;   r   r  r=   r   r?   )r@   s   "rA   rB   rC     s      S S%7 S<L SrD   c                	   V P                   pV P                  '       d   V\        V P                  4      ,          p\	        R  V 4       4      pW28  Ed|   V P                  RJEdk   V P
                  Ef\   V P                  '       d   V P                  M^ p. p\        V4      p\        V4      p. pV EFv  w  r\        V	4      p
W8  EdN   \        V P                  4      '       d   V P                  V	4      pVe   \        \        \        ,          V4      p\        V4      V8  dC   V P                  Wx,
          V,           ,
          pVP                  V\        V4      R34       VRV pVP                  V4       K  K  V P                  V P                  P                   V P                  P"                  39   d^   V P                  Wx,
          V,           ,
          pVP                  WR34       V P                  V P                  P                   8X  d    MEKb  EKe  VP                  V	4       EKy  	  V F  w  rpRV RV^,            RV
 2pVR8X  d   VR,          pM]V P$                  '       dL   \        V P$                  4      ^8  d2   V P&                  \(        P*                  8w  d   R	pVR
V,           ,          pV P-                  W^,           4       K  	  \        \.        P0                  ! WR7      P2                  4      pV P
                  '       d   V P4                  f   Q hV P4                  pV P                  '       d_   \        V4       UUu. uFE  w  ppV\        V P                  4      8  g$   V\        V P                  4      ,
          V9   g   KC  VNKG  	  pppV# \        V4       UUu. uF  w  ppVV9   g   K  VNK  	  pppV# u uppi u uppi )c              3  8   "   T F  p\        V4      x  K  	  R # 5irH   )ru   )r   rows   & rA   r   -PythonParser._rows_to_cols.<locals>.<genexpr>  s     2'3c#hh's   FNra   normalz	Expected z fields in line z, saw z from bad_lines callablezXError could possibly be due to quotes being ignored when a multi-char delimiter is used.r  )	min_width)rl   r   ru   r   maxrL  rM   r   ra   r  r   rg   r   r_   rI  r  r  r  rN   rT   r   
QUOTE_NONEr  r   to_object_arrayr3   rj   )rJ   r   col_lenmax_lenfooters	bad_linesiter_contentcontent_lenr   _content
actual_lennew_lr  sourcerU  r  zipped_contentro  as   &&                 rA   r   PythonParser._rows_to_cols  sN   ++s4>>**G2'22
 u!<AU)-dooaGI$W-Lg,KG+ ]
' 1 122 $ 1 1( ; ,$(fu$=E"5zG3*.((ko6O*P ) 0 0'3u:z1R S(-hw#NN51 - **00660055/  #'((ko.G"H!(('x)HI,,0H0H0N0NN! O NN8,-  ,0 09+Vy(81VJ<X  Z'55CNNNDNN+a/6G  4&=(C%%cQ;7% 09* c11'MOOP<<<$$000++K### !*. 9" 91C//s4>>22kA	 A 9  "  #,N";"";$!QqK?OAA";  " ""s   A OO%O6Oc                    V ^8  d   QhRRRR/# )r;   r   r   r=   r  r?   )r@   s   "rA   rB   rC     s     L* L*z L*5G L*rD   c                	   V P                   pR pVe[   \        V P                   4      V8  d%   V P                   R V V P                   VR  uq0n         MV\        V P                   4      ,          pVEf   \        V P                  \        4      '       d   V P
                  \        V P                  4      8  d   \        hVf0   V P                  V P
                  R  p\        V P                  4      pM=V P                  V P
                  V P
                  V,            pV P
                  V,           pV P                  V4      pVP                  V4       W@n        EM. p Ve   ^ p^ pV P
                  e   V P
                  M^ pWa8  dX   \        V P                  4      pV P                  Wu,           4      '       g
   V^,          pV^,          pVP                  V4       K]  \        V4      p	V P                  V4      pVP                  V4       MO^ p V P                  V P
                  V,           ^,           R7      p
V^,          pV
f   K:  VP                  V
4       KM  V ;P
                  V	,          un        . V n         MTpV P                  '       d   VR V P                  )  pV P                  V4      pV P                  '       d   V P!                  V4      pV P#                  V4      pV P%                  V4      #   \         dB    \        T4      p	T P                  T4      pTP                  T4       \        T4      ^ 8X  d   h  Li ; i)Nr  )r^   ru   rd   r]   rg   r_   r   _remove_skipped_rowsr   r  rb   rI  r  rM   r   rU   r  r  r  )rJ   r   r   new_rowsnew_pos	row_indexrow_ctr   r  len_new_rowsnext_rows   &&         rA   r   PythonParser._get_lines  s    488}$%)XXet_dhhtuo"( DHH%$))T**88c$))n,''<#yy4H!$))nG#yyDHHtODH"hhoG44X>X&" '$%	!"-1XX-Aq$m&*499oG#'==1C#D#D &!%NI$OOG4'*8}#'#<#<X#FX. "'+';';DHHtOVWDW';'XH AID'3 ( 9 L(DHE???,T__,-E$$U+   ,,U3E%%e,""5))' % #&x=L#88BHLL*5zQ '	s    B.K2 7K2 K2 2A	L>=L>c                    V ^8  d   QhRRRR/# )r;   r  r  r=   r?   )r@   s   "rA   rB   rC   @  s      -? DV rD   c                	    V P                   '       dI   \        V4       UUu. uF0  w  r#V P                  W P                  ,           4      '       d   K.  VNK2  	  upp# V# u uppi rH   )rF   r   rb   r_   )rJ   r  r   r  s   &&  rA   r  !PythonParser._remove_skipped_rows@  sN    ==="+H"5"5T]]1xx<=X"5  s   +AAc                   V ^8  d   QhRR/# )r;   r=   r8   r?   )r@   s   "rA   rB   rC   G  s     $ $( $rD   c                	>   \        4       pV P                  '       dI   V P                  '       d7   V P                  f   Q hV P	                  V P                  V P                  4      pV P                  '       Ed&   V P
                  '       Ed   V P                  f   Q h\        V P                  V P                  RR7       F  w  r#\        V P
                  \        4      '       g-   \        V P
                  4      '       g   VP                  V4       \        V P
                  \        4      '       g   Ks  W0P
                  9   g   K  \        V P
                  V,          4      '       d%   \        V P
                  V,          4      '       g   K  VP                  V4       K  	  V# )NTr   )r   rp   r   rj   _set_noconvert_dtype_columnsr   ziprd   r   r   addr   )rJ   no_thousands_columnsr   r   s   &   rA   rv   %PythonParser._set_no_thousand_columnsG  s#   ),<<<D,,,$$000#'#D#D!!4<<$  <<<DJJJ$$000d//dK!$**d33<LJJ= = ),,Q/tzz400zz),TZZ_==(C99 ),,Q/ L $#rD   )rj   r   r   r9   r^   rq   rp   rY   r]   rX   rN   rQ   rP   rV   r   ro   r`   rS   rl   rr   r_   rO   rT   rU   rM   rb   rR   rF   rW   rm   rH   )NN)&r   r   r   r   __annotations__r\   r   r   ri   r   r   r   r   r   r   r  r9  rk   rO  rM  rD  r  r  rE  r  r  r   r  r  r  r  rs   r   r   r  rv   r   __classcell__)rz   s   @rA   r7   r7   `   s
   ##UH UHn 
! 
!FP60p2
$!
F R Rh G GR  u;n  .`%3,j44l8,\*8
&
K/ZSjL*\$ $rD   r7   c                  V    ] tR tRtRtRR R lltRR R lltRR R	 lltR
 R ltRt	R# )FixedWidthReaderia  z 
A reader of fixed-width lines.
Nc               4    V ^8  d   QhRRRRRRRRRR	R
RRR/# )r;   r<   r   colspecsz(list[tuple[int, int]] | Literal['infer']rN   z
str | NonerY   rF   set[int] | Noneinfer_nrowsr   r=   r>   r?   )r@   s   "rA   rB   FixedWidthReader.__annotate__f  sP     $ $'$ ;$ 	$
 $ "$ $ 
$rD   c           	     	   Wn         R V n        V'       d
   RV,           MRV n        W@n        VR8X  d   V P	                  WeR7      V n        MW n        \        V P
                  \        \        34      '       g"   \        R\        V4      P                   24      hV P
                   F  p\        V\        \        34      '       d   \        V4      ^8X  dq   \        V^ ,          \        \        P                  \        R 4      34      '       d:   \        V^,          \        \        P                  \        R 4      34      '       d   K  \        R4      h	  R # )Nz
z
	 infer)r  rF   z;column specifications must be a list or tuple, input was a zEEach column specification must be 2 element tuple or list of integers)r<   bufferrN   rY   detect_colspecsr  rd   r7  rg   rK  r*  r   ru   r   r   integer)rJ   r<   r  rN   rY   rF   r  colspecs   &&&&&&& rA   r\   FixedWidthReader.__init__f  s	    '+/8)+iw 00' 1 DM %M$--%77#H~6679 
 }}G7UDM22LA%wqzCT$Z+HIIwqzCT$Z+HII:  %rD   c               $    V ^8  d   QhRRRRRR/# )r;   r  r   rF   r  r=   	list[str]r?   )r@   s   "rA   rB   r    s!     $ $C $? $i $rD   c                    Vf   \        4       p. p. p\        V P                  4       F?  w  rVWR9  d   VP                  V4       VP                  V4       \	        V4      V8  g   K?   M	  \        V4      V n        V# )a1  
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<   rI  ru   iterr  )rJ   r  rF   buffer_rowsdetect_rowsr   r  s   &&&    rA   get_rowsFixedWidthReader.get_rows  sv    2 uH'FA ""3's#;;. ( ;'rD   c               $    V ^8  d   QhRRRRRR/# )r;   r  r   rF   r  r=   zlist[tuple[int, int]]r?   )r@   s   "rA   rB   r    s$      0?	rD   c                	6   R P                  V P                   Uu. uF  pRV 2NK
  	  up4      p\        P                  ! RV R24      pV P	                  W4      pV'       g   \        R4      h\        \        \        V4      4      p\        P                  ! V^,           \        R7      pV P                  e1   V U	u. uF$  qP                  V P                  4      ^ ,          NK&  	  pp	V F;  p	VP                  V	4       F#  p
^WP                  4       V
P!                  4       % K%  	  K=  	  \        P"                  ! V^4      p^ V^ &   \        P$                  ! W,          ^8H  4      ^ ,          p\'        \)        VR,          VR,          RR	7      4      pV# u upi u up	i )
r   \z([^z]+)z(No rows from which to infer column widthr  :NNr;   :r   Nr;   Tr  )rG  rN   r~   r   r  r   r  rF  ru   r   zerosr   rY   	partitionfinditerr~  r  rollwhererg   r  )rJ   r  rF   rI   
delimiterspatternr   r  r  r  mshiftededges
edge_pairss   &&&           rA   r   FixedWidthReader.detect_colspecs  sK    WW?11#h?@
**s:,c23}}[3 !KLLc#tn%xx!3/<<#>BCdsMM$,,/22dDCC%%c*,-WWY) +  ''$"
$.Q./2#eCj%+dCD
! @ Ds   F;*Fc                   V ^8  d   QhRR/# )r;   r=   r  r?   )r@   s   "rA   rB   r    s     
W 
W) 
WrD   c                	R   V P                   e    \        V P                   4      pM\        V P                  4      pV P                   UUu. uF"  w  r#WV P                  V P                  4      NK$  	  upp#   \         d     R T n         \        T P                  4      p Ldi ; iu uppi rH   )r  r  r   r<   r  r   rN   )rJ   r   from_tos   &   rA   __next__FixedWidthReader.__next__  s    ;;"$DKK(
 <DHLV%2$$T^^4VV ! $"DFF|$ Ws   A6 
(B#6'B B )r  r  rY   rN   r<   )Nd   rH   )r#  N)
r   r   r   r   __doc__r\   r  r  r!  r   r?   rD   rA   r  r  a  s$    $L$L,
W 
WrD   r  c                  >    ] tR tRtRtR R ltR R ltR R ltR	tR
# )FixedWidthFieldParseri  z`
Specialization that Converts fixed-width fields into DataFrames.
See PythonParser for details.
c                    V ^8  d   QhRRRR/# )r;   r<   zReadCsvBuffer[str]r=   r>   r?   )r@   s   "rA   rB   "FixedWidthFieldParser.__annotate__  s     / /, / /rD   c                	    VP                  R 4      V n        VP                  R4      V n        \        P                  ! W3/ VB  R# )r  r  N)popr  r  r7   r\   )rJ   r<   rx   s   &&,rA   r\   FixedWidthFieldParser.__init__  s6    ,88M2d..rD   c                    V ^8  d   QhRRRR/# )r;   r<   r   r=   r  r?   )r@   s   "rA   rB   r(    s     
 
: 
?O 
rD   c                	    \        VV P                  V P                  V P                  V P                  V P
                  4      # rH   )r  r  rN   rY   rF   r  )rJ   r<   s   &&rA   ri   "FixedWidthFieldParser._make_reader  s7    MMNNLLMM
 	
rD   c                    V ^8  d   QhRRRR/# r  r?   )r@   s   "rA   rB   r(    s     
 
 
= 
rD   c                    V Uu. uFA  p\         ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       g   K?  VNKC  	  up# u upi )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              3  |   "   T F2  p\        V\        4      '       * ;'       g    VP                  4       x  K4  	  R # 5irH   )rd   re   r   )r   r  s   & rA   r   <FixedWidthFieldParser._remove_empty_lines.<locals>.<genexpr>  s+     E1z!S))66QWWY6s    <<TF)rm  )rJ   r   r   s   && rA   r  )FixedWidthFieldParser._remove_empty_lines  sI     
sEEsssEEE D
 	
 
s   AAAA)r  r  N)	r   r   r   r   r$  r\   ri   r  r   r?   rD   rA   r&  r&    s    
/

 
rD   r&  c                    V ^8  d   QhRRRR/# )r;   rM   r   r=   r?   )r@   s   "rA   rB   rB     s        rD   c                b    \        V 4      '       g   \        R4      hV ^ 8  d   \        R4      hV # )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 integerzskipfooter cannot be negative)r   rw   )rM   s   &rA   rc   rc     s6    * j!!899A~899 rD   )R
__future__r   collectionsr   r   r   ior   r~   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   r{  r7   r  r&  rc   r?   rD   rA   <module>rL     s    "   	      ! 
 3 4 2   6 " 4 )     ~$: ~$B(qWs|| qWh!
L !
HrD   