
    i                        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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                  4    e Zd ZeZdZej                  ZddZ	y)	ListDtypelistc                    t         S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	ListArrayselfs    ^/app/cer_product_mecsu/.venv/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_valuer    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)r   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)cls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   )r1   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%W 	 !!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.copyj   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 )Nr/   r,   )r    r   r#   r)   r   r   r   r?   r'   r&   rE   )r   r#   r)   rB   s       r   astypezListArray.astypem   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'   )r3   	to_concatrB   r'   s       r   _concat_same_typezListArray._concat_same_typez   s.    ~~y9!qvv9:4y :s   6)NF)r   None)r   int)FN)T)r   r   r   r   r#   __array_priority__r+   classmethodr5   r;   r=   r%   rP   r)   rS   rW   r   r   r   r   r   ,   s_    KE .2  
/

+:(?  r   r   c                `   t         j                  j                  d      }t        j                  | t              }t        |       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   r/   r   
   )r   randomdefault_rngr0   r2   rangeintegerschoicer   stringascii_letters)nrngr'   _s       r   	make_datari      s    
))


"C88AV$D q :?s||Ar?R9STAD--.	/TDG K 	Us   "B+*/B&
B+&B+)rf   rY   )__doc__
__future__r   r8   rd   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  .%  Q Qhr   