
    hG                       d Z ddlmZ ddlmZ ddlZddlZddlmZ ddl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 ddlZdd
lmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% edBd       Z& G d dejN                        Z( G d dejN                        Z) ejT                  e      d        Z+ ejT                  e%      d        Z, ee%      d        Z- ee      d        Z. ee(       G d dej^                               Z0 ee)       G d dej^                               Z1 ee(dd        ee(dd        ee)dd        ee)d d         ee)d!d!        ee%ejd                  e(      d"        Z3 ee%ejd                  e(ejh                         ee%ejd                  e(ejj                         ee%ejd                  e(ejl                        d#                      Z7 eeejd                  ejp                  ejr                        d$        Z: eeejd                  ejp                        d%        Z; eeejd                        d&        Z<d' Z= ee=      d(        Z> ee(      d)        Z? ee)      d*        Z@ ee(      d+        ZA ee)      d,        ZBd- ZCd. ZDd/ej                  fd0ej                  fd1ej                  fd2ej                  fgZIeID ]  \  ZJZK eCeJeK        ej                  ej                  ej                  ej                  gZPePD ]
  ZQ eDeQ         ee(d3      d4        ZR eej                        d5        ZT eej                        d6        ZU G d7 d8ejN                        ZV ejT                  e!      d9        ZW ee!      d:        ZX ee!e)      d;        ZY eeV       G d< d=ej^                               ZZ eeVd>d>        ee)d?      d@        Z[ eej                        dA        Z\y)Cz
Utility classes/functions to let numba recognize
pandas Index/Series/DataFrame

Mostly vendored from https://github.com/numba/numba/blob/main/numba/tests/pdlike_usecase.py
    )annotations)contextmanagerN)types)cgutils)models)NativeValueboxlower_builtinmake_attribute_wrapperoverloadoverload_attributeoverload_methodregister_modeltype_callabletypeof_implunbox)impl_ret_borrowed)lib)Index_iLocIndexer)SingleBlockManager)Seriesindexc              #    K   | j                   }|j                  t        dfv rFt        j                  |      }t        j                  |      st        d      |j                  d      }	 || _	        |  | `	y # | `	w xY ww)NstringzCThe numba engine only supports using string or numeric column namesU)
_datadtypeobjectnpasarrayr   is_string_array
ValueErrorastype_numba_data)r   
numba_datas     BD:\jyotish\venv\Lib\site-packages\pandas/core/_numba/extensions.pyset_numba_datar)   1   s~     JFH--ZZ
+
"":.U   &&s+
&Es   A'A?*A8 5A?8A<<A?c                  N     e Zd ZdZd fdZed        Zed        ZdddZ xZ	S )		IndexTypez+
    The type class for Index objects.
    c                `    || _         d| d| d}|| _        || _        t        |   |       y )Nzindex(, ))pyclassr   layoutsuper__init__)selfr   r0   r/   name	__class__s        r(   r2   zIndexType.__init__I   s9    wb*
    c                H    | j                   | j                  | j                  fS N)r/   r   r0   r3   s    r(   keyzIndexType.keyP   s    ||TZZ44r6   c                X    t        j                  | j                  d| j                        S N   )r   Arrayr   r0   r9   s    r(   as_arrayzIndexType.as_arrayT   s    {{4::q$++66r6   c                    |dk(  sJ || j                   }|xs | j                  } t        |       ||| j                        S r<   )r   r0   typer/   r3   r   ndimr0   s       r(   copyzIndexType.copyX   sC    qyy=JJE&4;;tDz%66r6   )r/   anyreturnNone)Nr=   N)rC   int
__name__
__module____qualname____doc__r2   propertyr:   r?   rD   __classcell__r5   s   @r(   r+   r+   D   s?     5 5 7 77 7r6   r+   c                  N     e Zd ZdZd fdZed        Zed        ZdddZ xZ	S )	
SeriesTypez,
    The type class for Series objects.
    c                    t        |t              sJ || _        || _        t	        j
                  | j                  dd      | _        || _        d| d| d| d}t        | %  |       y )Nr=   Czseries(r-   r.   )

isinstancer+   r   r   r   r>   valuesnametyr1   r2   )r3   r   r   rW   r4   r5   s        r(   r2   zSeriesType.__init__e   sg    %+++

kk$**a5r%6(!4r6   c                H    | j                   | j                  | j                  fS r8   )r   r   rW   r9   s    r(   r:   zSeriesType.keyn   s    zz4::t{{22r6   c                    | j                   S r8   rV   r9   s    r(   r?   zSeriesType.as_arrayr   s    {{r6   c                    |dk(  sJ |dk(  sJ || j                   } t        |       || j                  | j                        S Nr=   rT   )r   rA   r   rW   rB   s       r(   rD   zSeriesType.copyv   sE    qyy}}=JJEtDz%T[[99r6   rF   rG   r\   )rC   rH   r0   strrI   rP   s   @r(   rR   rR   `   s?     3 3  : :r6   rR   c                    t        | j                  |      }|j                  dk(  sJ t        |j                  |j
                  t        |             S )z
    This will assume that only strings are in object dtype
    index.
    (you should check this before this gets lowered down to numba)
    r=   )r   r&   rC   r+   r   r0   rA   )valcarrtys      r(   typeof_indexrc   ~   s?     +E::??U[[%,,S	::r6   c                    t        | j                  |      }t        | j                  |      }t        | j                  |      }|j                  dk(  sJ |j
                  dk(  sJ t        |j                  ||      S r\   )r   r   rV   r4   rC   r0   rR   r   )r`   ra   r   rb   rW   s        r(   typeof_seriesre      sg    		1%E

A&E1%F::??<<3ekk5&11r6   c                    dd}|S )Nc                    t        |t              rUt        | t        j                        r:| j                  dk(  sJ |t        j
                  }t        | j                  ||      S y y r<   )rU   r+   r   r>   rC   intprR   r   )datar   r4   s      r(   typerz&type_series_constructor.<locals>.typer   sS    eY'JtU[[,I99>!>|zzdjj%66	 -J'r6   r8    contextrj   s     r(   type_series_constructorrn      s    7 Lr6   c                    dd}|S )Nc                   t        | t        j                        rf| j                  dk(  sJ | j                  dk(  sJ |t        |t        j
                        sJ t        | j                  | j                  t              S y )NrT   r=   )r0   r/   )	rU   r   r>   r0   rC   DictTyper+   r   r   )ri   hashmaps     r(   rj   z%type_index_constructor.<locals>.typer   sf    dEKK(;;#%%%99>!>?j%..&IIITZZUKK	 )r6   r8   rk   rl   s     r(   type_index_constructorrs      s    L Lr6   c                      e Zd ZddZy)
IndexModelc                    d|j                   fdt        j                  |j                  t        j                        fdt        j
                  fg}t        j                  j                  | |||       y )Nri   rr   parent)	r?   r   rq   r   rh   pyobjectr   StructModelr2   r3   dmmfe_typememberss       r(   r2   zIndexModel.__init__   s`     W%%& w}}ejjAB u~~&

 	##D#w@r6   Nr]   rJ   rK   rL   r2   rk   r6   r(   ru   ru      s    Ar6   ru   c                      e Zd ZddZy)SeriesModelc                    d|j                   fd|j                  fd|j                  fg}t        j                  j                  | |||       y )Nr   rV   r4   )r   r?   rW   r   ry   r2   rz   s       r(   r2   zSeriesModel.__init__   sK    gmm$w''(W^^$

 	##D#w@r6   Nr]   r~   rk   r6   r(   r   r      s    Ar6   r   ri   r   rr   rV   r4   c                
   |\  }} t        j                  |j                        | |      }||_        ||_        | j                  t        j                  d      |_        t        | ||j                  |j                               S Nr   )r   create_struct_proxyreturn_typer   rV   get_constantr   rh   r4   r   	_getvalue)rm   buildersigargsri   r   seriess          r(   pdseries_constructorr      sl    KD%9W((9'7KFFLFM&&uzz15FKWgs@P@P@RSSr6   c                    |\  }}} t        j                  |j                        | |      }||_        ||_        ||_        t        | ||j                  |j                               S r8   )r   r   r   r   rV   r4   r   r   )rm   r   r   r   ri   r   r4   r   s           r(   pdseries_constructor_with_namer      s`     D%9W((9'7KFFLFMFKWgs@P@P@RSSr6   c                    |\  }}} t        j                  |j                        | |      }||_        ||_        ||_        t        | ||j                  |j                               S r8   )r   r   r   ri   rr   rw   r   r   )rm   r   r   r   ri   rr   rw   r   s           r(   index_constructor_2argr      s\    "T7F8G''8'JEEJEMELWgs@QRRr6   c                    |\  }} t        j                  |j                        | |      }||_        ||_        t        | ||j                  |j                               S r8   )r   r   r   ri   rr   r   r   )rm   r   r   r   ri   rr   r   s          r(   index_constructor_2arg_parentr      sT     OT78G''8'JEEJEMWgs@QRRr6   c                    ddl m |j                  j                  t        j
                  fd}| j                  ||||      S )Nr   )Dictc                <    t        | j                              S r8   )r   empty)ri   r   key_type
value_types    r(   
index_implz*index_constructor_1arg.<locals>.index_impl  s    T4::h
;<<r6   )numba.typedr   r   r   r   rh   compile_internal)rm   r   r   r   r   r   r   r   s        @@@r(   index_constructor_1argr      s<     $$HJ= ##GZdCCr6   c                     y r8   rk   xs    r(   maybe_cast_strr     s    r6   c                B    t        | t        j                        rd S d S )zmConverts numba UnicodeCharSeq (numpy string scalar) -> unicode type (string).
    Is a no-op for other types.c                    t        |       S r8   )r^   r   s    r(   <lambda>z%maybe_cast_str_impl.<locals>.<lambda>  s    Qr6   c                    | S r8   rk   r   s    r(   r   z%maybe_cast_str_impl.<locals>.<lambda>  s    r6   )rU   r   UnicodeCharSeqr   s    r(   maybe_cast_str_implr     s      !U))*r6   c                x   |j                   j                  |d      } t        j                  |       |j                  |j
                        }|j                  | j                  |      j                  |_	        |j                   j                  |j                   j                  t        j                  j                              }|j                   j                  |j                   j                  | j                              }|j                   j                  |j                   j                  t         j"                              }|j                   j%                  |d||f      }|j                  t!        j&                  | j                  t         j"                        |      j                  |_        ||_        |j                   j-                  |       |j                   j-                  |       |j                   j-                  |       |j                   j-                  |       t/        |j1                               S )zc
    Convert a Index object to a native structure.

    Note: Object dtype is not allowed here
    r&   r   )pyapiobject_getattr_stringr   r   rm   r   r   r?   valueri   unserializeserialize_objectnumbatypedr   r   r   rh   call_methodrq   rr   rw   decrefr   r   )	typobjra   data_objr   typed_dict_objarr_type_objintp_type_objhashmap_objs	            r(   unbox_indexr     s~    ww,,S-@H,G'',QYY		BE x066EJWW(()A)A%++BRBR)STN 77&&qww'?'?		'JKLGG''(@(@(LMM''%%,!>K GGENN399ejjA;OUUEMEL GGNN8GGNN< GGNN=!GGNN>"u())r6   c                   |j                   j                  |d      }|j                   j                  |d      }|j                   j                  |d      } t        j                  |       |j                  |j
                        }|j                  | j                  |      j                  |_        |j                  | j                  |      j                  |_	        |j                  | j                  |      j                  |_        |j                   j                  |       |j                   j                  |       |j                   j                  |       t        |j                               S )z8
    Convert a Series object to a native structure.
    r   rV   r4   )r   r   r   r   rm   r   r   r   r   rV   rW   r4   r   r   r   )r   r   ra   	index_obj
values_objname_objr   s          r(   unbox_seriesr   ?  s   
 --c7;I..sH=Jww,,S&9H-W((-aiiCF77399i066FLGGCJJ
399FM''#**h/55FK GGNN9GGNN:GGNN8v'')**r6   c                    t        j                  |       |j                  |j                  |      }t        j                  |j                  |j
                        }|j                  j                  t        j                  |j                  |j
                              5 \  }}|5  |j                  j                  |j
                         ddd       |5  |j                  j                  |j                  j                  t                    }|j                  | j                  |j                        }t!        | j"                  t$        j&                        rm|j                  j                  |j                  j                  d            }	|j                  j)                  |d|	f      }|j                  j+                  |	       |j                  j)                  |d|f      }
|
|_        |j                  j-                  |
|       |j                  j+                  |       |j                  j+                  |       ddd       ddd       |j                  j/                  |      S # 1 sw Y   xY w# 1 sw Y   9xY w# 1 sw Y   =xY w)z
    Convert a native index structure to a Index object.

    If our native index is of a numpy string dtype, we'll cast it to
    object.
    r   Nr    r%   _simple_new)r   r   rm   r   alloca_once_valuerw   if_elseis_not_nullr   increfr   r   r   r	   r?   ri   rU   r   r   r   r   r   storeload)r   r`   ra   r   res
has_parent	otherwise	class_obj	array_objobject_str_objr   s              r(   	box_indexr   U  s    -G'',QYY		ME

#
#AIIu||
<C
 
		7..qyy%,,G	H MGGNN5<<(  ++AGG,D,DU,KLIcllEJJ7I#))U%9%9: "#!4!4QWW5M5Mh5W!XGG//	8nEVW	~.++I}ylSI$ELIIOOIs+ GGNN9%GGNN9%'  
I4 99>>#- ZY 
I	Hs=    J&&I(
JE'I5=J(I2	-J5I>	:JJ
c                    t        j                  |       |j                  |j                  |      }|j                  j                  |j                  j                  t        j                              }|j                  j                  |j                  j                  t        j                              }|j                  | j                  |j                        }|j                  | j                  |j                        }|j                  | j                  |j                         }|j                  j#                  |||f      }	|j                  j%                  |	d      }
|j                  j#                  ||	|
f      }|j                  j'                  |d|       |j                  j)                  |       |j                  j)                  |
       |j                  j)                  |	       |j                  j)                  |       |j                  j)                  |       |j                  j)                  |       |j                  j)                  |       |S )z?
    Convert a native series structure to a Series object.
    r   axes_name)r   r   rm   r   r   r   r   r   	_from_mgrr   
from_arrayr	   r   r?   rV   rW   r4   call_function_objargsr   object_setattr_stringr   )r   r`   ra   r   series_const_objmgr_const_objr   r   r   mgr_objmgr_axes_obj
series_objs               r(   
box_seriesr     s   
 .W((-aii#NFww**177+C+CFDTDT+UVGG''	  !3!>!>?M cii.IcllFMM2IuuSZZ-H gg++	
G 7700&AL..7L1J GG!!*gx@ GGNN#$GGNN< GGNN7GGNN=!GGNN9GGNN9GGNN8r6   c                8    t        t        |       fd       }|S )Nc                    fd}|S )Nc                (     | j                         S r8   rZ   )r   
ser_methods    r(   series_reduction_implzRgenerate_series_reduction.<locals>.series_reduction.<locals>.series_reduction_impl  s    fmm,,r6   rk   )r   r   r   s     r(   series_reductionz3generate_series_reduction.<locals>.series_reduction  s    	- %$r6   )r   rR   )ser_reductionr   r   s    ` r(   generate_series_reductionr     s$    Z/% 0% r6   c                .     t                fd       }|S )Nc                b    t        | t              rt        |t              rfd}|S fd}|S y )Nc                |    t         | j                  |j                        | j                  | j                        S r8   r   rV   r   r4   )series1series2binops     r(   series_binop_implzFgenerate_series_binop.<locals>.series_binop.<locals>.series_binop_impl  s0    !gnngnn= r6   c                h    t         | j                  |      | j                  | j                        S r8   r   )r   r   r   s     r(   r   zFgenerate_series_binop.<locals>.series_binop.<locals>.series_binop_impl  s*    !gnne4gmmW\\ r6   rU   rR   )r   r   r   r   s      r(   series_binopz+generate_series_binop.<locals>.series_binop  s6    gz*%, )(
 )(' +r6   )r   )r   r   s   ` r(   generate_series_binopr     s!    e_) ), r6   summeanminmaxget_locc                    d }|S )Nc                    t        | j                        dk(  r,t        | j                        D ]  \  }}|| j                  |<    | j                  |   S r   )lenrr   	enumerater   )r   itemir`   s       r(   index_get_loc_implz)index_get_loc.<locals>.index_get_loc_impl  sG    u}}"#EKK03%&c" 1}}T""r6   rk   )r   r   r   s      r(   index_get_locr     s    # r6   c                .    t        | t              rd }|S y )Nc                V    | j                   j                  |      }| j                  |   S r8   )r   r   iloc)r   r   locs      r(   series_getitemz'series_indexing.<locals>.series_getitem  s%    ,,&&t,C;;s##r6   r   )r   r   r   s      r(   series_indexingr    s    &*%	$  &r6   c                .    t        | t              rd }|S y )Nc                     | j                   |   S r8   )r   )r   idxs     r(   index_getitemz%index_indexing.<locals>.index_getitem  s    ;;s##r6   )rU   r+   )r   r  r  s      r(   index_indexingr    s    %#	$  $r6   c                  0     e Zd Zd fdZed        Z xZS )IlocTypec                @    || _         d| d}t        | 	  |       y )NziLocIndexer(r.   )r4   )obj_typer1   r2   )r3   r
  r4   r5   s      r(   r2   zIlocType.__init__  s(     hZq)d#r6   c                    | j                   S r8   )r
  r9   s    r(   r:   zIlocType.key  s    }}r6   r]   )rJ   rK   rL   r2   rN   r:   rO   rP   s   @r(   r  r    s    $
  r6   r  c                D    t        | j                  |      }t        |      S r8   )r   r   r  )r`   ra   objtypes      r(   typeof_ilocr    s    #''1%GGr6   c                    d }|S )Nc                :    t        | t              rt        |       S y r8   )rU   rR   r  )r   s    r(   rj   z$type_iloc_constructor.<locals>.typer  s    c:&C=  'r6   rk   rl   s     r(   type_iloc_constructorr    s    ! Lr6   c                    |\  } t        j                  |j                        | |      }||_        t	        | ||j                  |j                               S r8   )r   r   r   r   r   r   )rm   r   r   r   r   iloc_indexers         r(   iloc_constructorr  &  sQ    FS?7..s?QLL#//<+A+A+C r6   c                      e Zd ZddZy)	ILocModelc                f    d|j                   fg}t        j                  j                  | |||       y )Nr   )r
  r   ry   r2   rz   s       r(   r2   zILocModel.__init__2  s/    7++,-##D#w@r6   Nr]   r~   rk   r6   r(   r  r  0  s    Ar6   r  r   r   c                    d }|S )Nc                    t        |       S r8   r   )r   s    r(   getzseries_iloc.<locals>.get<  s    F##r6   rk   )r   r  s     r(   series_ilocr  :  s    $ Jr6   c                .    t        | t              rd }|S y )Nc                4    | j                   j                  |   S r8   )r   rV   )r  r   s     r(   getitem_implz"iloc_getitem.<locals>.getitem_implF  s    ##**1--r6   )rU   r  )r  r   r  s      r(   iloc_getitemr  B  s    ,)	.  *r6   )r   r   )]rM   
__future__r   
contextlibr   operatorr   r   
numba.corer   numba.core.datamodelr   numba.core.extendingr   r	   r
   r   r   r   r   r   r   r   r   numba.core.imputilsr   numpyr!   pandas._libsr   pandas.core.indexes.baser   pandas.core.indexingr   pandas.core.internalsr   pandas.core.seriesr   r)   Typer+   rR   registerrc   re   rn   rs   ry   ru   r   r>   r   rh   float64unicode_typer   rq   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   series_reductions	reductionreduction_methodaddsubmultruedivseries_binops	ser_binopr   getitemr  r  r  r  r  r  r  r  r  rk   r6   r(   <module>r;     s   # %     '    2   * - 4 %  $7

 78: :< e	; 	; f2 2 v  u  	A## A A" 
A&$$ A A y&' 2 y)Y 7 z7G 4 z8X 6 z66 2 vu{{I.T /T vu{{Iuzz:vu{{Iu}}=vu{{Iu/A/ABT C > ;T uekk5>>5>>BS CS uekk5>>2S 3S uekk"	D #	D	
 
.  y* *@ z+ +* Y) )X Z( (Z8 BFFORWW
 BFFO
BFFO	  $5Ii)9: $5 x||X\\8;K;KLI)$ 
 I& ' 
(

  
(

 uzz  l# $
 |  |Z( ) A"" A A x . J' ( 
(

 r6   