File: //lib64/python3.9/__pycache__/functools.cpython-39.opt-1.pyc
a
    �DOg�  �                   @   s�  d Z g d�ZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dZd	Z
ee
fd
d�Zee
fdd
�Zefdd�Zefdd�Zefdd�Zefdd�Zefdd�Zefdd�Zefdd�Zefdd�Zefdd�Zefd d!�Zefd"d#�Zefd$d%�Zd&efd'efd(efgd(efd)efd&efgd)efd(efd'efgd'efd&efd)efgd*�Zd+d,� Zd-d.� Zzdd/l mZ W n e!�y�   Y n0 e"� Z#e#fd0d1�Z$zdd2l m$Z$ W n e!�y�   Y n0 G d3d4� d4�Z%zdd5l m%Z% W n e!�y�   Y n0 G d6d7� d7e"�Z&d8d9� Z'ed:g d;��Z(G d<d=� d=e)�Z*e"� fe+e,he-e.e/fd>d?�Z0dXdBdC�Z1dDdE� Z2zddFl m2Z2 W n e!�y|   Y n0 dGdH� Z3dIdJ� Z4dYdLdM�Z5dNdO� Z6dPdQ� Z7dRdS� Z8G dTdU� dU�Z9e"� Z:G dVdW� dW�Z;dKS )ZzEfunctools.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__)�__dict__c              	   C   sd   |D ]2}zt ||�}W n ty(   Y q0 t| ||� q|D ]}t | |��t ||i �� q<|| _| S )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�AttributeError�setattr�update�__wrapped__)�wrapper�wrapped�assigned�updated�attr�value� r&