o
    i2                     @   s  d dl Z d dlZd dlmZ d dlmZmZmZmZmZ d dl	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ ed	Zed
ZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zdd Z d7d d!Z!G d"d# d#e"Z#d$d% Z$G d&d' d'e#ed(Z%d)e"d*e"fd+d,Z&i Z'd-d. Z(e j)d/d0 Z*d1d2 Z+d3e,d*e"fd4d5Z-ed6Z.e
e.ef Z/dS )8    N)copy)MISSING	dataclassfieldsmake_dataclassreplace)	AnnotatedTypeVar
get_origin   )Ovldto_ovld)eval_annotation)NamedABSENTCODEGENc                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )CombinerNc                 C   
   || _ d S Nfieldselfr    r   N/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/ovld/medley.py__init__      
zCombiner.__init__c                 C   s
   || _ d S r   r   r   objr   r   r   r   __set_name__   r   zCombiner.__set_name__c                 C      t  r   NotImplementedErrorr   clsr   r   r   get      zCombiner.getc                 C   s   t | | jS r   )typer   r   r   r   r   r      s   zCombiner.copyc                 C   s&   t | t |urtd| | d S )Nz(Cannot merge different combiner classes.)r'   	TypeErrorinclude_sametyper   otherr   r   r   include   s   zCombiner.includec                 C   s   d S r   r   r+   r   r   r   r*   !   s   zCombiner.include_sametypec                 C   r    r   r!   r   implr   r   r   	juxtapose$   r&   zCombiner.juxtaposer   )
__name__
__module____qualname__r   r   r%   r   r-   r*   r0   r   r   r   r   r      s    
r   c                       s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )KeepLastNc                    s   t  | t| _d S r   )superr   r   r/   r   	__class__r   r   r   )   s   
zKeepLast.__init__c                 C   s   | j S r   r/   r#   r   r   r   r%   -   r&   zKeepLast.getc                 C   s   |j | _ d S r   r8   r+   r   r   r   r*   0      zKeepLast.include_sametypec                 C   r   r   r8   r.   r   r   r   r0   3   r   zKeepLast.juxtaposer   )r1   r2   r3   r   r%   r*   r0   __classcell__r   r   r6   r   r4   (   s
    r4   c                       F   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Z  Z	S )ImplListNc                    s   t  | |p	g | _d S r   )r5   r   impls)r   r   r=   r6   r   r   r   8   s   zImplList.__init__c                 C   s   t | | jt| jS r   )r'   r   listr=   r(   r   r   r   r   <   s   zImplList.copyc                 C   s&   | j stS |  }t| j d |S )Nr   )r=   r   wrap	functoolswraps)r   r$   rvalr   r   r   r%   ?   s   zImplList.getc                 C   r    r   r!   r(   r   r   r   r?   E   r&   zImplList.wrapc                 C   s   |  j |j 7  _ d S r   r=   r+   r   r   r   r*   H   s   zImplList.include_sametypec                 C   s   | j | d S r   )r=   appendr.   r   r   r   r0   K      zImplList.juxtaposeNN)
r1   r2   r3   r   r   r%   r?   r*   r0   r:   r   r   r6   r   r<   7   s    r<   c                   @      e Zd Zdd ZdS )RunAllc                        fdd}|S )Nc                    s&    j D ]}|| g|R i | qd S r   rC   r   argskwargsr/   _selfr   r   run_allQ   s   
zRunAll.wrap.<locals>.run_allr   )rN   rO   r   rM   r   r?   P   s   zRunAll.wrapNr1   r2   r3   r?   r   r   r   r   rH   O       rH   c                   @   rG   )	ReduceAllc                    rI   )Nc                    sN    j d | |g|R i |} j dd  D ]}|| |g|R i |}q|S Nr   r   rC   )r   xrK   rL   resultr/   rM   r   r   
reduce_allZ   s   z"ReduceAll.wrap.<locals>.reduce_allr   )rN   rV   r   rM   r   r?   Y      zReduceAll.wrapNrP   r   r   r   r   rR   X   rQ   rR   c                   @   rG   )ChainAllc                    rI   )Nc                    sJ    j d | g|R i |}  j dd  D ]}|| g|R i |} q| S rS   rC   rJ   rM   r   r   	chain_alle   s   z ChainAll.wrap.<locals>.chain_allr   )rN   rY   r   rM   r   r?   d   rW   zChainAll.wrapNrP   r   r   r   r   rX   c   rQ   rX   c                       r;   )	BuildOvldNc                    s@   t  | |pt|dd| _g | _|d ur| d | d S d S )NT)namelinkback)r5   r   r   ovldpendingr   )r   r   r]   r6   r   r   r   o   s   zBuildOvld.__init__c                 C   s   | j | d S r   )r]   renamer   r   r   r   r   v   rE   zBuildOvld.__set_name__c                 C   sJ   || j _| jD ]\}}|| q| j  | j  rtS | j   | j jS r   )r]   specialization_selfr^   clearemptyr   
invalidatedispatch)r   r$   fargr   r   r   r%   y   s   



zBuildOvld.getc                 C   s   t | | j| jjddS )NT)r\   )r'   r   r]   r   r(   r   r   r   r      s   zBuildOvld.copyc                 C   s   | j |j  d S r   )r]   
add_mixinsr+   r   r   r   r*         zBuildOvld.include_sametypec                 C   sR   t |dd }r| j| jj|f d S t|r%| j| jj|f d S td)NFforcezExpected a function or ovld.)	r   r^   rD   r]   rg   inspect
isfunctionregisterr)   )r   r/   ovr   r   r   r0      s
   
zBuildOvld.juxtaposerF   )
r1   r2   r3   r   r   r%   r   r*   r0   r:   r   r   r6   r   rZ   n   s    
rZ   c                       s:   e Zd Zd
 fdd	Z fddZdd Zdd	 Z  ZS )medley_cls_dictNc                    s   |d u rdd |D \}t    i | _|| _| d| j | d| t | _|D ]$}t|di  D ]\}}|| jv rF| j| 	| q4|
 | j|< q4q*d S )Nc                 S   s   h | ]}|j qS r   )_ovld_default_combiner).0br   r   r   	<setcomp>   s    z+medley_cls_dict.__init__.<locals>.<setcomp>_ovld_combinersrp   )r5   r   
_combiners_default_combiner
set_directset_basicgetattritemsr-   r   )r   basesdefault_combinerbaseattrcombinerr6   r   r   r      s   

zmedley_cls_dict.__init__c                    s   t  || d S r   )r5   __setitem__r   r   valuer6   r   r   rw      rh   zmedley_cls_dict.set_directc                 C   s   |dks|dkr|  || d S |dkrtdt|tr*|d | || j|< d S | j|d }|d u rTt|ddr@t|}nt	
|rK| |}nt|}|| j|< || d S )N__annotations____annotate_func__r   z6Do not define __init__ in a Medley, use __post_init__.Fri   )rw   	Exception
isinstancer   r   ru   r%   r   rZ   rk   rl   rv   r4   r0   )r   r   r   r   r   r   r   r      s$   




zmedley_cls_dict.__setitem__c                 C   s.   || j v r| j | d  }tur|S t|r   )ru   r%   r   KeyErrorr   r   r   r   __missing__   s   
zmedley_cls_dict.__missing__r   )r1   r2   r3   r   rw   r   r   r:   r   r   r6   r   ro      s
    ro   c                     s4   i }| D ]  fddt  jD }|| q|S )Nc                    s   i | ]}|t  |qS r   rz   )rq   r[   instancer   r   
<dictcomp>       zcodegen_key.<locals>.<dictcomp>)r'   _ovld_codegen_fieldsupdate)	instancesrB   keydr   r   r   codegen_key   s
   r   c                 C   sP   t | f}t| j| f|}| |_| D ]
\}}t||| qt| | _|S r   )	ro   MedleyMCr1   _ovld_specialization_parentr{   setattrr>   keysr   )r$   keynsnew_tkvr   r   r   
specialize   s   
r   Fc                 C   s2   |r| j tu rtd| j dt| } d| _| S )NzDataclass field 'zM' must have a default value (not a default_factory) in order to be melded in.T)defaultr   r)   r[   r   kw_only)dc_fieldrequire_defaultr   r   r   remap_field   s   
r   c                       sj   e Zd Z fddZedddZd fdd	Zdd	d
dZdd Zdd Z	dd Z
 fddZ  ZS )r   c                    s0   t | dd rt fdd| jD S t  S )N_ovld_medleysc                 3   s    | ]}t  |V  qd S r   
issubclass)rq   msubclassr   r   	<genexpr>   s    z-MedleyMC.__subclasscheck__.<locals>.<genexpr>)rz   allr   r5   __subclasscheck__)r$   r   r6   r   r   r      s   zMedleyMC.__subclasscheck__Nc                 C   s   t ||dS )N)r}   )ro   )mclsr[   r|   r}   r   r   r   __prepare__   s   zMedleyMC.__prepare__c           	         sv   t  | |||}|j D ]\}}|| }tur!t||| qt| d  _i  _	 fddt
 D  _ S )Nc                    s>   g | ]}t |j i d d rttu rtjv r|jqS )T)catch)r   r'   r
   r   r   __metadata__r[   )rq   r   dctr   r   
<listcomp>   s    
z$MedleyMC.__new__.<locals>.<listcomp>)r5   __new__rt   r{   r%   r   r   r   r   _ovld_specializationsr   r   )	r   r[   r|   	namespacer}   rU   r   r   r   r6   r   r   r      s   	zMedleyMC.__new__T)extend_subclassesc          
         s   |s| S dd t | D }|D ]}|dd t |D 7 }qtd|d}|D ]9}t| D ]0\}}|dv r6q-| j| }rM|| t| |||  q-|ds]|ds]t| || q-q%|j	| _	|r}| 
 D ]  fd	d|D }	 j|	d
di qi| S )Nc                 S   s   g | ]	}|j |j|fqS r   )r[   r'   rq   re   r   r   r   r         z#MedleyMC.extend.<locals>.<listcomp>c                 S   s    g | ]}|j |jt|d fqS )Tr[   r'   r   r   r   r   r   r     s     _)r   )r2   __firstlineno____static_attributes___ovld___c                    s   g | ]	}t  |s|qS r   r   rq   osubclsr   r   r     r   r   F)r   r   varsr{   rt   r%   r0   r   
startswithr   __subclasses__extend)
r$   r   others
all_fieldsr,   meldedr   r   comb	subothersr   r   r   r     s.   
zMedleyMC.extendc                 C   s   t | |fS r   )meld_classesr$   r,   r   r   r   __add__  r9   zMedleyMC.__add__c                 C   s
   |  |S r   )r   r   r   r   r   __iadd__  r   zMedleyMC.__iadd__c                 C   
   t | |S r   )unmeld_classesr   r   r   r   __sub__  r   zMedleyMC.__sub__c                    s   t  j|i |}| jrBt| }rB| jp| } tt| }|| jv r*| j| }n
t	| |}|| j|< t
|}|j|j |S |S r   )r5   __call__r   r   r   tuplesortedr{   r   r   objectr   __dict__r   )r$   rK   rL   mader   r   r   r   r6   r   r   r   "  s   




zMedleyMC.__call__r   )r1   r2   r3   r   classmethodr   r   r   r   r   r   r   r:   r   r   r6   r   r      s    r   c                    rI   )Nc                    s    | j }||  |S r   )r1   r0   )fncmbr   r   r   deco4  s   

zuse_combiner.<locals>.decor   )r   r   r   r   r   use_combiner3  s   r   c                   @   s.   e Zd Ze Ze Ze Zdd Zdd ZdS )Medleyc                 C   s8   t | t|rt| jst| fi t|S t| |gS r   )r   r'   r   r   r   meldr+   r   r   r   r   A  s   zMedley.__add__c                 C   r   r   )unmeldr+   r   r   r   r   G  r   zMedley.__sub__N)r1   r2   r3   rH   __post_init__r4   r   r   r   r   r   r   r   <  s    r   )	metaclassr}   mainexcludec                    s    t  fdd| jD }t|S )Nc                 3   s    | ]	}| ur|V  qd S r   r   rq   cr   r   r   r   L  s    z!unmeld_classes.<locals>.<genexpr>)r   	__bases__r   )r   r   classesr   r   r   r   K  s   r   c           	         sh  dd  i }| D ]}|  fddt|d|gD  q| D ]} |}t|ds;| D ]}||ur:||v r:||= q-qt| }t|dkrL|d S |}|tv rVt| S t }g }|D ]}| |j	 |
dd	 |j D  q]t|}|d
t| |dt| |ddd |D  d|jv r|jd= tdtdd	 |D ||d|d}|t|< |S )Nc                 S   s   t | dd p| S )Nr   r   )r$   r   r   r   r   T  rE   zmeld_classes.<locals>.keyc                    s   i | ]} ||qS r   r   )rq   rT   r   r   r   r   Y  s    z meld_classes.<locals>.<dictcomp>r   r   r   c                 s   s"    | ]}|j |jt|fV  qd S r   r   r   r   r   r   r   n  s    
zmeld_classes.<locals>.<genexpr>r   r   c                 S   s   i | ]\}}}||qS r   r   )rq   r[   r   re   r   r   r   r   u  r   r3   +c                 s   s    | ]}|j V  qd S r   )r1   r   r   r   r   r   {  s    T)cls_namer|   r   r   r   )r   rz   hasattrmror   valueslen_meld_classes_cacherx   r   r   __dataclass_fields__ro   rw   ru   r   joinr   )	r   medleysr$   r~   	cache_key	cg_fields	dc_fieldsmergedrU   r   r   r   r   S  sN   $



r   c                 C   s"   t |}t| }|s|S t||S r   )dictr   r   )r   r   typr   r   r   meld_classes_with_key  s
   
r   c                 C   sf   t |  }tdd | D }t|t| }t|}| D ]}t| D ]
\}}t||| q%q|S )Nc                 s   s    | ]}t |V  qd S r   )r'   r   r   r   r   r     s    zmeld.<locals>.<genexpr>)r   r   r   r{   r   r   r   r   )objectsr   r   r$   r   r   r   r   r   r   r   r     s   
r   r   c                 C   sd   t | jr	tdtt | |}i }|j}|j D ]}|j|vr*t| |j||j< q|di |S )Nz+Cannot unmeld an object with codegen fieldsr   )r'   r   r)   r   r   r   r[   rz   )r   r   r$   r   excludedre   r   r   r   r     s   

r   T)F)0r@   rk   r   dataclassesr   r   r   r   r   typingr   r	   r
   corer   r   typesr   utilsr   r   r   r   r4   r<   rH   rR   rX   rZ   r   ro   r   r   r   r'   r   r   r   r   r   r   cacher   r   r   r   r   CodegenParameterr   r   r   r   <module>   sB    	$4

N	3
	