Your IP : 3.145.156.17
U
e5d� �
@ s� d Z ddddddddd d
ddd
g
ZddlmZ ddlmZ ddlmZ ddlm Z dZ
dZe
efdd�Ze
efdd�Z
efdd�Zefdd�Zefdd�Zefdd�Zefdd �Zefd!d"�Zefd#d$�Zefd%d&�Zefd'd(�Zefd)d*�Zefd+d,�Zefd-d.�Zd/efd0efd1efgd1efd2efd/efgd2efd1efd0efgd0efd/efd2efgd3�Zd4d� Zd5d� Zzdd6lmZ W n ek
�r� Y nX e � Z!e!fd7d�Z"zdd8lm"Z" W n ek
�r� Y nX G d9d � d �Z#zdd:lm#Z# W n ek
�r Y nX G d;d
� d
e �Z$d<d=� Z%ed>d?d@dAdBg�Z&G dCdD� dDe'�Z(e � fe)e*he+e,e-fdEdF�Z.dYdId�Z/dJdK� Z0zddLlm0Z0 W n ek
�r� Y nX dMdN� Z1dZdPdQ�Z2dRdS� Z3dTdU� Z4dVd� Z5G dWd� d�Z6e � Z7G dXd
� d
�Z8dOS )[zEfunctools.py - Tools for working with functions and callable objects
�update_wrapper�wraps�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATES�total_ordering�
cmp_to_key� lru_cache�reduce�partial�
partialmethod�singledispatch�singledispatchmethod�cached_property� )�get_cache_token)�
namedtuple)�recursive_repr)�RLock)�
__module__�__name__�__qualname__�__doc__�__annotations__)�__dict__c C sf |D ]4}zt ||�}W n tk
r* Y qX 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$ �!/usr/lib64/python3.8/functools.pyr "