U
    ÎZj}  ã                   @  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   úf/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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k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 ks|| j jk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 k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>˜   s     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    r`   c             
   K  sZ   |r| |   ¡   }n| }zt||ƒ}W n( tk
rN } z
t|‚W 5 d }~X Y nX |f |ŽS r;   )r<   ÚgetattrÚAttributeErrorÚ	TypeError)r   r    r`   Ú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   Úallrg   r   r   r   ri   ¯   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_   rf   r=   ri   Ú__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"t‚|| _tƒ | _	d S r;   )
r-   r!   ÚChunkedArrayÚ
ValueErrorr   r   ÚAssertionErrorr*   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(   rl   r   c                 C  s4   t |tjƒst‚|jt ¡ ks"t‚|| _tƒ | _	d S r;   )
r-   r!   rm   rn   r   Ústringro   r*   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
