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
U
¬ý°d ˆãu@s$
UddlmZddlZddlmZddlmZddlZddlZddlZddl    Z    ddl
m Z ddl m Z mZmZmZmZmZddlZddlmZmZmZddlmZmZmZdd    lmZdd
lm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddl&Z'dd l&m(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2dd l3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9dd l:m;Z;m<Z<ddl=m>Z>m?Z?ddl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWddlXmYZYmZZZddl[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbddlcmdZdmeZemfZfddlgmhZhddlimjZje r8ddl&mkZkmlZlddlcmmZmdZndZoddddgZpdeqd<dd d!d"gZrd#eqd$<esd%d&d'd(gZtdeqd)<d*d+d,d-gZud#eqd.<epetZvereuZwevew•Zxd#eqd/<eyd0d1gZzdeqd2<d3d4gZ{d#eqd5<eze{•Z|d#eqd6<e}d7d8gZ~d#eqd9<ed:d;gZ€d#eqd<<d=d>gZd#eqd?<d@dAgZ‚d#eqdB<eƒdCgZ„d#eqdD<e…dEgZ†d#eqdF<e‡dGgZˆd#eqdH<ezevZ‰e{ewZŠe‰eŠ•Z‹d#eqdI<e‹e~•ZŒd#eqdJ<e‰e~e€ee‚e„eˆe†ZejŽejejej‘ej’ej“ej”ej•gZ–dKdLdMœe Z—dej˜e'j™eydNƒe'jšedOƒgZ›dPdQ„ejœejfDƒZžes.ddlŸZ e  “¡e  ”¡e  •¡e  ¡¡gZ¢e  ¡e  ‘¡e  ’¡e  £¡gZ¤e¢e¤Z¥dRdQ„e¥DƒZ¦e  ¡e  §¡gZ¨dSdQ„e¨DƒZ©e  ªdTdU¡gZ«e      ¡gZ¬e  ­¡gZ®e  ¯dV¡e  ¯dW¡e  °dX¡e  °dY¡gZ±e  ²¡e  ³¡gZ´dZdQ„d[DƒZµd\dQ„d[DƒZ¶e  ·¡gZ¸e¥e¨e«e¬e®e±e´eµe¶e¸Z¹n gZ©gZ¦gZ¹e ºd]¡Z»d^d_œd`da„Z¼dCd_œdbdc„Z½d-dCdeœdfdg„Z¾dhdi„Z¿d:d_œdjdk„ZÀd.dmdndoœdpdq„ZÁd/dmdmdrdsœdtdu„Zd0dmdvdoœdwdx„ZÐd1dmdndoœdydz„ZĐd2dd{œdmd|dnd}œd~d„ZŐd3dd(d€œdmddnd}œd‚dƒ„ZƐd4ddd€œdmddnd}œd„d…„Zǐd5dmd†doœd‡dˆ„ZȐd6dd1d€œdmddnd}œd‰dŠ„Zɐd7dmdŒddŽœdd„Zʐd8dmdŒd’dŽœd“d”„Zːd9dmd•doœd–d—„Z̐d:dmd˜œd™dš„ZÍd›dœ„Zΐd;dmddoœdždŸ„ZÏdej§fd d_œd¡d¢„ZАd<d d_œd£d¤„Zѐd=d d_œd¥d¦„ZҐd>d d_œd§d¨„ZÓd©d_œdªd«„ZԐd?dŒd d¬œd­d®„ZՐd@d d_œd¯d°„Z֐dAdŒd©d¬œd±d²„ZאdBd©d_œd³d´„ZؐdCdŒdµd¬œd¶d·„ZÙdµd_œd¸d¹„ZÚdºd»„ZÛdµd_œd¼d½„ZܐdDdµd_œd¾d¿„ZݐdEd:dÂdndÜdÄdńZސdFdÇdÇdmdmdµdȜdÉdʄZߐdGdËd̜dÍd΄ZàdHdËdµdМdÑd҄ZáGdÓdԄdÔe1ƒZâGdÕdքdÖe+ƒZãGd×d؄dØe)ƒZädIdÙdڄZådÛd:dܜdÝdބZædßdàdáœdâdã„Zçe'jèjéjê ë¡Zìdädå„Zíd:dædçœdèdé„Zîdêdë„Zïdìdí„Zðdîdï„Zñdðdñ„Zòdòdó„Zódôdõ„ZôdCd_œdöd÷„ZõdødùdúdûdŸdüdýdþdÿdddddddddd    d
d d d ddddddódDdgdFddd9dÞd?ddddddcdãd5d2dkdåddëdd»ddéd´d«d²dõdñdœdïdzdudÊdÅd¹ddŠd¤dxdƒdÒd½dšdd¨d¿d—d°d¢dˆdqd¦d·d”d®d…dddd d!dHd"d#dad$d%d&d'díd(d)d÷d.d)d<dØdÖdÔdBdid$dd*d+d,guZödS(Jé)Ú annotationsN)Údatetime)ÚDecimal)Ú    byteorder)Ú TYPE_CHECKINGÚCallableÚContextManagerÚCounterÚIterableÚcast)Úcan_set_localeÚ get_localesÚ
set_locale)ÚDtypeÚ    FrequencyÚNpDtype)Úpa_version_under7p0)Úis_float_dtypeÚis_integer_dtypeÚ is_sequenceÚis_signed_integer_dtypeÚis_unsigned_integer_dtypeÚ pandas_dtype) Ú
ArrowDtypeÚ CategoricalÚCategoricalIndexÚ    DataFrameÚ DatetimeIndexÚIndexÚ IntervalIndexÚ
MultiIndexÚ
RangeIndexÚSeriesÚ bdate_range)ÚcloseÚnetworkÚround_trip_localpathÚround_trip_pathlibÚround_trip_pickleÚwrite_to_compressed)ÚrandsÚ rands_array)Úassert_produces_warningÚmaybe_produces_warning)Úassert_almost_equalÚassert_attr_equalÚassert_categorical_equalÚassert_class_equalÚassert_contains_allÚ assert_copyÚassert_datetime_array_equalÚassert_dict_equalÚ assert_equalÚassert_extension_array_equalÚassert_frame_equalÚassert_index_equalÚ!assert_indexing_slices_equivalentÚassert_interval_array_equalÚassert_is_sortedÚ"assert_is_valid_plot_return_objectÚassert_metadata_equivalentÚassert_numpy_array_equalÚassert_period_array_equalÚassert_series_equalÚassert_sp_array_equalÚassert_timedelta_array_equalÚraise_assert_detail)Ú    get_dtypeÚget_obj)Údecompress_fileÚ ensure_cleanÚ!ensure_safe_environment_variablesÚraises_chained_assignment_errorÚ set_timezoneÚ use_numexprÚwith_csv_dialect)ÚBaseMaskedArrayÚExtensionArrayÚ PandasArray)ÚNDArrayBackedExtensionArray)Ú extract_array)Ú PeriodIndexÚTimedeltaIndex)ÚArrowExtensionArrayééÚuint8Úuint16Úuint32Úuint64z list[NpDtype]ÚUNSIGNED_INT_NUMPY_DTYPESZUInt8ZUInt16ZUInt32ZUInt64z list[Dtype]ÚUNSIGNED_INT_EA_DTYPESÚint8Úint16Úint32Úint64ÚSIGNED_INT_NUMPY_DTYPESZInt8ZInt16ZInt32ZInt64ÚSIGNED_INT_EA_DTYPESÚALL_INT_DTYPESÚfloat32Úfloat64ÚFLOAT_NUMPY_DTYPESZFloat32ZFloat64ÚFLOAT_EA_DTYPESÚALL_FLOAT_DTYPESZ    complex64Z
complex128ÚCOMPLEX_DTYPESÚstrÚUÚ STRING_DTYPESzdatetime64[ns]zM8[ns]ÚDATETIME64_DTYPESztimedelta64[ns]zm8[ns]ÚTIMEDELTA64_DTYPESÚboolÚ BOOL_DTYPESÚbytesÚ BYTES_DTYPESÚobjectÚ OBJECT_DTYPESÚALL_REAL_DTYPESÚALL_NUMERIC_DTYPESú<ú>)ÚlittleÚbigÚnanÚNaNcCs g|]}dD]}|d|ƒ‘q qS)) ÚYÚMÚWÚDÚhÚmÚsÚmsÚusÚnsZpsÚfsÚasÚNaT©)Ú.0ÚclsÚunitr‹r‹úOd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/_testing/__init__.pyÚ
<listcomp>¶sþrcCsg|]}tt|ƒƒ‘qSr‹©rkr©rŒÚtypr‹r‹rrÐscCsg|]}tt|ƒƒ‘qSr‹r‘r’r‹r‹rr×séér„r…r†r‡cCs$g|]}dD]}tj||d‘q qS))NÚUTCz
US/Pacificz
US/Eastern)rŽÚtz)ÚpaÚ    timestamp)rŒrŽr—r‹r‹rråsþ)r„r…r†r‡cCsg|]}t |¡‘qSr‹)r˜Úduration)rŒrŽr‹r‹rrêsz^$ÚNone)ÚreturncCstjddddS)zJ
    Reset the display options for printing and representing objects.
    z    ^display.T)ZsilentN)ÚpdZ reset_optionr‹r‹r‹rÚreset_display_optionssržcCst|ƒt|ƒkS)zO
    Checks if the set of unique elements of arr1 and arr2 are equivalent.
    )Ú    frozenset)Zarr1Zarr2r‹r‹rÚ equalContentssr T)Ú    transposecCsÌ|tjkr6t|tƒr&tt |j¡ƒ}qÈtj|dd}n’|tkrHt|ƒ}n€|t    krZt    |ƒ}nn|t
krŽt    |ƒ  ¡}|rÈ|j }tj |gddd}n:|tjks¢|tjkr®t |¡}n|tkrÀt|ƒ}nt|ƒ‚|S)z÷
    Helper function to wrap the expected output of a test in a given box_class.
 
    Parameters
    ----------
    expected : np.ndarray, Index, Series
    box_cls : {Index, Series, DataFrame}
 
    Returns
    -------
    subclass of box_cls
    F©ÚcopyéT)Z ignore_index)rÚarrayÚ
isinstancer!rPÚnpÚasarrayÚ_valuesrr"rZto_frameÚTÚconcatÚndarrayÚto_arrayÚNotImplementedError)ÚexpectedZbox_clsr¡r‹r‹rÚ box_expecteds&
 
 
 
 
r°cCs*t|ddƒ}|dkrt |¡St|ddS)zQ
    Similar to pd.array, but does not cast numpy dtypes to nullable dtypes.
    ÚdtypeNT)Z extract_numpy)Úgetattrr§r¨rR)Úobjr±r‹r‹rr­@s 
r­cCstjd|…S©N)ÚstringÚascii_uppercase©Úkr‹r‹rÚgetColsQsr¹é
Úintr)r¸rœcCsttd|d|dS)Nrº)ÚncharsÚsize©Úname)rr+©r¸r¿r‹r‹rÚmakeStringIndexVsrÁr)r¸ÚnrœcKs6td|dd}ttjt |¡||dfd|i|—ŽS)z%make a length k index or n categoriesrWF)r¼r½Úreplace)Ú
categoriesr¿)r+rrZ
from_codesr§Úarange)r¸rÂr¿ÚkwargsÚxr‹r‹rÚmakeCategoricalIndexZsÿÿÿrÈrcKs*tjdd|dd}tj|fd|i|—ŽS)zmake a length k IntervalIndexrédé)Únumr¿)r§ZlinspacerZ from_breaks)r¸r¿rÆrÇr‹r‹rÚmakeIntervalIndexdsrÌcCsL|dkrtdg|dS|dkr.tddg|dStddgdg|d|dS)NrÊTr¾r¤F)rrÀr‹r‹rÚ makeBoolIndexjs
rÍr¾z Dtype | None)r¸r±rœcCsªt|ƒ}t|tjƒst‚t|ƒrNtj||d}t|ƒrœ|d|jdd7}nNt    |ƒrŽtj
  |¡tj
  d¡}|  ¡|dtj
  dd¡}ntd|›ƒ‚t|||d    S)
N©r±r¤érÊrºré    z wrong dtype )r±r¿)rr¦r§r±ÚAssertionErrorrrÅrÚitemsizerÚrandomZ random_sampleÚsortÚrandintr®r)r¸r¿r±Úvaluesr‹r‹rÚmakeNumericIndexrsrשr¿r±rcCs,t|ƒ}t|ƒstd|›ƒ‚t|||dS©Nz Wrong dtype rØ)rrÚ    TypeErrorrשr¸r¿r±r‹r‹rÚ makeIntIndex„srÜcCs,t|ƒ}t|ƒstd|›ƒ‚t|||dSrÙ)rrrÚr×rÛr‹r‹rÚ makeUIntIndex‹srÝr!cKstd|dfd|i|—ŽS)NrrÊr¿)r!)r¸r¿rÆr‹r‹rÚmakeRangeIndex’srÞcCs,t|ƒ}t|ƒstd|›ƒ‚t|||dSrÙ)rrrÚr×rÛr‹r‹rÚmakeFloatIndex–srßÚBrr)r¸ÚfreqrœcKs0tdddƒ}t||||d}t|fd|i|—ŽS)NéÐrÊ)Úperiodsrár¿r¿)rr#r)r¸rár¿rÆÚdtZdrr‹r‹rÚ makeDateIndexs rårrTcKstjfd|||dœ|—ŽS)Nz1 day©Ústartrãrár¿)rZtimedelta_range)r¸rár¿rÆr‹r‹rÚmakeTimedeltaIndex¥srèrScKs&tdddƒ}tjf||d|dœ|—ŽS)NrârÊràræ)rrZ period_range)r¸r¿rÆrär‹r‹rÚmakePeriodIndex«s rér·cKsJ|dd}t|ƒ}tjd|gfd|i|—Ž}t|ƒ|ks>t‚|d|…S)Nr¤rÊ)ZfooÚbarÚnames)Úranger Z from_productÚlenrÑ)r¸rërÆÚNÚrngÚmir‹r‹rÚmakeMultiIndex°s
 rñccs tttttttg}|EdHdSr´)rårérèrÞrÌrÈrñ)Úmake_index_funcsr‹r‹rÚindex_subclass_makers_generator¸sù    rózIterable[Index]ccs$tttg}|D]}||dVqdS)z¿
    Generator which can be iterated over to get instances of all the classes
    which represent time-series.
 
    Parameters
    ----------
    k: length of each of the index instances
    r·N)rårérè)r¸ròZmake_index_funcr‹r‹rÚall_timeseries_index_generatorÅs
ýrôr"c    CsHttƒ}tj t¡}tjdd|j|dd}W5QRXt|||dS)NÚignore)ÚinvalidFr¢©Úindexr¿)rÁÚ_Nr§rÓÚrandnZerrstateÚastyper")r¿r±røÚdatar‹r‹rÚmake_rand_seriesØs
 rýcCs
t|dS©Nr¾©rýr¾r‹r‹rÚmakeFloatSeriesàsrcCs
t|dSrþrÿr¾r‹r‹rÚmakeStringSeriesäsrcCs*ttƒ}t|td}ttƒ}t|||dS)NrÎr÷)rÁrùrrtr")r¿rürør‹r‹rÚmakeObjectSeriesès rzdict[str, Series]csttƒ‰‡fdd„ttƒDƒS)Ncs"i|]}|ttj t¡ˆd“qS)©rø)r"r§rÓrúrù©rŒÚcrr‹rÚ
<dictcomp>ñsz!getSeriesData.<locals>.<dictcomp>)rÁrùr¹Ú_Kr‹r‹rrÚ getSeriesDataïsr)rárœcCs*|dkr t}ttj |¡t||d|dS)N)rár÷)rùr"r§rÓrúrå)Únperrár¿r‹r‹rÚmakeTimeSeriesôs
 
ÿr
cCs&|dkr t}ttj |¡t|ƒ|dS)Nr÷)rùr"r§rÓrúré)r    r¿r‹r‹rÚmakePeriodSeriesüsr cs‡‡fdd„ttƒDƒS)Ncsi|]}|tˆˆƒ“qSr‹)r
r©rár    r‹rrsz%getTimeSeriesData.<locals>.<dictcomp>©r¹r)r    rár‹r rÚgetTimeSeriesDatasrcs‡fdd„ttƒDƒS)Ncsi|]}|tˆƒ“qSr‹)r r©r    r‹rrsz!getPeriodData.<locals>.<dictcomp>r rr‹rrÚ getPeriodDatasrrcCst||ƒ}t|ƒSr´)rr)r    rárür‹r‹rÚmakeTimeDataFrame s
rcCstƒ}t|ƒSr´)rr)rür‹r‹rÚ makeDataFramesrcCsNtdddddgƒ}dddd    d
gdddddgd d d ddgtddddœ}||fS)NÚaÚbrÚdÚegçð?g@g@g@Zfoo1Zfoo2Zfoo3Zfoo4Zfoo5z1/1/2009é)rã)ÚAràÚCr)rr#)rørür‹r‹rÚgetMixedTypeDicts   
ürcCsttƒdƒS)NrÊ)rrr‹r‹r‹rÚmakeMixedDataFrame"srcCst|ƒ}t|ƒSr´)rr)r    rür‹r‹rÚmakePeriodFrame&srú#Fzbool | str | list[str] | None)Úprefixrërœcsd|dkrdg|}t|ƒr&t|ƒ|ks*t‚|dksR|dksR|dksRt|ƒ|ksRt‚|dksn|dkrj|dksnt‚|dkrŒ‡fdd„t|ƒDƒ}|dkr˜d}t|tƒr°|dkr°|g}tttt    t
t dœ}|  |¡}|rê||ƒ}|ræ|d    |_ |S|dk    rtt|ƒ›d
ƒ‚t|ƒ|kr,| dg|t|ƒ¡t|ƒ|ks>t‚td d „|DƒƒsVt‚g}    t|ƒD]x}
d d„} |||
d} t ¡} t| ƒD]&}ˆ›d|
›d|›}||
| |<qŽt|  ¡| dd|…}|     |¡qbtt|    Žƒ}|dkr|dkrdn|d    }t|d    |d}nF|dkrR|dkr2dn|d    }tdd „|Dƒ|d}ntj||d}|S)aÒ
    Create an index/multindex with given dimensions, levels, names, etc'
 
    nentries - number of entries in index
    nlevels - number of levels (> 1 produces multindex)
    prefix - a string prefix for labels
    names - (Optional), bool or list of strings. if True will use default
       names, if false will use no names, if a list is given, the name of
       each level in the index will be taken from the list.
    ndupe_l - (Optional), list of ints, the number of rows for which the
       label will repeated at the corresponding level, you can specify just
       the first few, the rest will use the default ndupe_l of 1.
       len(ndupe_l) <= nlevels.
    idx_type - "i"/"f"/"s"/"dt"/"p"/"td".
       If idx_type is not None, `idx_nlevels` must be 1.
       "i"/"f" creates an integer/float index,
       "s" creates a string
       "dt" create a datetime index.
       "td" create a datetime index.
 
        if unspecified, string labels will be generated.
    NrÊFT)ÚiÚfr„ÚuräÚpÚtdcsg|]}ˆt|ƒ‘qSr‹)rk)rŒr ©rr‹rrSsz#makeCustomIndex.<locals>.<listcomp>)r r!r„rär$r#rzE is not a legal value for `idx_type`, use  'i'/'f'/'s'/'dt'/'p'/'td'.css|]}|dkVqdS©rNr‹©rŒrÇr‹r‹rÚ    <genexpr>vsz"makeCustomIndex.<locals>.<genexpr>cSs"t dd|¡ d¡}dd„|DƒS)Nz[^\d_]_?ÚÚ_cSsg|] }t|ƒ‘qSr‹)r»)rŒrËr‹r‹rr}sz4makeCustomIndex.<locals>.keyfunc.<locals>.<listcomp>)ÚreÚsubÚsplit)rÇZ numeric_tupler‹r‹rÚkeyfunc{sz makeCustomIndex.<locals>.keyfuncZ_lZ_g)Úkeyr¾css|]}|dVqdSr&r‹r'r‹r‹rr(•s)rë)rrírÑrìr¦rkrÜrßrÁrårèréÚgetr¿Ú
ValueErrorÚreprÚextendÚallÚ collectionsr    ÚsortedÚelementsÚappendÚlistÚziprr Ú from_tuples)ZnentriesÚnlevelsrrëÚndupe_lÚidx_typeZ idx_func_dictZidx_funcÚidxZ list_of_listsr r.Z
div_factorZcntÚjÚlabelÚresultZtuplesr¿rør‹r%rÚmakeCustomIndex+sn
(ÿÿú
 
 
 ÿ   
 
rCrÊzbool | list[str])Ú c_idx_namesÚ r_idx_namesÚ c_idx_nlevelsÚ r_idx_nlevelsrœc s°|dks t‚|dkst‚| dks4| dkr0|dks4t‚|
dksP|
dkrL|dksPt‚tˆ|d|||
d} t||d||| d} ˆdkrˆdd    „‰‡‡fd
d „t|ƒDƒ}t|| | |    d S) a‡
 
    Create a DataFrame using supplied parameters.
 
    Parameters
    ----------
    nrows,  ncols - number of data rows/cols
    c_idx_names, r_idx_names  - False/True/list of strings,  yields No names ,
            default names or uses the provided names for the levels of the
            corresponding index. You can provide a single string when
            c_idx_nlevels ==1.
    c_idx_nlevels - number of levels in columns index. > 1 will yield MultiIndex
    r_idx_nlevels - number of levels in rows index. > 1 will yield MultiIndex
    data_gen_f - a function f(row,col) which return the data value
            at that position, the default generator used yields values of the form
            "RxCy" based on position.
    c_ndupe_l, r_ndupe_l - list of integers, determines the number
            of duplicates for each label at a given level of the corresponding
            index. The default `None` value produces a multiplicity of 1 across
            all levels, i.e. a unique index. Will accept a partial list of length
            N < idx_nlevels, for just the first N levels. If ndupe doesn't divide
            nrows/ncol, the last label might have lower multiplicity.
    dtype - passed to the DataFrame constructor as is, in case you wish to
            have more control in conjunction with a custom `data_gen_f`
    r_idx_type, c_idx_type -  "i"/"f"/"s"/"dt"/"td".
        If idx_type is not None, `idx_nlevels` must be 1.
        "i"/"f" creates an integer/float index,
        "s" creates a string index
        "dt" create a datetime index.
        "td" create a timedelta index.
 
            if unspecified, string labels will be generated.
 
    Examples
    --------
    # 5 row, 3 columns, default names on both, single index on both axis
    >> makeCustomDataframe(5,3)
 
    # make the data a random int between 1 and 100
    >> mkdf(5,3,data_gen_f=lambda r,c:randint(1,100))
 
    # 2-level multiindex on rows with each label duplicated
    # twice on first level, default names on both axis, single
    # index on both axis
    >> a=makeCustomDataframe(5,3,r_idx_nlevels=2,r_ndupe_l=[2])
 
    # DatetimeIndex on row, index with unicode labels on columns
    # no names on either axis
    >> a=makeCustomDataframe(5,3,c_idx_names=False,r_idx_names=False,
                             r_idx_type="dt",c_idx_type="u")
 
    # 4-level multindex on rows with names provided, 2-level multindex
    # on columns with default labels and default names.
    >> a=makeCustomDataframe(5,3,r_idx_nlevels=4,
                             r_idx_names=["FEE","FIH","FOH","FUM"],
                             c_idx_nlevels=2)
 
    >> a=mkdf(5,3,r_idx_nlevels=2,c_idx_nlevels=4)
    rN)r r!r„rär#r$rÊr)r<rrër=r>ÚRcSsd|›d|›S)NrHrr‹)Úrrr‹r‹rÚ<lambda>ÿóz%makeCustomDataframe.<locals>.<lambda>cs$g|]‰‡‡fdd„tˆƒDƒ‘qS)csg|]}ˆˆ|ƒ‘qSr‹r‹r)Ú
data_gen_frIr‹rrsz2makeCustomDataframe.<locals>.<listcomp>.<listcomp>)rì)rŒ©rLÚncols)rIrrsz'makeCustomDataframe.<locals>.<listcomp>rÎ)rÑrCrìr)ÚnrowsrNrDrErFrGrLZ    c_ndupe_lZ    r_ndupe_lr±Z
c_idx_typeZ
r_idx_typeÚcolumnsrørür‹rMrÚmakeCustomDataframe›s@H  ÿÿÿÿúú
rQÚfloat)Údensityc s¼|dkrtj}n tj |¡}td|ˆˆƒ‰d}d}tˆ||ˆƒ}‡‡‡fdd„}|||ƒ}|jˆkr‚|d9}|||ƒ}qdt |dˆ¡ t¡}    ||    ˆ t¡}
|
     ¡|         ¡fS)NrÊrgR¸…ëQð?cs.| t|ƒ¡}t t |ˆˆ¡¡dˆ…Sr´)Zrandr»r§ÚuniqueÚfloor)rïZ _extra_sizeÚind©rNrOr½r‹rÚ_gen_unique_randsz-_create_missing_idx.<locals>._gen_unique_randgÍÌÌÌÌÌð?r)
r§rÓZ RandomStateÚroundÚminr½rUrûr»Útolist) rOrNrSÚ random_stateZmin_rowsZfacÚ
extra_sizerXrVr@r r‹rWrÚ_create_missing_idxs 
 
 r^çÍÌÌÌÌÌì?)rSrœcCs0tƒ}t|j||dœŽ\}}tj|j||f<|S)N)rSr\)rr^Úshaper§r|Úiloc)rSr\Zdfr r@r‹r‹rÚmakeMissingDataframe!srbc@s,eZdZddgZedd„ƒZedd„ƒZdS)ÚSubclassedSeriesÚtestattrr¿cCsdd„S)Nc_s
t||ŽSr´©rc©ÚargsrÆr‹r‹rrJ2rKz/SubclassedSeries._constructor.<locals>.<lambda>r‹©Úselfr‹r‹rÚ _constructor+szSubclassedSeries._constructorcCsdd„S)Nc_s
t||ŽSr´©ÚSubclassedDataFramerfr‹r‹rrJ6rKz9SubclassedSeries._constructor_expanddim.<locals>.<lambda>r‹rhr‹r‹rÚ_constructor_expanddim4sz'SubclassedSeries._constructor_expanddimN)Ú__name__Ú
__module__Ú __qualname__Ú    _metadataÚpropertyrjrmr‹r‹r‹rrc(s
 
rcc@s*eZdZdgZedd„ƒZedd„ƒZdS)rlrdcCsdd„S)Nc_s
t||ŽSr´rkrfr‹r‹rrJ>rKz2SubclassedDataFrame._constructor.<locals>.<lambda>r‹rhr‹r‹rrj<sz SubclassedDataFrame._constructorcCsdd„S)Nc_s
t||ŽSr´rerfr‹r‹rrJBrKz9SubclassedDataFrame._constructor_sliced.<locals>.<lambda>r‹rhr‹r‹rÚ_constructor_sliced@sz'SubclassedDataFrame._constructor_slicedN)rnrorprqrrrjrsr‹r‹r‹rrl9s
 
rlc@seZdZedd„ƒZdS)ÚSubclassedCategoricalcCstSr´)rtrhr‹r‹rrjFsz"SubclassedCategorical._constructorN)rnrorprrrjr‹r‹r‹rrtEsrtcs"ˆr‡fdd„}n ‡fdd„}|S)a`
    Create a function for calling on an array.
 
    Parameters
    ----------
    alternative : function
        The function to be called on the array with no NaNs.
        Only used when 'skipna_alternative' is None.
    skipna_alternative : function
        The function to be called on the original array
 
    Returns
    -------
    function
    cs
ˆ|jƒSr´)rÖ©rÇ)Úskipna_alternativer‹rÚskipna_wrapper]sz,_make_skipna_wrapper.<locals>.skipna_wrappercs"| ¡}t|ƒdkrtjSˆ|ƒS)Nr)Zdropnarír§r|)rÇZnona)Ú alternativer‹rrwbs r‹)rxrvrwr‹)rxrvrÚ_make_skipna_wrapperKs ryz    list[str])Ú    rows_listrœcCstj}| |¡|S)aW
    Convert list of CSV rows to single CSV-formatted string for current OS.
 
    This method is used for creating expected value of to_csv() method.
 
    Parameters
    ----------
    rows_list : List[str]
        Each element represents the row of csv.
 
    Returns
    -------
    str
        Expected output of to_csv() in current OS.
    )ÚosÚlinesepÚjoin)rzÚsepr‹r‹rÚconvert_rows_list_to_csv_strksrztype[Exception]r)Úexpected_exceptionrœcCsddl}|j|ddS)a$
    Helper function to mark pytest.raises that have an external error message.
 
    Parameters
    ----------
    expected_exception : Exception
        Expected error to raise.
 
    Returns
    -------
    Callable
        Regular `pytest.raises` function with `match` equal to `None`.
    rN)Úmatch)ÚpytestZraises)r€r‚r‹r‹rÚexternal_error_raisedsrƒcs@g}|D]2\‰‰| ˆˆˆf¡|‡‡‡fdd„tDƒ7}q|S)a±
    Combine frame, functions from com._cython_table
    keys and expected result.
 
    Parameters
    ----------
    ndframe : DataFrame or Series
    func_names_and_expected : Sequence of two items
        The first item is a name of a NDFrame method ('sum', 'prod') etc.
        The second item is the expected return value.
 
    Returns
    -------
    list
        List of three items (DataFrame, function, expected result)
    cs"g|]\}}|ˆkrˆ|ˆf‘qSr‹r‹)rŒÚfuncr¿©r¯Ú    func_nameÚndframer‹rr©sþz+get_cython_table_params.<locals>.<listcomp>)r8Ú cython_table)r‡Zfunc_names_and_expectedÚresultsr‹r…rÚget_cython_table_params•s þ
rŠr)Úop_namerœcsP| d¡}ztt|ƒ}Wn2tk
rJtt|dd…ƒ‰‡fdd„}YnX|S)zì
    The operator function for a given op name.
 
    Parameters
    ----------
    op_name : str
        The op name, in form of "add" or "__add__".
 
    Returns
    -------
    function
        A function performing the operation.
    r*rÊNcs
ˆ||ƒSr´r‹)rÇÚy©Zropr‹rrJÅrKz"get_op_from_name.<locals>.<lambda>)Ústripr²ÚoperatorÚAttributeError)r‹Z short_opnameÚopr‹rrÚget_op_from_name±s
r’cCs|Sr´r‹rur‹r‹rÚgetitemÎsr“cCs|Sr´r‹rur‹r‹rÚsetitemÒsr”cCs|jSr´)Úlocrur‹r‹rr•Ösr•cCs|jSr´)rarur‹r‹rraÚsracCs|jSr´)Úatrur‹r‹rr–Þsr–cCs|jSr´)Úiatrur‹r‹rr—âsr—cCsÒt|tjƒr$t|tjƒr$t ||¡St|tjƒr:t||ƒSt|tƒrHdSt|tƒr^t|j|ƒSt|ttfƒrxt|j    |ƒSt|t
ƒrŽt|j |ƒSt|t j jjƒrªt|j|ƒSt|t j jjƒrÒt|j|ƒpÐt|j|ƒSt|tƒrN|jdkrNtd|ƒ}t|tƒrN|jdkrNtd|ƒ}|j}|j}| d¡ ¡d}| d¡ ¡d}||kSt|tƒrˆt|tƒrˆt |j|j¡p†t |j|j¡St|tƒr¼t|jjƒdkr¼|jjd}t||ƒStt |ƒt |ƒƒ‚dS)z-
    Pandas-compat for np.shares_memory.
    Fzstring[pyarrow]rUrrÊN)!r¦r§r¬Ú shares_memoryr!r Ú_codesrr"r©rQZ_ndarrayrÚcoreZarraysZ SparseArrayZ    sp_valuesZ IntervalArrayÚ_leftZ_rightrOr±r Ú_dataÚchunkÚbuffersrNZ_maskrríZ_mgrr®Útype)ÚleftÚrightZ left_pa_dataZ right_pa_dataZ    left_buf1Z
right_buf1Zarrr‹r‹rr˜ésD  
 
 
 
 
 
ÿ 
r˜ÚALL_INT_EA_DTYPESÚALL_INT_NUMPY_DTYPESÚALL_NUMPY_DTYPESÚALL_REAL_NUMPY_DTYPESr.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@r,rArBrCr r$rGÚEMPTY_STRING_PATTERNÚENDIANrHrIrEr rFr-ÚNARROW_NP_DTYPESr%ÚNP_NAT_OBJECTSÚ NULL_OBJECTSrDr*rJr&r'r(rrKrLrMr))T)rºN)rºr•N)rºN)rºN)rº)rº)rº)rºN)rº)rºràN)rºrN)rºN)rºN)rº)N)N)N)NràN)NN)Nrà)N)Nrà)N)rFNN)
TTrÊrÊNNNNNN)N)r_N)N)÷Ú
__future__rr5rÚdecimalrrr{r+rµÚsysrÚtypingrrrr    r
r Únumpyr§Zpandas._config.localizationr r rZpandas._typingrrrZ pandas.compatrZpandas.core.dtypes.commonrrrrrrZpandasrrrrrrrrr r!r"r#Zpandas._testing._ior$r%r&r'r(r)Zpandas._testing._randomr*r+Zpandas._testing._warningsr,r-Zpandas._testing.assertersr.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDZpandas._testing.compatrErFZpandas._testing.contextsrGrHrIrJrKrLrMZpandas.core.arraysrNrOrPZpandas.core.arrays._mixinsrQZpandas.core.constructionrRrSrTrUrùrr\Ú__annotations__r]r»rbrcr£r¢rdrRrgrhriÚcomplexrjrkrmrnrorprqrrrsrtrur¥ZALL_REAL_EXTENSION_DTYPESrvrwr¤Úfloat16rer^r_r`rXrYrZr¨r§r|rŠZNArªZ
datetime64Z timedelta64r©Zpyarrowr˜r[ZUNSIGNED_INT_PYARROW_DTYPESraZSIGNED_INT_PYARROW_DTYPESZALL_INT_PYARROW_DTYPESZALL_INT_PYARROW_DTYPES_STR_REPRrfZFLOAT_PYARROW_DTYPESZFLOAT_PYARROW_DTYPES_STR_REPRZ
decimal128ZDECIMAL_PYARROW_DTYPESZSTRING_PYARROW_DTYPESÚbinaryZBINARY_PYARROW_DTYPESZtime32Ztime64ZTIME_PYARROW_DTYPESZdate32Zdate64ZDATE_PYARROW_DTYPESZDATETIME_PYARROW_DTYPESZTIMEDELTA_PYARROW_DTYPESZbool_ZBOOL_PYARROW_DTYPESZALL_PYARROW_DTYPESÚcompiler¦ržr r°r­r¹rÁrÈrÌrÍr×rÜrÝrÞrßrårèrérñrórôrýrrrrr
r rrrrrrrrCrQr^rbrcrlrtryrrƒršÚcommonZ _cython_tableÚitemsrˆrŠr’r“r”r•rar–r—r˜Ú__all__r‹r‹r‹rÚ<module>sŽ               4  d$       ÿþýüûúùÿ ø 
þÿÿ
 
üþ
ÿþýüûúùø    ÷ÿ 
 )ÿ
ÿ    ÿ  úsôk   2‹