o
    g                     @  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Z	ddl
mZ ddlZddlmZmZmZmZ ddlmZ ddlmZ eG dd	 d	eZeG d
d deZG dd deeZG dd deZG dd deZdS )a  
Rudimentary Apache Arrow-backed ExtensionArray.

At the moment, just a boolean array / type is implemented.
Eventually, we'll want to parametrize the type and support
multiple dtypes. Not all methods are implemented yet, and the
current implementation is not efficient.
    )annotationsN)type_t)ExtensionArrayExtensionDtyperegister_extension_dtypetake)	is_scalar)OpsMixinc                   @  s<   e Zd ZejZdZdZej	Z
edddZeddd	Zd
S )ArrowBoolDtypeb
arrow_boolreturntype_t[ArrowBoolArray]c                 C     t S zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )ArrowBoolArraycls r   a/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/tests/extension/arrow/arrays.pyconstruct_array_type'      	z#ArrowBoolDtype.construct_array_typeboolc                 C  s   dS )NTr   selfr   r   r   _is_boolean2   s   zArrowBoolDtype._is_booleanN)r   r   )r   r   )__name__
__module____qualname__npbool_typekindnamepaNULLna_valueclassmethodr   propertyr   r   r   r   r   r
      s    
r
   c                   @  s,   e Zd ZeZdZdZejZ	e
dddZdS )	ArrowStringDtypeUarrow_stringr   type_t[ArrowStringArray]c                 C  r   r   )ArrowStringArrayr   r   r   r   r   ?   r   z%ArrowStringDtype.construct_array_typeN)r   r,   )r   r   r   strr!   r"   r#   r$   r%   r&   r'   r   r   r   r   r   r)   7   s    r)   c                      s   e Zd ZU ded< edd Zedd Zed4d	d
Zdd Zdd Z	dd Z
d5 fdd	Zedd Zdd Zdd Zed6ddZdd Zd7d d!Zd"d# Zed$d% Zd&d' Zdd(d8d-d.Zd9d0d1Zd9d2d3Z  ZS ):ArrowExtensionArrayzpa.ChunkedArray_datac                 C  s    t t t|g}| |S N)r$   chunked_arrayarrayr   asarray)r   valuesarrr   r   r   from_scalarsN   s   z ArrowExtensionArray.from_scalarsc                 C  s    t |tjsJ | t|gS r1   )
isinstancer$   Arrayr2   )r   r6   r   r   r   
from_arrayS   s   zArrowExtensionArray.from_arrayNFc                 C  s
   |  |S r1   )r7   )r   scalarsdtypecopyr   r   r   _from_sequenceX   s   
z"ArrowExtensionArray._from_sequencec                 C  s   t | j dt| j dS )N())r!   r   reprr0   r   r   r   r   __repr__\   s   zArrowExtensionArray.__repr__c                 C  s2   t |r| j | S | j | }t| |S r1   )r   r0   	to_pandasr!   r7   )r   itemvalsr   r   r   __getitem___   s   zArrowExtensionArray.__getitem__c                 C  s
   t | jS r1   )lenr0   r   r   r   r   __len__f   s   
zArrowExtensionArray.__len__Tc                   s8   t |t| jr|| jkr|r|  S | S t ||S r1   )r8   r!   r<   r=   superastype)r   r<   r=   	__class__r   r   rJ   i   s
   zArrowExtensionArray.astypec                 C  s   | j S r1   )_dtyper   r   r   r   r<   q   s   zArrowExtensionArray.dtypec              	   C  sT   t |t| s
t |t| jt|j}tttj|t	
| j dgS )N)mask)r8   r!   NotImplementedErrorr   r3   r0   r   r$   r2   pdisnarC   )r   otheropresultr   r   r   _logical_methodu   s    z#ArrowExtensionArray._logical_methodc                 C  s    t |t| s	dS | |tjS NF)r8   r!   rU   operatoreq)r   rR   r   r   r   __eq__~   s   zArrowExtensionArray.__eq__r   intc                 C  s   t dd | jjD S )Nc                 s  s,    | ]}|  D ]
}|d ur|jV  qqd S r1   )bufferssize).0chunkxr   r   r   	<genexpr>   s    z-ArrowExtensionArray.nbytes.<locals>.<genexpr>)sumr0   chunksr   r   r   r   nbytes   s   zArrowExtensionArray.nbytesc                 C  s   t | j }t| |S r1   )rP   rQ   r0   rC   r!   r7   )r   nasr   r   r   rQ      s   zArrowExtensionArray.isnac                 C  s>   | j  }|r|d u r| jj}t||||d}| j|| jdS )N)
fill_value
allow_fill)r<   )r0   rC   r<   r&   r   r>   )r   indicesrf   re   datarT   r   r   r   r      s
   
zArrowExtensionArray.takec                 C  s   t | t| jS r1   )r!   r=   r0   r   r   r   r   r=      s   zArrowExtensionArray.copyc                 C  s,   t tjdd |D }t|}| |S )Nc                 s  s    | ]}|j jV  qd S r1   )r0   rb   )r]   r_   r   r   r   r`      s    z8ArrowExtensionArray._concat_same_type.<locals>.<genexpr>)list	itertoolschainfrom_iterabler$   r2   )r   	to_concatrb   r6   r   r   r   _concat_same_type   s   
z%ArrowExtensionArray._concat_same_typec                 C  s   t | | j  S r1   )r!   r7   r0   rC   r   r   r   r   
__invert__   s   zArrowExtensionArray.__invert__)skipnar#   r.   rp   r   c             
   K  sT   |r
| |     }n| }zt||}W n ty" } zt|d }~ww |di |S )Nr   )rQ   getattrAttributeError	TypeError)r   r#   rp   kwargsr6   rS   errr   r   r   _reduce   s   zArrowExtensionArray._reducer   c                 C     t | j  S r1   )r   r0   rC   anyr   axisoutr   r   r   rx         zArrowExtensionArray.anyc                 C  rw   r1   )r   r0   rC   allry   r   r   r   r}      r|   zArrowExtensionArray.allrV   )T)r   rZ   )FN)r#   r.   rp   r   )r   N)r   r   r   __annotations__r'   r7   r:   r>   rB   rF   rH   rJ   r(   r<   rU   rY   rc   rQ   r   r=   rn   ro   rv   rx   r}   __classcell__r   r   rK   r   r/   K   s6   
 


	
	

r/   c                   @     e Zd Zdd ZdS )r   c                 C  4   t |tjst|jt ksJ || _t | _d S r1   )	r8   r$   ChunkedArray
ValueErrorr!   r    r0   r
   rM   r   r5   r   r   r   __init__   
   zArrowBoolArray.__init__Nr   r   r   r   r   r   r   r   r          r   c                   @  r   )r-   c                 C  r   r1   )	r8   r$   r   r   r!   stringr0   r)   rM   r   r   r   r   r      r   zArrowStringArray.__init__Nr   r   r   r   r   r-      r   r-   )__doc__
__future__r   r=   rj   rW   numpyr   pyarrowr$   pandas._typingr   pandasrP   pandas.api.extensionsr   r   r   r   pandas.api.typesr   pandas.core.arrayliker	   r
   r)   r/   r   r-   r   r   r   r   <module>   s&    p
