o
    ҷh?                     @  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r: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_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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   T/var/www/html/venv/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__0   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_sequence8   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__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   s   " z"ListArray.isna.<locals>.<listcomp>r)   )r   arrayr#   boolr5   r   r   r   r!   H   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#   r9   loc
fill_valuer$   r   r   r;   ^   s    z"ListArray.take.<locals>.<listcomp>c                   s   g | ]} j | qS r   r?   r@   r5   r   r   r;   e   s    )r   asarrayr   r   any
ValueError
IndexErrorr.   )r$   indexer
allow_fillrC   msgoutputerrr   rB   r   takeM   s.   




zListArray.takec                 C  s   t | | jd d  S r/   )r   r#   r5   r   r   r   r&   k   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"   r8   r   r   r   r;   u   s    z$ListArray.astype.<locals>.<listcomp>r)   )r   r&   )	r   r   r   r&   r   r   r   r<   r#   )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?   r8   r   r   r   r;   z   s    z/ListArray._concat_same_type.<locals>.<listcomp>)r   concatenate)r   	to_concatr#   r   r   r   _concat_same_typex   s   zListArray._concat_same_type)NF)r   r   )r   r4   )FN)T)r   r   r   r	   r   __array_priority__r(   r   r.   r3   r6   r!   rM   r&   rN   rQ   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r9   _rngr   r   r;      s    z(make_data.<locals>.<listcomp>.<listcomp>r   
   )rangeintegersrX   rZ   r   r   r;      s    zmake_data.<locals>.<listcomp>)r   randomdefault_rngr*   r,   r]   r?   r   rZ   r   	make_data~   s   
ra   )__doc__
__future__r   r0   rV   typingr   numpyr   pandas.core.dtypes.baser   pandasr    pandas.api.typesr   r   pandas.core.arraysr   pandas._typingr   r	   r   ra   r   r   r   r   <module>   s    R