a
    j=ic}                     @  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	m
Z
 ddlZddlmZmZmZ ddl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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)ExtensionDtyperegister_extension_dtypetake)	is_scalar)ArrowExtensionArray)extract_arrayc                   @  sD   e Zd ZejZdZdZej	Z
eddddZedddd	Zd
S )ArrowBoolDtypebZ
arrow_boolztype_t[ArrowBoolArray]returnc                 C  s   t S zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )ArrowBoolArraycls r   t/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/extension/arrow/arrays.pyconstruct_array_type&   s    	z#ArrowBoolDtype.construct_array_typeboolc                 C  s   dS )NTr   selfr   r   r   _is_boolean1   s    zArrowBoolDtype._is_booleanN)__name__
__module____qualname__npbool_typekindnamepaNULLna_valueclassmethodr   propertyr   r   r   r   r   r
      s   
r
   c                   @  s0   e Zd ZeZdZdZejZ	e
ddddZdS )ArrowStringDtypeUZarrow_stringztype_t[ArrowStringArray]r   c                 C  s   t S r   )ArrowStringArrayr   r   r   r   r   >   s    	z%ArrowStringDtype.construct_array_typeN)r   r   r   strr   r   r    r!   r"   r#   r$   r   r   r   r   r   r&   6   s   r&   c                      s   e Zd ZU ded< ed(ddZdd Zd	d
 fddZdd Zd) fdd	Z	e
dd Zdd Zdd Zd*ddZedd Zdd Zdddd	d d!d"Zd+d$d%Zd,d&d'Z  ZS )-r   zpa.ChunkedArray_dataNFc                 C  sd   t || r| |jS t|sDt |trD| tu r2tnt}tjg |d}t	
t	t|g}| |S )Ndtype)
isinstancer*   lenlistr   r   r)   r   arrayr!   chunked_arrayasarray)r   valuesr,   copyarrr   r   r   _from_sequenceM   s    


z"ArrowExtensionArray._from_sequencec                 C  s   t | j dt| j dS )N())r   r   reprr*   r   r   r   r   __repr__^   s    zArrowExtensionArray.__repr__r   r   c                   s4   |d u s|| j ju r$t|   S tt |S N)r,   r#   r   isnaanysuper__contains__)r   obj	__class__r   r   r?   a   s    z ArrowExtensionArray.__contains__c                 C  s6   t |r| j | S | j | }t| |S d S r;   )r   r*   	to_pandasr   r6   )r   itemvalsr   r   r   __getitem__i   s    zArrowExtensionArray.__getitem__Tc                   s8   t |t| jr*|| jkr*|r&|  S | S t ||S r;   )r-   r   r,   r4   r>   astype)r   r,   r4   rA   r   r   rG   p   s
    zArrowExtensionArray.astypec                 C  s   | j S r;   )_dtyper   r   r   r   r,   x   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)r-   r   NotImplementedErrorr   r0   r*   r   r!   r1   pdr<   rC   )r   otheropresultr   r   r   _logical_method|   s     z#ArrowExtensionArray._logical_methodc                 C  s,   t |t| st| |S | |tjS r;   )r-   r   r   r2   __eq__rO   operatoreq)r   rL   r   r   r   rP      s    zArrowExtensionArray.__eq__c                 C  sJ   | j  }t|dd}|r*|d u r*| jj}t||||d}| j|| jdS )NT)Zextract_numpy)
fill_value
allow_fillr+   )r*   rC   r	   r,   r#   r   r6   )r   indicesrT   rS   datarN   r   r   r   r      s    
zArrowExtensionArray.takec                 C  s,   t tjdd |D }t|}| |S )Nc                 s  s   | ]}|j jV  qd S r;   )r*   chunks).0xr   r   r   	<genexpr>       z8ArrowExtensionArray._concat_same_type.<locals>.<genexpr>)r/   	itertoolschainfrom_iterabler!   r1   )r   Z	to_concatrW   r5   r   r   r   _concat_same_type   s    
z%ArrowExtensionArray._concat_same_typec                 C  s   t | | j  S r;   )r   r6   r*   rC   r   r   r   r   
__invert__   s    zArrowExtensionArray.__invert__)skipnar)   )r    ra   c             
   K  s`   |r| |     }n| }zt||}W n* tyP } zt|W Y d }~n
d }~0 0 |f i |S r;   )r<   getattrAttributeError	TypeError)r   r    ra   kwargsr5   rM   errr   r   r   _reduce   s    zArrowExtensionArray._reducer   c                 C  s   t | j  S r;   )r   r*   rC   r=   r   Zaxisoutr   r   r   r=      s    zArrowExtensionArray.anyc                 C  s   t | j  S r;   )r   r*   rC   allrh   r   r   r   rj      s    zArrowExtensionArray.all)NF)T)FN)r   N)r   N)r   r   r   __annotations__r$   r6   r:   r?   rF   rG   r%   r,   rO   rP   r   r_   r`   rg   r=   rj   __classcell__r   r   rA   r   r   J   s$   

	



r   c                   @  s   e Zd ZddddZdS )r   Noner   c                 C  s4   t |tjst|jt ks"J || _t | _d S r;   )	r-   r!   ChunkedArray
ValueErrorr   r   r*   r
   rH   r   r3   r   r   r   __init__   s
    zArrowBoolArray.__init__Nr   r   r   rq   r   r   r   r   r      s   r   c                   @  s   e Zd ZddddZdS )r(   rm   r   c                 C  s4   t |tjst|jt ks"J || _t | _d S r;   )	r-   r!   rn   ro   r   stringr*   r&   rH   rp   r   r   r   rq      s
    zArrowStringArray.__init__Nrr   r   r   r   r   r(      s   r(   )__doc__
__future__r   r\   rQ   numpyr   Zpyarrowr!   Zpandas._typingr   ZpandasrK   Zpandas.api.extensionsr   r   r   Zpandas.api.typesr   Zpandas.core.arrays.arrowr   Z_ArrowExtensionArrayZpandas.core.constructionr	   r
   r&   r   r(   r   r   r   r   <module>   s$   j
