
    g                         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 erdd
lmZ ddlmZ  G d de          Z  G d de          Z!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)unpack_tuple_and_ellipses)Mapping)type_tc                  X    e Zd ZU ej        ZdZ e            Zde	d<   e
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)clss    m/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/pandas/tests/extension/json/array.pyconstruct_array_typezJSONDtype.construct_array_type8   s
         N)r   r   )__name__
__module____qualname__r   r   typenamer   r   __annotations__classmethodr    r   r   r   r   3   sW         ;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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)selfvaluesr*   copyvals        r   __init__zJSONArray.__init__H   sm     	V 	VCc4:?33 V =DJO@T@T TUUUV	 $(9,djjjr   r*   r2   c                    | |          S Nr%   )r   scalarsr*   r2   s       r   _from_sequencezJSONArray._from_sequenceU   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%   )r   r1   originals      r   _from_factorizedzJSONArray._from_factorizedY   s!    s;;;;;<<<r   c                    t          |t                    rt          |          }t          |t          j                  r j        |         S t          |t                    r0|t          d           k    r t                      j                  S t          |t                    r# t                      j        |                   S t          |          st          d          t          j        j                             |          }t          |j                  rAt                                         d t#           |          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>t   s!    88841aa8Q888r   r*   c                *    g | ]}j         |         S r%   r-   )r=   ir0   s     r   r?   z)JSONArray.__getitem__.<locals>.<listcomp>w   s    :::ty|:::r   )r)   tupler   numbersIntegralr-   slicer!   r   
IndexErrorpdapiindexerscheck_array_indexerr
   r*   r9   zip)r0   items   ` r   __getitem__zJSONArray.__getitem__]   so   dE"" 	3,T22DdG,-- 	<9T?"e$$ 	<t)<)<4::di(((e$$ 	<4::dio...d## 	< L  
 6?66tTBBDTZ(( Dzz00883tT??888
 1    4::::::T:::;;;r   c                0   t          |t          j                  r|| j        |<   d S t          |t	          |           t
          j        f          st          j        |g          }t          |t          j
                  r[|j        dk    rPt          t          ||                    D ]0\  }\  }}|r&t          || j        j                  sJ || j        |<   1d S t          ||          D ]+\  }}t          || j        j                  sJ || j        |<   ,d S )Nbool)r)   rJ   rK   r-   r!   r   Sequence	itertoolscyclenpndarrayr*   	enumeraterR   )r0   keyvaluerH   kvs         r   __setitem__zJSONArray.__setitem__y   s#   c7+,, 	%"DIcNNNed4jj#,%?@@ 1!00#rz** 	%syF/B/B!*3sE??!;!; ) )IAv1 ))!TZ_====='(	!) )
  UOO % %DAq%a99999#$DIaLL% %r   intc                *    t          | j                  S r7   )lenr-   r0   s    r   __len__zJSONArray.__len__   s    49~~r   c                    t           S r7   NotImplementedr0   others     r   __eq__zJSONArray.__eq__       r   c                    t           S r7   rh   rj   s     r   __ne__zJSONArray.__ne__   rm   r   c                    |t           }|t           k    rt          t          |                     S t          j        | j        |          S )NrE   )objectr	   listrZ   asarrayr-   )r0   r*   r2   s      r   	__array__zJSONArray.__array__   s@    =EF??:4::FFFz$)51111r   c                4    t          j        | j                  S r7   )sys	getsizeofr-   re   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>   r0   s     r   r?   z"JSONArray.isna.<locals>.<listcomp>   s#    EEEadj11EEEr   rE   )rZ   arrayr-   rV   re   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~   rG   )r=   loc
fill_valuer0   s     r   r?   z"JSONArray.take.<locals>.<listcomp>   s8       DGcRiiDIcNNZ  r   c                *    g | ]}j         |         S r%   rG   )r=   r   r0   s     r   r?   z"JSONArray.take.<locals>.<listcomp>   s    <<<S$)C.<<<r   rE   )	rZ   rs   r*   r   any
ValueErrorrM   r!   r9   )r0   indexer
allow_fillr   msgoutputerrs   `  `   r   takezJSONArray.take   s*    *W%%2 	
  	/!!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-   re   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          ||          rF|                     t                    }|	                                }|
                    ||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   rE   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   astyper,   r   r9   rZ   rs   r{   )r0   r*   r2   r   r^   arr_clss         r   r   zJSONArray.astype   s
    	;:::::U##eT$*--.. 	M5DJ3F3F #yy{{"K{++ 	MKK$$E0022G))%u5)III 	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%   rI   items)r=   ds     r   	<setcomp>z#JSONArray.unique.<locals>.<setcomp>   s(    ,Q,Q,Q!U17799-=-=,Q,Q,Qr   r   re   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   rG   r<   s     r   	<genexpr>z.JSONArray._concat_same_type.<locals>.<genexpr>   s$      1L1LQ!&1L1L1L1L1L1Lr   )rr   rX   chainfrom_iterable)r   	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_argsortrd   ravelr0   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)r0   r   r   r2   	__class__s       r   r   zJSONArray._pad_or_backfill   s"    ww''vU'NNNr   )NF)r   r'   )r   rb   )NN)FN)T)r   r   r    r   r*   __array_priority__r4   r$   r9   rA   rT   ra   rf   rl   ro   rt   propertyrx   r|   r   r2   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   D   s       IKKE- - - - - .2     [ = = [=< < <8% % % %&       2 2 2 2 ( ( ( 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   c                 x     t           j                            d            fdt          d          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   )choicerr   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   r   )rZ   randomdefault_rngr   )r   s   @r   	make_datar      sK    
)


"
"C    s   r   )#__doc__
__future__r   collectionsr   r   rX   rJ   r   rv   typingr   r   numpyrZ   pandas.core.dtypes.castr	   pandas.core.dtypes.commonr
   r   r   pandasrN   pandas.api.extensionsr   r   pandas.core.indexersr   collections.abcr   pandas._typingr   r   r   r   r%   r   r   <module>r      s    # " " " " "              



       
     K K K K K K                     ; : : : : : &''''''%%%%%%       "nO nO nO nO nO nO nO nOb    r   