File: //opt/saltstack/salt/lib/python3.10/site-packages/jaraco/__pycache__/functools.cpython-310.pyc
o
�N�gB+ � @ sf d dl mZmZmZmZ d dlZd dlZd dlZd dlZd dl Z d dl
mZ eZ
zd dlmZ W n2 eyb zd dlmZ W n ey_ zd dlmZ W n ey\ e�d� Y nw Y nw Y nw d dlZdd� Zdd � Zd
d� Zd)dd
�Zdd� Zdd� Zdd� Zdd� ZG dd� d�Zdd� Zdd� d dfdd�Zdd � Z d!d"� Z!d#d$� Z"d%d&� Z#d'd(� Z$dS )*� )�absolute_import�unicode_literals�print_function�divisionN)�count)� lru_cachezNo lru_cache availablec G s dd� }t �|| �S )a
Compose any number of unary functions into a single unary function.
>>> import textwrap
>>> from six import text_type
>>> stripped = text_type.strip(textwrap.dedent(compose.__doc__))
>>> compose(text_type.strip, textwrap.dedent)(compose.__doc__) == stripped
True
Compose also allows the innermost function to take arbitrary arguments.
>>> round_three = lambda x: round(x, ndigits=3)
>>> f = compose(round_three, int.__truediv__)
>>> [f(3*x, x+1) for x in range(1,10)]
[1.5, 2.0, 2.25, 2.4, 2.5, 2.571, 2.625, 2.667, 2.7]
c s � �fdd�S )Nc s � �| i |���S �N� ��args�kwargs��f1�f2r �D/opt/saltstack/salt/lib/python3.10/site-packages/jaraco/functools.py�<lambda>1 s z.compose.<locals>.compose_two.<locals>.<lambda>r r
r r
r �compose_two0 s zcompose.<locals>.compose_two)� functools�reduce)�funcsr r r r �compose s r c s � ��fdd�}|S )z�
Return a function that will call a named method on the
target object with optional positional and keyword
arguments.
>>> lower = method_caller('lower')
>>> lower('MyString')
'mystring'
c s t | ��}|� i ���S r )�getattr)�target�func�r r �method_namer r �call_method? s
z"method_caller.<locals>.call_methodr )r r r r r r r �
method_caller5 s
r c s* t �� �� �fdd����fdd��_�S )a
Decorate func so it's only ever called the first time.
This decorator can ensure that an expensive or non-idempotent function
will not be expensive on subsequent calls and is idempotent.
>>> add_three = once(lambda a: a+3)
>>> add_three(3)
6
>>> add_three(9)
6
>>> add_three('12')
6
To reset the stored value, simply clear the property ``saved_result``.
>>> del add_three.saved_result
>>> add_three(9)
12
>>> add_three(8)
12
Or invoke 'reset()' on it.
>>> add_three.reset()
>>> add_three(-3)
0
>>> add_three(0)
0
c s t �d�s
� | i |���_�jS �N�saved_result)�hasattrr r
�r �wrapperr r r"