zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
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
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
U
¬ý°d¤³ã@sîdZddlmZddlmZmZmZmZmZddl    Z
ddl m Z m ZmZddlmZmZmZmZmZddlmZddlmZdd    lmZmZdd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'm(Z(dd l)m*Z*m+Z+dd l,m-Z-m.Z.m/Z/ddl0m1m2Z ddl3m4Z4ddl5m6Z6ddl7m8Z8m9Z9m:Z:m;Z;ddl<m=Z=ddl>m?Z?m@Z@mAZAddlBmCZCmDZDddlEmFZFmGZGddlHmIZImJZJmKZKddlLmMZMmNZNmOZOmPZPmQZQmRZRedddZSGdd„deIƒZTGdd„deTƒZUGdd„deTeJƒZVGdd „d ƒZWdS)!zA
Experimental manager based on storing a collection of 1D arrays
é)Ú annotations)ÚAnyÚCallableÚHashableÚLiteralÚTypeVarN)ÚNaTÚalgosÚlib)Ú    ArrayLikeÚAxisIntÚDtypeObjÚQuantileInterpolationÚnpt)Úvalidate_bool_kwarg)Úastype_array_safe)Úensure_dtype_can_hold_naÚinfer_dtype_from_scalar)Úensure_platform_intÚis_datetime64_ns_dtypeÚis_dtype_equalÚis_extension_array_dtypeÚ
is_integerÚis_numeric_dtypeÚis_object_dtypeÚis_timedelta64_ns_dtype)ÚExtensionDtypeÚ PandasDtype)Ú ABCDataFrameÚ    ABCSeries)Ú array_equalsÚisnaÚna_value_for_dtype)Úquantile_compat©Útake_1d)Ú DatetimeArrayÚExtensionArrayÚ PandasArrayÚTimedeltaArray)Ú SparseDtype)Úensure_wrapped_if_datetimelikeÚ extract_arrayÚsanitize_array)Úmaybe_convert_indicesÚvalidate_indices)ÚIndexÚ ensure_index)Ú DataManagerÚSingleDataManagerÚinterleaved_dtype)Úensure_block_shapeÚexternal_valuesÚextract_pandas_arrayÚmaybe_coerce_valuesÚ    new_blockÚto_native_typesÚTÚBaseArrayManager)Úboundc    @s8eZdZUdZddgZded<ded<d„ddddd    œd
d „Zd…d d dœdd„Zeddœdd„ƒZ    eddœdd„ƒZ
eddœdd„ƒZ e dddœdd„ƒZ ddddœd d!„Zd"dœd#d$„Zddd%œd&d'„Zd(d)„Zddœd*d+„Zd,dœd-d.„Zd†d d/d d0œd1d2„Zd‡d dd d3œd4d5„Zd dd d6œd7d8„Zdˆd ddd d:œd;d<„Zd d dœd=d>„Zd‰d dd d6œd?d@„Zd ddd dAœdBdC„Zd d dœdDdE„Zd ddd dFœdGdH„Zd dd dIœdJdK„ZdŠd dMd,d dNœdOdP„Zd dMd dQœdRdS„Zd d dœdTdU„Z d dd dIœdVdW„Z!d‹d dXdXddd dYœdZd[„Z"d d dœd\d]„Z#eddœd^d_„ƒZ$eddœd`da„ƒZ%eddœdbdc„ƒZ&eddœddde„ƒZ'eddœdfdg„ƒZ(d dhd diœdjdk„Z)dŒd dd dQœdldm„Z*dd dd dQœdndo„Z+dŽd dpd dqœdrds„Z,dd dddMddd dtœdudv„Z-dd dwdddMdd dxœdydz„Z.d‘d dddd d|œd}d~„Z/d’ddœd€d„Z0ddœd‚dƒ„Z1d S)“r<aO
    Core internal data structure to implement DataFrame and Series.
 
    Alternative to the BlockManager, storing a list of 1D arrays instead of
    Blocks.
 
    This is *not* a public API class
 
    Parameters
    ----------
    arrays : Sequence of arrays
    axes : Sequence of Index
    verify_integrity : bool, default True
 
    Ú_axesÚarraysú!list[np.ndarray | ExtensionArray]ú list[Index]TÚboolÚNone©r?ÚaxesÚverify_integrityÚreturncCst‚dS©N©ÚNotImplementedError©Úselfr?rErF©rMúZd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/internals/array_manager.pyÚ__init__|szBaseArrayManager.__init__Nr;)rLrGcCs0|dkr|jdd…tgƒg}g}t|ƒ||ƒS)zFReturn an empty ArrayManager with the items axis of len 0 (no columns)Né)rEr0Útype)rLrEr?rMrMrNÚ
make_empty„szBaseArrayManager.make_emptyr0©rGcCs
|jdS)Néÿÿÿÿ©r>©rLrMrMrNÚitemsŒszBaseArrayManager.itemscCs|jd|jdgS)z5Axes is BlockManager-compatible order (columns, rows)rPrrUrVrMrMrNrEszBaseArrayManager.axesztuple[int, ...]cCstdd„|jDƒƒS)Ncss|]}t|ƒVqdSrH)Úlen©Ú.0ÚaxrMrMrNÚ    <genexpr>›sz0BaseArrayManager.shape_proper.<locals>.<genexpr>)Útupler>rVrMrMrNÚ shape_proper˜szBaseArrayManager.shape_properr Úint)ÚaxisrGcCs|dkr dnd}|S©NrrPrM©r`rMrMrNÚ_normalize_axissz BaseArrayManager._normalize_axis)r`Ú
new_labelsrGcCs$| ||¡| |¡}||j|<dSrH)Z_validate_set_axisrcr>)rLr`rdrMrMrNÚset_axis£s 
zBaseArrayManager.set_axisú
np.ndarraycCstjdd„|jDƒddS)NcSsg|]
}|j‘qSrM©Údtype©rZÚarrrMrMrNÚ
<listcomp>ªsz/BaseArrayManager.get_dtypes.<locals>.<listcomp>Úobjectrg)ÚnpÚarrayr?rVrMrMrNÚ
get_dtypes©szBaseArrayManager.get_dtypes)ÚmgrrGcCsdS)z<
        Only implemented on the BlockManager level
        NrM)rLrprMrMrNÚadd_references¬szBaseArrayManager.add_referencescCs |j|jfSrH©r?r>rVrMrMrNÚ __getstate__²szBaseArrayManager.__getstate__cCs|d|_|d|_dSrarr)rLÚstaterMrMrNÚ __setstate__µs
zBaseArrayManager.__setstate__ÚstrcCsrt|ƒj}|d|jd›7}|jdkr<|d|jd›7}|dt|jƒ›d7}|jD]}|d|j›7}qX|S)Nz
Index: réz
 
Columns: rPÚ
z arrays:)rQÚ__name__r>ÚndimrXr?rh)rLÚoutputrjrMrMrNÚ__repr__¹s
 
 
zBaseArrayManager.__repr__zlist[str] | None)rLÚ
align_keysrGc  sødˆks t‚|pg}g}‡fdd„|Dƒ}|dkr<ˆ d¡}t|jƒD]œ\}}|r²| ¡D]V\}}    t|    ttfƒr¤|    jdkrŠ|    j    |ˆ|<q°|    j    dd…|fj
ˆ|<qZ|    |ˆ|<qZt |ƒrÈ||fˆŽ}
nt ||ƒfˆŽ}
|  |
¡qF|j} t|ƒ|| ƒS)ab
        Iterate over the arrays, collect and create a new ArrayManager.
 
        Parameters
        ----------
        f : str or callable
            Name of the Array method to apply.
        align_keys: List[str] or None, default None
        **kwargs
            Keywords to pass to `f`
 
        Returns
        -------
        ArrayManager
        Úfiltercsi|]}|ˆ|“qSrMrM©rZÚk©ÚkwargsrMrNÚ
<dictcomp>Þsz*BaseArrayManager.apply.<locals>.<dictcomp>ÚapplyÚfuncrPN)ÚAssertionErrorÚpopÚ    enumerater?rWÚ
isinstancerrrzÚilocÚ_valuesÚcallableÚgetattrÚappendr>rQ) rLÚfr}r‚Ú result_arraysÚ aligned_argsÚirjr€ÚobjÚappliedÚnew_axesrMrrNr„Ãs( 
 
 zBaseArrayManager.apply)rLÚ    swap_axisrGc  sî|r.dˆkr.|jdkr.ˆddkr&dndˆd<|p4g}‡fdd„|Dƒ}g}t|jƒD]„\}}|rþ| ¡D]\}    }
t|
ttfƒrä|
jdkrÈ|jdkr²|
jt||dƒj    ˆ|    <qâ|
jdd…j    ˆ|    <qü|
jdd…|gfj    ˆ|    <ql|
jdkrl|
|gˆ|    <qlt|j
t j
ƒr&t|t j ƒs&t   |¡}|jdkrTt|dƒ}t|tdddƒdd} nt|tdt|ƒdƒdd} t| |ƒfˆŽ} t| tƒr’| d} | j}|jdkrÒ|jdkrÒt|ƒdksÂt‚|ddd…f}| |¡qVt|ƒ||jƒS)Nr`rwrrPcsi|]}|ˆ|“qSrMrMrrrMrNrƒ    sz5BaseArrayManager.apply_with_block.<locals>.<dictcomp>)Z    placementrz)rzrˆr?rWr‰rrrŠÚslicer‹rhrmÚndarrayÚasarrayr5r9rXrÚlistÚvaluesr†rŽrQr>) rLrr}r–r‚r‘rr’rjr€r“Úblockr”rMrrNÚapply_with_blocks>
 
 
 
 
  z!BaseArrayManager.apply_with_block)rLÚalignrGcCs2|rddg}ndg}t|dd}|jd|||dS)NÚotherÚcondT©Z extract_numpyÚwhere)r}rŸr ©r,r)rLrŸr ržr}rMrMrNr¢8s
 üzBaseArrayManager.whereF)rLÚdecimalsÚ    using_cowrGcCs|jd||dS)NÚround)r¤r¥©r)rLr¤r¥rMrMrNr¦FszBaseArrayManager.roundcCs|jd||dS)NÚsetitem©ÚindexerÚvaluer§©rLrªr«rMrMrNr¨IszBaseArrayManager.setitemcCs2|rddg}ndg}t|dd}|jd|||dS)NÚnewÚmaskTr¡Úputmask)r}r®r­r£)rLr®r­ržr}rMrMrNr¯Ls
 üzBaseArrayManager.putmask)rLÚnr`rGcCs(|jdkr|dkst‚|jtj||dS)Nrwr)r°r`)rzr†r„r    Údiff)rLr°r`rMrMrNr±ZszBaseArrayManager.diffcKs|jdddi|—ŽS)NÚ interpolater–F)r²r§©rLr‚rMrMrNr²^szBaseArrayManager.interpolate)rLÚperiodsr`rGcCs6|tjkrd}|dkr$|jdkr$t‚|jd|||dS)NrPrwÚshift)r´r`Ú
fill_value)r
Ú
no_defaultrzrJr)rLr´r`r¶rMrMrNrµas
ÿzBaseArrayManager.shift)rLÚinplacerGcCs*|dk    rtjd|d}|jd||||dS)N)ÚlimitÚfillna)r«r¹r¸Údowncast)ÚlibalgosZvalidate_limitr)rLr«r¹r¸r»rMrMrNrºmsÿzBaseArrayManager.fillnaÚraisez bool | None)rLÚcopyÚerrorsrGcCs|dkr d}|jt|||dS)NT)rhr¾r¿)r„r)rLrhr¾r¿rMrMrNÚastypevszBaseArrayManager.astype)rLr¾rGcs"ˆdkr d‰‡fdd„}| |¡S)NTcsTt|jƒr@t |¡}tj|ddddd}||kr<ˆr<| ¡S|SˆrL| ¡S|SdS)NT)Zconvert_datetimeZconvert_timedeltaZconvert_periodZconvert_interval)rrhrmr™r
Zmaybe_convert_objectsr¾)rjÚresult©r¾rMrNÚ_convert€s
 
û z*BaseArrayManager.convert.<locals>._convert)r„)rLr¾rÃrMrÂrNÚconvert|s zBaseArrayManager.convertcKs |jd|ŽS)NÚ_replace_regex)rÅr§r³rMrMrNÚ replace_regex“szBaseArrayManager.replace_regexcCs2t|dƒ}t |¡dks t|ƒ‚|jd|||dS)Nr¸rÚreplace)r«Ú
to_replacer¸)rrmrzr†r)rLrÈr«r¸rMrMrNrǖs
ÿzBaseArrayManager.replacez    list[Any])rLÚsrc_listÚ    dest_listr¸ÚregexrGcCst|dƒ}|jd||||dS)zdo a list replacer¸Ú replace_list)rÉrÊr¸rË)rr)rLrÉrÊr¸rËrMrMrNr̟s
ûzBaseArrayManager.replace_listcKs|jtf|ŽSrH)r„r:r³rMrMrNr:±sz BaseArrayManager.to_native_typescCsdS©NTrMrVrMrMrNÚ is_mixed_type´szBaseArrayManager.is_mixed_typecCstdd„| ¡DƒƒS)Ncss|]}t|ƒVqdSrH)r)rZÚtrMrMrNr\ºsz9BaseArrayManager.is_numeric_mixed_type.<locals>.<genexpr>)ÚallrorVrMrMrNÚis_numeric_mixed_type¸sz&BaseArrayManager.is_numeric_mixed_typecCsdS)z>Whether any of the blocks in this manager are extension blocksFrMrVrMrMrNÚany_extension_types¼sz$BaseArrayManager.any_extension_typescCsdS)z8return a boolean if we are a single block and are a viewFrMrVrMrMrNÚis_viewÁszBaseArrayManager.is_viewcCst|jƒdkS©NrP)rXr?rVrMrMrNÚis_single_blockÇsz BaseArrayManager.is_single_blockr)rLÚ    predicaterGcsh‡fdd„tˆjƒDƒ}‡fdd„|Dƒ}tj|dd}ˆjd |¡}ˆjd|g}tˆƒ||dd    S)
Ncsg|]\}}ˆ|ƒr|‘qSrMrM)rZr’rj)rÖrMrNrkÌsz5BaseArrayManager._get_data_subset.<locals>.<listcomp>csg|]}ˆj|‘qSrM©r?©rZr’rVrMrNrkÍsÚintprgrPrF©rF)rˆr?rmrnr>ÚtakerQ)rLrÖÚindicesr?ZtakerZnew_colsr•rM)rÖrLrNÚ_get_data_subsetËs z!BaseArrayManager._get_data_subsetcCs| dd„¡S)zÑ
        Select columns that are bool-dtype and object-dtype columns that are all-bool.
 
        Parameters
        ----------
        copy : bool, default False
            Whether to copy the blocks
        cSs|jt t¡kSrH)rhrmrB)ÚxrMrMrNÚ<lambda>ßóz0BaseArrayManager.get_bool_data.<locals>.<lambda>©rÝ©rLr¾rMrMrNÚ get_bool_dataÖs    zBaseArrayManager.get_bool_datacCs| dd„¡S)z¬
        Select columns that have a numeric dtype.
 
        Parameters
        ----------
        copy : bool, default False
            Whether to copy the blocks
        cSst|jƒpt|jddƒS)NZ _is_numericF)rrhr)rjrMrMrNrßës
z3BaseArrayManager.get_numeric_data.<locals>.<lambda>rárârMrMrNÚget_numeric_dataás    ÿz!BaseArrayManager.get_numeric_datazbool | Literal['all'] | None)rLÚdeeprGcsnˆdkr d‰ˆr2‡fdd„‰‡fdd„|jDƒ}n
t|jƒ}ˆrRdd„|jDƒ}n
t|jƒ}t|ƒ||dd    S)
a>
        Make deep or shallow copy of ArrayManager
 
        Parameters
        ----------
        deep : bool or string, default True
            If False, return shallow copy (do not copy data)
            If 'all', copy data and a deep copy of the index
 
        Returns
        -------
        BlockManager
        NTcsˆdkr|jddS| ¡S)NrÐT©rå)r¾Úview)r[rærMrNÚ    copy_funcsz(BaseArrayManager.copy.<locals>.copy_funccsg|] }ˆ|ƒ‘qSrMrMrY)rèrMrNrk    sz)BaseArrayManager.copy.<locals>.<listcomp>cSsg|] }| ¡‘qSrMrÂrirMrMrNrksFrÚ)r>ršr?rQ)rLrår•Ú
new_arraysrM)rèrårNr¾ïs 
 
zBaseArrayManager.copy)rLr`Ú
allow_dupsr¾Ú
only_sliceÚ use_na_proxyrGc            Cs | |¡}| |||||||¡SrH)rcÚ_reindex_indexer)    rLÚnew_axisrªr`r¶rêr¾rërìrMrMrNÚreindex_indexers
ùz BaseArrayManager.reindex_indexerznpt.NDArray[np.intp] | None)rLrªr`rêr¾rìrGc s0|dkr d}ˆdkrP||j|kr*|s*|S|j|d}t|jƒ|_||j|<|S|sd|j| ˆ¡||jkrvtdƒ‚|dkrÆg}    ˆD]<}
|
dkr¢|jˆ|d} n|j|
} |r¸|  ¡} |     | ¡q†nFt    ˆt
|jdƒƒt ˆƒ‰ˆdk‰ˆ  ¡‰‡‡‡‡fd    d
„|jDƒ}    t|jƒ} || |<t |ƒ|    | d d S) a!
        Parameters
        ----------
        new_axis : Index
        indexer : ndarray[intp] or None
        axis : int
        fill_value : object, default None
        allow_dups : bool, default False
        copy : bool, default True
 
 
        pandas-indexer with -1's only.
        NTræú#Requested axis not found in managerrPrT)r¶rìrc    sg|]}t|ˆˆˆˆd‘qS)©Ú
allow_fillr¶r®r$ri©r¶rªr®Ú needs_maskingrMrNrkis    øûz5BaseArrayManager._reindex_indexer.<locals>.<listcomp>FrÚ)r>r¾ršZ_validate_can_reindexrzÚ
IndexErrorÚ_make_na_arrayr?rŽr/rXrÚanyrQ) rLrîrªr`r¶rêr¾rìrÁrér’rjr•rMrórNrí+sF  
 
ÿ
    ÷
z!BaseArrayManager._reindex_indexerrP)rLr`ÚverifyÚconvert_indicesrGcCsŠ| |¡}t|tƒr,tj|j|j|jddn tj|dd}|j    dksLt
dƒ‚|j |}|rht |||d}|j | |¡}|j|||ddS)z,
        Take items along any axis.
        Úint64rgrPzindexer should be 1-dimensional)røT)rîrªr`rê)rcr‰r—rmZarangeÚstartÚstopÚstepZ
asanyarrayrzÚ
ValueErrorr^r.r>rÛrí)rLrªr`rørùr°rdrMrMrNrÛzs"
 
ÿ ý
 
ÿzBaseArrayManager.take)rìcCsZ|r|dkst‚t|jdƒS|dkr,tj}t|ƒ\}}tj|jd|d}| |¡|S)Nrrg)r†ÚNullArrayProxyr^rmÚnanrÚemptyÚfill)rLr¶rìrhr›rMrMrNrö˜s  
zBaseArrayManager._make_na_arraycCs,t|j|jƒD]\}}t||ƒsdSqdS)z“
        Used in .equals defined in base class. Only check the column values
        assuming shape and indexes have already been checked.
        FT)Úzipr?r )rLrŸÚleftÚrightrMrMrNÚ _equal_values©s
zBaseArrayManager._equal_values)T)N)N)NT)F)T)Fr½)FF)F)F)T)NFTFF)NFTF)rPTT)NF)2ryÚ
__module__Ú __qualname__Ú__doc__Ú    __slots__Ú__annotations__rOrRÚpropertyrWrEr^Ú staticmethodrcrerorqrsrur|r„rr¢r¦r¨r¯r±r²rµrºrÀrÄrÆrÇrÌr:rÎrÑrÒrÓrÕrÝrãrär¾rïrírÛrörrMrMrMrNr<cs–
þü ý?ÿ7      û  )õøRûc@sdeZdZeddœdd„ƒZdJdddd    d
œd d „Zd    dœd d„Zdddœdd„ZdKddddœdd„Zdddœdd„Z    dddœdd„Z
ed dœd!d"„ƒZ dLd$ddd    d%œd&d'„Z dMdd$dd    d(œd)d*„Z dd+dd    d,œd-d.„Zddœd/d0„Zd1d2d1d3œd4d5„Zd1d2d1d3œd6d7„Zddd8œd9d:„Zdd#d;d<œd=ddd>dd?œd@dA„ZddœdBdC„ZdDd#ejfddEdFdGœdHdI„ZdDS)NÚ ArrayManagerz
Literal[2]rScCsdS)NrwrMrVrMrMrNrz¸szArrayManager.ndimTr@rArBrCrDcCsJ||_||_|rFdd„|Dƒ|_dd„|Dƒ}dd„|Dƒ|_| ¡dS)NcSsg|] }t|ƒ‘qSrM©r1rYrMrMrNrkÈsz)ArrayManager.__init__.<locals>.<listcomp>cSsg|]}t|ddƒd‘qS)NrPr)r7©rZrÞrMrMrNrkÉscSsg|] }t|ƒ‘qSrM)r8rirMrMrNrkÊs)r>r?Ú_verify_integrityrKrMrMrNrO¼szArrayManager.__init__cCsª|j\}}t|jƒ|ks4tdt|jƒ›d|›dƒ‚|jD]j}t|ƒ|ksdtdt|ƒ›d|›dƒ‚t|tjtfƒsˆtdt|ƒ›dƒ‚|j    d    ks:td
|j    ›d ƒ‚q:dS) NzANumber of passed arrays must equal the size of the column Index: z  arrays vs z     columns.z=Passed arrays should have the same length as the rows Index: z vs z rowszDPassed arrays should be np.ndarray or ExtensionArray instances, got z insteadrPz6Passed arrays should be 1-dimensional, got array with ú dimensions instead.)
r^rXr?rþr‰rmr˜r'rQrz)rLÚn_rowsZ    n_columnsrjrMrMrNrÍs$
ÿ
 ÿÿ
 ÿzArrayManager._verify_integrityr_ÚSingleArrayManager©ÚlocrGcsœtdd„|jDƒƒ}‡fdd„|jDƒ}t|tƒrF| ¡j||d}nBt|ƒr`tj||dj}n(t    |ƒrzt
j||dj}nt j ||d}t |g|jdgƒS)zÅ
        Return the array corresponding to `frame.iloc[loc]`.
 
        Parameters
        ----------
        loc : int
 
        Returns
        -------
        np.ndarray or ExtensionArray
        cSsg|]
}|j‘qSrMrgrirMrMrNrkôsz(ArrayManager.fast_xs.<locals>.<listcomp>csg|] }|ˆ‘qSrMrMri©rrMrNrkösrgrP)r4r?r‰rÚconstruct_array_typeÚ_from_sequencerr&Z_ndarrayrr)rmrnrr>)rLrrhr›rÁrMrrNÚfast_xsès 
zArrayManager.fast_xsrr—r ©Úslobjr`rGcsh| |¡}|dkr(‡fdd„|jDƒ}n|dkr:|jˆ}t|jƒ}|| ˆ¡||<t|ƒ||ddS)Nrcsg|] }|ˆ‘qSrMrMri©rrMrNrksz*ArrayManager.get_slice.<locals>.<listcomp>rPFrÚ)rcr?ršr>Ú_getitem_slicerQ)rLrr`r?r•rMrrNÚ    get_slices
 
 
zArrayManager.get_slice)r’rGcCs|j|}t|g|jdgƒS)z:
        Return the data as a SingleArrayManager.
        r)r?rr>)rLr’r›rMrMrNÚigets
zArrayManager.igetr cCs
|j|S)zY
        Return the data for column i as the values (ndarray or ExtensionArray).
        r×)rLr’rMrMrNÚ iget_valuesszArrayManager.iget_valueszlist[ArrayLike]cCsdd„|jDƒS)zB
        Used in the JSON C code to access column arrays.
        cSsg|]}t |¡‘qSrM)rmr™rirMrMrNrk"sz.ArrayManager.column_arrays.<locals>.<listcomp>r×rVrMrMrNÚ column_arraysszArrayManager.column_arraysFzint | slice | np.ndarray)rr«r¸rGcCspt |¡r”t|tjƒrB|jdkrB|jddks2t‚|dd…df}t|ƒ}t|tjt    fƒs^t‚|jdkslt‚t
|ƒt
|j dƒks†t‚||j |<dSt|t ƒrât|jdk    r°|jnd|jdk    rÂ|jn|jd|jdk    rÚ|jndƒ}n.t|tjƒsòt‚|jdkst‚t |¡d}|jdks t‚|jdt
|j dƒks>t‚t|ƒD]$\}}|dd…|f}||j |<qFdS)aÒ
        Set new column(s).
 
        This changes the ArrayManager in-place, but replaces (an) existing
        column(s), not changing column values in-place).
 
        Parameters
        ----------
        loc : integer, slice or boolean mask
            Positional location (already bounds checked)
        value : np.ndarray or ExtensionArray
        inplace : bool, default False
            Whether overwrite existing array as opposed to replacing it.
        rwrPNrrB)r
rr‰rmr˜rzÚshaper†r8r'rXr>r?r—Úrangerûrür^rýrhÚnonzerorˆ)rLrr«r¸rÜZ    value_idxZmgr_idxZ    value_arrrMrMrNÚiset$s2
 
 
ýzArrayManager.iset)rÚidxÚ inplace_onlyrGcCsbt|ƒstdƒ‚|j|}t|g|jdgƒ}|r@| ||¡n| |f|¡}|jd|j|<dS)zù
        Set values ("setitem") into a single column (not setting the full column).
 
        This is a method on the ArrayManager level, to avoid creating an
        intermediate Series at the DataFrame level (`s = df[loc]; s[idx] = value`)
        z%The column index should be an integerrN)rÚ    TypeErrorr?rr>Zsetitem_inplacer¨)rLrr'r«r(rjrpÚnew_mgrrMrMrNÚcolumn_setitem_s    
zArrayManager.column_setitemr)rÚitemr«rGcCs†|j ||¡}t|dd}|jdkrT|jddkrD|ddd…f}ntd|j›ƒ‚t|ƒ}|j ¡}| ||¡||_||j    d<dS)z±
        Insert item at selected position.
 
        Parameters
        ----------
        loc : int
        item : hashable
        value : np.ndarray or ExtensionArray
        Tr¡rwrrPNz-Expected a 1D array, got an array with shape )
rWÚinsertr,rzr#rþr8r?r¾r>)rLrr,r«rîr?rMrMrNr-ss  
 
ÿ
 zArrayManager.insertcsZtjˆjdtjd}d||<‡fdd„t |¡dDƒˆ_ˆjdˆjd|gˆ_ˆS)z]
        Delete selected locations in-place (new block and array, same BlockManager)
        rrgFcsg|]}ˆj|‘qSrMr×rØrVrMrNrksz(ArrayManager.idelete.<locals>.<listcomp>rP)rmÚonesr#Úbool_r%r?r>©rLrªZto_keeprMrVrNÚidelete–s
zArrayManager.ideleter;r)rLr…rGc
Cs¬g}g}t|jƒD]T\}}t|dd}||ƒ}|jdkrR|jddksJt‚|d}| |¡| |¡qt|ƒdkrzd}n|djd}tt    |ƒƒ}|j
}    t |ƒ|||    gƒS)zã
        Apply grouped reduction function columnwise, returning a new ArrayManager.
 
        Parameters
        ----------
        func : grouped reduction function
 
        Returns
        -------
        ArrayManager
        rw)rzrrP) rˆr?r5rzr#r†rŽrXr0r$rWrQ)
rLr…rZresult_indicesr’rjÚresZnrowsÚindexÚcolumnsrMrMrNÚgrouped_reduce¤s   
 
   zArrayManager.grouped_reducec
Cs~g}t|jƒD]<\}}||dd}|tkr0|jnd}| t|gd|d¡qt tj    dgt
d¡}|j }t |ƒ|||gƒ}    |    S)zÛ
        Apply reduction function column-wise, returning a single-row ArrayManager.
 
        Parameters
        ----------
        func : reduction function
 
        Returns
        -------
        ArrayManager
        rrbNrg) rˆr?rrhrŽr-r0Z _simple_newrmrnrlrWrQ)
rLr…rr’rjr2rhr3r4r*rMrMrNÚreduceËs  ÿzArrayManager.reduce)rŸrGcs4|j}|j}‡fdd„t||ƒDƒ}t|ƒ||jƒS)zO
        Apply array_op blockwise with another (aligned) BlockManager.
        csg|]\}}ˆ||ƒ‘qSrMrM)rZrr©Úarray_oprMrNrkòsz2ArrayManager.operate_blockwise.<locals>.<listcomp>)r?rrQr>)rLrŸr8Z left_arraysZ right_arraysrrMr7rNÚoperate_blockwiseës 
ÿzArrayManager.operate_blockwiseZlinear)r`Ú
transposedÚ interpolationr0r)Úqsr`r:r;rGc
sŒdd„|jDƒ}|dkst‚‡‡fdd„|Dƒ}t|ƒD]6\}}|jdkr8|jddksbt|jƒ‚|d||<q8ˆ|jdg}    t|ƒ||    ƒS)NcSsg|]}t|dƒ‘qS)rw)r5rrMrMrNrkÿsz)ArrayManager.quantile.<locals>.<listcomp>rPcs g|]}t|t ˆj¡ˆƒ‘qSrM)r#rmr™r‹r©r;r<rMrNrksrwr)r?r†rˆrzr#r>rQ)
rLr<r`r:r;ZarrsZnew_arrsr’rjrErMr=rNÚquantile÷s  ÿ
zArrayManager.quantilec
Cs |j\}}|j ¡r&|}d}d}d}n:t |jjd¡}|||j<d}|jj|jŽ}|jdd}|j|jŽ}    t    |    ƒ}    g}
|j
D]p} t |jdƒD]\} |rÈt | |    dd…| f|| ||dd…| fd} nt | |    dd…| fdd    } |
  | ¡qq~|j}| |jd¡}||g}t|ƒ|
|dd
S) a'
        Return a BlockManager with all blocks unstacked.
 
        Parameters
        ----------
        unstacker : reshape._Unstacker
        fill_value : Any
            fill_value for newly introduced missing values.
 
        Returns
        -------
        unstacked : BlockManager
        FNrTTrrbrPrñ©ròrÚ)Z_indexer_and_to_sortr®rÐrmÚfullr#ZreshapeZ
full_shaper÷rr?r$r%rŽÚ    new_indexZget_new_columnsr>rQ)rLZ    unstackerr¶rªÚ_Z new_indexerròZ
new_mask2DrôZ new_indexer2Drérjr’Znew_arrrAZ new_columnsr•rMrMrNÚunstacks<
 
 
 
ûzArrayManager.unstackNrlrf)r¾Úna_valuerGcCsèt|jƒdkr&tj|jtd}| ¡S|p2|tjk    }|sLt    dd„|jDƒƒ}t
|t ƒr^|j }n.t
|t ƒrp|j}nt|ƒr~d}nt|tƒrŒd}tj|j|d}t|jƒD]&\}}|j||d}||dd…|f<q¦|tjk    rä||t|ƒ<|S)a#
        Convert the blockmanager data into an numpy array.
 
        Parameters
        ----------
        dtype : object, default None
            Data type of the return array.
        copy : bool, default False
            If True then guarantee that a copy is returned. A value of
            False does not guarantee that the underlying data is not
            copied.
        na_value : object, default lib.no_default
            Value to be used as the missing value sentinel.
 
        Returns
        -------
        arr : ndarray
        rrgcSsg|]
}|j‘qSrMrgrirMrMrNrkdsz)ArrayManager.as_array.<locals>.<listcomp>rlrÂN)rXr?rmrr#ÚfloatZ    transposer
r·r4r‰r*ÚsubtyperZ numpy_dtyperrrvr^rˆrÀr!)rLrhr¾rDZ    empty_arrrÁr’rjrMrMrNÚas_arrayCs*
 
 
 
 zArrayManager.as_array)T)r)F)F)ryrrr rzrOrrrr r!r"r&r+r-r1r5r6r9r>rCr
r·rGrMrMrMrNr·s:ü ÿ<ÿ#' ú7ürc@sveZdZUddgZded<ded<eddœdd„ƒZdGddd
d d œd d„Zd dœdd„Ze    dd„ƒZ
dHddœdd„Z e ddœdd„ƒZ edd„ƒZeddœdd„ƒZedd„ƒZdd „Zd!d"„Zd#d$„Zed
dœd%d&„ƒZed
dœd'd(„ƒZd)dd*œd+d,„ZdId.d/dd0œd1d2„Zddœd3d4„Zd5d6„Zddœd7d8„Zddœd9d:„Zd;dd<œd=d>„Zd?d d@œdAdB„ZddCdDœdEdF„ZdS)Jrr>r?r@rAz
Literal[1]rScCsdSrÔrMrVrMrMrNrz„szSingleArrayManager.ndimTrBrCrDcCsv||_||_|rrt|ƒdks t‚t|ƒdks0t‚dd„|jDƒ|_|d}t|ƒ}t|ddƒd}|g|_| ¡dS)NrPcSsg|] }t|ƒ‘qSrMrrYrMrMrNrk”sz/SingleArrayManager.__init__.<locals>.<listcomp>r)r>r?rXr†r8r7r)rLr?rErFrjrMrMrNrOˆszSingleArrayManager.__init__cCsT|j\}t|jƒdkst‚|jd}t|ƒ|ks4t‚|jdksPtd|j›dƒ‚dS)NrPrz5Passed array should be 1-dimensional, got array with r)r#rXr?r†rzrþ)rLrrjrMrMrNr›s
 
 ÿz$SingleArrayManager._verify_integritycCs|SrHrMrbrMrMrNrc¦sz"SingleArrayManager._normalize_axisNcCs6|dkrtgtdg}tjg|jd}t|ƒ|g|ƒS)z9Return an empty ArrayManager with index/array of length 0Nrg)r0rlrmrnrhrQ)rLrErnrMrMrNrRªszSingleArrayManager.make_emptycCs||g|gƒSrHrM)Úclsrnr3rMrMrNÚ
from_array±szSingleArrayManager.from_arraycCs|jSrHrUrVrMrMrNrEµszSingleArrayManager.axesr0cCs
|jdS)NrrUrVrMrMrNr3¹szSingleArrayManager.indexcCs|jjSrH)rnrhrVrMrMrNrh½szSingleArrayManager.dtypecCs
t|jƒS)z$The array that Series.values returns)r6rnrVrMrMrNr6Ász"SingleArrayManager.external_valuescCs|jS)z%The array that Series._values returns)rnrVrMrMrNÚinternal_valuesÅsz"SingleArrayManager.internal_valuescCs|j}t|tjƒrt|ƒ}|S)z#The array that Series.array returns)rnr‰rmr˜r()rLrjrMrMrNÚ array_valuesÉs zSingleArrayManager.array_valuescCs(t|jtjƒr|jjjdkS|jjSdS)N)Úbr’Úu)r‰rnrmr˜rhÚkindÚ _can_hold_narVrMrMrNrOÐszSingleArrayManager._can_hold_nacCsdSrÍrMrVrMrMrNrÕØsz"SingleArrayManager.is_single_blockr_rcCs tdƒ‚dS)NzUse series._values[loc] insteadrI)rLrrMrMrNrÜszSingleArrayManager.fast_xsrr—r rcCs>||jkrtdƒ‚|j|}|j |¡}t|ƒ|g|gddS)NrðFrÚ)rzrõrnr3rrQ)rLrr`Ú    new_arrayrArMrMrNrßs
 
 
 zSingleArrayManager.get_slicecCs&|j|}|j|}t|ƒ|g|gƒSrH)rnr3rQ)rLrªrPrArMrMrNÚ getitem_mgrçs
 
zSingleArrayManager.getitem_mgrcKs<t|ƒr||jf|Ž}nt|j|ƒf|Ž}t|ƒ|g|jƒSrH)rŒrnrrQr>)rLr…r‚rPrMrMrNr„ìszSingleArrayManager.applycCs8t|tjƒr(|j|jkr(td|j›ƒ‚|jd||dS)zÓ
        Set values with indexer.
 
        For SingleArrayManager, this backs s[indexer] = value
 
        See `setitem_inplace` for a version that works inplace and doesn't
        return a new Manager.
        zCannot set values with ndim > r¨r©)r‰rmr˜rzrþrr¬rMrMrNr¨ós    zSingleArrayManager.setitemcCsFtj|jdtjd}d||<|jd|g|_|jd|g|_|S)zS
        Delete selected locations in-place (new array, same ArrayManager)
        rrgF)rmr.r#r/r?r>r0rMrMrNr1s
zSingleArrayManager.ideleter)rÖrGcCs,||jƒr t|ƒ|j|jddS| ¡SdS)NFrÚ)rnrQr?r>rR)rLrÖrMrMrNrÝ s
z#SingleArrayManager._get_data_subsetr )r›rGcCs||jd<dS)zá
        Set (replace) the values of the SingleArrayManager in place.
 
        Use at your own risk! This does not check if the passed values are
        valid for the current SingleArrayManager (length, dtype, etc).
        rNr×)rLr›rMrMrNÚ
set_valuesszSingleArrayManager.set_valuesr)r4rGcCs(|jdg}|jd|g}t||ddS)z5
        Manager analogue of Series.to_frame
        rFrÚ)r?rEr)rLr4r?rErMrMrNÚ    to_2d_mgrs zSingleArrayManager.to_2d_mgr)T)N)r)ryrrr
r r rzrOrr rcrRÚ classmethodrIrEr3rhr6rJrKrOrÕrrrQr„r¨r1rÝrRrSrMrMrMrNr{sJ
þü 
 
 
      rc@sFeZdZdZdZdddœdd„Zedd    œd
d „ƒZd d dœdd„ZdS)rÿab
    Proxy object for an all-NA array.
 
    Only stores the length of the array, and not the dtype. The dtype
    will only be known when actually concatenating (after determining the
    common dtype, for which this proxy is ignored).
    Using this object avoids that the internals/concat.py needs to determine
    the proper dtype and array type.
    rPr_rC)r°rGcCs
||_dSrH©r°)rLr°rMrMrNrO2szNullArrayProxy.__init__z
tuple[int]rScCs|jfSrHrUrVrMrMrNr#5szNullArrayProxy.shaper r )rhrGcCstt|tƒr>| ¡jg|d}tj|jtjd }|j|ddSt    |ƒ}t
|ƒ}tj |j|d}|  |¡t |ƒSdS)a'
        Helper function to create the actual all-NA array from the NullArrayProxy
        object.
 
        Parameters
        ----------
        arr : NullArrayProxy
        dtype : the dtype for the resulting array
 
        Returns
        -------
        np.ndarray or ExtensionArray
        rgTr?N)r‰rrrrmr.r°rÙrÛrr"rrr+)rLrhrrªr¶rjrMrMrNÚto_array9s
 
zNullArrayProxy.to_arrayN)    ryrrr    rzrOr r#rVrMrMrMrNrÿ%s 
rÿ)Xr    Ú
__future__rÚtypingrrrrrÚnumpyrmZ pandas._libsrr    r¼r
Zpandas._typingr r r rrZpandas.util._validatorsrZpandas.core.dtypes.astyperZpandas.core.dtypes.castrrZpandas.core.dtypes.commonrrrrrrrrZpandas.core.dtypes.dtypesrrZpandas.core.dtypes.genericrrZpandas.core.dtypes.missingr r!r"Zpandas.core.algorithmsÚcoreZ
algorithmsZ pandas.core.array_algos.quantiler#Zpandas.core.array_algos.taker%Zpandas.core.arraysr&r'r(r)Zpandas.core.arrays.sparser*Zpandas.core.constructionr+r,r-Zpandas.core.indexersr.r/Zpandas.core.indexes.apir0r1Zpandas.core.internals.baser2r3r4Zpandas.core.internals.blocksr5r6r7r8r9r:r;r<rrrÿrMrMrMrNÚ<module>sF   (
         XG+