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   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/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-   Z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&   rA   r   r7   valuesr2   rB   r   )r   r&   rA   namer4   r   r   r   ^   s   zSeriesType.__init__c                 C   s   | j | jfS r    )r&   rA   r"   r   r   r   r6   f   s   zSeriesType.keyc                 C   s   | j S r    )rD   r"   r   r   r   r8   j   s   zSeriesType.as_arrayNr   rC   c                 C   s6   |dksJ |dksJ |d u r| j }t| || jS Nr   rC   )r&   r9   rA   r:   r   r   r   r;   n   s
   zSeriesType.copyrF   r<   r   r   r4   r   rB   X   s    

rB   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   rJ   c                 C   s@   t | j|}t | j|}|jdksJ |jdksJ t|j|S rF   )r   r@   r?   r   r3   rB   r&   )rG   rH   rA   rI   r   r   r   typeof_series|   s
   rK   Z__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/   rB   r;   r&   r   r3   )Z
input_typeresultr   r   r   typer   s   ztype_array_wrap.<locals>.typerr   contextrN   r   r   r   type_array_wrap      rQ   c                 C   rL   )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 )NrC   r   )r   r/   r   r7   r3   r   rB   r&   )r   rA   r   r   r   rN      s
   z&type_series_constructor.<locals>.typerr   rO   r   r   r   type_series_constructor   rR   rS   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   ZdmmZfe_typemembersr   r   r   r      s   zIndexModel.__init__Nr*   r+   r,   r   r   r   r   r   rU          rU   c                   @   rT   )SeriesModelc                 C   s*   d|j fd|jfg}tj| ||| d S )NrA   rD   )rA   r8   r   rV   r   rW   r   r   r   r      s   zSeriesModel.__init__NrY   r   r   r   r   r[      rZ   r[   r   r   rA   r@   rD   r?   c                 K      t || |fi |S r    r   Zcreate_struct_proxyrP   buildertypkwargsr   r   r   
make_index      rb   c                 K   r\   r    r]   r^   r   r   r   make_series   rc   rd   Z	__array__c                 C   $   t | ||jd |d d}|dS )Nr   refr   )rb   args_get_ptr_by_namerP   r_   sigrh   rG   r   r   r   index_as_array      
rl   c                 C   re   )Nr   rf   rD   )rd   rh   ri   rj   r   r   r   series_as_array   rm   rn   c                 C   s,   t | ||j}|d |_t| ||j| S r   )rb   return_typer   r   	_getvalue)rP   r_   rk   rh   destr   r   r   index_wrap_array   s   
rr   c                 C   sN   t | ||jd |d d}t | ||j}|d |_|j|_t| ||j| S )Nr   valuer   )rd   rh   ro   rD   rA   r   rp   )rP   r_   rk   rh   srcrq   r   r   r   series_wrap_array   s
   
rv   c                 C   s6   |\}}t | ||j}||_||_t| ||j| S r    )rd   ro   rA   rD   r   rp   )rP   r_   rk   rh   r   rA   seriesr   r   r   pdseries_constructor   s
   rx   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_stringrb   rP   r_   r
   r8   rt   r   r   rp   )r`   objrH   r   rA   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.
    r@   r?   )ry   rz   rd   rP   r_   r
   rA   rt   rD   r   rp   )r`   r{   rH   rA   rD   rw   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.
    rs   )rb   rP   r_   ry   unserializeserialize_objectr1   r	   r8   r   call_function_objargs)r`   rG   rH   rA   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.
    rs   )rd   rP   r_   ry   r~   r   r>   r	   rA   r8   rD   r   )r`   rG   rH   rw   r   r   r   Z	seriesobjr   r   r   
box_series   s   r   Zis_monotonic_increasingc                 C   rL   )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)rA   r   uvr   r   r   getter  s   z-index_is_monotonic_increasing.<locals>.getterr   )rA   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?   )rw   r   r   r   len_impl  r$   zseries_len.<locals>.len_implN)r   rB   )rw   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 r|||< q||kr"|||< qt|| jS r    )r?   r;   ranger   r>   r@   )rw   lowerupperr   ir   r   r   r   	clip_impl(  s   

zseries_clip.<locals>.clip_implr   )rw   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/   r>   ZArrayCompatiblerB   registerrJ   rK   rQ   rS   rV   rU   r[   rb   rd   rl   rn   r7   rr   rv   rx   r|   r}   r   r   r   r   r   r   r   r   r   r   <module>   sf    4


	








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