gL i#dZddlmZddlmZmZddlZddlZddlZddl Z ddl m Z m Z ddl Z ddlZddlmZddlmZddlmZmZmZddlZdd lmZmZdd lmZe r dd lm Z dd l!m"Z"Gd deZ#GddeZ$dZ%y)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)UserDictabcN) TYPE_CHECKINGAny)find_stack_level)'construct_1d_object_array_from_listlike) is_bool_dtype is_list_like pandas_dtype)ExtensionArrayExtensionDtype)unpack_tuple_and_ellipses)Mapping)type_tcTeZdZUejZdZeZde d<e ddZ y) JSONDtypejsonzMapping[str, Any]na_valuectS)zq Return the array type associated with this dtype. Returns ------- type ) JSONArray)clss g/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/tests/extension/json/array.pyconstruct_array_typezJSONDtype.construct_array_type;s N)returnztype_t[JSONArray]) __name__ __module__ __qualname__rrtypenamerr__annotations__ classmethodrrrrr6s/ ;;D D"**H,rrceZdZeZdZdddZeddddZedZ dZ dd Z dd Z d Z d Zdd ZeddZdZddZdZddZdZedZdZdZdddfd ZxZS) riNFc|D]M}t||jjr$tdt |jjz||_|j x|_|_y)NzAll values must be of type ) isinstancedtyper TypeErrorstrdata_items_data)selfvaluesr(copyvals r__init__zJSONArray.__init__Ks` VCc4::??3 =DJJOO@T TUU V $(99, djrr(r0c||SNr$)rscalarsr(r0s r_from_sequencezJSONArray._from_sequenceXs 7|rcV||Dcgc]}|dk7s t|c}Scc}w)Nr$)r)rr/originalxs r_from_factorizedzJSONArray._from_factorized\s%;A17HQK;<<;s & &ct|tr t|}t|tjr|j |St|t r)|t dk(rt||j St|t rt||j |St|s tdtjjj||}t|jrFt|j!t#||Dcgc] \}}|s | c}}|jSt||Dcgc]}|j |c}Scc}}wcc}w)Nzuonly integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indicesr()r'tuplernumbersIntegralr+slicer r IndexErrorpdapiindexerscheck_array_indexerr r(r7zip)r.itemr:mis r __getitem__zJSONArray.__getitem__`s2 dE ",T2D dG,, -99T? " e $t)<4:dii( ( e $4:diio. .d#L  66??66tTBDTZZ(Dz00#&tT?841aaQ8 14:T:tyy|:; ;9;s$ E3 /E3 E9cTt|tjr||j|<yt|t |t j fstj|g}t|tjrd|jdk(rUtt||D]<\}\}}|s t||jjsJ||j|<>yt||D]6\}}t||jjsJ||j|<8y)Nbool)r'r?r@r+r rSequence itertoolscyclenpndarrayr( enumeraterG)r.keyvaluerJkvs r __setitem__zJSONArray.__setitem__|s c7++ ,"DIIcNed4j#,,%?@!0#rzz*syyF/B!*3sE?!;)IAv1)!TZZ__==='( ! )  UO%DAq%a999#$DIIaL%rc,t|jSr5)lenr+r.s r__len__zJSONArray.__len__s499~rctSr5NotImplementedr.others r__eq__zJSONArray.__eq__rctSr5r^r`s r__ne__zJSONArray.__ne__rcrc&|dur$tjdtt|t}|tk(rt t |S|!tj|j|Stj|j||S)NFaSStarting with NumPy 2.0, the behavior of the 'copy' keyword has changed and passing 'copy=False' raises an error when returning a zero-copy NumPy array is not possible. pandas will follow this behavior starting with pandas 3.0. This conversion to NumPy requires a copy, but 'copy=False' was passed. Consider using 'np.asarray(..)' instead.) stacklevelr=r3) warningswarn FutureWarningrobjectr listrQasarrayr+)r.r(r0s r __array__zJSONArray.__array__sx 5= MM2 +-  =E F?:4:F F <::diiu5 5zz$))5t<t||jddSr5)r r+r[s rr0zJSONArray.copystDz$))A,''rTcddlm}t|}t|t |j r#||j k(r|r|j S|St||r$|j}|j||dS|s.tj|Dcgc] }t|c}|Stj|Dcgc] }t|c}||Scc}wcc}w)Nr) StringDtypeFr3r=) pandas.core.arrays.string_rr r'r r(r0rr7rQrmdictrt)r.r(r0rarr_clsr:s rastypezJSONArray.astypes ;U# eT$**- .5DJJ3Fyy{"K { +002G))$e%)H H::51tAw5UC C88d3T!W35tL L63s C#C(c t||jDchc]}t|jc}Dcgc] }t |c}Scc}wcc}wr5)r r+r>itemsr)r.dr:s runiquezJSONArray.uniquesDtDztyy,Q!U1779-=,QRq47RSS,QRs AAcpttjjd|D}||S)Nc34K|]}|jywr5)r+).0r:s r z.JSONArray._concat_same_type..s1LQ!&&1Ls)rlrOchain from_iterable)r to_concatr+s r_concat_same_typezJSONArray._concat_same_types+IOO111L)1LLM4yrcf|j}t|dk(r|j}|dfS)Nrr$)_values_for_argsortrZravel)r.frozens r_values_for_factorizezJSONArray._values_for_factorizes1))+ v;! \\^Frzrcn|Dcgc]}t|j}}t|Scc}wr5)r>rr )r.r:rs rrzJSONArray._values_for_argsorts0,01q% "116v>>2s 2)limitr0c(t||||S)N)methodrr0)super_pad_or_backfill)r.rrr0 __class__s rrzJSONArray._pad_or_backfillsw'vU'NNr)NF)rNone)rint)NN)FN)T)rrrrr(__array_priority__r2r#r7r;rKrXr\rbrernpropertyrrrurr0rrrrrr __classcell__)rs@rrrGs KE-.2==<8%&=.((SC<(M(T ? 154OOrrc Vtjjd}tdDcgc]l}t t|j ddDcgc]<}|j ttj|j ddf>c}nc}Scc}wcc}w)Ndr ) rQrandom default_rngrangerintegerschoicerlstring ascii_letters)rng_s r make_datars ))   "Cs   s||Ar23 D!5!567a9MN     s'B&AB! B&!B&)&__doc__ __future__r collectionsrrrOr?rrptypingrrrhnumpyrQpandas.util._exceptionsrpandas.core.dtypes.castr pandas.core.dtypes.commonr r r pandasrCpandas.api.extensionsr rpandas.core.indexersrcollections.abcrpandas._typingrrrrr$rrrsy # 4K ;'%"|O|O~ r