
     jG                    D   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dCd            Z& G d dej'                  Z( G d dej'                  Z) ej*        e          d             Z+ ej*        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j2        e(          d#             Z3 ee%ej2        e(ej4                   ee%ej2        e(ej5                   ee%ej2        e(ej6                  d$                                     Z7 eeej2        ej8        ej9                  d%             Z: eeej2        ej8                  d&             Z; eeej2                  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/ ZDd0ejE        fd1ejF        fd2ejG        fd3ejH        fgZIeID ]\  ZJZK eCeJeK           ejL        ejM        ejN        ejO        gZPePD ]ZQ eDeQ            ee(d4          d5             ZR eejS                  d6             ZT eejS                  d7             ZU G d8 d9ej'                  ZV ej*        e!          d:             ZW ee!          d;             ZX ee!e)          d<             ZY eeV           G d= d>ej/                              ZZ eeVd?d?            ee)d@          dA             Z[ eejS                  dB             Z\dS )Dz
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indexr   c              #     K   | j         }|j        t          k    r8t          j        |          st          d          |                    d          }	 || _        | V  | `d S # | `w xY w)NzCThe numba engine only supports using string or numeric column namesU)_datadtypeobjectr   is_string_array
ValueErrorastype_numba_data)r   
numba_datas     qC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pandas/core/_numba/extensions.pyset_numba_datar&   1   s      J6! ,":.. 	U    &&s++
&Es   A" "A&c                  Z     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.
    pyclassanyreturnNonec                    || _         d| d| d}|| _        || _        t                                          |           d S )Nzindex(, ))r)   r   layoutsuper__init__)selfr   r0   r)   name	__class__s        r%   r2   zIndexType.__init__H   sN    ******
    c                *    | j         | j        | j        fS N)r)   r   r0   r3   s    r%   keyzIndexType.keyO   s    |TZ44r6   c                B    t          j        | j        d| j                  S N   )r   Arrayr   r0   r9   s    r%   as_arrayzIndexType.as_arrayS   s    {4:q$+666r6   Nr=   ndimintc                t    |dk    sJ || j         }|p| j        } t          |           ||| j                  S r<   )r   r0   typer)   r3   r   r@   r0   s       r%   copyzIndexType.copyW   sI    qy 	JE&4;tDzz%666r6   )r)   r*   r+   r,   )Nr=   N)r@   rA   
__name__
__module____qualname____doc__r2   propertyr:   r?   rE   __classcell__r5   s   @r%   r(   r(   C   s               5 5 X5 7 7 X77 7 7 7 7 7 7 7 7r6   r(   c                  Z     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.
    r+   r,   c                    t          |t                    sJ || _        || _        t	          j        | j        dd          | _        || _        d| d| d| d}t                      	                    |           d S )Nr=   Czseries(r.   r/   )

isinstancer(   r   r   r   r>   valuesnametyr1   r2   )r3   r   r   rT   r4   r5   s        r%   r2   zSeriesType.__init__d   s    %+++++

k$*a55444%446444r6   c                *    | j         | j        | j        fS r8   )r   r   rT   r9   s    r%   r:   zSeriesType.keym   s    z4:t{22r6   c                    | j         S r8   rS   r9   s    r%   r?   zSeriesType.as_arrayq   s
    {r6   Nr=   rQ   r@   rA   r0   strc                |    |dk    sJ |dk    sJ || j         } t          |           || j        | j                  S Nr=   rQ   )r   rC   r   rT   rD   s       r%   rE   zSeriesType.copyu   sO    qy} 	JEtDzz%T[999r6   r+   r,   rZ   )r@   rA   r0   rX   rF   rM   s   @r%   rO   rO   _   s               3 3 X3   X: : : : : : : : :r6   rO   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#   r@   r(   r   r0   rC   )valcarrtys      r%   typeof_indexr`   }   sC     ++E:?U[%,S		:::r6   c                    t          | j        |          }t          | j        |          }t          | j        |          }|j        dk    sJ |j        dk    sJ t          |j        ||          S rZ   )r   r   rS   r4   r@   r0   rO   r   )r]   r^   r   r_   rT   s        r%   typeof_seriesrb      sn    	1%%E
A&&E1%%F:?<3ek5&111r6   c                    dd}|S )Nc                    t          |t                    rKt          | t          j                  r3| j        dk    sJ |t          j        }t          | j        ||          S d S d S r<   )rR   r(   r   r>   r@   intprO   r   )datar   r4   s      r%   typerz&type_series_constructor.<locals>.typer   sp    eY'' 	7JtU[,I,I 	79>!!! "zdj%666		7 	7 	7 	7r6   r8    contextrg   s     r%   type_series_constructorrk      s    7 7 7 7 Lr6   c                    dd}|S )Nc                    t          | t          j                  rY| j        dk    sJ | j        dk    sJ |t          |t          j                  sJ t          | j        | j        t                    S d S )NrQ   r=   )r0   r)   )	rR   r   r>   r0   r@   DictTyper(   r   r   )rf   hashmaps     r%   rg   z%type_index_constructor.<locals>.typer   s~    dEK(( 	L;#%%%%9>!!!Ij%.&I&IIIITZUKKKK		L 	Lr6   r8   rh   ri   s     r%   type_index_constructorrp      s!    L L L L Lr6   c                      e Zd ZddZdS )
IndexModelr+   r,   c                    d|j         fdt          j        |j        t          j                  fdt          j        fg}t          j                            | |||           d S )Nrf   ro   parent)	r?   r   rn   r   re   pyobjectr   StructModelr2   r3   dmmfe_typememberss       r%   r2   zIndexModel.__init__   sa     W%& w}ejAAB u~&

 	##D#w@@@@@r6   Nr[   rG   rH   rI   r2   rh   r6   r%   rr   rr      s.        A A A A A Ar6   rr   c                      e Zd ZddZdS )SeriesModelr+   r,   c                ~    d|j         fd|j        fd|j        fg}t          j                            | |||           d S )Nr   rS   r4   )r   r?   rT   r   rv   r2   rw   s       r%   r2   zSeriesModel.__init__   sM    gm$w'(W^$

 	##D#w@@@@@r6   Nr[   r{   rh   r6   r%   r}   r}      s.        A A A A A Ar6   r}   rf   r   ro   rS   r4   c                
   |\  }} t          j        |j                  | |          }||_        ||_        |                     t          j        d          |_        t          | ||j        |
                                          S Nr   )r   create_struct_proxyreturn_typer   rS   get_constantr   re   r4   r   	_getvalue)rj   buildersigargsrf   r   seriess          r%   pdseries_constructorr      sr    KD%9W(99'7KKFFLFM&&uz155FKWgs@P@P@R@RSSSr6   c                    |\  }}} t          j        |j                  | |          }||_        ||_        ||_        t          | ||j        |                                          S r8   )r   r   r   r   rS   r4   r   r   )rj   r   r   r   rf   r   r4   r   s           r%   pdseries_constructor_with_namer      se     D%9W(99'7KKFFLFMFKWgs@P@P@R@RSSSr6   c                    |\  }}} t          j        |j                  | |          }||_        ||_        ||_        t          | ||j        |                                          S r8   )r   r   r   rf   ro   rt   r   r   )rj   r   r   r   rf   ro   rt   r   s           r%   index_constructor_2argr      sa    "T7F8G'88'JJEEJEMELWgs@Q@QRRRr6   c                    |\  }} t          j        |j                  | |          }||_        ||_        t          | ||j        |                                          S r8   )r   r   r   rf   ro   r   r   )rj   r   r   r   rf   ro   r   s          r%   index_constructor_2arg_parentr      sY     OT78G'88'JJEEJEMWgs@Q@QRRRr6   c                    ddl m |j        j        t          j        fd}|                     ||||          S )Nr   )Dictc                L    t          |                                         S r8   )r   empty)rf   r   key_type
value_types    r%   
index_implz*index_constructor_1arg.<locals>.index_impl  s!    T4::h
;;<<<r6   )numba.typedr   r   r   r   re   compile_internal)rj   r   r   r   r   r   r   r   s        @@@r%   index_constructor_1argr      sg          $HJ= = = = = = = ##GZdCCCr6   c                    d S r8   rh   xs    r%   maybe_cast_strr     s    Dr6   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   )rX   r   s    r%   <lambda>z%maybe_cast_str_impl.<locals>.<lambda>  s    Q r6   c                    | S r8   rh   r   s    r%   r   z%maybe_cast_str_impl.<locals>.<lambda>  s     r6   )rR   r   UnicodeCharSeqr   s    r%   maybe_cast_str_implr     s*     !U)** {r6   c                   |j                             |d          } t          j        |           |j        |j                  }|                    | j        |          j        |_	        |j         
                    |j                             t          j        j                            }|j         
                    |j                             | j                            }|j         
                    |j                             t           j                            }|j                             |d||f          }|                    t!          j        | j        t           j                  |          j        |_        ||_        |j                             |           |j                             |           |j                             |           |j                             |           t/          |                                          S )zc
    Convert a Index object to a native structure.

    Note: Object dtype is not allowed here
    r#   r   )pyapiobject_getattr_stringr   r   rj   r   r   r?   valuerf   unserializeserialize_objectnumbatypedr   r   r   re   call_methodrn   ro   rt   decrefr   r   )	typobjr^   data_objr   typed_dict_objarr_type_objintp_type_objhashmap_objs	            r%   unbox_indexr     s    w,,S-@@H,G',,QY	BBE x006EJW(()A)A%+BR)S)STTN 7&&qw'?'?	'J'JKKLG''(@(@(L(LMMM'%%,!> K GGEN39ejAA;OOUEMEL GNN8GNN<   GNN=!!!GNN>"""u(()))r6   c                   |j                             |d          }|j                             |d          }|j                             |d          } t          j        |           |j        |j                  }|                    | j        |          j        |_        |                    | j	        |          j        |_	        |                    | j
        |          j        |_        |j                             |           |j                             |           |j                             |           t          |                                          S )z8
    Convert a Series object to a native structure.
    r   rS   r4   )r   r   r   r   rj   r   r   r   r   rS   rT   r4   r   r   r   )r   r   r^   	index_obj
values_objname_objr   s          r%   unbox_seriesr   >  s   
 --c7;;I..sH==Jw,,S&99H-W(--aiCCF7739i006FLGGCJ
339FM''#*h//5FK GNN9GNN:GNN8v''))***r6   c                    t          j        |           |j        |j        |          }t          j        |j        |j                  }|j                            t          j        |j        |j                            5 \  }}|5  |j        	                    |j                   ddd           n# 1 swxY w Y   |5  |j        
                    |j                            t                              }|                    | j        |j                  }t!          | j        t$          j                  ri|j        
                    |j                            d                    }	|j                            |d|	f          }|j                            |	           |j                            |d|f          }
|
|_        |j                            |
|           |j                            |           |j                            |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |j                            |          S )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   rj   r   alloca_once_valuert   if_elseis_not_nullr   increfr   r   r   r	   r?   rf   rR   r   r   r   r   r   storeload)r   r]   r^   r   res
has_parent	otherwise	class_obj	array_objobject_str_objr   s              r%   	box_indexr   T  s    -G',,QY	MMME

#AIu|
<
<C
 
		7.qy%,GG	H	H & M 	) 	)GNN5<(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	& 	& ++AG,D,DU,K,KLLIclEJ77I#)U%9:: / "#!4!4QW5M5Mh5W5W!X!XG//	8nEVWW	~...++I}ylSSI$ELIOOIs+++ GNN9%%%GNN9%%%'	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&& & & & & & & & & & & & & & &4 9>>#s[   H6 B3'H63B7	7H6:B7	;H6 EHH6H#	#H6&H#	'H66H:=H:c                X    t          j        |           |j        |j        |          }|j                            |j                            t          j                            }|j                            |j                            t          j
                            }|                    | j        |j                  }|                    | j        |j                  }|                    | j        |j                  }|j                            |||f          }	|j                            |	d          }
|j                            ||	|
f          }|j                            |d|           |j                            |           |j                            |
           |j                            |	           |j                            |           |j                            |           |j                            |           |j                            |           |S )z?
    Convert a native series structure to a Series object.
    r   axes_name)r   r   rj   r   r   r   r   r   	_from_mgrr   
from_arrayr	   r   r?   rS   rT   r4   call_function_objargsr   object_setattr_stringr   )r   r]   r^   r   series_const_objmgr_const_objr   r   r   mgr_objmgr_axes_obj
series_objs               r%   
box_seriesr     s   
 .W(--ai#NNNFw**17+C+CFDT+U+UVVG''	  !3!>?? M ci..IclFM22IuuSZ--H g++	
 G 700&AAL..7L1 J G!!*gx@@@ GNN#$$$GNN<   GNN7GNN=!!!GNN9GNN9GNN8r6   c                H    t          t          |           fd            }|S )Nc                    fd}|S )Nc                $     | j                   S r8   rW   )r   
ser_methods    r%   series_reduction_implzRgenerate_series_reduction.<locals>.series_reduction.<locals>.series_reduction_impl  s    :fm,,,r6   rh   )r   r   r   s     r%   series_reductionz3generate_series_reduction.<locals>.series_reduction  s$    	- 	- 	- 	- 	- %$r6   )r   rO   )ser_reductionr   r   s    ` r%   generate_series_reductionr     s9    Z//% % % % 0/% r6   c                <     t                      fd            }|S )Nc                x    t          | t                    r#t          |t                    rfd}|S fd}|S d S )Nc                b    t           | j        |j                  | j        | j                  S r8   r   rS   r   r4   )series1series2binops     r%   series_binop_implzFgenerate_series_binop.<locals>.series_binop.<locals>.series_binop_impl  s2    !gngn==  r6   c                X    t           | j        |          | j        | j                  S r8   r   )r   r   r   s     r%   r   zFgenerate_series_binop.<locals>.series_binop.<locals>.series_binop_impl  s.    !gne44gmW\  r6   rR   rO   )r   r   r   r   s      r%   series_binopz+generate_series_binop.<locals>.series_binop  ss    gz** 	)%,, )     )(    
 )('	) 	)r6   )r   )r   r   s   ` r%   generate_series_binopr     s4    e__) ) ) ) _), r6   summeanminmaxget_locc                    d }|S )Nc                    t          | j                  dk    r$t          | j                  D ]\  }}|| j        |<   | j        |         S r   )lenro   	enumerater   )r   itemir]   s       r%   index_get_loc_implz)index_get_loc.<locals>.index_get_loc_impl  sR    u}" 	'#EK00 ' '3%&c""}T""r6   rh   )r   r   r   s      r%   index_get_locr     s    # # # r6   c                :    t          | t                    rd }|S d S )Nc                P    | 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     s5    &*%% 	$ 	$ 	$  r6   c                :    t          | t                    rd }|S d S )Nc                    | j         |         S r8   )r   )r   idxs     r%   index_getitemz%index_indexing.<locals>.index_getitem  s    ;s##r6   )rR   r(   )r   r  r  s      r%   index_indexingr    s5    %## 	$ 	$ 	$  r6   c                  6     e Zd Zd fdZed             Z xZS )IlocTyper+   r,   c                f    || _         d| d}t                                          |           d S )NziLocIndexer(r/   )r4   )obj_typer1   r2   )r3   r  r4   r5   s      r%   r2   zIlocType.__init__  s;     )h)))d#####r6   c                    | j         S r8   )r  r9   s    r%   r:   zIlocType.key  s
    }r6   r[   )rG   rH   rI   r2   rK   r:   rL   rM   s   @r%   r  r    sX        $ $ $ $ $ $
   X    r6   r  c                J    t          | j        |          }t          |          S r8   )r   r   r  )r]   r^   objtypes      r%   typeof_ilocr    s!    #'1%%GGr6   c                    d }|S )Nc                N    t          | t                    rt          |           S d S r8   )rR   rO   r  )r   s    r%   rg   z$type_iloc_constructor.<locals>.typer  s*    c:&& 	!C== 	! 	!r6   rh   ri   s     r%   type_iloc_constructorr    s    ! ! ! Lr6   c                    |\  } t          j        |j                  | |          }||_        t	          | ||j        |                                          S r8   )r   r   r   r   r   r   )rj   r   r   r   r   iloc_indexers         r%   iloc_constructorr  %  sX    FS?7.s??QQLL#/<+A+A+C+C  r6   c                      e Zd ZddZdS )	ILocModelr+   r,   c                ^    d|j         fg}t          j                            | |||           d S )Nr   )r  r   rv   r2   rw   s       r%   r2   zILocModel.__init__1  s5    7+,-##D#w@@@@@r6   Nr[   r{   rh   r6   r%   r  r  /  s.        A A A A A Ar6   r  r   r   c                    d }|S )Nc                     t          |           S r8   r   )r   s    r%   getzseries_iloc.<locals>.get;  s    F###r6   rh   )r   r  s     r%   series_ilocr  9  s    $ $ $ Jr6   c                :    t          | t                    rd }|S d S )Nc                &    | j         j        |         S r8   )r   rS   )r  r   s     r%   getitem_implz"iloc_getitem.<locals>.getitem_implE  s    #*1--r6   )rR   r  )r  r   r  s      r%   iloc_getitemr  A  s5    ,)) 	. 	. 	.  r6   )r   r   )]rJ   
__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   numpynppandas._libsr   pandas.core.indexes.baser   pandas.core.indexingr   pandas.core.internalsr   pandas.core.seriesr   r&   Typer(   rO   registerr`   rb   rk   rp   rv   rr   r}   r>   r   re   float64unicode_typer   rn   ru   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  rh   r6   r%   <module>r9     s%    # " " " " " % % % % % %               ' ' ' ' ' '                          2 1 1 1 1 1           * * * * * * - - - - - - 4 4 4 4 4 4 % % % % % %    "7 7 7 7 7
 7 7 78: : : : : : : :< e	; 	; 	; f2 2 2 v   u   	A A A A A# A A A" 
A A A A A&$ A A A  y&' 2 2 2  y)Y 7 7 7  z7G 4 4 4  z8X 6 6 6  z66 2 2 2 vu{I..T T /.T vu{Iuz::vu{Iu}==vu{Iu/ABBT T CB >= ;:T uek5>5>BBS S CBS uek5>22S S 32S uek""	D 	D #"	D	 	 	
 
.   y* * *@ z+ + +* Y) ) )X Z( ( (Z    8 BFORW
 BFO
BFO	  $5 ; ;Ii)9::::x|X\8;KL % %I)$$$$ I&&  '& 
(
   
(
      uz    l##  $#
 |   |Z((  )( A A A A A" A A A  x . . . J''  (' 
(
    r6   