
    PiV$                       d Z ddlmZ ddlmZmZ ddlZddlZddlZddl	Z	ddl
mZmZ ddlZddlmZ ddlmZmZmZ ddlZddlmZmZ dd	lmZmZ erdd
lmZ ddlm Z   G d de          Z! G d de          Z"ddZ#dS )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)TYPE_CHECKINGAny'construct_1d_object_array_from_listlike)is_bool_dtypeis_list_likepandas_dtype)ExtensionArrayExtensionDtype)getitem_returns_viewunpack_tuple_and_ellipses)Mapping)type_tc                  H    e Zd ZU ej        ZdZ e            Zde	d<   ddZ
dS )		JSONDtypejsonzMapping[str, Any]na_valuereturntype_t[JSONArray]c                    t           S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	JSONArrayselfs    u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/tests/extension/json/array.pyconstruct_array_typezJSONDtype.construct_array_type<   s
         N)r   r   )__name__
__module____qualname__r   r   typenamer   r   __annotations__r    r   r   r   r   7   sM         ;DD"*(**H,,,,     r   r   c                      e Zd Z e            ZdZdddZedddd            Zed	             Z	d
 Z
d ZddZd dZd Zd Zd!dZed d            Zd Zd"dZd Zd#dZd Zed             Zd Zd Zddd fd
Z xZS )$r   i  NFr   Nonec                    |D ]E}t          || j        j                  s)t          dt	          | j        j                  z             F|| _        | j        x| _        | _        d S )NzAll values must be of type )
isinstancedtyper#   	TypeErrorstrdata_items_data)r   valuesr+   copyvals        r   __init__zJSONArray.__init__K   sm     	V 	VCc4:?33 V =DJO@T@T TUUUV	 $(9,djjjr   r+   r2   c                    | |          S Nr&   )clsscalarsr+   r2   s       r   _from_sequencezJSONArray._from_sequenceX   s    s7||r   c                ,     | d |D                       S )Nc                8    g | ]}|d k    t          |          S )r&   )r   .0xs     r   
<listcomp>z.JSONArray._from_factorized.<locals>.<listcomp>^   s#    ;;;A177HQKK777r   r&   )r8   r1   originals      r   _from_factorizedzJSONArray._from_factorized\   s!    s;;;;;<<<r   c                    	 t          |                               || j                  S # t          t          f$ r; ddlm} t          j        |t                    }|
                    |d          cY S w xY w)Nr+   r   )libT)convert_non_numeric)r#   r:   r+   
ValueErrorr,   pandas._libsrE   npasarrayobjectmaybe_convert_objects)r   r1   rE   s      r   _cast_pointwise_resultz JSONArray._cast_pointwise_result`   s    	O::,,V4:,FFFI& 	O 	O 	O((((((Zf555F,,V,NNNNN	Os   (+ A	A76A7c                h    t          |t                    rt          |          }t          |t          j                  r j        |         S t          |t                    r>|t          d           k    r+ t                      j                  } j        |_        |S t          |t                    rA t                      j        |                   }t           |          r j        |_        |S t          |          st          d          t          j        j                             |          }t!          |j                  rCt                                         d t'           |d          D              j                  S  t                      fd|D                       S )Nzuonly integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indicesc                    g | ]	\  }}||
S r&   r&   )r>   r?   ms      r   r@   z)JSONArray.__getitem__.<locals>.<listcomp>   s!    EEE41a1EQEEEr   TstrictrD   c                *    g | ]}j         |         S r&   r.   )r>   ir   s     r   r@   z)JSONArray.__getitem__.<locals>.<listcomp>   s    :::ty|:::r   )r*   tupler   numbersIntegralr.   slicer#   	_readonlyr   r   
IndexErrorpdapiindexerscheck_array_indexerr
   r+   r:   zip)r   itemresults   `  r   __getitem__zJSONArray.__getitem__j   s   dE"" 	3,T22DdG,-- 	<9T?"e$$ 	<t)<)<T$ZZ	**F#~FMe$$ 	<T$ZZ	$00F#D$// 2#'> Md## 	< L  
 6?66tTBBDTZ(( Dzz00EE3tT$#?#?#?EEETZ 1    4::::::T:::;;;r   c                d   | j         rt          d          t          |t          j                  r|| j        |<   d S t          |t          |           t          j        f          st          j
        |g          }t          |t          j                  r]|j        dk    rRt          t          ||d                    D ]0\  }\  }}|r&t          || j        j                  sJ || j        |<   1d S t          ||d          D ]+\  }}t          || j        j                  sJ || j        |<   ,d S )NzCannot modify read-only arrayboolFrQ   )rZ   rG   r*   rW   rX   r.   r#   r   Sequence	itertoolscyclerI   ndarrayr+   	enumerater`   )r   keyvaluerU   kvs         r   __setitem__zJSONArray.__setitem__   sJ   > 	><===c7+,, 	%"DIcNNNed4jj#,%?@@ 1!00#rz** 	%syF/B/B!*3sE%+H+H+H!I!I ) )IAv1 ))!TZ_====='(	!) )
  U5999 % %DAq%a99999#$DIaLL% %r   intc                *    t          | j                  S r7   )lenr.   r   s    r   __len__zJSONArray.__len__   s    49~~r   c                    t           S r7   NotImplementedr   others     r   __eq__zJSONArray.__eq__       r   c                    t           S r7   ru   rw   s     r   __ne__zJSONArray.__ne__   rz   r   c                    |du rt          d          |t          }|t          k    rt          t          |                     S |t	          j        | j        |          S t	          j        | j        ||          S )NFz:Unable to avoid copy while creating an array as requested.rD   r5   )rG   rK   r	   listrI   rJ   r.   )r   r+   r2   s      r   	__array__zJSONArray.__array__   s~    5==L   =EF??:4::FFF<:diu5555z$)5t<<<<r   c                4    t          j        | j                  S r7   )sys	getsizeofr.   r   s    r   nbyteszJSONArray.nbytes   s    }TY'''r   c                \     t          j         fd j        D             t                    S )Nc                0    g | ]}|j         j        k    S r&   )r+   r   )r>   r?   r   s     r   r@   z"JSONArray.isna.<locals>.<listcomp>   s#    EEEadj11EEEr   rD   )rI   arrayr.   re   r   s   `r   isnazJSONArray.isna   s/    xEEEE49EEETRRRRr   c                    t          j        |          }d}|r` j        j        |dk                                     rt
          	  fd|D             }nT# t          $ r}t          |          |d }~ww xY w	  fd|D             }n"# t          $ r}t          |          |d }~ww xY wt                                         | j                  S )NzIIndex is out of bounds or cannot do a non-empty take from an empty array.c                :    g | ]}|d k    rj         |         nS )r   rT   )r>   loc
fill_valuer   s     r   r@   z"JSONArray.take.<locals>.<listcomp>   s8       DGcRiiDIcNNZ  r   c                *    g | ]}j         |         S r&   rT   )r>   r   r   s     r   r@   z"JSONArray.take.<locals>.<listcomp>   s    <<<S$)C.<<<r   rD   )	rI   rJ   r+   r   anyrG   r[   r#   r:   )r   indexer
allow_fillr   msgoutputerrs   `  `   r   takezJSONArray.take   s(    *W%%W 	  	/!!Z0
"!!## !  /    KR    / / / oo3.//<<<<G<<< / / / oo3./ Dzz((tz(BBBs0   	A 
A8#A33A8<B 
B*B%%B*c                L     t          |           | j        d d                    S r7   r#   r.   r   s    r   r2   zJSONArray.copy   s"    tDzz$)AAA,'''r   Tc                   ddl m} t          |          }t          |t	          | j                            r#|| j        k    r|r|                                 S | S t          ||          r,|                                }|                    | |d          S |s t          j
        d | D             |          S t          j        d | D             ||          S )Nr   )StringDtypeFr5   c                ,    g | ]}t          |          S r&   dictr=   s     r   r@   z$JSONArray.astype.<locals>.<listcomp>   s    5551tAww555r   rD   c                ,    g | ]}t          |          S r&   r   r=   s     r   r@   z$JSONArray.astype.<locals>.<listcomp>   s    333T!WW333r   )pandas.core.arrays.string_r   r   r*   r#   r+   r2   r   r:   rI   rJ   r   )r   r+   r2   r   arr_clss        r   astypezJSONArray.astype   s     	;:::::U##eT$*--.. 
	M5DJ3F3F #yy{{"K{++ 	M0022G))$e%)HHH 	M:55555UCCCC833d3335tLLLLr   c                d     t          |           d d | j        D             D                       S )Nc                ,    g | ]}t          |          S r&   r   r=   s     r   r@   z$JSONArray.unique.<locals>.<listcomp>   s    RRRq477RRRr   c                P    h | ]#}t          |                                          $S r&   rV   items)r>   ds     r   	<setcomp>z#JSONArray.unique.<locals>.<setcomp>   s(    ,Q,Q,Q!U17799-=-=,Q,Q,Qr   r   r   s    r   uniquezJSONArray.unique   s:     tDzzRR,Q,Qty,Q,Q,QRRRSSSr   c                    t          t          j                            d |D                                 } | |          S )Nc              3  $   K   | ]}|j         V  d S r7   rT   r=   s     r   	<genexpr>z.JSONArray._concat_same_type.<locals>.<genexpr>   s$      1L1LQ!&1L1L1L1L1L1Lr   )r~   rg   chainfrom_iterable)r8   	to_concatr.   s      r   _concat_same_typezJSONArray._concat_same_type   s<    IO111L1L)1L1L1LLLMMs4yyr   c                    |                                  }t          |          dk    r|                                }|dfS )Nr   r&   )_values_for_argsortrr   ravelr   frozens     r   _values_for_factorizezJSONArray._values_for_factorize   s;    ))++v;;!\\^^Frzr   c                8    d | D             }t          |          S )Nc                P    g | ]#}t          |                                          $S r&   r   r=   s     r   r@   z1JSONArray._values_for_argsort.<locals>.<listcomp>  s(    111q%		""111r   r   r   s     r   r   zJSONArray._values_for_argsort  s#    11D1116v>>>r   )limitr2   c               L    t                                          |||          S )N)methodr   r2   )super_pad_or_backfill)r   r   r   r2   	__class__s       r   r   zJSONArray._pad_or_backfill
  s"    ww''vU'NNNr   )NF)r   r(   )r   rp   )NN)FN)T)r    r!   r"   r   r+   __array_priority__r4   classmethodr:   rB   rM   rc   ro   rs   ry   r|   r   propertyr   r   r   r2   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   G   s       IKKE- - - - - .2     [ = = [=O O O< < <B% % % %,       = = = = ( ( ( X(S S SC C C C:( ( (M M M M(T T T
   [  ? ? ?
 154 O O O O O O O O O O Or   r   nrp   c                x    t           j                            d          fdt          |           D             S )N   c                    g | ]>}t          fd t                              dd                    D                       ?S )c                    g | ]D}                     t          t          j                                                d d          fES )r   d   )choicer~   stringascii_lettersintegersr>   _rngs     r   r@   z(make_data.<locals>.<listcomp>.<listcomp>  sS        D!56677a9M9MN  r   r   
   )r   ranger   r   s     r   r@   zmake_data.<locals>.<listcomp>  sq         	   s||Ar2233  	
 	
  r   )rI   randomdefault_rngr   )r   r   s    @r   	make_datar     sK    
)


"
"C    q   r   )r   rp   )$__doc__
__future__r   collectionsr   r   rg   rW   r   r   typingr   r   numpyrI   pandas.core.dtypes.castr	   pandas.core.dtypes.commonr
   r   r   pandasr\   pandas.api.extensionsr   r   pandas.core.indexersr   r   collections.abcr   pandas._typingr   r   r   r   r&   r   r   <module>r      s    # " " " " "              



       
     K K K K K K                           
  &''''''%%%%%%        EO EO EO EO EO EO EO EOP     r   