
    EgB                        d Z ddlmZ ddlZddlZddlmZ ddlZddl	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  G d	 d
e
          Z G d de          Zd ZdS )zp
Test extension array for storing nested data in a pandas container.

The ListArray stores an ndarray of lists.
    )annotationsN)TYPE_CHECKING)ExtensionDtype)is_object_dtypeis_string_dtype)ExtensionArray)type_tc                  <    e Zd ZeZdZej        Ze	dd            Z
dS )	ListDtypelistreturntype_t[ListArray]c                    t           S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	ListArray)clss    V/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/extension/list/array.pyconstruct_array_typezListDtype.construct_array_type    s
         N)r   r   )__name__
__module____qualname__r   typenamenpnanna_valueclassmethodr    r   r   r   r      sC        DDvH   [  r   r   c                      e Zd Z e            ZdZdddZedddd            Zd	 Z	ddZ
d ZddZd ZddZed             ZdS )r   i  NFr   Nonec                   t          |t          j                  st          d          |D ]Y}t          || j        j                  s=t          j        |          s)t          dt          | j        j                  z             Z|| _	        d S )Nz$Need to pass a numpy array as valueszAll values must be of type )

isinstancer   ndarray	TypeErrordtyper   pdisnastrdata)selfvaluesr%   copyvals        r   __init__zListArray.__init__0   s    &"*-- 	DBCCC 	V 	VCc4:?33 VBGCLL V =DJO@T@T TUUU			r   r%   r,   c               v    t          j        t          |          t                    }||d d <    | |          S )Nr%   )r   emptylenobject)r   scalarsr%   r,   r)   s        r   _from_sequencezListArray._from_sequence8   s7    xGF333QQQs4yyr   c                    t          |t          j                  r| j        |         S  t	          |           | j        |                   S N)r"   numbersIntegralr)   r   )r*   items     r   __getitem__zListArray.__getitem__>   sA    dG,-- 	/9T?" 4::dio...r   intc                *    t          | j                  S r8   )r3   r)   r*   s    r   __len__zListArray.__len__E   s    49~~r   c                V    t          j        d | j        D             t                    S )Nc                b    g | ],}t          |t                     ot          j        |          -S r   )r"   r   r   isnan.0xs     r   
<listcomp>z"ListArray.isna.<locals>.<listcomp>J   s2    HHHAt$$$4!HHHr   r1   )r   arrayr)   boolr?   s    r   r'   zListArray.isnaH   s1    xHHdiHHHPT
 
 
 	
r   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                     |          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 )rK   r)   )rE   loc
fill_valuer*   s     r   rG   z"ListArray.take.<locals>.<listcomp>^   s8       DGcRiiDIcNNZ  r   c                *    g | ]}j         |         S r   rM   )rE   rN   r*   s     r   rG   z"ListArray.take.<locals>.<listcomp>e   s    <<<S$)C.<<<r   )r   asarrayr%   r   any
ValueError
IndexErrorr6   )r*   indexer
allow_fillrO   msgoutputerrs   `  `   r   takezListArray.takeM   s    *W%%2 	
  	/!!Z0
"!!## !  /    KR    / / / oo3.//<<<<G<<< / / / oo3./ ""6***s0   	A 
A8#A33A8<B 
B*B%%B*c                L     t          |           | j        d d                    S r8   )r   r)   r?   s    r   r,   zListArray.copyk   s"    tDzz$)AAA,'''r   Tc                J   t          |t          | j                            r#|| j        k    r|r|                                 S | S t	          |          r4t          |          s%t          j        d | j        D             |          S t          j        | j        ||          S )Nc                ,    g | ]}t          |          S r   )r(   rD   s     r   rG   z$ListArray.astype.<locals>.<listcomp>u   s    777SVV777r   r1   r/   )	r"   r   r%   r,   r   r   r   rH   r)   )r*   r%   r,   s      r   astypezListArray.astypen   s    eT$*--.. 	F5DJ3F3F #yy{{"KU## 	FOE,B,B 	F877TY777uEEEEx	T::::r   c                T    t          j        d |D                       } | |          S )Nc                    g | ]	}|j         
S r   rM   rD   s     r   rG   z/ListArray._concat_same_type.<locals>.<listcomp>z   s    999!qv999r   )r   concatenate)r   	to_concatr)   s      r   _concat_same_typezListArray._concat_same_typex   s.    ~99y999::s4yyr   )NF)r   r    )r   r=   )FN)T)r   r   r   r   r%   __array_priority__r.   r   r6   r<   r@   r'   rZ   r,   r^   rc   r   r   r   r   r   ,   s        IKKE     .2     [
/ / /   
 
 

+ + + +<( ( (; ; ; ;   [  r   r   c                     t           j                            d          t          j        dt                    } fdt          d          D             | d d <   | S )N   d   r1   c           	     n    g | ]1}fd t                              dd                    D             2S )c                h    g | ].}                     t          t          j                            /S r   )choicer   stringascii_lettersrE   _rngs     r   rG   z(make_data.<locals>.<listcomp>.<listcomp>   s0    TTTAD-..	/	/TTTr   r   
   )rangeintegersrm   s     r   rG   zmake_data.<locals>.<listcomp>   sT        	UTTTs||Ar?R?R9S9STTT  r   )r   randomdefault_rngr2   r4   rq   )r)   ro   s    @r   	make_dataru   ~   si    
)


"
"C8Cv&&&D   s  DG Kr   )__doc__
__future__r   r9   rk   typingr   numpyr   pandas.core.dtypes.baser   pandasr&   pandas.api.typesr   r   pandas.core.arraysr   pandas._typingr	   r   r   ru   r   r   r   <module>r      s=   
 # " " " " "                   2 2 2 2 2 2            . - - - - - &%%%%%%       "O O O O O O O Od    r   