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
U
­ý°dÞôã    @s”ddlmZmZddlmZddlZddlmZddlZddlm    Z    ddl
m Z ddl Z ddlZddlmmZddlZddlmZmZmZmZddlmZddlmZmZd    d
d d d gZej de !d¡gdej de !d¡gdej de !d¡gdej de !d¡dej de !d¡dgZ"e#e$dœdd„Z%dd„Z&ej'dd„e"Dƒe#ddd„ƒZ(ej'dd„ƒZ)ej'dd „ƒZ*Gd!d"„d"ƒZ+Gd#d$„d$ƒZ,dS)%é)ÚdatetimeÚtime)ÚpartialN)ÚPath)ÚURLError)Ú
BadZipFile)Ú    DataFrameÚIndexÚ
MultiIndexÚSeries)ÚArrowStringArrayÚ StringArrayú.xlsú.xlsxú.xlsmú.xlsbú.odsÚxlrd©ÚmarksÚopenpyxlÚpyxlsbÚodf)Úread_extÚreturncCs†|jd}|dkr|dkrdS|dkr2|dkr2dS|dkrF|dkrFdS|dkrZ|dkrZdS|dkrn|dkrndS|d    kr‚|dkr‚dSd
S) zm
    Filter out invalid (engine, ext) pairs instead of skipping, as that
    produces 500+ pytest.skips.
    rrrFrrrrrT)Úvalues)Úenginer©rúYd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/io/excel/test_readers.pyÚ_is_valid_engine_ext_pair:s
rcCs |j|f}tj||jd}|S)z
    engine gives us a pytest.param object with some marks, read_ext is just
    a string.  We need to generate a new pytest.param inheriting the marks.
    r)rÚpytestÚparamr)rrrÚ    new_paramrrrÚ_transfer_marksOs r#cCs*g|]"}tD]}t||ƒr t||ƒ‘q qSr)Úread_ext_paramsrr#)Ú.0ZengÚextrrrÚ
<listcomp>Zs
 
ýr')ÚparamsÚidscCs|jS)zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r!)ÚrequestrrrÚengine_and_read_extYs r+cCs |\}}|S©Nr©r+rrrrrrisrcCs |\}}|Sr,rr-rrrrosrc@sœeZdZejdddd„ƒZdd„Zdd„Zd    d
„Zd d „Z    ej
  d dddgdddgdddgdddgdddgdddgg¡dd„ƒZ ej
  d ddgddgg¡dd„ƒZ dd„Zdd„Zdd„Zdd„Zdd „Zej
  d!d"d#g¡d$d%„ƒZd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zej
  d6d"edd#dd7gd8d9d:d;gdd#dd7gd<d=ejd>gd?œƒfd@dAeed?œee dd#dd7gd@dBe d8d9d:d;gdAdBdCdDdEdFgdGdHejdIgd?œƒfg¡dJdK„ƒZ!dLdM„Z"dNdO„Z#e$ %dP¡dQdR„ƒZ&ej
  dSidGfdTdUidfg¡dVdW„ƒZ'dXdY„Z(ej
  dZd[ed\d]giƒfd^ed_gd`fg¡dadb„ƒZ)dcdd„Z*dedf„Z+dgdh„Z,didj„Z-dkdl„Z.dmdn„Z/ej
 0do¡dpdq„ƒZ1drds„Z2dtdu„Z3dvdw„Z4ej
  dxdddgddgdydzdygdydzgg¡d{d|„ƒZ5d}d~„Z6dd€„Z7ej
j8e9j8ddd‚dƒd„„ƒƒZ:e$j;ej
j<d…d†„ƒƒZ=ej
j<d‡dˆ„ƒZ>ej
j?d‰dŠ„ƒZ@d‹dŒ„ZAe$ %d¡dŽd„ƒZBdd‘„ZCd’d“„ZDd”d•„ZEej
  d–d—ejd˜d™d˜gfdšejgd7fg¡d›dœ„ƒZFddž„ZGdŸd „ZHd¡d¢„ZId£d¤„ZJd¥d¦„ZKd§d¨„ZLd©dª„ZMd«d¬„ZNej
  d­d®d¯ddgdd"fd®d°d"ddgd"fd®d±ddgddgd"fd®d²ddgdd"fd³d´d"d"dd#gfd³d´d"d"dµd¶„fg¡d·d¸„ƒZOd¹dº„ZPd»d¼„ZQd½d¾„ZRd¿dÀ„ZSdÁd„ZTdÃdĄZUdÅdƄZVdÇdȄZWd"S)ÉÚ TestReadersT©ZautousecCs2ttj|d}| |dddƒ¡| td|¡dS)zG
        Change directory and set engine for read_excel calls.
        ©rÚioÚdataÚexcelÚ
read_excelN)rÚpdr4ÚchdirÚsetattr©ÚselfrÚdatapathÚ monkeypatchÚfuncrrrÚcd_and_set_enginevszTestReaders.cd_and_set_enginec        Cszdd„}| tjd|¡ddddddœ}td    |d
ƒ}t |¡}W5QRX|dk    rZ|}n||d d…}||ksvt‚dS) Nc_s|jSr,r0)r9ÚargsÚkwargsrrrÚparsersz,TestReaders.test_engine_used.<locals>.parserÚparserrrr©ÚxlsxZxlsmZxlsbÚxlsZodsÚtest1Úrbé)r7r5Ú    ExcelFileÚopenr4ÚAssertionError)    r9rrr;r@Úexpected_defaultsÚfÚresultÚexpectedrrrÚtest_engine_usedsûzTestReaders.test_engine_usedc    Csld}tjt|dtjd|ddddW5QRXtjt|d tjd|dd    gddd
W5QRXdS) Nz Passing an integer for `usecols`©ÚmatchrEÚSheet1ré©Ú
sheet_nameÚ    index_colÚusecolsÚSheet2rG©rUÚskiprowsrVrW©r ÚraisesÚ
ValueErrorr5r4©r9rÚmsgrrrÚtest_usecols_int—s ÿûzTestReaders.test_usecols_intcCsŽ|dkr|j tjjdd¡|jddgd}tjd|dd    d    d
d gd }tjd|d dgd    d    d
d gd}tj    ||ddtj    ||dddS)Nrú3Sheets containing datetimes not supported by pyxlsb©ÚreasonÚBÚC©ÚcolumnsrErRrérSrTrXrGrYF©Z check_names©
ÚnodeÚ
add_markerr ÚmarkÚxfailÚreindexr5r4ÚtmÚassert_frame_equal)r9r*rÚdf_refÚdf1Údf2rrrÚtest_usecols_list©s,ÿÿÿû    zTestReaders.test_usecols_listcCsD|dkr|j tjjdd¡|jdddgd}tjd|d    d
d d }tjd|d dgd
d d}tj    ||ddtj    ||dd|jddgd}tjd|d    d
dd }tjd|d dgd
dd}tj    ||ddtj    ||dd|jddgd}tjd|d    d
dd }tjd|d dgd
dd}tj    ||ddtj    ||dddS)NrrarbÚArdrerfrErRrzA:DrTrXrGrYFrizA,C,DzA,C:Drj©r9r*rrrrsrtÚdf3rrrÚtest_usecols_strÁslÿÿÿû    ÿûÿûzTestReaders.test_usecols_strrWrrGrScCsT|dkr|j tjjdd¡|ddg}tjd|dd|d    }tj||d
d dS) NrrarbrvrerErRrrTFri©    rkrlr rmrnr5r4rprq)r9r*rrWrrrNrMrrrÚ.test_usecols_diff_positional_int_columns_orderösÿÿ ÿz:TestReaders.test_usecols_diff_positional_int_columns_orderrdÚDcCsB|ddg}tt|ƒƒ|_tjd|d|d}tj||dddS)Nrdr|rErR©rUrWFri)ÚrangeÚlenÚindexr5r4rprq)r9rrWrrrNrMrrrÚ.test_usecols_diff_positional_str_columns_order    s z:TestReaders.test_usecols_diff_positional_str_columns_ordercCsJ|dkr|j tjjdd¡|}tjd|ddd}tj||dd    dS)
NrrarbrErRr©rUrVFrirz©r9r*rrrrNrMrrrÚtest_read_excel_without_slicingsÿÿz+TestReaders.test_read_excel_without_slicingcCsT|dkr|j tjjdd¡|ddg}tjd|ddd    d
}tj||d d dS) Nrrarbrer|rErRrzA,D:ErTFrirzrƒrrrÚtest_usecols_excel_range_strsÿÿ ÿz(TestReaders.test_usecols_excel_range_strc    Cs6d}tjt|dtjd|dddW5QRXdS)NzInvalid column name: E1rPrErRzD:E1r}r[r^rrrÚ$test_usecols_excel_range_str_invalid+sz0TestReaders.test_usecols_excel_range_str_invalidc    Cs>d}tjt|d"tjd|ddgddgdW5QRXdS)Nz(list indices must be integers.*, not strrPrErRrvrerT©r r\Ú    TypeErrorr5r4r^rrrÚtest_index_col_label_error1süz&TestReaders.test_index_col_label_errorcCsXtjd|ddddgd}tddd    gtggd
ggd
dddgd d }t ||¡dS) NrEÚSheet3rvrdrer‚r|ÚEÚFrS©ÚlevelsÚcodesÚnames©rgr€)r5r4rr
rprq©r9rrMrNrrrÚtest_index_col_empty<sÿþz TestReaders.test_index_col_emptyrVNrhcCsZtjd|d|d}tdddgddd    ggd
d d gd }|rJ| |j|¡}t ||¡dS)NrEÚSheet4r‚Úi1ÚaÚxÚi2ÚbÚyz
Unnamed: 0Zcol1Zcol2rf)r5r4rÚ    set_indexrgrprq)r9rrVrMrNrrrÚtest_index_col_with_unnamedGsÿÿz'TestReaders.test_index_col_with_unnamedc    Cs6d}tjt|dtjd|dgdW5QRXdS)NzEUsecols do not match columns, columns expected but not found: \['E'\]rPrEr‹©rWr[r^rrrÚ%test_usecols_pass_non_existent_columnUsÿz1TestReaders.test_usecols_pass_non_existent_columnc    Cs8d}tjt|dtjd|ddgdW5QRXdS)Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.rPrEZE1rrr[r^rrrÚtest_usecols_wrong_type^sÿz#TestReaders.test_usecols_wrong_typecCs8tjd|dd}tddggddgd}t ||¡dS)    NZtest2rR©rUZaaaaZbbbbbÚTestZTest1rf©r5r4rrprq)r9rÚparsedrNrrrÚtest_excel_stop_iteratorgsz$TestReaders.test_excel_stop_iteratorcCsT|dkr|j tjjdd¡tjd|dd}ttj    ggdgd}t
  ||¡dS)    NrrarbZtest3rRr r¡rf) rkrlr rmrnr5r4rÚnpÚnanrprq)r9r*rr£rNrrrÚtest_excel_cell_error_nalsÿÿz$TestReaders.test_excel_cell_error_nacCsš|dkr|j tjjdd¡tjd|ddd}tjd|dd    gdd
}tj||d d tj||d d tjd|ddd    d }t ||j    dd…¡dS)NrrarbrErRrr‚rXrG©rUrZrVFri©rUrVÚ
skipfooteréÿÿÿÿ)
rkrlr rmrnr5r4rprqÚilocrwrrrÚtest_excel_tablexs,ÿÿÿÿzTestReaders.test_excel_tablec
Csp|dkr|j tjjdd¡t dddddgd    d
d d d gdddddgdddddgdddddgtdddƒtdddƒtdddƒtdddƒtdddƒgdœ¡}d}tj    ||d d!}t
  ||¡|  ¡}d"|j |jdd#f<tj    ||d d!}t
  ||¡t|jƒD]4\}}tj    ||d |d$}| |¡}    t
  ||    ¡q|d% t¡|d%<tj    ||d d%tid&}t
  ||¡dS)'NrrarbrGrhéýÿÿÿérgô?g@gHáz®Gý?g¸…ëQ¸þ?g•Ö&è .>TFrSér–ÚcÚdÚeiÝé
ééiqé éiß)ÚIntColÚFloatColÚBoolColÚStrColÚStr2ColZDateColZ
test_typesrRr g@r½r‚r¼©rUÚ
converters)rkrlr rmrnrÚ    from_dictrr5r4rprqÚcopyÚlocr€Ú    enumeratergr›ÚapplyÚstr)
r9r*rrNÚbasenameÚactualZfloat_expectedZicolÚnameÚexprrrÚtest_reader_special_dtypessTÿÿ     
 
 
 
 
ûúÿ  ÿ
ÿz&TestReaders.test_reader_special_dtypesc
Cs†d}t dddddgdtjdd    d
gd d d d d gd tjdddgdœ¡}dd„dd„dd„dd„dœ}tj||d|d}t ||¡dS)NZtest_convertersrGrhr®éüÿÿrg)@gÍÌÌÌÌL2@g3333333@g:Œ0âŽy5>ÚFoundú    Not foundÚ1Ú3Ú4Ú5)r¹rºr»r¼cSs|dkrt|ƒSdS)NÚrË)Úint©r—rrrÚ<lambda>Íóz4TestReaders.test_reader_converters.<locals>.<lambda>cSs|r d|StjS)Nr´)r¥r¦rÔrrrrÕÎrÖcSs|dkr dSdS)NrÒrÌrÍrrÔrrrrÕÏrÖcSs|r t|ƒSdS)NrÒ)rÅrÔrrrrÕÐrÖ)r¹rºrhrSrRr¾)rrÀr¥r¦r5r4rprq)r9rrÆrNr¿rÇrrrÚtest_reader_convertersÀs&  üÿ
ü    ÿz"TestReaders.test_reader_convertersc    Csôd}t ||¡}tddddgdddd    gddddgd
d tjd gd œƒjddddgd}t ||¡tj||ddtdœd}|d     d¡|d<|d     d¡|d<ddddg|d<t ||¡d}t
j t |dtj||ddidW5QRXdS)NÚ    testdtyperGrhrSr¯ç@ç @ç@ç@çð?ç@ç@©r–r™r±r²r–r™r±r²rfÚfloat64Úfloat32)r–r™r±©ÚdtypeÚ001Ú002Ú003Ú004z(Unable to convert column d to type int64rPÚint64) r5r4rr¥r¦rorprqrÅZastyper r\r])r9rrÆrÇrNr_rrrÚtest_reader_dtypeÚs.
 
 
 üÿ
ù     
ÿ zTestReaders.test_reader_dtypezdtype,expectedr¯rÙrÚrÛrÜrÝrÞrßràrárârãrårærçrèrÎÚ2rÐcCs&d}tj|||d}t ||¡dS)NrØrã©r5r4rprq)r9rrärNrÆrÇrrrÚtest_reader_dtype_str÷sz!TestReaders.test_reader_dtype_strcs~|dkrt d|›d¡ttddgddtdd    gd
dtd d gd dtddgddttjdgddttjdgd
dttjd gd dttjdgddtt d¡gdƒttjtjgdddœ
ƒ‰t |¡&}ˆj    |dd dtj
|d|d}W5QRX|dkrjddl ‰ddl m ‰t‡‡‡fdd„ˆjDƒƒ}ˆ|djj ˆjdd ¡ƒ|d<ˆˆ ddg¡ƒ|d!<nˆ}t ||¡dS)"N©rrúNo engine for filetype: 'ú'rGrSZInt64rãrÙrÛZFloat64TFÚbooleanr–r™Ústringég@z
2019-12-31rh)
r–r™r±r²r³rLÚgÚhÚiÚjÚtest©r€©rUÚ dtype_backendÚpyarrowr)ÚArrowExtensionArraycs$i|]}|ˆˆjˆ|ddƒ“qS)T)Z from_pandas)Úarray)r%Úcol©rýÚdfÚparrÚ
<dictcomp>7sÿz2TestReaders.test_dtype_backend.<locals>.<dictcomp>röÚus)Úunitr÷)r Úskiprr r5ÚNAÚ    TimestamprpÚ ensure_cleanÚto_excelr4rüZ pandas.arraysrýrgrþÚ_dataÚcastÚ    timestamprq)r9rrûÚ    file_pathrMrNrrrÚtest_dtype_backendsHöÿ ÿ
 þÿÿzTestReaders.test_dtype_backendc    Cs||dkrt d|›d¡ttjdgdtjgdœƒ}t |¡(}|j|ddd    tj    |dd
d d }W5QRXt 
||¡dS) NrîrïrðrÝrÙ©r–r™røFrùÚnumpy_nullablerá)rUrûrä) r rrr¥r¦rpr    r
r5r4rq)r9rrrrMrrrÚtest_dtype_backend_and_dtypeFs üz(TestReaders.test_dtype_backend_and_dtyperüc
Cs|dkrt d|›d¡ddl}t d|¡ättjddgtjdtjd    tj    gtjdd
œƒ}t
  |¡&}|j |d d d tj |d dd}W5QRX|dkrØtttjddgtjdƒttjd    tj    gtjdƒd
œƒ}n*tt| ddg¡ƒt| d    dg¡ƒd
œƒ}t
 ||¡W5QRXdS)Nrîrïrðrzmode.string_storager–r™rãr—rrøFrùrrúÚpython)r rrür5Úoption_contextrr¥rþZobject_rrpr    r
r4r r rq)r9rZstring_storagerrrrMrNrrrÚtest_dtype_backend_stringVs8þÿ ÿþÿþÿz%TestReaders.test_dtype_backend_stringzdtypes, exp_valueúa.1réc    Cs\d}dti|–}| ¡}tj|||d}tdg|gdœƒ}||ksLtdƒ‚t ||¡dS)NZdf_mangle_dup_col_dtypesr–rãrÎ)r–rzdtype dict changed)rÅrÁr5r4rrJrprq)    r9rZdtypesZ    exp_valuerÆZ
dtype_dictZdtype_dict_copyrMrNrrrÚtest_dtype_mangle_dup_cols{s z&TestReaders.test_dtype_mangle_dup_colscCs8d}t ||¡}tddddddgiƒ}t ||¡dS)NZ test_spacesZtestcolz this is greatz 4    spacesz 1 trailing z
 1 leadingz2  spaces  multiple  timesr¢)r9rrÆrÇrNrrrÚtest_reader_spaces‡sûÿÿ zTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd sarfcCs6|dkrt d|›¡t ||¡}t ||¡dS)NrzSkipped for engine: )r rr5r4rprq)r9rrrÆrNrÇrrrÚtest_read_excel_ods_nested_xmlšs    z*TestReaders.test_read_excel_ods_nested_xmlcCsHd}tj||dd}dddg}t || ¡¡|t| ¡ƒksDt‚dS)NÚtest_multisheetr ÚCharlieÚAlphaÚBeta)r5r4rpÚassert_contains_allÚkeysÚlistrJ©r9rrÆÚdfsÚ expected_keysrrrÚtest_reading_all_sheets©s
 
z#TestReaders.test_reading_all_sheetscCsXd}dddg}tj|||d}tt|ƒƒ}t || ¡¡t|ƒt| ¡ƒksTt‚dS)Nrrhrr )    r5r4r ÚsetrprrrrJ)r9rrÆr#r"rrrÚ%test_reading_multiple_specific_sheets¶s 
 z1TestReaders.test_reading_multiple_specific_sheetscCs4d}tj||dd}dddg}t || ¡¡dS)NÚblank_with_headerr rRrXrŠ)r5r4rprrr!rrrÚ"test_reading_all_sheets_with_blankÄs
z.TestReaders.test_reading_all_sheets_with_blankcCs$tjd|dd}t |tƒ¡dS)NÚblankrRr )r5r4rprqr)r9rrÇrrrÚtest_read_excel_blankÎsz!TestReaders.test_read_excel_blankcCs0tddgd}tjd|dd}t ||¡dS)NZcol_1Zcol_2rfr'rRr )rr5r4rprq)r9rrNrÇrrrÚ!test_read_excel_blank_with_headerÒsz-TestReaders.test_read_excel_blank_with_headerc    Csftjtddtjd|dgddW5QRXtjtddtjd|dd„dd    W5QRXdS)
Nz \(sheet: Sheet1\)$rPr'rG)ÚheaderrUrEcSsddS)NrGrrrÔrrrrÕÜrÖzHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)rWrU)r r\r]r5r4ÚZeroDivisionError©r9rrrrÚ*test_exception_message_includes_sheet_name×s z6TestReaders.test_exception_message_includes_sheet_namez-ignore:Cell A4 is marked:UserWarning:openpyxlcCs®|dkr|j tjjdd¡tt d¡dgt d¡dgdd    ggd
d gd }|d krj|j tjjdd¡|dkr|dkr|j tjjdd¡t d|¡}t     
||¡dS)Nrrarbz
2016-03-12z Marc Johnsonz
2016-03-16z
Jack Blackg@Œµx¯Dz Timothy BrownZDateColWithBigIntZ    StringColrfrzMaybe not supported by openpyxl)rrz)Defaults to openpyxl, maybe not supportedZtestdateoverflow) rkrlr rmrnrr5rr4rprq)r9r*rrrNrMrrrÚtest_date_conversion_overflowÞs.ÿÿ  ýú     ÿ ÿz)TestReaders.test_date_conversion_overflowcCsr|dkr|j tjjdd¡d}d}tj|||dd}tj||d|d}tj||d    d
tj||d    d
dS© NrrarbrErRrr‚)rVrUFrirz)r9r*rrrÚfilenamerUrsrtrrrÚtest_sheet_nameÿs ÿÿÿzTestReaders.test_sheet_namec    CsNd|}tj|ddd}t|dƒ"}tj|ddd}t ||¡W5QRXdS)NrErRrr‚rF)r5r4rIrprq)r9rÚpthrNrLrÇrrrÚtest_excel_read_buffers
 z"TestReaders.test_excel_read_bufferc    Cs0d}tjtddtjd|dW5QRXdS)NÚfoozUnknown engine: foorPrÒr0r[)r9Z
bad_enginerrrÚtest_bad_engine_raisessz"TestReaders.test_bad_engine_raisesrUr”rRc    Cs4d}tjt|dtjd||dW5QRXdS©Nz?Worksheet index 3 is invalid|Worksheet named 'Sheet4' not foundrPr)r r[)r9rrUr_rrrÚtest_bad_sheetname_raisessz%TestReaders.test_bad_sheetname_raisesc    Cs6d|›}d}tjt|dt |¡W5QRXdS)Nr6uV(No such file or directory|没有那个文件或目录|File o directory non esistente)rP)r r\ÚFileNotFoundErrorr5r4)r9rZbad_filerQrrrÚtest_missing_file_raises's
z$TestReaders.test_missing_file_raisesc    Csdd}|dkrt}d}n&|dkr4ddlm}|}d}nt}d}tj||dt |¡W5QRXdS)    NsfoozLExcel file format cannot be determined, you must specify an engine manually.rr)Ú    XLRDErrorzFUnsupported format, or corrupt file: Expected BOF record; found b'foo'zFile is not a zip filerP)r]rr<rr r\r5r4)r9rZ
bad_streamÚerrorr_r<rrrÚtest_corrupt_bytes_raises.sÿ ÿz%TestReaders.test_corrupt_bytes_raisesz^https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1.xlsx)ÚurlZcheck_before_testcCs0d|}t |¡}t d|¡}t ||¡dS)NzYhttps://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1rErì)r9rr?Ú    url_tableÚ local_tablerrrÚtest_read_from_http_urlDs
ÿÿ
z#TestReaders.test_read_from_http_urlc    Csftd|dƒ}| d¡jd||dW5QRXd|}tj||d}t d|¡}t ||¡dS)NrErFú pandas-test©ZKeyZBodyús3://pandas-test/test1)Zstorage_options)rIÚBucketÚ
put_objectr5r4rprq)r9rÚ s3_resourceÚs3sorLr?r@rArrrÚtest_read_from_s3_urlUs "z!TestReaders.test_read_from_s3_urlc        Csˆtd|dƒ}| d¡jd||dW5QRXddl}|jf|Ž}| d|¡}t |¡}W5QRXt d|¡}t ||¡dS)NrErFrCrDrrE)    rIrFrGÚs3fsZ S3FileSystemr5r4rprq)    r9rrHrIrLrKZs3r@rArrrÚtest_read_from_s3_objectbs" z$TestReaders.test_read_from_s3_objectcCs~tj |dddƒd|¡}t |¡}zt d|¡}Wn6tk
rld t ¡¡ ¡}t     
d|›¡YnXt   ||¡dS)Nr1r2r3rEzfile://localhost/ú z failing on ) ÚosÚpathÚjoinr5r4rÚplatformÚunameÚstripr rrprq)r9rr:Z
localtablerAr@Z platform_inforrrÚtest_read_from_file_urlss
z#TestReaders.test_read_from_file_urlcCsDd|}tj|ddd}td|ƒ}tj|ddd}t ||¡dS)NrErRrr‚)r5r4rrprq)r9rÚstr_pathrNÚpath_objrÇrrrÚtest_read_from_pathlib_path‚s
 z'TestReaders.test_read_from_pathlib_pathzpy.pathcCs\ddlm}tj d|¡}tj|ddd}|ƒ d|¡}tj|ddd}t ||¡dS)Nr)ÚlocalrErRr‚)    Zpy.pathrXrNrOrPr5r4rprq)r9rZ    LocalPathrUrNrVrÇrrrÚtest_read_from_py_localpathŒs  z'TestReaders.test_read_from_py_localpathc    CsDtj d|¡}t|dƒ }tj|ddd}~| ¡W5QRXdS)NrErFrRrr‚)rNrOrPrIr5r4Úread)r9rrUrLr—rrrÚtest_close_from_py_localpath™s
 z(TestReaders.test_close_from_py_localpathcCsì|dkr|j tjjdd¡t dtdddƒtddd    d
ƒtd d d dƒtddddƒtddddƒtddddƒtddddƒtdddd ƒtdd!dd"ƒtd#d$d%d&ƒtd'd(d)ƒg i¡}tj    d*|d+d,}t
  ||¡tj    d-|d+d,}t
  ||¡dS).NrrarbZTimerGrhrSé-é8i †r¯éé1i@ róé é*ià“éé9é#i€é    é)éi ¡é ééiÀ'    r¸i`®
é5i5 éé%ri » ééé6Z
times_1900rRr Z
times_1904) rkrlr rmrnrrÀrr5r4rprq)r9r*rrrNrÇrrrÚtest_reader_seconds¢s4ÿÿ
 
õÿÿ zTestReaders.test_reader_secondsc    CsB|dkr|j tjjdd¡t ddgddgg¡}d|}td    d
t     d ¡d gd dt     d¡dgddt     d¡dgddt     d¡d gg|d}tj
|ddd    gdd}t   ||¡||_ ddddg|_tj
|ddd    gd}t j ||dd||_tj
|d dd    gdd    gd!}t j ||ddddddg|_| d"d#g¡|_ tj
|d$dd    gd}t   ||¡ttdƒƒ|_ | d%d&g¡|_tj
|d'dd    gdd}t   ||¡|jd    d gd    d( d%d&g¡|_tj
|d)ddd    gd!}t   ||¡| d%d&g¡|_| d"d#g¡|_ tj
|d*dd    gdd    gd!}t   ||¡tj
|d+dd    gdd    gd d,}t   ||¡dS)-Nrrarbr6Úbarr–r™ÚtestmultiindexrGrÙú
2015-01-01TrhrÚú
2015-01-02FrSrÛú
2015-01-03r¯rÜú
2015-01-04rfÚ    mi_columnr)rUr,rVr±r²Úmi_indexr‚riÚboth©rUrVr,Úilvl1Úilvl2Z mi_index_nameÚc1Úc2Úmi_column_name)ÚlevelZ name_with_intZ    both_nameZboth_name_skiprows)rUrVr,rZ)rkrlr rmrnr
Ú from_productrr5rr4rprqr€rgZ    set_namesr r~Z
set_levels)r9r*rÚmiÚmi_filerNrÇrrrÚtest_read_excel_multiindexÃs’ÿÿüù
ÿ ÿ ÿ ÿ ÿ ûz&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2Zboth_name_blank_after_mi_namer™r–Zboth_name_multiple_blanksc        CsÖ|dkr|j tjjdd¡d|}tjddgddggd    d
gd }td d t     d¡dgddt     d¡dgddt     d¡dgddt     d¡dgg|tj
ddddg|fddgd d}tj ||dd gdd gd}t   ||¡dS)Nrz;Sheets containing datetimes not supported by pyxlsb (GH4679rbrsr6rrr–r™r~r©rrGrÙrtTrhrÚruFrSrÛrvr¯rÜrwr|r}r‘rr{)rkrlr rmrnr
r‚rr5rZ from_arraysr4rprq)    r9r*rrUZidx_lvl2r„rƒrNrMrrrÚ+test_read_excel_multiindex_blank_after_names6 ÿÿüþø üz7TestReaders.test_read_excel_multiindex_blank_after_namecCsTd|}tj|dddgd}t ddg¡}tddd    d
ggd|d }t ||¡dS) NrsÚindex_col_nonerrG©rUr,©rvrd©ÚkeyÚvalrhrSr¯rf)r5r4r
r‚rrprq)r9rr„rMZ exp_columnsrNrrrÚ&test_read_excel_multiindex_header_onlyBs
z2TestReaders.test_read_excel_multiindex_header_onlyc     Csd|}t dddddgdddddgddd    d
d gd d dddgdddddgdddddgg¡}dddddg}td d!d"d#d$d%gd&d'd(d)d*d+ggd,d-d.d/d0d1gd,d-d.d/d0d1ggddgd2}td d!d"d#d$d%gdd3}t|||d4}tj|d5d,d6}t ||¡||_    tj|d7d,d-gd6}t ||¡t dddddgddd    d
d gd d dddgdddddgdddddgg¡}dddddg}td!d"d#d$d%gd'd(d)d*d+ggd,d-d.d/d0gd,d-d.d/d0ggddgd2}td!d"d#d$d%gdd3}t|||d4}tj|d8d,d6}t ||¡||_    tj|d9d,d-gd6}tj||d:d;dS)<NZtest_index_name_pre17ZR0C0ZR0C1ZR0C2ZR0C3ZR0C4ZR1C0ZR1C1ZR1C2ZR1C3ZR1C4ZR2C0ZR2C1ZR2C2ZR2C3ZR2C4ZR3C0ZR3C1ZR3C2ZR3C3ZR3C4ZR4C0ZR4C1ZR4C2ZR4C3ZR4C4ZC_l0_g0ZC_l0_g1ZC_l0_g2ZC_l0_g3ZC_l0_g4ZR0ZR_l0_g0ZR_l0_g1ZR_l0_g2ZR_l0_g3ZR_l0_g4ZR1ZR_l1_g0ZR_l1_g1ZR_l1_g2ZR_l1_g3ZR_l1_g4rrGrhrSr¯r°r©rÈ©r€rgZ single_namesr‚Z multi_namesZsingle_no_namesZmulti_no_namesFri)
r¥rþr
r    rr5r4rprqr€)    r9rr2r2rgrƒÚsirNrÇrrrÚtest_excel_old_index_formatMsf      úÿ
þúÿ       ûÿ      þú z'TestReaders.test_excel_old_index_formatc
Cs>d}dD]0}tjt|dtjd||dW5QRXqdS)Nz#Passing a bool to header is invalid)TFrPrE©r,r‡)r9rr_ÚargrrrÚtest_read_excel_bool_header_arg•sz+TestReaders.test_read_excel_bool_header_argc    CsV|dkr|j tjjdd¡tjd|dddgd}td    d
t d ¡d gdd t d¡dgddt d¡dgddt d¡d ggddddgd}t     
||¡tjd|dt   ddg¡d}t     
||¡tjd|ddd„d}t     
||¡tjd|ddddddgd}tdd t d¡dgddt d¡dgddt d¡d ggddddgd}t     
||¡dS)NrrarbÚ testskiprowsÚ skiprows_listrrh©rUrZrGrÙrtTrÚruFrSrÛrvr¯rÜrwr–r™r±r²rfcSs|dkS©N)rrhrrÔrrrrÕ¾rÖz6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)rUrZr) rkrlr rmrnr5r4rrrprqr¥rþ©r9r*rrÇrNrrrÚtest_read_excel_skiprowsœs\ÿÿÿü
ù      ý ý 
üü
ù    z$TestReaders.test_read_excel_skiprowscCsz|dkr|j tjjdd¡tjd|ddd„d}td    d
t d ¡d gd dt d¡dggddddgd}t     
||¡dS)Nrrarbr–r—cSs|dkS)N)rGrSr°rrÔrrrrÕßrÖzFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r˜rGrÙrtTrSrÛrvFr–r™r±r²rf) rkrlr rmrnr5r4rrrprqršrrrÚ(test_read_excel_skiprows_callable_not_inÓs$ÿÿýý
ù    z4TestReaders.test_read_excel_skiprows_callable_not_incCs@d}tjd||d}t d|¡}|d|…}t ||¡dS)Nr°rE©Únrowsrì)r9rÚnum_rows_to_pullrÇrNrrrÚtest_read_excel_nrowsìs
 z!TestReaders.test_read_excel_nrowscCs@t d|¡}t|ƒ}|d}tjd||d}t ||¡dS)NrEr´r)r5r4rrprq)r9rrNZnum_records_in_filerŸrÇrrrÚ0test_read_excel_nrows_greater_than_nrows_in_fileôs
z<TestReaders.test_read_excel_nrows_greater_than_nrows_in_filec    Cs4d}tjt|dtjd|ddW5QRXdS)Nz'nrows' must be an integer >=0rPrErÑrr[r^rrrÚ+test_read_excel_nrows_non_integer_parameterüsz7TestReaders.test_read_excel_nrows_non_integer_parameterz-filename,sheet_name,header,index_col,skiprowsrsrxryrzr€r–r—cCs|dkSr™rrÔrrrrÕ
rÖzTestReaders.<lambda>c    CsLtj||||||djdd…}tj||||||dd}t ||¡dS)z—
        For various parameters, we should get the same result whether we
        limit the rows during load (nrows=3) or after (df.iloc[:3]).
        )rUr,rVrZNrS)rUr,rVrZrž)r5r4r¬rprq)    r9rr2rUr,rVrZrNrÇrrrÚtest_read_excel_nrows_paramss$ûúúz(TestReaders.test_read_excel_nrows_paramsc    Cs0tjtddt d|dd¡W5QRXdS)Nzbut 3 positional argumentsrPrErRrr‡r.rrrÚtest_deprecated_kwargs&sz"TestReaders.test_deprecated_kwargscCs^d|}ddddg}tjddddgdd}t||d    d
}tj|d d d gdd}t ||¡dS)Nrs)rdrdr‹)rSr¯)rvrv)rGrh)rrGr†)rhrSrrˆrrGr{)r
Ú from_tuplesrr5r4rprq)r9rÚ    file_namer2ÚidxrNrMrrrÚ"test_no_header_with_list_index_col*s 
ÿÿz.TestReaders.test_no_header_with_list_index_colcCs>d|}dtjddg}t|dgd}t |¡}t ||¡dS)NZone_col_blank_linegà?rGrhZnumbersrf)r¥r¦rr5r4rprq)r9rr¦r2rNrMrrrÚtest_one_col_noskip_blank_line7s
 
z*TestReaders.test_one_col_noskip_blank_linecCsjd|}t ddg¡}tjtjgtjtjgddgddgg}t||d}tj|d    d
dgd }t ||¡dS) Nrs)r–rv)r™rdrGrSrhr¯rfZmi_column_empty_rowsrr‰)    r
r¥r¥r¦rr5r4rprq)r9rr¦rgr2rNrMrrrÚ test_multiheader_two_blank_lines?s$ ÿz,TestReaders.test_multiheader_two_blank_linescCs$d|}t |¡}|jdks t‚dS)z›
        Sheets can contain blank cells with no data. Some of our readers
        were including those cells, creating many empty rows and columns
        Ztrailing_blanks)rSrSN)r5r4ÚshaperJ)r9rr¦rMrrrÚtest_trailing_blanksJs
z TestReaders.test_trailing_blanksc    Cs`|dkrt d¡|dkr0|j tjjdd¡tjtddtj    d|d    d
W5QRXdS) Nrú*chartsheets do not exist in the ODF formatrú4pyxlsb can't distinguish chartsheets from worksheetsrbz"Worksheet named 'Chart1' not foundrPÚ
chartsheetZChart1r ©
r rrkrlrmrnr\r]r5r4©r9r*rrrrrÚtest_ignore_chartsheets_by_strSs
ÿÿz*TestReaders.test_ignore_chartsheets_by_strc    Cs`|dkrt d¡|dkr0|j tjjdd¡tjtddtj    d|d    d
W5QRXdS) Nrr­rr®rbz0Worksheet index 1 is invalid, 1 worksheets foundrPr¯rGr r°r±rrrÚtest_ignore_chartsheets_by_int`s
ÿÿÿz*TestReaders.test_ignore_chartsheets_by_intc    Csftjd|ddd}tdddddd    gd
d d d ddgddddddggddddddgd}t ||¡dS)NZ test_decimalú,rG)ÚdecimalrZgAñc̝ė@gÕ    h¢ïÖAÚABCZpoig2Ø[j‡ô@rhgHáz®G^@g{®GáÍ@ZDEFZuytg¥Uq&Ø?rSg%•Cq‹@gçû©ñÖ^ú@ZGHIZrezgÈ)¬ç³â@ZIdZNumber1ZNumber2ZText1ZText2ZNumber3rfr¢r’rrrÚtest_euro_decimal_formatosýúz$TestReaders.test_euro_decimal_format)XÚ__name__Ú
__module__Ú __qualname__r Úfixturer=rOr`ruryrmÚ parametrizer{rr„r…r†r‰r“rœržrŸr¤r§r­rÊr×rêrr¥r¦rÅr rírrÚtdÚ
skip_if_norrrrr$r&r(r*r+r/Úfilterwarningsr0r3r5r7r9r;r>ÚnetworkrprBZskip_if_not_us_localeZ
single_cpurJrLZslowrTrWrYr[rqr…r‡rŽr’r•r›rœr r¡r¢r£r¤r¨r©rªr¬r²r³r·rrrrr.us
 
52ÿ
 
 
         3
 
 
 üÿþ 
 üÿþôþ
-
$
þþ
 
 
 
 þ
û      
 
 
 
    !Vþþ
" H7úþ
       r.c
@søeZdZejdddd„ƒZdd„Zdd„Zej     d    d
dd g¡d d „ƒZ
dd„Z dd„Z ej     ddddgddgdddgddgg¡dd„ƒZ dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zej     d%d&d'g¡d(d)„ƒZd*d+„Zd,d-„Zd.d/„Zd0d1„Zd
S)2ÚTestExcelFileReadTr/cCs2ttj|d}| |dddƒ¡| td|¡dS)zH
        Change directory and set engine for ExcelFile objects.
        r0r1r2r3rHN)rr5rHr6r7r8rrrr=~sz#TestExcelFileRead.cd_and_set_enginec    Cs^ddddddœ}t d|¡ }|j}W5QRX|dk    r>|}n||dd…}||ksZt‚dS)NrrrrrBrErG)r5rHrrJ)r9rrrKr3rMrNrrrrO‡sûz"TestExcelFileRead.test_engine_usedc    Cs„t d|¡}tj|dddgd}W5QRXtdgdgdgtjgdggd    gd
}t ||¡t d|¡}tj|dd dgd}W5QRXttjgdgtjgtjgdggd    gd
}t ||¡t d |¡}tj|dddgd}W5QRXtd gdgdgtjgdggd    gd
}t ||¡t d |¡}tj|dd dgd}W5QRXttjgdgtjgtjgdggd    gd
}t ||¡dS)NZtest4rRFÚapple©rUZkeep_default_naZ    na_valuesrrGÚrabbitr¡rfTÚtest5ú1.#QNANr¦)r5rHr4rr¥r¦rprq)r9rr3r£rNrrrÚtest_excel_passes_na™s`ÿÿ ÿÿ ÿÿ ÿÿz&TestExcelFileRead.test_excel_passes_naÚ    na_filterNFc    Cs¨i}|dk    r||d<t d|¡"}tj|fdddgdœ|—Ž}W5QRX|dkrldgd    gd
gdgd gg}ntjgd    gtjgtjgd gg}t|d gd }t ||¡dS)NrÈrÅrRTrÂrÃFrÆrGr¦rÄr¡rf)r5rHr4r¥r¦rrprq)r9rrÈr?r3r£rNrrrÚtest_excel_passes_na_filter¿s$ÿüûz-TestExcelFileRead.test_excel_passes_na_filterc    Cs\|dkr|j tjjdd¡t d|¡*}tj|ddd}tj|ddgdd}W5QRXtj    ||d    d
tj    ||d    d
t d|¡&}|j
ddd }|j
ddgdd }W5QRXtj    ||d    d
tj    ||d    d
t d|¡}tj|dddd }W5QRXt     ||j dd…¡t d|¡}|j
dddd}W5QRXt     ||j dd…¡dS)NrrarbrErr‚rGr¨Fri)rV)rZrVr©r«)rVrª) rkrlr rmrnr5rHr4rprqrAr¬)r9r*rrrr3rsrtrxrrrÚtest_excel_table_sheet_by_indexØs,ÿÿz1TestExcelFileRead.test_excel_table_sheet_by_indexc        Csš|dkr|j tjjdd¡d}d}t ||¡}|j|dd}W5QRXt ||¡}|jd|d}W5QRXtj    ||d    d
tj    ||d    d
dSr1)
rkrlr rmrnr5rHrArprq)    r9r*rrrr2rUr3Z    df1_parseZ    df2_parserrrr3õsÿÿz!TestExcelFileRead.test_sheet_namerUrSrr”rRc
CsHd}tjt|d,t d|¡}|j|dW5QRXW5QRXdSr8)r r\r]r5rHrA)r9rrUr_r3rrrr9    sz+TestExcelFileRead.test_bad_sheetname_raisesc
Csfd|}tj|dd|d}t|dƒ,}t |¡}tj|ddd}W5QRXW5QRXt ||¡dS)NrErRr©rUrVrrFr‚)r5r4rIrHrprq)r9rrr4rNrLrDrÇrrrr5s   $z(TestExcelFileRead.test_excel_read_bufferc
CsPtd|dƒ.}t |¡}tj|dd|dW5QRXW5QRX|jsLt‚dS)NrErFrRrrË)rIr5rHr4ÚclosedrJ)r9rrrLrCrrrÚtest_reader_closes_files &z)TestExcelFileRead.test_reader_closes_filec
CsJd}t d|¡.}tjt|dtj|ddW5QRXW5QRXdS)Nz8Engine should not be specified when passing an ExcelFilerErPr6r0)r5rHr r\r]r4)r9rr_ZxlrrrÚtest_conflicting_excel_engines&sz0TestExcelFileRead.test_conflicting_excel_enginesc    CsRtjd||d}td|dƒ}| ¡}W5QRXtj||d}t ||¡dS)NrEr0rF)r5r4rIrZrprq)r9rrrNrLr2rÇrrrÚtest_excel_read_binary.s
z(TestExcelFileRead.test_excel_read_binaryc    CsFtd|dƒ}t |¡}W5QRXtjd||d}t ||¡dS)NrErFr0)rIr5r4rprq)r9rrrLrMrNrrrÚ%test_excel_read_binary_via_read_excel8sz7TestExcelFileRead.test_excel_read_binary_via_read_excelc
CsFtddƒ2}tjtddtj|ddgdW5QRXW5QRXdS)Nzdf_header_oob.xlsxrFzexceeds maximumrPrrGr“)rIr r\r]r5r4)r9rrLrrrÚ)test_read_excel_header_index_out_of_range?s z;TestExcelFileRead.test_read_excel_header_index_out_of_ranger2z df_empty.xlsxzdf_equals.xlsxcCs`tdgdd}tjddgddgd}td    d
gg||d d }tj|d ddd    gd}t ||¡dS)NÚZZI2rrŠ)rvzB.1ZI11ZI12r†rGrSré)r€rgrärRrr{)r    r
r¥rr5r4rprq)r9r2r§ÚcolsrNrMrrrÚtest_header_with_index_colEsÿz,TestExcelFileRead.test_header_with_index_colc        Cs¨|dkr|j tjjdd¡d|}t |¡}tj|ddgd|d}W5QRXtj    t 
d¡t 
d    ¡fgt 
d¡  ¡t 
d    ¡  ¡gd
}t gg|d }t  ||¡dS) NrrarbZtest_datetime_mirrG)r,rVrz
02/29/2020z
03/01/2020r†r)rkrlr rmrnr5rHr4r
r¥Ú to_datetimeZ to_pydatetimerrprq)    r9r*rrrLr3rÇZexpected_column_indexrNrrrÚtest_read_datetime_multiindexPs"ÿÿ    þþz/TestExcelFileRead.test_read_datetime_multiindexc
Cs>tjtdd&t d|›dd¡W5QRXW5QRXdS)NzValue must be one of *rPzio.excelz.readerÚabc)r r\r]r5rr.rrrÚtest_engine_invalid_optiongsz,TestExcelFileRead.test_engine_invalid_optionc    Cs^|dkrt d¡|dkr0|j tjjdd¡t d|¡}|jdgksPt    ‚W5QRXdS)Nrr­rr®rbr¯rR)
r rrkrlrmrnr5rHZ sheet_namesrJ)r9r*rrr3rrrÚtest_ignore_chartsheetsms
ÿÿz)TestExcelFileRead.test_ignore_chartsheetsc
Cs¨tf}|dkr t d|›¡n|dkr<ddl}t|jjf}t d|›¡R}t|ƒ     d¡t 
d¡.zt j ||dWn|k
rŽYnXW5QRXW5QRXdS)NzInvalid test for engine=rrZcorruptFr0) rr rrZbiffhr<rpr    rÚ
write_textZassert_produces_warningr5rH)r9rrÚerrorsrÚfilerrrÚtest_corrupt_files_closedzs  z+TestExcelFileRead.test_corrupt_files_closed)r¸r¹rºr r»r=rOrÇrmr¼rÉrÊr3r9r5rÍrÎrÏrÐrÑrÔrÖrØrÙrÝrrrrrÁ}s2
 
&
þ
 
 
 
 
 rÁ)-rrÚ    functoolsrrNÚpathlibrrQÚ urllib.errorrÚzipfilerÚnumpyr¥r Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr½Zpandasr5rr    r
r Zpandas._testingZ_testingrpZpandas.core.arraysr r r$r!r¾Z engine_paramsrÅÚboolrr#r»r+rrr.rÁrrrrÚ<module>sr     ÿþÿþÿþé
þù