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
U
­ý°dUã@sÜdZddlmZddlmZmZddlZddlZddlZddl    Z    ddl
Z
ddl m Z m Z ddlZddlmZddlmZddlmZmZmZddlZdd    lmZmZdd
lmZGd d „d eƒZGd d„deƒZ dd„Z!dS)a¦
Test extension array for storing nested data in a pandas container.
 
The JSONArray stores lists of dictionaries. The storage mechanism is a list,
not an ndarray.
 
Note
----
We currently store lists of UserDicts. Pandas has a few places
internally that specifically check for dicts, and does non-scalar things
in that case. We *want* the dictionaries to be treated as scalars, so we
hack around pandas by using UserDicts.
é)Ú annotations)ÚUserDictÚabcN)ÚAnyÚMapping)Útype_t©Ú'construct_1d_object_array_from_listlike)Ú is_bool_dtypeÚ is_list_likeÚ pandas_dtype)ÚExtensionArrayÚExtensionDtype)Úunpack_tuple_and_ellipsesc@s8eZdZUejZdZeƒZde    d<e
ddœdd„ƒZ dS)    Ú    JSONDtypeÚjsonzMapping[str, Any]Úna_valueztype_t[JSONArray]©ÚreturncCstS)zq
        Return the array type associated with this dtype.
 
        Returns
        -------
        type
        )Ú    JSONArray)Úcls©rúXd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/extension/json/array.pyÚconstruct_array_type6s    zJSONDtype.construct_array_typeN) Ú__name__Ú
__module__Ú __qualname__rrÚtypeÚnamerrÚ__annotations__Ú classmethodrrrrrr1s
 
rc@sÒeZdZeƒZdZd,ddœdd„Zed-dd    „ƒZed
d „ƒZ    d d „Z
dd„Z ddœdd„Z dd„Z dd„Zd.dd„Zeddœdd„ƒZdd„Zd/dd„Zdd „Zd0d"d#„Zd$d%„Zed&d'„ƒZd(d)„Zd*d+„ZdS)1rièNFÚNonercCsD|D]&}t||jjƒstdt|jjƒƒ‚q||_|j|_|_dS)NzAll values must be of type )Ú
isinstanceÚdtyperÚ    TypeErrorÚstrÚdataZ_itemsÚ_data)ÚselfÚvaluesr#ÚcopyÚvalrrrÚ__init__Fs
zJSONArray.__init__cCs||ƒS©Nr)rZscalarsr#r*rrrÚ_from_sequenceSszJSONArray._from_sequencecCs|dd„|DƒƒS)NcSsg|]}|dkrt|ƒ‘qS)r)r©Ú.0ÚxrrrÚ
<listcomp>Ysz.JSONArray._from_factorized.<locals>.<listcomp>r)rr)ÚoriginalrrrÚ_from_factorizedWszJSONArray._from_factorizedcsÌt|tƒrt|ƒ}t|tjƒr(ˆj|St|tƒrL|tdƒkrLtˆƒˆjƒSt|tƒrhtˆƒˆj|ƒSt|ƒszt    dƒ‚nNt
j j   ˆ|¡}t|jƒr®ˆ dd„tˆ|ƒDƒ¡Stˆƒ‡fdd„|DƒƒSdS)Nzuonly integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indicescSsg|]\}}|r|‘qSrr)r0r1Úmrrrr2qsz)JSONArray.__getitem__.<locals>.<listcomp>csg|]}ˆj|‘qSr©r&)r0Úi©r(rrr2ss)r"ÚtuplerÚnumbersÚIntegralr&Úslicerr Ú
IndexErrorÚpdÚapiZindexersZcheck_array_indexerr
r#r.Úzip)r(Úitemrr8rÚ __getitem__[s 
 
 
ÿ
zJSONArray.__getitem__cCsÀt|tjƒr||j|<n¤t|t|ƒtjfƒs8t |g¡}t|t    j
ƒrŒ|j dkrŒt t ||ƒƒD],\}\}}|r\t||j jƒs~t‚||j|<q\n0t ||ƒD]$\}}t||j jƒs°t‚||j|<q–dS)NÚbool)r"r:r;r&rrÚSequenceÚ    itertoolsÚcycleÚnpZndarrayr#Ú    enumerater@ÚAssertionError)r(ÚkeyÚvaluer7ÚkÚvrrrÚ __setitem__us   zJSONArray.__setitem__ÚintcCs
t|jƒSr-)Úlenr&r8rrrÚ__len__ˆszJSONArray.__len__cCstSr-©ÚNotImplemented©r(ÚotherrrrÚ__eq__‹szJSONArray.__eq__cCstSr-rRrTrrrÚ__ne__ŽszJSONArray.__ne__cCs0|dkr t}|tkr tt|ƒƒStj|j|dS)N©r#)Úobjectr    ÚlistrGÚasarrayr&)r(r#rrrÚ    __array__‘s
 zJSONArray.__array__cCs t |j¡Sr-)ÚsysÚ    getsizeofr&r8rrrÚnbytes™szJSONArray.nbytescstj‡fdd„ˆjDƒtdS)Ncsg|]}|ˆjjk‘qSr)r#rr/r8rrr2žsz"JSONArray.isna.<locals>.<listcomp>rX)rGÚarrayr&rCr8rr8rÚisnaszJSONArray.isnac
sÈt |¡}d}|rzˆdkr"ˆjj‰|dk ¡r2t‚z‡‡fdd„|Dƒ}Wq¾tk
rv}zt|ƒ|‚W5d}~XYq¾XnDz‡fdd„|Dƒ}Wn,tk
r¼}zt|ƒ|‚W5d}~XYnXˆ |¡S)NzIIndex is out of bounds or cannot do a non-empty take from an empty array.éÿÿÿÿcs"g|]}|dkrˆj|nˆ‘qS)rbr6©r0Úloc©Ú
fill_valuer(rrr2±sz"JSONArray.take.<locals>.<listcomp>csg|]}ˆj|‘qSrr6rcr8rrr2¸s)rGr[r#rÚanyÚ
ValueErrorr=r.)r(ZindexerZ
allow_fillrfÚmsgÚoutputÚerrrrerÚtake s&
ÿ  ÿ
zJSONArray.takecCst|ƒ|jdd…ƒSr-©rr&r8rrrr*¾szJSONArray.copyTcCs~ddlm}t|ƒ}t|t|jƒƒr>||jkr>|r:| ¡S|St||ƒrd| t¡}|     ¡j
|ddSt j dd„|Dƒ||dS)Nr)Ú StringDtypeF)r*cSsg|] }t|ƒ‘qSr©Údictr/rrrr2Ñsz$JSONArray.astype.<locals>.<listcomp>)r#r*) Zpandas.core.arrays.string_rnr r"rr#r*Úastyper%rr.rGr`)r(r#r*rnrKrrrrqÁs 
 
zJSONArray.astypecCs"t|ƒdd„dd„|jDƒDƒƒS)NcSsg|] }t|ƒ‘qSrror/rrrr2Ösz$JSONArray.unique.<locals>.<listcomp>cSsh|]}t| ¡ƒ’qSr©r9Úitems)r0ÚdrrrÚ    <setcomp>Ösz#JSONArray.unique.<locals>.<setcomp>rmr8rrrÚuniqueÓszJSONArray.uniquecCs"ttj dd„|Dƒ¡ƒ}||ƒS)Ncss|] }|jVqdSr-r6r/rrrÚ    <genexpr>Úsz.JSONArray._concat_same_type.<locals>.<genexpr>)rZrEÚchainÚ from_iterable)rZ    to_concatr&rrrÚ_concat_same_typeØszJSONArray._concat_same_typecCs$| ¡}t|ƒdkr| ¡}|dfS)Nrr)Ú_values_for_argsortrPZravel©r(ÚfrozenrrrÚ_values_for_factorizeÝs zJSONArray._values_for_factorizecCsdd„|Dƒ}t|ƒS)NcSsg|]}t| ¡ƒ‘qSrrrr/rrrr2æsz1JSONArray._values_for_argsort.<locals>.<listcomp>rr|rrrr{äszJSONArray._values_for_argsort)NF)NF)N)FN)T)rrrrr#Z__array_priority__r,r r.r4rBrNrQrVrWr\Úpropertyr_rarlr*rqrvrzr~r{rrrrrBs0  
 
 
 
 
rcCsdd„tdƒDƒS)Nc    Ss*g|]"}tdd„tt dd¡ƒDƒƒ‘qS)cSs$g|]}t tj¡t dd¡f‘qS)réd)ÚrandomÚchoiceÚstringÚ ascii_lettersÚrandint©r0Ú_rrrr2îsÿz(make_data.<locals>.<listcomp>.<listcomp>ré
)rÚrangerr…r†rrrr2ìs úþÿzmake_data.<locals>.<listcomp>r€)r‰rrrrÚ    make_dataêsùrŠ)"Ú__doc__Ú
__future__rÚ collectionsrrrEr:rrƒr]ÚtypingrrÚnumpyrGZpandas._typingrZpandas.core.dtypes.castr    Zpandas.core.dtypes.commonr
r r Zpandasr>Zpandas.api.extensionsr rZpandas.core.indexersrrrrŠrrrrÚ<module>s&    )