
    xKgL"                        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j0                        Z G d de      Z G d dej6                        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jD                               Z# ee       G d dejD                               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jR                        d#        Z* edeejR                        d$        Z+ eeejR                  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.        Z4y)/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                   <    e Zd ZdZd Zd Zed        Zed        Zy)Indexz-
    A minimal pandas.Index-like object.
    c                 l    t        |t        j                        sJ |j                  dk(  sJ || _        y N   )
isinstancenpndarrayndim_data)selfdatas     ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/pdlike_usecase.py__init__zIndex.__init__   s-    $

+++yyA~~
    c                 ,    t        | j                        S N)iterr   r   s    r   __iter__zIndex.__iter__   s    DJJr    c                 .    | j                   j                  S r"   )r   dtyper$   s    r   r'   zIndex.dtype       zz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      s9    
         r    r   c                   N     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                 >    || _         t        t        |   |d|       y r   )pyclasssuperr3   r   )r   r'   layoutr6   	__class__s       r   r   zIndexType.__init__,   s    i'q&9r    c                 H    | j                   | j                  | j                  fS r"   )r6   r'   r8   r$   s    r   keyzIndexType.key0   s    ||TZZ44r    c                 X    t        j                  | j                  d| j                        S r   )r   Arrayr'   r8   r$   s    r   as_arrayzIndexType.as_array4   s    {{4::q$++66r    c                     |dk(  sJ || j                   }|xs | j                  } t        |       ||| j                        S r   )r'   r8   typer6   r   r'   r   r8   s       r   copyzIndexType.copy8   sC    qyy=JJE&4;;tDz%66r    )Nr   Nr,   r-   r.   r/   array_priorityr   r0   r;   r>   rB   __classcell__r9   s   @r   r3   r3   &   sA     N: 5 5 7 77r    r3   c                   <    e Zd ZdZd Zd Zed        Zed        Zy)Seriesz.
    A minimal pandas.Series-like object.
    c                     t        |t        j                        sJ t        |t              sJ |j                  dk(  sJ || _        || _        y r   )r   r   r   r   r   _values_index)r   r   indexs      r   r   zSeries.__init__E   sD    $

+++%'''yyA~~r    c                 ,    t        | j                        S r"   )r#   rJ   r$   s    r   r%   zSeries.__iter__L   s    DLL!!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   @   s9    " " " " "r    rH   c                   N     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        | '  |       y )Nr   Czseries(z, ))
r   r3   r'   rL   r   r=   valuesr7   rR   r   )r   r'   rL   namer9   s       r   r   zSeriesType.__init__^   sR    %+++

kk$**a5#(%0j$(.r    c                 2    | j                   | j                  fS r"   )r'   rL   r$   s    r   r;   zSeriesType.keyf   s    zz4::%%r    c                     | j                   S r"   )rV   r$   s    r   r>   zSeriesType.as_arrayj   s    {{r    c                 r    |dk(  sJ |dk(  sJ || j                   } t        |       || j                        S Nr   rT   )r'   r@   rL   rA   s       r   rB   zSeriesType.copyn   s?    qyy}}=JJEtDz%,,r    r[   rC   rF   s   @r   rR   rR   X   sA     N/ & &  -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   |   sU    

A&EQ'E::??<<3ekk5))r    __array_wrap__c                     d }|S )Nc                     t        | t        t        f      r2| j                  |j                  |j
                  |j                        S y )N)r'   r   r8   )r   r3   rR   rB   r'   r   r8   )
input_typeresults     r   typerztype_array_wrap.<locals>.typer   s@    j9j"9:??(.*0-- # 9 9 ;r    r1   contextrh   s     r   type_array_wraprk      s    9 Lr    c                     d }|S )Nc                     t        |t              rSt        | t        j                        r8| j                  dk(  sJ | j
                  dk(  sJ t        | j                  |      S y y )NrT   r   )r   r3   r   r=   r8   r   rR   r'   )r   rL   s     r   rh   z&type_series_constructor.<locals>.typer   sU    eY'JtU[[,I;;#%%%99>!>djj%00 -J'r    r1   ri   s     r   type_series_constructorrn      s    1 Lr    c                       e Zd Zd Zy)
IndexModelc                 f    d|j                   fg}t        j                  j                  | |||       y )Nr   )r>   r   StructModelr   r   dmmfe_typememberss       r   r   zIndexModel.__init__   s/    G,,-.##D#w@r    Nr,   r-   r.   r   r1   r    r   rp   rp      s    Ar    rp   c                       e Zd Zd Zy)SeriesModelc                     d|j                   fd|j                  fg}t        j                  j	                  | |||       y )NrL   rV   )rL   r>   r   rr   r   rs   s       r   r   zSeriesModel.__init__   s?    gmm$w''( 	##D#w@r    Nrw   r1   r    r   ry   ry      s    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Gr    c                 <     t        j                  |      | |fi |S r"   r|   r~   s       r   make_seriesr      r   r    	__array__c                 b    t        | ||j                  d   |d         }|j                  d      S )Nr   refr   )r   args_get_ptr_by_namerj   r   sigr   r]   s        r   index_as_arrayr      s/    
Wgsxx{Q
@C''r    c                 b    t        | ||j                  d   |d         }|j                  d      S )Nr   r   rV   )r   r   r   r   s        r   series_as_arrayr      s/    
gwa
AC))r    c                     t        | ||j                        }|d   |_        t        | ||j                  |j	                               S r   )r   return_typer   r   	_getvalue)rj   r   r   r   dests        r   index_wrap_arrayr      s;    gw8DQDIWgs@PQQr    c                     t        | ||j                  d   |d         }t        | ||j                        }|d   |_        |j                  |_        t        | ||j                  |j                               S )Nr   valuer   )r   r   r   rV   rL   r   r   )rj   r   r   r   srcr   s         r   series_wrap_arrayr      sb    
gw47
CCw9Dq'DKDJWgs@PQQr    c                     |\  }}t        | ||j                        }||_        ||_        t	        | ||j                  |j                               S r"   )r   r   rL   rV   r   r   )rj   r   r   r   r   rL   seriess          r   pdseries_constructorr      sI    KD%'3??;FFLFMWgs@P@P@RSSr    c                    |j                   j                  |d      }t        |j                  |j                  |       }|j                  | j                  |      j                  |_        t        |j                               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      s^    
 77((g6Dqyy!))S1Et,22EJu())r    c                    |j                   j                  |d      }|j                   j                  |d      }t        |j                  |j                  |       }|j                  | j                  |      j                  |_        |j                  | j                  |      j                  |_        t        |j                               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    
 GG))#x8EWW**3	:FAIIs3F77399e,22FLGGCJJ/55FMv'')**r    c                 N   t        |j                  |j                  | |      }|j                  j	                  |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      sx     qyy!))S<Eww""177#;#;CKK#HIHuuS\\5::.Hww,,X{CHOr    c                    t        |j                  |j                  | |      }|j                  j	                  |j                  j                  t                    }|j                  | j                  |j                        }|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    
 AIIs#>Fww""177#;#;F#CDHuuSYY-HuuS\\6==1H--h88LMIr    is_monotonic_increasingc                     d }|S )z'
    Index.is_monotonic_increasing
    c                 d    | j                   }t        |      dk(  ry|d   }|D ]  }||k  r y|} y)Nr   TF)r   len)rL   r   uvs       r   getterz-index_is_monotonic_increasing.<locals>.getter  s@    {{t9>GA1uA  r    r1   )rL   r   s     r   index_is_monotonic_increasingr     s    
	 Mr    c                 .    t        | t              rd }|S y)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     s    
 &*%	' &r    clipc                     d }|S )z
    Series.clip(...)
    c                     | j                   j                         }t        t        |            D ]  }||   }||k  r|||<   ||kD  s|||<    t	        || j
                        S r"   )rJ   rB   ranger   rH   rK   )r   lowerupperr   ir   s         r   	clip_implzseries_clip.<locals>.clip_impl(  sc    ~~""$s4y!AQA5yQUQ " dFMM**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      s    % 'K K K K 2 F  ,7 74"V "0-&& -< e; ;
 f* *   ! v  	A## A A
 
A&$$ A A y&' 2 z7H 5 z8Y 7HH {I&( '( {J'* (* EKK8R 9R
 U[[9R :R vu{{I.T /T y* * z
+ 
+ Y	 	 Z	 	 I89 :" 
#  V$ %r    