U
    ÎZj`  ã                   @  sþ  U d Z ddlmZ ddlmZmZ ddlZddlmZm	Z	m
Z
mZmZmZmZ ddlZddlmZmZ ddlmZ G dd	„ d	eƒZG d
d„ deƒZi Zded< i Zded< i Zded< dgZded< G dd„ deeƒZddddœdd„Zdmddddœdd„Z d d!œd"d#„Z!dnddd&d'œd(d)„Z"doddd dœd*d+„Z#dd,œd-d.„Z$G d/d0„ d0ƒZ%G d1d2„ d2e
e ƒZ&d3Z'd4Z(d5Z)d6Z*e&e e'ƒa+e&e!e(ƒa,e&e#e*ƒa-e&e"e)ƒZ.e%eƒZ/G d7d8„ d8eƒZ0dpdd9dd:d;d d<œd=d>„a1dqdd&d&d&d d?œd@dA„Z2dddBœdCdD„Z3ddEdFœdGdH„Z4dddFœdIdJ„Z5ddKœdLdM„Z6ddKœdNdO„Z7dddFœdPdQ„Z8dddFœdRdS„Z9dddTœdUdV„Z:drdXddYœdZd[„Z;ed\d!œd]d^„ƒZ<d_d`daœdbdc„Z=d`d!œddde„Z>d`d!œdfdg„Z?d9d dhœdidj„Z@e=eAƒZBe=eCƒZDe=eEƒZFe=eGƒZHe>eGeIfƒZJdd!œdkdl„ZKdS )saò  
The config module holds package-wide configurables and provides
a uniform API for working with them.

Overview
========

This module supports the following requirements:
- options are referenced using keys in dot.notation, e.g. "x.y.option - z".
- keys are case-insensitive.
- functions should accept partial/regex keys, when unambiguous.
- options can be registered by modules at import time.
- options can be registered at init-time (via core.config_init)
- options have a default value, and (optionally) a description and
  validation function associated with them.
- options can be deprecated, in which case referencing them
  should produce a warning.
- deprecated options can optionally be rerouted to a replacement
  so that accessing a deprecated option reroutes to a differently
  named option.
- options can be reset to their default value.
- all option can be reset to their default value at once.
- all options in a certain sub - namespace can be reset at once.
- the user can set / get / reset or ask for the description of an option.
- a developer can register and mark an option as deprecated.
- you can register a callback to be invoked when the option value
  is set or reset. Changing the stored value is considered misuse, but
  is not verboten.

Implementation
==============

- Data is stored using nested dictionaries, and should be accessed
  through the provided API.

- "Registered options" and "Deprecated options" have metadata associated
  with them, which are stored in auxiliary dictionaries keyed on the
  fully-qualified key, e.g. "x.y.z.option".

- the config_init module is imported by the package's __init__.py file.
  placing any register_option() calls there will ensure those options
  are available as soon as pandas is loaded. If you use register_option
  in a module, it will only be available after that module is imported,
  which you should be aware of.

- `config_prefix` is a context_manager (for use with the `with` keyword)
  which can save developers some typing, see the docstring.

é    )Úannotations)ÚContextDecoratorÚcontextmanagerN)ÚAnyÚCallableÚGenericÚIterableÚIteratorÚ
NamedTupleÚcast)ÚFÚT)Úfind_stack_levelc                   @  s.   e Zd ZU ded< ded< ded< ded< dS )ÚDeprecatedOptionÚstrÚkeyú
str | NoneÚmsgÚrkeyÚremoval_verN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   úX/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/pandas/_config/config.pyr   L   s   
r   c                   @  s6   e Zd ZU ded< ded< ded< ded< ded	< d
S )ÚRegisteredOptionr   r   ÚobjectÚdefvalÚdocúCallable[[object], Any] | NoneÚ	validatorúCallable[[str], Any] | NoneÚcbNr   r   r   r   r   r   S   s
   
r   zdict[str, DeprecatedOption]Ú_deprecated_optionszdict[str, RegisteredOption]Ú_registered_optionsúdict[str, Any]Ú_global_configÚallú	list[str]Ú_reserved_keysc                   @  s   e Zd ZdZdS )ÚOptionErrorz^
    Exception raised for pandas.options.

    Backwards compatible with KeyError checks.
    N)r   r   r   Ú__doc__r   r   r   r   r,   h   s   r,   r   Úbool)ÚpatÚsilentÚreturnc                 C  sf   t | ƒ}t|ƒdkr2|s t| ƒ tdt| ƒ› �ƒ‚t|ƒdkrFtdƒ‚|d }|sZt|ƒ t|ƒ}|S )Nr   zNo such keys(s): é   zPattern matched multiple keys)Ú_select_optionsÚlenÚ_warn_if_deprecatedr,   ÚreprÚ_translate_key)r/   r0   Úkeysr   r   r   r   Ú_get_single_keyt   s    r9   Fr   c                 C  s   t | |ƒ}t|ƒ\}}|| S ©N)r9   Ú	_get_root)r/   r0   r   ÚrootÚkr   r   r   Ú_get_option†   s    
r>   ÚNone©r1   c            
   
   O  sî   t | ƒ}|r|d dkr tdƒ‚| dd¡}|rPt| ¡ ƒd }td|› d�ƒ‚t| d d d… | dd d… ƒD ]z\}}t||ƒ}t|ƒ}|rœ|j	rœ| 	|¡ t
|ƒ\}	}||	|< |jrn|rÞtjd	d
�� | |¡ W 5 Q R X qn| |¡ qnd S )Né   r   z4Must provide an even number of non-keyword argumentsr0   Fz2_set_option() got an unexpected keyword argument "ú"r2   T)Úrecord)r4   Ú
ValueErrorÚpopÚlistr8   Ú	TypeErrorÚzipr9   Ú_get_registered_optionr"   r;   r$   ÚwarningsÚcatch_warnings)
ÚargsÚkwargsÚnargsr0   Úkwargr=   Úvr   Úor<   r   r   r   Ú_set_optionŽ   s&    &


rR   Ú Tr   )r/   Ú_print_descr1   c                 C  sD   t | ƒ}t|ƒdkrtdƒ‚d dd„ |D ƒ¡}|r@t|ƒ d S |S )Nr   úNo such keys(s)Ú
c                 S  s   g | ]}t |ƒ‘qS r   )Ú_build_option_description©Ú.0r=   r   r   r   Ú
<listcomp>´   s     z$_describe_option.<locals>.<listcomp>)r3   r4   r,   ÚjoinÚprint)r/   rT   r8   Úsr   r   r   Ú_describe_option®   s    r^   c                 C  sf   t | ƒ}t|ƒdkrtdƒ‚t|ƒdkrDt| ƒdk rD| dkrDtdƒ‚|D ]}t|t| j|d� qHd S )Nr   rU   r2   é   r)   z’You must specify at least 4 characters when resetting multiple keys, use the special keyword "all" to reset all the options to their default value©r0   )r3   r4   r,   rD   rR   r&   r   )r/   r0   r8   r=   r   r   r   Ú_reset_option¼   s     ÿra   ©r/   c                 C  s   t | dd�}t|ƒjS ©NTr`   )r9   rI   r   )r/   r   r   r   r   Úget_default_valÎ   s    rd   c                   @  sR   e Zd ZdZdddddœdd„Zdd	dd
œdd„Zddœdd„Zddœdd„ZdS )ÚDictWrapperz/provide attribute-style access to a nested dictrS   r'   r   r?   )ÚdÚprefixr1   c                 C  s    t  | d|¡ t  | d|¡ d S )Nrf   rg   )r   Ú__setattr__)Úselfrf   rg   r   r   r   Ú__init__Ö   s    zDictWrapper.__init__r   )r   Úvalr1   c                 C  sR   t  | d¡}|r|d7 }||7 }|| jkrFt| j| tƒsFt||ƒ ntdƒ‚d S )Nrg   Ú.z.You can only set the value of existing options)r   Ú__getattribute__rf   Ú
isinstanceÚdictrR   r,   )ri   r   rk   rg   r   r   r   rh   Ú   s    zDictWrapper.__setattr__©r   c              
   C  s‚   t  | d¡}|r|d7 }||7 }zt  | d¡| }W n, tk
r` } ztdƒ|‚W 5 d }~X Y nX t|tƒrvt||ƒS t|ƒS d S )Nrg   rl   rf   zNo such option)r   rm   ÚKeyErrorr,   rn   ro   re   r>   )ri   r   rg   rP   Úerrr   r   r   Ú__getattr__æ   s    

zDictWrapper.__getattr__úIterable[str]r@   c                 C  s   t | j ¡ ƒS r:   )rF   rf   r8   )ri   r   r   r   Ú__dir__ô   s    zDictWrapper.__dir__N)rS   )r   r   r   r-   rj   rh   rs   ru   r   r   r   r   re   Ó   s
   re   c                   @  s>   e Zd Zddddœdd„Zddœd	d
„Zeddœdd„ƒZdS )ÚCallableDynamicDoczCallable[..., T]r   r?   )ÚfuncÚdoc_tmplr1   c                 C  s   || _ || _d S r:   )Ú__doc_tmpl__Ú__func__)ri   rw   rx   r   r   r   rj     s    zCallableDynamicDoc.__init__r   r@   c                 O  s   | j ||ŽS r:   )rz   )ri   rL   Úkwdsr   r   r   Ú__call__  s    zCallableDynamicDoc.__call__c                 C  s,   t ddd�}ttt ¡ ƒƒ}| jj||d�S )Nr)   F)rT   )Ú	opts_descÚ	opts_list)r^   Úpp_options_listrF   r&   r8   ry   Úformat)ri   r}   r~   r   r   r   r-   
  s    zCallableDynamicDoc.__doc__N)r   r   r   rj   r|   Úpropertyr-   r   r   r   r   rv     s   rv   aƒ  
get_option(pat)

Retrieves the value of the specified option.

Available options:

{opts_list}

Parameters
----------
pat : str
    Regexp which should match a single option.
    Note: partial matches are supported for convenience, but unless you use the
    full option name (e.g. x.y.z.option_name), your code may break in future
    versions if new options with similar names are introduced.

Returns
-------
result : the value of the option

Raises
------
OptionError : if no such option exists

Notes
-----
Please reference the :ref:`User Guide <options>` for more information.

The available options with its descriptions:

{opts_desc}
a�  
set_option(pat, value)

Sets the value of the specified option.

Available options:

{opts_list}

Parameters
----------
pat : str
    Regexp which should match a single option.
    Note: partial matches are supported for convenience, but unless you use the
    full option name (e.g. x.y.z.option_name), your code may break in future
    versions if new options with similar names are introduced.
value : object
    New value of option.

Returns
-------
None

Raises
------
OptionError if no such option exists

Notes
-----
Please reference the :ref:`User Guide <options>` for more information.

The available options with its descriptions:

{opts_desc}
aè  
describe_option(pat, _print_desc=False)

Prints the description for one or more registered options.

Call with no arguments to get a listing for all registered options.

Available options:

{opts_list}

Parameters
----------
pat : str
    Regexp pattern. All matching keys will have their description displayed.
_print_desc : bool, default True
    If True (default) the description(s) will be printed to stdout.
    Otherwise, the description(s) will be returned as a unicode string
    (for testing).

Returns
-------
None by default, the description(s) as a unicode string if _print_desc
is False

Notes
-----
Please reference the :ref:`User Guide <options>` for more information.

The available options with its descriptions:

{opts_desc}
a}  
reset_option(pat)

Reset one or more options to their default value.

Pass "all" as argument to reset all options.

Available options:

{opts_list}

Parameters
----------
pat : str/regex
    If specified only options matching `prefix*` will be reset.
    Note: partial matches are supported for convenience, but unless you
    use the full option name (e.g. x.y.z.option_name), your code may break
    in future versions if new options with similar names are introduced.

Returns
-------
None

Notes
-----
Please reference the :ref:`User Guide <options>` for more information.

The available options with its descriptions:

{opts_desc}
c                   @  s:   e Zd ZdZddœdd„Zddœdd„Zddœdd	„Zd
S )Úoption_contexta  
    Context manager to temporarily set options in the `with` statement context.

    You need to invoke as ``option_context(pat, val, [(pat, val), ...])``.

    Examples
    --------
    >>> with option_context('display.max_rows', 10, 'display.max_columns', 5):
    ...     pass
    r?   r@   c                 G  sL   t |ƒd dkst |ƒdk r$tdƒ‚tt|d d d… |dd d… ƒƒ| _d S )NrA   r   z>Need to invoke as option_context(pat, val, [(pat, val), ...]).r2   )r4   rD   rF   rH   Úops)ri   rL   r   r   r   rj   ±  s
    ÿzoption_context.__init__c                 C  s4   dd„ | j D ƒ| _| j D ]\}}t||dd� qd S )Nc                 S  s    g | ]\}}|t |d d�f‘qS )Tr`   )r>   )rY   r/   rk   r   r   r   rZ   º  s     z,option_context.__enter__.<locals>.<listcomp>Tr`   )rƒ   ÚundorR   )ri   r/   rk   r   r   r   Ú	__enter__¹  s    zoption_context.__enter__c                 G  s(   | j r$| j D ]\}}t||dd� qd S rc   )r„   rR   )ri   rL   r/   rk   r   r   r   Ú__exit__¿  s    zoption_context.__exit__N)r   r   r   r-   rj   r…   r†   r   r   r   r   r‚   ¥  s   r‚   r   r!   r#   )r   r   r    r"   r$   r1   c                 C  sV  ddl }ddl}|  ¡ } | tkr0td| › d�ƒ‚| tkrHtd| › d�ƒ‚|rT||ƒ |  d¡}|D ]@}t d|j	 d |¡sŠt
|› d	�ƒ‚| |¡rbt
|› d
�ƒ‚qbt}	d}
t|dd… ƒD ]H\}}t|	tƒsìt|
jd |d|… ¡d�ƒ‚||	krüi |	|< |	| }	q¼t|	tƒ�s0t|
jd |dd… ¡d�ƒ‚||	|d < t| ||||d�t| < dS )aÎ  
    Register an option in the package-wide pandas config object

    Parameters
    ----------
    key : str
        Fully-qualified key, e.g. "x.y.option - z".
    defval : object
        Default value of the option.
    doc : str
        Description of the option.
    validator : Callable, optional
        Function of a single argument, should raise `ValueError` if
        called with a value which is not a legal value for the option.
    cb
        a function of a single argument "key", which is called
        immediately after an option value is set/reset. key is
        the full name of the option.

    Raises
    ------
    ValueError if `validator` is specified and `defval` is not a valid value.

    r   NúOption 'z' has already been registeredz' is a reserved keyrl   ú^ú$z is not a valid identifierz is a python keywordz5Path prefix to option '{option}' is already an optionéÿÿÿÿ)Úoption)r   r   r    r"   r$   )ÚkeywordÚtokenizeÚlowerr&   r,   r+   ÚsplitÚreÚmatchÚNamerD   Ú	iskeywordr(   Ú	enumeratern   ro   r€   r[   r   )r   r   r    r"   r$   rŒ   r�   Úpathr=   Úcursorr   ÚiÚpr   r   r   Úregister_optionÅ  sB    



    ÿr™   )r   r   r   r   r1   c                 C  s6   |   ¡ } | tkr td| › d�ƒ‚t| |||ƒt| < dS )a  
    Mark option `key` as deprecated, if code attempts to access this option,
    a warning will be produced, using `msg` if given, or a default message
    if not.
    if `rkey` is given, any access to the key will be re-routed to `rkey`.

    Neither the existence of `key` nor that if `rkey` is checked. If they
    do not exist, any subsequence access will fail as usual, after the
    deprecation warning is given.

    Parameters
    ----------
    key : str
        Name of the option to be deprecated.
        must be a fully-qualified option name (e.g "x.y.z.rkey").
    msg : str, optional
        Warning message to output when the key is referenced.
        if no message is given a default message will be emitted.
    rkey : str, optional
        Name of an option to reroute access to.
        If specified, any referenced `key` will be
        re-routed to `rkey` including set/get/reset.
        rkey must be a fully-qualified option name (e.g "x.y.z.rkey").
        used by the default message if no `msg` is specified.
    removal_ver : str, optional
        Specifies the version in which this option will
        be removed. used by the default message if no `msg` is specified.

    Raises
    ------
    OptionError
        If the specified key has already been deprecated.
    r‡   z)' has already been defined as deprecated.N)rŽ   r%   r,   r   )r   r   r   r   r   r   r   Údeprecate_option  s    'rš   )r/   r1   c                   s8   ˆ t krˆ gS tt  ¡ ƒ}ˆ dkr&|S ‡ fdd„|D ƒS )zb
    returns a list of keys matching `pat`

    if pat=="all", returns all registered options
    r)   c                   s    g | ]}t  ˆ |t j¡r|‘qS r   )r�   ÚsearchÚIrX   rb   r   r   rZ   R  s      z#_select_options.<locals>.<listcomp>)r&   Úsortedr8   )r/   r8   r   rb   r   r3   C  s    r3   ztuple[dict[str, Any], str])r   r1   c                 C  s4   |   d¡}t}|d d… D ]}|| }q||d fS )Nrl   rŠ   )r�   r(   )r   r•   r–   r˜   r   r   r   r;   U  s
    

r;   c                 C  s   |   ¡ } | tkS )z4Returns True if the given option has been deprecated)rŽ   r%   rp   r   r   r   Ú_is_deprecated]  s    rž   rp   c                 C  s,   zt |  }W n tk
r"   Y dS X |S dS )z±
    Retrieves the metadata for a deprecated option, if `key` is deprecated.

    Returns
    -------
    DeprecatedOption (namedtuple) if key is deprecated, None otherwise
    N)r%   rq   ©r   rf   r   r   r   Ú_get_deprecated_optionc  s
    r    c                 C  s
   t  | ¡S )z¨
    Retrieves the option metadata if `key` is a registered option.

    Returns
    -------
    RegisteredOption (namedtuple) if key is deprecated, None otherwise
    )r&   Úgetrp   r   r   r   rI   s  s    rI   c                 C  s   t | ƒ}|r|jp| S | S dS )z‚
    if key id deprecated and a replacement key defined, will return the
    replacement key, otherwise returns `key` as - is
    N)r    r   rŸ   r   r   r   r7   ~  s    
r7   c                 C  s†   t | ƒ}|r‚|jr(tj|jttƒ d� nVd| › d�}|jrJ|d|j› �7 }|jrd|d|j› d�7 }n|d7 }tj|ttƒ d� dS d	S )
zŸ
    Checks if `key` is a deprecated option and if so, prints a warning.

    Returns
    -------
    bool - True if `key` is deprecated, False otherwise.
    )Ú
stacklevelú'z' is deprecatedz and will be removed in z, please use 'z
' instead.z, please refrain from using it.TF)r    r   rJ   ÚwarnÚFutureWarningr   r   r   )r   rf   r   r   r   r   r5   Š  s"    ýr5   )r=   r1   c                 C  s˜   t | ƒ}t| ƒ}| › d�}|jr<|d |j ¡  d¡¡7 }n|d7 }|rf|d|j› dt| dƒ› d�7 }|r”|jprd}|d	7 }|d
|› d�7 }|d7 }|S )zCBuilds a formatted description of a registered option and prints itú rV   zNo description available.z
    [default: z] [currently: Tú]rS   z
    (Deprecatedz, use `z
` instead.ú))	rI   r    r    r[   Ústripr�   r   r>   r   )r=   rQ   rf   r]   r   r   r   r   rW   ¨  s    

rW   éP   rt   )r8   Ú_printc           
        sÆ   ddl m} ddlm‰ ddddœ‡‡fdd	„}g }d
d„ t| ƒD ƒ}|rX||d|ƒ7 }dd„ | D ƒ} |t| ƒdd„ ƒD ],\‰ }‡ fdd„t|ƒD ƒ}||ˆ |ƒ7 }qxd |¡}	|r¾t|	ƒ n|	S dS )z@Builds a concise listing of available options, grouped by prefixr   )Úgroupby)Úwrapr   rt   r*   )ÚnameÚksr1   c                   sP   | rd|  d nd}ˆd  |¡ˆ |ddd�}|rL|d rL| rL|d d	 |d< |S )
Nz- z.[rS   z, z  F)Úinitial_indentÚsubsequent_indentÚbreak_long_wordsrŠ   r§   )r[   )r®   r¯   ÚpfxÚls)Úwidthr­   r   r   ÚppÅ  s    ûzpp_options_list.<locals>.ppc                 S  s   g | ]}|  d ¡dk r|‘qS ©rl   r   ©Úfind©rY   Úxr   r   r   rZ   Ó  s      z#pp_options_list.<locals>.<listcomp>rS   c                 S  s   g | ]}|  d ¡dkr|‘qS r·   r¸   rº   r   r   r   rZ   Ö  s      c                 S  s   | d |   d¡… S ©Nrl   )Úrfind©r»   r   r   r   Ú<lambda>Ø  ó    z!pp_options_list.<locals>.<lambda>c                   s    g | ]}|t ˆ ƒd  d… ‘qS )r2   N)r4   rº   )r=   r   r   rZ   Ù  s     rV   N)Ú	itertoolsr¬   Útextwrapr­   r�   rF   r[   r\   )
r8   rµ   r«   r¬   r¶   r´   ZsinglesÚgr¯   r]   r   )r=   rµ   r­   r   r   À  s    

r   zIterator[None]c                 #  sV   dddœ‡ fdd„}t }t}t}|tƒa|tƒa|t ƒa z
dV  W 5 |a|a|a X dS )aÂ  
    contextmanager for multiple invocations of API with a common prefix

    supported API functions: (register / get / set )__option

    Warning: This is not thread - safe, and won't work properly if you import
    the API functions into your module using the "from x import y" construct.

    Example
    -------
    import pandas._config.config as cf
    with cf.config_prefix("display.font"):
        cf.register_option("color", "red")
        cf.register_option("size", " 5 pt")
        cf.set_option(size, " 6 pt")
        cf.get_option(size)
        ...

        etc'

    will register options "display.font.color", "display.font.size", set the
    value of "display.font.size"... and so on.
    r   )rw   r1   c                   s   ddœ‡ ‡fdd„}t t|ƒS )Nr   rp   c                   s   ˆ› d| › �}ˆ |f|ž|ŽS r¼   r   )r   rL   r{   Úpkey)rw   rg   r   r   Úinner  s    z*config_prefix.<locals>.wrap.<locals>.inner)r   r   )rw   rÅ   ©rg   )rw   r   r­     s    zconfig_prefix.<locals>.wrapN)r™   Ú
get_optionÚ
set_option)rg   r­   Z_register_optionr>   rR   r   rÆ   r   Úconfig_prefixæ  s    
rÉ   z	type[Any]zCallable[[Any], None])Ú_typer1   c                   s   ddœ‡ fdd„}|S )a  

    Parameters
    ----------
    `_type` - a type to be compared against (e.g. type(x) == `_type`)

    Returns
    -------
    validator - a function of a single argument x , which raises
                ValueError if type(x) is not equal to `_type`

    r?   r@   c                   s    t | ƒˆ krtdˆ › d�ƒ‚d S )NzValue must have type 'r£   )ÚtyperD   r¾   ©rÊ   r   r   rÅ   +  s    zis_type_factory.<locals>.innerr   ©rÊ   rÅ   r   rÌ   r   Úis_type_factory  s    rÎ   c                   sL   t ˆ ttfƒr(tˆ ƒ‰ d ttˆ ƒ¡‰ndˆ › d�‰ddœ‡ ‡fdd„}|S )zê

    Parameters
    ----------
    `_type` - the type to be checked against

    Returns
    -------
    validator - a function of a single argument x , which raises
                ValueError if x is not an instance of `_type`

    ú|r£   r?   r@   c                   s   t | ˆ ƒstdˆ› �ƒ‚d S )NzValue must be an instance of )rn   rD   r¾   ©rÊ   Z	type_reprr   r   rÅ   E  s    
z"is_instance_factory.<locals>.inner)rn   ÚtuplerF   r[   Úmapr   rÍ   r   rÐ   r   Úis_instance_factory2  s    rÓ   c                   s4   dd„ ˆD ƒ‰ dd„ ˆD ƒ‰ddœ‡ ‡fdd„}|S )Nc                 S  s   g | ]}t |ƒr|‘qS r   ©Úcallable©rY   Úcr   r   r   rZ   N  s      z%is_one_of_factory.<locals>.<listcomp>c                 S  s   g | ]}t |ƒs|‘qS r   rÔ   rÖ   r   r   r   rZ   O  s      r?   r@   c                   s\   ˆ ˆkrXt ‡ fdd„ˆD ƒƒsXdd„ ˆD ƒ}d |¡}d|› �}tˆƒrP|d7 }t|ƒ‚d S )Nc                 3  s   | ]}|ˆ ƒV  qd S r:   r   rÖ   r¾   r   r   Ú	<genexpr>T  s     z3is_one_of_factory.<locals>.inner.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r   )r   )rY   Zlvalr   r   r   rZ   U  s     z4is_one_of_factory.<locals>.inner.<locals>.<listcomp>rÏ   zValue must be one of z or a callable)Úanyr[   r4   rD   )r»   ZuvalsZ	pp_valuesr   ©Z	callablesÚlegal_valuesr¾   r   rÅ   Q  s    

z is_one_of_factory.<locals>.innerr   )rÛ   rÅ   r   rÚ   r   Úis_one_of_factoryL  s    rÜ   )Úvaluer1   c                 C  s2   | dkrdS t | tƒr"| dkr"dS d}t|ƒ‚dS )zö
    Verify that value is None or a positive int.

    Parameters
    ----------
    value : None or int
            The `value` to be checked.

    Raises
    ------
    ValueError
        When the value is not None or is a negative integer
    Nr   z+Value must be a nonnegative integer or None)rn   ÚintrD   )rÝ   r   r   r   r   Úis_nonnegative_int_  s    
rß   c                 C  s   t | ƒstdƒ‚dS )z»

    Parameters
    ----------
    `obj` - the object to be checked

    Returns
    -------
    validator - returns True if object is callable
        raises ValueError otherwise.

    zValue must be a callableT)rÕ   rD   )Úobjr   r   r   Úis_callable�  s    rá   )F)rS   T)F)rS   NN)NNN)rª   F)Lr-   Ú
__future__r   Ú
contextlibr   r   r�   Útypingr   r   r   r   r	   r
   r   rJ   Zpandas._typingr   r   Zpandas.util._exceptionsr   r   r   r%   r   r&   r(   r+   ÚAttributeErrorrq   r,   r9   r>   rR   r^   ra   rd   re   rv   Z_get_option_tmplZ_set_option_tmplZ_describe_option_tmplZ_reset_option_tmplrÇ   rÈ   Zreset_optionZdescribe_optionÚoptionsr‚   r™   rš   r3   r;   rž   r    rI   r7   r5   rW   r   rÉ   rÎ   rÓ   rÜ   rß   rÞ   Zis_intr.   Zis_boolÚfloatZis_floatr   Zis_strÚbytesZis_textrá   r   r   r   r   Ú<module>   sz   2$		 ."$""



#   ûM   ü3&6