zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
U
¬ý°d‘Aã@sâddlmZddlZddlmZmZmZmZmZm    Z    m
Z
ddl Z ddl Z ddl ZddlmZddlmZmZmZddlmZmZddlmZmZmZmZmZm Z m!Z!ddl"m#Z#dd    l$m%Z%dd
l&m'Z'dd l(m)Z)dd l*m+Z+dd l,m-Z-m.Z.m/Z/m0Z0ddl1m2Z2ddl3m4Z4m5Z5ddl6m7Z7m8Z8ddl9m:m;Zddl<m=Z=ddl>m?Z?ddl@m:mAZBddlCmDZDmEZEddlFmGZGddlHmIZImJZJddlKmLZLmMZMmNZNddlOmPZPmQZQmRZRmSZSmTZTmUZUmVZVddlWmXZXmYZYe    dddZZGdd„deLƒZ[Gdd„dej\e[ƒZ\Gdd „d e[eMƒZ]dSd"d#d$d$dd%œd&d'„Z^d(d#d$d)dd*œd+d,„Z_dTd-d.d#d/d0œd1d2„Z`d3d4d5œd6d7„Zad(d$d)d"d8œd9d:„Zbd"d;œd<d=„Zcd>d?œd@dA„ZddBdBdCœdDdE„Zed"dFd$dGdHœdIdJ„ZfdKdLœdMdN„ZgdOd-d$dPœdQdR„ZhdS)Ué)Ú annotationsN)ÚAnyÚCallableÚHashableÚLiteralÚSequenceÚTypeVarÚcast)Úusing_copy_on_write)ÚalgosÚ    internalsÚlib)ÚBlockPlacementÚBlockValuesRefs)Ú    ArrayLikeÚAxisIntÚDtypeObjÚQuantileInterpolationÚShapeÚnptÚtype_t)ÚPerformanceWarning)Úcache_readonly)Úfind_stack_level)Úvalidate_bool_kwarg)Úinfer_dtype_from_scalar)Úensure_platform_intÚis_1d_only_ea_dtypeÚis_dtype_equalÚ is_list_like)ÚExtensionDtype)Ú ABCDataFrameÚ    ABCSeries)Ú array_equalsÚisna)ÚNDArrayBackedExtensionArray)Ú SparseDtype)Úensure_wrapped_if_datetimelikeÚ extract_array)Úmaybe_convert_indices)ÚIndexÚ ensure_index)Ú DataManagerÚSingleDataManagerÚinterleaved_dtype)ÚBlockÚ
NumpyBlockÚensure_block_shapeÚ extend_blocksÚget_block_typeÚ    new_blockÚ new_block_2d)Ú blockwise_allÚoperate_blockwiseÚTÚBaseBlockManager)Úboundc @sÀeZdZUdZdZded<ded<ded<ded    <ed
d œd d „ƒZded<ded<dŸdddœdd„Ze    dddddœdd„ƒZ
edd œdd„ƒZ edd œdd„ƒZ d ddd!œd"d#„Z dd œd$d%„ZeZd&d
d'œd(d)„Zd&d*dd+œd,d-„Zedd œd.d/„ƒZed*d œd0d1„ƒZd
dd2œd3d4„Zd
dd5œd6d7„Zddd8œd9d:„Zdd
dd;œd<d=„Zd>d?„Zed@d œdAdB„ƒZdCd œdDdE„Zd¡ddFddGœdHdI„ZddddJœdKdL„Zd¢dd
dddNœdOdP„Zddd!œdQdR„Zd£ddSœdTdU„Zdd
d&ddVœdWdX„Z ddddYœdZd[„Z!dd
d&dd\œd]d^„Z"ddddYœd_d`„Z#d¤ddbdCddcœddde„Z$ddbddfœdgdh„Z%ddddYœdidj„Z&dkdl„Z'd¥ddmdmddddnœdodp„Z(ddd!œdqdr„Z)edd œdsdt„ƒZ*edd œdudv„ƒZ+edd œdwdx„ƒZ,ddyddzœd{d|„Z-d¦ddddfœd}d~„Z.d§ddddfœdd€„Z/d¨dddddd‚œdƒd„„Z0ed
d œd…d†„ƒZ1d©dd‡ddˆœd‰dŠ„Z2ddd!œd‹dŒ„Z3dªdMdœdd*dŽd&ddbddddœ    dd‘„Z4e5j6dMfdMdœd’dddd“œd”d•„Z7d«d–dd—d˜œd™dš„Z8d¬dd&ddddœœddž„Z9d S)­r9a¡
    Core internal data structure to implement DataFrame, Series, etc.
 
    Manage a bunch of labeled 2D mixed-type ndarrays. Essentially it's a
    lightweight blocked set of labeled data to be manipulated by the DataFrame
    public API class
 
    Attributes
    ----------
    shape
    ndim
    axes
    values
    items
 
    Methods
    -------
    set_axis(axis, new_labels)
    copy(deep=True)
 
    get_dtypes
 
    apply(func, axes, block_filter_fn)
 
    get_bool_data
    get_numeric_data
 
    get_slice(slice_like, axis)
    get(label)
    iget(loc)
 
    take(indexer, axis)
    reindex_axis(new_labels, axis)
    reindex_indexer(new_labels, indexer, axis)
 
    delete(label)
    insert(loc, label, value)
    set(label, value)
 
    Parameters
    ----------
    blocks: Sequence of Block
    axes: Sequence of Index
    verify_integrity: bool, default True
 
    Notes
    -----
    This is *not* a public API class
    ©únpt.NDArray[np.intp]Ú_blknosÚ_blklocsútuple[Block, ...]Úblocksú list[Index]ÚaxesÚint©ÚreturncCst‚dS©N©ÚNotImplementedError©Úselfr;r;úUd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/internals/managers.pyÚndim™szBaseBlockManager.ndimÚboolÚ_known_consolidatedÚ_is_consolidatedTÚNone)Úverify_integrityrEcCst‚dSrFrG)rJr@rBrQr;r;rKÚ__init__ szBaseBlockManager.__init__z    type_t[T]ú list[Block]r8)Úclsr@rBrEcCst‚dSrFrG©rTr@rBr;r;rKÚ from_blocks£szBaseBlockManager.from_blockscCs|jdkr| ¡|jS)a
 
        Suppose we want to find the array corresponding to our i'th column.
 
        blknos[i] identifies the block from self.blocks that contains this column.
 
        blklocs[i] identifies the column of interest within
        self.blocks[self.blknos[i]]
        N)r=Ú_rebuild_blknos_and_blklocsrIr;r;rKÚblknos§s
 
zBaseBlockManager.blknoscCs|jdkr| ¡|jS)z$
        See blknos.__doc__
        N)r>rWrIr;r;rKÚblklocs·s
zBaseBlockManager.blklocsN)rJrEcCsˆ|dkr tgƒg|jdd…}|jdkrtt|tƒs8t‚|jd}|jdd…}tt    ddƒƒ}|j
||d}|g}ng}t |ƒ  ||¡S)z9return an empty BlockManager with the items axis of len 0Nér©Ú    placement) r*rBrLÚ
isinstanceÚSingleBlockManagerÚAssertionErrorr@ÚvaluesrÚsliceZmake_block_same_classÚtyperV)rJrBÚblkÚarrÚbpÚnbr@r;r;rKÚ
make_emptyÂs
 
zBaseBlockManager.make_emptycCsdS©NTr;rIr;r;rKÚ __nonzero__ÓszBaseBlockManager.__nonzero__r)ÚaxisrEcCs|jdkr|dkrdnd}|S)NérrZ©rL)rJrjr;r;rKÚ_normalize_axisÙs
z BaseBlockManager._normalize_axisr*)rjÚ
new_labelsrEcCs| ||¡||j|<dSrF)Z_validate_set_axisrB)rJrjrnr;r;rKÚset_axisßs zBaseBlockManager.set_axiscCst|jƒdkS©NrZ©Úlenr@rIr;r;rKÚis_single_blockäsz BaseBlockManager.is_single_blockcCs
|jdS©Nr©rBrIr;r;rKÚitemsészBaseBlockManager.items©ÚirEcCs|j|}| |¡S)ú¾
        Check for column `i` if it has references.
        (whether it references another array or is itself being referenced)
        Returns True if the column has no references.
        )rXÚ_has_no_reference_block)rJrxÚblknor;r;rKÚ_has_no_referenceís
z"BaseBlockManager._has_no_reference)r{rEcCs|j|j ¡ S)z¼
        Check for block `i` if it has references.
        (whether it references another array or is itself being referenced)
        Returns True if the block has no references.
        ©r@ÚrefsZ has_reference)rJr{r;r;rKrzösz(BaseBlockManager._has_no_reference_block)ÚmgrrEcCsJt|jƒt|jƒkrdSt|jƒD]"\}}|j|j|_|j |¡q"dS)z†
        Adds the references from one manager to another. We assume that both
        managers have the same block structure.
        N)rrr@Ú    enumerater~Z add_reference)rJrrxrcr;r;rKÚadd_referencesþs
zBaseBlockManager.add_references)rr{rEcCs"t |j|¡}||j|jjkS)zv
        Checks if two blocks from two different block managers reference the
        same underlying values.
        )ÚweakrefÚrefr@r~Zreferenced_blocks)rJrr{rƒr;r;rKÚreferences_same_values sz'BaseBlockManager.references_same_valuescCs"t dd„|jDƒ¡}| |j¡S)NcSsg|]
}|j‘qSr;©Údtype©Ú.0rcr;r;rKÚ
<listcomp>sz/BaseBlockManager.get_dtypes.<locals>.<listcomp>)ÚnpÚarrayr@ÚtakerX©rJZdtypesr;r;rKÚ
get_dtypesszBaseBlockManager.get_dtypesúlist[ArrayLike]cCsdd„|jDƒS)aµ
        Quick access to the backing arrays of the Blocks.
 
        Only for compatibility with ArrayManager for testing convenience.
        Not to be used in actual code, and return value is not the same as the
        ArrayManager method (list of 1D arrays vs iterator of 2D ndarrays / 1D EAs).
 
        Warning! The returned arrays don't handle Copy-on-Write, so this should
        be used with caution (only in read-mode).
        cSsg|]
}|j‘qSr;©r`r‡r;r;rKr‰$sz+BaseBlockManager.arrays.<locals>.<listcomp>©r@rIr;r;rKÚarrayss zBaseBlockManager.arraysÚstrcCsht|ƒj}t|jƒD]4\}}|dkr4|d|›7}q|d|›d|›7}q|jD]}|d|›7}qP|S)Nrz
Items: z
Axis z: Ú
)rbÚ__name__r€rBr@)rJÚoutputrxÚaxÚblockr;r;rKÚ__repr__&s
 
zBaseBlockManager.__repr__zlist[str] | None)rJÚ
align_keysrEc  sðdˆks t‚|pg}g}‡fdd„|Dƒ}|jD]¨}|r¦| ¡D]d\}}t|ttfƒr”|jdkrv|j|jj    j
ˆ|<q¤|jdd…|jj    fj
ˆ|<q@||jj    ˆ|<q@t |ƒr¾|j |fˆŽ}    nt ||ƒfˆŽ}    t|    |ƒ}q0t|ƒ ||j¡}
|
S)ab
        Iterate over the blocks, collect and create a new BlockManager.
 
        Parameters
        ----------
        f : str or callable
            Name of the Block method to apply.
        align_keys: List[str] or None, default None
        **kwargs
            Keywords to pass to `f`
 
        Returns
        -------
        BlockManager
        Úfiltercsi|]}|ˆ|“qSr;r;)rˆÚk©Úkwargsr;rKÚ
<dictcomp>Msz*BaseBlockManager.apply.<locals>.<dictcomp>rZN)r_r@rvr]r"r!rLÚilocÚmgr_locsÚindexerZ_valuesÚcallableÚapplyÚgetattrr2rbrVrB) rJÚfršržÚ result_blocksZ aligned_argsÚbrœÚobjÚappliedÚoutr;rrKr¤2s$ 
 
 zBaseBlockManager.apply)rJÚalignrEcCs6|rddg}ndg}t|dd}|jd|||tƒdS)NÚotherÚcondT©Z extract_numpyÚwhere)ršr­r®Ú    using_cow©r(r¤r
)rJr­r®r¬ršr;r;rKr°fs
 ûzBaseBlockManager.whereF)rJÚdecimalsr±rEcCs|jd||dS)NÚround)r³r±©r¤)rJr³r±r;r;rKr´us
ýzBaseBlockManager.roundcCsPt|tjƒr(|j|jkr(td|j›ƒ‚tƒr@| d¡s@| ¡}|jd||dS)zi
        Set values with indexer.
 
        For SingleBlockManager, this backs s[indexer] = value
        zCannot set values with ndim > rÚsetitem)r¢Úvalue)    r]rŠÚndarrayrLÚ
ValueErrorr
r|Úcopyr¤©rJr¢r·r;r;rKr¶|s
zBaseBlockManager.setitem)r¬cCs6|rddg}ndg}t|dd}|jd|||tƒdS)NÚnewÚmaskTr¯Úputmask)ršr½r¼r±r²)rJr½r¼r¬ršr;r;rKr¾Œs
 ûzBaseBlockManager.putmask)rJÚnrjrEcCs| |¡}|jd||dS)NÚdiff)r¿rj)rmr¤)rJr¿rjr;r;rKrÀ›s
zBaseBlockManager.diff)rJÚinplacerEcKs|jdd|i|dtƒi—ŽS)NÚ interpolaterÁr±)r©r¤r
)rJrÁržr;r;rKr sÿÿÿÿzBaseBlockManager.interpolate)rJÚperiodsrjrEcCs*| |¡}|tjkrd}|jd|||dS)NÚshift)rÄrjÚ
fill_value)rmr Ú
no_defaultr¤)rJrÄrjrÆr;r;rKrÅ¥s
 
zBaseBlockManager.shiftcCs.|dk    rtjd|d}|jd||||tƒdS)N)ÚlimitÚfillna)r·rÈrÁÚdowncastr±)ÚlibalgosZvalidate_limitr¤r
)rJr·rÈrÁrÊr;r;rKrɬsúzBaseBlockManager.fillnaÚraisez bool | None)rJrºÚerrorsrEcCs:|dkrtƒrd}q$d}n
tƒr$d}|jd|||tƒdS)NFTÚastype)r†rºrÍr±©r
r¤)rJr†rºrÍr;r;rKrκsûzBaseBlockManager.astype)rJrºrEcCs6|dkrtƒrd}q$d}n
tƒr$d}|jd|tƒdS)NFTÚconvert)rºr±rÏ©rJrºr;r;rKrÐËszBaseBlockManager.convertcCs8t|dƒ}t|ƒrt‚t|ƒr"t‚|jd|||tƒdS)NrÁÚreplace)Ú
to_replacer·rÁr±)rrr_r¤r
)rJrÓr·rÁr;r;rKrÒÖs
  ûzBaseBlockManager.replacecKs|jd|dtƒi—ŽS)NÚ_replace_regexr±)rÔrérJržr;r;rKÚ replace_regexãszBaseBlockManager.replace_regexz    list[Any])rJÚsrc_listÚ    dest_listrÁÚregexrEcCs.t|dƒ}|jd||||tƒd}| ¡|S)zdo a list replacerÁÚ replace_list)r×rØrÁrÙr±)rr¤r
Ú_consolidate_inplace)rJr×rØrÁrÙÚbmr;r;rKrÚæs
úzBaseBlockManager.replace_listcKs |jd|ŽS)z}
        Convert values to native types (strings / python objects) that are used
        in formatting (repr / csv).
        Úto_native_types)rÝrµrÕr;r;rKrÝûsz BaseBlockManager.to_native_typescCstdd„|jDƒƒS)Ncss|] }|jVqdSrF©Ú
is_numeric©rˆr˜r;r;rKÚ    <genexpr>sz9BaseBlockManager.is_numeric_mixed_type.<locals>.<genexpr>)Úallr@rIr;r;rKÚis_numeric_mixed_typesz&BaseBlockManager.is_numeric_mixed_typecCstdd„|jDƒƒS)z>Whether any of the blocks in this manager are extension blockscss|] }|jVqdSrF©Ú is_extensionràr;r;rKrá    sz7BaseBlockManager.any_extension_types.<locals>.<genexpr>)Úanyr@rIr;r;rKÚany_extension_typessz$BaseBlockManager.any_extension_typescCst|jƒdkr|jdjSdS)z8return a boolean if we are a single block and are a viewrZrF)rrr@Úis_viewrIr;r;rKrè s     zBaseBlockManager.is_viewr)rJÚ    predicaterEcs"‡fdd„|jDƒ}|j|ddS)Ncsg|]}ˆ|jƒr|‘qSr;rr‡©rér;rKr‰s
z5BaseBlockManager._get_data_subset.<locals>.<listcomp>F©rº)r@Ú_combine)rJrér@r;rêrKÚ_get_data_subsetsz!BaseBlockManager._get_data_subsetcCsZg}|jD]B}|jtkr$| |¡q
|jr
| ¡}|D]}|jr6| |¡q6q
| ||¡S)zä
        Select blocks that are bool-dtype and columns from object-dtype blocks
        that are all-bool.
 
        Parameters
        ----------
        copy : bool, default False
            Whether to copy the blocks
        )r@r†rMÚappendÚ    is_objectÚ_splitZis_boolrì)rJrºÚ
new_blocksrcÚnbsrfr;r;rKÚ get_bool_datas 
 
 zBaseBlockManager.get_bool_datacCsBdd„|jDƒ}t|ƒt|jƒkr6|r2|jddS|S| ||¡S)zy
        Parameters
        ----------
        copy : bool, default False
            Whether to copy the blocks
        cSsg|]}|jr|‘qSr;rÞr‡r;r;rKr‰>sz5BaseBlockManager.get_numeric_data.<locals>.<listcomp>T©Údeep)r@rrrºrì)rJrºZnumeric_blocksr;r;rKÚget_numeric_data7s  z!BaseBlockManager.get_numeric_dataz Index | None)rJr@rºÚindexrEc
Csþt|ƒdkrb|jdkrZ|dk    r2|jdd…|g}n|jdd…g|jdd…}| |¡S| ¡St t dd„|Dƒ¡¡}t     ||j
d¡}g}|D],}|j |d}    t ||    j jƒ|    _ | |    ¡q–t|jƒ}|dk    rÞ||d<|j |¡|d<t|ƒ ||¡S)    z$return a new manager with the blocksrrkNrZcSsg|] }|jj‘qSr;©r¡Úas_array©rˆr¨r;r;rKr‰Usz-BaseBlockManager._combine.<locals>.<listcomp>rôéÿÿÿÿ)rrrLrvrBrgrŠÚsortÚ concatenater Zget_reverse_indexerÚshaperºrr¡r¢rîÚlistrŒrbrV)
rJr@rºr÷rBr¢Z inv_indexerrñr¨rfr;r;rKrìFs& 
 
 
zBaseBlockManager._combinecCs
t|jƒSrFrqrIr;r;rKÚnblockshszBaseBlockManager.nblockszbool | None | Literal['all'])rJrõrEcsšˆdkrtƒrd‰nd‰ˆr>‡fdd„‰‡fdd„|jDƒ}n
t|jƒ}|jdˆd    }||_|jd
krŠ|j}|dk    rŠ| ¡|_|j ¡|_ˆr–| ¡|S) aN
        Make deep or shallow copy of BlockManager
 
        Parameters
        ----------
        deep : bool, string or None, default True
            If False or None, return a shallow copy (do not copy data)
            If 'all', copy data and a deep copy of the index
 
        Returns
        -------
        BlockManager
        NFTcsˆdkr|jddS| ¡S)NrâTrô)rºÚview)r—rôr;rKÚ    copy_func†sz(BaseBlockManager.copy.<locals>.copy_funccsg|] }ˆ|ƒ‘qSr;r;©rˆr—)rr;rKr‰‰sz)BaseBlockManager.copy.<locals>.<listcomp>rºrôrZ)    r
rBrÿr¤rLr=rºr>rÛ)rJrõÚnew_axesÚresrXr;)rrõrKrºls$ 
 
 
 zBaseBlockManager.copycCs4| ¡r |St|ƒ|j|jdd}d|_| ¡|S)zr
        Join together blocks having same dtype
 
        Returns
        -------
        y : BlockManager
        F©rQ)Úis_consolidatedrbr@rBrOrÛ)rJrÜr;r;rKÚ consolidate›s zBaseBlockManager.consolidate)Ú use_na_proxyznpt.NDArray[np.intp] | None)    rJÚnew_axisr¢rjÚ
allow_dupsrºÚ
only_slicer    rEc s |dkrtƒrd}nd}ˆdkr\||j|kr6|s6|S|j|d}    t|jƒ|    _||    j|<|    Stˆtjƒslt‚|s€|j| ˆ¡||j    kr’t
dƒ‚|dkr®|j ˆˆ||d}
n‡‡fdd    „|j Dƒ}
t|jƒ} || |<t |ƒ |
| ¡} |d
kr|j ¡| _|j ¡| _| 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 or None, default True
            If None, regard as False to get shallow copy.
        only_slice : bool, default False
            Whether to take views, not copies, along columns.
        use_na_proxy : bool, default False
            Whether to use a np.void ndarray for newly introduced columns.
 
        pandas-indexer with -1's only.
        NFTrôú#Requested axis not found in managerr)rÆr r    cs*g|]"}|jˆdˆdk    rˆn|jd‘qS)rZN)rjrÆ)Útake_ndrÆr‡©rÆr¢r;rKr‰ës ùüz4BaseBlockManager.reindex_indexer.<locals>.<listcomp>rZ)r
rBrºrÿr]rŠr¸r_Z_validate_can_reindexrLÚ
IndexErrorÚ_slice_take_blocks_ax0r@rbrVrXr=rYr>) rJr
r¢rjrÆr rºr r    ÚresultrñrÚnew_mgrr;rrKÚreindex_indexer«sB  
 
ü ø
 
  z BaseBlockManager.reindex_indexerúslice | np.ndarray)Úslice_or_indexerr r    rEcs„|tjk    }t||jd|d\}}}|jrÊ|jd‰|dkrf|dkrHgSttd|ƒƒ}    ˆj||    dgS|rt|j    dkrÊ|r†|dkr†ˆj
}|s¨|r¨‡fdd„t |ƒDƒ}
|
Sttd|ƒƒ}    ˆj |d|    |d    gS|dkrè|j |} |j|} n(tj |j |d
|d } tj |j|d
|d } g}
| } tj| | d D]T\}}|d
krV|
 |j|||d ¡q(|j|‰ˆjs¶ˆjs¶|pztƒ }|D]0}ˆj|d}tt||dƒƒ|_|
 |¡q‚nÆ| |j}tt|ƒ| ¡dƒ}|sätƒrðt ||¡}t|tƒrˆj||d}|
 |¡nf|rbt||ƒD]8\}}t||dƒ}t|ƒ}    ˆj||    d}|
 |¡q&nˆj |d|d}|
 |¡q(|
S)ab
        Slice/take blocks along axis=0.
 
        Overloaded for SingleBlock
 
        Parameters
        ----------
        slice_or_indexer : slice or np.ndarray[int64]
        fill_value : scalar, default lib.no_default
        only_slice : bool, default False
            If True, we always return views on existing arrays, never copies.
            This is used when called from ops.blockwise.operate_blockwise.
        use_na_proxy : bool, default False
            Whether to use a np.void ndarray for newly introduced columns.
 
        Returns
        -------
        new_blocks : list of Block
        r)Ú
allow_fillra©Ú new_mgr_locsrZNcs,g|]$\}}ˆjt||dƒt|ƒd‘qS)rZr)Úgetitem_block_columnsrar)rˆrxÚml©rcr;rKr‰2s
ý ÿz;BaseBlockManager._slice_take_blocks_ax0.<locals>.<listcomp>)rjrrÆrû)rÆr©Úgroup)r\rÆr    rô)rjr)r rÇÚ_preprocess_slice_or_indexerrþrsr@rrarrLrÆr€rrXrYr Ú libinternalsÚget_blkno_placementsrîÚ_make_na_blockÚ_can_consolidateZ_validate_ndimr
rºr¡r¢ÚmaxrrZmaybe_indices_to_slicer]Úzip)rJrrÆr r    rZsl_typeÚslobjZsllenrer@rXrYrr{r¡rõÚmgr_locZnewblkÚtakerÚmax_lenrfrxrZslcr;rrKrsœ
ÿ 
 
üüÿ    
 ÿÿ
ýÿ
 
   z'BaseBlockManager._slice_take_blocks_ax0rr/)r\r    rEc
Cs˜|rD|dkst‚t|ƒ|jdf}tj|tjd}t||dd}|S|dkrRtj}t|jƒ}t|ƒ|d<t    |ƒ\}}tj||d}    |     
|¡t |    |dS)NrZr…rkrlrr[) r_rrrþrŠÚemptyZvoidr0ÚnanrÿrÚfillr5)
rJr\rÆr    rþÚvalsrfÚ block_shaper†Ú block_valuesr;r;rKr"‡s 
 
zBaseBlockManager._make_na_blockrZ)rJrjÚverifyÚconvert_indicesrEcCstt|tƒr$tj|j|j|jtjdntj|tjd}|j    |}|rPt
|||d}|j |  |¡}|j |||dddS)aÖ
        Take items along any axis.
 
        indexer : np.ndarray or slice
        axis : int, default 1
        verify : bool, default True
            Check that all entries are between 0 and len(self) - 1, inclusive.
            Pass verify=False if this check has been done by the caller.
        convert_indices : bool, default True
            Whether to attempt to convert indices to positive values.
 
        Returns
        -------
        BlockManager
        r…)r0TN)r
r¢rjr rº)r]rarŠÚarangeÚstartÚstopÚstepÚintpZ
asanyarrayrþr)rBrŒr)rJr¢rjr0r1r¿rnr;r;rKrŒ¡sÿý
ûzBaseBlockManager.take)T)N)N)F)T)FrÌ)FF)F)F)TN)T)NFTF)NF)rZTT):r•Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__Ú__annotations__ÚpropertyrLrRÚ classmethodrVrXrYrgriÚ__bool__rmrorsrvr|rzr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ìrrºrrr rÇrr"rŒr;r;r;rKr9_s°
2
     ý4  ûÿ"/ø
ö"Xüú    ÿûc@seZdZdZdZdhdddddœd    d
„Zdd œd d „Zeddddœdd„ƒZdddœdd„Z    diddddœdd„Z
dddœdd„Z e dd œd d!„ƒZ djd#ddd$œd%d&„Zdkdd(d)dd*œd+d,„Zddddd-dd.œd/d0„Zdldd#ddd1œd2d3„Zdd4ddd5œd6d7„Zdd œd8d9„Zdd œd:d;„Zdd œd<d=„Zd>d?d>d@œdAdB„Zd>d?d>d@œdCdD„ZdddEœdFdG„ZddddHœdIdJ„ZdKdLdMœd>dNdOdPd>dQœdRdS„Zdd œdTdU„ZdmddVœdWdX„Zd'd"ejfdYddZd[d\œd]d^„Zd'ejfdYdZd[d_œd`da„Z dd œdbdc„Z!dd œddde„Z"dd œdfdg„Z#d'S)nÚ BlockManagerz0
    BaseBlockManager that holds 2D blocks.
    rkTzSequence[Block]zSequence[Index]rMrP)r@rBrQrEcCs@|r<|D]*}|j|jkrtd|j›d|j›dƒ‚q| ¡dS)NzNumber of Block dimensions (z) must equal number of axes (ú))rLr_Ú_verify_integrity)rJr@rBrQr˜r;r;rKrRÖs ÿzBlockManager.__init__rDcCs„|j}tdd„|jDƒƒ}|jD]6}|jdd…|dd…kr t||jdd…|jƒq t|jƒ|kr€tdt|jƒ›d|›ƒ‚dS)Ncss|]}t|jƒVqdSrF)rrr¡©rˆÚxr;r;rKráîsz1BlockManager._verify_integrity.<locals>.<genexpr>rZzINumber of manager items must equal union of block items
# manager items: z, # tot_items: )rþÚsumr@Úraise_construction_errorrBrrrvr_)rJZ    mgr_shapeÚ    tot_itemsr˜r;r;rKrAìs
ÿzBlockManager._verify_integrityrSrA©r@rBrEcCs|||ddS)úZ
        Constructor for BlockManager and SingleBlockManager with same signature.
        Frr;rUr;r;rKrVùszBlockManager.from_blocksrCr^)ÚlocrEc Cs@t|jƒdkrX|jd tdƒ|f¡}t|tdt|ƒƒd|jdjd}t||jdƒStdd„|jDƒƒ}t|ƒ}t    |t
ƒ}t    |t ƒr¦|s¦|  ¡}|j |f|d}ntj||r´tn|d}t|ƒ}|jD]*}t|jƒD]\}    }
| |    |f¡||
<qØqÊ|rtt |ƒ}|  ¡j||d}t|tdt|ƒƒdd}t||jdƒS)    zÅ
        Return the array corresponding to `frame.iloc[loc]`.
 
        Parameters
        ----------
        loc : int
 
        Returns
        -------
        np.ndarray or ExtensionArray
        rZrN©r\rLr~cSsg|]
}|j‘qSr;r…r‡r;r;rKr‰sz(BlockManager.fast_xs.<locals>.<listcomp>r…©r\rL)rrr@Úigetrar4r~r^rBr.r]r&r Zconstruct_array_typeÚ_emptyrŠr*Úobjectr'r€r¡r    Z_from_sequence) rJrIrr˜r†r¿Z immutable_earTrcrxÚrlr;r;rKÚfast_xss8  
ü
 
ÿ
 
zBlockManager.fast_xs)rxÚ    track_refrEcCs`|j|j|}| |j|¡}ttdt|ƒƒƒ}t|ƒ||d|rH|jndd}t    ||j
dƒS)z:
        Return the data as a SingleBlockManager.
        rrZNrJ) r@rXrLrYrrarrrbr~r^rB)rJrxrQr˜r`rerfr;r;rKrL<s ÿzBlockManager.igetrrwcCs$|j|j|}| |j|¡}|S)z×
        Return the data for column i as the values (ndarray or ExtensionArray).
 
        Warning! The returned array is a view but doesn't handle Copy-on-Write,
        so this should be used with caution.
        )r@rXrLrY)rJrxr˜r`r;r;rKÚ iget_valuesJszBlockManager.iget_valueszlist[np.ndarray]cCsddgt|jƒ}|jD]H}|j}| ¡}|jdkr@|||d<qt|ƒD]\}}||||<qHq|S)a'
        Used in the JSON C code to access column arrays.
        This optimizes compared to using `iget_values` by converting each
 
        Warning! This doesn't handle Copy-on-Write, so should be used with
        caution (current use case of consuming this in the JSON code is fine).
        NrZr)rrrvr@Ú    _mgr_locsZvalues_for_jsonrLr€)rJrrcr¡r`rxrIr;r;rKÚ column_arraysVs 
 
zBlockManager.column_arraysFzint | slice | np.ndarray)rIr·rÁcs|jdkr|jdkr| ¡tˆjƒ}|slˆjdkr<ˆj‰n tˆdd‰ˆjdd…|jdd…krltdƒ‚t     
|¡r¼t t |ƒ}|j |}|j|}t|jƒdkr¶|j|ˆ|||dS|g}|r·fdd„}n ‡fd    d„}|j |}|j| ¡}    g}
g} g‰tj|d
d D]º\} } |j| }|    | j}|rx| ˆ¡rxtƒrb| | ¡sb| | ||| ƒ¡n| ||| ƒ¡q nL|
 |jj|¡|  | ¡t| ƒt|jƒkr¸ˆ | ¡q n | | |¡q tˆƒrLtj |j!tj"d }d
|ˆ<tj#|j!tj$d }| %d ¡t &|j!tˆƒ¡||<||j'|_'t(‡fdd„t)|jƒDƒƒ|_| rt *|
¡}t|ƒ}g}|r¬| +‡fdd„|Dƒ¡t &|¡t|jƒ|j'|<d|j|<nP| d | dd…¡}| t,||ƒt-|ƒd¡t|jƒ|j'|<t &|¡|j|<|jt(|ƒ7_d|_.dS)z‚
        Set new item in-place. Does not consolidate. Adds new Block if not
        contained in the current set of items
        NrZrkrlz9Shape of new values must be compatible with manager shape)rÁr{rccsˆSrFr;r[©r·r;rKÚ value_getitem¦sz(BlockManager.iset.<locals>.value_getitemcs
ˆ|jSrF)r¢r[rUr;rKrV«sTrr…rûc3s"|]\}}|tˆƒkr|VqdSrF)Úset)rˆrxrc)Úremoved_blknosr;rKráÔs z$BlockManager.iset.<locals>.<genexpr>c3s(|] }tˆtt||dƒƒdVqdS)rZ©r`r\N)r5rra)rˆr'rUr;rKráãs
üþrrYF)/r>rLrWrr†r8r1rþr_r Ú
is_integerr    rCrXr@rrrSÚ _iset_singlerYrºr r!r¢Ú should_storer
rzÚ_iset_split_blockÚ set_inplacerîr¡rùrŠÚzerosrÚbool_r*r6r,r2r=Útupler€rýÚextendr5rrN)rJrIr·rÁZvalue_is_extension_typer{rcrVrXrYZunfit_mgr_locsZunfit_val_locsÚblkno_lZval_locsÚblk_locsÚ
is_deletedÚ
new_blknosZ
unfit_idxrZ unfit_countrñZunfit_val_itemsr;)rXr·rKÚisetrsš
 
 
 ÿ
 
 
 
û  
 
 
 
 
 
 
  ÿ
 
û þÿzBlockManager.isetNznp.ndarray | list[int]zArrayLike | None)rcrdr·rEc Cs|j|}|jdkr| ¡t| |¡ƒ}|dk    rN|jj|}t|t|ƒƒ}n|d}t|dd…ƒ}t    |jƒ}|jd|…|f|j|dd…|}    |    |_|s°|dk    r°dSt
  t    |ƒ¡|j|jj <t |ƒD]2\}
} t
  t    | ƒ¡|j| jj <|
||j| jj <qÐdS)aþRemoves columns from a block by splitting the block.
 
        Avoids copying the whole block through slicing and updates the manager
        after determinint the new block structure. Optionally adds a new block,
        otherwise has to be done by the caller.
 
        Parameters
        ----------
        blkno_l: The block number to operate on, relevant for updating the manager
        blk_locs: The locations of our block that should be deleted.
        value: The value to set as a replacement.
        NrrZ)r@r>rWraÚdeleter¡rùr5rrrrŠr2r¢r€r=) rJrcrdr·rcZnbs_tupZlocsZfirst_nbZ    nr_blocksZ
blocks_tuprxrfr;r;rKr]s&
 
 
(ÿ zBlockManager._iset_split_blockr/)rIr·rÁr{rcrEc CsŽ|rN| |¡rNd}tƒr&| |¡s&d}|j|}|jt||dƒ||ddSt||jd}|j}    |    d|…|f|    |dd…}
|
|_dS)zþ
        Fastpath for iset when we are only setting a single position and
        the Block currently in that position is itself single-column.
 
        In this case we can swap out the entire Block and blklocs and blknos
        are unaffected.
        FTrZrëNr[)    r\r
rzrYr^rar5rSr@) rJrIr·rÁr{rcrºr rfZ
old_blocksrñr;r;rKr[0s 
"zBlockManager._iset_single)rIÚidxÚ inplace_onlyrEc
Cs¤tƒr^| |¡s^|j|}|j|}|j|j}|jdkrD| ¡}n
||g}| ||g|¡|j    |dd}|r~| 
||¡n"|  |f|¡}    |j ||    j jdddS)zù
        Set values ("setitem") into a single column (not setting the full column).
 
        This is a method on the BlockManager level, to avoid creating an
        intermediate Series at the DataFrame level (`s = df[loc]; s[idx] = value`)
        rZF)rQT)rÁN)r
r|rXrYr@r`rLrºr]rLÚsetitem_inplacer¶rgÚ_block)
rJrIrir·rjr{Zblk_locr`Zcol_mgrrr;r;rKÚcolumn_setitemKs    
 
 
 
 
zBlockManager.column_setitemr)rIÚitemr·rEcCs|j ||¡}|jdkr>|j}t|ƒdkrLtd|jj›ƒ‚nt||jd}tt    ||dƒƒ}t
||d}t|j ƒsžt j dgt jd|_t j dgt jd|_n| |¡| |¡||jd<|j |f7_ d|_td    d
„|j Dƒƒd krütjd ttƒd dS)z±
        Insert item at selected position.
 
        Parameters
        ----------
        loc : int
        item : hashable
        value : np.ndarray or ExtensionArray
        rkrZz-Expected a 1D array, got an array with shape rlrYrr…Fcss|]}|j VqdSrFräràr;r;rKrá’sz&BlockManager.insert.<locals>.<genexpr>édaDataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`)Ú
stacklevelN)rvÚinsertrLr8rrr¹rþr1rrar5r@rŠr‹r6r>r=Ú_insert_update_mgr_locsÚ!_insert_update_blklocs_and_blknosrBrNrDÚwarningsÚwarnrr)rJrIrnr·r
rer˜r;r;rKrqks0 
  ÿ 
 
 
 
úzBlockManager.insertcCs8t|j|d…ƒD] \}}|j|}|j |¡|_qdS)z…
        When inserting a new Block at location 'loc', we increment
        all of the mgr_locs of blocks above that by one.
        N)Ú_fast_count_smallintsrXr@rSZincrement_above)rJrIr{Úcountrcr;r;rKrrœs
z$BlockManager._insert_update_mgr_locscCs¾||jjdkr8t |jd¡|_t |jt|jƒ¡|_n‚|dkrt |jddd…d¡ddd…|_t |jddd…t|jƒ¡ddd…|_n*t     |j|j
|t|jƒ¡\}}||_||_dS)zk
        When inserting a new Block at location 'loc', we update our
        _blklocs and _blknos.
        rNrû) rYrþrŠrîr>r=rrr@r Zupdate_blklocs_and_blknosrX)rJrIZ new_blklocsrfr;r;rKrs¦s$,ÿz.BlockManager._insert_update_blklocs_and_blknoscCsjtj|jdtjd}d||<| ¡d}|j|dd}|j|}||jdg}t|ƒt    |ƒ|ddS)zJ
        Delete selected locations, returning a new BlockManager.
        rr…T)r rZFr)
rŠr_rþr`ÚnonzerorrvrBrbra)rJr¢rer(ròÚ new_columnsrBr;r;rKÚidelete¼s zBlockManager.ideleter8r)rJÚfuncrEcCs–g}|jD]B}|jr8| ¡D]}| |¡}t||ƒ}qq
| |¡}t||ƒ}q
t|ƒdkr`d}n|djjd}tt    |ƒƒ}t
|ƒ  ||j d|g¡S)zâ
        Apply grouped reduction function blockwise, returning a new BlockManager.
 
        Parameters
        ----------
        func : grouped reduction function
 
        Returns
        -------
        BlockManager
        rrû) r@rïrðr¤r2rrr`rþr*ÚrangerbrVrB)rJr{r§rcZsbrªZnrowsr÷r;r;rKÚgrouped_reduceÌs 
 
 
   zBlockManager.grouped_reducecCsV|jdkst‚g}|jD]}| |¡}| |¡qtdgƒ}t|ƒ ||j|g¡}|S)zÙ
        Apply reduction function blockwise, returning a single-row BlockManager.
 
        Parameters
        ----------
        func : reduction function
 
        Returns
        -------
        BlockManager
        rkN)    rLr_r@Úreducerbr*rbrVrv)rJr{Z
res_blocksrcròr÷rr;r;rKr~ís 
 
 
zBlockManager.reduce)r­rEcCs t|||ƒS)zO
        Apply array_op blockwise with another (aligned) BlockManager.
        )r7)rJr­Zarray_opr;r;rKr7szBlockManager.operate_blockwise©rJr­rEcCs t||tƒS)ú“
        Used in .equals defined in base class. Only check the column values
        assuming shape and indexes have already been checked.
        )r6r#)rJr­r;r;rKÚ _equal_values szBlockManager._equal_valuesrZlinear)rjÚ interpolationr*rr)rJÚqsrjr‚rEcsh|jdkst‚tˆƒst‚ˆdks&t‚t|jƒ}tˆtjd|d<‡‡‡fdd„|jDƒ}t    |ƒ||ƒS)a 
        Iterate over blocks applying quantile reduction.
        This routine is intended for reduction type operations and
        will do inference on the generated blocks.
 
        Parameters
        ----------
        axis: reduction axis, default 0
        consolidate: bool, default True. Join together blocks having same
            dtype
        interpolation : type of interpolation, default 'linear'
        qs : list of the quantiles to be computed
 
        Returns
        -------
        BlockManager
        rkrZr…csg|]}|jˆˆˆd‘qS))rjrƒr‚)Úquantiler‡©rjr‚rƒr;rKr‰3sÿz)BlockManager.quantile.<locals>.<listcomp>)
rLr_rrÿrBr*rŠÚfloat64r@rb)rJrƒrjr‚rr@r;r…rKr„s  
þzBlockManager.quantilecCs| |j¡}|j}|j }|r<|jj|jŽ}|jdd}ntj    |jdt
d}g}g}    t |jƒdkrld}
n*t |ƒt |jƒ} | t | ƒksŽt ‚t | ƒ}
|jD]\} | j} |  |
¡}| j||||d\}}| |¡|     |¡| ¡tdd„|Dƒƒksœt ‚qœ||    }t|||gdd    }|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
        r©rjrZr…)Ú new_placementÚ needs_maskingcss|]}t|jƒVqdSrF)rrrS)rˆrfr;r;rKráosz'BlockManager.unstack.<locals>.<genexpr>Fr)Zget_new_columnsrvÚ    new_indexZmask_allr½ÚreshapeZ
full_shaperærŠr_rMrrrCr_r@r¡Ztile_for_unstackZ_unstackrbrDr?)rJZ    unstackerrÆryrŠrZ
new_mask2Dr‰rñZ columns_maskZfactorZfacrcr¡rˆr@r½rÜr;r;rKÚunstack<s: 
 
ü
 
 
 zBlockManager.unstackrëcs@i}ˆjD]}| t|jƒg¡ |¡q
‡‡fdd„| ¡DƒS)zØ
        Return a dict of str(dtype) -> BlockManager
 
        Parameters
        ----------
        copy : bool, default True
 
        Returns
        -------
        values : a dict of dtype -> BlockManager
        cs i|]\}}|ˆj|ˆd“qS)rë)rì)rˆr†r@©rºrJr;rKrŸ‹sz(BlockManager.to_dict.<locals>.<dictcomp>)r@Ú
setdefaultr“r†rîrv)rJrºZbdr¨r;rrKÚto_dictys 
zBlockManager.to_dictznp.dtype | NonerNú
np.ndarray)r†rºÚna_valuerEcCsÖt|jƒdkr&tj|jtd}| ¡S|p2|tjk    }|j    rª|jd}|j
rd|j j ||d  |j¡}n t | ¡¡}|r„|j|dd}|r’| ¡}q¸tƒr¸| ¡}d|j_n|j||d}|tjk    rÎ||t|ƒ<| ¡S)a-
        Convert the blockmanager data into an numpy array.
 
        Parameters
        ----------
        dtype : np.dtype or None, 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
        rr…©r†r‘Frë)rrr@rŠr*rþÚfloatZ    transposer rÇrsrår`Úto_numpyr‹ZasarrayÚ
get_valuesrÎrºr
rÚflagsZ    writeableÚ _interleaver$)rJr†rºr‘rdrcr;r;rKrùs2
þý
 
 
 zBlockManager.as_array)r†r‘rEcCs*|stdd„|jDƒƒ}t|tƒr6|j}ttj|ƒ}n*t|tƒrLt d¡}nt    |t
ƒr`t d¡}tj |j |d}t  |j d¡}|t d¡krÌ|tjkrÌ|jD](}|j}| |¡}|||j<d||j<qž|S|jD]@}|j}|jrô|jj||d}n
| |¡}|||j<d||j<qÒ| ¡s&tdƒ‚|S)    zt
        Return ndarray from blocks with specified item order
        Items must be contained in the blocks
        cSsg|]
}|j‘qSr;r…r‡r;r;rKr‰Ûsz,BlockManager._interleave.<locals>.<listcomp>rNr…rrZr’z'Some items were not contained in blocks)r.r@r]r&Úsubtyper    rŠr†r rr“r*rþr_r rÇr¡r•r¢rår`r”râr_)rJr†r‘rZitemmaskrcrOrdr;r;rKr—ÍsB    ÿ
 
 
 
 
 
 
 
þ
 
 
zBlockManager._interleavecCs|js| ¡|jS)zH
        Return True if more than one block with the same dtype
        )rNÚ_consolidate_checkrOrIr;r;rKr szBlockManager.is_consolidatedcCsNt|jƒdkrd|_d|_dSdd„|jDƒ}t|ƒtt|ƒƒk|_d|_dS)NrZTcSsg|]}|jr|j‘qSr;)r#r†r‡r;r;rKr‰sz3BlockManager._consolidate_check.<locals>.<listcomp>)rrr@rOrNrWrr;r;rKr™szBlockManager._consolidate_checkcCs,| ¡s(t|jƒ|_d|_d|_| ¡dSrh)rÚ _consolidater@rOrNrWrIr;r;rKrÛs
 z!BlockManager._consolidate_inplace)T)T)F)N)F)T)$r•r7r8r9rLrRrAr=rVrPrLrRr<rTrgr]r[rmrqrrrsrzr}r~r7rr„rŒrr rÇrùr—rr™rÛr;r;r;rKr?ÌsV    ü     9 ÿü/ÿ 1
! û*=üBý@
r?csÀeZdZdZeddœdd„ƒZdZdZdZdZ    dYd    d
d d d œdd„Z
e ddddœdd„ƒZ e dZdd
dddœdd„ƒZ d
ddœdd„Zd[d d d!œd"d#„Zd$d%„Zd&d'„Zd dœd(d)„Zed    dœd*d+„ƒZed,d-„ƒZed.d/„ƒZd0dd1œd2d3„Zd\d4d5dd6œd7d8„Zed
dœd9d:„ƒZed;dœd<d=„ƒZd>dœd?d@„ZdAdB„ZdCdD„ZdEdF„Zd]d dGœdHdI„Zed dœdJdK„ƒZ d dœ‡fdLdM„ Z!ddœdNdO„Z"dPdQ„Z#dd dRœdSdT„Z$dUdUd dVœdWdX„Z%‡Z&S)^r^zmanage a single block withz
Literal[1]rDcCsdSrpr;rIr;r;rKrL.szSingleBlockManager.ndimTr;Fr/r*rMrP)r˜rjrQrEcCs|g|_|f|_dSrF©rBr@)rJr˜rjrQr;r;rKrR7s
zSingleBlockManager.__init__rSrArGcCs6t|ƒdkst‚t|ƒdks t‚||d|dddS)rHrZrFr)rrr_rUr;r;rKrVDs    zSingleBlockManager.from_blocksNrzBlockValuesRefs | None)r‹r÷r~rEcCs$t|tdt|ƒƒd|d}|||ƒS)zN
        Constructor for if we have an array that is not yet a Block.
        rrZrJ)r4rarr)rTr‹r÷r~r˜r;r;rKÚ
from_arrayQszSingleBlockManager.from_arrayr?)ÚcolumnsrEcCsT|jd}t|jdd}tdƒ}t|ƒ||d|jd}||jdg}t|g|ddS)z5
        Manager analogue of Series.to_frame
        rrkrlrJF)rBrQ)r@r1r`rrbr~rBr?)rJrrcrdreZnew_blkrBr;r;rKÚ    to_2d_mgr[s 
zSingleBlockManager.to_2d_mgrrrCrwcCs|jdj ¡ S)ryrr})rJrxr;r;rKr|fsz$SingleBlockManager._has_no_referencecsTdd„ˆjDƒ}‡fdd„ˆjDƒ}tˆjƒ}d|dd„ˆjDƒdœi}||||fS)NcSsg|]
}|j‘qSr;rrúr;r;rKr‰osz3SingleBlockManager.__getstate__.<locals>.<listcomp>csg|]}ˆj|jj‘qSr;)rvr¡r¢rúrIr;rKr‰psú0.14.1cSsg|]}|j|jjdœ‘qS))r`r¡)r`r¡r¢rúr;r;rKr‰vsÿr›)r@rÿrB)rJr/Z block_itemsZ
axes_arrayZ extra_stater;rIrKÚ __getstate__ns
þþÿ zSingleBlockManager.__getstate__csdddœdd„‰t|tƒr|t|ƒdkr|d|dkr||dd}d    d
„|d Dƒ|_t|jƒ‰t‡‡fd d „|dDƒƒ|_ntdƒ‚| ¡dS)NrCr/)rLrEcSst|dd}t|||dS)NTr¯rK)r(r4)r`r¡rLr;r;rKÚunpickle_block‚s z7SingleBlockManager.__setstate__.<locals>.unpickle_blockérŸécSsg|] }t|ƒ‘qSr;)r+rr;r;rKr‰Šsz3SingleBlockManager.__setstate__.<locals>.<listcomp>rBc3s$|]}ˆ|d|dˆdVqdS)r`r¡rlNr;rú©rLr¡r;rKráŒsÿz2SingleBlockManager.__setstate__.<locals>.<genexpr>r@z*pre-0.14.1 pickles are no longer supported)r]rarrrBr@rHÚ_post_setstate)rJÚstater;r¤rKÚ __setstate__s" 
þ zSingleBlockManager.__setstate__cCsdSrFr;rIr;r;rKr¥•sz!SingleBlockManager._post_setstatecCs
|jdSrtr‘rIr;r;rKrl˜szSingleBlockManager._blockcCsdS©zcompat with BlockManagerNr;rIr;r;rKr=œszSingleBlockManager._blknoscCsdSr¨r;rIr;r;rKr>¡szSingleBlockManager._blklocsr)r¢rEcCsª|j}tƒrNt|tjƒrNt|ƒdkrNt |¡rN| ¡rNt    |ƒ|j
dd|j ƒS|  |¡}|j dkrjtdƒ‚ttdt|ƒƒƒ}t    |ƒ||d|jd}|j |}t    |ƒ||ƒS)NrFrôrZz(dimension-expanding indexing not allowedrJ)rlr
r]rŠr¸rrÚcomZis_bool_indexerrârbrºr÷Ú_slicerLr¹rrar~)rJr¢rcr‹rer˜Znew_idxr;r;rKÚ getitem_mgr¦s&ÿ
þ
ýüû
 
 
zSingleBlockManager.getitem_mgrrar)r&rjrEcCsd||jkrtdƒ‚|j}| |¡}ttdt|ƒƒƒ}t|ƒ||d|jd}|j     
|¡}t|ƒ||ƒS)Nr rrZrJ) rLrrlrªrrarrrbr~r÷Z_getitem_slice)rJr&rjrcr‹rer˜rŠr;r;rKÚ    get_slice½s
 
 zSingleBlockManager.get_slicecCs
|jdSrtrurIr;r;rKr÷ÌszSingleBlockManager.indexrcCs|jjSrF)rlr†rIr;r;rKr†ÐszSingleBlockManager.dtypercCst |jjg¡SrF)rŠr‹rlr†rIr;r;rKrŽÔszSingleBlockManager.get_dtypescCs
|j ¡S)z$The array that Series.values returns)rlÚexternal_valuesrIr;r;rKr­×sz"SingleBlockManager.external_valuescCs|jjS)z%The array that Series._values returns)rlr`rIr;r;rKÚinternal_valuesÛsz"SingleBlockManager.internal_valuescCs|jjS)z#The array that Series.array returns)rlÚ array_valuesrIr;r;rKr¯ßszSingleBlockManager.array_valuesrëcCs|jjr|j|dS| ¡S)Nrô)rlrßrºrgrÑr;r;rKröãs z#SingleBlockManager.get_numeric_datacCs|jjSrF)rlÚ _can_hold_narIr;r;rKr°èszSingleBlockManager._can_hold_nacs:tƒr(| d¡s(|j ¡f|_|j ¡tƒ ||¡dS)a'
        Set values with indexer.
 
        For Single[Block/Array]Manager, this backs s[indexer] = value
 
        This is an inplace version of `setitem()`, mutating the manager/values
        in place, not returning a new Manager (and Block), and thus never changing
        the dtype.
        rN)    r
r|rlrºr@Ú_cacheÚclearÚsuperrkr»©Ú    __class__r;rKrkìs
 
z"SingleBlockManager.setitem_inplacecCs<|j |¡d}|f|_|jd |¡|jd<|j ¡|S)zy
        Delete single location from SingleBlockManager.
 
        Ensures that self.blocks doesn't become empty.
        r)rlrhr@rBr±r²)rJr¢rfr;r;rKrzüs
 
zSingleBlockManager.ideletecCs tdƒ‚dS)zY
        fast path for getting a cross-section
        return a view of the data
        zUse series._values[loc] insteadNrG)rJrIr;r;rKrPszSingleBlockManager.fast_xs)r`rEcCs(||jd_ttt|ƒƒƒ|jd_dS)z×
        Set the values of the single block in place.
 
        Use at your own risk! This does not check if the passed values are
        valid for the current Block/SingleBlockManager (length, dtype, etc).
        rN)r@r`rrarrrS)rJr`r;r;rKÚ
set_valuess
zSingleBlockManager.set_valuesr8rcCs0|jdkrdS|jdj}|jdj}t||ƒS)r€rZFr)rLr@r`r#)rJr­ÚleftÚrightr;r;rKrs
 
  z SingleBlockManager._equal_values)F)N)r)r)F)'r•r7r8r9r<rLrOrNr:rsrRr=rVrœržr|r r§r¥rrlr=r>r«r¬r÷r†rŽr­r®r¯rör°rkrzrPr¶rÚ __classcell__r;r;r´rKr^+sVü  ÿ     
 
  r^TrSrArM)r@rBrrQrEc
Cs‚zt|||d}Wn^tk
rp}z@dd„|Dƒ}tdd„|Dƒƒ}t||djdd…||ƒW5d}~XYnX|r~| ¡|S)NrcSsg|]
}|j‘qSr;rr‡r;r;rKr‰>sz4create_block_manager_from_blocks.<locals>.<listcomp>css|]}|jdVqdS)rN)rþ)rˆrdr;r;rKrá?sz3create_block_manager_from_blocks.<locals>.<genexpr>rrZ)r?r¹rDrErþrÛ)r@rBrrQrÚerrr’rFr;r;rKÚ create_block_manager_from_blocks-s .r»rrÿ)r’rBrr~rEc
Csjzt|||ƒ}t||dd}Wn:tk
rX}ztt|ƒ|dj||ƒW5d}~XYnX|rf| ¡|S)NFrr)Ú _form_blocksr?r¹rErrrþrÛ)r’rBrr~r@rÚer;r;rKÚ'create_block_manager_from_column_arraysGs *r¾rCrzValueError | None)rFr.rBr½cCsžttt|gt|ƒƒƒ}t|ƒdkr2|ddd…}tdd„|Dƒƒ}t|ƒdkr^|ddd…}||krr|dk    rr|‚|ddkr†tdƒ‚td|›d    |›ƒ‚dS)
z.raise a helpful message about our constructionrkNrûcss|]}t|ƒVqdSrF)rrrr;r;rKránsz+raise_construction_error.<locals>.<genexpr>rz)Empty data passed with indices specified.zShape of passed values is z, indices imply )raÚmaprCrÿrrr¹)rFr.rBr½ZpassedZimpliedr;r;rKrEbs   rEztuple[int, ArrayLike]ztuple[int, bool, DtypeObj])ÚtuprEcCs2|dj}t|ƒrt|ƒ}nd}|t|tjƒ|fS)NrZr)r†rÚidr]rŠ)rÀr†Úsepr;r;rKÚ_grouping_funcs
 
 
rÃ)r’rr~rEcsütt|ƒƒ}|st||ƒ}|St |t¡}g}|D]Ä\\}}}}t|ƒ‰t|tj    ƒr´|j
dk}    t |j t tfƒrxt     t¡}tt|ƒ|ƒ\}
} |    r–t|
ƒ}
ˆ|
t| ƒdd} | | ¡q2t|ƒrڇfdd„|Dƒ} | | ¡q2‡fdd„|Dƒ} | | ¡q2|S)N)ÚmÚMrkrKcs&g|]}ˆ|dt|dƒdd‘qS)rZrrkrK)rrB©Z
block_typer;rKr‰®sÿz _form_blocks.<locals>.<listcomp>cs,g|]$}ˆt|ddƒt|dƒdd‘qS)rZrkrrK)r1rrBrÆr;rKr‰µs ý
ÿ)rÿr€Ú _tuples_to_blocks_no_consolidateÚ    itertoolsÚgroupbyrÃr3r]rŠr†ÚkindÚ
issubclassrbr“ÚbytesrNÚ _stack_arraysr'rrîrrb)r’rr~ÚtuplesròÚgrouperÚ_r†Z    tup_blockZ    is_dtliker`r\rcZ dtype_blocksr;rÆrKr¼s6 
 
 
 
þ 
ü r¼rDcCsdd„t||ƒDƒS)NcSs.g|]&\\}}}tt|ddt|ƒ|d‘qS)rkrl)r\r~)r5r1r)rˆrxrdrƒr;r;rKr‰Ás 
ý
ÿz4_tuples_to_blocks_no_consolidate.<locals>.<listcomp>)r%)rÎr~r;r;rKrÇ¿sürÇznp.dtyper…c    CsTt|Ž\}}|d}t|ƒf|j}tj||d}t|ƒD]\}}|||<q:||fS)Nrr…)r%rrrþrŠr*r€)    rÎr†r\r’ÚfirstrþZstackedrxrdr;r;rKrÍÉs 
rÍr?)r@rEc    CsZdd„}t t||d|¡}g}|D],\\}}}tt|ƒ||d\}}t||ƒ}q$t|ƒS)zJ
    Merge blocks having same dtype, exclude non-consolidating blocks
    cSs|jSrF)Z_consolidate_key)rCr;r;rKÚ<lambda>Ûóz_consolidate.<locals>.<lambda>)Úkey)r†Úcan_consolidate)rÈrÉÚsortedÚ _merge_blocksrÿr2ra)    r@ZgkeyrÏrñr#r†Z group_blocksZ merged_blocksrÐr;r;rKršÖsÿ
 ršrztuple[list[Block], bool])r@r†rÕrEc    Cs¾t|ƒdkr|dfS|r¶t dd„|Dƒ¡}t|djtjƒrTt dd„|Dƒ¡}n.dd„|Dƒ}ttt|ƒ}|dj    |dd}t 
|¡}||}||}t |ƒ}t ||d    gd
fS|dfS) NrZFcSsg|] }|jj‘qSr;rørúr;r;rKr‰ðsz!_merge_blocks.<locals>.<listcomp>rcSsg|]
}|j‘qSr;rrúr;r;rKr‰ùscSsg|]
}|j‘qSr;rr‡r;r;rKr‰ûsr‡r[T) rrrŠrýr]r†Zvstackr    rr%Z_concat_same_typeÚargsortrr5)    r@r†rÕrZ
new_valuesZbvalsZbvals2rØrer;r;rKr×çs 
r×r<)rdcCs$t |¡}| ¡d}t|||ƒS)z:Faster version of set(arr) for sequences of small numbers.r)rŠZbincountrxr%)rdÚcountsZnzr;r;rKrv
    s
 rvr)rÚlengthrcCsvt|tƒrd|t ||¡fSt|tjƒr4|jjdkrNt|ddƒ}t    t
|ƒ|ƒ‚t |ƒ}|sdt ||ƒ}d|t |ƒfSdS)Nrarxr†Zfancy)r]rar Z    slice_lenrŠr¸r†rÊr¥Ú    TypeErrorrbrr)rr)rrÚrr†r¢r;r;rKr    s
 
ý
ÿ
þ 
r)TT)N)iÚ
__future__rrÈÚtypingrrrrrrr    rtr‚ÚnumpyrŠZpandas._configr
Z pandas._libsr rËr r r Zpandas._libs.internalsrrZpandas._typingrrrrrrrZ pandas.errorsrZpandas.util._decoratorsrZpandas.util._exceptionsrZpandas.util._validatorsrZpandas.core.dtypes.castrZpandas.core.dtypes.commonrrrrZpandas.core.dtypes.dtypesr Zpandas.core.dtypes.genericr!r"Zpandas.core.dtypes.missingr#r$Zpandas.core.algorithmsÚcoreZ
algorithmsZpandas.core.arrays._mixinsr%Zpandas.core.arrays.sparser&Zpandas.core.commonÚcommonr©Zpandas.core.constructionr'r(Zpandas.core.indexersr)Zpandas.core.indexes.apir*r+Zpandas.core.internals.baser,r-r.Zpandas.core.internals.blocksr/r0r1r2r3r4r5Zpandas.core.internals.opsr6r7r8r9r?r^r»r¾rErÃr¼rÇrÍršr×rvrr;r;r;rKÚ<module>sx $     $             $     seüü0
 #