B
    Y0d                 @  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               @  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   U/var/www/html/venv/lib/python3.7/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_boolean2   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 )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )ArrowStringArray)r   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"   7   s
   r"   c                  s   e Zd ZU ded< edd Zedd Zed3d	d
Zdd Zdd Z	dd Z
d4 fdd	Zedd Zdd Zdd ZeddddZdd Zd5d d!Zd"d# Zed$d% Zd&d' Zdd(d)d*d+d,d-Zd6d/d0Zd7d1d2Z  ZS )8ArrowExtensionArrayzpa.ChunkedArray_datac             C  s    t t t|g}| |S )N)r   chunked_arrayarrayr   Zasarray)r   valuesarrr   r   r   from_scalarsN   s    z ArrowExtensionArray.from_scalarsc             C  s    t |tjst| t|gS )N)
isinstancer   ZArrayAssertionErrorr(   )r   r+   r   r   r   
from_arrayS   s    zArrowExtensionArray.from_arrayNFc             C  s
   |  |S )N)r,   )r   Zscalarsdtypecopyr   r   r   _from_sequenceX   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__c             C  s6   t |r| j | S | j | }t| |S d S )N)r   r'   	to_pandasr   r,   )r   itemvalsr   r   r   __getitem___   s    zArrowExtensionArray.__getitem__c             C  s
   t | jS )N)lenr'   )r   r   r   r   __len__f   s    zArrowExtensionArray.__len__Tc               s8   t |t| jr*|| jkr*|r&|  S | S t ||S )N)r-   r   r0   r1   superastype)r   r0   r1   )	__class__r   r   r>   i   s
    zArrowExtensionArray.astypec             C  s   | j S )N)_dtype)r   r   r   r   r0   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)r-   r   NotImplementedErrorr   r)   r'   r   r   r(   pdisnar7   )r   otheropresultr   r   r   _logical_methodu   s
    z#ArrowExtensionArray._logical_methodc             C  s    t |t| sdS | |tjS )NF)r-   r   rH   operatoreq)r   rE   r   r   r   __eq__~   s    zArrowExtensionArray.__eq__int)r   c             C  s   t dd | jjD S )Nc             s  s*   | ]"}|  D ]}|d k	r|jV  qqd S )N)Zbufferssize).0chunkxr   r   r   	<genexpr>   s   z-ArrowExtensionArray.nbytes.<locals>.<genexpr>)sumr'   chunks)r   r   r   r   nbytes   s    zArrowExtensionArray.nbytesc             C  s   t | j }t| |S )N)rC   rD   r'   r7   r   r,   )r   Znasr   r   r   rD      s    zArrowExtensionArray.isnac             C  s>   | j  }|r|d kr| jj}t||||d}| j|| jdS )N)
fill_value
allow_fill)r0   )r'   r7   r0   r   r   r2   )r   indicesrV   rU   datarG   r   r   r   r      s
    
zArrowExtensionArray.takec             C  s   t | t| jS )N)r   r1   r'   )r   r   r   r   r1      s    zArrowExtensionArray.copyc             C  s,   t tjdd |D }t|}| |S )Nc             s  s   | ]}|j jV  qd S )N)r'   rS   )rN   rP   r   r   r   rQ      s    z8ArrowExtensionArray._concat_same_type.<locals>.<genexpr>)list	itertoolschainfrom_iterabler   r(   )r   Z	to_concatrS   r+   r   r   r   _concat_same_type   s    
z%ArrowExtensionArray._concat_same_typec             C  s   t | | j  S )N)r   r,   r'   r7   )r   r   r   r   
__invert__   s    zArrowExtensionArray.__invert__)skipnar%   r   )r   r_   c         
   K  sZ   |r| |     }n| }yt||}W n( tk
rN } z
t|W d d }~X Y nX |f |S )N)rD   getattrAttributeError	TypeError)r   r   r_   kwargsr+   rF   errr   r   r   _reduce   s    zArrowExtensionArray._reducer   c             C  s   t | j  S )N)r   r'   r7   any)r   axisoutr   r   r   rf      s    zArrowExtensionArray.anyc             C  s   t | j  S )N)r   r'   r7   all)r   rg   rh   r   r   r   ri      s    zArrowExtensionArray.all)NF)T)FN)r   N)r   N)r   r   r   __annotations__r    r,   r/   r2   r6   r:   r<   r>   r!   r0   rH   rK   rT   rD   r   r1   r]   r^   re   rf   ri   __classcell__r   r   )r?   r   r&   K   s*   
		
	
r&   c               @  s   e Zd Zdd ZdS )r   c             C  s4   t |tjst|jt ks"t|| _t | _	d S )N)
r-   r   ChunkedArray
ValueErrorr   r   r.   r'   r
   r@   )r   r*   r   r   r   __init__   s
    zArrowBoolArray.__init__N)r   r   r   rn   r   r   r   r   r      s   r   c               @  s   e Zd Zdd ZdS )r$   c             C  s4   t |tjst|jt ks"t|| _t | _	d S )N)
r-   r   rl   rm   r   stringr.   r'   r"   r@   )r   r*   r   r   r   rn      s
    zArrowStringArray.__init__N)r   r   r   rn   r   r   r   r   r$      s   r$   )__doc__
__future__r   r1   rZ   rI   numpyr   Zpyarrowr   Zpandas._typingr   ZpandasrC   Zpandas.api.extensionsr   r   r   r   Zpandas.api.typesr   Zpandas.core.arrayliker	   r
   r"   r&   r   r$   r   r   r   r   <module>   s$   p
