o
    $i                     @   s   d dl 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mZmZmZmZ d dlZd dlmZ eddG dd dejjjZeddejjjG d	d
 d
ejjjZdS )    N)lib)	ArrayLikeDtypePositionalIndexerTakeIndexernpt)	PublicAPIalpha)	stabilityc                
   @   s  e Zd ZdZdejjej fddZ	e
ddddejjej d	ejedf d
edd fddZe
dejjej dd dd fddZdedejfddZd2ddZdefddZdedefddZddejfd	ejd d
ededejfddZedej j!j"fdd Z#edefd!d"Z$d3d#d$Z%dejfd%d&Z&ddd'd(e'd)ed*ejdd fd+d,Z(d4d-d.Z)e
d/ejjd  dd fd0d1Z*dS )5PythonObjectArrayzJImplements the Pandas extension array interface for the Arrow object arrayvaluesc                 C   s.   t |}tjt|td| _|| jd d < d S )Ndtype)listnpemptylenobjectr   )selfr   vals r   b/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/air/util/object_extensions/pandas.py__init__   s   zPythonObjectArray.__init__NF)r   copyscalarsr   r   returnc                C      t |S Nr   )clsr   r   r   r   r   r   _from_sequence   s   z PythonObjectArray._from_sequenceoriginalc                 C   r   r   r   )r   r   r!   r   r   r   _from_factorized"   s   z"PythonObjectArray._from_factorizeditemc                 C   s
   | j | S r   r   )r   r#   r   r   r   __getitem__(      
zPythonObjectArray.__getitem__c                 C   s   || j |< d S r   r$   )r   keyvaluer   r   r   __setitem__+   s   zPythonObjectArray.__setitem__c                 C   
   t | jS r   )r   r   r   r   r   r   __len__.   r&   zPythonObjectArray.__len__otherc                 C   s0   t |tr| j|jkS t |tjr| j|kS tS r   )
isinstancer   r   r   ndarrayNotImplemented)r   r-   r   r   r   __eq__1   s
   

zPythonObjectArray.__eq__)znpt.DTypeLikeNna_valuec                 C   s6   | j }|s
|tjur| }|tjur|||  < |S r   )r   r   
no_defaultr   isna)r   r   r   r2   resultr   r   r   to_numpy9   s   
zPythonObjectArray.to_numpyc                 C   s   t  S r   )PythonObjectDtyper+   r   r   r   r   F   s   zPythonObjectArray.dtypec                 C   s   | j jS r   )r   nbytesr+   r   r   r   r8   J   s   zPythonObjectArray.nbytesc                 C   s   t jjjjj| jS r   )rayairutilobject_extensionsarrowArrowPythonObjectArrayfrom_objectsr   )r   typer   r   r   __arrow_array__N   s   z!PythonObjectArray.__arrow_array__c                 C   s   t | jS r   )pdisnullr   r+   r   r   r   r4   S   s   zPythonObjectArray.isna
allow_fill
fill_valueindicesrE   rF   c                C   s<   |r
|d u r
| j j}tjjj| j|||d}| j|| j dS )NrD   r   )r   r2   rB   core
algorithmstaker   r    )r   rG   rE   rF   r5   r   r   r   rJ   V   s   
zPythonObjectArray.takec                 C   r*   r   )r   r   r+   r   r   r   r   e   r&   zPythonObjectArray.copy	to_concatc                 C   s   dd |D }| t |S )Nc                 S   s   g | ]}|j qS r   r$   ).0elementr   r   r   
<listcomp>l   s    z7PythonObjectArray._concat_same_type.<locals>.<listcomp>)r   concatenate)r   rK   values_to_concatr   r   r   _concat_same_typeh   s   z#PythonObjectArray._concat_same_type)r   Nr   )r   r   )+__name__
__module____qualname____doc__collectionsabcIterabletypingAnyr   classmethodSequenceUnionr   boolr    r"   r   r%   r)   intr,   r   r   r1   r   r3   r   r/   r6   propertyrB   api
extensionsExtensionDtyper   r8   rA   r4   r   rJ   r   rQ   r   r   r   r   r      s~    	






r   c                   @   sr   e Zd ZedefddZedd ZedefddZed	edefd
dZ	de
jejejf defddZdS )r7   stringc                 C   s&   |dkrt d| j d| d|  S )Npython_object()zCannot construct a 'z' from '')	TypeErrorrR   )r   rd   r   r   r   construct_from_strings   s   z'PythonObjectDtype.construct_from_stringc                 C      t S )a   
        The scalar type for the array, e.g. ``int``
        It's expected ``ExtensionArray[item]`` returns an instance
        of ``ExtensionDtype.type`` for scalar ``item``, assuming
        that value is valid (not NA). NA values do not need to be
        instances of `type`.
        )r   r+   r   r   r   r@   y   s   	zPythonObjectDtype.typer   c                 C   s   dS )Nre   r   r+   r   r   r   name   s   zPythonObjectDtype.namer   c                 C   ri   )zC
        Return the array type associated with this dtype.
        r   )r   r   r   r   construct_array_type   s   z&PythonObjectDtype.construct_array_typearrayc                 C   s   t | S r   )r   	to_pylist)r   rl   r   r   r   __from_arrow__   s   z PythonObjectDtype.__from_arrow__N)rR   rS   rT   r[   strrh   r`   r@   rj   rk   rY   r]   paArrayChunkedArrayr   rn   r   r   r   r   r7   p   s    

r7   )collections.abcrV   rY   numpyr   pandasrB   pyarrowrp   pandas._libsr   pandas._typingr   r   r   r   r   $ray.air.util.object_extensions.arrowr9   ray.util.annotationsr   ra   rb   ExtensionArrayr   register_extension_dtyperc   r7   r   r   r   r   <module>   s    `