a
    
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J |jdksJ || _d S N   )
isinstancenpndarrayndim_data)selfdata r   c/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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J |d u r| j }|p"| j}t| ||| jS 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)   r1   r3   r6   __classcell__r   r   r/   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J t |tsJ |jdks,J || _|| _d S 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   r9   @   s   
r9   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J || _|| _t| jdd| _d||f }tt| 	| d S )Nr   Czseries(%s, %s))
r   r*   r"   r<   r   r2   valuesr-   r=   r   )r   r"   r<   namer/   r   r   r   ^   s    zSeriesType.__init__c                 C   s   | j | jfS r   )r"   r<   r    r   r   r   r1   f   s    zSeriesType.keyc                 C   s   | j S r   )r?   r    r   r   r   r3   j   s    zSeriesType.as_arrayNr   r>   c                 C   s6   |dksJ |dksJ |d u r&| j }t| || jS Nr   r>   )r"   r4   r<   r5   r   r   r   r6   n   s
    zSeriesType.copy)Nr   r>   r7   r   r   r/   r   r=   X   s   

r=   c                 C   s.   t | j|}|jdksJ t|j|jt| S r   )r   r   r   r*   r"   r.   r4   )valcarrtyr   r   r   typeof_indexv   s    rE   c                 C   s@   t | j|}t | j|}|jdks&J |jdks4J t|j|S rA   )r   r;   r:   r   r.   r=   r"   )rB   rC   r<   rD   r   r   r   typeof_series|   s
    rF   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=   r6   r"   r   r.   )Z
input_typeresultr   r   r   typer   s
    ztype_array_wrap.<locals>.typerr   contextrH   r   r   r   type_array_wrap   s    rK   c                 C   s   dd }|S )Nc                 S   sB   t |tr>t | tjr>| jdks$J | jdks2J t| j|S d S )Nr>   r   )r   r*   r   r2   r.   r   r=   r"   )r   r<   r   r   r   rH      s    z&type_series_constructor.<locals>.typerr   rI   r   r   r   type_series_constructor   s    rL   c                   @   s   e Zd Zdd ZdS )
IndexModelc                 C   s"   d|j fg}tj| ||| d S )Nr   )r3   r   StructModelr   r   ZdmmZfe_typemembersr   r   r   r      s    zIndexModel.__init__Nr%   r&   r'   r   r   r   r   r   rM      s   rM   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<   r3   r   rN   r   rO   r   r   r   r      s    zSeriesModel.__init__NrQ   r   r   r   r   rR      s   rR   r   r   r<   r;   r?   r:   c                 K   s   t || |fi |S r   r   Zcreate_struct_proxyrJ   buildertypkwargsr   r   r   
make_index   s    rX   c                 K   s   t || |fi |S r   rS   rT   r   r   r   make_series   s    rY   Z	__array__c                 C   s$   t | ||jd |d d}|dS )Nr   refr   )rX   args_get_ptr_by_namerJ   rU   sigr\   rB   r   r   r   index_as_array   s    r`   c                 C   s$   t | ||jd |d d}|dS )Nr   rZ   r?   )rY   r\   r]   r^   r   r   r   series_as_array   s    ra   c                 C   s,   t | ||j}|d |_t| ||j| S r   )rX   return_typer   r   	_getvalue)rJ   rU   r_   r\   destr   r   r   index_wrap_array   s    
re   c                 C   sN   t | ||jd |d d}t | ||j}|d |_|j|_t| ||j| S )Nr   valuer   )rY   r\   rb   r?   r<   r   rc   )rJ   rU   r_   r\   srcrd   r   r   r   series_wrap_array   s
    
ri   c                 C   s6   |\}}t | ||j}||_||_t| ||j| S r   )rY   rb   r<   r?   r   rc   )rJ   rU   r_   r\   r   r<   seriesr   r   r   pdseries_constructor   s
    rk   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_stringrX   rJ   rU   r
   r3   rg   r   r   rc   )rV   objrC   r   r<   r   r   r   unbox_index   s    ro   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:   )rl   rm   rY   rJ   rU   r
   r<   rg   r?   r   rc   )rV   rn   rC   r<   r?   rj   r   r   r   unbox_series   s    rp   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.
    rf   )rX   rJ   rU   rl   unserializeserialize_objectr,   r	   r3   r   call_function_objargs)rV   rB   rC   r<   classobjarrayobjindexobjr   r   r   	box_index   s
    rw   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.
    rf   )rY   rJ   rU   rl   rq   rr   r9   r	   r<   r3   r?   rs   )rV   rB   rC   rj   rt   rv   ru   Z	seriesobjr   r   r   
box_series   s    rx   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   )ry   r:   )rj   r   r   r   len_impl  s    zseries_len.<locals>.len_implN)r   r=   )rj   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:   r6   rangery   r9   r;   )rj   lowerupperr   ir{   r   r   r   	clip_impl(  s    


zseries_clip.<locals>.clip_implr   )rj   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   ZBufferr*   r9   ZArrayCompatibler=   registerrE   rF   rK   rL   rN   rM   rR   rX   rY   r`   ra   r2   re   ri   rk   ro   rp   rw   rx   r}   ry   r   r   r   r   r   r   <module>   sd   4


	







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