a
    Pf                     @  s   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rtd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_CHECKING)ExtensionDtype)is_object_dtypeis_string_dtype)ExtensionArray)type_tc                   @  s,   e Zd ZeZdZejZe	ddddZ
dS )	ListDtypelistztype_t[ListArray]returnc                 C  s   t S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )	ListArray)cls r   Z/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/extension/list/array.pyconstruct_array_type    s    	zListDtype.construct_array_typeN)__name__
__module____qualname__r
   typenamenpnanna_valueclassmethodr   r   r   r   r   r	      s
   r	   c                   @  s   e Zd Ze ZdZdddddZedddd	d
Zdd Z	d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  NFNoner   c                 C  sT   t |tjstd|D ]0}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   Zndarray	TypeErrordtyper   pdisnastrdata)selfvaluesr   copyvalr   r   r   __init__0   s    zListArray.__init__r   r%   c                C  s&   t jt|td}||d d < | |S )Nr   )r   emptylenobject)r   Zscalarsr   r%   r"   r   r   r   _from_sequence8   s    zListArray._from_sequencec                 C  s,   t |tjr| j| S t| | j| S d 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__E   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>J       z"ListArray.isna.<locals>.<listcomp>r)   )r   arrayr"   boolr4   r   r   r   r    H   s    zListArray.isnac              
     s   t |}d}|r| d u r"jj |dk  r2tz fdd|D }W q tyx } zt||W Y d }~qd }~0 0 nFzfdd|D }W n. ty } zt||W Y d }~n
d }~0 0 |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:   e   r;   )r   asarrayr   r   any
ValueError
IndexErrorr-   )r#   ZindexerZ
allow_fillrC   msgoutputerrr   rB   r   takeM   s&    

" zListArray.takec                 C  s   t | | jd d  S r.   )r   r"   r4   r   r   r   r%   k   s    zListArray.copyTc                 C  s~   t |t| jr*|| jkr*|r&|  S | S t|rTt|sTtjdd | jD |dS |shtj	| j|dS tj| j||dS d S )Nc                 S  s   g | ]}t |qS r   )r!   r7   r   r   r   r:   u   r;   z$ListArray.astype.<locals>.<listcomp>r)   r(   )
r   r   r   r%   r   r   r   r<   r"   rD   )r#   r   r%   r   r   r   astypen   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:   }   r;   z/ListArray._concat_same_type.<locals>.<listcomp>)r   Zconcatenate)r   Z	to_concatr"   r   r   r   _concat_same_type{   s    zListArray._concat_same_type)NF)FN)T)r   r   r   r	   r   Z__array_priority__r'   r   r-   r2   r5   r    rK   r%   rL   rM   r   r   r   r   r   ,   s   

r   c                    s<   t jd t jdtd}  fddtdD | d d < | S )N   d   r)   c                   s*   g | ]"} fd dt  ddD qS )c                   s   g | ]}  ttjqS r   )choicer
   stringascii_lettersr8   _rngr   r   r:      r;   z(make_data.<locals>.<listcomp>.<listcomp>r   
   )rangeZintegersrS   rU   r   r   r:      s   zmake_data.<locals>.<listcomp>)r   randomZdefault_rngr*   r,   rX   r?   r   rU   r   	make_data   s    
rZ   )__doc__
__future__r   r/   rQ   typingr   numpyr   Zpandas.core.dtypes.baser   Zpandasr   Zpandas.api.typesr   r   Zpandas.core.arraysr   Zpandas._typingr   r	   r   rZ   r   r   r   r   <module>   s   U