a
    <b                     @  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 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)OpsMixin)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   s/Users/vegardjervell/Documents/master/model/venv/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_boolean3   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'   8   s   r'   c                      s   e Zd ZU ded< edd Zedd Zed5d	d
Zdd Zdd fddZ	dd Z
dd Zd6 fdd	Zedd Zdd Zdd Zedddd Zd!d" Zd7d#d$Zd%d& Zed'd( Zd)d* Zdd+d,dd-d.d/Zd8d1d2Zd9d3d4Z  ZS ):ArrowExtensionArrayzpa.ChunkedArray_datac                 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.   arrr   r   r   from_scalarsO   s    


z ArrowExtensionArray.from_scalarsc                 C  s    t |tjsJ | t|gS N)r/   r"   Arrayr3   )r   r6   r   r   r   
from_array^   s    zArrowExtensionArray.from_arrayNFc                 C  s
   |  |S r8   )r7   )r   Zscalarsr.   copyr   r   r   _from_sequencec   s    z"ArrowExtensionArray._from_sequencec                 C  s   t | j dt| j dS )N())r   r   reprr,   r   r   r   r   __repr__g   s    zArrowExtensionArray.__repr__r   r   c                   s4   |d u s|| j ju r$t|   S tt |S r8   )r.   r$   r   isnaanysuper__contains__)r   obj	__class__r   r   rD   j   s    z ArrowExtensionArray.__contains__c                 C  s6   t |r| j | S | j | }t| |S d S r8   )r   r,   	to_pandasr   r7   )r   itemvalsr   r   r   __getitem__r   s    zArrowExtensionArray.__getitem__c                 C  s
   t | jS r8   )r0   r,   r   r   r   r   __len__y   s    zArrowExtensionArray.__len__Tc                   s8   t |t| jr*|| jkr*|r&|  S | S t ||S r8   )r/   r   r.   r;   rC   astype)r   r.   r;   rF   r   r   rM   |   s
    zArrowExtensionArray.astypec                 C  s   | j S r8   )_dtyper   r   r   r   r.      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   r2   r,   r   r"   r3   pdrA   rH   )r   otheropresultr   r   r   _logical_method   s     z#ArrowExtensionArray._logical_methodc                 C  s,   t |t| st| |S | |tjS r8   )r/   r   r   r4   __eq__rU   operatoreq)r   rR   r   r   r   rV      s    zArrowExtensionArray.__eq__intc                 C  s   t dd | jjD S )Nc                 s  s*   | ]"}|  D ]}|d ur|jV  qqd S r8   )bufferssize).0chunkxr   r   r   	<genexpr>   s   z-ArrowExtensionArray.nbytes.<locals>.<genexpr>)sumr,   chunksr   r   r   r   nbytes   s    zArrowExtensionArray.nbytesc                 C  s   t | j }t| |S r8   )rQ   rA   r,   rH   r   r7   )r   Znasr   r   r   rA      s    zArrowExtensionArray.isnac                 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,   rH   r
   r.   r$   r   r<   )r   indicesrd   rc   datarT   r   r   r   r      s    
zArrowExtensionArray.takec                 C  s   t | t| jS r8   )r   r;   r,   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 r8   )r,   ra   )r\   r^   r   r   r   r_          z8ArrowExtensionArray._concat_same_type.<locals>.<genexpr>)r1   	itertoolschainfrom_iterabler"   r3   )r   Z	to_concatra   r6   r   r   r   _concat_same_type   s    
z%ArrowExtensionArray._concat_same_typec                 C  s   t | | j  S r8   )r   r7   r,   rH   r   r   r   r   
__invert__   s    zArrowExtensionArray.__invert__)skipnar*   )r!   rm   c             
   K  s`   |r| |     }n| }zt||}W n* tyP } zt|W Y d }~n
d }~0 0 |f i |S r8   )rA   getattrAttributeError	TypeError)r   r!   rm   kwargsr6   rS   errr   r   r   _reduce   s    zArrowExtensionArray._reducer   c                 C  s   t | j  S r8   )r   r,   rH   rB   r   Zaxisoutr   r   r   rB      s    zArrowExtensionArray.anyc                 C  s   t | j  S r8   )r   r,   rH   allrt   r   r   r   rv      s    zArrowExtensionArray.all)NF)T)FN)r   N)r   N)r   r   r   __annotations__r%   r7   r:   r<   r@   rD   rK   rL   rM   r&   r.   rU   rV   rb   rA   r   r;   rk   rl   rs   rB   rv   __classcell__r   r   rF   r   r+   L   s6   



	



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"J || _t | _d S r8   )	r/   r"   ChunkedArray
ValueErrorr   r   r,   r   rN   r   r5   r   r   r   __init__   s
    zArrowBoolArray.__init__Nr   r   r   r|   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"J || _t | _d S r8   )	r/   r"   ry   rz   r   stringr,   r'   rN   r{   r   r   r   r|      s
    zArrowStringArray.__init__Nr}   r   r   r   r   r)      s   r)   )__doc__
__future__r   r;   rh   rW   Znumpyr   Zpyarrowr"   Zpandas._typingr   ZpandasrQ   Zpandas.api.extensionsr   r   r   r   Zpandas.api.typesr   Zpandas.core.arrayliker	   Zpandas.core.constructionr
   r   r'   r+   r   r)   r   r   r   r   <module>   s(    
