o
    ۾iL"                     @   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                   @   8   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   N/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/pdlike_usecase.py__init__   s   
zIndex.__init__c                 C   
   t | jS N)iterr   r   r   r   r   __iter__      
zIndex.__iter__c                 C      | j jS r    )r   dtyper"   r   r   r   r&         zIndex.dtypec                 C   r%   r    )r   flagsr"   r   r   r   r(   !   r'   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&   layoutr1   	__class__r   r   r   ,   s   zIndexType.__init__c                 C   s   | j | j| jfS r    )r1   r&   r3   r"   r   r   r   key0   s   zIndexType.keyc                 C   s   t | jd| jS r   )r   Arrayr&   r3   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&   r3   typer1   r   r&   r   r3   r   r   r   copy8   s
   
zIndexType.copy)Nr   Nr*   r+   r,   r-   array_priorityr   r.   r6   r8   r;   __classcell__r   r   r4   r   r/   &   s    

r/   c                   @   r   )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   r   r    )r!   r@   r"   r   r   r   r#   L   r$   zSeries.__iter__c                 C   r%   r    )r@   r&   r"   r   r   r   r&   O   r'   zSeries.dtypec                 C   r%   r    )r@   r(   r"   r   r   r   r(   S   r'   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.
    r0   c                    sL   t |tsJ || _|| _t| jdd| _d||f }tt| 	| d S )Nr   Czseries(%s, %s))
r   r/   r&   rB   r   r7   valuesr2   rC   r   )r   r&   rB   namer4   r   r   r   ^   s   zSeriesType.__init__c                 C   s   | j | jfS r    )r&   rB   r"   r   r   r   r6   f   s   zSeriesType.keyc                 C   s   | j S r    )rE   r"   r   r   r   r8   j   s   zSeriesType.as_arrayNr   rD   c                 C   s6   |dksJ |dksJ |d u r| j }t| || jS Nr   rD   )r&   r9   rB   r:   r   r   r   r;   n   s
   zSeriesType.copyrG   r<   r   r   r4   r   rC   X   s    

rC   c                 C   s.   t | j|}|jdksJ t|j|jt| S r   )r   r   r   r/   r&   r3   r9   )valcarrtyr   r   r   typeof_indexv   s   rK   c                 C   s@   t | j|}t | j|}|jdksJ |jdksJ t|j|S rG   )r   rA   r@   r   r3   rC   r&   )rH   rI   rB   rJ   r   r   r   typeof_series|   s
   rL   __array_wrap__c                 C      dd }|S )Nc                 S   s(   t | ttfr| j|j|j|jdS d S )N)r&   r   r3   )r   r/   rC   r;   r&   r   r3   )
input_typeresultr   r   r   typer   s   ztype_array_wrap.<locals>.typerr   contextrQ   r   r   r   type_array_wrap      rT   c                 C   rN   )Nc                 S   sF   t |trt | tjr!| jdksJ | jdksJ t| j|S d S d S )NrD   r   )r   r/   r   r7   r3   r   rC   r&   )r   rB   r   r   r   rQ      s
   z&type_series_constructor.<locals>.typerr   rR   r   r   r   type_series_constructor   rU   rV   c                   @      e Zd Zdd ZdS )
IndexModelc                 C   s"   d|j fg}tj| ||| d S )Nr   )r8   r   StructModelr   r   dmmfe_typemembersr   r   r   r      s   zIndexModel.__init__Nr*   r+   r,   r   r   r   r   r   rX          rX   c                   @   rW   )SeriesModelc                 C   s*   d|j fd|jfg}tj| ||| d S )NrB   rE   )rB   r8   r   rY   r   rZ   r   r   r   r      s   zSeriesModel.__init__Nr^   r   r   r   r   r`      r_   r`   r   r   rB   rA   rE   r@   c                 K      t || |fi |S r    r   create_struct_proxyrS   buildertypkwargsr   r   r   
make_index      rh   c                 K   ra   r    rb   rd   r   r   r   make_series   ri   rj   	__array__c                 C   $   t | ||jd |d d}|dS )Nr   refr   )rh   args_get_ptr_by_namerS   re   sigro   rH   r   r   r   index_as_array      
rs   c                 C   rl   )Nr   rm   rE   )rj   ro   rp   rq   r   r   r   series_as_array   rt   ru   c                 C   s,   t | ||j}|d |_t| ||j| S r   )rh   return_typer   r   	_getvalue)rS   re   rr   ro   destr   r   r   index_wrap_array   s   
ry   c                 C   sN   t | ||jd |d d}t | ||j}|d |_|j|_t| ||j| S )Nr   valuer   )rj   ro   rv   rE   rB   r   rw   )rS   re   rr   ro   srcrx   r   r   r   series_wrap_array   s
   
r}   c                 C   s6   |\}}t | ||j}||_||_t| ||j| S r    )rj   rv   rB   rE   r   rw   )rS   re   rr   ro   r   rB   seriesr   r   r   pdseries_constructor   s
   r   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_stringrh   rS   re   r
   r8   r{   r   r   rw   )rf   objrI   r   rB   r   r   r   unbox_index   s   r   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.
    rA   r@   )r   r   rj   rS   re   r
   rB   r{   rE   r   rw   )rf   r   rI   rB   rE   r~   r   r   r   unbox_series   s   r   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.
    rz   )rh   rS   re   r   unserializeserialize_objectr1   r	   r8   r   call_function_objargs)rf   rH   rI   rB   classobjarrayobjindexobjr   r   r   	box_index   s
   r   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.
    rz   )rj   rS   re   r   r   r   r?   r	   rB   r8   rE   r   )rf   rH   rI   r~   r   r   r   	seriesobjr   r   r   
box_series   s   r   is_monotonic_increasingc                 C   rN   )z'
    Index.is_monotonic_increasing
    c                 S   s>   | j }t|dkrdS |d }|D ]}||k r dS |}qdS )Nr   TF)r   len)rB   r   uvr   r   r   getter  s   z-index_is_monotonic_increasing.<locals>.getterr   )rB   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   r   r    )r   r@   )r~   r   r   r   len_impl  r$   zseries_len.<locals>.len_implN)r   rC   )r~   r   r   r   r   
series_len  s   
r   clipc                 C   s   dd }|S )z
    Series.clip(...)
    c                 S   sR   | j  }tt|D ]}|| }||k r|||< q||kr"|||< qt|| jS r    )r@   r;   ranger   r?   rA   )r~   lowerupperr   ir   r   r   r   	clip_impl(  s   

zseries_clip.<locals>.clip_implr   )r~   r   r   r   r   r   r   series_clip#  s   
r   )5r-   numpyr   
numba.corer   r   numba.core.datamodelr   numba.core.extendingr   r   r   r   r	   r
   r   r   r   r   r   numba.core.imputilsr   objectr   Bufferr/   r?   ArrayCompatiblerC   registerrK   rL   rT   rV   rY   rX   r`   rh   rj   rs   ru   r7   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sf    4


	








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