o
    i &                     @   s"  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ddlmZmZmZmZ e Zdd Zeeeeefd	d
Zdd Zi fddZedZedZdd Zd'ddZdd ZG dd dZG dd dZG dd deZG dd deZd d! Zd"Z d#d$ Z!ed(d%d&Z"dS ))    N)_splitlines_no_ff)count)FunctionType   )MISSINGNameDatabasekeyword_decorator	sigstringc                 C   sr   t | drt | dr| j||dS | j|dS t| | j| j| j| j| j| j| j	| j
| j| j|| j| j| j| jS )Nreplaceco_qualname)co_namer   )r   )hasattrr
   typeco_argcountco_kwonlyargcount
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_filenameco_firstlineno	co_lnotabco_freevarsco_cellvars)conewname r   O/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/ovld/codegen.pyrename_code   s*   

r!   c                 C   s   |t u r| jn|}|r8t|t u r| jn||t u r| jn||t u r#| jn||t u r+| jn||t u r3| jn|d}n$t|t u r@| jn||t u rH| jn||t u rP| jn||t u rX| jn|d}| j|_| j|_|j	
| j	 |S )N)argdefsclosurecodeglobalsname)r"   r$   r%   r&   )r   __closure__r   __defaults____code____globals____name____kwdefaults____annotations____dict__update)funcr"   r#   r$   r%   r&   new_fnr   r   r    transfer_function(   s&   r2   c                 C   s   t | t| j||dS )z4Create a copy of the function with a different name.)r0   r$   r&   )r2   r!   r)   )fnr   r   r   r    rename_functionF   s
   
r4   c                 C   sV   dt t|dd}d d t||ftj|< t||dd}i |}t||| ||  S )Nz<ovld:x>exec)sourcefilenamemode)abshash
splitlines	linecachecachecompiler7   )symbolr$   injectvirtual_fileglbr   r   r    instantiate_codeO   s   rE   z&\$(|=|:)(|\[[^\[\]]+\])([a-zA-Z0-9_]+)z[a-zA-Z0-9_]c                    s$   t t  fdd}tj| |dS )Nc                    s   |   \}}}|t|}|d u r|  S |r!|dd |}|dkr1t|s1| d  S |dkrFt|sFd| d  d| dS |S )	Nr   =__:(z := ))groupsboolgroupjoinsymr	fullmatch)mprefixsepr&   valueidxsubsr   r    repl_fnk   s   zsub.<locals>.repl_fn)stringrepl)next_currentsubrsub)templaterX   rY   r   rV   r    r_   h   s   r_   Fc                    sr   t | tr|r| ds|  dS | S t | ttfr0 fdd| D }d|}t|d  S tdt	|  )N
c                    s   g | ]
}t | d  dqS )   T)format_code).0lineindentr   r    
<listcomp>   s    zformat_code.<locals>.<listcomp>  zCannot format code from type )

isinstancestrendswithlisttuplerO   textwraprg   	TypeErrorr   )r$   rg   nllinesblockr   rf   r    rc   {   s   

rc   c                   C   s   dt t S )N__G)r\   r]   r   r   r   r    _gensym   s   rv   c                   @   sB   e Zd Zi fddZdd Zdd Zdd Zd	d
 ZdddZdS )Codec                 K   s   || _ i ||| _d S N)r`   substitutions)selfr`   ry   substitutions_kwr   r   r    __init__   s   zCode.__init__c                 K   s   t | j| jfi |S rx   rw   r`   ry   rz   rX   r   r   r    r_         zCode.subc                 C   s   t | j|fi | jS rx   r}   r~   r   r   r    defaults   r   zCode.defaultsc                    s@   t |ttfr fdd|D S t |tr |S t|S )Nc                    s   g | ]	} | qS r   )_mapsub)rd   tcode_recursegetsubrz   r   r    rh          z Code._mapsub.<locals>.<listcomp>)rk   rn   ro   rw   r_   )rz   r`   r   r   r   r   r    r      s
   

zCode._mapsubc                    s   dfdd	}fdd  D dd D fdd  D } fdd	 | fd
dj  D  jfdd|}t||S )NFc                    s   |  v rd |   S d S )N$r   r&   rT   renamingr   r    r      s   zCode.rename.<locals>.getsubc                    s    i | ]\}}| j vr||qS r   ry   rd   kv)rz   r   r    
<dictcomp>   s     zCode.rename.<locals>.<dictcomp>c                 S   s   i | ]}|t  qS r   )rv   )rd   r   r   r   r    r          c                    s   i | ]	\}} | |qS r   r   r   r   r   r    r      r   c                    sN   t | tr
| S t | ttfr%tdd | D r# fdd| D S | S | S )Nc                 s   s    | ]}t |tV  qd S rx   )rk   rw   rd   r5   r   r   r    	<genexpr>   s    z4Code.rename.<locals>._rename_step.<locals>.<genexpr>c                    s   g | ]} |qS r   r   r   _rename_stepr   r    rh      r   z5Code.rename.<locals>._rename_step.<locals>.<listcomp>)rk   rw   renamern   ro   any)r   )r   rX   r   r    r      s   

z!Code.rename.<locals>._rename_stepc                    s   i | ]	\}}| |qS r   r   r   r   r   r    r      r   c                    s
   |   S rx   )r   c)rX   r   r    <lambda>   s   
 zCode.rename.<locals>.<lambda>F)itemsr/   ry   r   r`   rw   )rz   rX   r   new_subsnew_templater   )r   r   rz   rX   r    r      s   
zCode.renameNc                    sP   d u rt   fdd d fdd	}jfdd|}t|S )	Nc                    sD   t |tr|jS r fdd|D S j| dS )Nc                    s   g | ]} |qS r   r   r   )maker&   rT   r   r    rh      s    z+Code.fill.<locals>.make.<locals>.<listcomp>)suggested_name)rk   rw   r   ry   fillget)r&   r   rT   r   ndbrz   r   r    r      s
   
zCode.fill.<locals>.makeFc                    s    | j v r | j |  |S d S rx   r   r   )r   rz   r   r    r      s   
zCode.fill.<locals>.getsubc                    s   |  j S rx   )r   ry   r   r   )r   rz   r   r    r      s    zCode.fill.<locals>.<lambda>r   )r   r   r`   rc   )rz   r   r   resultr   r   r    r      s   z	Code.fillrx   )	r+   
__module____qualname__r|   r_   r   r   r   r   r   r   r   r    rw      s    	rw   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	FunctionNc                 K   sf   |d u r|}d}|| _ |r%t|tr|jdi || _d S t||| _d S t|tr,|nt|| _d S )N.r   )argsrk   rw   r_   r$   )rz   r   r$   rX   r   r   r    r|      s   0zFunction.__init__c                 G   s   | j tt| j|S rx   )r$   r   dictzipr   rz   r   r   r   r    r      s   zFunction.renamec                 G   s.   | j du r|n| j | _ dd |D }| j| S )N.c                 S   s"   g | ]}t |trt|n|qS r   )rk   rl   rw   )rd   r&   r   r   r    rh      s   " z%Function.__call__.<locals>.<listcomp>)r   r   r   r   r   r    __call__   s   
zFunction.__call__rx   )r+   r   r   r|   r   r   r   r   r   r    r      s    

r   c                   @      e Zd Zdd Zdd ZdS )Defc                 C      | | S rx   r   rz   argnamesr   r   r    create_body      zDef.create_bodyc                 C   s   t d)Nz Cannot convert Def to expression)
ValueErrorr   r   r   r    create_expression   r   zDef.create_expressionNr+   r   r   r   r   r   r   r   r    r          r   c                   @   r   )Lambdac                 C   s   t d| | dS )Nzreturn $body)body)rw   r   r   r   r    r      s   zLambda.create_bodyc                 C   r   rx   r   r   r   r   r    r      r   zLambda.create_expressionNr   r   r   r   r    r      r   r   c           	      C   s   t | }g }d}d}|j D ]a\}}|dkrd}|| |}|jt jur1|d||j  7 }|jt ju rA|s@d}|	d n+|jt j
u rJd}n"|jt ju rTtd|jt ju rd|rc|	d d}n|jt ju rld}|	| q|ry|	d d	|S )
NFclsrz   z = T*z**kwargs are not accepted/z, )inspect	signature
parametersr   registerdefault_emptykind_KEYWORD_ONLYappend_VAR_POSITIONAL_VAR_KEYWORDrq   _POSITIONAL_OR_KEYWORD_POSITIONAL_ONLYrO   )	r3   r   sigr   ko_flagpo_flagargnamearg	argstringr   r   r    regen_signature   s>   





r   z
def {fn}({args}):
{body}
c                 C   s  | j jj}tdd}t||}|r|| j jg|R  n|| }d }t|tr8|}dd t	|j
D }||}t|trC||}nt|trInt|trP|S |d u rVd S t|d}tjd||d}	td|	|jd}
|jd	d
  d	t| d}t|
|}
||
_|j|
_|
S )NINJECT)default_namec                 S   s   g | ]
}|d kr
dn|qS )r   rz   r   )rd   r   r   r   r    rh   #  s    z'codegen_specializer.<locals>.<listcomp>z    __GENERATED__)r3   r   r   )rB   [r   ])ovldargument_analysis	is_methodr   r   specialization_selfrk   r   r   r   r   r   rw   r   rl   r   rp   rg   fgen_templateformatrE   	variablesr+   splitr	   r4   __codegen____orig_name__)typemapr3   tupr   r   r   r   cgr   r$   r0   adjusted_namer   r   r    codegen_specializer  s6   


 





 
r   c                 C   s   t | _|r|| _| S rx   )r   specializerpriority)r3   r   r   r   r    code_generator9  s   r   )r   F)r   )#r   r>   rerp   astr   r=   	itertoolsr   typesr   utilsr   r   r   r	   r]   r!   r2   r4   rE   r@   r^   rP   r_   rc   rv   rw   r   r   r   r   r   r   r   r   r   r   r    <module>   s@    
	


D#