a
    oÝEb¤  ã                   @  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   úc/home/ja/django-apps/lartica_env/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   Ú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(    
