zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
U
¬ý°dš½ã@s ddlmZddlmZmZmZmZmZmZm    Z    ddl
Z
ddl Z ddl mZmZddlmZmZddlmZmZmZmZmZmZmZmZmZmZmZddl m!Z!ddl"m#Z#dd    l$m%Z%dd
l&m'Z'dd l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3dd l4m5Z5dd l6m7Z7ddl8m9Z9m:Z:m;Z;m<Z<ddl=m>Z?m@Z@mZmAZAmBZBddlCmDZDmEZEmFZFddlGmHZHmIZIddlJmKZKddlLmMZMddlNmOZOddlPmQZQddlRmSZSddlTmUZUerÞddlVmWZWddlNmXZXddlmYZYmZZZddl[m\Z]edddZ^Gdd„deMeOƒZ_dS) é)Ú annotations)Ú TYPE_CHECKINGÚAnyÚIteratorÚLiteralÚSequenceÚTypeVarÚoverloadN)ÚlibÚmissing)Úget_unit_from_dtypeÚis_supported_unit) Ú    ArrayLikeÚ    AstypeArgÚAxisIntÚDtypeObjÚNpDtypeÚPositionalIndexerÚScalarÚ ScalarIndexerÚSequenceIndexerÚShapeÚnpt©ÚAbstractMethodError)Údoc)Úvalidate_fillna_kwargs)ÚExtensionDtype) Úis_boolÚ is_bool_dtypeÚis_datetime64_dtypeÚis_dtype_equalÚis_float_dtypeÚis_integer_dtypeÚ is_list_likeÚis_object_dtypeÚ    is_scalarÚis_string_dtypeÚ pandas_dtype)ÚBaseMaskedDtype)Ú is_array_like)Úarray_equivalentÚis_valid_na_for_dtypeÚisnaÚnotna)Ú
algorithmsÚ    arrayliker ÚnanopsÚops)Úfactorize_arrayÚisinÚtake)Úmasked_accumulationsÚmasked_reductions)Úquantile_with_mask)ÚOpsMixin)ÚExtensionArray)Úensure_wrapped_if_datetimelike)Úcheck_array_indexer)Úinvalid_comparison)ÚSeries©Ú BooleanArray)Ú NumpySorterÚNumpyValueArrayLike)ÚfunctionÚBaseMaskedArrayTÚBaseMaskedArray)Úboundc@s2eZdZUdZded<ded<ded<eZeZdÐddd    d
d œd d „Ze    dddœdd    ddœdd„ƒZ
e ddœdd„ƒZ e dddœdd„ƒZe ddddœd d„ƒZdd!d"dœd#d„ZeejƒdÑddd$œd%d&„ƒZe    dd'œd(d    d)d*œd+d,„ƒZd-d.„Zd
dœd/d0„Zd1dœd2d3„Zd4dœd5d6„Ze d7dœd8d9„ƒZe d4dœd:d;„ƒZddd$œd<d=„ZdÒdd?dd@œdAdB„Zddd$œdCdD„Zddd$œdEdF„Ze ddd$œdGdH„ƒZdÓd4dIœdJdK„Zddd$œdLdM„Zddd$œdNdO„Z ddd$œdPdQ„Z!ddd$œdRdS„Z"dde#j$fdTd    dUddVœdWdX„Z%eej&ƒdYdZ„ƒZ&e dÔd\d    dd*œd]d^„ƒZ'e dÕd_d    d`d*œdad^„ƒZ'e dÖdbd    dcd*œddd^„ƒZ'd×dbd    dcd*œdfd^„Z'dgZ(dØdhddiœdjdk„Z)dledm<dndodpœdqdr„Z*dÙdsdt„Z+e d    dœdudv„ƒZ,dwddxœdydz„Z-d{d|„Z.e.Z/d}dœd~d„Z0d€d„Z1ddœd‚dƒ„Z2e d„d…„ƒZ3e d4dœd†d‡„ƒZ4e    dÚddˆd?dd‰œdŠd‹„ƒZ5ddd>dŒœdd    dd?ddŽœdd„Z6d}dœd‘d’„Z7ddd$œd“d”„Z8ddd$œd•d–„Z9eej:ƒdÛd˜d™dšd›dœœddž„ƒZ:eej;ƒdÜd    dŸd œd¡d¢„ƒZ;eej<ƒddœd£d¤„ƒZ<dÝd    d¥d¦œd§d¨„Z=eej>ƒd    dœd©dª„ƒZ>d«dodd¬œd­d®„Z?ded¯œdod    d°œd±d²„Z@dod³œd´dµ„ZAded>d>d¶œd    d4d·d¶œd¸d¹„ZBded>d>d¶œd    d4d·d¶œdºd»„ZCded>d¼œd    d·d¼œd½d¾„ZDded>d¿dÀœd    d·d4dÀœdÁd„ZEded>d¿dÀœd    d·d4dÀœdÃdĄZFded>d¼œd    d·d¼œdÅdƄZGded>d¼œd    d·d¼œdÇdȄZHded¯œd    d¯œdÉdʄZIded¯œd    d¯œdËd̄ZJded¯œdod    dd͜dÎdτZKdS)ÞrEzf
    Base class for masked arrays (which use _data and _mask to store the data).
 
    numpy based
    rÚ_internal_fill_valuez
np.ndarrayÚ_dataznpt.NDArray[np.bool_]Ú_maskFÚboolÚNone)ÚvaluesÚmaskÚcopyÚreturncCsXt|tjƒr|jtjks tdƒ‚|j|jkr4tdƒ‚|rH| ¡}| ¡}||_    ||_
dS)NzGmask should be boolean numpy array. Use the 'pd.array' function insteadz"values.shape must match mask.shape) Ú
isinstanceÚnpÚndarrayÚdtypeÚbool_Ú    TypeErrorÚshapeÚ
ValueErrorrNrHrI)ÚselfrLrMrN©rYúPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/arrays/masked.pyÚ__init__usÿ zBaseMaskedArray.__init__N©rSrNztype[BaseMaskedArrayT]rD)ÚclsrNrOcCs|j|||d\}}|||ƒS)Nr\)Ú_coerce_to_array)r]ZscalarsrSrNrLrMrYrYrZÚ_from_sequenceˆszBaseMaskedArray._from_sequencer))rOcCs t|ƒ‚dS©Nr©rXrYrYrZrSszBaseMaskedArray.dtyperr)ÚitemrOcCsdSr`rY©rXrbrYrYrZÚ __getitem__“szBaseMaskedArray.__getitem__r)rXrbrOcCsdSr`rYrcrYrYrZrd—srzBaseMaskedArrayT | AnycCsFt||ƒ}|j|}t|ƒr2|r(|jjS|j|St|ƒ|j||ƒSr`)r<rIrrSÚna_valuerHÚtype)rXrbZnewmaskrYrYrZrd›s
 
 
)rXrOc    CsÄt||ƒ\}}|j}t|ƒrPt|ƒt|ƒkrHtdt|ƒ›dt|ƒ›ƒ‚||}| ¡r¸|dk    r¦tj||jd}|j     
¡j }| 
¡j }||||dt |ƒ|j |j ƒS| 
¡}|||<n| 
¡}|S)Nz'Length of 'value' does not match. Got (z )  expected )Úndim)ÚlimitrM) rrIr*ÚlenrWÚanyr Z get_fill_funcrgrHrNÚTrf)    rXÚvalueÚmethodrhrMÚfuncZnpvaluesZnew_maskZ
new_valuesrYrYrZÚfillna©s&ÿ 
 
zBaseMaskedArray.fillna©rNrztuple[np.ndarray, np.ndarray])rSrNrOcCs t|ƒ‚dSr`r)r]rLrSrNrYrYrZr^Èsz BaseMaskedArray._coerce_to_arraycCs€|jj}|dkr t |¡rb|SnB|dkrBt |¡s<t |¡rb|Sn t |¡s^t |¡rb| ¡rb|Stdt|ƒ›d|j›ƒ‚dS)zy
        Check if we have a scalar that we can cast losslessly.
 
        Raises
        ------
        TypeError
        ÚbÚfzInvalid value 'z ' for dtype N)rSÚkindr
rÚ
is_integerZis_floatrUÚstr)rXrlrsrYrYrZÚ_validate_setitem_valueÎs
z'BaseMaskedArray._validate_setitem_valuecCsxt||ƒ}t|ƒrLt||jƒr*d|j|<n| |¡}||j|<d|j|<dS|j||jd\}}||j|<||j|<dS)NTF©rS)r<r&r,rSrIrvrHr^)rXÚkeyrlrMrYrYrZÚ __setitem__és
 
 
 
 
zBaseMaskedArray.__setitem__rccsx|jdkrX|js$|jD]
}|Vqqt|jj}t|j|jƒD]\}}|rN|Vq:|Vq:ntt|ƒƒD]}||VqddS)Né)    rgÚ_hasnarHrSreÚziprIÚrangeri)rXÚvalreZisna_ÚirYrYrZÚ__iter__ús
 
 
 
zBaseMaskedArray.__iter__ÚintcCs
t|jƒSr`)rirHrarYrYrZÚ__len__
szBaseMaskedArray.__len__rcCs|jjSr`)rHrVrarYrYrZrV szBaseMaskedArray.shapecCs|jjSr`)rHrgrarYrYrZrgszBaseMaskedArray.ndimcCs*|j ||¡}|j ||¡}t|ƒ||ƒSr`)rHÚswapaxesrIrf)rXZaxis1Zaxis2ÚdatarMrYrYrZrƒszBaseMaskedArray.swapaxesrr)rXÚaxisrOcCs2tj|j||d}tj|j||d}t|ƒ||ƒS)N©r…)rQÚdeleterHrIrf)rXÚlocr…r„rMrYrYrZr‡szBaseMaskedArray.deletecOs*|jj||Ž}|jj||Ž}t|ƒ||ƒSr`)rHÚreshaperIrf©rXÚargsÚkwargsr„rMrYrYrZr‰szBaseMaskedArray.reshapecOs*|jj||Ž}|jj||Ž}t|ƒ||ƒSr`)rHÚravelrIrfrŠrYrYrZr$szBaseMaskedArray.ravelcCst|ƒ|jj|jjƒSr`)rfrHrkrIrarYrYrZrk*szBaseMaskedArray.T)ÚdecimalscOs6t ||¡tj|jfd|i|—Ž}| ||j ¡¡S)aó
        Round each value in the array a to the given number of decimals.
 
        Parameters
        ----------
        decimals : int, default 0
            Number of decimal places to round to. If decimals is negative,
            it specifies the number of positions to the left of the decimal point.
        *args, **kwargs
            Additional arguments and keywords have no effect but might be
            accepted for compatibility with NumPy.
 
        Returns
        -------
        NumericArray
            Rounded values of the NumericArray.
 
        See Also
        --------
        numpy.around : Round values of an np.array.
        DataFrame.round : Round values of a DataFrame.
        Series.round : Round values of a Series.
        rŽ)ÚnvZvalidate_roundrQÚroundrHÚ_maybe_mask_resultrIrN)rXrŽr‹rŒrLrYrYrZr.s zBaseMaskedArray.roundcCst|ƒ|j|j ¡ƒSr`©rfrHrIrNrarYrYrZÚ
__invert__OszBaseMaskedArray.__invert__cCst|ƒ|j |j ¡ƒSr`r’rarYrYrZÚ__neg__RszBaseMaskedArray.__neg__cCs| ¡Sr`rprarYrYrZÚ__pos__UszBaseMaskedArray.__pos__cCst|ƒt|jƒ|j ¡ƒSr`)rfÚabsrHrIrNrarYrYrZÚ__abs__XszBaseMaskedArray.__abs__znpt.DTypeLike | NoneÚobject)rSrNrerOc    Cs¼|tjkrtj}|dkrt}|jr†t|ƒsLt|ƒsL|tjkrLtd|›dƒ‚t     
¡ t    j dt d|j  |¡}W5QRX|||j<n2t     
¡$t    j dt d|j j||d}W5QRX|S)aF
        Convert to a NumPy Array.
 
        By default converts to an object-dtype NumPy array. Specify the `dtype` and
        `na_value` keywords to customize the conversion.
 
        Parameters
        ----------
        dtype : dtype, default object
            The numpy dtype to convert to.
        copy : bool, default False
            Whether to ensure that the returned value is a not a view on
            the array. Note that ``copy=False`` does not *ensure* that
            ``to_numpy()`` is no-copy. Rather, ``copy=True`` ensure that
            a copy is made, even if not strictly necessary. This is typically
            only possible when no missing values are present and `dtype`
            is the equivalent numpy dtype.
        na_value : scalar, optional
             Scalar missing value indicator to use in numpy array. Defaults
             to the native missing value indicator of this array (pd.NA).
 
        Returns
        -------
        numpy.ndarray
 
        Examples
        --------
        An object-dtype is the default result
 
        >>> a = pd.array([True, False, pd.NA], dtype="boolean")
        >>> a.to_numpy()
        array([True, False, <NA>], dtype=object)
 
        When no missing values are present, an equivalent dtype can be used.
 
        >>> pd.array([True, False], dtype="boolean").to_numpy(dtype="bool")
        array([ True, False])
        >>> pd.array([1, 2], dtype="Int64").to_numpy("int64")
        array([1, 2])
 
        However, requesting such dtype will raise a ValueError if
        missing values are present and the default missing value :attr:`NA`
        is used.
 
        >>> a = pd.array([True, False, pd.NA], dtype="boolean")
        >>> a
        <BooleanArray>
        [True, False, <NA>]
        Length: 3, dtype: boolean
 
        >>> a.to_numpy(dtype="bool")
        Traceback (most recent call last):
        ...
        ValueError: cannot convert to bool numpy array in presence of missing values
 
        Specify a valid `na_value` instead
 
        >>> a.to_numpy(dtype="bool", na_value=False)
        array([ True, False, False])
        Nzcannot convert to 'zZ'-dtype NumPy array with missing values. Specify an appropriate 'na_value' for this dtype.Úignore©Úcategoryrp)r
Ú
no_defaultÚ
libmissingÚNAr˜r{r%r'rWÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningrHÚastyperI)rXrSrNrer„rYrYrZÚto_numpy]s,B
ÿþý
ÿ
 
zBaseMaskedArray.to_numpycCs:|jdkrdd„|DƒS|jr"dn|jj}|j|d ¡S)NrzcSsg|] }| ¡‘qSrY)Útolist©Ú.0ÚxrYrYrZÚ
<listcomp>¼sz*BaseMaskedArray.tolist.<locals>.<listcomp>rw)rgr{rHrSr¤r¥©rXrSrYrYrZr¥¹s
zBaseMaskedArray.tolist.z npt.DTypeLikecCsdSr`rY©rXrSrNrYrYrZr£ÀszBaseMaskedArray.astyperr:cCsdSr`rYr«rYrYrZr£ÄsrrcCsdSr`rYr«rYrYrZr£ÈsTc    Cs"t|ƒ}t||jƒr$|r | ¡S|St|tƒr’t ¡&tjdt    d|j
j |j |d}W5QRX||j
krr|j n|j  ¡}| ¡}|||ddSt|tƒr´| ¡}|j|||dSt|ƒrÄtj}nt|ƒrØt d¡}ntj}t|ƒrô|jrôtdƒ‚t|ƒr|jrtdƒ‚|j|||d    }|S)
Nr™ršrpFr\ÚNaTzcannot convert NA to integerz cannot convert float NaN to bool)rSrerN)r(r!rSrNrPr)rŸr r¡r¢rHr£Ú numpy_dtyperIZconstruct_array_typerr_r"rQÚnanr Z
datetime64r
rœr#r{rWrr¤)rXrSrNr„rMr]ZeaclsrerYrYrZr£Ìs4 
 
 
 ièzNpDtype | None)rSrOcCs |j|dS)z|
        the array interface, return my values
        We return an object array here to preserve our scalar values
        rw)r¤rªrYrYrZÚ    __array__üszBaseMaskedArray.__array__ztuple[type, ...]Ú_HANDLED_TYPESznp.ufuncru)Úufuncrmc    sT| dd¡}||D]}t||jtfƒstSqtj|||f|ž|Ž}|tk    rV|Sd|krttj|||f|ž|ŽS|dkržtj    |||f|ž|Ž}|tk    rž|St
j t |ƒt d‰g}|D]0}t|tƒrވ|jO‰| |j¡q¸| |¡q¸‡fdd„‰t||ƒ||Ž}|jdkr(t‡fdd    „|DƒƒS|dkrH|j ¡rD|jS|Sˆ|ƒSdS)
NÚoutrYÚreducerwcsŽddlm}m}m}t|jƒr0ˆ ¡}|||ƒSt|jƒrLˆ ¡}|||ƒSt|jƒr€ˆ ¡}|jt    j
krv|  t    j ¡}|||ƒSt    j |ˆ<|S)Nr)r@Ú FloatingArrayÚ IntegerArray)Úpandas.core.arraysr@r´rµrrSrNr#r"rQÚfloat16r£Úfloat32r®)r¨r@r´rµÚm©rMrYrZÚ reconstruct,s
 
 
 
 
 
 
z4BaseMaskedArray.__array_ufunc__.<locals>.reconstructrzc3s|]}ˆ|ƒVqdSr`rYr¦)r»rYrZÚ    <genexpr>Isz2BaseMaskedArray.__array_ufunc__.<locals>.<genexpr>)ÚgetrPr°rEÚNotImplementedr2Z!maybe_dispatch_ufunc_to_dunder_opr0Zdispatch_ufunc_with_outZdispatch_reduction_ufuncrQÚzerosrirJrIÚappendrHÚgetattrZnoutÚtuplerjÚ    _na_value)    rXr±rmÚinputsrŒr²r¨ÚresultZinputs2rY)rMr»rZÚ__array_ufunc__sj  
ÿÿÿÿÿÿÿÿÿ
 
 
 zBaseMaskedArray.__array_ufunc__cCsddl}|j|j|j|dS)z6
        Convert myself into a pyarrow Array.
        rN)rMrf)ZpyarrowÚarrayrHrI)rXrfÚparYrYrZÚ__arrow_array__RszBaseMaskedArray.__arrow_array__cCs
|j ¡Sr`)rIrjrarYrYrZr{ZszBaseMaskedArray._hasnaznpt.NDArray[np.bool_] | None)rMrOcCsZ|dkrL|j ¡}|tjkr&|dB}qVt|ƒrVt|ƒt|ƒkrV|t|ƒB}n
|j|B}|S)NT)rIrNrržr$rir-)rXrMÚotherrYrYrZÚ_propagate_maskcs
 
 
 
zBaseMaskedArray._propagate_maskc     CsÔ|j}d}t|dƒs˜t|ƒr˜t|ƒt|ƒkr˜tj|dd}|dkrZddlm}| |¡}n>|dkrzddlm    }| |¡}n|d    kr˜dd
lm
}| |¡}t |t ƒr²|j |j}}n.t|ƒràt |tƒsÎt |¡}|jd kràtd ƒ‚t |t|ƒf¡}t |¡}    t|ƒ}|d kr$t |tjƒr$t|ƒ}| ||¡}
|tjkr¶t |j ¡} |jjdkr|dkrptd|›dƒ‚|dkr€d} nd} |   | ¡} n$d|krö|jjdkrö|   tj!¡} n@|jjdkrÒ|dkrÒ|}    tj"dd|    |j |ƒ} W5QRX|dkr`t #|j d k|j@d|
¡}
|dk    r@t #|dk|@d|
¡}
n|tjk    rÈt #|dkd|
¡}
nh|dkrÈ|dk    rŽt #|d k|@d|
¡}
n|tjk    r¬t #|d kd|
¡}
t #|j dk|j@d|
¡}
| $| |
¡S)NrST©ÚskipnaÚintegerr©rµ)Zfloatingzmixed-integer-float©r´)Úbooleanr?rzú(can only perform ops with 1-d structures>ÚpowÚrpowrq>rÔÚtruedivÚfloordivÚ    rfloordivrÓÚrtruedivz
operator 'z!' not implemented for bool dtypes>ÚrmodÚmodZint8rJrÕrr)rÚu)rÖrÚr™©ÚallrÓFrÔ)%Ú__name__Úhasattrr$rir
Z infer_dtyper¶rµr_r´r@rPrErHrIr:rQÚasarrayrgÚNotImplementedErrorr2Zmaybe_prepare_scalar_for_opZ get_array_opr;rTrJrËrržZ    ones_likerSrsr£Úfloat64ÚerrstateÚwherer‘) rXrÊÚopZop_nameZomaskZinferred_dtyperµr´r@Zpd_oprMrÅrSrYrYrZÚ _arith_methodsszÿþý     
 
 
 
 
 
 
 
 
ÿ
 
 
 
 
 zBaseMaskedArray._arith_methodr@c
Cs.ddlm}d}t|tƒr*|j|j}}n<t|ƒrft |¡}|j    dkrNt
dƒ‚t |ƒt |ƒkrft dƒ‚|t jkr–tj|jjdd}tj|jjdd}n~t ¡pt dd    t¡t dd    t¡tjdd
$t|jd |j›d ƒ}||ƒ}W5QRX|tkr
t|j||ƒ}W5QRX| ||¡}|||d d S)Nrr?rzrÒzLengths must match to comparerJrwr™Z elementwiserÜÚ__Frp)r¶r@rPrErHrIr$rQràrgrárirWrržr¿rVÚonesrŸr r¡Ú FutureWarningÚDeprecationWarningrãrÁrÞr¾r=rË)rXrÊrår@rMrÅrmrYrYrZÚ _cmp_methodÞs. 
 
 
 
 
 
 zBaseMaskedArray._cmp_methodc    Cs t|tƒr*|\}}| ||¡| ||¡fSt|jƒrNddlm}|||ddSt|jƒrrddlm}|||ddSt|jt    jƒrÔ|jj
dkrÔt t |jƒƒrÔddlm }t||ƒsÀ|j||jd}|j d    ¡||<|St|jƒrúdd
lm}|||ddSt    j||<|Sd S) z
        Parameters
        ----------
        result : array-like or tuple[array-like]
        mask : array-like bool
        rrÐFrpr?r¹)ÚTimedeltaArrayrwr¬rÏN)rPrÂr‘r"rSr¶r´rr@rQrsr r rìZ _simple_newrfr#rµr®)    rXrÅrMÚdivrÚr´r@rìrµrYrYrZr‘s6
 
 
þ
 
  ÿ
þ ý 
 
z"BaseMaskedArray._maybe_mask_resultcCs
|j ¡Sr`)rIrNrarYrYrZr-7szBaseMaskedArray.isnacCs|jjSr`©rSrerarYrYrZrÃ:szBaseMaskedArray._na_valuecCs|jj|jjSr`)rHÚnbytesrIrarYrYrZrï>szBaseMaskedArray.nbyteszSequence[BaseMaskedArrayT])r]Ú    to_concatr…rOcCs:tjdd„|Dƒ|d}tjdd„|Dƒ|d}|||ƒS)NcSsg|]
}|j‘qSrY©rHr¦rYrYrZr©Hsz5BaseMaskedArray._concat_same_type.<locals>.<listcomp>r†cSsg|]
}|j‘qSrY)rIr¦rYrYrZr©Is)rQZ concatenate)r]rðr…r„rMrYrYrZÚ_concat_same_typeBsz!BaseMaskedArray._concat_same_type)Ú
allow_fillÚ
fill_valuer…z Scalar | None)rXrórôr…rOc    Csvt|ƒr|jn|}t|j||||d}t|j|d||d}|rdt|ƒrdt |¡dk}|||<||A}t|ƒ||ddS)N)rôrór…TéÿÿÿÿFrp)    r-rGr5rHrIr.rQràrf)    rXZindexerrórôr…Zdata_fill_valuerÅrMZ    fill_maskrYrYrZr5Ls(
ûÿ zBaseMaskedArray.takecsrddlm}t |¡}tˆj|ƒ}ˆjrRt|jƒoFt    ‡fdd„|Dƒƒ}||ˆj
<tj ˆjj t d}|||ddS)Nrr?c3s|]}|ˆjjkVqdSr`rî)r§r~rarYrZr¼ysz'BaseMaskedArray.isin.<locals>.<genexpr>rwFrp)r¶r@rQràr4rHr{r%rSrjrIr¿rVrJ)rXrLr@Z
values_arrrÅZvalues_have_NArMrYrarZr4ps 
 ÿ
zBaseMaskedArray.isincCs0|j|j}}| ¡}| ¡}t|ƒ||ddS)NFrp)rHrIrNrf)rXr„rMrYrYrZrN„szBaseMaskedArray.copycCs&t |j|j¡\}}t|ƒ||ddS)z‚
        Compute the BaseMaskedArray of unique values.
 
        Returns
        -------
        uniques : BaseMaskedArray
        Frp)ÚalgosZunique_with_maskrHrIrf)rXÚuniquesrMrYrYrZÚuniqueŠszBaseMaskedArray.uniqueÚleftz$NumpyValueArrayLike | ExtensionArrayzLiteral[('left', 'right')]rAznpt.NDArray[np.intp] | np.intp)rlÚsideÚsorterrOcCs4|jrtdƒ‚t|tƒr"| t¡}|jj|||dS)NzOsearchsorted requires array to be sorted, which is impossible with NAs present.)rúrû)r{rWrPr:r£r˜rHÚ searchsorted)rXrlrúrûrYrYrZrü•sÿ
 
zBaseMaskedArray.searchsortedz!tuple[np.ndarray, ExtensionArray])Úuse_na_sentinelrOc Csô|j}|j}t|d|d\}}|j|jjks<t|j|jfƒ‚| ¡}|sL|sVt|ƒ}n t|ƒd}tj    |t
d}|sÞ|rÞ|  ¡}    |    dkr”t  d¡}
n|d|    …  ¡d}
|||
kd7<|
||dk<t ||
d¡}d||
<t|ƒ||ƒ} || fS)NT)rýrMrzrwrrõ)rHrIr3rSr­ÚAssertionErrorrjrirQr¿rJZargmaxZintpÚmaxÚinsertrf) rXrýZarrrMÚcodesr÷Zhas_naÚsizeZ uniques_maskZna_indexZna_codeZ
uniques_earYrYrZÚ    factorize¦s(
   zBaseMaskedArray.factorizecCs|jSr`rñrarYrYrZÚ_values_for_argsortÍsz#BaseMaskedArray._values_for_argsortr>)ÚdropnarOc Csìddlm}m}ddlm}tj|jd|jd\}}|rf|||ddd}|j     
|j ¡|_    | 
d    ¡}|St j t|ƒd
d d }||d d…<|j ¡|d<|||j d  t|ƒ|j j¡}    |     
|j ¡}    t jt|ƒdd }
|||
ƒ} || |    dddS)aA
        Returns a Series containing counts of each unique value.
 
        Parameters
        ----------
        dropna : bool, default True
            Don't include counts of missing values.
 
        Returns
        -------
        counts : Series
 
        See Also
        --------
        Series.value_counts
        r)ÚIndexr>rÏT)rrMÚcountF)ÚindexÚnamerNZInt64rzÚint64rwNrõrJ)Úpandasrr>Z pandas.arraysrµröZvalue_counts_arraylikerHrIrr£rSrQÚemptyriÚsumrrer¿) rXrrr>rµÚkeysÚ value_countsÚresÚcountsrrMZ counts_arrayrYrYrZrÑs( ÿ
 
 
zBaseMaskedArray.value_countscCsbt|ƒt|ƒkrdS|j|jkr$dSt |j|j¡s8dS|j|j}|j|j}t||ddS)NFT)Z dtype_equal)rfrSrQZ array_equalrIrHr+)rXrÊrùÚrightrYrYrZÚequalsÿs zBaseMaskedArray.equalsznpt.NDArray[np.float64])ÚqsÚ interpolationrOcCs˜t|j|jtj||d}|jrz|jdkr,t‚| ¡     ¡rhtj
|j t d}t |jƒrxtj|j |jjd}qŠtj|j t d}ntj|j t d}|j||dS)z½
        Dispatch to quantile_with_mask, needed because we do not have
        _from_factorized.
 
        Notes
        -----
        We assume that all impacted cases are 1D-only.
        )rMrôrrérwrº)r8rHrIrQr®r{rgrár-rÝrèrVrJr#rSr¿r­r‘)rXrrrZout_maskrYrYrZÚ    _quantiles" ù
 
 
zBaseMaskedArray._quantilerÌ)r    rÍcKsh|dkr t||ƒfd|i|—ŽS|j}|j}ttd|›ƒ}||fd||dœ|—Ž}t |¡rdtjS|S)N>    rjrÝrÿÚvarÚminÚstdr ÚprodÚmeanrÍr®r)r…rÍrM)rÁrHrIr1rQÚisnanrrž)rXr    rÍrŒr„rMrårÅrYrYrZÚ_reduce;s
zBaseMaskedArray._reduce)r    cKsFt|tjƒrB|d}|r(|jj|d}n|jj|d}| ||¡S|S)Nr…r†)rPrQrRrIrÝrjr‘)rXr    rÅrÍrŒr…rMrYrYrZÚ_wrap_reduction_resultKs  z&BaseMaskedArray._wrap_reduction_result©rÍÚ    min_countr…zAxisInt | NonecKs`t d|¡d|kr.|ddk    r$t‚| d¡tj|j|j|||d}|jd|f||dœ|—ŽS)NrYr²r r ©rÍr…)    rZ validate_sumráÚpopr7r rHrIr©rXrÍr!r…rŒrÅrYrYrZr Ws*  
ûÿÿÿzBaseMaskedArray.sumcKs>t d|¡tj|j|j|||d}|jd|f||dœ|—ŽS)NrYr rr")rZ validate_prodr7rrHrIrr$rYrYrZrss" ûÿÿÿzBaseMaskedArray.prodr"cKs<t d|¡tj|j|j||d}|jd|f||dœ|—ŽS)NrYr"r)rZ validate_meanr7rrHrIr)rXrÍr…rŒrÅrYrYrZr‡s  üÿÿÿzBaseMaskedArray.meanrz©rÍr…ÚddofcKsBtjd|ddtj|j|j|||d}|jd|f||dœ|—ŽS)NrYr©Úfnamer%r")rÚvalidate_stat_ddof_funcr7rrHrIr©rXrÍr…r&rŒrÅrYrYrZr“s"ûÿÿÿzBaseMaskedArray.varcKsBtjd|ddtj|j|j|||d}|jd|f||dœ|—ŽS)NrYrr'r%r")rr)r7rrHrIrr*rYrYrZr¢s"ûÿÿÿzBaseMaskedArray.stdcKs"t d|¡tj|j|j||dS©NrYr")rZ validate_minr7rrHrI©rXrÍr…rŒrYrYrZr±s üzBaseMaskedArray.mincKs"t d|¡tj|j|j||dSr+)rZ validate_maxr7rÿrHrIr,rYrYrZrÿºs üzBaseMaskedArray.maxcKsn| dd¡t d|¡|j ¡}t ||j|j¡|     ¡}|rD|S|s^t
|ƒdks^|j     ¡sb|S|j j SdS)a1
        Return whether any element is truthy.
 
        Returns False unless there is at least one element that is truthy.
        By default, NAs are skipped. If ``skipna=False`` is specified and
        missing values are present, similar :ref:`Kleene logic <boolean.kleene>`
        is used as for logical operations.
 
        .. versionchanged:: 1.4.0
 
        Parameters
        ----------
        skipna : bool, default True
            Exclude NA values. If the entire array is NA and `skipna` is
            True, then the result will be False, as for an empty array.
            If `skipna` is False, the result will still be True if there is
            at least one element that is truthy, otherwise NA will be returned
            if there are NA's present.
        **kwargs : any, default None
            Additional keywords have no effect but might be accepted for
            compatibility with NumPy.
 
        Returns
        -------
        bool or :attr:`pandas.NA`
 
        See Also
        --------
        numpy.any : Numpy version of this method.
        BaseMaskedArray.all : Return whether all elements are truthy.
 
        Examples
        --------
        The result indicates whether any element is truthy (and by default
        skips NAs):
 
        >>> pd.array([True, False, True]).any()
        True
        >>> pd.array([True, False, pd.NA]).any()
        True
        >>> pd.array([False, False, pd.NA]).any()
        False
        >>> pd.array([], dtype="boolean").any()
        False
        >>> pd.array([pd.NA], dtype="boolean").any()
        False
        >>> pd.array([pd.NA], dtype="Float64").any()
        False
 
        With ``skipna=False``, the result can be NA if this is logically
        required (whether ``pd.NA`` is True or False influences the result):
 
        >>> pd.array([True, False, pd.NA]).any(skipna=False)
        True
        >>> pd.array([1, 0, pd.NA]).any(skipna=False)
        True
        >>> pd.array([False, False, pd.NA]).any(skipna=False)
        <NA>
        >>> pd.array([0, 0, pd.NA]).any(skipna=False)
        <NA>
        r…NrYr) r#rZ validate_anyrHrNrQÚputmaskrIÚ _falsey_valuerjrirSre©rXrÍrŒrLrÅrYrYrZrjÃs>  
zBaseMaskedArray.anycKsn| dd¡t d|¡|j ¡}t ||j|j¡|     ¡}|rD|S|r^t
|ƒdks^|j  ¡sb|S|j j SdS)a$
        Return whether all elements are truthy.
 
        Returns True unless there is at least one element that is falsey.
        By default, NAs are skipped. If ``skipna=False`` is specified and
        missing values are present, similar :ref:`Kleene logic <boolean.kleene>`
        is used as for logical operations.
 
        .. versionchanged:: 1.4.0
 
        Parameters
        ----------
        skipna : bool, default True
            Exclude NA values. If the entire array is NA and `skipna` is
            True, then the result will be True, as for an empty array.
            If `skipna` is False, the result will still be False if there is
            at least one element that is falsey, otherwise NA will be returned
            if there are NA's present.
        **kwargs : any, default None
            Additional keywords have no effect but might be accepted for
            compatibility with NumPy.
 
        Returns
        -------
        bool or :attr:`pandas.NA`
 
        See Also
        --------
        numpy.all : Numpy version of this method.
        BooleanArray.any : Return whether any element is truthy.
 
        Examples
        --------
        The result indicates whether all elements are truthy (and by default
        skips NAs):
 
        >>> pd.array([True, True, pd.NA]).all()
        True
        >>> pd.array([1, 1, pd.NA]).all()
        True
        >>> pd.array([True, False, pd.NA]).all()
        False
        >>> pd.array([], dtype="boolean").all()
        True
        >>> pd.array([pd.NA], dtype="boolean").all()
        True
        >>> pd.array([pd.NA], dtype="Float64").all()
        True
 
        With ``skipna=False``, the result can be NA if this is logically
        required (whether ``pd.NA`` is True or False influences the result):
 
        >>> pd.array([True, True, pd.NA]).all(skipna=False)
        <NA>
        >>> pd.array([1, 1, pd.NA]).all(skipna=False)
        <NA>
        >>> pd.array([True, False, pd.NA]).all(skipna=False)
        False
        >>> pd.array([1, 0, pd.NA]).all(skipna=False)
        False
        r…NrYr)r#rZ validate_allrHrNrQr-rIÚ _truthy_valuerÝrirjrSrer/rYrYrZrÝs>  
zBaseMaskedArray.all)r    rÍrOcKsB|j}|j}tt|ƒ}|||fd|i|—Ž\}}t|ƒ||ddS)NrÍFrp)rHrIrÁr6rf)rXr    rÍrŒr„rMrårYrYrZÚ _accumulatefs
 
zBaseMaskedArray._accumulate)F)NNN)r)r).).).)T)N)N)r)rùN)T)T)LrÞÚ
__module__Ú __qualname__Ú__doc__Ú__annotations__rr0r.r[Ú classmethodr_ÚpropertyrSr    rdrr:ror^rvryr€r‚rVrgrƒr‡r‰rrkrr“r”r•r—r
rœr¤r¥r£Z__array_priority__r¯rÆrÉr{rËræZ_logical_methodrër‘r-rÃrïròr5r4rNrørürrrrrrrr rrrrrrÿrjrÝr1rYrYrYrZrEdsø
ÿÿÿÿ!ü\
.M
i)0
ý ú$ üþ&.,ûû ÿÿ        QSÿ)`Ú
__future__rÚtypingrrrrrrr    rŸÚnumpyrQZ pandas._libsr
r rZpandas._libs.tslibsr r Zpandas._typingrrrrrrrrrrrZ pandas.errorsrZpandas.util._decoratorsrZpandas.util._validatorsrZpandas.core.dtypes.baserZpandas.core.dtypes.commonrrr r!r"r#r$r%r&r'r(Zpandas.core.dtypes.dtypesr)Zpandas.core.dtypes.inferencer*Zpandas.core.dtypes.missingr+r,r-r.Z pandas.corer/rör0r1r2Zpandas.core.algorithmsr3r4r5Zpandas.core.array_algosr6r7Z pandas.core.array_algos.quantiler8Zpandas.core.arrayliker9r¶r:Zpandas.core.constructionr;Zpandas.core.indexersr<Zpandas.core.opsr=r r>r@rArBZpandas.compat.numpyrCrrDrErYrYrYrZÚ<module>s< $    4    4