
    Owgnc                       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 ddlZddlmZmZ ddlmZ erddlmZmZ  G d	 d
e      Z G 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ee      Z d9dZ!d:d;dZ"d<dZ#d=d>dZ$d:d?dZ%d@dZ& G d d      Z' G d  d!ee         Z(d"Z)d#Z*d$Z+d%Z, e(e"e)      a- e(e#e*      a. e(e%e,      Z/ e(e$e+      Z0 e'e      Z1 G d& d'e      Z2	 	 	 dA	 	 	 	 	 	 	 	 	 	 	 dBd(a3	 	 	 dC	 	 	 	 	 	 	 	 	 dDd)Z4dEd*Z5dFd+Z6dGd,Z7dHd-Z8dHd.Z9dId/Z:dGd0Z;dJd1Z<dKdLd2Z=edMd3       Z>dNd4Z?dOd5Z@dOd6ZAdPd7ZB e?eC      ZD e?eE      ZF e?eG      ZH e?eI      ZJ e@eIeKf      ZLdQd8ZMy)Ra  
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)TYPE_CHECKINGAnyCallableGeneric
NamedTuplecast)FT)find_stack_level)	GeneratorIterablec                  6    e Zd ZU ded<   ded<   ded<   ded<   y)DeprecatedOptionstrkey
str | Nonemsgrkeyremoval_verN__name__
__module____qualname____annotations__     L/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/_config/config.pyr   r   Q   s    	H	O
r   r   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded	<   y
)RegisteredOptionr   r   objectdefvaldocCallable[[object], Any] | None	validatorCallable[[str], Any] | NonecbNr   r   r   r    r"   r"   X   s    	HN	H--##r   r"   zdict[str, DeprecatedOption]_deprecated_optionszdict[str, RegisteredOption]_registered_optionsdict[str, Any]_global_configall	list[str]_reserved_keysc                      e Zd ZdZy)OptionErrorz
    Exception raised for pandas.options.

    Backwards compatible with KeyError checks.

    Examples
    --------
    >>> pd.options.context
    Traceback (most recent call last):
    OptionError: No such option
    N)r   r   r   __doc__r   r   r    r2   r2   m   s    
r   r2   c                    t        |       }t        |      dk(  r$|st        |        t        dt	        |              t        |      dkD  rt        d      |d   }|st        |       t        |      }|S )Nr   zNo such keys(s):    zPattern matched multiple keys)_select_optionslen_warn_if_deprecatedr2   repr_translate_key)patsilentkeysr   s       r    _get_single_keyr>      ss    3D
4yA~$-d3i[9::
4y1}9::
q'CC 

CJr   c                @    t        | |      }t        |      \  }}||   S N)r>   	_get_root)r;   r<   r   rootks        r    _get_optionrD      s&    
#v
&C nGD!7Nr   c                 Z   t        |       }|r|dz  dk7  rt        d      |j                  dd      }|r1t        t	        |j                                     }t        d| d      t        | d d d   | dd d         D ]  \  }}t        ||      }t        |      }|r|j                  r|j                  |       t        |      \  }	}
||	|
<   |j                  s\|r1t        j                  d	
      5  |j                  |       d d d        |j                  |        y # 1 sw Y   xY w)N   r   z4Must provide an even number of non-keyword argumentsr<   Fz2_set_option() got an unexpected keyword argument ""r5   T)record)r7   
ValueErrorpopnextiterr=   	TypeErrorzipr>   _get_registered_optionr'   rA   r)   warningscatch_warnings)argskwargsnargsr<   kwargrC   vr   orB   k_roots              r    _set_optionrY      s   IEEAINOPP ZZ%(FT&++-()LUGSTUVVD1ItADqDz* 1a("3'KKN !~fV44,,D9 DDI  S	! s   2D!!D*	c                    t        |       }t        |      dk(  rt        d      dj                  |D cg c]  }t	        |       c}      }|rt        |       y |S c c}w )Nr   No such keys(s)
)r6   r7   r2   join_build_option_descriptionprint)r;   _print_descr=   rC   ss        r    _describe_optionrb      sY    3D
4yA~+,,		>A,Q/>?AaH ?s   Ac                    t        |       }t        |      dk(  rt        d      t        |      dkD  rt        |       dk  r| dk7  rt        d      |D ]!  }t	        |t
        |   j                  |       # y )Nr   r[   r5      r.   zYou must specify at least 4 characters when resetting multiple keys, use the special keyword "all" to reset all the options to their default valuer<   )r6   r7   r2   rI   rY   r+   r$   )r;   r<   r=   rC   s       r    _reset_optionrf      s|    3D
4yA~+,,
4y1}SA#,D
 	
  EA*1-44VDEr   c                F    t        | d      }t        |      j                  S NTre   )r>   rO   r$   )r;   r   s     r    get_default_valri      s    
#d
+C!#&---r   c                  >    e Zd ZU dZded<   d	d
dZddZddZddZy)DictWrapperz/provide attribute-style access to a nested dictr,   dc                `    t         j                  | d|       t         j                  | d|       y )Nrl   prefix)r#   __setattr__)selfrl   rn   s      r    __init__zDictWrapper.__init__   s&    4a(462r   c                    t         j                  | d      }|r|dz  }||z  }|| j                  v r*t        | j                  |   t              st        ||       y t        d      )Nrn   .z.You can only set the value of existing options)r#   __getattribute__rl   
isinstancedictrY   r2   )rp   r   valrn   s       r    ro   zDictWrapper.__setattr__   s]    ((x8cMF# $&&=DFF3K!>$NOOr   c                   t         j                  | d      }|r|dz  }||z  }	 t         j                  | d      |   }t	        |t
              rt        ||      S t        |      S # t        $ r}t        d      |d }~ww xY w)Nrn   rs   rl   zNo such option)r#   rt   KeyErrorr2   ru   rv   rk   rD   )rp   r   rn   rV   errs        r    __getattr__zDictWrapper.__getattr__   s    ((x8cMF#	9''c237A aq&))v&&  	9./S8	9s   A$ $	A>-A99A>c                H    t        | j                  j                               S r@   )listrl   r=   )rp   s    r    __dir__zDictWrapper.__dir__   s    DFFKKM""r   N) )rl   r,   rn   r   returnNone)r   r   rw   r   r   r   r   r   )r   r/   )	r   r   r   r3   r   rq   ro   r{   r~   r   r   r    rk   rk      s     93
P'#r   rk   c                  .    e Zd ZddZddZedd       Zy)CallableDynamicDocc                     || _         || _        y r@   )__doc_tmpl____func__)rp   funcdoc_tmpls      r    rq   zCallableDynamicDoc.__init__  s    $r   c                &     | j                   |i |S r@   )r   )rp   rR   kwdss      r    __call__zCallableDynamicDoc.__call__  s    t}}d+d++r   c                    t        dd      }t        t        t        j	                                     }| j
                  j                  ||      S )Nr.   F)r`   )	opts_desc	opts_list)rb   pp_options_listr}   r+   r=   r   format)rp   r   r   s      r    r3   zCallableDynamicDoc.__doc__  sC    $U>	#D)<)A)A)C$DE	  '')y'QQr   N)r   zCallable[..., T]r   r   r   r   )r   r   )r   r   )r   r   r   rq   r   propertyr3   r   r   r    r   r     s"    , R Rr   r   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}

Examples
--------
>>> pd.get_option('display.max_columns')  # doctest: +SKIP
4
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}

Examples
--------
>>> pd.set_option('display.max_columns', 4)
>>> df = pd.DataFrame([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
>>> df
   0  1  ...  3   4
0  1  2  ...  4   5
1  6  7  ...  9  10
[2 rows x 5 columns]
>>> pd.reset_option('display.max_columns')
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}

Examples
--------
>>> pd.describe_option('display.max_columns')  # doctest: +SKIP
display.max_columns : int
    If max_cols is exceeded, switch to truncate view...
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}

Examples
--------
>>> pd.reset_option('display.max_columns')  # doctest: +SKIP
c                  (    e Zd ZdZddZddZddZy)option_contextaF  
    Context manager to temporarily set options in the `with` statement context.

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

    Examples
    --------
    >>> from pandas import option_context
    >>> with option_context('display.max_rows', 10, 'display.max_columns', 5):
    ...     pass
    c           	         t        |      dz  dk7  st        |      dk  rt        d      t        t        |d d d   |dd d               | _        y )NrF   r   z>Need to invoke as option_context(pat, val, [(pat, val), ...]).r5   )r7   rI   r}   rN   ops)rp   rR   s     r    rq   zoption_context.__init__  sS    t9q=ATQP  D1ItADqDz23r   c                    | j                   D cg c]  \  }}|t        |      f c}}| _        | j                   D ]  \  }}t        ||d        y c c}}w rh   )r   rD   undorY   )rp   r;   rw   s      r    	__enter__zoption_context.__enter__  sO    =AXXFcc;s+,F	 	/HCS.	/ Gs   Ac                b    | j                   r#| j                   D ]  \  }}t        ||d        y y rh   )r   rY   )rp   rR   r;   rw   s       r    __exit__zoption_context.__exit__  s1    99 II 3SCT23 r   Nr   r   )r   r   r   r3   rq   r   r   r   r   r    r   r     s    
4/3r   r   c           
        ddl }ddl}| j                         } | t        v rt	        d|  d      | t
        v rt	        d|  d      |r ||       | j                  d      }|D ]U  }t        j                  d|j                  z   dz   |      st        | d	      |j                  |      sIt        | d
       t        }	d}
t        |dd       D ]P  \  }}t        |	t              s-t	        |
j!                  dj#                  |d|                   ||	vri |	|<   |	|   }	R t        |	t              s-t	        |
j!                  dj#                  |dd                   ||	|d   <   t%        | ||||      t        | <   y)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 keyrs   ^$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+   r2   r0   splitrematchNamerI   	iskeywordr-   	enumerateru   rv   r   r]   r"   )r   r$   r%   r'   r)   r   r   pathrC   cursorr   ips                r    register_optionr     s   > 
))+C
!!HSE)FGHH
nHSE)<=>> & 99S>D 9xxhmm+c115s"<=>>Qs"6788	9 F
AC$s)$ 1&$'cjjbq0BjCDDF?F1I fd##**CHHT#2Y,?*@AAF48  0C9 r   c                |    | j                         } | t        v rt        d|  d      t        | |||      t        | <   y)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*   r2   r   )r   r   r   r   s       r    deprecate_optionr   6  sD    N ))+C
!!HSE)RSTT/S$Lr   c                    | t         v r| gS t        t         j                               }| dk(  r|S |D cg c]*  }t        j                  | |t        j
                        s)|, c}S c c}w )zb
    returns a list of keys matching `pat`

    if pat=="all", returns all registered options
    r.   )r+   sortedr=   r   searchI)r;   r=   rC   s      r    r6   r6   i  s]     !!u %**,-D
e|7!ryya6A777s   *A&A&c                \    | j                  d      }t        }|d d D ]  }||   }	 ||d   fS )Nrs   r   )r   r-   )r   r   r   r   s       r    rA   rA   {  sA    99S>DF#2Y 48r   c                2    | j                         } | t        v S )z4Returns True if the given option has been deprecated)r   r*   r   s    r    _is_deprecatedr     s    
))+C%%%r   c                8    	 t         |    }|S # t        $ r Y yw xY w)z
    Retrieves the metadata for a deprecated option, if `key` is deprecated.

    Returns
    -------
    DeprecatedOption (namedtuple) if key is deprecated, None otherwise
    N)r*   ry   r   rl   s     r    _get_deprecated_optionr     s,    $   s   	 	c                ,    t         j                  |       S )z
    Retrieves the option metadata if `key` is a registered option.

    Returns
    -------
    RegisteredOption (namedtuple) if key is deprecated, None otherwise
    )r+   getr   s    r    rO   rO     s     ""3''r   c                @    t        |       }|r|j                  xs | S | S )z
    if key id deprecated and a replacement key defined, will return the
    replacement key, otherwise returns `key` as - is
    )r   r   r   s     r    r:   r:     s$    
 	s#Avv}
r   c                p   t        |       }|r|j                  r/t        j                  |j                  t        t                      yd|  d}|j                  r|d|j                   z  }|j                  r|d|j                   dz  }n|dz  }t        j                  |t        t                      yy	)
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   rP   warnFutureWarningr   r   r   )r   rl   r   s      r    r8   r8     s     	s#A55MM+-  cU/*C}}1!--AAvvxz::88MM#}9I9KLr   c                d   t        |       }t        |       }|  d}|j                  r<|dj                  |j                  j	                         j                  d            z  }n|dz  }|r |d|j                   dt        | d       dz  }|r#|j                  xs d}|d	z  }|d
| dz  }|dz  }|S )zCBuilds a formatted description of a registered option and prints it r\   zNo description available.z
    [default: z] [currently: T]r   z
    (Deprecatedz, use `z
` instead.))	rO   r   r%   r]   stripr   r$   rD   r   )rC   rW   rl   ra   r   s        r    r^   r^     s    q!Aq!A#QAuu	TYYquu{{}**4011	((	zAt8L7MQOOvv|	  	wtfJ''	SHr   c                   ddl m} ddlm dfd}g }t	        |       D cg c]  }|j                  d      dk  s| }}|r| |d|      z  }| D cg c]  }|j                  d      dk\  s| } } |t	        |       d       D ]8  \  }}	t        |	      D cg c]  }|t        |      dz   d	  }
}| |||
      z  }: d
j                  |      }|rt        |       y	|S c c}w c c}w c c}w )z@Builds a concise listing of available options, grouped by prefixr   )groupby)wrapc                    | rd| z   dz   nd} dj                  |      |dd      }|r|d   r| r|d   d	z   |d<   |S )
Nz- z.[r   z, z  F)initial_indentsubsequent_indentbreak_long_wordsr   r   )r]   )namekspfxlswidthr   s       r    ppzpp_options_list.<locals>.pp  sY    $(dTkD bIIbM""
 "R&TVc\BrF	r   rs   r   c                *    | d | j                  d       S Nrs   )rfind)xs    r    <lambda>z!pp_options_list.<locals>.<lambda>  s    .AGGCL0A r   r5   Nr\   )r   r   r   Iterable[str]r   r/   )
	itertoolsr   textwrapr   r   findr}   r7   r]   r_   )r=   r   _printr   r   r   r   singlesrC   gr   ra   r   s    `          @r    r   r     s    ! B ,:Q!&&+/q:G:
bWo0!qvvc{a/A0D0t&AB 1'+Aw/!aA
o//
bBi 			"Aa ; 1 0s   C&C&C+1C+C0c              #      K   d fd}t         }t        }t        } |t              a |t              a |t               a 	 d |a|a|a y# |a|a|a w xY ww)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.
    c                4     d fd}t        t        |      S )Nc                *     d|  } |g|i |S r   r   )r   rR   r   pkeyr   rn   s       r    innerz*config_prefix.<locals>.wrap.<locals>.inner+  s(    XQse$D,t,t,,r   r   )r   r   )r   r   rn   s   ` r    r   zconfig_prefix.<locals>.wrap*  s    	- Au~r   N)r   r   r   r   )r   
get_option
set_option)rn   r   _register_optionrD   rY   s   `    r    config_prefixr     se     < 'KKj!Jj!J?+O+ 
 
* !
 
*s   =AA AAAc                     d f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`

    c                @    t        |       k7  rt        d d      y )NzValue must have type 'r   )typerI   )r   _types    r    r   zis_type_factory.<locals>.innerQ  s)    7e5eWA>?? r   r   r   )r   r   s   ` r    is_type_factoryr   C  s    @ Lr   c                     t         t        t        f      r+t                dj                  t	        t
                     nd  dd f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   c                :    t        |       st        d       y )NzValue must be an instance of )ru   rI   )r   r   	type_reprs    r    r   z"is_instance_factory.<locals>.innerk  s%    !U#<YKHII $r   r   )ru   tupler}   r]   mapr   )r   r   r   s   ` @r    is_instance_factoryr   X  sJ     %%'eHHSe_-	waL	J Lr   c                      D cg c]  }t        |      s| c} D cg c]  }t        |      r| c} d fd}|S c c}w c c}w )Nc                      vr^t         fdD              sID cg c]  }t        |       }}dj                  |      }d| }t              r|dz  }t	        |      y y c c}w )Nc              3  .   K   | ]  } |        y wr@   r   ).0cr   s     r    	<genexpr>z3is_one_of_factory.<locals>.inner.<locals>.<genexpr>x  s     /qt/s   r   zValue must be one of z or a callable)anyr   r]   r7   rI   )r   lvaluvals	pp_valuesr   	callableslegal_valuess   `    r    r   z is_one_of_factory.<locals>.innerv  sr    L /Y///;<tT<<HHUO	-i[9y>++C o% 0 !<s   A&r   )callable)r  r   r   r  s   `  @r    is_one_of_factoryr  r  sC    (8qHQK8I+?!8A;A?L& L 9?s   AAA	A	c                N    | yt        | t              r| dk\  ryd}t        |      )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)ru   intrI   )valuer   s     r    is_nonnegative_intr
    s/     }	E3	A:
7C
S/r   c                0    t        |       st        d      y)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  rI   )objs    r    is_callabler    s     C=344r   )r;   r   r<   boolr   r   )F)r;   r   r<   r  r   r   r   )r   T)r;   r   r`   r  r   r   )r;   r   r<   r  r   r   )r;   r   )r   NN)r   r   r$   r#   r%   r   r'   r&   r)   r(   r   r   )NNN)
r   r   r   r   r   r   r   r   r   r   )r;   r   r   r/   )r   r   r   ztuple[dict[str, Any], str])r   r   r   r  r   )r   r   r   r   )rC   r   r   r   )P   F)r=   r   r   r  r   r  )rn   r   r   zGenerator[None, None, None])r   z	type[Any]r   Callable[[Any], None])r   r  )r	  r#   r   r   )r   r  )Nr3   
__future__r   
contextlibr   r   r   typingr   r   r   r	   r
   r   rP   pandas._typingr   r   pandas.util._exceptionsr   collections.abcr   r   r   r"   r*   r   r+   r-   r0   AttributeErrorry   r2   r>   rD   rY   rb   rf   ri   rk   r   _get_option_tmpl_set_option_tmpl_describe_option_tmpl_reset_option_tmplr   r   reset_optiondescribe_optionoptionsr   r   r   r6   rA   r   r   rO   r:   r8   r^   r   r   r   r   r  r
  r  is_intr  is_boolfloatis_floatr   is_strbytesis_textr  r   r   r    <module>r&     sp  0d # 
   5z $z $ 46 0 5 46 0 5 "$ # #G	 #.( $$@
E".
$# $#`R R % N- ^& P" L  -=>
-=>
!-1CD$%57LM
n
%3% 3H 04&*H	HH 
H .	H
 	$H 
HZ "	,M	,M	,M ,M 	,M
 
,Mf8$& (	<0L /+ /+l*4"6 
	
$
5!		
sEl
+r   