Ë
    *�£jÑ  ã                  ó¾   — U d Z ddlmZ ddlZddlZddlmZ ddlZddl	m
Z
 ddlmZ erddlmZ dad	ed
<   dd„Zddd„Zddd„Zdd„Z e«       Z	 	 	 	 	 	 	 	 	 	 dd„Zy)z%Common utilities for Numba operationsé    )ÚannotationsN)ÚTYPE_CHECKING)Úimport_optional_dependency)ÚNumbaUtilError)ÚCallableFÚboolÚGLOBAL_USE_NUMBAc                ó(   — | dk(  xs | du xr t         S )z%Signal whether to use numba routines.ÚnumbaN)r	   )Úengines    ú9C:\FundamentalWorkbench\vendor\pandas\core\util\numba_.pyÚmaybe_use_numbar      s   € à�WÑÒE ¨4 Ò!DÔ4DÐEó    c                ó"   — | rt        d«       | ay )Nr   )r   r	   )Úenables    r   Úset_use_numbar      s   € áÜ" 7Ô+ØÑr   c                ó‚   — | €i } | j                  dd«      }| j                  dd«      }| j                  dd«      }|||dœS )aP  
    Return arguments to pass to numba.JIT, falling back on pandas default JIT settings.

    Parameters
    ----------
    engine_kwargs : dict, default None
        user passed keyword arguments for numba.JIT

    Returns
    -------
    dict[str, bool]
        nopython, nogil, parallel

    Raises
    ------
    NumbaUtilError
    ÚnopythonTÚnogilFÚparallel)r   r   r   )Úget)Úengine_kwargsr   r   r   s       r   Úget_jit_argumentsr       sR   € ð$ ÐØˆà× Ñ  ¨TÓ2€HØ×Ñ˜g uÓ-€EØ× Ñ  ¨UÓ3€HØ ¨5¸hÑGÐGr   c                ó  — t         rddl}nt        d«      }|j                  j	                  | «      r| }|S t        t        | j                  d«      | u st        | t        j                  «      r| }|S |j                  j                  | «      }|S )a  
    If user function is not jitted already, mark the user's function
    as jitable.

    Parameters
    ----------
    func : function
        user defined function

    Returns
    -------
    function
        Numba JITed function, or function marked as JITable by numba
    r   Nr   F)r   r   r   Ú	extendingÚ	is_jittedÚgetattrÚnpÚ__name__Ú
isinstanceÚtypesÚBuiltinFunctionTypeÚregister_jitable)Úfuncr   Ú
numba_funcs      r   Újit_user_functionr&   ;   s‡   € õ Üä*¨7Ó3ˆà‡�× Ñ  Ô&àˆ
ð Ðô 
”�T—]‘] EÓ	*¨dÑ	2´jØŒe×'Ñ'ô7ð
 ˆ
ð Ðð —_‘_×5Ñ5°dÓ;ˆ
àÐr   c               óò   — |s||fS t        j                  | «      } |j                  g t        g|z  ¢|¢­i |¤Ž}|j	                  «        |j
                  }|j                  }|rt        d«      ‚||d }||fS )a  
    Prepare arguments for jitted function. As numba functions do not support kwargs,
    we try to move kwargs into args if possible.

    Parameters
    ----------
    func : function
        User defined function
    args : tuple
        User input positional arguments
    kwargs : dict
        User input keyword arguments
    num_required_args : int
        The number of leading positional arguments we will pass to udf.
        These are not supplied by the user.
        e.g. for groupby we require "values", "index" as the first two arguments:
        `numba_func(group, group_index, *args)`, in this case num_required_args=2.
        See :func:`pandas.core.groupby.numba_.generate_numba_agg_func`

    Returns
    -------
    tuple[tuple, dict]
        args, kwargs

    zƒnumba does not support keyword-only argumentshttps://github.com/numba/numba/issues/2916, https://github.com/numba/numba/issues/6846N)ÚinspectÚ	signatureÚbindÚ	_sentinelÚapply_defaultsÚargsÚkwargsr   )r$   r-   r.   Únum_required_argsr)   Ú	argumentss         r   Úprepare_function_argumentsr1   a   s›   € ñ8 Ø�Vˆ|Ðô ×!Ñ! $Ó'€IØ�	—‘ÐQ¤ Ð.?Ñ ?ÐQÀ$ÒQÈ&ÑQ€IØ×ÑÔð �>‰>€DØ×Ñ€Fáô
 ð9ó
ð 	
ð Ð!Ð"Ð#€DØ�ˆ<Ðr   )r   z
str | NoneÚreturnr   )F)r   r   r2   ÚNone)N)r   zdict[str, bool] | Noner2   zdict[str, bool])r$   r   r2   r   )
r$   r   r-   Útupler.   Údictr/   Úintr2   ztuple[tuple, dict])Ú__doc__Ú
__future__r   r(   r!   Útypingr   Únumpyr   Úpandas.compat._optionalr   Úpandas.errorsr   Úcollections.abcr   r	   Ú__annotations__r   r   r   r&   Úobjectr+   r1   © r   r   Ú<module>rA      s{   ðÚ +å "ã Û Ý  ã å >Ý (áÝ(àÐ �$Ó óFô
ôHó6 ñF ‹H€	ð5Ø
ð5Øð5Ø)-ð5ØEHð5àô5r   