hyb
2026-01-30 7657e1b2fa251a2ea372710ad75cb395a3c0e374
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
Ë
nñúhH½ãóŠ—ddlmZddlmZmZddlmZmZmZm    Z    ddl
Z
ddl m Z ddl Z ddlmZmZmZmZmZddlZddlZddlmZddlmZmZmZdd    lmZdd
lm Z dd l!m"Z"m#Z#m$Z$dd l%m&Z&dd l'm(Z(m)Z)ddl*m+Z+m,Z,erddl-m.Z.m/Z/m0Z0ddl1m2Z2m3Z3dZ4Gd„de+«Z5Gd„dej«Z6Gd„de5«Z7dd„Z8dd„Z9y)é)Ú annotations)ÚabcÚ defaultdict)ÚHashableÚIteratorÚMappingÚSequenceN)ÚStringIO)ÚIOÚ TYPE_CHECKINGÚ DefaultDictÚLiteralÚcast)Úlib)ÚEmptyDataErrorÚ ParserErrorÚ ParserWarning)Úcache_readonly)Úfind_stack_level)Ú is_bool_dtypeÚ
is_integerÚis_numeric_dtype)Ú is_dict_like)Ú dedup_namesÚis_potential_multi_index)Ú
ParserBaseÚparser_defaults)Ú    ArrayLikeÚ ReadCsvBufferÚScalar)ÚIndexÚ
MultiIndexucón‡—eZdZUded<dˆfd„ Zed d„«Zd!d„Z    d"            d#d„Z                d$d„Z        d"            d%d„Z
                d&d    „Z ed'd
„«Z         d(d „Z ed „«Z                                d)d „Zd*d„Zd+d„Zd,d„Zd*d„Zd-d„Zd.d„Zd/d„Zd/d„Zd/d„Z                                d0d„Zd/d„Zd1d„Z        d2d„Zd3d„Zd"d4d„Zd5d„Zd6d„Z ˆxZ!S)7Ú PythonParserúset[int]Ú_no_thousands_columnsc 󤕇—t‰‰|«d‰_g‰_d‰_d‰_|d‰_t‰j «r‰j ‰_n
ˆfd„‰_t|d«‰_
|d‰_ |d‰_ t‰jt«rt‰j«‰_ |d‰_|d    ‰_|d
‰_|d ‰_|d ‰_|d ‰_d‰_d|vr
|d‰_|d‰_|d‰_|d‰_|d‰_t|t4«rt7t8t|«‰_n$t;|d«sJ‚‰j=|«‰_d‰_‰jA«\}‰_!‰_"‰jG|‰jH«\‰_%‰_$‰_&}t5‰jJ«‰_'‰jPs8‰jS«\}‰_'‰_%d‰_*‰jH€|‰_$‰j>€,t5tWtY‰jJ«««‰_‰j[‰jJ«‰_.‰j_«‰_0tY‰j0«dk7r tcd«‚y)zN
        Workhorse function for processing nested list into DataFrame
        NrÚskiprowscó •—|‰jvS©N)r()ÚxÚselfs €úRH:\Change_password\venv_build\Lib\site-packages\pandas/io/parsers/python_parser.pyú<lambda>z'PythonParser.__init__.<locals>.<lambda>Zsø€ a¨4¯=©=Ð&8€óÚ
skipfooterÚ    delimiterÚ    quotecharÚ
escapecharÚ doublequoteÚskipinitialspaceÚlineterminatorÚquotingÚskip_blank_linesFÚhas_index_namesÚverboseÚ    thousandsÚdecimalÚcommentÚreadlineTéz'Only length-1 decimal markers supported)2ÚsuperÚ__init__ÚdataÚbufÚposÚline_posr(ÚcallableÚskipfuncÚ_validate_skipfooter_argr0r1r2Ú
isinstanceÚstrr3r4r5r6r7r8r9r:r;r<r=ÚlistrrÚhasattrÚ _make_readerÚ _col_indicesÚ_infer_columnsÚnum_original_columnsÚ unnamed_colsÚ_extract_multi_indexer_columnsÚ index_namesÚcolumnsÚ    col_namesÚ
orig_namesÚ_has_complex_date_colÚ_get_index_nameÚ_name_processedÚrangeÚlenÚ_validate_parse_dates_presenceÚ_parse_date_colsÚ_set_no_thousand_columnsr&Ú
ValueError)r,ÚfÚkwdsrTÚ_rSÚ    __class__s`     €r-rAzPythonParser.__init__Js›ù€ô    ‰Ñ˜Ôà*.ˆŒ    ØˆŒØˆŒØˆŒ à˜ZÑ(ˆŒ ä D—M‘MÔ "Ø ŸM™MˆDMã8ˆDŒMä2°4¸ Ñ3EÓFˆŒØ˜kÑ*ˆŒà˜kÑ*ˆŒÜ d—n‘n¤cÔ *Ü  §¡Ó0ˆDŒNà˜|Ñ,ˆŒØ  Ñ.ˆÔØ $Ð%7Ñ 8ˆÔØ"Ð#3Ñ4ˆÔؘI‘ˆŒ Ø $Ð%7Ñ 8ˆÔà$ˆÔØ  Ñ $Ø#'Ð(9Ñ#:ˆDÔ  à˜I‘ˆŒ à˜kÑ*ˆŒØ˜I‘ˆŒ à˜I‘ˆŒ ô aœÔ äœX¤c™]¨AÓ.ˆDIä˜1˜jÔ)Ð )Ð)Ø×)Ñ)¨!Ó,ˆDŒIð/3ˆÔð × Ñ Ó !ñ        
Ø Ø Ô %Ø Ô ð × /Ñ /Ø Ø × Ñ ó
ñ     
Ø ŒLØ Ô Ø ŒNØ ô+/¨t¯|©|Ó*<ˆŒð
×)Ò)Ø;?×;OÑ;OÓ;QÑ 8ˆ[˜$œ/¨4¬<Ø#'ˆDÔ  Ø×ÑÐ'Ø#.Ô à × Ñ Ð $Ü $¤U¬3¨t¯|©|Ó+<Ó%=Ó >ˆDÔ à $× CÑ CÀDÇLÁLÓ QˆÔØ%)×%BÑ%BÓ%DˆÔ"ä ˆt|‰|Ó  Ò !ÜÐFÓGÐ Gð "r/cóà—tj|j«}|j€d|›d}n(tj|j«}d|›d|›d}tj|«S)Nz^[\-\+]?[0-9]*(z [0-9]*)?([0-9]?(E|e)\-?[0-9]+)?$z^[\-\+]?([0-9]+z    |[0-9])*()ÚreÚescaper<r;Úcompile)r,r<Úregexr;s    r-ÚnumzPythonParser.num©sm€ä—)‘)˜DŸL™LÓ)ˆØ >‰>Ð !Ø& w iÐ/OÐP‰E䟠   ™     $§.¡.Ó1ˆIà" 9 +¨Y°w°ið@,ð-ð ôz‰z˜%ӠРr/cóȇ‡‡ —‰jŠ ‰ t‰ «dk(r´‰jr td«‚Gˆfd„dtj
«}|}‰     ‰ |_n[‰j «}‰j|gg«d}‰j‰j«s|sZ‰xjdz c_    ‰j «}‰j|gg«d}‰j‰j«rŒW|sŒZttt|«}|d}‰xjdz c_    ‰xjdz c_ t    j«j|«}|j|_t    j t#|«|¬«}‰j$j't|««t    j ‰|d¬«}    |    Sˆˆ fd    „}
|
«}    |    S)
Nr?z<Custom line terminators not supported in python parser (yet)có®•—eZdZW°jZW°jZW°j
ZW°j ZW°jZW°jZdZ    y)ú,PythonParser._make_reader.<locals>.MyDialectú
N)
Ú__name__Ú
__module__Ú __qualname__r1r2r3r4r5r7r6©r,s€r-Ú    MyDialectrl¿sCø„Ù ŸN™N    Ù ŸN™N    Ù!Ÿ_™_
Ù"×.Ñ. Ù#'×#8Ñ#8Рٟ,™,Ø!%‘r/rrr)ÚdialectT)rsÚstrictc3óê•K—‰j«}tj‰«}|j|j    ««–—‰D]#}|j|j    ««–—Œ%y­wr*)r>rergÚsplitÚstrip)ÚlineÚpatr`Úseps  €€r-Ú_readz(PythonParser._make_reader.<locals>._readésXøèø€Ø—z‘z“|Ü—j‘j “oà—i‘i §
¡
£ Ó-Ò-àò2DØŸ)™) D§J¡J£LÓ1Ó1ñ2ùsƒA0A3)r1r[r6r_ÚcsvÚDialectr>Ú_check_commentsrGrDrrKrJrEÚSnifferÚsniffÚreaderr
rCÚextend) r,r`rrÚdiarxÚlinesÚ    lines_strÚsniffedÚline_rdrrr{rzs ``         @r-rMzPythonParser._make_reader¶s‡ú€Øn‰nˆà ˆ;œ#˜c›( a›-Ø×"Ò"Ü ØRóðö &œCŸK™Kô &ðˆCàˆØ #– ð—z‘z“|Ø×,Ñ,¨t¨f¨XÓ6°qÑ9Ø—m‘m D§H¡HÔ-±UØ—H’H ‘M•HØŸ:™:›<DØ ×0Ñ0°4°&°Ó:¸1Ñ=Eð—m‘m D§H¡HÕ-²Uô!¤¤c¡¨EÓ2    ð! ‘|à—’˜A‘ •Ø— ’  Ñ"• ÜŸ+™+›-×-Ñ-¨dÓ3Ø '× 1Ñ 1” ôŸ:™:¤h¨t£n¸cÔBØ—‘—‘¤ X£Ô/ô—Z‘Z ¨3°tÔ<ˆFðˆ õ 2ñ“WˆFàˆ r/cóô—    |j|«}d|_t    |j
«}t |«sut|j
t|j
|j««}|j||j«\}}}|j||j«}|||fSt|d«}d}    |jr|t |«k(r
|d}    |dd}|j!|«}
|j#|
«\} }|j%| «} |j'|| «\}} |j)| |
||    «\}} || | fS#t$r$|jrg}n|j«‚YŒcwxYw)NFrr?)Ú
_get_linesÚ StopIterationÚ _first_chunkÚcloserKrVr[rrÚ    index_colÚ_get_empty_metaÚdtypeÚ_maybe_make_multi_index_columnsrUÚcount_empty_valsr9Ú _rows_to_colsÚ_exclude_implicit_indexÚ _convert_dataÚ_do_date_conversionsÚ _make_index)r,ÚrowsÚcontentrTÚnamesÚindexÚcol_dictÚ conv_columnsÚcount_empty_content_valsÚ indexnamerowÚalldatarBÚ    conv_dataÚresult_columnss              r-ÚreadzPythonParser.readös€ð
    Ø—o‘o dÓ+ˆGð"ˆÔä&*¨4¯?©?Ó&;ˆÜ7Œ|ô Ø—‘Ü(Ø—O‘OØ—N‘NóóˆEð(,×';Ñ';ØØ—
‘
ó(Ñ $ˆE7˜Hð ×?Ñ?ÀÈÏÉÓXˆLؘ,¨Ð0Ð 0ô$4°G¸A±JÓ#?Р؈ Ø × Ò Ð$<ÄÀGà Ò$LØ" 1™:ˆLؘa˜bkˆGà×$Ñ$ WÓ-ˆØ×4Ñ4°WÓ=‰ ˆˆgà×&Ñ& tÓ,ˆ    Ø!×6Ñ6°wÀ    ÓJшà $× 0Ñ 0Ø w ¨ó!
шˆ~ðn iÐ/Ð/øô[ò    Ø× Ò Ø‘à—
‘
” Øòð    ús‚E
Å
)E7Å6E7cóP—t|jt|j|j««}d}|jrt |j«}t |«}|j ||«t|«Dcic]\}}||ksŒ ||||z“Œc}}|fScc}}w©Nr)rrVrrÚ_implicit_indexr[Ú_check_data_lengthÚ    enumerate)r,rŸr™ÚoffsetÚ len_alldataÚiÚnames       r-r“z$PythonParser._exclude_implicit_index,s¦€ô
Ø O‰OÜ $Ø—‘Ø—‘ó ó
ˆðˆØ × Ò ä˜Ÿ™Ó(ˆFä˜'“lˆ Ø ×Ñ  wÔ/ô6?¸uÓ5E÷
Ù*1¨!¨TÈÈ[ˈD'˜!˜f™*Ñ%Ñ %ó
à ðð    ùó
s  B" B"cóB—|€ |j}|j|¬«S)N)r—)Ú    chunksizer¢)r,Úsizes  r-Ú    get_chunkzPythonParser.get_chunkFs#€ð
ˆ<à—>‘>ˆD؏y‰y˜dˆyÓ#Ð#r/cóè—|j|j«}|j|j«}i}i}t|jt
«rg|jD]W}|j|}|j |}t|t«r||jvr|j|}|||<|||<ŒYn|j}|j }|j||||j||«Sr*) Ú_clean_mappingÚ
convertersrrIÚ    na_valuesÚdictÚ
na_fvaluesÚintrVÚ_convert_to_ndarraysr:)    r,rBÚ
clean_convÚ clean_dtypesÚclean_na_valuesÚclean_na_fvaluesÚcolÚna_valueÚ    na_fvalues             r-r”zPythonParser._convert_dataPsì€ð
×(Ñ(¨¯©Ó9ˆ
Ø×*Ñ*¨4¯:©:Ó6ˆ ðˆØÐä d—n‘n¤dÔ +Ø—~‘~ò 2ØŸ>™>¨#Ñ.Ø ŸO™O¨CÑ0    ä˜c¤3Ô'¨C°t·±Ñ,FØŸ/™/¨#Ñ.Cà'/ Ñ$Ø(1Р Ò%ñ 2ð#Ÿn™nˆOØ#Ÿ™Ð à×(Ñ(Ø Ø Ø Ø L‰LØ Ø ó 
ð    
r/cóœ—|j€y|j}t|tttj
f«rt |«dkDSy)NFr?)ÚheaderrIrKÚtupleÚnpÚndarrayr[)r,rÀs  r-Ú_have_mi_columnszPythonParser._have_mi_columnsss>€à ;‰;Ð Øà—‘ˆÜ fœt¤U¬B¯J©JÐ7Ô 8ܐv“; ‘?Ð "àr/c
óH —|j}d}d}t«}|jù|j}|j}t    |t
t tjf«r|rt |«|ddzgz}n|g}g}t|«D]u\}}        |j«}
|j|    kr |j«}
|j|    krŒ g}g}t|
«D]N\}}|d k(r3|r    d|›d|›}nd|›}|j)|«|j)|«Œ>|j)|«ŒP|st-t.«}t1t#|««Dcgc]}||vr|‘Œ
c}|z}|D]Ö}||}|}||}|dkDr¶|dkDr$|dz||<|›d|›}||vr|dz }n||}|dkDrŒ$|j2t5|j2«rl|j2j7|«Q|j2j7|«€6|j2j9||j2j7|«i«|||<|dz||<ŒØnj|rh|    |dk(r`t#|«}|j:}| t#|«nd}t#|«}||k7r||z
|kDs|dk(rd}dg|z}|j<dg|_|j)|«|j9|Dchc]}||’Œ    c}«t#|«dk(sŒkt#|«}Œx|r|j'«|ð    |j«}|€dn
t#|«}t#|«t#|d«kDrt#|«|kDr t%d«‚t#|«dkDr t?d«‚|j@|jC|||«n t#|«}|jDIt#|«t#|jD«k7r(tG|jD«Dcgc]}||‘Œ    c}g}nô|g}nð|jC||d|«}nÙt#|jH«}|}|s,t t1|««g}|jC||d|«}n”|j@t#|«|k\r |jC|g||«}t#|«}nZtK|j@«s,t#|«t#|j@«k7r t%d«‚|g}|jC||d|«|||fS#t$rø} d|jcxkr|    krknnh|r|    |dk7r^t tt|r|ddn|««} ddj!| «›dt#| «›d} t%d    | ›d
|j›d «| ‚|rD|    dkDr?|r|j'«|j)dgt#|d«z«|||fcYd} ~ cS|js t+d «| ‚|jdd}
Yd} ~ Œ'd} ~ wwxYwcc}wcc}w#t$rd}YŒðwxYwcc}w)NrTéÿÿÿÿr?ú[ú,z
], len of z, zPassed header=z    but only z lines in fileúNo columns to parse from fileÚ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™ÚsetrÀrÄrIrKrÁrÂrÃr§Ú_buffered_linerEÚ
_next_linerŠÚmaprJÚjoinr[r_Ú _clear_bufferÚappendrrr¶rZrrÚgetÚupdaterrCÚ    TypeErrorÚusecolsÚ_handle_usecolsrNÚsortedÚ _header_linerF)r,r™rPÚ clear_bufferrQrÀÚhave_mi_columnsrTÚlevelÚhrrxÚerrÚjoiÚmsgÚ this_columnsÚthis_unnamed_colsrªÚcÚcol_nameÚcountsÚcol_loop_orderr¼Úold_colÚ    cur_countÚlcÚsicÚicÚ unnamed_countÚ
first_lineÚlen_first_data_rowÚncolss                               r-rOzPythonParser._infer_columns~s[€ð—
‘
ˆØ Ð؈ Ü+.«5ˆ à ;‰;Ñ "Ø—[‘[ˆFØ"×3Ñ3ˆOä˜&¤4¬´·
±
Ð";Ô<á"Ü! &›\¨V°B©Z¸!©^Ð,<Ñ<‘Fà ˜à13ˆGÜ& vÓ.óh =‘    rð)Ø×.Ñ.Ó0DàŸ-™-¨2Ò-Ø#Ÿ™Ó0˜ðŸ-™-¨2Ó-ð<57 Ø$&Ð!ä% d›Oò
/‘DAqؘB’wÙ*Ø)2°1°#°W¸U¸GÐ'D™Hà)2°1°# ˜Hà)×0Ñ0°Ô3Ø$×+Ñ+¨HÕ5à$×+Ñ+¨AÕ.ð
/ò'Ü*5´cÓ*:Fô
"'¤s¨<Ó'8Ó!9ö&àØÐ$5Ñ5òò&ð*ñ    &*Nð,ò4˜Ø*¨1™o˜Ø"%˜Ø$*¨3¡K˜    à$ qš=Ø"+¨a¢-Ø2;¸a±-  w¡Ø)0¨    °°9°+Ð&> Ø#&¨,Ñ#6Ø$-°¡N¡Ià06°s±  Ið #,¨a£-ð!%§
¡
Р6Ü$0°·±Ô$<Ø$(§J¡J§N¡N°7Ó$;Ð$GØ$(§J¡J§N¡N°3Ó$7Ð$?à $§
¡
× 1Ñ 1°3¸¿
¹
¿¹ÀwÓ8OÐ2PÔ QØ*-˜  Q™Ø&/°!¡m˜˜sš ñ-4ñ.%ð˜V B™ZÒ'Ü  Ó.˜à"Ÿn™n˜Ø),¨œS œX¸a˜Ü(+Ð,=Ó(>˜ ð -Ò/°B¸±G¸mÒ4KÐPRÐVWÒPWØ+0˜LØ,0¨6°B©;˜LØ(,¯©°©  ~˜DœHà—‘˜|Ô,Ø×#Ñ#Ð>OÖ$P¸ \°!£_Ò$PÔQäw“< 1Ô$Ü+.¨|Ó+<Ò(ðQh =ñTØ×"Ñ"Ô$ðРð&Ø!%§¡Ó!2Jð+5Ð*<¡QÄ#ÀjÃ/Ð"äu“:¤ G¨A¡J£Ò/´C¸³JÐASÒ4SÜ$ð>óðôw“< !Ò#Ü#Ð$PÓQÐQà—<‘<Ð+ð×(Ñ(¨°%Ð9MÕNä+.¨u«:Ð(Ø×$Ñ$Ð0´S¸³ZÄ3Ø×%Ñ%óDò6ô39¸×9JÑ9JÓ2KÖL¨Q  a£ÒLÐM‘Gà$˜g‘Gà×.Ñ.ؘW Q™ZÐ)=ó‘ô˜×)Ñ)Ó*ˆEØ#(Ð  áܤ e£ Ó-Ð.Ø×.Ñ.¨w¸À¹
ÀEÓJ‘Ø—‘Ð%¬¨U«°uÒ)<Ø×.Ñ.°¨w¸¸uÓEÜ'*¨5£zÑ$ܘdŸl™lÔ+´°E³
¼cÀ$Ç,Á,Ó>OÒ0OÜ ð0óðð !˜'Ø×$Ñ$ W¨g°a©j¸%Ô@àÐ,¨lÐ:Ð:øôy%ò)ؘ4Ÿ=™=Ô.¨BÕ.Ù+¨r°V¸B±ZÒ/?ô#¤3¤s¹?¨F°3°B©KÐPVÓ#WÓX˜Ø ! #§(¡(¨3£- °
¼3¸s»8¸*ÀBÐG˜Ü(Ø,¨S¨EØ'¨¯ ©  °nðFóð #ð#ñ'¨2°ª6Ù'Ø ×.Ñ.Ô0ØŸ™¨ v´°G¸B±KÓ0@Ñ'@ÔAØ&Ð(<¸lÐJ×JàŸ:š:Ü,Ð-LÓMÐSVÐVàŸ:™:¡a˜=–Dûð3)üò\&ùò`%Qøô%ò&Ø!%“Jð&üò, MsIÂ>S?Å XË X
ÌX Ï5 XÓ?    XÔB>W;×X×'W;×;XØ XØXcó¾—|jy    |j«}|S#t$r2}|js t    d«|‚|jdd}Yd}~|Sd}~wwxYw)NrÉ)rÀrÎrŠr™r)r,rxrßs   r-rÚzPythonParser._header_line7sd€ð ;‰;Ð "Øð    !Ø×&Ñ&Ó(ˆDð ˆ øô ò    !Ø—:’:Ü$Ð%DÓEÈ3ÐNà—:‘:™a=ŒD؈ ûð     !ús!¡    Aª'AÁAc ó—|j>t|j«r|j|j|«}nÈtd„|jD««rpt    |«dkDr t d«‚g}|jD]E}t |t«r"    |j|j|««Œ5|j|«ŒGn<|jDcgc]
}||k\sŒ    |‘Œ }}|rtd|›d«‚|j}|D    cgc]%}t|«D    cgc] \}}    ||vsŒ |    ‘Œc}    }‘Œ'}}}}    t|«|_|S#t
$r|j|j|«YŒòwxYwcc}wcc}    }wcc}    }}w)zb
        Sets self._col_indices
 
        usecols_key is used if there are string usecols.
        c3ó<K—|]}t|t«–—Œy­wr*)rIrJ)Ú.0Úus  r-ú    <genexpr>z/PythonParser._handle_usecols.<locals>.<genexpr>Usèø€Ò>¨A”Z ¤3×'Ñ>ùs‚r?z4If using multiple headers, usecols must be integers.z<Defining usecols with out-of-bounds indices is not allowed. z are out-of-bounds.)r×rFÚ_evaluate_usecolsÚanyr[r_rIrJrÓršÚ_validate_usecols_namesrr§rÙrN)
r,rTÚ usecols_keyrPÚ col_indicesr¼Úmissing_usecolsÚcolumnrªÚns
          r-rØzPythonParser._handle_usecolsFs‘€ð <‰<Ñ #ܘŸ ™ Ô%Ø"×4Ñ4°T·\±\À;ÓO‘ ÜÑ>°·±Ô>Ô>ܐw“< !Ò#Ü$ØNóðð! àŸ<™<ò0CÜ! #¤sÔ+ðTØ'×.Ñ.¨{×/@Ñ/@ÀÓ/EÕFð$×*Ñ*¨3Õ/ñ0ð$(§<¡<ö#ذ3Ð:NÓ3N’Cð#ð#ñ#Ü%ØVØ*Ð+Ð+>ð@óðð#Ÿl™l ð&÷ðàô )¨Ó0×E‘tq˜!°A¸Ò4D’ÕEðˆGòô!' {Ó 3ˆDÔ Øˆøô) *òTØ ×8Ñ8¸¿¹À{ÖSðTüò
#ùóFùôs< EÃ
E9Ã%E9ÄFÄ! E>Ä.E>Ä2FÅ%E6Å5E6Å>Fcóp—t|j«dkDr|jdS|j«S)zH
        Return a line from buffer, filling buffer if required.
        r)r[rCrÏrqs r-rÎzPythonParser._buffered_linevs/€ô ˆtx‰x‹=˜1Ò Ø—8‘8˜A‘;Ð à—?‘?Ó$Ð $r/cóR—|s|St|dt«s|S|ds|S|dd}|tk7r|S|d}t|«dkDrR|d|jk(r@d}|d}|ddj |«dz}|||}t|«|dzkDr|||dzdz }n|dd}|g}||ddzS)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.
        rr?éN)rIrJÚ_BOMr[r2rš)    r,Ú    first_rowÚ    first_eltÚ first_row_bomÚstartÚquoteÚendÚnew_rowÚ new_row_lists             r-Ú_check_for_bomzPythonParser._check_for_bomsþ€ñØÐ ô
˜) A™,¬Ô,ØÐ ð˜Š|ØÐ ð˜a‘L ‘Oˆ    Ø œÒ ØÐ à! !™ ˆ ô ˆ}Ó  Ò ! m°AÑ&6¸$¿.¹.Ò&H؈EØ! !Ñ$ˆEØ  Ð#×)Ñ)¨%Ó0°1Ñ4ˆCð$ E¨#Ð.ˆGô=Ó! C¨!¡GÒ+ؘ=¨¨q©¨Ð3Ñ3‘ð$ A BÐ'ˆGà&- Yˆ ؘi¨¨˜mÑ+Ð+r/có0—| xstd„|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.
        c3ó"K—|]}| –—Œ    y­wr*©)rôr+s  r-röz.PythonParser._is_line_empty.<locals>.<genexpr>Ásèø€Ò3¨ 1œuÑ3ùs‚ )Úall)r,rxs  r-Ú_is_line_emptyzPythonParser._is_line_empty´s€ðˆxÒ3œ3Ñ3¨dÔ3Ó3Ð3r/có—t|jt«r|j|j«rT|jt |j«k\rn1|xjdz c_|j|j«rŒT        |j |j|jg«d}|xjdz c_|js/|j|j|jdz
«s|rn|jr|j|g«}|r|d}n÷Œ¤|j|j«rT|xjdz c_|j€J‚t|j«|j|j«rŒT    |j|jdz¬«}|xjdz c_|O|j |g«d}|jr|j|g«}|r|d}n|j|«s|rnŒ†|jdk(r|j|«}|xjdz c_|j j#|«|S#t$rt‚wxYw)Nr?r©Úrow_num)rIrBrKrGrDr[r~r8rÚ_remove_empty_linesÚ
IndexErrorrŠÚnextÚ_next_iter_liner rErCrÓ)r,rxÚretÚ    orig_lines    r-rÏzPythonParser._next_lineÃs€Ü d—i‘i¤Õ &Ø—-‘- §¡Ô)Ø—8‘8œs 4§9¡9›~Ò-ØØ—’˜A‘ •ð—-‘- §¡Õ)ð
ð(Ø×/Ñ/°·±¸4¿8¹8Ñ1DÐ0EÓFÀqÑIDØ—H’H ‘M•Hà×0Ò0Ø×+Ñ+¨D¯I©I°d·h±hÀ±lÑ,CÔDÉáØ×,Ò,Ø"×6Ñ6¸°vÓ>˜ÙØ#& q¡6˜DØ!ðð"—-‘- §¡Ô)Ø—’˜A‘ •à—y‘yÐ,Ð,Ð,ܐT—Y‘Y”ð    —-‘- §¡Õ)ð Ø ×0Ñ0¸¿¹ÀA¹Ð0ÓF    Ø—’˜A‘ •àÐ(Ø×/Ñ/°° Ó<¸QÑ?Dà×,Ò,Ø"×6Ñ6¸°vÓ>˜áØ#& q¡6˜DØ!Ø×,Ñ,¨YÔ7¹4Øðð& 8‰8qŠ=Ø×&Ñ& tÓ,ˆDà  Š ˜Ñ Ø ‰‰˜Ô؈ øôC"ò(Ü'Ð'ð(ús A:I8Ä    %I8É8Jcóþ—|j|jjk(r t|«‚|j|jjk(r,t j d|›d|›dtt«¬«yy)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.
        zSkipping line z: rm)Ú
stacklevelN)    Ú on_bad_linesÚBadLineHandleMethodÚERRORrÚWARNÚwarningsÚwarnrr)r,rárs   r-Ú_alert_malformedzPythonParser._alert_malformedûso€ð" × Ñ  × 8Ñ 8× >Ñ >Ò >ܘcÓ"Ð "Ø × Ñ  × 8Ñ 8× =Ñ =Ò =Ü M‰MØ       ¨¨C¨5°Ð3ÜÜ+Ó-ö ð >r/có¢—    |j€J‚t|j«}t|t«sJ‚|S#tj
$r‚}|j |jj|jjfvr@t|«}d|vsd|vrd}|jdkDr
d}|d|zz }|j||«Yd}~yd}~wwxYw)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.
        Nz    NULL bytezline 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' insteadrz¡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).ú. ) rBrrIrKr|ÚErrorrrrrrJr0r")r,rrxÚeráÚreasons      r-rzPythonParser._next_iter_linesހð!    à—9‘9Ð(Ð (Ð(ܘŸ    ™    “?ˆDä˜d¤DÔ)Ð )Ð)؈KøÜy‰yò    Ø× Ñ Ø×(Ñ(×.Ñ.Ø×(Ñ(×-Ñ-ð%ñô˜!“fà #Ñ%Ð)<ÀÑ)Cð?ðð—?‘? QÒ&ð%ðð˜4 &™=Ñ(Cà×%Ñ% c¨7Ô3Üûð5    ús‚69¹CÁ A8C    à   Ccó`—|j€|Sg}|D]˜}g}|D]~}t|t«r|j|vs||jvr|j    |«ŒA|d|j |j«}t |«dkDr|j    |«n|j    |«Œš|Sr¤)r=rIrJr³rÓÚfindr[)r,r„rrxÚrlr+s      r-r~zPythonParser._check_commentsEs­€Ø <‰<Р؈L؈Øò    ˆD؈BØò ä" 1¤cÔ*Ø—|‘|¨1Ñ,ؘDŸN™NÑ*à—I‘I˜a•LàÐ0˜AŸF™F 4§<¡<Ó0Ð1Aܘ1“v ’zØŸ    ™     !œ Ùð ð J‰JrNð    ðˆ
r/có²—|Dcgc]F}t|«dkDs4t|«dk(r(t|dt«r|dj«r|‘ŒH}}|Scc}w)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.
        r?r)r[rIrJrw)r,r„rxrs    r-rz PythonParser._remove_empty_linesZs]€ð$ö
àäD“    ˜A’ ܐt“9 ’>Ü# D¨¡G¬SÔ1°T¸!±W·]±]´_ò ð
ˆð
ðˆ
ùò
s…A AcóZ—|j€|S|j||jd¬«S)NrÊ©r„ÚsearchÚreplace)r;Ú_search_replace_num_columns©r,r„s  r-Ú_check_thousandszPythonParser._check_thousandsus4€Ø >‰>Ð !؈Là×/Ñ/Ø §¡¸ð0ó
ð    
r/có`—g}|D]¦}g}t|«D]ƒ\}}t|t«r;||vs7||jvs)|jj |j ««s|j|«Œc|j|j||««Œ…|j|«Œ¨|Sr*)    r§rIrJr&rir.rwrÓr/)    r,r„r.r/rrxr*rªr+s             r-r0z(PythonParser._search_replace_num_columns}sŸ€ðˆØò     ˆD؈BÜ! $›ò     :‘1ä" 1¤cÔ*Ø Q‘ؘD×6Ñ6Ñ6ØŸ8™8Ÿ?™?¨1¯7©7«9Ô5à—I‘I˜a•Là—I‘I˜aŸi™i¨°Ó8Õ9ð     :ð J‰JrNð     ðˆ
r/cón—|jtdk(r|S|j||jd¬«S)Nr<rÌr-)r<rr0r1s  r-Ú_check_decimalzPythonParser._check_decimals;€Ø <‰<œ?¨9Ñ5Ò 5؈Là×/Ñ/Ø § ¡ °cð0ó
ð    
r/có—g|_yr*)rCrqs r-rÒzPythonParser._clear_buffer˜s    €Øˆr/cót—|j}t|«}t|«}|j |j}n    |j«}    |j«}d}|Ö|j
}|durt |«|jz
}|¬|j |durœt |«t |«|jzk(rxttt |«««|_|jdd|_
t|«D]}|jd|«Œt|«}t |«|_|||fS|dkDr/d|_ |j
€tt|««|_d}n%|j||j
«\}}    |_|||fS#t$rd}YŒWwxYw#t$rd}YŒXwxYw)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.
        NrFr?T)rVrKrÚrÏrŠrr[rPrÀrZrCÚreversedÚinsertr¥Ú_clean_index_names)
r,rTrVrxÚ    next_lineÚimplicit_first_colsrräÚ
index_namerbs
          r-rXzPythonParser._get_index_name›sÀ€ð'+§o¡oˆÜ˜'“]ˆ
ܐw“-ˆð × Ñ Ð (Ø×$Ñ$‰Dð Ø—‘Ó(ð
    ØŸ™Ó)ˆIð
 ÐØ Ð ðŸ™ˆIØ Ñ%Ü&)¨$£i°$×2KÑ2KÑ&KÐ#ðÐ%Ø—K‘KÐ+Ø UÑ*äy“>¤S¨£Y°×1JÑ1JÑ%JÒJä%)¬%´°D³    Ó*:Ó%;D”NØ#Ÿx™x¨¨˜|D”Hä% d›^ò-˜ØŸ™ q¨!Õ,ð-ô"& g£JÜ03°G³ DÔ-Ø ¨WÐ4Ð4à  Ò "à#'ˆDÔ  Ø~‰~Ð%Ü!%¤eÐ,?Ó&@Ó!A”à‰Jð/3×.EÑ.EؘŸ™ó/Ñ +ˆZ˜˜DœNð˜: wÐ.Ð.øôi!ò Ø“ð ûô ò    Ø‹Ið    ús#½FÁF(Æ F%Æ$F%Æ( F7Æ6F7có¶—|j}|jr|t|j«z }t    d„|D««}||kDrµ|jdur¦|j
€™|j r |j nd}g}t|«}t|«}g}|D]è\}}    t|    «}
|
|kDrÂt|j«r&|j|    «} | €Œ?|j| «ŒQ|j|jj|jjfvsŒŠ|j||z
|zz
} |j| |
f«|j|jjk(sŒÖn|j|    «Œê|D]s\} }
d|›d| dz›d|
›} |jr?t|j«dkDr'|j t"j$k7r
d}| d    |zz } |j'| | dz«Œut)t+j,||¬
«j.«}|j
r™|j0€J‚|j0}|jrQt|«Dcgc]9\}}|t|j«ks|t|j«z
|vr|‘Œ;}}}|St|«Dcgc] \}}||vsŒ |‘Œ}}}|Scc}}wcc}}w) Nc3ó2K—|]}t|«–—Œy­wr*)r[)rôÚrows  r-röz-PythonParser._rows_to_cols.<locals>.<genexpr>ïsèø€Ò2 3”c˜#—hÑ2ùs‚Frz    Expected z fields in line r?z, saw zXError could possibly be due to quotes being ignored when a multi-char delimiter is used.r$)Ú    min_width)rPr¥r[rÚmaxr×r0r§rFrrÓrrrrDr1r7r|Ú
QUOTE_NONEr"rKrÚto_object_arrayÚTrN)r,r˜Úcol_lenÚmax_lenÚfootersÚ    bad_linesÚ iter_contentÚ content_lenrªÚ_contentÚ
actual_lenÚnew_lrrár'Úzipped_contentrûÚas                  r-r’zPythonParser._rows_to_colsésÔ€Ø×+Ñ+ˆà × Ò Ø ”s˜4Ÿ>™>Ó*Ñ *ˆGäÑ2¨'Ô2Ó2ˆð gÓ Ø—‘ eÒ+Ø— ‘ Ñ$à)-¯ªd—o’o¸aˆG؈Iä$ WÓ-ˆLܘg›,ˆK؈Gà+ò -‘ 8Ü  ›]
à Ò'Ü × 1Ñ 1Ô2Ø $× 1Ñ 1°(Ó ;˜Ø Ñ,Ø#ŸN™N¨5Õ1Ø×*Ñ*Ø×0Ñ0×6Ñ6Ø×0Ñ0×5Ñ5ð/òð#'§(¡(¨k¸A©oÀÑ.GÑ"H˜Ø!×(Ñ(¨'°:Ð)>Ô?à×,Ñ,°×0HÑ0H×0NÑ0NÓNÙ!à—N‘N 8Õ,ð% -ð((1ò 8Ñ#˜à ˜yÐ(8¸À1¹¸ ÀVØ!lð$ðð
—N’NܘDŸN™NÓ+¨aÒ/ØŸ ™ ¬¯©Ò6ðGðð˜4 &™=Ñ(Cà×%Ñ% c¨7°Q©;Õ7ð# 8ô(œc×1Ñ1°'ÀWÔM×OÑOÓPˆà <Š<Ø×$Ñ$Ð0Ð 0Ð0Ø×+Ñ+ˆKà×#Ò#ô!*¨.Ó 9÷"ᘘ1àœC §¡Ó/Ò/Øœs 4§>¡>Ó2Ñ2°kÑAò    ð"ñ"ðÐô#,¨NÓ";÷"Ù˜!˜Q¸qÀKÒ?O’Að"ñ"ðÐùó"ùó"sÉ(>KÊ9 KËKcóþ—|j}d}|Ut|j«|k\r%|jd||j|dc}|_n|t|j«z}|€Ýt|jt«r¹|j
t|j«kDrt ‚|€/|j|j
d}t|j«}n5|j|j
|j
|z}|j
|z}|j|«}|j|«||_ng}    |©d}d}|j
 |j
nd}||krX|j€J‚t|j«}|j||z«s|dz }|dz }|j|«||krŒXt|«}    |j|«}|j|«n>d}    |j|j
|zdz¬«}
|dz }|
|j|
«Œ;    |xj
|    z c_g|_n|}|jr|d|j }|j|«}|jr|j!|«}|j#|«}|j%|«S#t $r?t|«}    |j|«}|j|«t|«dk(r‚YŒÒwxYw)Nrr?r)rCr[rIrBrKrDrŠÚ_remove_skipped_rowsr‚rrGrÓrr0r~r8rr2r5) r,r—r„Únew_rowsÚnew_posÚ    row_indexÚrow_ctr¨r    Ú len_new_rowsÚnext_rows            r-r‰zPythonParser._get_lines?sˀؗ‘ˆØˆð Ð ä4—8‘8‹} Ò$Ø%)§X¡X¨e¨t _°d·h±h¸t¸u°oÐ"˜$(ðœ˜DŸH™H› Ñ%à Ñ Ü˜$Ÿ)™)¤TÔ*Ø—8‘8œc $§)¡)›nÒ,Ü'Ð'ؐ<Ø#Ÿy™y¨¯©¨Ð4HÜ! $§)¡)›n‘Gà#Ÿy™y¨¯©°D·H±H¸t±OÐDHØ"Ÿh™h¨™oGà×4Ñ4°XÓ>Ø— ‘ ˜XÔ&Ø"–ðð"ØÐ'Ø$%˜    Ø!"˜Ø-1¯X©XÐ-A §¢Àq˜Ø$ tšmð$(§9¡9Ð#8Ð8Ð#8Ü&*¨4¯9©9£o˜GØ#'§=¡=°¸)Ñ1CÔ#DØ &¨!¡  Ø%¨™N˜IØ$ŸO™O¨GÔ4ð% t›mô(+¨8£}˜ Ø#'×#<Ñ#<¸XÓ#F˜ØŸ ™  XÕ.à ˜à"Ø'+×';Ñ';ÀDÇHÁHÈtÁOÐVWÑDWÐ';Ó'X˜HØ  A™I˜Dà'Ð3Ø (§¡°Ô 9ð #ð    /ð$—’˜LÑ(•àˆDHàˆEà ?Š?ØÐ,˜TŸ_™_Ð,Ð-ˆEà×$Ñ$ UÓ+ˆØ ×  Ò  Ø×,Ñ,¨UÓ3ˆEØ×%Ñ% eÓ,ˆØ×"Ñ" 5Ó)Ð)øô'%òÜ#& x£=LØ#×8Ñ8¸ÓBHØ—L‘L Ô*ܘ5“z Q’Øñ'ð    úsÄ?A<J4Æ<A,J4Ê4AK<Ë;K<có¤—|jr=t|«Dcgc]&\}}|j||jz«rŒ%|‘Œ(c}}S|Scc}}wr*)r(r§rGrD)r,rSrªr@s    r-rRz!PythonParser._remove_skipped_rowssI€Ø =Š=ä"+¨HÓ"5÷Ù˜˜3¸T¿]¹]È1ÈtÏxÉxÉ<Õ=X’óð ðˆùós ›&A ÁA có¦—t«}|jr@|jr4|j€J‚|j    |j|j«}|jrî|j
râ|j€J‚t |j|j«D]±\}}t|j
t«s&t|j
«s|j|«t|j
t«sŒa||j
vsŒpt|j
|«rt|j
|«sŒ¡|j|«Œ³|Sr*) rÍrTÚ parse_datesrNÚ_set_noconvert_dtype_columnsrÚziprIr´rÚaddr)r,Úno_thousands_columnsrªr¼s    r-r^z%PythonParser._set_no_thousand_columns—s€Ü),«ÐØ <Š<˜D×,Ò,Ø×$Ñ$Ð0Ð 0Ð0Ø#'×#DÑ#DØ×!Ñ! 4§<¡<ó$Ð  ð <Š<˜DŸJšJØ×$Ñ$Ð0Ð 0Ð0ܘd×/Ñ/°·±Ó>ò 0‘3Ü! $§*¡*¬dÔ3Ô<LØ—J‘Jô=ð)×,Ñ,¨QÔ/ä˜tŸz™z¬4Õ0ؘtŸz™zÒ)ä,¨T¯Z©Z¸©_Ô=Ü(¨¯©°C©Õ9ð)×,Ñ,¨QÕ/ð 0ð$Ð#r/)r`zReadCsvBuffer[str] | listÚreturnÚNone)r`z
re.Pattern)r`úIO[str] | ReadCsvBuffer[str]r*)r—ú
int | Noner`úRtuple[Index | None, Sequence[Hashable] | MultiIndex, Mapping[Hashable, ArrayLike]])rŸúlist[np.ndarray]r`z8tuple[Mapping[Hashable, np.ndarray], Sequence[Hashable]])r®rcr`rd)rBzMapping[Hashable, np.ndarray]r`zMapping[Hashable, ArrayLike])r`Úbool)r`z9tuple[list[list[Scalar | None]], int, set[Scalar | None]])rTúlist[list[Scalar | None]]rúzlist[Scalar | None]rPr¶r`rg)r`ú list[Scalar])rrhr`rh)rxrhr`rf)rárJrr¶r`ra)rr¶r`zlist[Scalar] | None©r„úlist[list[Scalar]]r`rj)r„rjr.rJr/rJr`rj)r`ra)r`z@tuple[Sequence[Hashable] | None, list[Hashable], list[Hashable]])r˜rjr`re)r—rcr`rj)rSrjr`rj)r`r%)"rnrorpÚ__annotations__rArrirMr¢r“r¯r”rÄrOrÚrØrÎr rrÏr"rr~rr2r0r5rÒrXr’r‰rRr^Ú __classcell__)rcs@r-r$r$Gsø…Ø#Ó#õ]Hð~ò
!óð
!ó>ðB"&ð40Øð40ð
ó40ðlà!ðð
Bóð6"&ð$Øð$ð
ó$ð!
à+ð!
ð
&ó!
ðFòóððw;à    Bów;ðrñ óð ð.à*ð.ð)ð.ð"ð    .ð
 
#ó .ó`%ó3,ój 4ó6ópó4.ó`ó*ó6
ðØ'ðØ14ðØ?Bðà    óó&
óðL/à    IóL/ó\TôlO*ób÷$r/r$có`—eZdZdZ        d                                                    dd„Zd    d
d„Z    d                     d d„Zd d„Zy)ÚFixedWidthReaderz(
    A reader of fixed-width lines.
    Nc    óJ—||_d|_|rd|znd|_||_|dk(r|j    ||¬«|_n||_t |j
ttf«s!tdt|«j›«‚|j
D]‹}t |ttf«rit|«dk(r[t |dttjtd«f«r.t |dttjtd«f«rŒ‚td    «‚y)
Nz
z
     Úinfer)Ú infer_nrowsr(z;column specifications must be a list or tuple, input was a rrr?zEEach column specification must be 2 element tuple or list of integers)r`Úbufferr1r=Údetect_colspecsÚcolspecsrIrÁrKrÖÚtypernr[r¶rÂÚinteger)r,r`rtr1r=r(rqÚcolspecs        r-rAzFixedWidthReader.__init__¶s
€ðˆŒØ'+ˆŒ Ù/8˜ )Ò+¸iˆŒØˆŒ Ø wÒ Ø ×0Ñ0Ø'°(ð1óˆDMð%ˆDŒMä˜$Ÿ-™-¬%´¨Ô7ÜðÜ# H›~×6Ñ6Ð7ð9óð ð
—}‘}ò
    ˆGä˜7¤U¬D MÔ2ܘ“L AÒ%ܘw q™z¬C´·±¼TÀ$»ZÐ+HÔIܘw q™z¬C´·±¼TÀ$»ZÐ+HÕIäð:óðñ
    r/cóì—|€
t«}g}g}t|j«D];\}}||vr|j|«|j|«t    |«|k\sŒ;nt |«|_|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Ór[Úiterrr)r,rqr(Ú buffer_rowsÚ detect_rowsrªr@s       r-Úget_rowszFixedWidthReader.get_rowsÜs€ð2 Ð Ü“uˆH؈ ؈ Ü §¡Ó'ò    ‰FˆAˆsؘѠØ×"Ñ" 3Ô'Ø × Ñ ˜sÔ #ܐ;Ó ;Ó.Ùð     ô ˜;Ó'ˆŒ ØÐr/c    óî—dj|jDcgc]}d|›‘Œ    c}«}tjd|›d«}|j    ||«}|s t d«‚t tt|««}tj|dzt¬«}|j+|D    cgc] }    |    j|j«d‘Œ"}}    |D]9}    |j|    «D]#}
d||
j«|
j!«Œ%Œ;tj"|d«} d| d<tj$|| z dk(«d} t't)| ddd    …| ddd    …««} | Scc}wcc}    w)
NrÊú\z([^z]+)z(No rows from which to infer column widthr?)rrr)rÑr1rergr|rrBrÐr[rÂÚzerosr¶r=Ú    partitionÚfinditerrrÚrollÚwhererKr])r,rqr(r+Ú
delimitersÚpatternr—rGÚmaskr@ÚmÚshiftedÚedgesÚ
edge_pairss              r-rsz FixedWidthReader.detect_colspecss]€ð—W‘W°·±Ö?¨1  1 #šhÒ?Ó@ˆ
Ü—*‘*˜s : ,¨cÐ2Ó3ˆØ}‰}˜[¨(Ó3ˆÙÜ Ð!KÓLÐ LÜ”cœ#˜t“nÓ%ˆÜx‰x˜ !™ ¬3Ô/ˆØ <‰<Ð #Ø>BÖC°sC—M‘M $§,¡,Ó/°Ó2ÐCˆDÐCØò    .ˆCØ×%Ñ% cÓ*ò .Ø,-Q—W‘W“Y §¡£Ñ)ñ .ð    .ô—'‘'˜$ Ó"ˆØˆ‰
Ü—‘˜$ ™.¨QÑ.Ó/°Ñ2ˆÜœ#˜e¡C a C™j¨%°°°1°©+Ó6Ó7ˆ
ØÐùò!@ùòDs š E-Â,%E2cóJ—|j    t|j«}nt|j«}|jDcgc]#\}}|||j |j «‘Œ%c}}S#t$rd|_t|j«}YŒbwxYwcc}}wr*)rrrrŠr`rtrwr1)r,rxÚfrom_Útos    r-Ú__next__zFixedWidthReader.__next__sˆ€ð ;‰;Ð "ð $ܘDŸK™KÓ(‘ô
˜Ÿ™“<ˆDàHLÏ É ×V¹¸%ÀU˜2×$Ñ$ T§^¡^Õ4ÓVÐVøô !ò $Ø"” ܘDŸF™F“|’ð $üó WsŽA4Á(BÁ4%BÂB)Néd)r`rbrtz(list[tuple[int, int]] | Literal['infer']r1ú
str | Noner=rr(úset[int] | Nonerqr¶r`rar*)rqr¶r(r‘r`ú    list[str])rN)rqr¶r(r‘r`zlist[tuple[int, int]])r`r’)rnrorpÚ__doc__rAr|rsrŽrr/r-rnrn±s‰„ñð%)Øð$à 'ð$ð;ð$ðð    $ð
ð $ð "ð $ðð$ð
ó$ôL$ðNCGðØðØ0?ðà    óô, Wr/rncó(—eZdZdZdd„Zdd„Zdd„Zy)    ÚFixedWidthFieldParserzl
    Specialization that Converts fixed-width fields into DataFrames.
    See PythonParser for details.
    c óŠ—|jd«|_|jd«|_tj||fi|¤Žy)Nrtrq)Úpoprtrqr$rA)r,r`ras   r-rAzFixedWidthFieldParser.__init__-s8€àŸ™ Ó,ˆŒ ØŸ8™8 MÓ2ˆÔÜ×јd AÑ.¨Ó.r/có†—t||j|j|j|j|j
«Sr*)rnrtr1r=r(rq)r,r`s  r-rMz"FixedWidthFieldParser._make_reader3s7€ÜØ Ø M‰MØ N‰NØ L‰LØ M‰MØ × Ñ ó 
ð    
r/cóP—|Dcgc]}td„|D««r|‘Œc}Scc}w)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.
        c3óbK—|]'}t|t« xs|j«–—Œ)y­wr*)rIrJrw)rôr&s  r-röz<FixedWidthFieldParser._remove_empty_lines.<locals>.<genexpr>Gs(èø€ÒE¸1”z !¤SÓ)Ð)Ò6¨Q¯W©W«YÓ6ÑEùs‚-/)rø)r,r„rxs   r-rz)FixedWidthFieldParser._remove_empty_lines=s2€ðö
àÜÑEÀÔEÔEò ò
ð    
ùò
s…#N)r`zReadCsvBuffer[str]r`ra)r`rbr`rnri)rnrorpr“rArMrrr/r-r•r•'s„ñó
/ó 
ô 
r/r•có&—td„|D««S)Nc3ó0K—|]}|dk(s|Œ d–—Œy­w)rÊNr?r)rôÚvs  r-röz#count_empty_vals.<locals>.<genexpr>Lsèø€Ò7Q ! r¢'¨Q©YŒqÑ7ùs‚ )Úsum)Úvalss r-r‘r‘Ks€Ü Ñ7˜$Ô7Ó 7Ð7r/cóR—t|«s td«‚|dkr td«‚|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.
    zskipfooter must be an integerrzskipfooter cannot be negative)rr_)r0s r-rHrHOs3€ô* jÔ !ÜÐ8Ó9Ð9àA‚~ÜÐ8Ó9Ð9ð Ðr/)r`r¶)r0r¶r`r¶):Ú
__future__rÚ collectionsrrÚcollections.abcrrrr    r|Úior
reÚtypingr r r rrr ÚnumpyrÂÚ pandas._libsrÚ pandas.errorsrrrÚpandas.util._decoratorsrÚpandas.util._exceptionsrÚpandas.core.dtypes.commonrrrÚpandas.core.dtypes.inferencerÚpandas.io.commonrrÚpandas.io.parsers.base_parserrrÚpandas._typingrrr Úpandasr!r"rr$rnr•r‘rHrr/r-ú<module>r±s¸ðÝ"÷÷óó  ÝÛ    ÷õóãå÷ñõ
3Ý4÷ñõ
6÷÷ñ
÷ñ÷ ð€ôg$:ôg$ôT#sWs—|‘|ôsWôl!
˜Lô!
óH8ôr/