
    J/PhL"                        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e          Z G d	 d
ej                  Z G d de          Z G d dej                  Z e	j        e          d             Z e	j        e          d             Z e
d          d             Z  e
e          d             Z! ee           G d dej"                              Z# ee           G d dej"                              Z$ eedd            eedd            eedd           d Z%d Z& ed e          d!             Z' ed e          d"             Z( edeej)                  d#             Z* edeej)                  d$             Z+ eeej)        e          d%             Z, ee          d&             Z- ee          d'             Z. ee          d(             Z/ ee          d)             Z0 eed*          d+             Z1 ee2          d,             Z3 eed-          d.             Z4dS )/z.
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                   J    e Zd ZdZd Zd Zed             Zed             ZdS )Indexz-
    A minimal pandas.Index-like object.
    c                 f    t          |t          j                  sJ |j        dk    sJ || _        d S N   )
isinstancenpndarrayndim_data)selfdatas     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/pdlike_usecase.py__init__zIndex.__init__   s4    $
+++++yA~~~~


    c                 *    t          | j                  S N)iterr   r   s    r   __iter__zIndex.__iter__   s    DJr    c                     | j         j        S r"   )r   dtyper$   s    r   r'   zIndex.dtype       zr    c                     | j         j        S r"   )r   flagsr$   s    r   r*   zIndex.flags!   r(   r    N	__name__
__module____qualname____doc__r   r%   propertyr'   r*    r    r   r   r      sr           
          X      X     r    r   c                   Z     e Zd ZdZdZ fdZed             Zed             Zd	dZ	 xZ
S )
	IndexTypez+
    The type class for Index objects.
      c                 j    || _         t          t          |                               |d|           d S r   )pyclasssuperr3   r   )r   r'   layoutr6   	__class__s       r   r   zIndexType.__init__,   s2    i''q&99999r    c                 *    | j         | j        | j        fS r"   )r6   r'   r8   r$   s    r   keyzIndexType.key0   s    |TZ44r    c                 B    t          j        | j        d| j                  S r   )r   Arrayr'   r8   r$   s    r   as_arrayzIndexType.as_array4   s    {4:q$+666r    Nr   c                 t    |dk    sJ || j         }|p| j        } t          |           ||| j                  S r   )r'   r8   typer6   r   r'   r   r8   s       r   copyzIndexType.copy8   sC    qyyyy=JE&4;tDzz%666r    )Nr   Nr,   r-   r.   r/   array_priorityr   r0   r;   r>   rB   __classcell__r9   s   @r   r3   r3   &   s          N: : : : : 5 5 X5 7 7 X77 7 7 7 7 7 7 7r    r3   c                   J    e Zd ZdZd Zd Zed             Zed             ZdS )Seriesz.
    A minimal pandas.Series-like object.
    c                     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   indexs      r   r   zSeries.__init__E   sQ    $
+++++%'''''yA~~~~r    c                 *    t          | j                  S r"   )r#   rJ   r$   s    r   r%   zSeries.__iter__L   s    DL!!!r    c                     | j         j        S r"   )rJ   r'   r$   s    r   r'   zSeries.dtypeO       |!!r    c                     | j         j        S r"   )rJ   r*   r$   s    r   r*   zSeries.flagsS   rO   r    Nr+   r1   r    r   rH   rH   @   sr           " " " " " X" " " X" " "r    rH   c                   Z     e Zd ZdZdZ fdZed             Zed             Zd
d	Z	 xZ
S )
SeriesTypez,
    The type class for Series objects.
    r4   c                     t          |t                    sJ || _        || _        t	          j        | j        dd          | _        d|d|d}t          t          |           	                    |           d S )Nr   Czseries(z, ))
r   r3   r'   rL   r   r=   valuesr7   rR   r   )r   r'   rL   namer9   s       r   r   zSeriesType.__init__^   sv    %+++++

k$*a55#(55%%%0j$((.....r    c                     | j         | j        fS r"   )r'   rL   r$   s    r   r;   zSeriesType.keyf   s    z4:%%r    c                     | j         S r"   )rV   r$   s    r   r>   zSeriesType.as_arrayj   s
    {r    Nr   rT   c                 p    |dk    sJ |dk    sJ || j         } t          |           || j                  S Nr   rT   )r'   r@   rL   rA   s       r   rB   zSeriesType.copyn   sB    qyyyy}}}}=JEtDzz%,,,r    r[   rC   rF   s   @r   rR   rR   X   s          N/ / / / / & & X&   X- - - - - - - -r    rR   c                     t          | j        |          }|j        dk    sJ t          |j        |j        t          |                     S r   )r   r   r   r3   r'   r8   r@   )valcarrtys      r   typeof_indexr`   v   s>    	1%%E:????U[%,S		:::r    c                     t          | j        |          }t          | j        |          }|j        dk    sJ |j        dk    sJ t          |j        |          S r[   )r   rK   rJ   r   r8   rR   r'   )r]   r^   rL   r_   s       r   typeof_seriesrb   |   sX    
A&&EQ''E:????<3ek5)))r    __array_wrap__c                     d }|S )Nc                     t          | t          t          f          r'|                     |j        |j        |j                  S d S )N)r'   r   r8   )r   r3   rR   rB   r'   r   r8   )
input_typeresults     r   typerztype_array_wrap.<locals>.typer   sL    j9j"9:: 	9??(.*0- # 9 9 9	9 	9r    r1   contextrh   s     r   type_array_wraprk      s    9 9 9 Lr    c                     d }|S )Nc                     t          |t                    rIt          | t          j                  r1| j        dk    sJ | j        dk    sJ t          | j        |          S d S d S )NrT   r   )r   r3   r   r=   r8   r   rR   r'   )r   rL   s     r   rh   z&type_series_constructor.<locals>.typer   so    eY'' 	1JtU[,I,I 	1;#%%%%9>>>>dj%000	1 	1 	1 	1r    r1   ri   s     r   type_series_constructorrn      s    1 1 1 Lr    c                       e Zd Zd ZdS )
IndexModelc                 ^    d|j         fg}t          j                            | |||           d S )Nr   )r>   r   StructModelr   r   dmmfe_typememberss       r   r   zIndexModel.__init__   s5    G,-.##D#w@@@@@r    Nr,   r-   r.   r   r1   r    r   rp   rp      s(        A A A A Ar    rp   c                       e Zd Zd ZdS )SeriesModelc                 n    d|j         fd|j        fg}t          j                            | |||           d S )NrL   rV   )rL   r>   r   rr   r   rs   s       r   r   zSeriesModel.__init__   sC    gm$w'( 	##D#w@@@@@r    Nrw   r1   r    r   ry   ry      s(        A A A A Ar    ry   r   r   rL   rK   rV   rJ   c                 :     t          j        |          | |fi |S r"   r   create_struct_proxyrj   buildertypkwargss       r   
make_indexr      '    +7&s++GWGGGGGr    c                 :     t          j        |          | |fi |S r"   r|   r~   s       r   make_seriesr      r   r    	__array__c                 t    t          | ||j        d         |d                   }|                    d          S )Nr   refr   )r   args_get_ptr_by_namerj   r   sigr   r]   s        r   index_as_arrayr      s6    
Wgsx{Q
@
@
@C'''r    c                 t    t          | ||j        d         |d                   }|                    d          S )Nr   r   rV   )r   r   r   r   s        r   series_as_arrayr      s6    
gwa
A
A
AC)))r    c                     t          | ||j                  }|d         |_        t          | ||j        |                                          S r   )r   return_typer   r   	_getvalue)rj   r   r   r   dests        r   index_wrap_arrayr      s@    gw88DQDIWgs@P@PQQQr    c                     t          | ||j        d         |d                   }t          | ||j                  }|d         |_        |j        |_        t          | ||j        |                                          S )Nr   valuer   )r   r   r   rV   rL   r   r   )rj   r   r   r   srcr   s         r   series_wrap_arrayr      si    
gw47
C
C
CCw99Dq'DKDJWgs@P@PQQQr    c                     |\  }}t          | ||j                  }||_        ||_        t	          | ||j        |                                          S r"   )r   r   rL   rV   r   r   )rj   r   r   r   r   rL   seriess          r   pdseries_constructorr      sN    KD%'3?;;FFLFMWgs@P@P@R@RSSSr    c                     |j                             |d          }t          |j        |j        |           }|                    | j        |          j        |_        t          |
                                          S )z7
    Convert a Index object to a native structure.
    r   )pyapiobject_getattr_stringr   rj   r   r   r>   r   r   r   r   )r   objr^   r   rL   s        r   unbox_indexr      sb    
 7((g66Dqy!)S11Et,,2EJu(()))r    c                 z   |j                             |d          }|j                             |d          }t          |j        |j        |           }|                    | j        |          j        |_        |                    | j        |          j        |_        t          |
                                          S )z8
    Convert a Series object to a native structure.
    rK   rJ   )r   r   r   rj   r   r   rL   r   rV   r   r   )r   r   r^   rL   rV   r   s         r   unbox_seriesr      s    
 G))#x88EW**3	::FAIs33F7739e,,2FLGGCJ//5FMv''))***r    c                 &   t          |j        |j        | |          }|j                            |j                            | j                            }|                    | j        |j	                  }|j        
                    ||f          }|S )z=
    Convert a native index structure to a Index object.
    r   )r   rj   r   r   unserializeserialize_objectr6   r
   r>   r   call_function_objargs)r   r]   r^   rL   classobjarrayobjindexobjs          r   	box_indexr      sz     qy!)S<<<Ew""17#;#;CK#H#HIIHuuS\5:..Hw,,X{CCHOr    c                 h   t          |j        |j        | |          }|j                            |j                            t                              }|                    | j        |j                  }|                    | j	        |j
                  }|j                            |||f          }|S )z?
    Convert a native series structure to a Series object.
    r   )r   rj   r   r   r   r   rH   r
   rL   r>   rV   r   )r   r]   r^   r   r   r   r   	seriesobjs           r   
box_seriesr      s    
 AIs#>>>Fw""17#;#;F#C#CDDHuuSY--HuuS\6=11H--h88LMMIr    is_monotonic_increasingc                     d }|S )z'
    Index.is_monotonic_increasing
    c                 n    | j         }t          |          dk    rdS |d         }|D ]}||k     r dS |}dS )Nr   TF)r   len)rL   r   uvs       r   getterz-index_is_monotonic_increasing.<locals>.getter  sQ    {t99>>4G 	 	A1uuuuAAtr    r1   )rL   r   s     r   index_is_monotonic_increasingr     s    
	 	 	 Mr    c                 :    t          | t                    rd }|S dS )z
    len(Series)
    c                 *    t          | j                  S r"   )r   rJ   )r   s    r   len_implzseries_len.<locals>.len_impl  s    v~&&&r    N)r   rR   )r   r   s     r   
series_lenr     s4    
 &*%% 	' 	' 	' r    clipc                     d }|S )z
    Series.clip(...)
    c                     | j                                         }t          t          |                    D ]!}||         }||k     r|||<   ||k    r|||<   "t	          || j                  S r"   )rJ   rB   ranger   rH   rK   )r   lowerupperr   ir   s         r   	clip_implzseries_clip.<locals>.clip_impl(  st    ~""$$s4yy!! 	  	 AQA5yyQUQdFM***r    r1   )r   r   r   r   s       r   series_clipr   #  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   Bufferr3   rH   ArrayCompatiblerR   registerr`   rb   rk   rn   rr   rp   ry   r   r   r   r   r=   r   r   r   r   r   r   r   r   r   r   r   r1   r    r   <module>r      s0        % % % % % % % % ' ' ' ' ' 'K K K K K K K K K K K K K K K K K K K K K K K K K K 2 1 1 1 1 1         F      ,7 7 7 7 7 7 7 74" " " " "V " " "0- - - - -& - - -< e; ; ;
 f* * *     !  v   	A A A A A# A A A
 
A A A A A&$ A A A  y&' 2 2 2  z7H 5 5 5  z8Y 7 7 7H H HH H H {I&&( ( '&( {J''* * ('* EK88R R 98R
 U[99R R :9R vu{I..T T /.T y* * * z
+ 
+ 
+ Y	 	 	 Z	 	 	 I899  :9" 
#   V$$  %$  r    