o
    ŀg                     @  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   U/var/www/html/myenv/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                   @  sx   e Zd Ze ZdZddddZedd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__r   r&   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 r0   )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#   boolr6   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#   r:   loc
fill_valuer$   r   r   r<   ^   s    z"ListArray.take.<locals>.<listcomp>c                   s   g | ]} j | qS r   r@   rA   r6   r   r   r<   e   s    )r   asarrayr   r   any
ValueError
IndexErrorr/   )r$   indexer
allow_fillrD   msgoutputerrr   rC   r   takeM   s.   




zListArray.takec                 C  s   t | | jd d  S r0   )r   r#   r6   r   r   r   r&   k   s   zListArray.copyTc                 C  sz   t |t| jr|| jkr|r|  S | S t|r*t|s*tjdd | jD |dS |s4tj	| j|dS tj| j||dS )Nc                 S  s   g | ]}t |qS r   )r"   r9   r   r   r   r<   u   s    z$ListArray.astype.<locals>.<listcomp>r*   r)   )
r   r   r   r&   r   r   r   r=   r#   rE   )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@   r9   r   r   r   r<   }   s    z/ListArray._concat_same_type.<locals>.<listcomp>)r   concatenate)r   	to_concatr#   r   r   r   _concat_same_type{   s   zListArray._concat_same_type)NF)r   r   )r   r5   )FN)T)r   r   r   r	   r   __array_priority__r(   r   r/   r4   r7   r!   rN   r&   rO   rR   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r:   _rngr   r   r<      s    z(make_data.<locals>.<listcomp>.<listcomp>r   
   )rangeintegersrY   r[   r   r   r<      s    zmake_data.<locals>.<listcomp>)r   randomdefault_rngr+   r-   r^   r@   r   r[   r   	make_data   s   
rb   )__doc__
__future__r   r1   rW   typingr   numpyr   pandas.core.dtypes.baser   pandasr    pandas.api.typesr   r   pandas.core.arraysr   pandas._typingr   r	   r   rb   r   r   r   r   <module>   s    U