
    Owg                        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y)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
y)	ListDtypelistc                    t         S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	ListArray)clss    X/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/extension/list/array.pyconstruct_array_typezListDtype.construct_array_type    s
         N)returnztype_t[ListArray])__name__
__module____qualname__r   typenamenpnanna_valueclassmethodr    r   r   r   r      s'    DDvvH r   r   c                  z    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y)r   i  NFc                ,   t        |t        j                        st        d      |D ]c  }t        || j                  j
                        r$t        j                  |      r:t        dt        | j                  j
                        z          || _	        y )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   sp    &"**-BCC 	VCc4::??3BGGCL =DJJOO@T TUU	V 	r   r#   r*   c               d    t        j                  t        |      t              }||d d   | |      S Nr#   )r   emptylenobject)r   scalarsr#   r*   r'   s        r   _from_sequencezListArray._from_sequence8   s)    xxGF3Q4yr   c                    t        |t        j                        r| j                  |   S  t	        |       | j                  |         S N)r    numbersIntegralr'   r   )r(   items     r   __getitem__zListArray.__getitem__>   s;    dG,,-99T?" 4:diio..r   c                ,    t        | j                        S r7   )r2   r'   r(   s    r   __len__zListArray.__len__E   s    499~r   c           	         t        j                  | j                  D cg c]*  }t        |t               xr t        j
                  |      , c}t              S c c}w r/   )r   arrayr'   r    r   isnanbool)r(   xs     r   r%   zListArray.isnaH   sE    xx>BiiHAt$$4!4HPT
 	
Hs   /Ac                   t        j                  |      }d}|rV|| j                  j                  }|dk  j	                         rt
        	 |D cg c]  }|dk7  r| j                  |   n| }}n	 |D cg c]  }| j                  |    }}| j                  |      S c c}w # t        $ r}t        |      |d }~ww xY wc c}w # t        $ r}t        |      |d }~ww xY w)NzIIndex is out of bounds or cannot do a non-empty take from an empty array.)	r   asarrayr#   r   any
ValueErrorr'   
IndexErrorr5   )r(   indexer
allow_fill
fill_valuemsglocoutputerrs           r   takezListArray.takeM   s     **W%2 	
 !!ZZ00
"!!#  /KRDGcRiDIIcNZ? /4;<S$))C.<< ""6**  / o3./ = / o3./sT   B# B-B# 1C 5C C B# #	B=,B88B= C 	CCCc                >     t        |       | j                  d d        S r7   )r   r'   r=   s    r   r*   zListArray.copyk   s    tDz$))A,''r   c                   t        |t        | j                              r#|| j                  k(  r|r| j                         S | S t	        |      rCt        |      s8t        j                  | j                  D cg c]  }t        |       c}|      S |s!t        j                  | j                  |      S t        j                  | j                  ||      S c c}w )Nr0   r-   )r    r   r#   r*   r   r   r   r@   r'   r&   rF   )r(   r#   r*   rC   s       r   astypezListArray.astypen   s    eT$**-.5DJJ3Fyy{"KU#OE,B88TYY7SV7uEE::diiu5588DIIU>>	 8s   6Cc                v    t        j                  |D cg c]  }|j                   c}      } | |      S c c}w r7   )r   concatenater'   )r   	to_concatrC   r'   s       r   _concat_same_typezListArray._concat_same_type{   s.    ~~y9!qvv9:4y :s   6)NF)r   None)r   int)FN)T)r   r   r   r   r#   __array_priority__r,   r   r5   r;   r>   r%   rQ   r*   rT   rX   r   r   r   r   r   ,   s_    KE .2  
/

+<(?  r   r   c                 `   t         j                  j                  d      } t        j                  dt              }t        d      D cg c]Q  }t        | j                  dd            D cg c]*  }| j                  t        t        j                              , c}S c}|d d  |S c c}w c c}w )N   d   r0   r   
   )r   randomdefault_rngr1   r3   rangeintegerschoicer   stringascii_letters)rngr'   _s      r   	make_datari      s    
))


"C88Cv&D s :?s||Ar?R9STAD--.	/TDG K 	Us   "B+*/B&
B+&B+)__doc__
__future__r   r8   re   typingr   numpyr   pandas.core.dtypes.baser   pandasr$   pandas.api.typesr   r   pandas.core.arraysr   pandas._typingr	   r   r   ri   r   r   r   <module>rs      sQ   
 #      2  .% "R Rjr   