1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
U
¬ý°d¼ã&@sÎddlmZddlmZddlmZddlZddlZddlmZddl    Z    ddl
m Z m Z m Z mZmZmZmZmZmZmZmZmZddlZddlZddlmZmZddlmmZ ddl!m"Z"dd    l#m$Z$dd
l%m&Z&m'Z'm(Z(m)Z)dd l*m+Z+dd l,m-Z-m.Z.dd l/m0Z0ddl1m2Z2ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ddlAmBZBmCZCddlDmEZEddlFmGZGmHZHmIZIddlJmKZKddlLmMZMmNZNmOZOmPZPmQZQmRZRddlSmTZTmUZUmVZVmWZWddlXmYZYddlZm[Z\ddl]m^Z^e rüddlFm_Z_Gdd„dƒZ`ejadddfdddd œd!d"„Zbddd#ejcdddd$ddddddddddddddd%dddejadddddddd&e`jdjeejad'œ%Zfdejafd(dd)œd*d+„Zgd7d(d,d-œd.d/„Zhd0d1„Zid2d3„Zjdd4œd5d6„ZkdS)8é)Ú annotations)Ú defaultdict©ÚcopyN)ÚEnum) Ú TYPE_CHECKINGÚAnyÚCallableÚHashableÚIterableÚListÚMappingÚSequenceÚTupleÚcastÚfinalÚoverload)ÚlibÚparsers)Ú STR_NA_VALUES)Úparsing)Ú    ArrayLikeÚDtypeArgÚDtypeObjÚScalar)Úimport_optional_dependency)Ú ParserErrorÚ ParserWarning)Úfind_stack_level)Ú astype_array) Ú ensure_objectÚ is_bool_dtypeÚ is_dict_likeÚis_dtype_equalÚis_extension_array_dtypeÚis_float_dtypeÚ
is_integerÚis_integer_dtypeÚ is_list_likeÚis_object_dtypeÚ    is_scalarÚis_string_dtypeÚ pandas_dtype)ÚCategoricalDtypeÚExtensionDtype)Úisna)Ú
ArrowDtypeÚ DatetimeIndexÚ StringDtype)Ú
algorithms)ÚArrowExtensionArrayÚ BooleanArrayÚ CategoricalÚExtensionArrayÚ FloatingArrayÚ IntegerArray)ÚIndexÚ
MultiIndexÚ default_indexÚensure_index_from_sequences©ÚSeries)Ú    datetimes)Úis_potential_multi_index)Ú    DataFramec@seZdZUGdd„deƒZdZded<ded<ddœd    d
„Zd d d œdd„Zddœdd„Z    e
e ddœdd„ƒƒZ e
dddœdd„ƒZ e
dhddddœdd„ƒZe
did dddœd d!„ƒZe
djd"d#d$œd%d&„ƒZe
d'd(„ƒZe
d)d*„ƒZd+d,„Ze
dkdd.d/œd0d1„ƒZe
dld2dd3œd4d5„ƒZe
d6d d7d8œd9d:„ƒZdmdd;d<œd=d>„Zd?d@d?dAœdBdC„Zed.dDdEdFœdGdH„ƒZed dIdJdFœdKdH„ƒZdLdMdNdFœdOdH„Zd dPddQœdRdS„ZedTd d7dUœdVdW„ƒZedXd dXdUœdYdW„ƒZdZd d[dUœd\dW„Zd]d^„Zd_d`„Zdadœdbdc„Zdndddeœdfdg„Z dS)oÚ
ParserBasec@seZdZdZdZdZdS)zParserBase.BadLineHandleMethodrééN)Ú__name__Ú
__module__Ú __qualname__ÚERRORÚWARNZSKIP©rKrKúTd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/io/parsers/base_parser.pyÚBadLineHandleMethodcsrMFÚboolÚ_implicit_indexÚ _first_chunkÚNone©ÚreturncCsâ| d¡|_d|_| dd¡|_tƒ|_d|_d|_t|     dd¡ƒ|_
g|_ |     dt j ¡|_|     dd¡|_|     dd¡|_|     dd¡|_| d    ¡|_| d
¡|_| d d¡|_| d d ¡|_t| dd¡ƒ|_| d¡|_| d¡|_| d¡|_| d¡|_|     dd ¡|_t|j|j|j|jd|_| d¡|_t |jddrª| d¡rTt!dƒ‚| d¡rht!dƒ‚|jdk    rªt |jddr–t"t#t$|jƒƒsªt$|jƒsªt!dƒ‚d|_%d |_&| '|d¡\|_(|_)| d|j*j+¡|_,dS)NÚnamesÚ    index_colÚ parse_datesFÚ date_parserÚ date_formatÚdayfirstÚ keep_date_colÚ    na_valuesÚ
na_fvaluesÚ    na_filterÚkeep_default_naTÚdtypeÚ
convertersÚ dtype_backendÚ true_valuesÚ false_valuesÚ cache_dates)rWrXrYrdÚheader)Z
allow_setsÚusecolsz;cannot specify usecols when specifying a multi-index headerz9cannot specify names when specifying a multi-index headerzLindex_col must only contain row numbers when specifying a multi-index headerÚ on_bad_lines)-ÚgetrTÚ
orig_namesrUÚsetÚ unnamed_colsÚ index_namesÚ    col_namesÚ_validate_parse_dates_argÚpoprVÚ_parse_date_colsrÚ
no_defaultrWrXrYrZr[r\r]r^rr_r`rarbrcrdÚ_make_date_converterÚ
_date_convrer(Ú
ValueErrorÚallÚmapr&Ú_name_processedrPÚ_validate_usecols_argrfÚ usecols_dtyperMrIrg)ÚselfÚkwdsrKrKrLÚ__init__ksh       ü  ÿ ÿ  ÿþýÿzParserBase.__init__zSequence[Hashable]r )ÚcolumnsrScsŽt|jƒrtj|j ¡Ž}n(t|jƒr@tj dd„|jDƒ¡}ng}t|ƒ}d t    ‡fdd„|Dƒƒ¡}|r|t
d|›dƒ‚‡fdd    „|DƒS)
a
        Check if parse_dates are in columns.
 
        If user has provided names for parse_dates, check if those columns
        are available.
 
        Parameters
        ----------
        columns : list
            List of names of the dataframe.
 
        Returns
        -------
        The names of the columns which will get parsed later if a dict or list
        is given as specification.
 
        Raises
        ------
        ValueError
            If column to parse_date is not in dataframe.
 
        css*|]"}t|ƒrt|tƒs|n|gVqdS©N)r(Ú
isinstanceÚtuple©Ú.0ÚcolrKrKrLÚ    <genexpr>Ñsÿz<ParserBase._validate_parse_dates_presence.<locals>.<genexpr>z, cs"h|]}t|tƒr|ˆkr|’qSrK©rÚstrr©r}rKrLÚ    <setcomp>Ýs
þz<ParserBase._validate_parse_dates_presence.<locals>.<setcomp>z+Missing column provided to 'parse_dates': 'ú'cs*g|]"}t|tƒs|ˆkr|nˆ|‘qSrKr…rr‡rKrLÚ
<listcomp>ésÿz=ParserBase._validate_parse_dates_presence.<locals>.<listcomp>) r"rVÚ    itertoolsÚchainÚvaluesr(Ú from_iterableÚlistÚjoinÚsortedrt)rzr}Z cols_neededZ missing_colsrKr‡rLÚ_validate_parse_dates_presence±s,
 
 þ
 
þÿÿ    
ÿ
þz)ParserBase._validate_parse_dates_presencecCsdSr~rK©rzrKrKrLÚcloseîszParserBase.closecCs6t|jtƒp4t|jtƒo4t|jƒdko4t|jdtƒS)Nr)rrVÚdictrÚlenr“rKrKrLÚ_has_complex_date_colñs    ÿýz ParserBase._has_complex_date_colÚint)ÚirScCsŠt|jtƒr|jS|jdk    r(|j|}nd}|jdkr:|n|j|}t|jƒrj||jkph|dk    oh||jkS||jkp„|dk    o„||jkSdSr~)rrVrNrlrUr*)rzr™ÚnameÚjrKrKrLÚ_should_parse_datesús 
 
 
ÿ
ÿzParserBase._should_parse_dateszSequence[Hashable] | NonezUtuple[Sequence[Hashable], Sequence[Hashable] | None, Sequence[Hashable] | None, bool])rlÚ passed_namesrSc    s&t|ƒdkr|d|d|fSˆj‰ˆdkr.g‰tˆtttjfƒsFˆg‰tˆƒ‰| d¡}ˆ     |ˆj¡\}}}t|dƒ‰t
‡fdd„|dd…Dƒƒsžt dƒ‚‡‡fd    d
„‰tt ‡fd d„|DƒŽƒ}|  ¡}tˆƒD]}| ||¡qÖtˆƒr‡‡fd d „|Dƒ}ndgt|ƒ}d}||||fS)a‚
        Extract and return the names, index_names, col_names if the column
        names are a MultiIndex.
 
        Parameters
        ----------
        header: list of lists
            The header rows
        index_names: list, optional
            The names of the future index
        passed_names: bool, default False
            A flag specifying if names where passed
 
        rErNéÿÿÿÿc3s|]}t|ƒˆkVqdSr~)r–)r‚Z header_iter)Ú field_countrKrLr„;sz<ParserBase._extract_multi_indexer_columns.<locals>.<genexpr>rDz1Header rows must have an equal number of columns.cst‡‡fdd„tˆƒDƒƒS)Nc3s|]}|ˆkrˆ|VqdSr~rK)r‚r™)ÚrÚsicrKrLr„?szMParserBase._extract_multi_indexer_columns.<locals>.extract.<locals>.<genexpr>)r€Úrange©r )rŸr¡r£rLÚextract>sz:ParserBase._extract_multi_indexer_columns.<locals>.extractc3s|]}ˆ|ƒVqdSr~rK©r‚r )r¤rKrLr„Ascs>g|]6}|ˆddk    r6|ˆdˆjkr6|ˆdnd‘qS)rN)rkr¥)ÚicrzrKrLrŠHs þÿÿz=ParserBase._extract_multi_indexer_columns.<locals>.<listcomp>T)r–rUrrr€ÚnpÚndarrayrjroÚ_clean_index_namesrurÚziprr‘Úinsert)    rzrerlrÚ_r}rTZ    single_icrmrK)r¤rŸr¦rzr¡rLÚ_extract_multi_indexer_columnss2 
 
 üz)ParserBase._extract_multi_indexer_columnsNzSequence[Hashable] | MultiIndex)r}rmrScCs(t|ƒr$ttt|ƒ}tj||dS|S)N©rT)rArr rr;Ú from_tuples)rzr}rmZ list_columnsrKrKrLÚ_maybe_make_multi_index_columnsUsz*ParserBase._maybe_make_multi_index_columnszlist[Scalar] | Nonez4tuple[Index | None, Sequence[Hashable] | MultiIndex])Ú indexnamerowrSc
CsÄt|jƒr|jsd}nf|js4| ||¡}| |¡}nH|jr||jsb| t|ƒ|j¡\|_}|_d|_|     ||¡}|j|dd}|r®t
|ƒt
|ƒ}    |dk    sœt ‚|  |d|    …¡}|  ||j¡}||fS)NTF)Útry_parse_dates)Ú is_index_colrUr—Ú_get_simple_indexÚ
_agg_indexrwr©rrlÚ_get_complex_date_indexr–ÚAssertionErrorZ    set_namesr°rm)
rzÚdataZalldatar}r±ÚindexZ simple_indexr¬Z
date_indexZcoffsetrKrKrLÚ _make_indexas(  ÿ  zParserBase._make_indexcCsldd„}g}g}|jD]$}||ƒ}| |¡| ||¡qt|ddD]}| |¡|jsH| |¡qH|S)NcSs"t|tƒs|Std|›dƒ‚dS)NzIndex z invalid)rr†rt©rƒrKrKrLÚix‚s
z(ParserBase._get_simple_index.<locals>.ixT©Úreverse)rUÚappendr‘rorO)rzr¸r}r¼Ú    to_remover¹Úidxr™rKrKrLr´€s
 
 
 zParserBase._get_simple_indexc    sj‡fdd„}g}g}|jD]$}||ƒ}| |¡| ||¡qt|ddD]}| |¡ˆ |¡qL|S)NcsLt|tƒr|Sˆdkr&td|›dƒ‚tˆƒD]\}}||kr.|Sq.dS)Nz Must supply column order to use z     as index)rr†rtÚ    enumerate)Zicolr™Úc©rmrKrLÚ    _get_name™s
z5ParserBase._get_complex_date_index.<locals>._get_nameTr½)rUr¿r‘roÚremove)    rzr¸rmrÅrÀr¹rÁršrÃrKrÄrLr¶—s 
 
 
 z"ParserBase._get_complex_date_indexcs”tˆtƒsˆSi}|jdk    s t‚ˆ ¡D].\}}t|tƒrN||jkrN|j|}|||<q(tˆtƒrt|jƒt| ¡ƒ}|     ‡fdd„|Dƒ¡|S)zconverts col numbers to namesNcsi|]}|ˆ|“qSrKrKr©ÚmappingrKrLÚ
<dictcomp>Ász-ParserBase._clean_mapping.<locals>.<dictcomp>)
rr•rir·Úitemsr˜rrjÚkeysÚupdate)rzrÈÚcleanrƒÚvZremaining_colsrKrÇrLÚ_clean_mapping³s
 
 
 
zParserBase._clean_mappingTr:)r²rScCsdg}| |j¡}t|ƒD]4\}}|rR| |¡rR|j||jdk    rJ|j|ndd}|jrf|j}|j}n t    ƒ}t    ƒ}t
|jt ƒr¶|jdk    sŒt ‚|j|}    |    dk    r¶t |    |j|j|jƒ\}}| |j¡}
d} d} |jdk    rt
|
t ƒrò|
 |j|d¡} t
|t ƒr| |j|¡dk    } | r"t| ƒp$| } | |||B| dk| ¡\}}| |¡q|j}t||ƒ}|S)Nr»F)rÏr`rÂrœrsrlr]r[r\rjrr•r·Ú_get_na_valuesr^r_rhr+Ú _infer_typesr¿r=)rzr¹r²Zarraysr`r™ÚarrÚ col_na_valuesÚcol_na_fvaluesÚcol_nameZ clean_dtypesÚ    cast_typeZindex_converterÚ try_num_boolr¬rTrKrKrLrµÄsV þ 
ÿ  
 ÿÿ 
zParserBase._agg_indexr )ÚdctÚverbosec    Cs i}| ¡D]ø\}}    |dkr"dn
| |d¡}
t|tƒrF| |d¡} n|} |jrft||||jƒ\} } ntƒtƒ} } ||jkr¬t     
|    t| ƒ| B¡}t   |    |t j ¡|    ||<q |
dk    rJ| dk    rØtjd|›dttƒdzt |    |
¡}    Wn<tk
r$t     
|    t|ƒ¡ t j¡}t |    |
|¡}    YnX|j|    t| ƒ| B| dkdd\}}n˜t| ƒ}|p^t| ƒ}| oh| }| |    t| ƒ| B| dk|¡\}}| rât|| ƒr¤|râ|sÌ|dkrÌt| ƒrÌtd|›ƒ‚t| ƒ} | || |¡}|||<|r |r t d|›d    |›ƒq |S)
Nz5Both a converter and dtype were specified for column z# - only the converter will be used.©Ú
stacklevelF)r×rz$Bool column has NA values in column zFilled z NA values in column )!rÊrhrr•r]rÐr^rjrpr3Úisinr§ÚputmaskÚnanÚwarningsÚwarnrrrZ    map_inferrtrÚviewÚuint8Zmap_infer_maskrÑr$r+r#r!r,Ú _cast_typesÚprint)rzrØr[r\rÙr`ZdtypesÚresultrÃrZconv_frÖrÓrÔÚmaskZcvalsÚna_countZis_eaZis_str_or_ea_dtyper×rKrKrLÚ_convert_to_ndarraysøsz
 
ÿ
 
 
 
ú    ÿþ
ü  
ü
zParserBase._convert_to_ndarraysz    list[int]zset[int])Ú col_indicesrTrScs@tƒ}|jdkrt|jƒ‰nt|jƒs0|jdkr6ˆ‰nd‰ddœ‡‡‡fdd„ }t|jtƒrœ|jD]6}t|tƒrŠ|D]}| ||ƒ¡qtqb| ||ƒ¡qbn t|jt    ƒrì|j 
¡D]6}t|tƒrÚ|D]}| ||ƒ¡qÄq²| ||ƒ¡q²nP|jr<t|j tƒr |j D]}| ||ƒ¡qn|j dk    r<| ||j ƒ¡|S)a…
        Set the columns that should not undergo dtype conversions.
 
        Currently, any column that is involved with date parsing will not
        undergo such conversions. If usecols is specified, the positions of the columns
        not to cast is relative to the usecols not to all columns.
 
        Parameters
        ----------
        col_indices: The indices specifying order and positions of the columns
        names: The column names which order is corresponding with the order
               of col_indices
 
        Returns
        -------
        A set of integers containing the positions of the columns not to convert.
        Úinteger)ÚemptyNNr˜rRcs2ˆdk    rt|ƒrˆ|}t|ƒs.ˆˆ |¡}|Sr~)r&r¹)Úx©rérTrfrKrLÚ_setus
z5ParserBase._set_noconvert_dtype_columns.<locals>._set) rjryr‘rfÚcallablerrVrÚaddr•rrU)rzrérTZnoconvert_columnsrîÚvalÚkrKrírLÚ_set_noconvert_dtype_columnsRs4
      
 
 
 
 z'ParserBase._set_noconvert_dtype_columnsztuple[ArrayLike, int])r×rSc    Cs d}t|jjtjtjfƒr€t dd„|Dƒ¡}t ||¡}|j    ddd 
¡}|dkrxt |ƒrh|     tj ¡}t  ||tj¡||fS|j}|o’|tjk    }|rˆt|jƒrˆztj||d|d\}    }
Wn(ttfk
rèt ||¡}|}    YnžX|rz|
dkr tj|    jtjd    }
|
 ¡r0ttj|
jtjd    |
ƒ}    n@t |    ƒrFt|    |
ƒ}    n*t|    ƒr\t|    |
ƒ}    nt |    ƒrpt!|    |
ƒ}    |
 
¡}n t"|    ƒ 
¡}n|}    |jtj#kr¦t ||¡}|    jtj#krN|rNt$j%t &|¡|j'|j(|d
\}    } |    jtjkr|r| dkr
tj|    jtjd    } t|    | ƒ}    n8|    jtj#krN|rNt )|    ¡} | d krNt*ƒ +¡ ,|¡}    |d kr˜t-d ƒ} t.|    tj/ƒr‚t0| j|    d dƒ}    nt0| j|     1¡d dƒ}    |    |fS)a«
        Infer types of values, possibly casting
 
        Parameters
        ----------
        values : ndarray
        na_values : set
        no_dtype_specified: Specifies if we want to cast explicitly
        try_num_bool : bool, default try
           try to cast values to numeric (first preference) or boolean
 
        Returns
        -------
        converted : ndarray or ExtensionArray
        na_count : int
        rcSsg|]}t|tƒs|‘qSrKr…)r‚rñrKrKrLrŠ­s
z+ParserBase._infer_types.<locals>.<listcomp>râFr)Úconvert_to_masked_nullableN©r_)rbrcrôÚdatetimeÚpyarrowT)Z from_pandas)2Ú
issubclassr_Útyper§ÚnumberZbool_Úarrayr3rÜÚastypeÚsumr'Úfloat64rÝrÞrarrqr)Zmaybe_convert_numericrtÚ    TypeErrorrZsanitize_objectsÚzerosÚshaperur9ZonesÚint64r!r5r%r8r/Zobject_ÚlibopsZmaybe_convert_boolÚasarrayrbrcÚ infer_dtyper2Úconstruct_array_typeZ_from_sequencerrr¨r4Úto_numpy)rzrr[Zno_dtype_specifiedr×rçræraZnon_default_dtype_backendråZ result_maskZ    bool_maskZ inferred_typeÚparKrKrLrїs„   ÿü 
 
 
ÿ
 
 
 
 
 ü
 
 
 
 
ÿzParserBase._infer_typesrr)rrÖrSc
Csjt|tƒr`|jdk    }t|jƒs2|s2tj|ddd}t|ƒ ¡     ¡}t
j ||  |¡||j d}nt|tƒrÞ| ¡}z4t|ƒr”|j|||j |jdWS|j||dWSWn4tk
rÚ}ztd|›dƒ|‚W5d}~XYnXnˆt|tƒrø|j|dd    }nnt|jtƒrtj|d
dd}nNzt||d
d    }Wn:tk
rd}ztd |›d |›ƒ|‚W5d}~XYnX|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)ÚskipnaZconvert_na_value)rb)r_rbrcrõzExtension Array: zO must implement _from_sequence_of_strings in order to be used in parser methodsrTzUnable to convert column z     to type )rr-Ú
categoriesr)r_rZensure_string_arrayr:ÚuniqueZdropnar6Z_from_inferred_categoriesZ get_indexerrbr.rr!Z_from_sequence_of_stringsrcÚNotImplementedErrorr7rürørùr†rrt)rzrrÖÚcolumnZ
known_catsZcatsZ
array_typeÚerrrKrKrLrãÿsb
 
ÿÿ
 
ü
ÿý
ÿÿþzParserBase._cast_typesrBz,tuple[Sequence[Hashable] | Index, DataFrame])rTr¸rScCsdSr~rK©rzrTr¸rKrKrLÚ_do_date_conversionsFszParserBase._do_date_conversionszMapping[Hashable, ArrayLike]z7tuple[Sequence[Hashable], Mapping[Hashable, ArrayLike]]cCsdSr~rKrrKrKrLrNszSequence[Hashable] | Indexz(Mapping[Hashable, ArrayLike] | DataFramezKtuple[Sequence[Hashable] | Index, Mapping[Hashable, ArrayLike] | DataFrame]c
Cs:|jdk    r2t||j|j|j|j||j|jd\}}||fS)N)rZra)rVÚ_process_date_conversionrsrUrlrZrarrKrKrLrVs
ø
zSequence[ArrayLike])r}r¸rScCsz|jsvt|ƒt|ƒkrv|rvt|dƒo0|ddk}|t|dƒB}t|ƒt|ƒdkrdt |¡rddStjdtt    ƒddS)aeChecks if length of data is equal to length of column names.
 
        One set of trailing commas is allowed. self.index_col not False
        results in a ParserError previously when lengths do not match.
 
        Parameters
        ----------
        columns: list of column names
        data: list of array-likes containing the data column-wise.
        ržÚrDNzkLength of header or names does not match length of data. This leads to a loss of data with index_col=False.rÚ)
rUr–r)r/r§rurßràrr)rzr}r¸Z    empty_strZempty_str_or_narKrKrLÚ_check_data_lengthksüzParserBase._check_data_lengthz'set[int] | Callable[[Hashable], object])rfrTrScCsdSr~rK©rzrfrTrKrKrLÚ_evaluate_usecolsˆszParserBase._evaluate_usecolszset[str]cCsdSr~rKrrKrKrLrsz2Callable[[Hashable], object] | set[str] | set[int]zset[str] | set[int]cs"tˆƒr‡fdd„t|ƒDƒSˆS)a 
        Check whether or not the 'usecols' parameter
        is a callable.  If so, enumerates the 'names'
        parameter and returns a set of indices for
        each entry in 'names' that evaluates to True.
        If not a callable, returns 'usecols'.
        csh|]\}}ˆ|ƒr|’qSrKrK)r‚r™rš©rfrKrLrˆ£sz/ParserBase._evaluate_usecols.<locals>.<setcomp>)rïrÂrrKrrLr–s cs0‡fdd„|Dƒ}t|ƒdkr,td|›ƒ‚|S)ai
        Validates that all usecols are present in a given
        list of names. If not, raise a ValueError that
        shows what usecols are missing.
 
        Parameters
        ----------
        usecols : iterable of usecols
            The columns to validate are present in names.
        names : iterable of names
            The column names to check against.
 
        Returns
        -------
        usecols : iterable of usecols
            The `usecols` parameter if the validation succeeds.
 
        Raises
        ------
        ValueError : Columns were missing. Error message will list them.
        csg|]}|ˆkr|‘qSrKrK©r‚rÃr®rKrLrмsz6ParserBase._validate_usecols_names.<locals>.<listcomp>rz>Usecols do not match columns, columns expected but not found: )r–rt)rzrfrTÚmissingrKr®rLÚ_validate_usecols_names¦s  ÿz"ParserBase._validate_usecols_namescCsbd}|dk    rZt|ƒr|dfSt|ƒs,t|ƒ‚tj|dd}|dkrJt|ƒ‚t|ƒ}||fS|dfS)as
        Validate the 'usecols' parameter.
 
        Checks whether or not the 'usecols' parameter contains all integers
        (column selection by index), strings (column by name) or is a callable.
        Raises a ValueError if that is not the case.
 
        Parameters
        ----------
        usecols : list-like, callable, or None
            List of columns to use when parsing or a callable that can be used
            to filter a list of table columns.
 
        Returns
        -------
        usecols_tuple : tuple
            A tuple of (verified_usecols, usecols_dtype).
 
            'verified_usecols' is either a set if an array-like is passed in or
            'usecols' if a callable or None is passed in.
 
            'usecols_dtype` is the inferred dtype of 'usecols' if an array-like
            is passed in or None if a callable or None is passed in.
        z['usecols' must either be list-like of all strings, all unicode, all integers or a callable.NF)r    )rërêÚstring)rïr(rtrrrj)rzrfÚmsgryrKrKrLrxÅsÿz ParserBase._validate_usecols_argztuple[list | None, list, list]c    Csòt|ƒsd||fSt|ƒ}|s2dgt|ƒ||fSt|ƒ}g}t|ƒ}t|ƒD]j\}}t|tƒrœ| |¡t|ƒD]&\}}||krr|||<| |¡q¸qrqN||}| |¡| |¡qNt|ƒD]$\}}t|tƒrÂ||jkrÂd||<qÂ|||fSr~)    r³rr–rÂrr†r¿rÆrk)    rzr}rUZcp_colsrlr™rÃr›ršrKrKrLr©ös.
 
 
 
 
 
zParserBase._clean_index_nameszDtypeArg | Nonerõc
sØtˆƒ‰t|ƒs*|pt‰t‡fdd„ƒ‰n*tt|ƒ}tdd„‡fdd„| ¡Dƒƒ‰|dksl|dksl|dkrvtdƒ}nF‡fdd    „|Dƒ}t||d
}|     ¡t
|ƒD]\}}ˆ  ||¡q¤‡fd d„ˆDƒ}    |ˆ|    fS) NcsˆSr~rKrK)Ú default_dtyperKrLÚ<lambda>'óz,ParserBase._get_empty_meta.<locals>.<lambda>cSstSr~)ÚobjectrKrKrKrLr+rcs&i|]\}}t|ƒrˆ|n||“qSrK)r&)r‚ròrÎr‡rKrLrÉ,sz.ParserBase._get_empty_meta.<locals>.<dictcomp>Frcsg|]}tgˆ|d‘qS©rõr>)r‚rš©Ú
dtype_dictrKrLrŠ<sz.ParserBase._get_empty_meta.<locals>.<listcomp>r®csi|]}|tgˆ|d“qSr r>)r‚rÕr!rKrLrÉCs) rr"rrrr•rÊr<r=ÚsortrÂro)
rzr}rUrlr_r¹r¸r™ÚnZcol_dictrK)r}rr"rLÚ_get_empty_metas(
þ
 
ÿzParserBase._get_empty_meta)F)N)N)T)FNN)T)N)!rFrGrHrrMrOÚ__annotations__r|r’r”rÚpropertyr—rœr­r°rºr´r¶rÏrµrèrórÑrãrrrrrrxr©r%rKrKrKrLrCbsj
 F=üFý ÿ
 
3ùYEÿhG1&ÿrCFTrNz dict[Hashable, str] | str | None)rYrdrXcsRˆtjk    rtjdttƒdˆtjk    r6ˆdk    r6tdƒ‚ddœ‡‡‡‡fdd„ }|S)Nz·The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.rÚz/Cannot use both 'date_parser' and 'date_format'r
r»csЈtjkrjt |¡}tˆtƒr(ˆ |¡nˆ}tjt    |ƒ|dˆdˆd}t|t
ƒrd|  ¡}d|j _ |S|jSz.tjˆ|Ždˆd}t|tjƒr”tdƒ‚|WStk
rÊtjtjt |¡ˆdddYSXdS)    NFÚignore)ÚformatÚutcrYÚerrorsÚcacheT)r+r,z scalar parser)Úparser)r+)rrqrZconcat_date_colsrr•rhÚtoolsÚ to_datetimer r1rÚflagsZ    writeableZ_valuesröÚ    Exceptionr²)rƒÚ    date_colsÚstrsZdate_fmtrårÒ©rdrXrWrYrKrLÚ    converter\sD
 
ÿú
ÿ þûz'_make_date_converter.<locals>.converter)rrqrßràÚ FutureWarningrrÿ)rWrYrdrXr5rKr4rLrrJs
ú%rrú"ZinferÚ.Ústrict)%Ú    delimiterÚ
escapecharÚ    quotecharÚquotingÚ doublequoteÚskipinitialspaceÚlineterminatorrerUrTZskiprowsZ
skipfooterZnrowsr[r^rbrcr`r_rdZ    thousandsÚcommentÚdecimalrVrZrYrWrXrfÚ    chunksizerÙÚencodingÚ compressionZskip_blank_linesZencoding_errorsrgrar    )r5rZcs‡‡fdd„}g}    i}
|} t|ƒ}tƒ} |dks:t|tƒrB||fSt|tƒr8|D]â} t| ƒsht| tƒrìt| tƒr‚| |kr‚| | } || ƒrŽqRnB|dkrÐddl}|| j}t|t    ƒrÐ|j
  |j ¡sR|j
  |j ¡rÐqR|t || ¡| d|| <qRt|| || ƒ\}}}||krtd|›ƒ‚||
|<|     |¡|  |¡qRnˆt|tƒrÀ| ¡D]r\}} ||krntd|›dƒ‚t|| || |d    \}}}||
|<t| ƒd
kr¨||
| d<|     |¡|  |¡qL| |
¡|     |¡|sþt| ƒD]}| |¡|     |¡qâ||    fS) Ncs$tˆtƒr|ˆkp"tˆtƒo"|ˆkSr~)rr)Úcolspec©rUrlrKrLÚ_isindex¹sÿz*_process_date_conversion.<locals>._isindexr÷rr»z New date column already in dict z Date column z already in dict)Ú target_namerD)rrjrrNr*r€r˜r÷r_r0ÚtypesZ is_timestampZ pyarrow_dtypeZis_dater§rÚ_try_convert_datesrtr¿rÌr•rÊr–ÚextendrorÆ)Ú    data_dictr5Z
parse_specrUrlr}rZrarHZnew_colsZnew_datarir2rFrr_Únew_namerƒZ    old_namesr¬rÃrKrGrLr¯s|
 
 
 ÿ þ ÿ ÿ
 
 
 
û  
 
 
 
rz
str | None)r-rIc sÈt|ƒ}g}|D]D}||kr(| |¡qt|tƒrJ||krJ| ||¡q| |¡qtdd„|Dƒƒr~ttdjt|Žƒƒ}nd dd„|Dƒ¡}‡fdd„|Dƒ}    ||    d|dkr¶|n|iŽ}
||
|fS)Ncss|]}t|tƒVqdSr~)rr€©r‚rìrKrKrLr„sz%_try_convert_dates.<locals>.<genexpr>r¬cSsg|] }t|ƒ‘qSrK)r†rOrKrKrLrŠsz&_try_convert_dates.<locals>.<listcomp>cs"g|]}|ˆkrt ˆ|¡‘qSrK)r§rr©rMrKrLrŠ srƒ)    rjr¿rr˜rur€rvrrª) r-rFrMr}rIZcolsetZcolnamesrÃrNZto_parseZnew_colrKrPrLrK s  rKcCsJt|tƒr>||kr"||||fS|r0ttƒfStƒtƒfSn||fSdS)a 
    Get the NaN values for a given column.
 
    Parameters
    ----------
    col : str
        The name of the column.
    na_values : array-like, dict
        The object listing the NaN values as strings.
    na_fvalues : array-like, dict
        The object listing the NaN values as floats.
    keep_default_na : bool
        If `na_values` is a dict, and the column is not mapped in the
        dictionary, whether to return the default NaN values or the empty set.
 
    Returns
    -------
    nan_tuple : A length-two tuple composed of
 
        1) na_values : the string NaN values for that column.
        2) na_fvalues : the float NaN values for that column.
    N)rr•rrj)rƒr[r\r^rKrKrLrÐ&s
 
rÐcCsBd}|dk    r>t|ƒr(t |¡s>t|ƒ‚nt|ttfƒs>t|ƒ‚|S)z„
    Check whether or not the 'parse_dates' parameter
    is a non-boolean scalar. Raises a ValueError if
    that is the case.
    zSOnly booleans, lists, and dictionaries are accepted for the 'parse_dates' parameterN)r*rZis_boolrÿrrr•)rVrrKrKrLrnIsÿ
 
rnrRcCs|dk    o|dk    S)NFrKr»rKrKrLr³_sr³)N)lÚ
__future__rÚ collectionsrrÚcsvröÚenumrr‹Útypingrrr    r
r r r rrrrrrßÚnumpyr§Z pandas._libsrrZpandas._libs.opsZ_libsÚopsrZpandas._libs.parsersrZpandas._libs.tslibsrZpandas._typingrrrrZpandas.compat._optionalrZ pandas.errorsrrZpandas.util._exceptionsrZpandas.core.dtypes.astyperZpandas.core.dtypes.commonr r!r"r#r$r%r&r'r(r)r*r+r,Zpandas.core.dtypes.dtypesr-r.Zpandas.core.dtypes.missingr/Zpandasr0r1r2Z pandas.corer3Zpandas.core.arraysr4r5r6r7r8r9Zpandas.core.indexes.apir:r;r<r=Zpandas.core.seriesr?Zpandas.core.toolsr@r.Zpandas.io.commonrArBrCrqrrÚ QUOTE_MINIMALrMrIZparser_defaultsrrKrÐrnr³rKrKrKrLÚ<module>s²    8     <       pü;Ù2ø_ÿ#