o
    h7                     @  s"  d Z ddlmZ ddlmZmZ ddlmZmZ ddl	Z
ddlmZ ddlmZmZ edeeZed	eedZdBddZdBddZdBddZdBddZdBddZdBddZ		dCdDd d!ZdEdFd#d$ZdGd(d)ZedHd+d,ZedId/d,ZdJd2d,ZdKd6d7ZdLd9d:ZdMd>d?Z dBd@dAZ!dS )NzV
Module that contains many useful utilities
for validating data or function arguments
    )annotations)IterableSequence)TypeVaroverloadN)lib)is_bool
is_integerBoolishTBoolishNoneTreturnNonec              	   C  sl   |dk rt dt|t|kr4t|| }t|| }|dkr"dnd}t|  d| d| d| d	d
S )z
    Checks whether 'args' has length of at most 'compat_args'. Raises
    a TypeError if that is not the case, similar to in Python when a
    function is called with too many arguments.
    r   z*'max_fname_arg_count' must be non-negative   argument	argumentsz() takes at most  z (z given)N)
ValueErrorlen	TypeError)fnameargsmax_fname_arg_countcompat_argsmax_arg_countactual_arg_countr    r   k/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/pandas/util/_validators.py_check_arg_length   s   r   c              	   C  s   |D ]J}z)|| }|| }|dur|du s|du r |dur d}n||k}t |s,tdW n ty>   || || u }Y nw |sLtd| d|  dqdS )z
    Check that the keys in `arg_val_dict` are mapped to their
    default values as specified in `compat_args`.

    Note that this function is to be called only when it has been
    checked that arg_val_dict.keys() is a subset of compat_args
    NFz'match' is not a booleanzthe 'z=' parameter is not supported in the pandas implementation of z())r   r   )r   arg_val_dictr   keyv1v2matchr   r   r   _check_for_default_values1   s*    r#   c                 C  s,   t | ||| tt||}t| || dS )a  
    Checks whether the length of the `*args` argument passed into a function
    has at most `len(compat_args)` arguments and whether or not all of these
    elements in `args` are set to their default values.

    Parameters
    ----------
    fname : str
        The name of the function being passed the `*args` parameter
    args : tuple
        The `*args` parameter passed into a function
    max_fname_arg_count : int
        The maximum number of arguments that the function `fname`
        can accept, excluding those in `args`. Used for displaying
        appropriate error messages. Must be non-negative.
    compat_args : dict
        A dictionary of keys and their associated default values.
        In order to accommodate buggy behaviour in some versions of `numpy`,
        where a signature displayed keyword arguments but then passed those
        arguments **positionally** internally when calling downstream
        implementations, a dict ensures that the original
        order of the keyword arguments is enforced.

    Raises
    ------
    TypeError
        If `args` contains more values than there are `compat_args`
    ValueError
        If `args` contains values that do not correspond to those
        of the default values specified in `compat_args`
    N)r   dictzipr#   )r   r   r   r   kwargsr   r   r   validate_argsW   s    r'   c                 C  s8   t |t | }|rtt|}t|  d| ddS )z}
    Checks whether 'kwargs' contains any keys that are not
    in 'compat_args' and raises a TypeError if there is one.
    z'() got an unexpected keyword argument ''N)setnextiterr   )r   r&   r   diffbad_argr   r   r   _check_for_invalid_keys   s
   r.   c                 C  s$   |  }t| || t| || dS )a  
    Checks whether parameters passed to the **kwargs argument in a
    function `fname` are valid parameters as specified in `*compat_args`
    and whether or not they are set to their default values.

    Parameters
    ----------
    fname : str
        The name of the function being passed the `**kwargs` parameter
    kwargs : dict
        The `**kwargs` parameter passed into `fname`
    compat_args: dict
        A dictionary of keys that `kwargs` is allowed to have and their
        associated default values

    Raises
    ------
    TypeError if `kwargs` contains keys not in `compat_args`
    ValueError if `kwargs` contains keys in `compat_args` that do not
    map to the default values specified in `compat_args`
    N)copyr.   r#   )r   r&   r   kwdsr   r   r   validate_kwargs   s   r1   c                 C  sh   t | |t|  || tt||}|D ]}||v r&t|  d| dq|| t| || dS )a  
    Checks whether parameters passed to the *args and **kwargs argument in a
    function `fname` are valid parameters as specified in `*compat_args`
    and whether or not they are set to their default values.

    Parameters
    ----------
    fname: str
        The name of the function being passed the `**kwargs` parameter
    args: tuple
        The `*args` parameter passed into a function
    kwargs: dict
        The `**kwargs` parameter passed into `fname`
    max_fname_arg_count: int
        The minimum number of arguments that the function `fname`
        requires, excluding those in `args`. Used for displaying
        appropriate error messages. Must be non-negative.
    compat_args: dict
        A dictionary of keys that `kwargs` is allowed to
        have and their associated default values.

    Raises
    ------
    TypeError if `args` contains more values than there are
    `compat_args` OR `kwargs` contains keys not in `compat_args`
    ValueError if `args` contains values not at the default value (`None`)
    `kwargs` contains keys in `compat_args` that do not map to the default
    value as specified in `compat_args`

    See Also
    --------
    validate_args : Purely args validation.
    validate_kwargs : Purely kwargs validation.

    z-() got multiple values for keyword argument 'r(   N)r   tuplevaluesr$   r%   r   updater1   )r   r   r&   r   r   	args_dictr   r   r   r   validate_args_and_kwargs   s   (
r6   TFvaluearg_namestrnone_allowedboolint_allowedc                 C  sN   t | }|r|p| du }|r|pt| t}|s%td| dt| j d| S )aR  
    Ensure that argument passed in arg_name can be interpreted as boolean.

    Parameters
    ----------
    value : bool
        Value to be validated.
    arg_name : str
        Name of the argument. To be reflected in the error message.
    none_allowed : bool, default True
        Whether to consider None to be a valid boolean.
    int_allowed : bool, default False
        Whether to consider integer value to be a valid boolean.

    Returns
    -------
    value
        The same value as input.

    Raises
    ------
    ValueError
        If the value is not a valid boolean.
    NzFor argument "z$" expected type bool, received type .)r   
isinstanceintr   type__name__)r7   r8   r:   r<   
good_valuer   r   r   validate_bool_kwarg   s   rC   validate_scalar_dict_valuec                 C  s   ddl m} | du r|du rtd| du r"|dur"||}| |fS | durB|du rB|r>t| ttfr>tdt| j d| |fS | durN|durNtd| |fS )a$  
    Validate the keyword arguments to 'fillna'.

    This checks that exactly one of 'value' and 'method' is specified.
    If 'method' is specified, this validates that it's a valid method.

    Parameters
    ----------
    value, method : object
        The 'value' and 'method' keyword arguments for 'fillna'.
    validate_scalar_dict_value : bool, default True
        Whether to validate that 'value' is a scalar or dict. Specifically,
        validate that it is not a list or tuple.

    Returns
    -------
    value, method : object
    r   )clean_fill_methodNz(Must specify a fill 'value' or 'method'.z>"value" parameter must be a scalar or dict, but you passed a ""z)Cannot specify both 'value' and 'method'.)	pandas.core.missingrE   r   r>   listr2   r   r@   rA   )r7   methodrD   rE   r   r   r   validate_fillna_kwargs  s"   rJ   qfloat | Iterable[float]
np.ndarrayc                 C  s^   t | }d}|jdkr d|  krdkst| t||S tdd |D s-t||S )a  
    Validate percentiles (used by describe and quantile).

    This function checks if the given float or iterable of floats is a valid percentile
    otherwise raises a ValueError.

    Parameters
    ----------
    q: float or iterable of floats
        A single percentile or an iterable of percentiles.

    Returns
    -------
    ndarray
        An ndarray of the percentiles if valid.

    Raises
    ------
    ValueError if percentiles are not in given interval([0, 1]).
    z0percentiles should all be in the interval [0, 1]r   r   c                 s  s(    | ]}d |  kodkn  V  qdS )r   r   Nr   ).0qsr   r   r   	<genexpr>S  s   & z&validate_percentile.<locals>.<genexpr>)npasarrayndimr   all)rK   q_arrmsgr   r   r   validate_percentile6  s   

rW   	ascendingc                 C     d S Nr   rX   r   r   r   validate_ascendingX     r\   Sequence[BoolishT]list[BoolishT]c                 C  rY   rZ   r   r[   r   r   r   r\   ]  r]   bool | int | Sequence[BoolishT]bool | int | list[BoolishT]c                   s8   ddd t | tst| dfi  S  fdd| D S )z8Validate ``ascending`` kwargs for ``sort_index`` method.FT)r:   r<   rX   c                   s   g | ]}t |d fi  qS r[   )rC   )rN   itemr&   r   r   
<listcomp>j  s    z&validate_ascending.<locals>.<listcomp>)r>   r   rC   r[   r   rc   r   r\   b  s   

closed
str | Nonetuple[bool, bool]c                 C  sP   d}d}| du rd}d}||fS | dkrd}||fS | dkr$d}||fS t d)a%  
    Check that the `closed` argument is among [None, "left", "right"]

    Parameters
    ----------
    closed : {None, "left", "right"}

    Returns
    -------
    left_closed : bool
    right_closed : bool

    Raises
    ------
    ValueError : if argument is not among valid values
    FNTleftrightz/Closed has to be either 'left', 'right' or None)r   )re   left_closedright_closedr   r   r   validate_endpointsm  s   rl   	inclusivec                 C  s6   d}t | trddddd| }|du rtd|S )aD  
    Check that the `inclusive` argument is among {"both", "neither", "left", "right"}.

    Parameters
    ----------
    inclusive : {"both", "neither", "left", "right"}

    Returns
    -------
    left_right_inclusive : tuple[bool, bool]

    Raises
    ------
    ValueError : if argument is not among valid values
    N)TTTF)FT)FF)bothrh   ri   neitherz?Inclusive has to be either 'both', 'neither', 'left' or 'right')r>   r9   getr   )rm   left_right_inclusiver   r   r   validate_inclusive  s   
rs   locr?   lengthc                 C  sZ   t | std| d| | dk r| |7 } d|   kr |ks+n td| d| | S )z
    Check that we have an integer between -length and length, inclusive.

    Standardize negative loc to within [0, length].

    The exceptions we raise on failure match np.insert.
    z loc must be an integer between -z and r   )r	   r   
IndexError)rt   ru   r   r   r   validate_insert_loc  s   rw   c                 C  s*   | t jur| dvrtd|  dd S d S )N)numpy_nullablepyarrowzdtype_backend z= is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.)r   
no_defaultr   )dtype_backendr   r   r   check_dtype_backend  s   

r|   )r   r   rn   )
r7   r   r8   r9   r:   r;   r<   r;   r   r   )T)rD   r;   )rK   rL   r   rM   )rX   r
   r   r
   )rX   r^   r   r_   )rX   r`   r   ra   )re   rf   r   rg   )rm   rf   r   rg   )rt   r?   ru   r?   r   r?   )"__doc__
__future__r   collections.abcr   r   typingr   r   numpyrQ   pandas._libsr   pandas.core.dtypes.commonr   r	   r;   r?   r
   r   r   r#   r'   r.   r1   r6   rC   rJ   rW   r\   rl   rs   rw   r|   r   r   r   r   <module>   s:    


&
)

=-
'"


!
"