U
    iâËdL"  ã                   @   s6  d Z ddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZ G dd„ deƒZG d	d
„ d
ejƒZG dd„ deƒZG dd„ dejƒZe	 e¡dd„ ƒZe	 e¡dd„ ƒZe
dƒdd„ ƒZ e
eƒdd„ ƒZ!eeƒG dd„ dej"ƒƒZ#eeƒG dd„ dej"ƒƒZ$eeddƒ eeddƒ eed d!ƒ d"d#„ Z%d$d%„ Z&ed&eƒd'd(„ ƒZ'ed&eƒd)d*„ ƒZ(edeej)ƒd+d,„ ƒZ*edeej)ƒd-d.„ ƒZ+eeej)eƒd/d0„ ƒZ,eeƒd1d2„ ƒZ-eeƒd3d4„ ƒZ.eeƒd5d6„ ƒZ/eeƒd7d8„ ƒZ0eed9ƒd:d;„ ƒZ1ee2ƒd<d=„ ƒZ3eed>ƒd?d@„ ƒZ4dS )Az.
Implementation of a minimal Pandas-like API.
é    N)ÚtypesÚcgutils)Úmodels)Útypeof_implÚtype_callableÚregister_modelÚlower_builtinÚboxÚunboxÚNativeValueÚoverloadÚoverload_attributeÚoverload_methodÚmake_attribute_wrapper)Úimpl_ret_borrowedc                   @   s8   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
S )ÚIndexz-
    A minimal pandas.Index-like object.
    c                 C   s(   t |tjƒst‚|jdkst‚|| _d S ©Né   )Ú
isinstanceÚnpÚndarrayÚAssertionErrorÚndimÚ_data)ÚselfÚdata© r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/pdlike_usecase.pyÚ__init__   s    zIndex.__init__c                 C   s
   t | jƒS ©N)Úiterr   ©r   r   r   r   Ú__iter__   s    zIndex.__iter__c                 C   s   | j jS r   )r   Údtyper!   r   r   r   r#      s    zIndex.dtypec                 C   s   | j jS r   )r   Úflagsr!   r   r   r   r$   !   s    zIndex.flagsN©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   Úpropertyr#   r$   r   r   r   r   r      s   
r   c                       sF   e Zd ZdZdZ‡ fdd„Zedd„ ƒZedd„ ƒZddd„Z	‡  Z
S )Ú	IndexTypez+
    The type class for Index objects.
    éè  c                    s   || _ tt| ƒ |d|¡ d S r   )ÚpyclassÚsuperr+   r   )r   r#   Úlayoutr-   ©Ú	__class__r   r   r   ,   s    zIndexType.__init__c                 C   s   | j | j| jfS r   )r-   r#   r/   r!   r   r   r   Úkey0   s    zIndexType.keyc                 C   s   t  | jd| j¡S r   )r   ÚArrayr#   r/   r!   r   r   r   Úas_array4   s    zIndexType.as_arrayNr   c                 C   s6   |dkst ‚|d kr| j}|p"| j}t| ƒ||| jƒS r   )r   r#   r/   Útyper-   ©r   r#   r   r/   r   r   r   Úcopy8   s
    
zIndexType.copy)Nr   N©r&   r'   r(   r)   Zarray_priorityr   r*   r2   r4   r7   Ú__classcell__r   r   r0   r   r+   &   s   

r+   c                   @   s8   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
S )ÚSeriesz.
    A minimal pandas.Series-like object.
    c                 C   s<   t |tjƒst‚t |tƒst‚|jdks,t‚|| _|| _d S r   )r   r   r   r   r   r   Ú_valuesÚ_index)r   r   Úindexr   r   r   r   E   s
    zSeries.__init__c                 C   s
   t | jƒS r   )r    r;   r!   r   r   r   r"   L   s    zSeries.__iter__c                 C   s   | j jS r   )r;   r#   r!   r   r   r   r#   O   s    zSeries.dtypec                 C   s   | j jS r   )r;   r$   r!   r   r   r   r$   S   s    zSeries.flagsNr%   r   r   r   r   r:   @   s   
r:   c                       sF   e Zd ZdZdZ‡ fdd„Zedd„ ƒZedd„ ƒZddd„Z	‡  Z
S )Ú
SeriesTypez,
    The type class for Series objects.
    r,   c                    sL   t |tƒst‚|| _|| _t | jdd¡| _d||f }tt	| ƒ 
|¡ d S )Nr   ÚCzseries(%s, %s))r   r+   r   r#   r=   r   r3   Úvaluesr.   r>   r   )r   r#   r=   Únamer0   r   r   r   ^   s    zSeriesType.__init__c                 C   s   | j | jfS r   )r#   r=   r!   r   r   r   r2   f   s    zSeriesType.keyc                 C   s   | j S r   )r@   r!   r   r   r   r4   j   s    zSeriesType.as_arrayNr   r?   c                 C   s6   |dkst ‚|dkst ‚|d kr&| j}t| ƒ|| jƒS ©Nr   r?   )r   r#   r5   r=   r6   r   r   r   r7   n   s
    zSeriesType.copy)Nr   r?   r8   r   r   r0   r   r>   X   s   

r>   c                 C   s.   t | j|ƒ}|jdkst‚t|j|jt| ƒƒS r   )r   r   r   r   r+   r#   r/   r5   )ÚvalÚcÚarrtyr   r   r   Útypeof_indexv   s    rF   c                 C   s@   t | j|ƒ}t | j|ƒ}|jdks&t‚|jdks4t‚t|j|ƒS rB   )r   r<   r;   r   r   r/   r>   r#   )rC   rD   r=   rE   r   r   r   Útypeof_series|   s
    rG   Z__array_wrap__c                 C   s   dd„ }|S )Nc                 S   s(   t | ttfƒr$| j|j|j|jd�S d S )N)r#   r   r/   )r   r+   r>   r7   r#   r   r/   )Z
input_typeÚresultr   r   r   Útyper†   s
    þztype_array_wrap.<locals>.typerr   ©ÚcontextrI   r   r   r   Útype_array_wrap„   s    rL   c                 C   s   dd„ }|S )Nc                 S   sB   t |tƒr>t | tjƒr>| jdks$t‚| jdks2t‚t| j|ƒS d S )Nr?   r   )	r   r+   r   r3   r/   r   r   r>   r#   )r   r=   r   r   r   rI   �   s    z&type_series_constructor.<locals>.typerr   rJ   r   r   r   Útype_series_constructorŽ   s    rM   c                   @   s   e Zd Zdd„ ZdS )Ú
IndexModelc                 C   s"   d|j fg}tj | |||¡ d S )Nr   )r4   r   ÚStructModelr   ©r   ZdmmZfe_typeÚmembersr   r   r   r   �   s    zIndexModel.__init__N©r&   r'   r(   r   r   r   r   r   rN   ›   s   rN   c                   @   s   e Zd Zdd„ ZdS )ÚSeriesModelc                 C   s*   d|j fd|jfg}tj | |||¡ d S )Nr=   r@   )r=   r4   r   rO   r   rP   r   r   r   r   £   s    þzSeriesModel.__init__NrR   r   r   r   r   rS   ¡   s   rS   r   r   r=   r<   r@   r;   c                 K   s   t  |¡| |f|ŽS r   ©r   Zcreate_struct_proxy©rK   ÚbuilderÚtypÚkwargsr   r   r   Ú
make_index®   s    rY   c                 K   s   t  |¡| |f|ŽS r   rT   rU   r   r   r   Úmake_series±   s    rZ   Z	__array__c                 C   s$   t | ||jd |d d�}| d¡S )Nr   ©Úrefr   )rY   ÚargsÚ_get_ptr_by_name©rK   rV   Úsigr]   rC   r   r   r   Úindex_as_array´   s    ra   c                 C   s$   t | ||jd |d d�}| d¡S )Nr   r[   r@   )rZ   r]   r^   r_   r   r   r   Úseries_as_array¹   s    rb   c                 C   s,   t | ||jƒ}|d |_t| ||j| ¡ ƒS r   )rY   Úreturn_typer   r   Ú	_getvalue)rK   rV   r`   r]   Údestr   r   r   Úindex_wrap_array¾   s    
rf   c                 C   sN   t | ||jd |d d�}t | ||jƒ}|d |_|j|_t| ||j| ¡ ƒS )Nr   ©Úvaluer   )rZ   r]   rc   r@   r=   r   rd   )rK   rV   r`   r]   Úsrcre   r   r   r   Úseries_wrap_arrayÄ   s
    
rj   c                 C   s6   |\}}t | ||jƒ}||_||_t| ||j| ¡ ƒS r   )rZ   rc   r=   r@   r   rd   )rK   rV   r`   r]   r   r=   Úseriesr   r   r   Úpdseries_constructorÌ   s
    rl   c                 C   s<   |j  |d¡}t|j|j| ƒ}| | j|¡j|_t	| 
¡ ƒS )z7
    Convert a Index object to a native structure.
    r   )ÚpyapiÚobject_getattr_stringrY   rK   rV   r
   r4   rh   r   r   rd   )rW   ÚobjrD   r   r=   r   r   r   Úunbox_indexÕ   s    rp   c                 C   s\   |j  |d¡}|j  |d¡}t|j|j| ƒ}| | j|¡j|_| | j|¡j|_t	| 
¡ ƒS )z8
    Convert a Series object to a native structure.
    r<   r;   )rm   rn   rZ   rK   rV   r
   r=   rh   r@   r   rd   )rW   ro   rD   r=   r@   rk   r   r   r   Úunbox_seriesà   s    rq   c                 C   sN   t |j|j| |d�}|j |j | j¡¡}| | j|j	¡}|j 
||f¡}|S )z=
    Convert a native index structure to a Index object.
    rg   )rY   rK   rV   rm   ÚunserializeÚserialize_objectr-   r	   r4   r   Úcall_function_objargs)rW   rC   rD   r=   ÚclassobjÚarrayobjÚindexobjr   r   r   Ú	box_indexî   s
    rx   c                 C   s^   t |j|j| |d�}|j |j t¡¡}| | j|j¡}| | j	|j
¡}|j |||f¡}|S )z?
    Convert a native series structure to a Series object.
    rg   )rZ   rK   rV   rm   rr   rs   r:   r	   r=   r4   r@   rt   )rW   rC   rD   rk   ru   rw   rv   Z	seriesobjr   r   r   Ú
box_seriesú   s    ry   Zis_monotonic_increasingc                 C   s   dd„ }|S )z'
    Index.is_monotonic_increasing
    c                 S   s>   | j }t|ƒdkrdS |d }|D ]}||k r4 dS |}q"dS )Nr   TF)r   Úlen)r=   r   ÚuÚvr   r   r   Úgetter  s    z-index_is_monotonic_increasing.<locals>.getterr   )r=   r}   r   r   r   Úindex_is_monotonic_increasing  s    r~   c                 C   s   t | tƒrdd„ }|S dS )z
    len(Series)
    c                 S   s
   t | jƒS r   )rz   r;   )rk   r   r   r   Úlen_impl  s    zseries_len.<locals>.len_implN)r   r>   )rk   r   r   r   r   Ú
series_len  s    
r€   Zclipc                 C   s   dd„ }|S )z
    Series.clip(...)
    c                 S   sR   | j  ¡ }tt|ƒƒD ].}|| }||k r4|||< q||kr|||< qt|| jƒS r   )r;   r7   Úrangerz   r:   r<   )rk   ÚlowerÚupperr   Úir|   r   r   r   Ú	clip_impl(  s    


zseries_clip.<locals>.clip_implr   )rk   r‚   rƒ   r…   r   r   r   Úseries_clip#  s    
r†   )5r)   Únumpyr   Z
numba.corer   r   Znumba.core.datamodelr   Znumba.core.extendingr   r   r   r   r	   r
   r   r   r   r   r   Znumba.core.imputilsr   Úobjectr   ÚBufferr+   r:   ZArrayCompatibler>   ÚregisterrF   rG   rL   rM   rO   rN   rS   rY   rZ   ra   rb   r3   rf   rj   rl   rp   rq   rx   ry   r~   rz   r€   r†   r   r   r   r   Ú<module>   sd   4


	












	