
    l0jFC                     j   d Z ddlmZ ddlZddlZddlZddlZddlZddlZdZ	ej
        dk    r
ddlmZ d Zn ej        dd	          Zd
 Zd Z	 ej        Zn# e$ r d ZY nw xY w	 ddlmZ n# e$ r d ZY nw xY w ej        d          Z G d de          Zd dZd!dZ	 ddlmZ n# e$ r	 ddlmZ Y nw xY w G d de          Z eej                  Z eej                   Z!e!dk    rej"        sd Zee_        ne!dk    rej"        rne!dk    r
d Zee_         ee          Z#d Z$d Z%d Z&dS )"zT
Decorator module, see http://pypi.python.org/pypi/decorator
for the documentation.
    )print_functionNz4.4.2)   )getfullargspecc                     | j         S N)__init__clss    L/home/wildlama/miniconda3/envs/lam/lib/python3.11/site-packages/decorator.pyget_initr   0   s
    |    FullArgSpeczAargs varargs varkw defaults kwonlyargs kwonlydefaults annotationsc                 f    t                               t          j        |           g di fz             S )z?A quick and dirty replacement for getfullargspec for Python 2.XN)r   _makeinspect
getargspecfs    r   r   r   7   s,      !3A!6!6"dB!GHHHr   c                     | j         j        S r   )r   __func__r	   s    r   r   r   ;   s    |$$r   c                     dS NF r   s    r   iscoroutinefunctionr   B       ur   )isgeneratorfunctionc                     dS r   r   )callers    r   r   r   H   r   r   z\s*def\s*([_\w][_\w\d]*)\s*\(c                   ~    e Zd ZdZ ej                    ZdxZxZxZ	xZ
xZZ	 	 d
dZd ZddZe	 	 dd	            ZdS )FunctionMakerz
    An object with the ability to create functions with a given signature.
    It has attributes name, doc, module, signature, defaults, dict and
    methods update and make.
    r   Nc           	         || _         |r|j        | _        | j        dk    rd| _        |j        | _        |j        | _        t          j        |          rt          |          }t          |di           | _        dD ]!}	t          | |	t          ||	                     "t          | j                  D ]\  }
}t          | d|
z  |           t          | j                  }t          | j                  }| j        r;|                    d| j        z              |                    d| j        z              n| j        r|                    d           | j        D ]4}	|                    d|	z             |                    |	d|	           5| j        r:|                    d	| j        z              |                    d	| j        z              d
                    |          | _        d
                    |          | _         |j                                        | _        |r|| _        ||| _        |r|| _        |r|| _        |r|| _        |r|| _        t5          | d          sJ t5          | d          st7          d|z            d S )N<lambda>_lambda___annotations__)argsvarargsvarkwdefaults
kwonlyargskwonlydefaultszarg%d*z%s=None=z**, name	signaturez%You are decorating a non function: %s)shortsignature__name__r.   __doc__doc
__module__moduler   
isfunctionr   getattrannotationssetattr	enumerater%   listr&   appendr)   r'   joinr/   __dict__copydictr(   hasattr	TypeError)selffuncr.   r/   r(   r3   r5   funcdictargspecaiargallargsallshortargss                 r   r   zFunctionMaker.__init__]   s   ' 	1DIyJ&&&	|DH/DK!$'' 1(..#*41BB#G#G , : :AD!WWa%8%89999'	22 4 4FAsD'A+s3333ty//#DI< (NN3#5666 ''dl(:;;;;_ (NN3''' : :ANN9q=111 ''111aa(89999: ;NN4$*#4555 ''tz(9:::!%7!3!3&*ii&=&=# M..00	 	DI &DN 	%$DM 	DH 	! DK 	! DItV$$$$$t[)) 	LCdJKKK	L 	Lr   c                    | j         |_        t          | dd          |_        t          | di           |_        | j        |_        | j        pd|_        t          | dd          |_	        	 t          j        d          }|j                            dd          }n# t          $ r d}Y nw xY wt          | d|          |_        |j                            |           dS )	z2Update the signature of func with the data in selfr3   Nr@   r8   r   r1   ?r5   )r.   r1   r7   r2   r>   r(   __defaults__r*   __kwdefaults__r$   sys	_getframe	f_globalsgetAttributeErrorr4   update)rC   rD   kwframecallermodules        r   rU   zFunctionMaker.update   s    	tUD11fb11 M"19T&t]DAA	@M!$$E !?..z3??LL  	 	 	LLL	 "$,??R     s   *B B)(B)Fc                    |t          |           z  }|pi }t                              |          }|t          d|z            |                    d          }t          |gd | j                            d          D             z             }|D ]}	|	dv rt          |	d|          |	                    d          s|dz  }d	t          | j                  z  }
	 t          ||
d
          }t          ||           nE# t          $ r8 t          dt           j                   t          |t           j                    w xY w||         }|r||d<    | j        |fi | |S )zBMake a new function from a given template and update the signatureNz not a valid function template
%s   c                 8    g | ]}|                     d           S )z *)strip.0rI   s     r   
<listcomp>z&FunctionMaker.make.<locals>.<listcomp>   s.     > > >#ciioo > > >r   ,)_func__call_z is overridden in

z<decorator-gen-%d>singlezError in generated code:)file
__source__)varsDEFsearchSyntaxErrorgroupsetr0   split	NameErrorendswithnext_compile_countcompileexec	ExceptionprintrP   stderrrU   )rC   	src_templevaldict	addsourceattrssrcmor.   namesnfilenamecoderD   s                r   makezFunctionMaker.make   s   $t**$>rZZ__:ACGHHHxx{{TF > >"177<<> > > > ? ? 	F 	FA(((QQQ DEEE ) ||D!! 	4KC
 ($t/B*C*CC	3(33Dx     	 	 	,3:>>>>#CJ''''	 ~ 	&"%E,D""E"""s   !D   AETc                    t          |t                    r8|                                                    dd          \  }	}
|
dd         }d}nd}	d}|} | ||	||||          }d                    d |                                D                       }|                    d          }|r)t          |          rd|z                       d	d
          }nd|z   } |j	        |||fi |S )z
        Create a function from the strings name, signature and body.
        evaldict is the evaluation dictionary. If addsource is true an
        attribute __source__ is added to the result. The attributes attrs
        are added, if any.
        (rZ   Nrc   c              3       K   | ]	}d |z   V  
dS )z    Nr   )r^   lines     r   	<genexpr>z'FunctionMaker.create.<locals>.<genexpr>   s&      FFD&4-FFFFFFr   rb   z#async def %(name)s(%(signature)s):
returnzreturn awaitzdef %(name)s(%(signature)s):
)

isinstancestrr\   rm   r=   
splitlinesrS   r   replacer   )r
   objbodyrx   r(   r3   r5   ry   rz   r.   restr/   rD   rC   ibodyr   s                   r   createzFunctionMaker.create   s    c3 	**322JD$SbS	IDDDIDs4y(C@@		FFDOO4E4EFFFFFh'' 	<)&11 	<:UBKK.* *DD 4e;Dtyx<<e<<<r   )NNNNNNNr   )NNNT)r1   r4   __qualname__r2   	itertoolscountrq   r%   r&   r'   r(   r)   r*   r   rU   r   classmethodr   r   r   r   r    r    P   s          %Y_&&N GIHDH7HUHXH
^7;@D2L 2L 2L 2Lh! ! !"       D 2604= = = [= = =r   r    r   c                    t          ||           }d}t          |          D ]\  }}d|z  }|||<   ||dz   z  }dt          j        cxk    rdk     r#n n t	          |          ot          |           }nt	          |          }|r"t                              | d|z  ||           }	n!t                              | d	|z  ||           }	t          | d
          r| j	        |	_	        |	S )z
    decorate(func, caller) decorates a function using a caller.
    If the caller is a generator function, the resulting function
    will be a generator function.
    )rb   ra    z_e%d_r-   z3.5z3.6z?for res in _call_(_func_, %s%%(shortsignature)s):
    yield res__wrapped__z,return _call_(_func_, %s%%(shortsignature)s)r   )
r@   r:   rP   versionr   r   r    r   rA   r   )
rD   r   extrasrx   esrH   extraexgeneratorcallerfuns
             r   decorater      sA    6$///H	Bf%%  5q[
b4i####e##### .  8/777 	 .f55 ("" "$&'(0d # D D ""@2E$ # ( ( t^$$ -,Jr   c                    |t          ||           S d\  }}t          j        |           r-| j                                        }d| j        d| j        d}nt          j        |           rw| j        dk    rd}n| j        }| j        }| j        j        }t          | j
        pd          }d	                    | j        j        ||z
  |                   }|r|d
z  }| j
        }n*| j        j                                        }| j        j        }t          | t                     }t                               |d|dd|d|d||| j        |           }	|r
d|z   |	_
        |	S )z=decorator(caller) converts a caller function into a decoratorN)r   r   z
decorator(z2) converts functions/generators into factories of z objectsr"   r#   r   r-   r`   )_call
_decorate_z(func, )z?if func is None: return lambda func:  _decorate_(func, _call, (z#))
return _decorate_(func, _call, (z)))r3   r5   r   r   )r   r   isclassr1   lowerr6   r2   __code__co_argcountlenrN   r=   co_varnames	__class____call__r@   r    r   r4   )
r   _funcdefaultargsr(   r.   r3   nargsndefsrx   decs
             r   	decoratorr     s   v&&&"Kv &$$&&)/&///K		F	#	# &?j((DD?Dn+F'-2..ii ;E%K<M NOO 	3K&(..00o%&X666H


$$,,2=++{{{	Lc&"3	  I IC
  ."X-Jr   )_GeneratorContextManager)GeneratorContextManagerc                       e Zd Zd ZdS )ContextManagerc                 \    t                               |dt          | |          |          S )zContext manager decoratorz.with _self_: return _func_(%(shortsignature)s))_self_ra   r   )r    r   r@   )rC   rD   s     r   r   zContextManager.__call__0  s7    ##BT*** $ > > 	>r   N)r1   r4   r   r   r   r   r   r   r   /  s#        > > > > >r   r      c                 8    t          j        |  ||i |          S r   r   r   rC   grG   ks       r   r   r   :  s!    '0qq!zqzzBBBr      c                 0    t          j        | |||          S r   r   r   s       r   r   r   @  s    '0q!Q???r   c                      t          |           S r   )_contextmanager)rD   s    r   contextmanagerr   G  s    4   r   c                     d}t          |          D ]0\  }}t          ||           rd} nt          | |          r| ||<   d}1|r|                    |            dS dS )z_
    Append ``a`` to the list of the virtual ancestors, unless it is already
    included.
    TFN)r:   
issubclassr<   )rG   
vancestorsaddjvas        r   r<   r<   N  s    
 C:&&  2b! 	CEa 	JqMC
 ! r   c                        s
J d            dd                                z  t          j        df fd	 fd}dz   |_        |S )zr
    Factory of decorators turning a function into a generic function
    dispatching on the given arguments.
    zNo dispatch args passedz(%s,)r-   r   c                      |t          |           t                              r/t          dt                    t          |           |fz            dS )z5Make sure one passes the expected number of argumentszExpected %d arguments, got %d%sN)r   rB   )	argumentswrongmsgdispatch_argss      r   checkzdispatch_on.<locals>.checkh  sh    5Y]!3!344 	G= //YEF G G G	G 	Gr   c                 F    t          t                     j                  }t          	          |k    st          d
z            i 	fdfdfd}fd} fd}t                               d
z  t          |          | | 	
  
        S )
z4Decorator turning a function into a generic functionzUnknown dispatch arguments %sc                  $    |            d t          t                              D             }D ]P}t          | ||          D ]<\  }}}t          ||          r&||                                vrt          ||           =Qd |D             S )zU
            Get a list of sets of virtual ancestors for the given types
            c                     g | ]}g S r   r   )r^   _s     r   r_   zIdispatch_on.<locals>.gen_func_dec.<locals>.vancestors.<locals>.<listcomp>}  s    999!2999r   c                 ,    g | ]}t          |          S r   )rl   )r^   ras     r   r_   zIdispatch_on.<locals>.gen_func_dec.<locals>.vancestors.<locals>.<listcomp>  s    ***CGG***r   )ranger   zipr   mror<   )	typesrastypes_ttype_r   r   r   typemaps	         r   r   z5dispatch_on.<locals>.gen_func_dec.<locals>.vancestorsx  s     E%LLL99uS%7%788999C! * *$'vs$;$; * *LAub!!U++ *QUUWW0D0Dub)))* +*c****r   c                  z    |            g }t          |  |            D ]\  }}t          |          }|dk    rt          d|d|          |dk    r2|\  }t          d||fi                                           dd         }n|                                }|                    |dd                    |S )zG
            Get a list of virtual MROs, one for each type
            rZ   zAmbiguous dispatch for z: r   Nr   )r   r   RuntimeErrortyper   r<   )	r   listsr   vasn_vasr   r   r   r   s	          r   	ancestorsz4dispatch_on.<locals>.gen_func_dec.<locals>.ancestors  s     E%LLLEeZZ%788 
' 
'3C199&,;<11ccBD D DaZZCBsQGR004466qrr:CC%%''CS"X&&&&Lr   c                  .                   fd}|S )zU
            Decorator to register an implementation for the given types
            c                 t     t          |           j        t          j        d| j        z              | <   | S )Nz in )r   r%   operatorltr1   )r   r   r   r   s    r   r   z@dispatch_on.<locals>.gen_func_dec.<locals>.register.<locals>.dec  s9    nQ'',hk6AJ;NOOO!"r   r   )r   r   r   r   s   ` r   registerz3dispatch_on.<locals>.gen_func_dec.<locals>.register  s=     E%LLL       Jr   c                       |            g }t          j         |   D ].}|                    t          d |D                                  /|S )zI
            An utility to introspect the dispatch algorithm
            c              3   $   K   | ]}|j         V  d S r   )r1   )r^   rG   s     r   r   zKdispatch_on.<locals>.gen_func_dec.<locals>.dispatch_info.<locals>.<genexpr>  s$       9 9 9 9 9 9 9 9r   )r   productr<   tuple)r   lstancr   r   s      r   dispatch_infoz8dispatch_on.<locals>.gen_func_dec.<locals>.dispatch_info  sf     E%LLLC ())U*;< ; ;

5 9 9S 9 9 999::::Jr   c                    t          d | D                       }	 	|         } ||i |S # t          $ r Y nw xY wt          j         |  }t	          |           |D ]#}	                    |          }|
 ||i |c S $ |i |S )Nc              3   4   K   | ]}t          |          V  d S r   )r   r]   s     r   r   zGdispatch_on.<locals>.gen_func_dec.<locals>._dispatch.<locals>.<genexpr>  s(      ==$s))======r   )r   KeyErrorr   r   rp   rS   )
r   r%   rV   r   r   combinationsr   r   rD   r   s
          r   	_dispatchz4dispatch_on.<locals>.gen_func_dec.<locals>._dispatch  s    ==}=====E&EN q$~"~~%     %,ii.?@L& * *KK''=1d>b>>))) ! 4$$$$s   , 
99z#return _f_(%s, %%(shortsignature)s))_f_)r   defaultr   r   r   r   r   )rl   r   r%   rn   r    r   r@   )rD   argsetr   r   r   r   r   r   r   r   dispatch_strs   `    @@@r   gen_func_decz!dispatch_on.<locals>.gen_func_decn  s5    ^D)).//=!!V++;lJKKK
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+	 	 	 	 	 	&
	 
	 
	 
	 
	 
		 	 	 	 	 		% 	% 	% 	% 	% 	% 	%$ ##7,FY(D
i'T	 $ ; ; 	;r   dispatch_on)r=   r   ner1   )r   r   r   r   s   ` @@r   r   r   `  s    
 33333=TYY}555L'{ G G G G G GU; U; U; U; U; U; U;n *L8Lr   )r   r   )'r2   
__future__r   rerP   r   r   r   collections__version__version_infor   r   
namedtupler   r   rT   r   ImportErrorrr   rh   objectr    r   r   
contextlibr   r   r   r   initr   r%   n_argsr&   r   r   r<   r   r   r   r   <module>r     s(  <  & % % % % % 				 



          t&&&&&&    )+( 01 1KI I I% % %!5       +++++++        bj122M= M= M= M= M=F M= M= M=`   D" " " "NO3333333 O O ONNNNNNNNO> > > > >- > > > ~.788	TY	Q;;t|;C C C&Nq[[T\[q[[@ @ @&N)N++! ! !  $f f f f fs6   A A#"A#'A. .A98A9#B* *B87B8