o
    NZh                     @   s   d dl Z de jd< dd ZdddZed d	d
dd Zeg dZdddZed dd ddd Ze Z	dd Z
e
dd Zdd ZedkrLe  dS dS )    NTrecursec                    s,    fdd}fdd}fdd}||fS )Nc                          S N r   xr   M/var/www/html/lang_env/lib/python3.10/site-packages/dill/tests/test_mixins.pyzzz      zwtf.<locals>.zzzc                      r   r   r   r   )yr   r   yyy   r
   zwtf.<locals>.yyyc                      r   r   r   r   )zr   r   xxx   r
   zwtf.<locals>.xxxr   )r   r   r   r	   r   r   r   )r   r   r   r   wtf   s   r      c                    s*   dgfdd fdd}|S )NFc                      s    d   d< d S )Nr   r   r   )invertedr   r   invert   s   zquad.<locals>.invertc                    s*    fdd} |_ |_|_|S )Nc                     s4   | i |}d r| } |d  |   S )Nr      r   )argskwdsr   )abcfr   r   r   func   s   zquad.<locals>.dec.<locals>.func)__wrapped__r   r   r   r   r   r   r   r   r   r   r   dec   s
   zquad.<locals>.decr   r   r   r   r   r   r   r   quad   s   	r!   r   )r   r   c                  G   s   t | S r   )sum)r   r   r   r   
double_add'      r#   )r   r      c                    s    fdd}|S )Nc                    s    fdd}|S )Nc                     s&   | i |} |d  |   S Nr   r   r   r   fx)r   r   r   r   r   r   r   2   s   z'quad_factory.<locals>.dec.<locals>.funcr   r   r   r   r   r   r   r   1   s   zquad_factory.<locals>.decr   r    r   r)   r   quad_factory0   s   r*      r)   c                 C   s   | d S )Nr   r   r   r   r   r   quadish9   r$   r,   c                    s    fdd}|S )Nc                     s    | i |}d| S r&   r   r'   r   r   r   innerB   s   zdoubler.<locals>.innerr   )r   r-   r   r   r   doublerA   s   r.   c                 C   s   d|  S r&   r   r   r   r   r   	quadrupleH   r$   r/   c            	      C   s8  t ddddt ksJ t   t ddddt ksJ tt } | ddddt ks-J | dddtks8J t jd sAt   tj}tj}|	|
td dksUJ |	|
td dkscJ |jtd	d
dt kspJ |jtd	d
dt ks}J |jtd	d
dt ksJ |jt d	d
dt ksJ |jtdd
dksJ |jtdd
}|dd\}}}}}|dksJ t|||gtg dksJ |jtdd
}|dd\}}}}|dksJ t|||gtg dksJ |jt dd
}|dd\}}}}}}|dks	J t||||gtg dksJ d S )Nr   r   r%   r   r   z8@quad_factory(a=0,b=4,c=0)
def quadish(x):
  return x+1
z(@doubler
def quadruple(x):
  return 2*x
F)sourcezfrom %s import quadish
zfrom %s import quadruple
zfrom %s import quadratic
zfrom %s import double_add
Tzdef doubler(f):
  def inner(*args, **kwds):
    fx = f(*args, **kwds)
    return 2*fx
  return inner

@doubler
def quadruple(x):
  return 2*x

r+   zdef quad_factory(a=1,b=1,c=0):
  def dec(f):
    def func(*args,**kwds):
      fx = f(*args,**kwds)
      return a*fx**2 + b*fx + c
    return func
  return dec

@quad_factory(a=0,b=4,c=0)
def quadish(x):
  return x+1
)a = 0c = 0zb = 4zl
def dec(f):
  def func(*args,**kwds):
    fx = f(*args,**kwds)
    return a*fx**2 + b*fx + c
  return func
)za = 1r4   zb = 1   a  def quad(a=1, b=1, c=0):
  inverted = [False]
  def invert():
    inverted[0] = not inverted[0]
  def dec(f):
    def func(*args, **kwds):
      x = f(*args, **kwds)
      if inverted[0]: x = -x
      return a*x**2 + b*x + c
    func.__wrapped__ = f
    func.invert = invert
    func.inverted = inverted
    return func
  return dec

@quad(a=0,b=2)
def double_add(*args):
  return sum(args)
)r3   r4   zb = 2zinverted = [True])r#   r(   r   dillcopyr   r   r1   detect	getsourceZfreevarsr,   r/   Z
importable__name__	quadraticsplitset)	_dZdsddresultr   r   r   _dr   r   r   test_mixinsM   s:   

&rC   __main__)r   r   r   )r6   settingsr   r!   r#   r"   r(   r*   r,   r;   r.   r/   rC   r:   r   r   r   r   <module>   s$   





	

+
