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
U
¬ý°dêjã@sLddlmZddlZddlZddlmZmZmZddl    Z
ddl m Z m ZddlmZddlmZmZmZmZmZddlmZddlmZdd    lmZmZdd
lmZm Z m!Z!m"Z"dd l#m$Z$dd l%m&Z&m'Z'dd l(m)Z)m*Z*m+Z+ddl,m-m.Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8m9Z9ddl:m;Z;m<Z<ddl=m>Z>erdddl?m@Z@ddl:mAZAdddddœdd„ZBdddœd d!„ZCdddddœd"d#„ZDddd$d%œd&d'„ZEdd(d(d)œd*d+„ZFd$d,d-œd.d/„ZGGd0d1„d1ƒZHd2ddd3œd4d5„ZId6dd7œd8d9„ZJd:d6d;œd<d=„ZKd2dd;œd>d?„ZLdd@œdAdB„ZMd1dCd1dDœdEdF„ZNdGdH„ZOdS)Ié)Ú annotationsN)Ú TYPE_CHECKINGÚSequenceÚcast)ÚNaTÚ    internals)ÚNA)Ú    ArrayLikeÚAxisIntÚDtypeObjÚManagerÚShape)Úcache_readonly)Ú astype_array)Úensure_dtype_can_hold_naÚfind_common_type)Úis_1d_only_ea_dtypeÚis_dtype_equalÚ    is_scalarÚneeds_i8_conversion)Ú concat_compat)ÚDatetimeTZDtypeÚExtensionDtype)Úis_valid_na_for_dtypeÚisnaÚisna_all)Ú DatetimeArrayÚExtensionArray)Ú SparseDtype)Úensure_wrapped_if_datetimelike)Ú ArrayManagerÚNullArrayProxy)Úensure_block_shapeÚ new_block_2d)Ú BlockManager)ÚIndex)ÚBlockz list[Index]r
Úboolr )ÚaxesÚ concat_axisÚcopyÚreturnc     säg‰|D]l\}}d}| ¡D]4\}}|j||||ddd}|dkr|dk    rd}q|rj|dkrj|sj| ¡}ˆ |¡q|dkr ‡fdd„ttˆdjƒƒDƒ}    n&|dks¬t‚tt    j
  d    d„ˆDƒ¡ƒ}    t |    |d|dgdd
}
|
S) zý
    Concatenate array managers into one.
 
    Parameters
    ----------
    mgrs_indexers : list of (ArrayManager, {axis: indexer,...}) tuples
    axes : list of Index
    concat_axis : int
    copy : bool
 
    Returns
    -------
    ArrayManager
    FT)ÚaxisÚ
allow_dupsÚ use_na_proxyéNrcs,g|]$‰t‡‡fdd„ttˆƒƒDƒƒ‘qS)csg|]}ˆ|jˆ‘qS©©Úarrays©Ú.0Úi)ÚjÚmgrsr0úSd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/internals/concat.pyÚ
<listcomp>ksz:_concatenate_array_managers.<locals>.<listcomp>.<listcomp>)Ú concat_arraysÚrangeÚlen)r4©r7)r6r8r9jsÿz/_concatenate_array_managers.<locals>.<listcomp>cSsg|]
}|j‘qSr0r1)r4Úmgrr0r0r8r9qs)Zverify_integrity) ÚitemsÚreindex_indexerr*Úappendr;r<r2ÚAssertionErrorÚlistÚ    itertoolsÚchainÚ from_iterabler ) Ú mgrs_indexersr(r)r*r>ÚindexersZaxis1_made_copyÚaxÚindexerr2Znew_mgrr0r=r8Ú_concatenate_array_managersGs0 ÿ 
þ rKrCr    )Ú    to_concatr+csêdd„|Dƒ}dd„|Dƒ}t|ƒdk}|r8|dj‰n6tdd„|Dƒƒr\t t|ƒg¡‰ntd    d„|Dƒƒ‰‡fd
d„|Dƒ}t|dtƒr¤t|dƒ}|     |¡St 
|¡}t|ƒdkræd d„|Dƒ}t|ƒdkræd |kræ|  t ¡}|S) aÈ
    Alternative for concat_compat but specialized for use in the ArrayManager.
 
    Differences: only deals with 1D arrays (no axis keyword), assumes
    ensure_wrapped_if_datetimelike and does not skip empty arrays to determine
    the dtype.
    In addition ensures that all NullArrayProxies get replaced with actual
    arrays.
 
    Parameters
    ----------
    to_concat : list of arrays
 
    Returns
    -------
    np.ndarray or ExtensionArray
    cSsg|]}t|tƒs|‘qSr0)Ú
isinstancer!©r4Úxr0r0r8r9Šs
z!concat_arrays.<locals>.<listcomp>cSsh|]
}|j’qSr0©ÚdtyperNr0r0r8Ú    <setcomp>Œsz concat_arrays.<locals>.<setcomp>r/rcss$|]}|jdkot|tjƒVqdS))r5ÚuÚbN)ÚkindrMÚnprQrNr0r0r8Ú    <genexpr>‘sz concat_arrays.<locals>.<genexpr>cSsg|]
}|j‘qSr0rP©r4Zarrr0r0r8r9•scs.g|]&}t|tƒr| ˆ¡n t|ˆdd‘qS)F©r*)rMr!Zto_arrayrrX©Z target_dtyper0r8r9—sþÿ cSsh|] }|jj’qSr0)rQrU)r4Úobjr0r0r8rR¨srT) r<rQÚallrVrrCrMrÚtypeZ_concat_same_typeÚ concatenateÚastypeÚobject)rLZto_concat_no_proxyÚdtypesZ single_dtypeÚclsÚresultÚkindsr0rZr8r:ws*  
ü 
 
 
r:cCsTt|ddtƒr t||||ƒS|dkr4t|||ƒSt||ƒ}dd„|Dƒ}t|ƒ}g}|D]è\}}|d}    |    j}
t|ƒdkrª|djsª|
j    } |rœ|  
¡} n|   ¡} d} nnt |ƒrdd„|Dƒ} |
j sØtj| dd} nt| dd} t| dd    } t| ƒ} |
j    j| jk} nt||d
} d } | r.|
j| |d }n t| |d }| |¡q\tt|ƒ|ƒS) zý
    Concatenate block managers into one.
 
    Parameters
    ----------
    mgrs_indexers : list of (BlockManager, {axis: indexer,...}) tuples
    axes : list of Index
    concat_axis : int
    copy : bool
 
    Returns
    -------
    BlockManager
    rcSsg|]\}}t||ƒ‘qSr0)Ú_get_mgr_concatenation_plan)r4r>rHr0r0r8r9Ïsz(concatenate_managers.<locals>.<listcomp>r/TcSsg|] }|jj‘qSr0)ÚblockÚvalues©r4Zjur0r0r8r9ás©r,é)ÚndimrYF)Ú    placement)rMr rKÚ_concat_managers_axis0Ú_maybe_reindex_columns_na_proxyÚ_combine_concat_plansrfr<rHrgr*ÚviewÚ_is_uniform_join_unitsÚ is_extensionrVr^rr"rrQÚ_concatenate_join_unitsZmake_block_same_classr#rAr$Útuple)rGr(r)r*Z concat_plansZ concat_planÚblocksrlÚ
join_unitsÚunitÚblkrgZfastpathÚvalsrTr0r0r8Úconcatenate_managers¯sD 
ÿ 
 
     rzr$)r(r*r+c sƇfdd„ttˆƒƒDƒ}t|ˆƒ‰dd„ˆDƒ}d}g}t|ƒD]p\}}||}    |jD]J}
|    rn|
jdd} n|r||
 ¡} n|
 tdƒ¡} | j     |¡| _| 
| ¡qX|t|j ƒ7}qBt t |ƒ|ƒ} | S)    zˆ
    concat_managers specialized to concat_axis=0, with reindexing already
    having been done in _maybe_reindex_columns_na_proxy.
    cs"i|]}|tˆ|dƒdk“qS)r/r)r<r3©rGr0r8Ú
<dictcomp>sz*_concat_managers_axis0.<locals>.<dictcomp>cSsg|] }|d‘qS)rr0rNr0r0r8r9
sz*_concat_managers_axis0.<locals>.<listcomp>rF)ÚdeepN)r;r<rnÚ    enumeraterur*Ú getitem_blockÚsliceZ    _mgr_locsÚaddrAr?r$rt) rGr(r*Zhad_reindexersr7Úoffsetrur5r>Z    made_copyrxÚnbrcr0r{r8rmþs(
 
ÿ
 
 
 rmz0list[tuple[BlockManager, dict[int, np.ndarray]]])r(rGr+c CsVg}|D]H\}}| ¡D](\}}|j|||||ddddd}q| |if¡q|S)zô
    Reindex along columns so that all of the BlockManagers being concatenated
    have matching columns.
 
    Columns added in this reindexing have dtype=np.void, indicating they
    should be ignored when choosing a column's final dtype.
    FT)r,r*Z
only_slicer-r.)r?r@rA)r(rGZnew_mgrs_indexersr>rHr5rJr0r0r8rn$s
 ù    rnzdict[int, np.ndarray])r>rHcCs`t|ƒdkst‚t|jƒ}| ¡D]\}}t|ƒ||<q"t|ƒ}d|ksLt‚|jrp|jd}|jt    |||ƒfgS|j
}|j }g}    t j |ddD]Ì\}
} | js t‚|
dks¬t‚| ¡} t|ƒ} t| ƒ| d<t| ƒ}|j|
}|| j}t| ƒt|jƒko"|jjr|jjjdkp"t |¡dk ¡}|r8|  dd¡n|| d<t    ||| ƒ}|     | |f¡qŽ|    S)zø
    Construct concatenation plan for given block manager and indexers.
 
    Parameters
    ----------
    mgr : BlockManager
    indexers : dict of {axis: indexer}
 
    Returns
    -------
    plan : list of (BlockPlacement, JoinUnit) tuples
 
    rF)Úgroupéÿÿÿÿr/N)r<rBrCÚshaper?rtZis_single_blockruZmgr_locsÚJoinUnitÚblknosÚblklocsÚ libinternalsZget_blkno_placementsZ is_slice_liker*rJZas_sliceÚsteprVZdiffr\ÚpoprA)r>rHZmgr_shape_listrIrJZ    mgr_shaperxrˆr‰ZplanZblknoÚ
placementsZjoin_unit_indexersZ
shape_listr†Zax0_blk_indexerZunit_no_ax0_reindexingrwr0r0r8reAs>
 
 
 
 
ó rec@s„eZdZdddddœdd„Zdd    œd
d „Zed d    œd d„ƒZedd    œdd„ƒZdd dœdd„Zed d    œdd„ƒZ    dddœdd„Z
dS)r‡Nr&r ÚNone)rfr†r+cCs"|dkr i}||_||_||_dS©N©rfrHr†)Úselfrfr†rHr0r0r8Ú__init__Žs
zJoinUnit.__init__Ústr©r+cCs$t|ƒj›dt|jƒ›d|j›dS)Nú(z, ú))r]Ú__name__ÚreprrfrH)r‘r0r0r8Ú__repr__—szJoinUnit.__repr__r'cCs&|j ¡D]}|dk ¡r
dSq
dS)Nr…TF)rHrgÚany)r‘rJr0r0r8Ú needs_fillingšs zJoinUnit.needs_fillingr cCs2|j}|jjjdkrtdƒ‚|js(|jSt|jƒS)NÚVzBlock is None, no dtype)rfrgrQrUrBr›r)r‘rxr0r0r8rQ£s zJoinUnit.dtype)rQr+csŠ|js
dS|jjjdkrdS|jtkrL|jj}t‡fdd„|jddDƒƒS|jj}|t    krlt
|jˆƒsldS|t kr€t ˆƒr€dSt |ˆƒS)z¯
        Check that we are all-NA of a type/dtype that is compatible with this dtype.
        Augments `self.is_na` with an additional check of the type of NA values.
        FrœTc3s|]}t|ˆƒVqdSr)rrNrPr0r8rW¹sz,JoinUnit._is_valid_na_for.<locals>.<genexpr>ÚK©Úorder)Úis_narfrQrUr`rgr\ÚravelÚ
fill_valuerrrrr)r‘rQrgÚna_valuer0rPr8Ú_is_valid_na_for­s
zJoinUnit._is_valid_na_forcCs¨|j}|jjdkrdS|js dS|j}|jdkr4dSt|jtƒrDdS|jdkrr|d}t    |ƒrft
|ƒsjdSt |ƒS|dd}t    |ƒrŽt
|ƒs’dSt dd„|DƒƒSdS)NrœTFrr/css|]}t|ƒVqdSr)r)r4Úrowr0r0r8rWæsz!JoinUnit.is_na.<locals>.<genexpr>) rfrQrUZ _can_hold_nargÚsizerMrrkrrrr\)r‘rxrgÚvalr0r0r8r Ës& 
 
 zJoinUnit.is_nar    )Ú empty_dtyper+cCsì|dkr*|jjjdkr*|jj}|jj}n†|}| |¡rn|jj}|t d¡krx|jjjdd}t|ƒrx|ddkrxd}t    |t
ƒržt  |j |j ¡}t||dSt|ƒrt||ƒrº|jrºn`tt|ƒ}| ¡}|jg|d}|j \}    }
|    dksôt|    ƒ‚dtj|
ftjd} |j| d    |d
SnRt    |tƒrP| ¡}|j|j |d }||dd…<|Stj|j |d}| |¡|S|jsˆ|jjsˆ|jjS|jjr¨|j t d¡¡j}n|jj}|jsÂ|  ¡}n&|j !¡D]\} } t"j#|| | d }qÌ|S) Nrœr`rržrrPr/r…T)Z
allow_fillr¢)r†rQri)$rfrQrUr¢rgr¤rVr¡r<rMrÚfullr†Ú_valuerrrrHrrZconstruct_array_typeZ_from_sequencerBZonesZintpZtakeÚ_emptyÚemptyÚfillZ_can_consolidateZis_boolr_rpr?ÚalgosZtake_nd)r‘r¨Ú upcasted_nar¢rgZ    blk_dtypeZi8valuesrbZ missing_arrZncolsZnrowsZ    empty_arrrIrJr0r0r8Úget_reindexed_valuesèsZ  
 
 
 
ÿ  
 
 
zJoinUnit.get_reindexed_values)N) r—Ú
__module__Ú __qualname__r’r™rr›rQr¤r r°r0r0r0r8r‡s        r‡zlist[JoinUnit])rvr*r+csÄt|ƒ‰tdd„|Dƒƒ}tˆ|ƒ‰‡‡fdd„|Dƒ}t|ƒdkrz|d}|rÀt|tjƒrp|jdk    rx| ¡}qÀ| ¡}nFtdd„|Dƒƒr´d    d„|Dƒ}t    |dd
d }t
|d ƒ}n t    |dd }|S)zB
    Concatenate values from several join units along axis=1.
    css|]}|jjjdkVqdS©rœN©rfrQrU©r4rwr0r0r8rWAsz*_concatenate_join_units.<locals>.<genexpr>csg|]}|jˆˆd‘qS)©r¨r¯)r°rhr¶r0r8r9Dsÿz+_concatenate_join_units.<locals>.<listcomp>r/rNcss|]}t|jƒVqdSr©rrQ©r4Útr0r0r8rWUscSs*g|]"}t|jƒr|n|ddd…f‘qS)rNr·r¸r0r0r8r9ZsþÿT)r,Zea_compat_axisrjri) Ú_get_empty_dtyperšÚ_dtype_to_na_valuer<rMrVZndarrayÚbaser*rr")rvr*Úhas_none_blocksrLZ concat_valuesr0r¶r8rs;s*
 þ  
 
 
ü  rsr ©rQr½cCsvt|tƒr|jS|jdkr$| d¡S|jdkr8| d¡S|jdkrFdS|jdkr^|sXdStjS|jdkrntjSt‚dS)    z2
    Find the NA value to go with this dtype.
    )ÚmÚMr)ÚfÚcÚNaNrTN)r5rSÚO)rMrr£rUr]rVÚnanÚNotImplementedErrorr¾r0r0r8r»is
 
 
 
 
 
 
 
r»zSequence[JoinUnit])rvr+cCs‚t|ƒdkr|dj}|jSt|ƒr4|djj}|Stdd„|Dƒƒ}dd„|Dƒ}t|ƒsjdd„|Dƒ}t|ƒ}|r~t|ƒ}|S)zÂ
    Return dtype and N/A values to use when concatenating specified units.
 
    Returned N/A value may be None which means there was no casting involved.
 
    Returns
    -------
    dtype
    r/rcss|]}|jjjdkVqdSr³r´rµr0r0r8rW’sz#_get_empty_dtype.<locals>.<genexpr>cSsg|]}|js|j‘qSr0)r rQrµr0r0r8r9”sz$_get_empty_dtype.<locals>.<listcomp>cSs g|]}|jjjdkr|j‘qS)rœr´rµr0r0r8r9–s)r<rfrQÚ_is_uniform_reindexršrr)rvrxr¨r½rarQr0r0r8rº€s
 
 rºcsv|dj‰ˆjjdkrdSt‡fdd„|Dƒƒott‡fdd„|Dƒƒottdd„|Dƒƒottdd„|Dƒƒott|ƒd    kS)
    Check if the join units consist of blocks of uniform type that can
    be concatenated using Block.concat_same_type instead of the generic
    _concatenate_join_units (which uses `concat_compat`).
 
    rrœFc3s |]}t|jƒtˆƒkVqdSr)r]rfrh©Úfirstr0r8rWªsz)_is_uniform_join_units.<locals>.<genexpr>c3s,|]$}t|jjˆjƒp"|jjjdkVqdS))rTr5rSN)rrfrQrUrhrÈr0r8rW­sücss|]}|j p|jjVqdSr)r rfrrrhr0r0r8rW·scss|]}|j VqdSr)rHrhr0r0r8rWºsr/)rfrQrUr\r<©rvr0rÈr8rqžs
  ûý óð
ërqr”cCs(tdd„|Dƒƒo&tdd„|DƒƒdkS)Ncss|]}|jjVqdSr)rfrrrhr0r0r8rWÄsz&_is_uniform_reindex.<locals>.<genexpr>cSsh|]}|jjj’qSr0)rfrQÚnamerhr0r0r8rRÅsz&_is_uniform_reindex.<locals>.<setcomp>r/)r\r<rÊr0r0r8rÇÁsýrÇÚint)Ú    join_unitÚlengthr+cCsÆd|jkrF|j}|jdkr d}q„|j t|dƒ¡}|j t|ƒ¡|_n>|j}t |j¡}|d|d…|d<|jdd|…|jd<|jd|f|jdd…}|f|jdd…|_t|||dS)z€
    Reduce join_unit's shape along item axis to length.
 
    Extra items that didn't fit are returned as a separate block.
    rNr/r)rHrfrr€Úcpr*r†r‡)rÍrÎZextra_indexersZ extra_blockZ extra_shaper0r0r8Ú_trim_join_unitÉs
 
 rÐc#sZt|ƒdkr2|dD]}|d|dgfVqn$dg‰‡fdd„}ttt|ƒƒ}tt||ƒƒ}ˆdt|ƒkrVˆddkr†tdƒ‚t|Ž\}}ttt|ƒƒ}t|ƒt|ƒ}}||krÜ|d|fVt||ƒ|dd…<q`d}    dgt|ƒ}
t|ƒD]R\} \} } | |
| <t| ƒ|kr4| |d…t    | |ƒf|| <qö| }    ||| ƒ|| <qö|    |
fVq`dS)z
    Combine multiple concatenation plans into one.
 
    existing_plan is updated in-place.
 
    We only get here with concat_axis == 1.
    r/rcs&t|dƒ}|dkr"ˆdd7<|S)Nrr/)Únext)ÚseqÚretval©Z    num_endedr0r8Ú _next_or_noneôs
z,_combine_concat_plans.<locals>._next_or_nonezPlan shapes are not alignedN)
r<rCÚmapÚiterÚ
ValueErrorÚzipÚminÚmaxr~rÐ)ZplansÚprÕZ
next_itemsrZunitsÚlengthsZmin_lenÚmax_lenZyielded_placementZ yielded_unitsr5Zplcrwr0rÔr8roäs2     ro)PÚ
__future__rr*rÏrDÚtypingrrrÚnumpyrVZ pandas._libsrrrŠZpandas._libs.missingrZpandas._typingr    r
r r r Zpandas.util._decoratorsrZpandas.core.dtypes.astyperZpandas.core.dtypes.castrrZpandas.core.dtypes.commonrrrrZpandas.core.dtypes.concatrZpandas.core.dtypes.dtypesrrZpandas.core.dtypes.missingrrrZpandas.core.algorithmsÚcoreZ
algorithmsr®Zpandas.core.arraysrrZpandas.core.arrays.sparserZpandas.core.constructionrZ#pandas.core.internals.array_managerr r!Zpandas.core.internals.blocksr"r#Zpandas.core.internals.managersr$Zpandasr%r&rKr:rzrmrnrer‡rsr»rºrqrÇrÐror0r0r0r8Ú<module>sN          08O&L/.#