o
    i@                     @   s  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m	Z	 ddl
mZmZmZmZmZ ddlmZmZmZmZmZmZ edZed	Zed
ZedZdZdZdd Zdd Zdd Ze Z G dd dZ!G dd de j"Z#d ddZ$dd Z%dd Z&dd Z'dS )!    N)reduce)count)CodeTypeFunctionType   )Codeinstantiate_coderename_coderename_functiontransfer_function)MISSINGNameDatabaseSpecialForm
UsageErroris_dependentsubtler_typerecurse	call_nextresolvecurrent_codezd
def __WRAP_DISPATCH__(OVLD):
    def __DISPATCH__({args}):
        {body}

    return __DISPATCH__
z8
{mvar} = OVLD.map[({lookup})]
return {mvar}({posargs})
c                 C   s   t | dr	|  S td| dS )Ncodegenzisinstance($arg, $this))this)hasattrr   r   )typ r   N/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/ovld/recode.pygenerate_checking_code&   s   
r   c              
      s  d,dd}     j} j} j} j} j} j}t }	d}
d} jr'dndg}dg} jr2dndg}g }d}t	dd	 fd
d}|| | | | D ]}
| qOjdd}|| D ]*}||v rm|| n|| d || ||| d| d |d7 }qat|dkr|s|r|d || D ]*}||v r|| n|| d || ||| d| d |d7 }qt|dkr|d |s|r|d |D ]#}||  || d|  |d|d|| d| d q|D ]>}|| d d}
d}|	d |	d |d| d |d|d|  |d|d|| d| d q||
 || tj||d d!|||d"}g }|se|rt|| }t|| D ]2\}}tj||d ||  d d!||d || d  |d"}t|d#}|d$| d%|  qq|| g |	|td|d#}tj||||d&d' d(}td)|d*tijd+}|| S )-N, Fc                 S   s4   dd | D } | | }t| dkr|r|d7 }|S )Nc                 S   s   g | ]}|r|qS r   r   .0xr   r   r   
<listcomp>/   s    z3generate_dispatch.<locals>.join.<locals>.<listcomp>r   ,)joinlen)liseptrailrvalr   r   r   r#   .   s
   
zgenerate_dispatch.<locals>.join selfr   INJECTdefault_namec                    s     |  S N)
lookup_forr    arganalndbr   r   r/   K   s   z%generate_dispatch.<locals>.lookup_formethod)desired_namez=MISSING()r   /*=z))z**KWARGSz*TARGSzKWARGS = {}z
TARGS = []if z is not MISSING:z    KWARGS[z] = z    TARGS.append((z)))T)r'   )lookupposargsmvarz        z
if z is MISSING:z	
        )r&   )argsbody__WRAP_DISPATCH__r   )inject)r   F)compilestrict_positional_requiredstrict_positional_optionalpositional_requiredpositional_optionalkeyword_requiredkeyword_optionalset	is_methodr   registergensymappendr$   addcall_templateformat	enumeratetextwrapindentr#   dispatch_templatelstripr   r   	variables)ovr2   r#   sprspoprpokrkoinits
kwargsstar	targsstarr?   r@   r=   r<   ir/   namemvfullcallcallsreqargcalllinescodewrr   r1   r   generate_dispatch-   s   








$

&



rm   c                    s  dd dd  dd | } fdd|D }t d	d
g }d}d }	d }
| D ]ftfdd|D }t|t|krtdd |D }| }|st|ddrfdd|D }tdd |}
t|
ttt|krxt|dk rxd}d }	q(| j	t
 d}	q(t|dd}q(t|D ]2\}\}fdd| D }t|dkrd  }	}
 fdd|D }d|}|sd}|| qt|dkrd}d fdd| D }dfdd| D }g }|	r|d|
  d |	 d! |d"| | d# n|r/t|D ]\}}|d$| d%| d&| | d# q|d'| | d# nlt|D ]\}}|d(| d)|  q3d*d+d tt|D }|d,|  |d- t|D ]\}\}|d.| d%| d&| | d# qc|d/ |d0| | d# |d1 |d2|   td3|d4}d5| | d6| }j}t|D ]\}\}||d7| < qfd8d9}|r|d: p||d;< td<||d=}t||S )>Nc                 S   s   t dd t| D S )Nc                 s   s*    | ]\}}t |tr|n||fV  qd S r.   )
isinstancetuple)r   rb   entryr   r   r   	<genexpr>   s    
z?generate_dependent_dispatch.<locals>.to_dict.<locals>.<genexpr>)dictrR   )tupr   r   r   to_dict   s   z,generate_dependent_dispatch.<locals>.to_dictc                 S   s   t | tr
d|  S | S )NARGrn   intr0   r   r   r   argname      z,generate_dependent_dispatch.<locals>.argnamec                 S   s"   t | tr
d|  S |  d|  S )Nru   r:   rv   r0   r   r   r   
argprovide   s   "z/generate_dependent_dispatch.<locals>.argprovidec                    s   g | ]
\}}| |fqS r   r   r   htypes)rt   r   r   r!          z/generate_dependent_dispatch.<locals>.<listcomp>r+   r,   Fc                 3   s    | ]	\}}|  V  qd S r.   r   r{   kr   r   rq          z.generate_dependent_dispatch.<locals>.<genexpr>c                 s   s    | ]}t |V  qd S r.   )type)r   tr   r   r   rq          keyable_typec                    s*   g | ]\ } fd d|   D qS )c                    s   i | ]}| qS r   r   )r   keyr|   r   r   
<dictcomp>   s    z:generate_dependent_dispatch.<locals>.<listcomp>.<dictcomp>)get_keys)r   r}   r   r   r   r!      s    c                 S   s   i | |S r.   r   )abr   r   r   <lambda>   s    z-generate_dependent_dispatch.<locals>.<lambda>   Trh   exclusive_typec                    s   g | ]
}t  | r|qS r   )r   r   r   )r}   r   r   r!      r~   r   c                    s.   g | ]}t | jt |d qS r   )r   subr   fillr   )rx   r3   r}   r   r   r!      s     z and Truer   c                 3       | ]} |V  qd S r.   r   r   )rx   r   r   rq      r   c                 3   r   r.   r   r   )rz   r   r   rq      r   z
HANDLER = z.get(z, FALLTHROUGH)zreturn HANDLER(r7   r;   z: return HANDLERr6   zreturn FALLTHROUGH(MATCHz = z + c                 s   s    | ]}d | V  qdS )r   Nr   )r   rb   r   r   r   rq          zSUMMATION = zif SUMMATION == 1:z    if MATCHzelif SUMMATION == 0:z    return FALLTHROUGH(zelse:z
    raise 
z    zdef __DEPENDENT_DISPATCH__(z):
HANDLERc                     s    r.   r   )r?   kwargs)nerrr   r   raise_error   s   z0generate_dependent_dispatch.<locals>.raise_errorr   FALLTHROUGH__DEPENDENT_DISPATCH__)symbolrk   rB   )r   rJ   r$   popgetattrr   summapkeygenr   r   r   rR   r#   rN   rangerS   rT   rW   r   r
   )rs   handlers	next_callslfrc   errr   conjs	exclusivekeyexprkeyedfeaturedpossibilitiesfocusall_keysrb   r|   relevantcodesconjargspecargcallr@   	summation	body_textrk   rB   r   fnr   )rx   rz   r   r3   r   rt   r}   r   generate_dependent_dispatch   s   

" 
&
&


r   c                   @   s    e Zd ZdZdd Zdd ZdS )	Conformer)rk   orig_fn
renamed_fnovldc                 C   s   || _ || _|| _|j| _d S r.   )r   r   r   __code__rk   )r*   r   r   r   r   r   r   __init__  s   zConformer.__init__c                 C   s   t |tr|}|j}nd }|}| j| j |d u r)|d u r d S | j}t||d}| j| ddlm	} |
| | j| || _d S )N)funcrk   r   )code_registry)rn   r   r   r   
unregisterr   r   rL   codefindr   update_cache_entryrk   )r*   newnew_fnnew_codeofnr   r   r   r   __conform__  s$   

zConformer.__conform__N)__name__
__module____qualname__	__slots__r   r   r   r   r   r   r     s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
NameConverterc                 C   s<   || _ || _|| _|t | _|t | _|t | _t	 | _	d S r.   )
analysissymsmappingr   ovld_mangledr   map_mangledr   code_mangledr   )r*   analspecial_symsr   r   r   r   r   2  s   


zNameConverter.__init__c                    s   t  fdd|D S )Nc                 3   s    | ]
} j | v V  qd S r.   )r   )r   kindrc   r*   r   r   rq   <  s    z+NameConverter.is_special.<locals>.<genexpr>)any)r*   rc   kindsr   r   r   
is_special;  ry   zNameConverter.is_specialc                 C   sH   |j | jv rtj|tj| j|j  |jddS | |j tr"td|S )N)ctxold_nodenew_nodez%call_next should be called right away)	idr   astcopy_locationNamer   r   r   r   )r*   noder   r   r   
visit_Name>  s   zNameConverter.visit_Namec                    sb  t |jtjr|jjtts|S t	dd |j
D r$|S |jjt}dtj dfdd  fddt|j
D }| fd	d|jD 7 }|rd|d
tjjt d tjtjjt dtj|t dt d}jjrtjdt dg}ng }tj||fddt|j
D  fdd|jD d}tj||dS )Nc                 s   s    | ]	}t |tjV  qd S r.   )rn   r   Starred)r   rh   r   r   r   rq   O  r   z+NameConverter.visit_Call.<locals>.<genexpr>__TMP_c                    sf    j | tu r
dnd}tjtj |  t d |d}tj|t d}tj	||gg dS )N__SUBTLER_TYPEr   r   r   )targetvaluer   r?   keywords)
r   r/   r   r   	NamedExprr   StorevisitLoadCall)r   rh   rc   r   r   )r*   tmpr   r   _make_lookup_callU  s   z3NameConverter.visit_Call.<locals>._make_lookup_callc                    s   g | ]	\}} ||qS r   r   r   rb   rh   r   r   r   r!   e      z,NameConverter.visit_Call.<locals>.<listcomp>c                    s6   g | ]}t jt j|jd  |j|jgt  dqS ))r   eltsr   )r   TupleConstantrh   r   r   r   kwr   r   r   r!   h  s    r   r   r   )r   slicer   r*   c                    s*   g | ]\}}t j  | t  d qS )r   )r   r   r   r   r   r   r   r!     s   * c                    s4   g | ]}t j|jt j  |j t  d dqS )r   )rh   r   )r   keywordrh   r   r   r   r  r   r   r!     s    r   r   )rn   r   r   r   r   r   r   r   generic_visitr   r?   nextr   rR   r   insertr   r   	Subscriptr   r   r   rK   r   r   )r*   r   cn
type_partsr4   selfargr   r   )r   r*   r   r   
visit_CallI  sH   



zNameConverter.visit_CallN)r   r   r   r   r   r   r
  r   r   r   r   r   1  s
    	r   c                    s*   d fdd	  fdd|  D S )Nc                 3   s    t | trG|d ur#t| j|D ]\} t fdd|D r"|V  q| jD ]tfdd|D r7V  q&| jD ]}||E d H  q;d S d S )Nc                 3   s    | ]} j |u V  qd S r.   )cell_contentsr   v)cellr   r   rq     r   z1_search_names.<locals>._search.<locals>.<genexpr>c                 3   s     | ]}  d |u V  qd S r.   )getr  )glbrc   r   r   rq     s    )rn   r   zipco_freevarsr   co_names	co_consts)covaluesr  closurevarnamect)_search)r  r  rc   r   r    s   


	z_search_names.<locals>._searchc              	      s$   i | ]\}}|t  |qS r   )list)r   r   r  r  r  r  r  r   r   r     s   $ z!_search_names.<locals>.<dictcomp>r.   )items)r  specialsr  r  r   r  r   _search_names  s   r  c              
   C   sV   t | jtt||jfttfttfttfi| j| j}t	|
 r&t| |||S t| |S )z4Create a copy of the function with a different name.)r  r   r   dispatchr   r   r   __globals____closure__r   r  recoder
   )r   r   newnamer   r   r   r   adapt_function  s   
r%  c                 C   sl   t t jdt jg dd |D d g g d g d| t t j|t  dgg d d| }t | t j|gg dS )Nz##create_closurec                 S   s   g | ]}t j|d qS r   )r   rh   r   rc   r   r   r   r!     s    z closure_wrap.<locals>.<listcomp>)posonlyargsr?   vararg
kwonlyargskw_defaultskwargdefaultsr   )rc   r?   r@   decorator_listreturns)r@   type_ignores)	r   r   FunctionDef	argumentsReturnr   r   fix_missing_locationsModule)treefnamenameswrapr   r   r   closure_wrap  s,   

r9  c                    s.  d|j  }d|j  }dtt }zt }W n ty)   td  dw tt	|}t
|t|t|i}	| D ]\}
}|D ]}|
|	v rP|	|
 |	|< qDq>t|j||	d|}g |jd _ jrqt|jd d jj}t|  jjd	 }t|d
d	d  }t|  }t|D ]2}t|dr| j|7  _t|dr| j|7  _t|dr| j |7  _ t|dr| j!|7  _!qt"|d jj#d} jrdd |j$D d }dd |j$D ^ }}t% fdd|jD }t& t'||||d}t(|j)d< |j*|j)|< |j+|j)|< |j|j)|< |S )N___OVLD___MAP___CODEzovld is unable to rewrite z because it cannot read its source code. It may be an issue with __pycache__, so try to either change the source to force a refresh, or remove __pycache__ altogether. If that does not work, avoid calling recurse()/call_next())r   r   r   r   
irrelevantr   r   lineno
end_lineno
col_offsetend_col_offsetexec)modefilenamec                 S      g | ]	}t |tr|qS r   rn   r   r   r   r   r   r!     r   zrecode.<locals>.<listcomp>c                 S   rE  r   rF  )r   r  r   r   r   r!      r   c                    s    g | ]} j  jj| qS r   )r"  r   r  indexr&  r   r   r   r!     s     )r   rk   rc   r  r   ),r   r  _currentinspect	getsourceOSErrorr   parserS   dedentr   r   r   r  r   argument_analysisr   r@   r-  r"  r9  r   r  r3  co_firstlinenor$   splitrV   walkr   r>  r?  r@  rA  rC   co_filenamer  ro   r   r	   r   r!  r   r   )r   r   r   r$  r   r   r   srcr5  r   specialsymbolssymr   
line_delta	firstline	col_deltar   resr   r   new_closurer   r   rH  r   r#    s|   

$




r#  r.   )(r   rJ  rS   	functoolsr   	itertoolsr   r}   r   r   r   r   r   r	   r
   r   utilsr   r   r   r   r   r   r   r   r   r   rU   rP   r   rm   r   rI  r   NodeTransformerr   r  r%  r9  r#  r   r   r   r   <module>   s0     	ug%
`