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
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
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
U
¬ý°dÿ_ã@sddlmZddlmZddlZddlmZmZmZm    Z    m
Z
m Z m Z ddl ZddlmZddlmZmZmZddlmZmZddlmZdd    lmZdd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&dd l'm(Z(dd l)m*Z*dd l+m,Z,ddl-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3m4Z4m5Z5ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>ddl?m@Z@mAZAmBZBmCZCddlDmEZEmFZFmGZGmHZHddlImJZJmKZKmLZLddlMmNZNddlOmPmQZRddlSmTZTmUZUmVZVmWZWmXZXddlYmZZZddl[m\Z\m]Z]m^Z^ddl_m`Z`ddlambZbmcZcmdZdmeZemfZfmgZgmhZhddlimjZjddlkmlZlddlmmPmnZoddlpmqZqddlrmsZsmtZtddlumvZvervddlwmxZxdd lymzZze {d!¡Z|d"d"d#œd$d%„Z}Gd&d'„d'elƒZ~Gd(d)„d)e~ƒZGd*d+„d+ej~eƒZ€Gd,d-„d-eje~ƒZGd.d/„d/eƒZ‚Gd0d1„d1ejƒeƒZ„d2d3d4œd5d6„Z…Gd7d8„d8e„ƒZ†Gd9d:„d:e†ƒZ‡Gd;d<„d<eƒZˆd=d=d>œd?d@„Z‰dAdBœdCdD„ZŠdjd=dEdFdGœdHdI„Z‹ddJœdKdFd'dLœdMdN„ZŒdEdKd3dOœdPdQ„ZdRdSdKdTdUœdVdW„ZŽdkdXdYœdZd[„Zdld=dKd=d]œd^d_„Zd`dddadbœd=dcdcdddeœdfdg„Z‘d=d=d>œdhdi„Z’dS)mé)Ú annotations)ÚwrapsN)Ú TYPE_CHECKINGÚAnyÚCallableÚIterableÚSequenceÚcastÚfinal)Úusing_copy_on_write)Ú    internalsÚlibÚwriters)ÚBlockPlacementÚBlockValuesRefs)ÚNA)ÚIncompatibleFrequency)    Ú    ArrayLikeÚAxisIntÚDtypeObjÚFÚ FillnaOptionsÚ IgnoreRaiseÚQuantileInterpolationÚShapeÚnpt©ÚAbstractMethodError)Úcache_readonly)Úvalidate_bool_kwarg)Úastype_array_safeÚastype_is_view)ÚLossySetitemErrorÚcan_hold_elementÚfind_result_typeÚmaybe_downcast_to_dtypeÚnp_can_hold_element)Úensure_platform_intÚis_1d_only_ea_dtypeÚis_1d_only_ea_objÚis_dtype_equalÚis_interval_dtypeÚ is_list_likeÚ    is_sparseÚis_string_dtype)ÚDatetimeTZDtypeÚExtensionDtypeÚ PandasDtypeÚ PeriodDtype)Ú ABCDataFrameÚABCIndexÚABCPandasArrayÚ    ABCSeries)Úis_valid_na_for_dtypeÚisnaÚna_value_for_dtype)Úmissing)Úextract_bool_arrayÚputmask_inplaceÚputmask_without_repeatÚsetitem_datetimelike_compatÚvalidate_putmask)Úquantile_compat)Úcompare_or_regex_searchÚ replace_regexÚshould_use_regex)Úshift)Ú CategoricalÚ DatetimeArrayÚExtensionArrayÚ IntervalArrayÚ PandasArrayÚ PeriodArrayÚTimedeltaArray)Ú SparseDtype)Ú PandasObject)Ú expressions)Úensure_wrapped_if_datetimelikeÚ extract_array)Úcheck_setitem_lengths)ÚIndex)ÚNDArrayBackedExtensionArrayÚobjectr)ÚmethÚreturncs$tˆƒddœ‡fdd„ ƒ}tt|ƒS)zp
    If we have a multi-column block, split and operate block-wise.  Otherwise
    use the original method.
    ú list[Block]©rVcs>|jdks|jddkr(ˆ|f|ž|ŽS|jˆf|ž|ŽSdS)Nér)ÚndimÚshapeÚsplit_and_operate)ÚselfÚargsÚkwargs©rU©úSd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/internals/blocks.pyÚnewfunc…szmaybe_split.<locals>.newfunc)rr    r)rUrcrar`rbÚ maybe_splitsrdc @s¶eZdZUdZded<ded<ded<ded    <d
Zd Zd Zd Zd Z    d Z
e e d d„ƒƒZ e e ddœdd„ƒƒZe eddœdd„ƒƒZe dd„ƒZe e dd„ƒƒZe dd„ƒZeddœdd„ƒZejdddœd d„ƒZe dÆd"dd#œd$d%„ƒZe dÇd&d"dd'œd(d)„ƒZe d*dœd+d,„ƒZe ddœd-d.„ƒZe d/dd0œd1d2„ƒZe d3ddd4œd5d6„ƒZe d7dd8œd9d:„ƒZe d;dd<œd=d>„ƒZe d?dœd@dA„ƒZe d?dœdBdC„ƒZe d;d?dDœdEdF„ƒZ e d?dœdGdH„ƒZ!e d?dœdIdJ„ƒZ"e ddœdKdL„ƒZ#e dÈd?dd?dMœdNdO„ƒZ$e e%dÉdd?dPœdQdR„ƒƒZ&d d dSœddd?dTœdUdV„Z'e dWdœdXdY„ƒZ(e dÊdWdd[ddd\œd]d^„ƒZ)e dËd*dd`œdadb„ƒZ*e dÌdddcœddde„ƒZ+e dÍddfdd?dgœdhdi„ƒZ,e dÎddd?djœdkdl„ƒZ-e dÏdmdndddd?doœdpdq„ƒZ.e dÐdrdddd?dsœdtdu„ƒZ/dvdvdwœdxdy„Z0dzd{„Z1ed|dœd}d~„ƒZ2ddvd€œdd‚„Z3dƒd;d0œd„d…„Z4dÑd;ddd†œd‡dˆ„Z5d!e6j7fd‰dŠd&dd‹œdŒd„Z8d‰drdŽœdd„Z9dÒdddPœd‘d’„Z:dÓdd?dPœd“d”„Z;dÔd–dd?d—œd˜d™„Z<dÕdšddd?d›œdœd„Z=dždŸd!d d!d d!d!d!d d¡œ
d¢dŠd£ddšd*d¤d¥d¤dd?d¦œ d§d¨„Z>dÖddŠd?dªœd«d¬„Z?d×ddŠd7d?d­œd®d¯„Z@e dØd±d²dŠdd³œd´dµ„ƒZAdÙdddd¶œd·d¸„ZBd?dœd¹dº„ZCeddœd»d¼„ƒZDed½dœd¾d¿„ƒZEdÚdÀdvdÁœdÂdÄZFdvdœdÄdńZGd!S)ÛÚBlockz
    Canonical n-dimensional unit of homogeneous dtype contained in a pandas
    data structure
 
    Index-ignorant; let the container take care of that
    únp.ndarray | ExtensionArrayÚvaluesÚintrZrÚrefsrÚ__init__raFTcCs|j|jjfS©N)Ú_can_consolidateÚdtypeÚname©r]rararbÚ_consolidate_key¤szBlock._consolidate_keyÚboolrXcCs"|j}t|tjƒr|jdkS|jS)z7
        Can we store NA values in this Block?
        )ÚbÚiÚu)rmÚ
isinstanceÚnpÚkindÚ _can_hold_na©r]rmrararbrx©s 
zBlock._can_hold_nacCs|jjt t¡kS)z^
        We can be bool if a) we are bool dtype or b) object dtype with bool objects.
        )rgrmrvrqrorararbÚis_bool´sz Block.is_boolcCs
t|jƒSrk)Úexternal_valuesrgrorararbr{¼szBlock.external_valuescCst|jddS)NF)Úcompat)r9rmrorararbÚ
fill_valueÀszBlock.fill_valuecCs |jtkrt||jƒr|j}|Srk)rmÚ
_dtype_objr7r}©r]ÚvaluerararbÚ_standardize_fill_valueÆszBlock._standardize_fill_valuercCs|jSrk©Ú    _mgr_locsrorararbÚmgr_locsÍszBlock.mgr_locsÚNone)Ú new_mgr_locsrVcCs
||_dSrkr‚)r]r†rararbr„ÑsNúBlockValuesRefs | None)rirVcCs4|dkr|j}|jr"t||jd}t|||j|dS)zm
        Create a new block, with type inference propagate any values that are
        not specified
        N©rZ©Ú    placementrZri)rƒÚ is_extensionÚensure_block_shaperZÚ    new_block©r]rgrŠrirararbÚ
make_blockÕs
zBlock.make_blockzBlockPlacement | None)rŠrirVcCs$|dkr|j}t|ƒ|||j|dS)z2Wrap given values in a block of same type as self.Nr‰)rƒÚtyperZrŽrararbÚmake_block_same_classæs
zBlock.make_block_same_classÚstrcCsjt|ƒj}|jdkr0|›dt|ƒ›d|j›}n6d dd„|jDƒ¡}|›d|jj›d|›d|j›}|S)    NrYz: z dtype: z x cSsg|] }t|ƒ‘qSra)r’©Ú.0ÚsrararbÚ
<listcomp>ýsz"Block.__repr__.<locals>.<listcomp>z, z    , dtype: )    rÚ__name__rZÚlenrmÚjoinr[r„Úindexer)r]rnÚresultr[rararbÚ__repr__ös 
 
 zBlock.__repr__cCs
t|jƒSrk)r˜rgrorararbÚ__len__sz Block.__len__zslice | npt.NDArray[np.intp]©ÚslicerrVcCs>|j|}| |¡}t|tƒr$|jnd}t|ƒ|||j|dS)ú
        Perform __getitem__-like, return result as block.
 
        Only supports slices that preserve dimensionality.
        N©ri)rƒÚ_sliceruÚslicerirrZ)r]rŸr†Ú
new_valuesrirararbÚ getitem_blocks
 
zBlock.getitem_blockr£)rŸr†rVcCs8| |¡}|j|jjkr tdƒ‚t|ƒ|||j|jdS)r z Only same dim slicing is allowedr¡)r¢rZrgÚ
ValueErrorrri)r]rŸr†r¤rararbÚgetitem_block_columnss    
zBlock.getitem_block_columnsr)ÚelementrVcCst|dd}t|j|ƒS)z#require the same dtype as ourselvesT©Z extract_numpy)rPr#rg)r]r¨rararbÚ_can_hold_element's zBlock._can_hold_elementr)r€rVcCs*z|j|jkWStk
r$YdSXdS)zÝ
        Should we set self.values[indexer] = value inplace or do we need to cast?
 
        Parameters
        ----------
        value : np.ndarray or ExtensionArray
 
        Returns
        -------
        bool
        FN)rmÚ    TypeErrorrrararbÚ should_store-szBlock.should_storerWcKs||jf|Ž}| |¡S)z[
        apply the function to my values; return a block if we are not
        one
        )rgÚ_split_op_result)r]Úfuncr_r›rararbÚapplyCsz Block.applycCsP|jdkst‚||jƒ}|jjdkr4t |gg¡}n | dd¡}| |¡}|gS)NérYéÿÿÿÿ)rZÚAssertionErrorrgrvÚarrayÚreshaper)r]r®r›Ú
res_valuesÚnbrararbÚreduceMs
 
z Block.reduce)r›rVcCs||jdkrlt|jtƒrlg}t|jƒD]B\}}t|ƒsF|||d…}n||}|j||d}| |¡q$|S| |¡}|gS)NrY)rgrŠ)    rZrurmr0Ú    enumeraterƒr)rÚappend)r]r›ÚnbsrsÚlocÚvalsÚblockr¶rararbr­^s 
zBlock._split_op_resultcCsf|jdkst‚g}t|jƒD]D\}}|jt||dƒ}t|ƒ}t|ƒ||d|jd}|     |¡q|S)zD
        Split a block into a list of single-column blocks.
        r°rYr‰)
rZr²r¸rƒrgr£rrrir¹)r]Ú
new_blocksrsZref_locr¼Úbpr¶rararbÚ_splitss z Block._splitcOsL|jdkr|jddkst‚g}| ¡D]}||f|ž|Ž}| |¡q(|S)zÙ
        Split the block and apply func column-by-column.
 
        Parameters
        ----------
        func : Block method
        *args
        **kwargs
 
        Returns
        -------
        List[Block]
        r°rrY)rZr[r²rÀÚextend)r]r®r^r_Ú
res_blocksr¶Úrbsrararbr\ƒs   zBlock.split_and_operatecCst|j|ƒ}|j|ddS)zé
        coerce the current block to a dtype compat for other
        we will return a block, possibly object, and not raise
 
        we can also safely try to coerce to the same dtype
        and will receive the same block
        F©Úcopy)r$rgÚastype)r]ÚotherZ    new_dtyperararbÚcoerce_to_target_dtypes     zBlock.coerce_to_target_dtype)ÚblocksÚ    using_cowrVcsPˆdkr |S|jtkr,t‡fdd„|DƒƒSˆdkr8|St‡‡fdd„|DƒƒS)NFcsg|]}|jˆˆ d‘qS))rÊrÅ©Úconvert©r”Úblk©rÊrarbr–¹sz)Block._maybe_downcast.<locals>.<listcomp>csg|]}| ˆˆ¡‘qSra)Ú _downcast_2d©r”rr©ÚdowncastrÊrarbr–¿s)rmr~Ú extend_blocks)r]rÉrÓrÊrarÒrbÚ_maybe_downcastªs
ÿzBlock._maybe_downcast©rÊrVcCs6t|j|d}|r"||jkr"|jnd}|j||dgS)zs
        downcast specialized to 2D case post-validation.
 
        Refactored to allow use of maybe_split.
        ©rmNr¡)r%rgrir)r]rmrÊr¤rirararbrÐÁszBlock._downcast_2d©rÅrÊ©rÅrÊrVcCs*|s|r|jddgS|r$| ¡gS|gS)z®
        attempt to coerce any object types to better types return a copy
        of the block (if copy = True) by definition we are not an ObjectBlock
        here!
        F©ÚdeeprÄ)r]rÅrÊrararbrÌÍs z Block.convertrcCs|jjSrk)rgrmrorararbrmßsz Block.dtypeÚraiser)rmrÅÚerrorsrÊrVc     CsŒ|j}t||||d}t|ƒ}d}|r:t|j|jƒr:|j}|j||d}|j|jkrˆtd|›d|jj    ›d|j›d|jj    ›d|j›d ƒ‚|S)    a
        Coerce to the new dtype.
 
        Parameters
        ----------
        dtype : np.dtype or ExtensionDtype
        copy : bool, default False
            copy if indicated
        errors : str, {'raise', 'ignore'}, default 'raise'
            - ``raise`` : allow exceptions to be raised
            - ``ignore`` : suppress exceptions. On error return original object
        using_cow: bool, default False
            Signaling if copy on write copy logic is used.
 
        Returns
        -------
        Block
        )rÅrÝNr¡zcannot set astype for copy = [z ] for dtype (z [z]) to different shape (z]))
rgr Úmaybe_coerce_valuesr!rmrirr[r«rn)    r]rmrÅrÝrÊrgr¤riZnewbrararbrÆãs .ÿz Block.astypeÚnan)Úna_reprVcKs"t|jf||dœ|—Ž}| |¡S)ú"convert to our native types format)ràÚquoting)Úto_native_typesrgr)r]ràrâr_r›rararbrãszBlock.to_native_types)rÛrVcCs6|j}|r| ¡}d}n|j}t|ƒ||j|j|dS)zcopy constructorNr‰)rgrÅrirrƒrZ)r]rÛrgrirararbrÅs z
Block.copyznpt.NDArray[np.bool_] | None)ÚinplaceÚmaskrÊrVc Cs|j}t|tƒrp|r,|j ¡s"|s,| ¡}n"|r>|jdd}n|rF|n| ¡}tt|jƒ}|j||dd|gS| |¡s |rŒ|jddgS|r–|gS| ¡gS|dkr´t     
||¡}|  ¡sæ|rÎ|jddgS|rØ|gS| ¡gSn,| |¡rh|r|r|j|j ¡d}n| ¡}n|r&|n| ¡}t |j||ƒ|j rN|dks^|jd|d}n|g}|S|jdks„|jddkrÆ|dks˜|tkrª| t t¡¡}n
| |¡}|j||d|d    Sg}t| ¡ƒD]6\}    }
| t|ƒj|
||d||    |    d…|d
¡qÖ|SdS) z…
        replace the to_replace value with value, possible to create new
        blocks here this is just a call to putmask.
        FrÚT©Ú
to_replacer€räNrØrYr)rçr€rärå©rçr€rärårÊ)rgrurEriÚ has_referencerÅr    Ú_replacerªr:Ú mask_missingÚanyr<Ú    is_objectrÌrZr[rrÆrvrmrTrÈÚreplacer¸rÀrÁr) r]rçr€rärårÊrgrÎrÉrsr¶rararbrî%sl
 
 
 
 
ü    úÿ
z Block.replace)rärÊrVc
Cs¬| |¡s0|r|jddgS|r&|gS| ¡gSt |¡}|rj|rZ|j ¡sZ|j}|j}q‚d}|j ¡}nd}|rx|jn|j ¡}t||||ƒ|j||d}    |    j    d|dS)aA
        Replace elements by the given value.
 
        Parameters
        ----------
        to_replace : object or pattern
            Scalar to replace or regular expression to match.
        value : object
            Replacement object.
        inplace : bool, default False
            Perform inplace modification.
        mask : array-like of bool, optional
            True indicate corresponding element is ignored.
        using_cow: bool, default False
            Specifying if copy on write is enabled.
 
        Returns
        -------
        List[Block]
        FrÚNr¡rØ)
rªrÅÚreÚcompilerirérgrBrrÌ)
r]rçr€rärårÊÚrxrir¤r½rararbÚ_replace_regex‰s 
 
 zBlock._replace_regexz Iterable[Any]z Sequence[Any])Úsrc_listÚ    dest_listräÚregexrÊrVc
süˆj‰tˆtƒr^ˆr,|r,ˆjˆj ¡d}n|r4ˆnˆ ¡}tt|jƒ‰ˆj||dd|gS‡fdd„t||ƒDƒ}t    |ƒs¤ˆrˆjddgS|ršˆgSˆ ¡gSt    |ƒd}t
ˆj ƒrÜt ˆƒ‰‡‡‡fdd    „|Dƒ}    n‡fd
d    „|Dƒ}    |rút |    ƒ}    ˆr|rˆg}
n|rˆnˆ ¡g}
tt||    ƒƒD]Æ\} \\} } }| |k}g}t|
ƒD]š\}}t    |
ƒdkrp|}n$|}t|tƒr„t‚|||d…}|j| | ||ˆˆd }|râ|jrâtd d    „|Dƒƒsât‡fd d„|Dƒƒ}| |¡qT|}
q0|
S)z:
        See BlockManager.replace_list docstring.
        rÚTræcs"g|]\}}ˆ |¡r||f‘qSra)rª)r”ÚxÚyrorarbr–Ùs
z&Block.replace_list.<locals>.<listcomp>FrYc
3s,|]$}ttttˆ|dˆˆdƒƒVqdS)r)rõråN)r;r    rrAr“)Úna_maskrõrgrarbÚ    <genexpr>ès    øÿþÿz%Block.replace_list.<locals>.<genexpr>c3s|]}t ˆ|d¡VqdS)rN)r:rër“©rgrarbrùõs)rçr€rårärõrÊcss|]}|dkVqdSrkra©r”rörararbrùscs g|]}|jdoˆ ˆd‘qS)TrØrËrÑrÏrarbr–sÿ)rgrurErÅrirér    rêÚzipr˜r.rmr8Úlistr¸rqr²Ú_replace_coerceríÚallrÔrÁ)r]rórôrärõrÊrÎÚpairsZsrc_lenÚmasksÚrbrsÚsrcÚdestrårÌZnew_rbZblk_numÚmZmibr›ra)rørõr]rÊrgrbÚ replace_list¿sj 
 
ÿ 
 
    ÷  ú"
þÿzBlock.replace_listúnpt.NDArray[np.bool_])rårärõrÊrVc    CsÒt||ƒr|j||||dS|dkrº| ¡r”|j ¡}|jt t¡d|d}||ksX|rf|sf|     ¡}n|r€|r€|j ¡r€|     ¡}t
|j ||ƒ|gS|r¦|j    ddgS|r°|gS|     ¡gS|j |||||dSdS)ai
        Replace value corresponding to the given boolean array with another
        value.
 
        Parameters
        ----------
        to_replace : object or pattern
            Scalar to replace or regular expression to match.
        value : object
            Replacement object.
        mask : np.ndarray[bool]
            True indicate corresponding element is ignored.
        inplace : bool, default True
            Perform inplace modification.
        regex : bool, default False
            If true, perform regular expression substitution.
 
        Returns
        -------
        List[Block]
        )räråNFrØrÚrè) rCròrìrirérÆrvrmrTrÅr<rgrî)    r]rçr€rårärõrÊZhas_refr¶rararbrþ(s6
ü
 
ûzBlock._replace_coerceú
np.ndarray)ÚargrVcCs|S©zA
        For compatibility with 1D-only ExtensionArrays.
        ra©r]r    rararbÚ_maybe_squeeze_argjszBlock._maybe_squeeze_argcCs|Sr
ra)r]ršrararbÚ_unwrap_setitem_indexerpszBlock._unwrap_setitem_indexerrcCs|jjSrk)rgr[rorararbr[xsz Block.shapeú)int | tuple[int, int] | tuple[slice, int])rsrVcCs
|j|Srkrú)r]rsrararbÚiget|sz
Block.igetú4slice | npt.NDArray[np.bool_] | npt.NDArray[np.intp]cCs
|j|S)zreturn a slice of my valuesrú)r]rŸrararbr¢…sz Block._slice©rgrÅrVcCs|r|j ¡|_||j|<dS)a¨
        Modify block values in-place with new item value.
 
        If copy=True, first copy the underlying values in place before modifying
        (for Copy-on-Write).
 
        Notes
        -----
        `set_inplace` never creates a new array or new Block, whereas `setitem`
        _may_ create a new array and always creates a new Block.
 
        Caller is responsible for checking values.dtype == self.dtype.
        N©rgrÅ©r]ÚlocsrgrÅrararbÚ set_inplaceŒs zBlock.set_inplaceúnpt.NDArray[np.intp]r)ršÚaxisr†rVcCs |j}|tjkr|j}d}nd}tj|||||d}t|tƒrT|jdkrT|dkrTt    ‚|dkrh|dkrht    ‚|dkrv|j
}t |j |j ƒs|  ||¡S| ||¡SdS)zN
        Take values according to indexer and return them as a block.
        FT)rÚ
allow_fillr}rYNr)rgr Ú
no_defaultr}ÚalgosÚtake_ndruÚExtensionBlockrZr²rƒr*rmrr‘)r]ršrr†r}rgrr¤rararbržs(
 
ÿ
 z Block.take_nd©Ú new_placementÚ needs_maskingc    CsP|j|jj|d\}}| d¡}|j|}||}t|ƒ}t||dg}||fS)a 
        Return a list of unstacked blocks of self
 
        Parameters
        ----------
        unstacker : reshape._Unstacker
        fill_value : int
            Only used in ExtensionBlock._unstack
        new_placement : np.ndarray[np.intp]
        allow_fill : bool
        needs_masking : np.ndarray[bool]
 
        Returns
        -------
        blocks : list of Block
            New blocks of unstacked values.
        mask : array-like of bool
            The mask of columns of `blocks` we should keep.
        ©r}r©rŠ)Zget_new_valuesrgÚTrìrÚ new_block_2d)    r]Ú    unstackerr}rrr¤rår¿rÉrararbÚ_unstackÅsÿ
 
 
zBlock._unstackcCsä| |¡}ttj|jƒ}|jdkr(|j}t|||ƒt|dd}zt    |j
|ƒ}Wn*t k
rz|  |¡}|  ||¡YSX|j
tkr¨||}t |¡r¨t|t|ƒ|ƒ}|rØ|j ¡rØ| ¡}| |jdkrÒ|jn|¡}|||<|S)a
        Attempt self.values[indexer] = value, possibly creating a new array.
 
        Parameters
        ----------
        indexer : tuple, list-like, array-like, slice, int
            The subset of self.values to set
        value : object
            The value being set
        using_cow: bool, default False
            Signaling if CoW is used.
 
        Returns
        -------
        Block
 
        Notes
        -----
        `indexer` is a direct slice/positional indexer. `value` must
        be a compatible shape.
        r°Tr©)rr    rvÚndarrayrgrZr"rQrPr&rmr"rÈÚsetitemr~r r,r>r˜rirérÅr‘)r]ršr€rÊrgÚcastedr¶Úvirararbr'ós,
 
 
 
 
ÿz Block.setitemc    CsÚ|}ttj|jƒ}t|j|ƒ\}}t|ttt    fƒr6t
‚|t j krF|j }| |¡}t|dd}|rx|rr|jddgS|gSzVt|j|ƒ}|r¦|j ¡r¦| ¡}| |¡}t|j||ƒ|rÈ|jddgWS|gWStk
rÔ|jdksü|jddkrHt|ƒs| |¡ ||¡YS| ¡d}|j||||d}    |    gYSnˆt|tjƒ}
g} | ¡} t | ƒD]^\} }    |}|
r’|dd…| | d…f}|dd…| | d…f}|    j|||d}|  !|¡qh| YSYnXdS)    a}
        putmask the data to the block; it is possible that we may create a
        new dtype of block
 
        Return the resulting block(s).
 
        Parameters
        ----------
        mask : np.ndarray[bool], SparseArray[bool], or BooleanArray
        new : a ndarray/object
        using_cow: bool, default False
 
        Returns
        -------
        List[Block]
        Tr©FrÚrYrrÏN)"r    rvr&rgr?r"rur4r6r3r²r rr}rrPrÅr&rmrirér‘r=r"rZr[r,rÈÚputmaskZnonzeror'rÀr¸rÁ)r]råÚnewrÊÚ    orig_maskrgÚnoopr(ršr¶Úis_arrayrÂrºrsÚnÚsubmaskrÃrararbr*,sN
 
 
 
   z Block.putmaskÚinferú
str | bool©Ú    _downcastrÊrVc
Csp|j|jkst‚t|tttfƒr$t‚|jdk}t|ƒ}ttj    |j
ƒ}|}|rR|j }t ||ƒ\}}    |    r‚|rx|j ddgS|  ¡gS|tjkr’|j}| |¡}zt|j|ƒ}
Wnòtttfk
rž|jdksÞ|jddkr | |¡} | j|||d} |j| ||dYSt|tj    tfƒ} g}| ¡}t|ƒD]`\}}|}| rZ|dd…||d…f}|dd…||d…f}|j||||d    }| |¡q0|YSYnºX|
}t||  ¡|ƒ}||k    r
t!|ƒròt"|ƒt"|ƒkròt |||¡t#d
ƒ‚|  ¡}t $|||¡nNt!|ƒrHt|tj    ƒsHt"|ƒ|jd krHt %|¡ &|j¡}t' |||¡}|rd|j }| (|¡gS) a‡
        evaluate the block; return result block(s) from the result
 
        Parameters
        ----------
        other : a ndarray/object
        cond : np.ndarray[bool], SparseArray[bool], or BooleanArray
        _downcast : str or None, default "infer"
            Private because we only specify it when calling from fillna.
 
        Returns
        -------
        List[Block]
        r°FrÚrYrrÏrÒN)r4rÊz‡This should not be reached; call to np.where above is expected to raise ValueError. Please report a bug at github.com/pandas-dev/pandasr±))rZr²rur4r6r3r;r    rvr&rgr"r?rÅr rr}rr&rmr¦r«r"r[rÈÚwhererÕrGrÀr¸rÁr>Úsumr,r˜ÚNotImplementedErrorr*r³r´rNr)r]rÇÚcondr4rÊZ    transposergÚ
orig_otherÚicondr-r(r½rÉr.rÂrºrsr¶Zothr0rÃZaltr›rararbr5us€
 
 
 
 
ÿ
ÿ
ÿÿ
þýz Block.whereú
int | None©ÚlimiträrÊrVc
sØt|dƒ}|jsd}nt|jƒ}t|j|ƒ\}}|rt|rPˆrJ|jddgS|gS|jˆ d}|j|gˆˆd}    |    S|dk    r”d|| |jd¡|k<|r¬|j    |j
|ˆd}    n|j ||j
dd    }    t ‡‡fd
d „|    DƒƒS) zs
        fillna on the block with the value. If we fail, then convert to
        ObjectBlock and try again
        räTFrÚrÒNrYrÏ)r4csg|]}|j|gˆˆd‘qS)rÒ)rÕrÍrÒrarbr–sÿz Block.fillna.<locals>.<listcomp>) rrxr8rgr?rÅrÕZcumsumrZr*r"r5rÔ)
r]r€r=rärÓrÊr-rår¶rºrarÒrbÚfillnaìs.
 
 þÿz Block.fillnaÚpadrZforward)
ÚmethodrÚindexrär=Úlimit_directionÚ
limit_arear}rÓrÊrú Index | Nonez
str | Nonez
Any | None) r@rrArär=rBrCr}rÓrÊrVc
 Ksvt|dƒ}|js6|
r"|jddgS|r,|gS| ¡gSzt |¡} Wntk
r\d} YnX| dkr˜|jjdkr˜|
r„|jddgS|rŽ|gS| ¡gS|jrê|j    dkrê|j
ddkrê|dkrê|j t |ƒj f|||||||||    dœ    | —ŽSd} |r |
r|j ¡r|j ¡}n |j}|j} n
|j ¡}ttj|ƒ}tj|f|||||||d    œ| —Ž|j|| d
}| |g|    |
¡S) NräFrÚÚfr°rrY)    r@rrArär=rBrCr}rÓ)r@rrAr=rBrCr}r¡)rrxrÅr:Zclean_fill_methodr¦rmrwrírZr[r\rÚ interpolaterirérgr    rvr&Úinterpolate_array_2dr‘rÕ)r]r@rrArär=rBrCr}rÓrÊr_rriÚdatar¶rararbrF$sh
 
&ÿö õ 
 ÿø    ÷ zBlock.interpolaterY©r/rrVcCs tj|j||d}|j|dgS)z'return block for the diff of the values©rrú©rÚdiffrgr©r]r/rr¤rararbrLqsz
Block.diff©Úperiodsrr}rVcCs’t |¡s|jtkrtdƒ‚| |¡}zt|j|ƒ}Wn.tk
rd| |¡}|j    |||dYSXt
t j |j ƒ}t    ||||ƒ}| |¡gSdS)z+shift the block by periods, possibly upcastzfill_value must be a scalar)rr}N)r Z    is_scalarrmr~r¦rr&r"rÈrDr    rvr&rgr)r]rOrr}r(r¶rgr¤rararbrDws 
ÿ
z Block.shiftÚlinearrRr)ÚqsÚ interpolationrrVcCsV|jdkst‚|dkst‚t|ƒs&t‚t|jt |j¡|ƒ}t|dd}t    ||j
dS)aX
        compute the quantiles of the
 
        Parameters
        ----------
        qs : Index
            The quantiles to be computed in float64.
        interpolation : str, default 'linear'
            Type of interpolation.
        axis : int, default 0
            Axis to compute.
 
        Returns
        -------
        Block
        r°rYrˆr!) rZr²r,r@rgrvÚasarrayÚ_valuesrŒr#rƒ)r]rQrRrr›rararbÚquantile™s    zBlock.quantile)ÚdecimalsrÊrVcCsT|jr |jr|j| dSd}|j |¡}||jkrF|j}|sF| ¡}|j||dS)aÉ
        Rounds the values.
        If the block is not of an integer or float dtype, nothing happens.
        This is consistent with DataFrame.round behavivor.
        (Note: Series.round would raise)
 
        Parameters
        ----------
        decimals: int,
            Number of decimal places to round to.
            Caller is responsible for validating this
        using_cow: bool,
            Whether Copy on Write is enabled right now
        rÚNr¡)Ú
is_numericrzrÅrgÚroundrir‘)r]rVrÊrirgrararbrX»s  
z Block.roundc Cst|ƒs|g}|jdkrTttj|jƒ}t ||¡}|j |¡}t|ƒ|||jdgSt     |¡|jj
dkrnt ‚t  ||jj
dgg¡}|jj }g}d}|j ¡r¦|jnd}|D]d}||dkrÀnN|j|d|…dd…f}||d|…}    t|ƒ|t|    ƒ|j|d}
| |
¡|}q®|S)aDeletes the locs from the block.
 
        We split the block to avoid copying the underlying data. We create new
        blocks for every connected segment of the initial block that is not deleted.
        The new blocks point to the initial array.
        rY©rŠrZrr±Nr‰)r,rZr    rvr&rgÚdeleterƒrÚmaxr[Ú
IndexErrorZ concatenateZas_arrayrirérr¹) r]r»rgr„Z mgr_locs_arrr¾Z previous_locriÚidxrr¶rararbrZßs8
   ÿ
z Block.deletecCs t|ƒ‚dS©z(return a boolean if I am possibly a viewNrrorararbÚis_viewsz Block.is_viewrGcCs t|ƒ‚dS)zP
        The array that Series.array returns. Always an ExtensionArray.
        NrrorararbÚ array_valuesszBlock.array_valuesúDtypeObj | None©rmrVcCs t|ƒ‚dS)z‹
        return an internal format, currently just the ndarray
        this is often overridden to handle to_dense like operations
        NrryrararbÚ
get_valuesszBlock.get_valuescCs t|ƒ‚dSrkrrorararbÚvalues_for_json"szBlock.values_for_json)NN)NN)NF)F)FrÜF)rßN)T)FNF)FNF)FFF)TFF)F)F)F)r1F)NFNF)rY)rN)rPr)F)N)Hr—Ú
__module__Ú __qualname__Ú__doc__Ú__annotations__Ú    __slots__rWrír‹rlÚ_validate_ndimr
rrprxÚpropertyrzr{r}rr„Úsetterrr‘rœrr¥r§rªr¬r¯r·r­rÀr\rÈrÕrdrÐrÌrmrÆrãrÅrîròrrþr r r[rr¢rr rrr%r'r*r5r>rFrLrDrUrXrZr_r`rcrdrarararbres0
     
 
ÿü      ÿ üû,ùcú5úhùA    û'.9Jÿzú;ô&Mÿ"ü!$0recs¾eZdZUdZded<d(ddœdd„Zd)d
dd d œd d„Zd*dd dœdd„Zd dœ‡fdd„ Ze    ddœdd„ƒZ
d+dddœdd„Z ddœdd„Z dd ddddd!œd"d#dd$dd%œd&d'„Z ‡ZS),Ú EABackedBlockz>
    Mixin for Block subclasses backed by ExtensionArray.
    rGrgFrqrÏc    
CsÔ|}|}| |¡}| |¡}|j}|jdkr2|j}t|||ƒz |||<Wn€ttfk
rÊ}z^t|ƒt    |j
ƒr|  |¡}|  ||¡WY¢0St |tƒr¸|  |¡}|  ||¡WY¢S‚W5d}~XYnX|SdS)a„
        Attempt self.values[indexer] = value, possibly creating a new array.
 
        This differs from Block.setitem by not allowing setitem to change
        the dtype of the Block.
 
        Parameters
        ----------
        indexer : tuple, list-like, array-like, slice, int
            The subset of self.values to set
        value : object
            The value being set
        using_cow: bool, default False
            Signaling if CoW is used.
 
        Returns
        -------
        Block
 
        Notes
        -----
        `indexer` is a direct slice/positional indexer. `value` must
        be a compatible shape.
        r°N)r r rgrZr"rQr¦r«Ú_catch_deprecated_value_errorr+rmrÈr'ruÚNDArrayBackedExtensionBlock)    r]ršr€rÊZ orig_indexerZ
orig_valuergÚerrr¶rararbr'-s(
 
 
 
 
 
 
zEABackedBlock.setitemr1r2rWr3c
Csì|jj}t|ƒ}|}|}| |¡}| |¡}|tjkr<|j}t||ƒ\}}    |    rl|rb|jddgS| ¡gSz|     ||¡j}
WnZt
t fk
rÚ} z4t | ƒ|j dks¼|jddkr:t|jƒrø| |¡} | j|||d} |j| ||dWY¢ØSt|tƒr6| |¡} | j|||d} |j| ||dWY¢šS‚nt|tjtfƒ}g}| ¡} t| ƒD]^\}}|}|rˆ|dd…||d…f}|dd…||d…f}|j|||d}| |¡q^|WY¢SW5d} ~ XYnX| |
¡}|gS)NFrÚrYrrÏrÒ)rgr"r;r r rr}r?rÅZ_wherer¦r«rnrZr[r+rmrÈr5rÕrurorvr&rGrÀr¸rÁr‘)r]rÇr8r4rÊZarrr9Z    orig_condr:r-rµrprÎrºr.rÂrsr¶r/r0rÃrararbr5gs`
 
 
 
 
 
ÿ 
ÿ
zEABackedBlock.whererÖc
Csät|ƒ}|tjkr|j}|j}|jdkr.|j}|}|}| |¡}| |¡}| ¡sj|rd|j    ddgS|gS|rš|j
  ¡rš|     ¡}|  |jdkr”|jn|¡}z|  ||¡Wn0ttfk
rÜ}z
t|ƒ|jdksè|jddkr@t|jƒr| |¡}| ||¡WY¢ÀSt|tƒr<| |¡}| ||¡WY¢–S‚nŒt|tjtfƒ}    g}
| ¡} t| ƒD]Z\} } |}|    rŽ|dd…| | d…f}|dd…| | d…f}|  ||¡}|
 |¡qd|
WY¢SW5d}~XYnX|gS)z+
        See Block.putmask.__doc__
        r°FrÚrYrN)r;r rr}rgrZr"r rìrÅrirér‘Z_putmaskr«r¦rnr[r+rmrÈr*rurorvr&rGrÀr¸rÁ)r]rår+rÊrgZorig_newr,rprÎr.rÂrºrsr¶r/r0rÃrararbr*­sV
 
 
 
ÿ 
 
 zEABackedBlock.putmaskrXcsT|jdkr8|j |¡}|j |¡}t|ƒ|||jdgS|jjdkrHgStƒ |¡S)NrYrY)rZrgrZrƒrÚsuper)r]r»rgr„©Ú    __class__rarbrZòs
   zEABackedBlock.deletecCs|jSrkrúrorararbr`ýszEABackedBlock.array_valuesNrarrbcCs*|j}|tkr| t¡}t |¡ |j¡S)zS
        return object dtype as boxed values, such as Timestamps/Timedelta
        )rgr~rÆrTrvrSr´r[)r]rmrgrararbrcs
zEABackedBlock.get_valuescCs t |j¡Srk)rvrSrgrorararbrd szEABackedBlock.values_for_jsonr?r)r@rrär=r}rÊrrhr;)r@rrär=rÊc
KsH|j}|jdkr.|dkr.|jj|||dj}    n|j|||d}    | |    ¡S)Nr°r©r€r@r=)rgrZr"r>r‘)
r]r@rrär=r}rÊr_rgr¤rararbrFs
zEABackedBlock.interpolate)F)r1F)F)N)r—rerfrgrhr'r5r*rZrr`rcrdrFÚ __classcell__rararrrbrm&s&
;ÿFE 
ørmcseZdZUdZdZdZdZded<d9dddd    d
œ‡fd d „ Ze    d dœdd„ƒZ
ddœdd„Z d:ddddœdd„Z dd„Z dd„Zeddœdd„ƒZe    d d!„ƒZd"dd#œd$d%„Zed&dd#œd'd(„ƒZd;d*d+d    d,œd-d.„Zd<d*d+d0d    d1œd2d3„Zd4d5d6œd7d8„Z‡ZS)=rzñ
    Block for holding extension types.
 
    Notes
    -----
    This holds all 3rd-party extension array types. It's also the immediate
    parent class for our internal extension types' blocks.
 
    ExtensionArrays are limited to 1-D.
    FTrGrgNr;rqrWr<c    svt|jƒr tƒj|||||dS|r@|jr@|jjs@|j}|j}nd}|jj|d|d}|j||d}|j    |g||dS)N)r€r=rärÓrÊrtr¡rÏ)
r+rmrqr>rxrgZ_hasnarir‘rÕ)    r]r€r=rärÓrÊrir¤r¶rrrarbr>4s
ûzExtensionBlock.fillnarrXcCs*|jdkrt|jƒfSt|jƒt|jƒfS)NrY)rZr˜rgrƒrorararbr[Ns
 zExtensionBlock.shaper)rscCsŽt|tƒrn|\}}t |¡s2|dkr2t|›dƒ‚t|tƒrd|dkrR|t|jƒ7}|j||d…S|j|S|dkr„t|›dƒ‚|jSdS)Nrz only contains one itemrY)ruÚtupleÚcomÚ is_null_slicer\r£r˜rg)r]rsÚcolr»rararbrUs    
 
 
zExtensionBlock.igetrr…rcCs"|r|j ¡|_||jdd…<dSrkrrrararbrqs zExtensionBlock.set_inplacecCsvt|tjtfƒrF|j|jjdkrF|jddks4t‚|dd…df}n,t|tƒrr|jddksbt‚|j    dddj
}|S)z@
        If necessary, squeeze a (N, 1) ndarray to (N,)
        rYNrrJ) rurvr&rGrZrgr[r²r3Z_ixsrTr rararbr xsÿþ
z!ExtensionBlock._maybe_squeeze_argcCsÜt|tƒrØt|ƒdkrØtdd„|Dƒƒrn|\}}|jdkrT|dk ¡rT|jddks\tdƒ‚|dd…df}njt |d¡r’|ddkr’|d}nFt     
|d¡rª|d}n.t |dƒrÐ|dddkrÐ|d}ntdƒ‚|S)zw
        Adapt a 2D-indexer to our 1D values.
 
        This is intended for 'setitem', not 'iget' or '_slice'.
        r°css$|]}t|tjƒo|jdkVqdS)r°N)rurvr&rZrûrararbrù›sz9ExtensionBlock._unwrap_setitem_indexer.<locals>.<genexpr>rYrzPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/N) rurvr˜rÿÚsizer[r7r Ú
is_integerrwrxr,)r]ršÚfirstÚsecondrararbr Žs.ÿ
ÿ ÿÿ
 
 
ÿz&ExtensionBlock._unwrap_setitem_indexercCsdS)z,Extension arrays are never treated as views.Frarorararbr_¸szExtensionBlock.is_viewcCs
|jjjSrk)rgrmZ _is_numericrorararbrW½szExtensionBlock.is_numericrržcCsN|jdkrDt|tƒstd|ƒ‚tdƒ|}t|ƒs<td|ƒ‚tdƒ}|j|S)zþ
        Return a slice of my values.
 
        Parameters
        ----------
        slicer : slice, ndarray[int], or ndarray[bool]
            Valid (non-reducing) indexer for self.values.
 
        Returns
        -------
        ExtensionArray
        r°z+invalid slicing for a 1-ndim ExtensionArrayrYN)rZrur£r²Úranger˜rg)r]rŸZnew_locsrararbr¢Ás
 
ÿ ÿzExtensionBlock._slicer£cCs$|j|}t|ƒ||j|j|jdS)zN
        Perform __getitem__-like specialized to slicing along index.
        )rZri)rgrrƒrZri)r]rŸr¤rararbÚgetitem_block_indexés
z"ExtensionBlock.getitem_block_indexrYrhrrIcCs tj|j|dd}|j|dgS)NrrJrúrKrMrararbrLószExtensionBlock.diffrrrNcCs|jj||d}| |¡gS)z‹
        Shift the block by `periods`.
 
        Dispatches to underlying ExtensionArray and re-boxes in an
        ExtensionBlock.
        )rOr}©rgrDr‘)r]rOrr}r¤rararbrDùs    zExtensionBlock.shiftrrrcsD|j\}}|j|}||}‡‡‡fdd„tt||ƒƒDƒ}||fS)Ncs<g|]4\}\}}tˆƒˆjj|ˆ|ˆdt|ƒdd‘qS))rr}r°rˆ)rrgZtaker)r”rsÚindicesZplace©r}rr]rarbr–!s    
ùÿûz+ExtensionBlock._unstack.<locals>.<listcomp>)Z arange_resultr"r¸rü)r]r$r}rrr¤rårÉrar‚rbr%s
 
     ÷ zExtensionBlock._unstack)NFNF)F)rY)rN)r—rerfrgrlrjr‹rhr>rr[rrr r rkr_rWr¢r
rrLrDr%rurararrrbr"s8
 ú*
(    ÿ rc@sZeZdZUded<eddœdd„ƒZeddœdd    „ƒZdd dd œd d„Zddœdd„Zd
S)Ú
NumpyBlockrrgrqrXcCs |jjdk    Sr^)rgÚbaserorararbr_2szNumpyBlock.is_viewrGcCs
t|jƒSrk)rIrgrorararbr`7szNumpyBlock.array_valuesNrarbcCs|tkr|j t¡S|jSrk)r~rgrÆryrararbrc;s zNumpyBlock.get_valuescCs|jSrkrúrorararbrd@szNumpyBlock.values_for_json)N)    r—rerfrhrkr_r`rcrdrarararbrƒ/s
rƒc@seZdZdZdZdS)Ú NumericBlockraTN)r—rerfrirWrarararbr…Dsr…c@sheZdZUdZded<eddœdd„ƒZeddœdd    „ƒZdd d d dœdd„Z    dd d dd dœdd„Z
dS)roz8
    Block backed by an NDArrayBackedExtensionArray
    rSrgrqrXcCst|jtjƒ Srk)rurmrvrorararbr‹Qsz(NDArrayBackedExtensionBlock.is_extensioncCs|jjjdk    Sr^)rgÚ_ndarrayr„rorararbr_Vsz#NDArrayBackedExtensionBlock.is_viewrrhrrWrIcCs$|j}||j||d}| |¡gS)a‚
        1st discrete difference.
 
        Parameters
        ----------
        n : int
            Number of periods to diff.
        axis : int, default 0
            Axis to diff upon.
 
        Returns
        -------
        A list with a new Block.
 
        Notes
        -----
        The arguments here are mimicking shift so they are called correctly
        by apply.
        rJ)rgrDr)r]r/rrgr¤rararbrL\sz NDArrayBackedExtensionBlock.diffNrrNcCs"|j}|j|||d}| |¡gS)N)r}rr€)r]rOrr}rgr¤rararbrDvsz!NDArrayBackedExtensionBlock.shift)r)rN) r—rerfrgrhrr‹rkr_rLrDrarararbroIs
ÿroÚ    Exceptionr…)rprVcCs&t|tƒr"t|tƒrn dt|ƒkr"dS)z‰
    We catch ValueError for now, but only a specific one raised by DatetimeArray
    which will no longer be raised in version.2.0.
    z'value.closed' isN)rur¦rr’)rprararbrn~s
 
 
 rnc@sZeZdZUdZdZdZded<ddœdd    „Zd
d d dd d dd œdddddddœdd„Zd S)ÚDatetimeLikeBlockz*Block for datetime64[ns], timedelta64[ns].raFzDatetimeArray | TimedeltaArrayrgrrXcCs|jjSrk)rgr†rorararbrd’sz!DatetimeLikeBlock.values_for_jsonr?Nr)r@rArrär=r}rÊrrDrhrqr;)r@rArrär=rÊc KsÊ|j}    |dkrˆd}
|r>|r2|j ¡s2|    j} |j}
qR|    j ¡} n|rH|    jn|    j ¡} tj| ||||dt|    ƒj| |    j    d} |j
| |
dS|    j dkr°|dkr°|    j j |||dj } n|    j |||d} | 
| ¡S)NrP)r@r=rArr×r¡r°rrt)rgrirér†rÅr:rGrZ _simple_newrmr‘rZr"r>) r]r@rArrär=r}rÊr_rgriZdata_outr¤rararbrF•s,  ÿzDatetimeLikeBlock.interpolate)    r—rerfrgrirWrhrdrFrarararbrˆ‹s
÷rˆc@s0eZdZUdZded<dZdZdZdZe    j
Z
dS)ÚDatetimeTZBlockz0implement a datetime64 block with a tz attributerFrgraTFN) r—rerfrgrhrir‹rjrlrordrarararbr‰¿s
r‰c@s2eZdZdZdZedddœddddœdd    „ƒZd
S) Ú ObjectBlockraTFrØrqrWrÙcCs–|jtkr"|r|jddgS|gS|j}|jdkr:|d}tj|ddddd}d}|rh||krh| ¡}n||krz|rz|j}t||jƒ}|j    ||dgS)    zŸ
        attempt to cast any object types to better types return a copy of
        the block (if copy = True) by definition we ARE an ObjectBlock!!!!!
        FrÚr°rT)Zconvert_datetimeZconvert_timedeltaZconvert_periodZconvert_intervalNr¡)
rmr~rÅrgrZr Zmaybe_convert_objectsrirŒr)r]rÅrÊrgrµrirararbrÌÒs*
 
û 
  zObjectBlock.convertN)r—rerfrirírdrÌrarararbrŠÎs ürŠr)rgrVcCsVt|tjƒr0t|ƒ}t|jjtƒr0tj|t    d}t|t
t fƒrR|j dk    rR|  d¡}|S)a:
    Input validation for values passed to __init__. Ensure that
    any datetime64/timedelta64 dtypes are in nanoseconds.  Ensure
    that we do not have string dtypes.
 
    Parameters
    ----------
    values : np.ndarray or ExtensionArray
 
    Returns
    -------
    values : np.ndarray or ExtensionArray
    r×N)rurvr&rOÚ
issubclassrmrr’r³rTrFrKÚfreqZ
_with_freqrúrararbrÞÿs 
rÞrr×cCsj|j}t|tƒrt}nPt|tƒr&t}n@t|tƒr6t}n0t|tƒrFt}n |dkrTt    }n|dkrbt
}nt }|S)zÑ
    Find the appropriate Block subclass to use for the given values and dtype.
 
    Parameters
    ----------
    dtype : numpy or pandas dtype
 
    Returns
    -------
    cls : class, subclass of Block
    )ÚMr)rEÚcrsrtrr) rwrurLrr/r‰r2ror0rˆr…rŠ)rmrwÚclsrararbÚget_block_type    s
 
 
 
rrr‡)rgrŠricCs"t|jƒ}t|ƒ}||d||dS)Nr°©rZrŠri)rrmrÞ)rgrŠriÚklassrararbr#B    s
r#r¡rh)rZrirVcCs@t|tƒst|ƒ}t|||ƒt|jƒ}t|ƒ}|||||dS)Nr‘)rurÚ
check_ndimrrmrÞ)rgrŠrZrir’rararbrO    s 
 
r)rŠrZrVcCsœ|j|kr"td|j›d|›dƒ‚t|jƒs||j|krNtd|j›d|›dƒ‚t|ƒt|ƒkr˜tdt|ƒ›dt|ƒ›ƒ‚n|dkr˜t|ƒd    kr˜td
ƒ‚d S) aV
    ndim inference and validation.
 
    Validates that values.ndim and ndim are consistent.
    Validates that len(values) and len(placement) are consistent.
 
    Parameters
    ----------
    values : array-like
    placement : BlockPlacement
    ndim : int
 
    Raises
    ------
    ValueError : the number of dimensions do not match
    z0Wrong number of dimensions. values.ndim > ndim [z > ú]z1Wrong number of dimensions. values.ndim != ndim [z != zWrong number of items passed z, placement implies r°rYz need to splitN)rZr¦r(rmr˜)rgrŠrZrararbr“_    s
ÿ
 
ÿÿr“rfraz3tuple[np.ndarray | ExtensionArray, DtypeObj | None])rgrmrZrVcCs@t|tƒr(| ¡}|r(|dkr(t |¡}t|tƒr8|j}||fS)zL
    Ensure that we don't allow PandasArray / PandasDtype in internals.
    rY)rur5Zto_numpyrvZ
atleast_2dr1Z numpy_dtype)rgrmrZrararbÚextract_pandas_array‰    s
 
 
r•rWrXcCsf|dkr g}t|tƒrB|D]$}t|tƒr4| |¡q| |¡qn t|tƒsXtt|ƒƒ‚| |¡|S)z.return a new extended blocks, given the resultN)rurýrÁr¹rer²r)r›rÉÚrrararbrԟ    s
 
 
rÔrY)rgrZrVcCs.|j|kr*t|jƒs*td|ƒ}| dd¡}|S)z:
    Reshape if possible to have values.ndim == ndim.
    z+np.ndarray | DatetimeArray | TimedeltaArrayrYr±)rZr(rmr    r´)rgrZrararbrŒ¯    s
 
 
 
 rŒrßÚ.)ràrâÚ float_formatÚdecimalr’r)rgràr™rVcKs0t|tƒr2|jjjdkr2tj|jjt|j    ƒ|d}t
|ƒ}t|t t fƒrÌ|j dkrx|jfd|i|—Ž}|jtdd}|Sg}tt|ƒƒD]8}||dd…fjfd|i|—Ž}| |jtdd¡qˆt |¡S|jjdkrtt|ƒst|dkr:|d    kr:t|ƒ}    |s| t¡}ntj|d
d }|||    <|jtdd}|Sd d lm}
|
|||||dd} |  ¡} | jtdd} | St|tƒr¤t|ƒ}    t | t¡¡} || |    <| St|ƒ}    t  |¡}|jt!kr|s|r| t¡}|jj"t d¡j"|kr| d|›¡}ntj|d
d }|||    <|jtdd}|SdS)ráZMmr rYràFrÄNrEr—rTr×r)ÚFloatArrayFormatter)ràr˜r™râZ fixed_widthZU1z<U)#rurEÚ
categoriesrmrwrrrTr'Ú_codesrOrFrKrZZ_format_native_typesrÆrTr~r˜r¹rvZvstackr-r8r’r³Zpandas.io.formats.formatršZget_result_as_arrayrGrSrZword_lenr~Úitemsize)rgràrâr˜r™r_r›Zresults_convertedrsråršÚ    formatterÚresr¤rrararbrã¿    sj
ý
 
  ú 
 
rãcCsRt|ttfƒr| t¡St|ttfƒr,|j}t|tj    ƒrNt
ƒrN|  ¡}d|j _ |S)a+
    The array that Series.values returns (public attribute).
 
    This has some historical constraints, and is overridden in block
    subclasses to return the correct array (e.g. period returns
    object ndarray and datetimetz a datetime64[ns] ndarray instead of
    proper extension array).
    F)rurJrHrÆrTrFrKr†rvr&r ÚviewÚflagsZ    writeablerúrararbr{
s    
r{)N)N)rY)“Ú
__future__rÚ    functoolsrrïÚtypingrrrrrr    r
ÚnumpyrvZpandas._configr Z pandas._libsr Z libinternalsr rZpandas._libs.internalsrrZpandas._libs.missingrZpandas._libs.tslibsrZpandas._typingrrrrrrrrrZ pandas.errorsrZpandas.util._decoratorsrZpandas.util._validatorsrZpandas.core.dtypes.astyper r!Zpandas.core.dtypes.castr"r#r$r%r&Zpandas.core.dtypes.commonr'r(r)r*r+r,r-r.Zpandas.core.dtypes.dtypesr/r0r1r2Zpandas.core.dtypes.genericr3r4r5r6Zpandas.core.dtypes.missingr7r8r9Z pandas.corer:Zpandas.core.algorithmsÚcoreZ
algorithmsrZpandas.core.array_algos.putmaskr;r<r=r>r?Z pandas.core.array_algos.quantiler@Zpandas.core.array_algos.replacerArBrCZ"pandas.core.array_algos.transformsrDZpandas.core.arraysrErFrGrHrIrJrKZpandas.core.arrays.sparserLZpandas.core.baserMZpandas.core.commonÚcommonrwZpandas.core.computationrNZpandas.core.constructionrOrPZpandas.core.indexersrQZpandas.core.apirRZpandas.core.arrays._mixinsrSrmr~rdrermrrƒr…ZNDArrayBackedBlockrornrˆr‰rŠrÞrr#rr“r•rÔrŒrãr{rarararbÚ<module>sš  $
   ,   (
   $          
!}5 41'ÿÿ*úW