B
    `                 @   s   d 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Z	ddl
ZddlmZmZmZ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.
    N)Type)ExtensionArrayExtensionDtyperegister_extension_dtypetakec               @   sH   e Zd ZejZdZdZej	Z
eed dddZeedddZd	S )
ArrowBoolDtypebZ
arrow_boolArrowBoolArray)returnc             C   s   t S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )r	   )cls r   R/home/dcms/DCMS/lib/python3.7/site-packages/pandas/tests/extension/arrow/arrays.pyconstruct_array_type"   s    	z#ArrowBoolDtype.construct_array_typec             C   s   dS )NTr   )selfr   r   r   _is_boolean-   s    zArrowBoolDtype._is_booleanN)__name__
__module____qualname__npbool_typekindnamepaNULLna_valueclassmethodr   r   propertyboolr   r   r   r   r   r      s   
r   c               @   s4   e Zd ZeZdZdZejZ	e
ed dddZdS )ArrowStringDtypeUZarrow_stringArrowStringArray)r
   c             C   s   t S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )r!   )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   r   2   s   r   c                   s   e Zd Zedd Zedd Zed0ddZd	d
 Zdd Zdd Z	d1 fdd	Z
edd Zdd Zdd Zdd Zdd Zedd Zdd Zd2d d!Zd"d# Zed$d% Zd&d' Zd3eed(d)d*Zd4d,d-Zd5d.d/Z  ZS )6ArrowExtensionArrayc             C   s    t t t|g}| |S )N)r   chunked_arrayarrayr   Zasarray)r   valuesarrr   r   r   from_scalarsG   s    z ArrowExtensionArray.from_scalarsc             C   s    t |tjst| t|gS )N)
isinstancer   ArrayAssertionErrorr$   )r   r'   r   r   r   
from_arrayL   s    zArrowExtensionArray.from_arrayNFc             C   s
   |  |S )N)r(   )r   Zscalarsdtypecopyr   r   r   _from_sequenceQ   s    z"ArrowExtensionArray._from_sequencec             C   s   t | j dt| j dS )N())r   r   repr_data)r   r   r   r   __repr__U   s    zArrowExtensionArray.__repr__c             C   s<   t jj|r| j | S | j | }t| |S d S )N)pdapitypesZ	is_scalarr3   	to_pandasr   r(   )r   itemvalsr   r   r   __getitem__X   s    zArrowExtensionArray.__getitem__c             C   s
   t | jS )N)lenr3   )r   r   r   r   __len___   s    zArrowExtensionArray.__len__Tc                s8   t |t| jr*|| jkr*|r&|  S | S t ||S )N)r)   r   r-   r.   superastype)r   r-   r.   )	__class__r   r   r?   b   s
    zArrowExtensionArray.astypec             C   s   | j S )N)_dtype)r   r   r   r   r-   j   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%   r3   r	   r   r$   r5   isnar8   )r   otheropresultr   r   r   _boolean_opn   s
    zArrowExtensionArray._boolean_opc             C   s    t |t| sdS | |tjS )NF)r)   r   rH   operatoreq)r   rE   r   r   r   __eq__w   s    zArrowExtensionArray.__eq__c             C   s   |  |tjS )N)rH   rI   and_)r   rE   r   r   r   __and__}   s    zArrowExtensionArray.__and__c             C   s   |  |tjS )N)rH   rI   or_)r   rE   r   r   r   __or__   s    zArrowExtensionArray.__or__c             C   s   t dd | jjD S )Nc             s   s*   | ]"}|  D ]}|d k	r|jV  qqd S )N)bufferssize).0chunkxr   r   r   	<genexpr>   s   z-ArrowExtensionArray.nbytes.<locals>.<genexpr>)sumr3   chunks)r   r   r   r   nbytes   s    zArrowExtensionArray.nbytesc             C   s   t | j }t| |S )N)r5   rD   r3   r8   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)r-   )r3   r8   r-   r   r   r/   )r   indicesrZ   rY   datarG   r   r   r   r      s
    
zArrowExtensionArray.takec             C   s   t | t| jS )N)r   r.   r3   )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 )N)r3   rW   )rR   rT   r   r   r   rU      s    z8ArrowExtensionArray._concat_same_type.<locals>.<genexpr>)list	itertoolschainfrom_iterabler   r$   )r   Z	to_concatrW   r'   r   r   r   _concat_same_type   s    
z%ArrowExtensionArray._concat_same_typec             C   s   t | | j  S )N)r   r(   r3   r8   )r   r   r   r   
__invert__   s    zArrowExtensionArray.__invert__)r   skipnac          
   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   rc   kwargsr'   rF   errr   r   r   _reduce   s    zArrowExtensionArray._reducer   c             C   s   t | j  S )N)r   r3   r8   any)r   axisoutr   r   r   rj      s    zArrowExtensionArray.anyc             C   s   t | j  S )N)r   r3   r8   all)r   rk   rl   r   r   r   rm      s    zArrowExtensionArray.all)NF)T)FN)T)r   N)r   N)r   r   r   r   r(   r,   r/   r4   r;   r=   r?   r   r-   rH   rK   rM   rO   rX   rD   r   r.   ra   rb   r"   r   ri   rj   rm   __classcell__r   r   )r@   r   r#   F   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+   r3   r   rA   )r   r&   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 ZdS )r!   c             C   s4   t |tjst|jt ks"t|| _t | _	d S )N)
r)   r   ro   rp   r   stringr+   r3   r   rA   )r   r&   r   r   r   rq      s
    zArrowStringArray.__init__N)r   r   r   rq   r   r   r   r   r!      s   r!   )__doc__r.   r^   rI   typingr   numpyr   Zpyarrowr   Zpandasr5   Zpandas.api.extensionsr   r   r   r   r   r   r#   r	   r!   r   r   r   r   <module>   s   t
