o
    i                     @   s  d Z 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 e	eZ
zddlmZ eejeef efZW n eyJ   dZeejeef fZY nw G dd dZedZed	Z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ZG dd deZG dd dedZdd Zdd Z dd Z!dd  Z"G d!d" d"Z#d#d$ Z$ej%ej%ee&e' j%ej%eej(j%eej)j%hZ*d%d& Z+dS )'zMiscellaneous utilities.    N)ABCMeta)count)	UnionTypec                   @   s    e Zd ZdZdd Zdd ZdS )NamedzA named object.

    This class can be used to construct objects with a name that will be used
    for the string representation.
    c                 C   s
   || _ dS )zaConstruct a named object.

        Arguments:
            name: The name of this object.
        Nnameselfr    r
   M/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/ovld/utils.py__init__   s   
zNamed.__init__c                 C   s   | j S )zReturn the object's name.r   r	   r
   r
   r   __repr__&   s   zNamed.__repr__N)__name__
__module____qualname____doc__r   r   r
   r
   r
   r   r      s    r   	BOOTSTRAPMISSINGc                    s   t  d fdd	}|S )z7Wrap a decorator to optionally takes keyword arguments.Nc                    s4   | d u rt  fdd}|S | fi  S )Nc                    s    | fi S Nr
   )fn)decokwargsr
   r   
newer_deco6   s   z7keyword_decorator.<locals>.new_deco.<locals>.newer_deco	functoolswraps)r   r   r   r   )r   r   new_deco2   s
   z#keyword_decorator.<locals>.new_decor   r   )r   r   r
   r   r   keyword_decorator/   s   r   c                   @      e Zd ZdS )CodegenInProgressNr   r   r   r
   r
   r
   r   r!   A       r!   c                   @   r    )
UsageErrorNr"   r
   r
   r
   r   r$   E   r#   r$   c                   @   r    )ResolutionErrorNr"   r
   r
   r
   r   r%   I   r#   r%   c                   @   s2   e Zd Zd
ddZdd Zdd Zdd	 ZeZdS )SpecialFormNc                 C   s   || _ |p	| d| _d S )Nz=() can only be used from inside an @ovld-registered function.)_SpecialForm__name_SpecialForm__message)r	   r   messager
   r
   r   r   N   s   zSpecialForm.__init__c                 O   
   t | jr   r$   r(   )r	   argsr   r
   r
   r   __call__T      
zSpecialForm.__call__c                 C   r*   r   r+   )r	   attrr
   r
   r   __getattr__W   r.   zSpecialForm.__getattr__c                 C   s   d| j  dS )Nz<SpecialForm >)r'   r   r
   r
   r   __str__Z   s   zSpecialForm.__str__r   )r   r   r   r   r-   r0   r2   r   r
   r
   r
   r   r&   M   s    
r&   c                   @   s   e Zd Zdd ZdS )GenericAliasMCc                 C   s
   t |dS )N
__origin__)hasattr)clsobjr
   r
   r   __instancecheck__a   r.   z GenericAliasMC.__instancecheck__N)r   r   r   r8   r
   r
   r
   r   r3   `   s    r3   c                   @   r    )GenericAliasNr"   r
   r
   r
   r   r9   e   r#   r9   )	metaclassc                 C   sp   | t u rdS t|  }r%t| p| }dtt|}|j d| dS t| }|	ds3|	dr6| jS |S )N*, []z<class z<enum )
objecttypingget_args
get_originjoinmap	clsstringr   repr
startswith)r6   r,   originrr
   r
   r   rE   i   s   rE   c                 C   s,   t | tr| \}}| dt| S t| S )Nz: )
isinstancetuplerE   )r6   keytypr
   r
   r   typemap_entry_stringx   s   
rN   c                 C   s   d tt| S )Nr<   )rC   rD   rN   )typesr
   r
   r   	sigstring      rP   c                 C   sP   t | tr	t|  S t | trt|  S | tju rtt S t | tr$t|  S t| S r   )rJ   r9   type
UnionTypesr@   Anyr?   )r7   r
   r
   r   subtler_type   s   



rU   c                   @   s6   e Zd ZdddZdd ZdddZdd	d
ZeZdS )NameDatabaseTMPc                 C   s&   || _ t | _i | _i | _t | _d S r   )default_namer   	variablesnamesset
registered)r	   rX   r
   r
   r   r      s
   zNameDatabase.__init__c                 C   s   | j | d S r   )r\   addr   r
   r
   r   register   rQ   zNameDatabase.registerNc                 C   sh   d}|}|| j v s|tv r,t| |kr,| | }|d7 }|| j v s|tv r,t| |ks| j | |S )N   )r\   _builtins_dictr]   )r	   desired_namevalueir   r
   r
   r   gensym   s   

zNameDatabase.gensymc                 C   s   t |tttfv rt|S t|| jv r| jt| S |p| j}t|t	r:t
|t u r:dtt
|d d| }nt|d|}tj|ddsI|}| ||}|| j|< || jt|< |S )Nt_r   r   z^[a-zA-Z_][a-zA-Z0-9_]*$)stringpattern)rR   intfloatstrrF   idrZ   rX   rJ   r9   r@   rB   getattrrA   rematchrd   rY   )r	   rb   suggested_namedfltr   r
   r
   r   get   s    

zNameDatabase.get)rW   r   )r   r   r   r   r^   rd   rq   __getitem__r
   r
   r
   r   rV      s    


rV   c                 C   s   t | dd }t|tsd}|S )N__args__r
   )rl   rJ   rK   )tpr,   r
   r
   r   rA      s   
rA   c                 C   sX   t dd t| D rt| tuS t| dr| jS t| ts!dS t| jt	vr*dS dS )Nc                 s   s    | ]}t |V  qd S r   )is_dependent).0subtr
   r
   r   	<genexpr>   s    zis_dependent.<locals>.<genexpr>__dependent__FT)
anyrA   r@   rB   rR   r5   ry   rJ   r8   _standard_instancechecks)tr
   r
   r   ru      s   

ru   ),r   builtinsr   rm   r@   abcr   	itertoolsr   varsr`   rO   r   rR   Unionrh   rj   rS   ImportErrorr   r   r   r   	Exceptionr!   r$   	TypeErrorr%   r&   r3   r9   rE   rN   rP   rU   rV   rA   r8   listr?   ProtocolrT   r{   ru   r
   r
   r
   r   <module>   sN    ,


