o
    5c                     @  s   d Z ddlmZ ddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlZddlmZmZ ddlmZ G dd	 d	eZG d
d deZd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_t)ExtensionDtype)is_object_dtypeis_string_dtype)ExtensionArrayc                   @  s(   e Zd ZeZdZejZe	dddZ
dS )	ListDtypelistreturntype_t[ListArray]c                 C  s   t S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	ListArray)cls r   W/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/extension/list/array.pyconstruct_array_type   s   	zListDtype.construct_array_typeN)r
   r   )__name__
__module____qualname__r	   typenamenpnanna_valueclassmethodr   r   r   r   r   r      s    r   c                   @  sr   e Zd Ze ZdZddddZeddd	Zd
d Z	dddZ
dd ZdddZdd ZdddZedd ZdS )r   i  NFr
   Nonec                 C  sT   t |tjs
td|D ]}t || jjs$t|s$tdt| jj q|| _	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valr   r   r   __init__/   s   
zListArray.__init__c                 C  s&   t jt|td}||d d < | |S )Nr   )r   emptylenobject)r   scalarsr   r%   r"   r   r   r   _from_sequence7   s   zListArray._from_sequencec                 C  s(   t |tjr| j| S t| | j| S N)r   numbersIntegralr"   r   )r#   itemr   r   r   __getitem__=   s   
zListArray.__getitem__intc                 C  s
   t | jS r.   )r*   r"   r#   r   r   r   __len__D   s   
zListArray.__len__c                 C  s   t jdd | jD tdS )Nc                 S  s"   g | ]}t |t ot|qS r   )r   r	   r   isnan.0xr   r   r   
<listcomp>I   s   " z"ListArray.isna.<locals>.<listcomp>r(   )r   arrayr"   boolr4   r   r   r   r    G   s   zListArray.isnac              
     s   t |}d}|r7 d u rjj |dk  rtz fdd|D }W n. ty6 } zt||d }~ww zfdd|D }W n tyS } zt||d }~ww |S )NzIIndex is out of bounds or cannot do a non-empty take from an empty array.c                   s"   g | ]}|d krj | n qS )r=   r"   r8   loc
fill_valuer#   r   r   r:   ]   s    z"ListArray.take.<locals>.<listcomp>c                   s   g | ]} j | qS r   r>   r?   r4   r   r   r:   d   s    )r   asarrayr   r   any
ValueError
IndexErrorr-   )r#   indexer
allow_fillrB   msgoutputerrr   rA   r   takeL   s.   




zListArray.takec                 C  s   t | | jd d  S r.   )r   r"   r4   r   r   r   r%   j   s   zListArray.copyTc                 C  sf   t |t| jr|| jkr|r|  S | S t|r*t|s*tjdd | jD |dS tj| j||dS )Nc                 S  s   g | ]}t |qS r   )r!   r7   r   r   r   r:   t   s    z$ListArray.astype.<locals>.<listcomp>r(   )r   r%   )	r   r   r   r%   r   r   r   r;   r"   )r#   r   r%   r   r   r   astypem   s   zListArray.astypec                 C  s   t dd |D }| |S )Nc                 S  s   g | ]}|j qS r   r>   r7   r   r   r   r:   y   s    z/ListArray._concat_same_type.<locals>.<listcomp>)r   concatenate)r   	to_concatr"   r   r   r   _concat_same_typew   s   zListArray._concat_same_type)NF)r
   r   )r
   r3   )FN)T)r   r   r   r   r   __array_priority__r'   r   r-   r2   r5   r    rL   r%   rM   rP   r   r   r   r   r   +   s    



r   c                  C  s,   t jdtd} dd tdD | d d < | S )Nd   r(   c                 S  s&   g | ]}d d t tddD qS )c                 S  s   g | ]}t tjqS r   )randomchoicestringascii_lettersr8   _r   r   r   r:      s    z(make_data.<locals>.<listcomp>.<listcomp>r   
   )rangerS   randintrW   r   r   r   r:      s    zmake_data.<locals>.<listcomp>)r   r)   r+   rZ   r>   r   r   r   	make_data}   s
   r\   )__doc__
__future__r   r/   rS   rU   numpyr   pandas._typingr   pandas.core.dtypes.baser   pandasr   pandas.api.typesr   r   pandas.core.arraysr   r   r   r\   r   r   r   r   <module>   s    R