File: //usr/lib64/python3.8/__pycache__/functools.cpython-38.opt-1.pyc
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   "