File: //lib/python3.12/__pycache__/functools.cpython-312.pyc
�
    )!�h�  �                   �  � d Z g d�ZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dZd	Z
ee
fd
�Zee
fd�Zd� Zd
� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zdefdefdefgdefdefdefgdefdefdefgdefdefdefgd�Zd� Zd� Z	 ddlmZ  e!�       Z"e"fd �Z#	 dd!lm#Z#  G d"� d#�      Z$	 dd$lm$Z$  G d%� d&e!�      Z%d'� Z& ed(g d)��      Z' G d*� d+e(�      Z) e!�       fe*e+he,e-e.fd,�Z/d;d-�Z0d.� Z1	 dd/lm1Z1 d0� Z2d1� Z3d<d3�Z4d4� Z5d5� Z6d6� Z7 G d7� d8�      Z8 e!�       Z9 G d9� d:�      Z:y2# e $ r Y ��w xY w# e $ r Y ��w xY w# e $ r Y ��w xY w# e $ r Y �Ww xY w)=zEfunctools.py - Tools for working with functions and callable objects
)�update_wrapper�wraps�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATES�total_ordering�cache�
cmp_to_key�	lru_cache�reduce�partial�
partialmethod�singledispatch�singledispatchmethod�cached_property�    )�get_cache_token)�
namedtuple)�recursive_repr)�RLock)�GenericAlias)�
__module__�__name__�__qualname__�__doc__�__annotations__�__type_params__)�__dict__c                 ��   � |D ]  }	 t        ||�      }t        | ||�       � |D ](  }t        | |�      j                  t        ||i �      �       �* || _        | S # t        $ r Y �`w xY w)a  Update a wrapper function to look like the wrapped function
       wrapper is the function to be updated
       wrapped is the original function
       assigned is a tuple naming the attributes assigned directly
       from the wrapped function to the wrapper function (defaults to
       functools.WRAPPER_ASSIGNMENTS)
       updated is a tuple naming the attributes of the wrapper that
       are updated with the corresponding attribute from the wrapped
       function (defaults to functools.WRAPPER_UPDATES)
    )�getattr�setattr�AttributeError�update�__wrapped__)�wrapper�wrapped�assigned�updated�attr�values         � /usr/lib/python3.12/functools.pyr   r   #   s�   � � � *��	*��G�T�*�E� 
�G�T�5�)�
*� � B������%�%�g�g�t�R�&@�A�B� "�G���N�� � 	��	�s   �A�	A$�#A$c                 �(   � t        t        | ||��      S )a�  Decorator factory to apply update_wrapper() to a wrapper function
       Returns a decorator that invokes update_wrapper() with the decorated
       function as the wrapper argument and the arguments to wraps() as the
       remaining arguments. Default arguments are as for update_wrapper().
       This is a convenience function to simplify applying partial() to
       update_wrapper().
    �r$   r%   r&