1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
U
¬ý°dã@s¼dZddlmZddlZddlZddlmZmZmZddl    Z
ddl m Z ddl mZddlmZmZdd    d
œd d „Zejdd ddddddœdd„ƒZejdd ddddddœdd„ƒZdS)z6Common utilities for Numba operations with groupby opsé)Ú annotationsN)Ú TYPE_CHECKINGÚAnyÚCallable)ÚScalar)Úimport_optional_dependency)ÚNumbaUtilErrorÚjit_user_functionrÚNone)ÚfuncÚreturncCspt|ƒstdƒ‚tt |¡j ¡ƒ}ddg}t|ƒ}t|ƒ|ksP|d|…|krltd|›d|j    ›d|›ƒ‚dS)a^
    Validate user defined function for ops when using Numba with groupby ops.
 
    The first signature arguments should include:
 
    def f(values, index, ...):
        ...
 
    Parameters
    ----------
    func : function, default False
        user defined function
 
    Returns
    -------
    None
 
    Raises
    ------
    NumbaUtilError
    z5Numba engine can only be used with a single function.ÚvaluesÚindexNz
The first z arguments to z     must be )
ÚcallableÚNotImplementedErrorÚlistÚinspectÚ    signatureÚ
parametersÚkeysÚlenrÚ__name__)r Z udf_signatureZ expected_argsZmin_number_args©rúQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/groupby/numba_.pyÚ validate_udfsÿ
ÿþÿr)ÚmaxsizezCallable[..., Scalar]ÚboolzPCallable[[np.ndarray, np.ndarray, np.ndarray, np.ndarray, int, Any], np.ndarray])r ÚnopythonÚnogilÚparallelr c    sXt||||ƒ‰trddl‰ntdƒ‰ˆj|||dddddddddœ‡‡fd    d
„ ƒ}|S) aŽ
    Generate a numba jitted agg function specified by values from engine_kwargs.
 
    1. jit the user's function
    2. Return a groupby agg function with the jitted function inline
 
    Configurations specified in engine_kwargs apply to both the user's
    function _AND_ the groupby evaluation loop.
 
    Parameters
    ----------
    func : function
        function to be applied to each group and will be JITed
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit
 
    Returns
    -------
    Numba function
    rNÚnumba©rrrú
np.ndarrayÚintr©r rÚbeginÚendÚ num_columnsÚargsr c s’t|ƒt|ƒkst‚t|ƒ}t ||f¡}ˆ |¡D]X}|||||…}    ˆ |¡D]4}
|||||…|
f} ˆ| |    f|žŽ|||
f<qVq4|S©N©rÚAssertionErrorÚnpÚemptyZprange© r rr%r&r'r(Z
num_groupsÚresultÚiZ group_indexÚjÚgroup©r Z
numba_funcrrÚ    group_aggcs    z*generate_numba_agg_func.<locals>.group_agg©r    rr rZjit)r rrrr4rr3rÚgenerate_numba_agg_func>s
"r6zCallable[..., np.ndarray]c    sXt||||ƒ‰trddl‰ntdƒ‰ˆj|||dddddddddœ‡‡fd    d
„ ƒ}|S) a›
    Generate a numba jitted transform function specified by values from engine_kwargs.
 
    1. jit the user's function
    2. Return a groupby transform function with the jitted function inline
 
    Configurations specified in engine_kwargs apply to both the user's
    function _AND_ the groupby evaluation loop.
 
    Parameters
    ----------
    func : function
        function to be applied to each window and will be JITed
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit
 
    Returns
    -------
    Numba function
    rNr r!r"r#rr$c s¢t|ƒt|ƒkst‚t|ƒ}t t|ƒ|f¡}ˆ |¡D]d}|||||…}    ˆ |¡D]@}
|||||…|
f} ˆ| |    f|žŽ|||||…|
f<qZq8|Sr)r*r.r3rrÚgroup_transformŸs    (z6generate_numba_transform_func.<locals>.group_transformr5)r rrrr7rr3rÚgenerate_numba_transform_funczs
"r8)Ú__doc__Ú
__future__rÚ    functoolsrÚtypingrrrÚnumpyr,Zpandas._typingrZpandas.compat._optionalrZpandas.core.util.numba_rr    rÚ    lru_cacher6r8rrrrÚ<module>s   '
;