Ë
    u™ãjÝ=  ã                  ób  — d Z ddlmZ ddlZddlmZmZ ddlZddlm	Z	 ddl
mZ ddlmZ erddlmZ dd	lmZ dd
lmZ ddlmZ  G d„ d«      Z G d„ d«      Zdd„ df	 	 	 	 	 	 	 	 	 dd„Z G d„ d«      Zdd„Z	 	 	 	 	 	 dd„Z ed«      dd„«       Z ed«      dd„«       Z ed«      dd„«       Zy) z†

accessor.py contains base classes for implementing accessor properties
that can be mixed into or pinned onto other pandas classes.

é    )ÚannotationsN)ÚTYPE_CHECKINGÚfinal)ÚPandas4Warning)Ú
set_module)Úfind_stack_level)ÚCallable)ÚTypeT©ÚIndex)ÚNDFramec                  ól   ‡ — e Zd ZU  e«       Zded<    e«       Zded<   edd„«       Z	dd„Z
d	ˆ fd„Zˆ xZS )
ÚDirNamesMixinúset[str]Ú
_accessorszfrozenset[str]Ú_hidden_attrsc                ó4   — | j                   | j                  z  S )z:
        Delete unwanted __dir__ for this object.
        )r   r   )Úselfs    ú_/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/accessor.pyÚ_dir_deletionszDirNamesMixin._dir_deletions$   s   € ð
 �‰ ×!3Ñ!3Ñ3Ð3ó    c                óZ   — | j                   D �ch c]  }t        | |«      sŒ|’Œ c}S c c}w )z9
        Add additional __dir__ for this object.
        )r   Úhasattr)r   Úaccessors     r   Ú_dir_additionszDirNamesMixin._dir_additions+   s%   € ð *.¯©ÖT˜X¼GÀDÈ(Õ<S’ÒTÐTùÒTs   �(¡(c                ó�   •— t        t        ‰| �	  «       «      }|| j                  «       z
  | j	                  «       z  }t        |«      S )z€
        Provide method name lookup and completion.

        Notes
        -----
        Only provide 'public' methods.
        )ÚsetÚsuperÚ__dir__r   r   Úsorted)r   ÚrvÚ	__class__s     €r   r   zDirNamesMixin.__dir__1   sA   ø€ ô ”‘‘Ó"Ó#ˆØ�4×&Ñ&Ó(Ñ(¨D×,?Ñ,?Ó,AÑAˆÜ�b‹zÐr   )Úreturnr   )r#   ú	list[str])Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__Ú	frozensetr   r   r   r   r   Ú__classcell__)r"   s   @r   r   r       s=   ø… Ù›5€J�Ó Ù$-£K€M�>Ó/à
ò4ó ð4óU÷
ñ 
r   r   c                  óZ   — e Zd ZdZd
d„Zdd„Zd
d„Zedd„ df	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy	)ÚPandasDelegatez@
    Abstract base class for delegating methods/properties.
    c                ó   — t        d|› �«      ‚)NzYou cannot access the property ©Ú	TypeError©r   ÚnameÚargsÚkwargss       r   Ú_delegate_property_getz%PandasDelegate._delegate_property_getC   s   € ÜÐ9¸$¸Ð@ÓAÐAr   c                ó    — t        d|› d�«      ‚)NzThe property z cannot be setr.   )r   r1   Úvaluer2   r3   s        r   Ú_delegate_property_setz%PandasDelegate._delegate_property_setF   s   € Ü˜-¨ v¨^Ð<Ó=Ð=r   c                ó   — t        d|› �«      ‚)NzYou cannot call method r.   r0   s       r   Ú_delegate_methodzPandasDelegate._delegate_methodI   s   € ÜÐ1°$°Ð8Ó9Ð9r   Fc                ó   — | S ©N© ©Úxs    r   ú<lambda>zPandasDelegate.<lambda>S   s   € ¸1€ r   Tc                óÂ   ‡‡— dˆˆfd„}dˆˆfd„}|D ]J  }	|st        ‰ ‰|	«      d«      €Œ|dk(  r	 ||	«      }
n ||	«      }
|st        | |	«      rŒ>t        | |	|
«       ŒL y)aì  
        Add accessors to cls from the delegate class.

        Parameters
        ----------
        cls
            Class to add the methods/properties to.
        delegate
            Class to get methods/properties and docstrings.
        accessors : list of str
            List of accessors to add.
        typ : {'property', 'method'}
        overwrite : bool, default False
            Overwrite the method/property in the target class if it exists.
        accessor_mapping: Callable, default lambda x: x
            Callable to map the delegate's function to the cls' function.
        raise_on_missing: bool, default True
            Raise if an accessor does not exist on delegate.
            False skips the missing accessor.
        c           
     ó†   •‡ — ˆ fd„}ˆ fd„}‰ |_         ‰ |_         t        ||t        ‰ ‰‰ «      «      j                  ¬«      S )Nc                ó&   •— | j                  ‰«      S r;   )r4   )r   r1   s    €r   Ú_getterz[PandasDelegate._add_delegate_accessors.<locals>._create_delegator_property.<locals>._getterl   s   ø€ Ø×2Ñ2°4Ó8Ð8r   c                ó(   •— | j                  ‰|«      S r;   )r7   )r   Ú
new_valuesr1   s     €r   Ú_setterz[PandasDelegate._add_delegate_accessors.<locals>._create_delegator_property.<locals>._settero   s   ø€ Ø×2Ñ2°4¸ÓDÐDr   )ÚfgetÚfsetÚdoc)r%   ÚpropertyÚgetattrÚ__doc__)r1   rC   rF   Úaccessor_mappingÚdelegates   `  €€r   Ú_create_delegator_propertyzJPandasDelegate._add_delegate_accessors.<locals>._create_delegator_propertyk   sI   ù€ ô9ôEð  $ˆGÔØ#ˆGÔäØØÜ˜HÑ&6°tÓ&<Ó=×EÑEôð r   c                óh   •‡ — t        ‰ ‰‰ «      «      }t        j                  |«      ˆ fd„«       }|S )Nc                ó0   •—  | j                   ‰g|¢­i |¤ŽS r;   )r9   )r   r2   r3   r1   s      €r   ÚfzSPandasDelegate._add_delegate_accessors.<locals>._create_delegator_method.<locals>.f~   s    ø€ à,�t×,Ñ,¨TÐC°DÒC¸FÑCÐCr   )rK   Ú	functoolsÚwraps)r1   ÚmethodrR   rM   rN   s   `  €€r   Ú_create_delegator_methodzHPandasDelegate._add_delegate_accessors.<locals>._create_delegator_method{   s9   ù€ Ü˜XÑ'7¸Ó'=Ó>ˆFä�_‰_˜VÓ$óDó %ðDð ˆHr   NrJ   ©r1   Ústr)rK   r   Úsetattr)ÚclsrN   Ú	accessorsÚtypÚ	overwriterM   Úraise_on_missingrO   rV   r1   rR   s    `   `     r   Ú_add_delegate_accessorsz&PandasDelegate._add_delegate_accessorsL   so   ù€ ö>	ö 	ð ò 	&ˆDá$Ü˜HÑ&6°tÓ&<¸dÓCÐKàà�jÒ Ù.¨tÓ4‘á,¨TÓ2�ñ ¤¨¨TÕ 2Ü˜˜T 1Õ%ñ	&r   NrW   ©r1   rX   r#   ÚNone)r[   r$   r\   rX   r]   ÚboolrM   úCallable[[str], str]r^   rb   r#   ra   )	r%   r&   r'   rL   r4   r7   r9   Úclassmethodr_   r<   r   r   r,   r,   >   sz   „ ñóBó>ó:ð ð  Ù1<Ø!%ðE&ð ðE&ð ð	E&ð
 ðE&ð /ðE&ð ðE&ð 
òE&ó ñE&r   r,   Fc                ó   — | S r;   r<   r=   s    r   r?   r?   š   s   € °q€ r   Tc                ó&   ‡ ‡‡‡‡‡— ˆˆˆ ˆˆˆfd„}|S )aÖ  
    Add delegated names to a class using a class decorator.  This provides
    an alternative usage to directly calling `_add_delegate_accessors`
    below a class definition.

    Parameters
    ----------
    delegate : object
        The class to get methods/properties & docstrings.
    accessors : Sequence[str]
        List of accessor to add.
    typ : {'property', 'method'}
    overwrite : bool, default False
       Overwrite the method/property in the target class if it exists.
    accessor_mapping: Callable, default lambda x: x
        Callable to map the delegate's function to the cls' function.
    raise_on_missing: bool, default True
        Raise if an accessor does not exist on delegate.
        False skips the missing accessor.

    Returns
    -------
    callable
        A class decorator.

    Examples
    --------
    @delegate_names(Categorical, ["categories", "ordered"], "property")
    class CategoricalAccessor(PandasDelegate):
        [...]
    c                ó6   •— | j                  ‰‰‰‰‰‰¬«       | S )N)r]   rM   r^   )r_   )rZ   rM   r[   rN   r]   r^   r\   s    €€€€€€r   Úadd_delegate_accessorsz.delegate_names.<locals>.add_delegate_accessors½   s/   ø€ Ø×#Ñ#ØØØØØ-Ø-ð 	$ô 	
ð ˆ
r   r<   )rN   r[   r\   r]   rM   r^   rh   s   `````` r   Údelegate_namesri   •   s   ý€ ÷P	ñ 	ð "Ð!r   c                  ó   — e Zd ZdZdd„Zd„ Zy)ÚAccessora™  
    Custom property-like object.

    A descriptor for accessors.

    Parameters
    ----------
    name : str
        Namespace that will be accessed under, e.g. ``df.foo``.
    accessor : cls
        Class with the extension methods.

    Notes
    -----
    For accessor, The class's __init__ method assumes that one of
    ``Series``, ``DataFrame`` or ``Index`` as the
    single argument ``data``.
    c                ó    — || _         || _        y r;   )Ú_nameÚ	_accessor)r   r1   r   s      r   Ú__init__zAccessor.__init__ß   s   € ØˆŒ
Ø!ˆ�r   c                ó@   — |€| j                   S | j                  |«      S r;   )rn   )r   ÚobjrZ   s      r   Ú__get__zAccessor.__get__ã   s    € Øˆ;à—>‘>Ð!Ø�~‰~˜cÓ"Ð"r   Nr`   )r%   r&   r'   rL   ro   rr   r<   r   r   rk   rk   Ë   s   „ ñó&"ó#r   rk   c                ó„   — | dk(  r-t        j                  | › d�t        t        «       ¬«       t        S t        d| › d�«      ‚)NÚCachedAccessorzb is deprecated and will be removed in a future version. Use pandas.core.accessor.Accessor instead.©Ú
stacklevelz0module 'pandas.core.accessor' has no attribute 'ú')ÚwarningsÚwarnr   r   rk   ÚAttributeError)r1   s    r   Ú__getattr__r{   ê   sL   € ØÐÒä�‰Øˆfð 9ð 9äÜ'Ó)õ		
ô ˆä
ÐKÈDÈ6ÐQRÐSÓ
TÐTr   c                ó   ‡ ‡— dˆˆ fd„}|S )a™  
    Register a custom accessor on objects.

    Parameters
    ----------
    name : str
        Name under which the accessor should be registered. A warning is issued
        if this name conflicts with a preexisting attribute.

    Returns
    -------
    callable
        A class decorator.

    See Also
    --------
    register_dataframe_accessor : Register a custom accessor on DataFrame objects.
    register_series_accessor : Register a custom accessor on Series objects.
    register_index_accessor : Register a custom accessor on Index objects.

    Notes
    -----
    This function allows you to register a custom-defined accessor class
    for pandas objects (DataFrame, Series, or Index).
    The requirements for the accessor class are as follows:

    * Must contain an init method that:

      * accepts a single object

      * raises an AttributeError if the object does not have correctly
        matching inputs for the accessor

    * Must contain a method for each access pattern.

      * The methods should be able to take any argument signature.

      * Accessible using the @property decorator if no additional arguments are
        needed.

    c           	     óà   •— t        ‰‰«      r.t        j                  d| ›d‰›d‰›d�t        t	        «       ¬«       t        ‰‰t        ‰| «      «       ‰j                  j                  ‰«       | S )Nzregistration of accessor z under name z
 for type z: is overriding a preexisting attribute with the same name.ru   )	r   rx   ry   ÚUserWarningr   rY   rk   r   Úadd)r   rZ   r1   s    €€r   Ú	decoratorz%_register_accessor.<locals>.decorator%  sn   ø€ Ü�3˜ÔÜ�M‰MØ+¨H¨<°|Ø�(˜* S Gð ,0ð1ô Ü+Ó-õô 	��Tœ8 D¨(Ó3Ô4Ø�‰×Ñ˜4Ô Øˆr   )r   r
   r#   r
   r<   )r1   rZ   r€   s   `` r   Ú_register_accessorr�   ø   s   ù€ öZð Ðr   zpandas.api.extensionsc                ó&   — ddl m} t        | |«      S )a’  
    Register a custom accessor on DataFrame objects.

    Use as a decorator to add a custom namespace accessor to DataFrame,
    allowing domain-specific methods to be called via ``df.<name>``.

    Parameters
    ----------
    name : str
        Name under which the accessor should be registered. A warning is issued
        if this name conflicts with a preexisting attribute.

    Returns
    -------
    callable
        A class decorator.

    See Also
    --------
    register_dataframe_accessor : Register a custom accessor on DataFrame objects.
    register_series_accessor : Register a custom accessor on Series objects.
    register_index_accessor : Register a custom accessor on Index objects.

    Notes
    -----
    This function allows you to register a custom-defined accessor class for DataFrame.
    The requirements for the accessor class are as follows:

    * Must contain an init method that:

      * accepts a single DataFrame object

      * raises an AttributeError if the DataFrame object does not have correctly
        matching inputs for the accessor

    * Must contain a method for each access pattern.

      * The methods should be able to take any argument signature.

      * Accessible using the @property decorator if no additional arguments are
        needed.

    Examples
    --------
    An accessor that only accepts integers could
    have a class defined like this:

    >>> @pd.api.extensions.register_dataframe_accessor("int_accessor")
    ... class IntAccessor:
    ...     def __init__(self, pandas_obj):
    ...         if not all(
    ...             pandas_obj[col].dtype == "int64" for col in pandas_obj.columns
    ...         ):
    ...             raise AttributeError("All columns must contain integer values only")
    ...         self._obj = pandas_obj
    ...
    ...     def sum(self):
    ...         return self._obj.sum()
    >>> df = pd.DataFrame([[1, 2], ["x", "y"]])
    >>> df.int_accessor
    Traceback (most recent call last):
    ...
    AttributeError: All columns must contain integer values only.
    >>> df = pd.DataFrame([[1, 2], [3, 4]])
    >>> df.int_accessor.sum()
    0    4
    1    6
    dtype: int64
    r   )Ú	DataFrame)Úpandasrƒ   r�   )r1   rƒ   s     r   Úregister_dataframe_accessorr…   5  s   € õN !ä˜d IÓ.Ð.r   c                ó&   — ddl m} t        | |«      S )aö  
    Register a custom accessor on Series objects.

    Use as a decorator to add a custom namespace accessor to Series,
    allowing domain-specific methods to be called via ``ser.<name>``.

    Parameters
    ----------
    name : str
        Name under which the accessor should be registered. A warning is issued
        if this name conflicts with a preexisting attribute.

    Returns
    -------
    callable
        A class decorator.

    See Also
    --------
    register_dataframe_accessor : Register a custom accessor on DataFrame objects.
    register_series_accessor : Register a custom accessor on Series objects.
    register_index_accessor : Register a custom accessor on Index objects.

    Notes
    -----
    This function allows you to register a custom-defined accessor class for Series.
    The requirements for the accessor class are as follows:

    * Must contain an init method that:

      * accepts a single Series object

      * raises an AttributeError if the Series object does not have correctly
        matching inputs for the accessor

    * Must contain a method for each access pattern.

      * The methods should be able to take any argument signature.

      * Accessible using the @property decorator if no additional arguments are
        needed.

    Examples
    --------
    An accessor that only accepts integers could
    have a class defined like this:

    >>> @pd.api.extensions.register_series_accessor("int_accessor")
    ... class IntAccessor:
    ...     def __init__(self, pandas_obj):
    ...         if not pandas_obj.dtype == "int64":
    ...             raise AttributeError("The series must contain integer data only")
    ...         self._obj = pandas_obj
    ...
    ...     def sum(self):
    ...         return self._obj.sum()
    >>> df = pd.Series([1, 2, "x"])
    >>> df.int_accessor
    Traceback (most recent call last):
    ...
    AttributeError: The series must contain integer data only.
    >>> df = pd.Series([1, 2, 3])
    >>> df.int_accessor.sum()
    6
    r   )ÚSeries)r„   r‡   r�   )r1   r‡   s     r   Úregister_series_accessorrˆ   �  s   € õF ä˜d FÓ+Ð+r   c                ó&   — ddl m} t        | |«      S )aÜ  
    Register a custom accessor on Index objects.

    Use as a decorator to add a custom namespace accessor to Index,
    allowing domain-specific methods to be called via ``idx.<name>``.

    Parameters
    ----------
    name : str
        Name under which the accessor should be registered. A warning is issued
        if this name conflicts with a preexisting attribute.

    Returns
    -------
    callable
        A class decorator.

    See Also
    --------
    register_dataframe_accessor : Register a custom accessor on DataFrame objects.
    register_series_accessor : Register a custom accessor on Series objects.
    register_index_accessor : Register a custom accessor on Index objects.

    Notes
    -----
    This function allows you to register a custom-defined accessor class for Index.
    The requirements for the accessor class are as follows:

    * Must contain an init method that:

      * accepts a single Index object

      * raises an AttributeError if the Index object does not have correctly
        matching inputs for the accessor

    * Must contain a method for each access pattern.

      * The methods should be able to take any argument signature.

      * Accessible using the @property decorator if no additional arguments are
        needed.

    Examples
    --------
    An accessor that only accepts integers could
    have a class defined like this:

    >>> @pd.api.extensions.register_index_accessor("int_accessor")
    ... class IntAccessor:
    ...     def __init__(self, pandas_obj):
    ...         if not all(isinstance(x, int) for x in pandas_obj):
    ...             raise AttributeError("The index must only be an integer value")
    ...         self._obj = pandas_obj
    ...
    ...     def even(self):
    ...         return [x for x in self._obj if x % 2 == 0]
    >>> df = pd.DataFrame.from_dict(
    ...     {"row1": {"1": 1, "2": "a"}, "row2": {"1": 2, "2": "b"}}, orient="index"
    ... )
    >>> df.index.int_accessor
    Traceback (most recent call last):
    ...
    AttributeError: The index must only be an integer value.
    >>> df = pd.DataFrame(
    ...     {"col1": [1, 2, 3, 4], "col2": ["a", "b", "c", "d"]}, index=[1, 2, 5, 8]
    ... )
    >>> df.index.int_accessor.even()
    [2, 8]
    r   r   )r„   r   r�   )r1   r   s     r   Úregister_index_accessorrŠ   É  s   € õN ä˜d EÓ*Ð*r   )
r[   r$   r\   rX   r]   rb   rM   rc   r^   rb   rW   )r1   rX   rZ   ztype[NDFrame | Index]r#   úCallable[[TypeT], TypeT])r1   rX   r#   r‹   )rL   Ú
__future__r   rS   Útypingr   r   rx   Úpandas.errorsr   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úcollections.abcr	   Úpandas._typingr
   r„   r   Úpandas.core.genericr   r   r,   ri   rk   r{   r�   r…   rˆ   rŠ   r<   r   r   ú<module>r”      s  ðñõ #ã ÷ó å (õõ 5áÝ(å$åÝ+÷ñ ÷<T&ñ T&ðv Ù-8Ø!ð3"àð3"ð 
ð3"ð ð	3"ð
 +ð3"ð ó3"÷l#ñ #ó>Uð:Ø
ð:Ø)ð:àó:ñz Ð#Ó$òH/ó %ðH/ñV Ð#Ó$òD,ó %ðD,ñN Ð#Ó$òH+ó %ñH+r   