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
U
¬ý°d҉ã@sNdZddlmZddlmZddlmZmZmZddl    Z
ddl    m Z ddl m Z ddlmZmZmZmZdd    lmZdd
lmZmZmZmZmZdd lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'dd l(m)Z)m*Z*ddl+m,Z,m-Z.ddl/m0Z0m1Z1m2Z2m3Z3ddl4m5Z5ddl6m7Z7m8Z8m9Z9m:Z:ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBddlCmDZDmEZEddlFmGZGmHZHmIZIddlJmKZKmLZLmMZMmNZNdddddœdddddddœdd„ZOd ddd!dd"œd#d$„ZPdud!dd%œd&d'„ZQddd!dd(œd)d*„ZRd+ddd,d-œd.d/„ZSdd0dd1œd2dd!ddd3œd4d5„ZTd6d7d7dd8d9œd:d;„ZUdd<œd=d>„ZVdvdd+d?œd@dA„ZWd+d+dBœdCdD„ZXdddEdFœdGdH„ZYdd<œdIdJ„ZZdKdd7dLdMdNœdOdP„Z[dd<œdQdR„Z\dLdLd7d7dSdTœdUdV„Z]dWdX„Z^dwd7ddMdYœdZd[„Z_d\d+d]œd^d_„Z`d`d7dadbœdcdd„Zaded7dadbœdfdg„Zbd+d7ddMdhœdidj„Zcdkd7ddlœdmdn„Zddxdqdd!ddKdrœdsdt„ZedS)yz~
Functions for preparing various inputs passed to the DataFrame or Series
constructors before passing them to a BlockManager.
é)Ú annotations)Úabc)ÚAnyÚHashableÚSequenceN)Úma)Úlib)Ú    ArrayLikeÚDtypeObjÚManagerÚnpt)Úastype_is_view)Ú"construct_1d_arraylike_from_scalarÚ dict_compatÚmaybe_cast_to_datetimeÚmaybe_convert_platformÚmaybe_infer_to_datetimelike)
Úis_1d_only_ea_dtypeÚ is_bool_dtypeÚis_datetime_or_timedelta_dtypeÚis_dtype_equalÚis_extension_array_dtypeÚis_float_dtypeÚis_integer_dtypeÚ is_list_likeÚis_named_tupleÚis_object_dtype)ÚExtensionDtype)Ú ABCDataFrameÚ    ABCSeries)Ú
algorithmsÚcommon)Ú BooleanArrayÚExtensionArrayÚ FloatingArrayÚ IntegerArray)Ú StringDtype)Úensure_wrapped_if_datetimelikeÚ extract_arrayÚrange_to_ndarrayÚsanitize_array)Ú DatetimeIndexÚIndexÚTimedeltaIndexÚ default_indexÚ ensure_indexÚget_objs_combined_axisÚ union_indexes)Ú ArrayManagerÚSingleArrayManager)ÚBlockPlacementÚensure_block_shapeÚ new_block_2d)Ú BlockManagerÚSingleBlockManagerÚ create_block_manager_from_blocksÚ'create_block_manager_from_column_arraysT)ÚdtypeÚverify_integrityÚtypÚ consolidater,zDtypeObj | NoneÚboolz
str | Noner )Úcolumnsr;r<r=r>Úreturnc
Csú|r0|dkrt|ƒ}nt|ƒ}t|||ƒ\}}n`t|ƒ}dd„|Dƒ}dgt|ƒ}|D]6}t|tjtfƒr†|jdks†t|ƒt|ƒkrXt    dƒ‚qXt|ƒ}t|ƒt|ƒkr°t    dƒ‚||g}    |dkrÐt
||    ||dS|d    kræt |||gƒSt    d
|›d ƒ‚dS) zs
    Segregate Series based on type and coerce into matrices.
 
    Needs to handle a lot of exceptional cases.
    NcSsg|]}t|dd‘qS)T©Z extract_numpy)r(©Ú.0Úx©rFúYd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/internals/construction.pyÚ
<listcomp>sz!arrays_to_mgr.<locals>.<listcomp>ézYArrays must be 1-dimensional np.ndarray or ExtensionArray with length matching len(index)z#len(arrays) must match len(columns)Úblock)r>ÚrefsÚarrayú2'typ' needs to be one of {'block', 'array'}, got 'ú') Ú_extract_indexr/Ú _homogenizeÚlenÚ
isinstanceÚnpÚndarrayr#ÚndimÚ
ValueErrorr:r2)
Úarraysr@Úindexr;r<r=r>rKÚarrÚaxesrFrFrGÚ arrays_to_mgras@
ÿþýÿÿr[znp.recarray | np.ndarrayÚstr)Údatar;Úcopyr=rAc
CsŠt |¡}|dkr tt|ƒƒ}nt|ƒ}|dk    r8t|ƒ}t||ƒ\}}t|||t|ƒƒ\}}|dkrh|}t|||||d}    |r†|     ¡}    |    S)zA
    Extract from a masked rec array and create the manager.
    N©r;r=)    rZgetdatar.rQr/Ú    to_arraysÚreorder_arraysr[r^)
r]rXr@r;r^r=ÚfdatarWÚ arr_columnsÚmgrrFrFrGÚrec_array_to_mgr¢s
re)r=r^cs|dkrXtˆtƒrˆ}qþˆjdkrBtˆjˆjdˆjddd}qþt ˆjdˆj¡}n¦|dkrîtˆt    ƒrpˆ}qþˆjdkrȇfdd„t
t ˆjdƒƒDƒ}|r¬d    d„|Dƒ}t    |ˆjdˆjdgƒ}qþˆ  ¡}|rÜ|  ¡}t|gˆjgƒ}ntd
|›d ƒ‚|S) zè
    Convert to specific type of Manager. Does not copy if the type is already
    correct. Does not guarantee a copy otherwise. `copy` keyword only controls
    whether conversion from Block->ArrayManager copies the 1D arrays.
    rJérrI)r=rLcsg|]}ˆ |¡‘qSrF)Z iget_values©rDÚi©rdrFrGrHÜszmgr_to_mgr.<locals>.<listcomp>cSsg|] }| ¡‘qSrF©r^©rDrYrFrFrGrHÞsrMrN)rRr7rUr[rWrZr8Z
from_arrayrXr2ÚrangerQZinternal_valuesr^r3rV)rdr=r^Znew_mgrrWrLrFrirGÚ
mgr_to_mgrÅs2
 
ÿ
 
 rm)r;r^r=rAcsâtˆtƒrh|dkr(ˆjdk    r(tˆjgƒ}|dkr8ˆj}n
ˆ |¡‰tˆƒsh|dk    rht|ƒrhtjdt    d‰|dkrtdn|}t
ˆddƒ}d}t |ƒsšt |ƒr tˆtj t fƒr҈jdkr҇fdd„tˆjdƒDƒ‰nˆg‰|dkròtttˆƒƒƒ}nt|ƒ}tˆ||||d    St|ƒrJtˆd
d ‰|r0ˆ ¡‰ˆjdkröˆ d d¡‰n¬tˆttfƒr |s~|dksxtˆj|ƒr~ˆj}|rˆj ¡‰nˆj‰tˆƒ‰nVtˆtj t fƒrê|dksÊtˆj|ƒrÎ|nd}    tjˆ|    d ‰tˆƒ‰n tˆ|d ‰|dk    r tˆj|ƒs tˆd||d
d‰t ˆjdˆjd||d\}}t!ˆ||ƒ|dkrþt"ˆjj#t$ƒrttjˆt    d‰|dkr¨t%ˆjƒr¨‡fdd„tˆjdƒDƒ}
n0t&ˆjƒr¼t'ˆƒ‰‡fdd„tˆjdƒDƒ}
|rìdd„|
Dƒ}
t(|
||gddSˆj)‰|dkršt%ˆjƒršt*ˆƒ} dd„| Dƒ} t+dd„t,| | ƒDƒƒrtdd„| Dƒ‰‡fdd„ttˆƒƒDƒ} n$t-t.t|ƒƒƒ}t/ˆ||d}|g} n$t-t.t|ƒƒƒ}t/ˆ||d}|g} t|ƒdkrÐg} t0| ||gddS)N)rrI©r;rLFr;rIcsg|]}ˆdd…|f‘qS©NrF©rDÚn©ÚvaluesrFrGrHsÿz"ndarray_to_mgr.<locals>.<listcomp>r_TrBéÿÿÿÿrj)r;r^Zallow_2dr)rXr@cs$g|]}ttˆdd…|fƒƒ‘qSro)r'rrgrrrFrGrHXsýÿcsg|]}ˆdd…|f‘qSrorFrgrrrFrGrHascSsg|] }| ¡‘qSrFrjrkrFrFrGrHds)r<cSsg|] }t|ƒ‘qSrF)rrCrFrFrGrHoscss|]\}}||k    VqdSrorF)rDrEÚyrFrFrGÚ    <genexpr>qsz!ndarray_to_mgr.<locals>.<genexpr>cSsg|]}t|dƒ‘qS)rf)r5)rDÚdvalrFrFrGrHrscs g|]}tˆ|t|ƒd‘qS))Ú    placement)r6r4rp)Ú
dvals_listrFrGrHssÿ)rxrK)1rRrÚnamer,rXÚreindexrQrSÚemptyÚobjectÚgetattrrrTr#rUrlÚshaper/r[rr(r^Úreshaper r;Ú _referencesÚ_valuesÚ
_ensure_2drLÚ_prep_ndarraylikerr*Ú    _get_axesÚ!_check_values_indices_shape_matchÚ
issubclassÚtyper\rrr'r2ÚTÚlistÚanyÚzipr4Úslicer6r9)rsrXr@r;r^r=Zcopy_on_sanitizeZvdtyperKZ_copyrWZ obj_columnsZmaybe_datetimeZ block_valuesZbpÚnbrF)ryrsrGÚndarray_to_mgrîsÆ
 
 
 
 þ
  ÿ
ÿ 
ÿ
ÿý
 û    ÿ
 
 
 ü 
 
þÿrz
np.ndarrayÚNone)rsrXr@rAcCsh|jdt|ƒks$|jdt|ƒkrd|jddkr:tdƒ‚|j}t|ƒt|ƒf}td|›d|›ƒ‚dS)z\
    Check that the shape implied by our axes matches the actual shape of the
    data.
    rIrz)Empty data passed with indices specified.zShape of passed values is z, indices imply N)rrQrV)rsrXr@ZpassedZimpliedrFrFrGr†‰s $r†rJ)r;r=r^Údict)r]r;r=r^rAcs†|dk    rddlm}|ˆ|td}| ¡}|dkrDt||ƒ}nt|ƒ}| ¡rðt|ƒsð|dk    rœ|j     ¡d}    |    D]"}
t
|j |
||d} | |j |
<qvnTt   d¡} tt jt|ƒ| ƒ‰| ¡} |rЈg| }n‡fdd„t| ƒDƒ}||j|<t|ƒ}t|ƒ}nBtˆ ¡ƒ}|rt|ƒntdƒ}‡fd    d„|Dƒ}d
d„|Dƒ}|rr|d krdd d„|Dƒ}nd d„|Dƒ}t||||||dS)z’
    Segregate Series based on type and coerce into matrices.
    Needs to handle a lot of exceptional cases.
 
    Used in DataFrame.__init__
    Nr)ÚSeries)rXr;rnr}csg|] }ˆ ¡‘qSrFrj)rDÚ_)ÚvalrFrGrHÌszdict_to_mgr.<locals>.<listcomp>csg|]}t ˆ|¡‘qSrF)ÚcomZmaybe_iterable_to_list©rDÚk©r]rFrGrHÕscSs g|]}t|tƒs|n|j‘qSrF)rRr,Ú_datarkrFrFrGrHÖsrJcSs"g|]}t|tƒr| ¡n|‘qSrF)rRr#r^rCrFrFrGrHÜscSs"g|]}t|dƒr| ¡n|‘qSrn)Úhasattrr^rCrFrFrGrHßs)r;r=r>)Zpandas.core.seriesr’r}ZisnarOr/r‹rrsZnonzeror*ZiatrSr;rÚnanrQÚsumrlÚlocrŠÚkeysr,r.r[)r]rXr@r;r=r^r’rWÚmissingZmidxsrhrYZ    nan_dtypeZnmissingÚrhsržrF)r]r”rGÚ dict_to_mgr›s>
 
 
 
 
r¡rz Index | Nonez$tuple[list[ArrayLike], Index, Index])r]r@rXr;rAcCsrt|dƒr"|dkr"t|djƒ}t|||d\}}t|ƒ}|dkrht|dtƒr\t|ƒ}n tt|ƒƒ}|||fS)zA
    Convert a single sequence of arrays to multiple arrays.
    rNrn)    rr/Ú_fieldsr`rRrÚ_get_names_from_indexr.rQ)r]r@rXr;rWrFrFrGÚnested_data_to_arraysäs 
 r¤)rAcCsBt|ƒdko@t|dƒo@t|dddƒdko@t|tƒo>|jdk S)z7
    Check if we should use nested_data_to_arrays.
    rrUrIrf)rQrr~rRr#rUr˜rFrFrGÚtreat_as_nestedþs 
ÿþür¥)r^rAcs°t|ƒdkrtjdtdSt|tƒr:t|ƒ}|dtjfSdd„‰t|dƒrht     ‡fdd„|Dƒ¡}n@t|dtj
ƒr |dj dkr t     ‡fd    d„|Dƒ¡}nˆ|ƒ}t |ƒS)
Nr)rrrn.cSs.t|ƒrt|tƒr|St|dd}t|ƒ}|S)NTrB)rrRrr(r)ÚvÚresrFrFrGÚconverts
 z"_prep_ndarraylike.<locals>.convertcsg|] }ˆ|ƒ‘qSrFrF©rDr¦©r¨rFrGrH)sz%_prep_ndarraylike.<locals>.<listcomp>csg|] }ˆ|ƒ‘qSrFrFr©rªrFrGrH,s) rQrSr|r}rRrlr)ZnewaxisrrLrTrUrƒ)rsr^rYrFrªrGr„ s 
 r„)rsrAcCs>|jdkr | |jddf¡}n|jdkr:td|j›ƒ‚|S)zB
    Reshape 1D values, raise on anything else other than 2D.
    rIrrfzMust pass 2-d input. shape=)rUr€rrVrrrFrFrGrƒ3s
 
 
rƒz!tuple[list[ArrayLike], list[Any]])rXr;rAcCsêd}g}g}|D]Ð}t|tƒr`|dk    r4|j|dd}|j|k    rL|j|dd}| |j¡|j}nvt|tƒr°|dkr|| d¡}t|t    t
fƒr”t |ƒ}nt|ƒ}t j ||jtjd}t|||dd}t ||¡| d¡| |¡q||fS)NFrjÚO)Údefault©r;r^)rRrZastyperXr{Úappendrr‚r‘r+r-rrZ fast_multigetrSr›r*r•Zrequire_length_match)r]rXr;ZoindexZ homogenizedrKr”rFrFrGrP>s.
 
 
 
 
 
 rPc
Cslt|ƒdkrtdƒSg}g}d}d}d}|D]Œ}t|tƒrLd}| |j¡q,t|tƒrnd}| t| ¡ƒ¡q,t    |ƒršt
|ddƒdkršd}| t|ƒ¡q,t|t j ƒr,|j dkr,tdƒ‚q,|sÊ|sÊtdƒ‚|rØt|ƒ}n|rèt|dd}|rdtt|ƒƒ}t|ƒdkrtd    ƒ‚|rtd
ƒ‚|rX|dt|ƒkrdd |d›d t|ƒ›}    t|    ƒ‚n t|dƒ}t|ƒS) zR
    Try to infer an Index from the passed data, raise ValueError on failure.
    rFTrUrIz,Per-column arrays must each be 1-dimensionalz2If using all scalar values, you must pass an index©Úsortz%All arrays must be of the same lengthz<Mixing dicts with non-Series may lead to ambiguous ordering.z array length z does not match index length )rQr.rRrr®rXr‘rŠržrr~rSrTrUrVr1Úsetr/)
r]Z raw_lengthsZindexesZhave_raw_arraysZ have_seriesZ
have_dictsr”rXÚlengthsÚmsgrFrFrGrOhsP 
 
 
 
  ÿÿ
 rOzlist[ArrayLike]Úintztuple[list[ArrayLike], Index])rWrcr@ÚlengthrAc    Cs€|dk    rx| |¡sxdgt|ƒ}| |¡}t|ƒD]<\}}|dkr^tj|td}| tj¡n||}|||<q2|}|}||fS)zB
    Pre-emptively (cheaply) reindex arrays with new columns.
    Nrtrn)    ÚequalsrQÚ get_indexerÚ    enumeraterSr|r}Úfillr›)    rWrcr@rµZ
new_arraysÚindexerrhr—rYrFrFrGra£s
 
 
racCs„tdd„|Dƒƒ}|s"tt|ƒƒSttt|ƒƒƒ}d}t|ƒD]<\}}t|ddƒ}|dk    rd|||<q>d|›||<|d7}q>t|ƒS)Ncss|]}t|ddƒdk    VqdS)rzN)r~)rDÚsrFrFrGrvÃsz(_get_names_from_index.<locals>.<genexpr>rrzzUnnamed rI)r‹r.rQrŠrlr¸r~r,)r]Z has_some_namerXÚcountrhr»rqrFrFrGr£Âs  
 
r£ztuple[Index, Index])ÚNÚKrXr@rAcCs<|dkrt|ƒ}nt|ƒ}|dkr,t|ƒ}nt|ƒ}||fSro)r.r/)r½r¾rXr@rFrFrGr…Ôs
 
r…cCsddlm}tt||ƒƒS)a·
    Converts a list of dataclass instances to a list of dictionaries.
 
    Parameters
    ----------
    data : List[Type[dataclass]]
 
    Returns
    --------
    list_dict : List[dict]
 
    Examples
    --------
    >>> from dataclasses import dataclass
    >>> @dataclass
    ... class Point:
    ...     x: int
    ...     y: int
 
    >>> dataclasses_to_dicts([Point(1, 2), Point(2, 3)])
    [{'x': 1, 'y': 2}, {'x': 2, 'y': 3}]
 
    r)Úasdict)Z dataclassesr¿rŠÚmap)r]r¿rFrFrGÚdataclasses_to_dictsæs rÁ)r@r;rAcs¸tˆtƒrVˆdk    r.‡‡fdd„tˆjƒDƒ}n ˆj‰‡fdd„ttˆƒƒDƒ}|ˆfStˆƒsätˆtjƒr؈jj    dk    rØt
ˆjj    ƒ‰‡fdd„ˆDƒ}tˆƒdkrÐt|ƒD]&\}}|j dkr¨|dd…df||<q¨|ˆfSgt
gƒfStˆtjƒr*ˆjj    dk    r*t t ˆjj    ƒƒ‰‡fdd„ˆDƒ}|ˆfStˆdt tfƒrHtˆƒ}nXtˆdtjƒrjtˆˆƒ\}‰n6tˆdtƒrŠtˆˆƒ\}‰nd    d„ˆDƒ‰tˆƒ}t|ˆ|ƒ\}‰|ˆfS)
a    
    Return list of arrays, columns.
 
    Returns
    -------
    list[ArrayLike]
        These will become columns in a DataFrame.
    Index
        This will become frame.columns.
 
    Notes
    -----
    Ensures that len(result_arrays) == len(result_index).
    Ncs(g|] \}}|ˆkrˆj|ddj‘qS©rI)Zaxis©Z_ixsr‚)rDrhÚcol©r@r]rFrGrHsþzto_arrays.<locals>.<listcomp>csg|]}ˆj|ddj‘qSrÂrÃrgr˜rFrGrH"scsg|] }ˆ|‘qSrFrF)rDrzr˜rFrGrH+srrfcsg|] }ˆ|‘qSrFrFr–r˜rFrGrH:scSsg|] }t|ƒ‘qSrF)ÚtuplerCrFrFrGrHEs)rRrr¸r@rlrQrSrTr;Únamesr/rUr,rŠrÆÚ_list_to_arraysrÚMappingÚ_list_of_dict_to_arraysrÚ_list_of_series_to_arraysÚ_finalize_columns_and_data)r]r@r;rWrhrYÚcontentrFrÅrGr`sB
 þ    
 
r`zlist[tuple | list])r]rAcCs(t|dtƒrt |¡}n
t |¡}|S)Nr)rRrÆrZto_object_array_tuplesZto_object_array)r]rÍrFrFrGrÈLs 
rÈrŠztuple[np.ndarray, Index])r]r@rAc
Cs´|dkr"dd„|Dƒ}t|dd}i}g}|D]r}t|ddƒ}|dkrRtt|ƒƒ}t|ƒ|krl|t|ƒ}n| |¡}|t|ƒ<t|dd}| t     ||¡¡q.t
  |¡}    |    |fS)NcSsg|]}t|ttfƒr|‘qSrF)rRrrrCrFrFrGrH_sz-_list_of_series_to_arrays.<locals>.<listcomp>Fr¯rXTrB) r0r~r.rQÚidr·r(r®r Ztake_ndrSZvstack)
r]r@Z    pass_dataZ indexer_cacheZaligned_valuesr»rXrºrsrÍrFrFrGrËWs      
rËz
list[dict]cCsf|dkr@dd„|Dƒ}tdd„|Dƒƒ }tj||d}t|ƒ}dd„|Dƒ}t |t|ƒ¡}||fS)a
    Convert list of dicts to numpy arrays
 
    if `columns` is not passed, column names are inferred from the records
    - for OrderedDict and dicts, the column names match
      the key insertion-order from the first record to the last.
    - For other kinds of dict-likes, the keys are lexically sorted.
 
    Parameters
    ----------
    data : iterable
        collection of records (OrderedDict, dict)
    columns: iterables or None
 
    Returns
    -------
    content : np.ndarray[object, ndim=2]
    columns : Index
    Ncss|]}t| ¡ƒVqdSro)rŠržrCrFrFrGrvŽsz*_list_of_dict_to_arrays.<locals>.<genexpr>css|]}t|tƒVqdSro)rRr‘©rDÚdrFrFrGrvsr¯cSs$g|]}t|ƒtkr|nt|ƒ‘qSrF)rˆr‘rÏrFrFrGrH•sz+_list_of_dict_to_arrays.<locals>.<listcomp>)r‹rZfast_unique_multiple_list_genr/Zdicts_to_arrayrŠ)r]r@Úgenr°Zpre_colsrÍrFrFrGrÊvsrÊ)rÍr@r;rAc
Csrt|jƒ}zt||ƒ}Wn,tk
rD}zt|ƒ|‚W5d}~XYnXt|ƒrj|djtjkrjt    ||d}||fS)zG
    Ensure we have valid columns, cast object dtypes if possible.
    Nrrn)
rŠr‰Ú_validate_or_indexify_columnsÚAssertionErrorrVrQr;rSZobject_Úconvert_object_array)rÍr@r;ÚcontentsÚerrrFrFrGr̛s
 rÌzlist[np.ndarray])rÍr@rAcCsÀ|dkrtt|ƒƒ}n¦t|tƒo0tdd„|Dƒƒ}|sbt|ƒt|ƒkrbtt|ƒ›dt|ƒ›dƒ‚|r¼tdd„|Dƒƒdkr„td    ƒ‚|r¼t|d
ƒt|ƒkr¼tt|d
ƒ›dt|ƒ›dƒ‚|S) a´
    If columns is None, make numbers as column names; Otherwise, validate that
    columns have valid length.
 
    Parameters
    ----------
    content : list of np.ndarrays
    columns : Index or None
 
    Returns
    -------
    Index
        If columns is None, assign positional column index value as columns.
 
    Raises
    ------
    1. AssertionError when content is not composed of list of lists, and if
        length of columns is not equal to length of content.
    2. ValueError when content is list of lists, but length of each sub-list
        is not equal
    3. ValueError when content is list of lists, but length of sub-list is
        not equal to length of content
    Ncss|]}t|tƒVqdSro)rRrŠ©rDrÄrFrFrGrvÏsz0_validate_or_indexify_columns.<locals>.<genexpr>z! columns passed, passed data had z columnscSsh|] }t|ƒ’qSrF)rQr×rFrFrGÚ    <setcomp>Ûsz0_validate_or_indexify_columns.<locals>.<setcomp>rIz<Length of columns passed for MultiIndex columns is differentr)r.rQrRrŠÚallrÓrV)rÍr@Z
is_mi_listrFrFrGrÒ±s&ÿÿÿÿrÒÚnumpyFzlist[npt.NDArray[np.object_]])rÍr;Ú dtype_backendÚ coerce_floatrAcs&‡‡‡fdd„‰‡fdd„|Dƒ}|S)aA
    Internal function to convert object array.
 
    Parameters
    ----------
    content: List[np.ndarray]
    dtype: np.dtype or ExtensionDtype
    dtype_backend: Controls if nullable/pyarrow dtypes are returned.
    coerce_float: Cast floats that are integers to int.
 
    Returns
    -------
    List[ArrayLike]
    cs&ˆt d¡kr"tj|ˆˆdkd}ˆdkræ|jt d¡krnt|ƒ}ˆdkrä|jt d¡krätƒ ¡ |¡}nvˆdkrät|tj    ƒrät
|jƒr¦t |tj |j tjdƒ}n>t|jƒrÊt|tj |j tjdƒ}nt|jƒrät|t |¡ƒ}n<tˆtƒr ˆ ¡}|j|ˆdd}nˆjdkr"t|ˆƒ}|S)Nr«rÚ)Z    try_floatZconvert_to_nullable_dtypernFr­)ÚmÚM)rSr;rZmaybe_convert_objectsrr&Zconstruct_array_typeZ_from_sequencerRrTrr%ÚzerosrZbool_rr"rr$ÚisnanrÚkindr)rYÚcls)rÜr;rÛrFrGr¨ÿs0ý 
 
 
 
z%convert_object_array.<locals>.convertcsg|] }ˆ|ƒ‘qSrFrFrkrªrFrGrH+sz(convert_object_array.<locals>.<listcomp>rF)rÍr;rÛrÜrWrF)rÜr¨r;rÛrGrÔés,rÔ)T)T)N)rÚF)fÚ__doc__Ú
__future__rÚ collectionsrÚtypingrrrrÚrSrZ pandas._libsrZpandas._typingr    r
r r Zpandas.core.dtypes.astyper Zpandas.core.dtypes.castrrrrrZpandas.core.dtypes.commonrrrrrrrrrrZpandas.core.dtypes.dtypesrZpandas.core.dtypes.genericrrZ pandas.corer r!r•Zpandas.core.arraysr"r#r$r%Zpandas.core.arrays.string_r&Zpandas.core.constructionr'r(r)r*Zpandas.core.indexes.apir+r,r-r.r/r0r1Z#pandas.core.internals.array_managerr2r3Zpandas.core.internals.blocksr4r5r6Zpandas.core.internals.managersr7r8r9r:r[rermrr†r¡r¤r¥r„rƒrPrOrar£r…rÁr`rÈrËrÊrÌrÒrÔrFrFrFrGÚ<module>sl     0  $    øA#)ùI& *;"ÿE %;ü