a
    dGD                     @   sH  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mZ d dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZm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%G dd deZ&G dd deZ'G dd deZ(dS )    N)abstractmethod)Enum)Path)AnyDictOptionalTypeUnion)	ValueKind_is_interpolationget_type_ofget_value_kindis_primitive_containertype_str)BoxDictKeyTypeMetadataNode)ReadonlyConfigErrorUnsupportedValueTypeValidationErrorc                       s2  e Zd ZU eed< ee eed fddZedddZ	d(eee
eef  dd	d
dZeddddZeedddZeeedddZedddZedddZeedddZeedddZedddZee
eef dddd Zedd!d"Zedd#d$Zeeeef  ed%d&d'Z  ZS ))	ValueNode_valparentvaluemetadatac                    sR   ddl m} t j||d ||  | | W d    n1 sD0    Y  d S )Nr   )
read_write)r   r   )	omegaconfr   super__init__
_set_value)selfr   r   r   r   	__class__ X/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/omegaconf/nodes.pyr       s    
zValueNode.__init__returnc                 C   s   | j S N)r   r"   r%   r%   r&   _value   s    zValueNode._valueNr   flagsr(   c                 C   sL   |  drtdt|tr<t|ddtjtjfv r<|| _n| 	|| _d S )Nreadonly)Cannot set value of read-only config nodeT)Zstrict_interpolation_validation)
	_get_flagr   
isinstancestrr   r
   ZINTERPOLATIONZMANDATORY_MISSINGr   validate_and_convertr"   r   r-   r%   r%   r&   r!   "   s    
zValueNode._set_valuer   r(   c                 C   s>   | j j}t|tr:t||ur:t| j j}td| dd S NzEValue '$VALUE' of type '$VALUE_TYPE' is incompatible with type hint '')	_metadataref_typer1   typer   	type_hintr   r"   r   r9   r;   r%   r%   r&   _strict_validate_type0   s    
zValueNode._strict_validate_typec                 C   s`   |du r6|   rdS t| jj}td| d| d| ddu rR| | |S | |S dS )z
        Validates input and converts to canonical form
        :param value: input value
        :return: converted value ("100" may be converted to 100 for example)
        NzIncompatible value 'z' for field of type 'r7   convertF)_is_optionalr   r8   r9   r   r0   r=   _validate_and_convert_impl)r"   r   Zref_type_strr%   r%   r&   r3   8   s    
zValueNode.validate_and_convertc                 C   s   d S r)   r%   r"   r   r%   r%   r&   r@   N   s    z$ValueNode._validate_and_convert_implc                 C   s
   t | jS r)   )r2   r   r*   r%   r%   r&   __str__R   s    zValueNode.__str__c                 C   s   t | drt| jS dS )Nr   Z__INVALID__)hasattrreprr   r*   r%   r%   r&   __repr__U   s    zValueNode.__repr__otherr(   c                 C   s$   t |tr| j|jkS | j|kS d S r)   )r1   AnyNoder   )r"   rG   r%   r%   r&   __eq__X   s    
zValueNode.__eq__c                 C   s   |  |}|tusJ | S r)   )rI   NotImplemented)r"   rG   xr%   r%   r&   __ne__^   s    
zValueNode.__ne__c                 C   s
   t | jS r)   hashr   r*   r%   r%   r&   __hash__c   s    zValueNode.__hash__)resmemor(   c                 C   s2   t j| j|d|jd< | j|jd< | j|jd< d S )N)rQ   r8   r   _parent)copydeepcopyr8   __dict__r   rR   )r"   rP   rQ   r%   r%   r&   _deepcopy_implf   s    zValueNode._deepcopy_implc                 C   s   | j jS r)   )r8   optionalr*   r%   r%   r&   r?   n   s    zValueNode._is_optionalc                 C   s   t |  S r)   )r   r+   r*   r%   r%   r&   r   q   s    zValueNode._is_interpolation)keyr(   c                 C   s@   |   }|d u r.| jjd u r dS t| jjS n|| jjS d S )N )Z_get_parentr8   rX   r2   _get_full_key)r"   rX   r   r%   r%   r&   rZ   t   s    zValueNode._get_full_key)N)__name__
__module____qualname__r   __annotations__r   r   r   r    r+   r   r2   boolr!   r=   r3   r   r@   rB   rE   rI   rL   intrO   rV   r?   r   r	   r   rZ   __classcell__r%   r%   r#   r&   r      s"   
 r   c                       sb   e Zd Zdeeee eeeef  d fddZ	eedddZ
eeef d dd	d
Z  ZS )rH   Nr   rX   r   r-   c              
      s$   t  j||ttd |d|dd d S )NTr9   object_typerX   rW   r-   r   )r   r    r   r   r"   r   rX   r   r-   r#   r%   r&   r       s    
zAnyNode.__init__r5   c                 C   s@   ddl m} | ddur<||s<t|}td|j d|S )N   )is_primitive_type_annotationZallow_objectsTzValue 'z#' is not a supported primitive type)_utilsrg   r0   r   r   r[   )r"   r   rg   tr%   r%   r&   r@      s    z"AnyNode._validate_and_convert_implrQ   r(   c                 C   s   t  }| || |S r)   )rH   rV   r"   rQ   rP   r%   r%   r&   __deepcopy__   s    zAnyNode.__deepcopy__)NNNN)r[   r\   r]   r   r   r   r   r2   r_   r    r@   r`   rl   ra   r%   r%   r#   r&   rH      s       rH   c                	       sd   e Zd Zdeeee eeeeef  d fddZ	eedddZ
eeef d d	d
dZ  ZS )
StringNodeNTr   rX   r   is_optionalr-   c              
      s$   t  j||t||tt|dd d S NrX   rW   r9   rd   r-   r   )r   r    r   r2   r"   r   rX   r   ro   r-   r#   r%   r&   r       s    zStringNode.__init__r5   c                 C   s8   ddl m} ||s(t|s(t|tr0tdt|S )Nr   )	OmegaConfz0Cannot convert '$VALUE_TYPE' to string: '$VALUE')r   rs   Z	is_configr   r1   bytesr   r2   )r"   r   rs   r%   r%   r&   r@      s    z%StringNode._validate_and_convert_implrj   c                 C   s   t  }| || |S r)   )rm   rV   rk   r%   r%   r&   rl      s    zStringNode.__deepcopy__)NNNTNr[   r\   r]   r   r   r   r_   r   r2   r    r@   r`   rl   ra   r%   r%   r#   r&   rm      s        rm   c                	       st   e Zd Zdeeee eeeeef  d fddZ	eddddZ
eedd	d
Zeeef d dddZ  ZS )PathNodeNTrn   c              
      s$   t  j||t||tt|dd d S rp   )r   r    r   r   rr   r#   r%   r&   r       s    zPathNode.__init__r5   c                 C   s   t |tstdd S )NzIValue '$VALUE' of type '$VALUE_TYPE' is not an instance of 'pathlib.Path')r1   r   r   rA   r%   r%   r&   r=      s    
zPathNode._strict_validate_typec                 C   s   t |ttfstdt|S )NzCValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Path)r1   r2   r   r   rA   r%   r%   r&   r@      s
    z#PathNode._validate_and_convert_implrj   c                 C   s   t  }| || |S r)   )rv   rV   rk   r%   r%   r&   rl      s    zPathNode.__deepcopy__)NNNTN)r[   r\   r]   r   r   r   r_   r   r2   r    r=   r   r@   r`   rl   ra   r%   r%   r#   r&   rv      s        rv   c                	       sd   e Zd Zdeeee eeeeef  d fddZ	ee
dddZee
ef d d	d
dZ  ZS )IntegerNodeNTrn   c              
      s$   t  j||t||tt|dd d S rp   )r   r    r   r`   rr   r#   r%   r&   r       s    zIntegerNode.__init__r5   c                 C   sD   z$t |ttfv rt|}nt W n ty>   tdY n0 |S )NzFValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Integer)r:   r2   r`   
ValueErrorr   )r"   r   valr%   r%   r&   r@   	  s    


z&IntegerNode._validate_and_convert_implrj   c                 C   s   t  }| || |S r)   )rw   rV   rk   r%   r%   r&   rl     s    zIntegerNode.__deepcopy__)NNNTN)r[   r\   r]   r   r   r   r_   r   r2   r    r`   r@   rl   ra   r%   r%   r#   r&   rw      s        rw   c                	       sd   e Zd Zdeeee eeeeef  d fddZ	ee
dddZeeef d d	d
dZ  ZS )	BytesNodeNTrn   c              
      s$   t  j||t||tt|dd d S rp   )r   r    r   rt   rr   r#   r%   r&   r      s    zBytesNode.__init__r5   c                 C   s   t |tstd|S )Nz;Value '$VALUE' of type '$VALUE_TYPE' is not of type 'bytes')r1   rt   r   rA   r%   r%   r&   r@   0  s
    
z$BytesNode._validate_and_convert_implrj   c                 C   s   t  }| || |S r)   )rz   rV   rk   r%   r%   r&   rl   7  s    zBytesNode.__deepcopy__)NNNTN)r[   r\   r]   r   r   r   r_   r   r2   r    rt   r@   r`   rl   ra   r%   r%   r#   r&   rz     s        rz   c                	       s   e Zd Zdeeee eeeeef  d fddZ	ee
dddZeed	d
dZedddZeeef d dddZ  ZS )	FloatNodeNTrn   c              
      s$   t  j||t||tt|dd d S rp   )r   r    r   floatrr   r#   r%   r&   r    >  s    zFloatNode.__init__r5   c                 C   sF   z&t |tttfv rt|W S t W n ty@   tdY n0 d S )NzDValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Float)r:   r|   r2   r`   rx   r   rA   r%   r%   r&   r@   R  s    

z$FloatNode._validate_and_convert_implrF   c                 C   s   t |tr|j}n|}| jd u r,|d u r,dS | jd u rB|d urBdS | jd urX|d u rXdS t | jtrpt| jnd}t |trt|nd}| j|kp|o|S )NTF)r1   r   r   r|   mathisnan)r"   rG   Z	other_valZnan1Znan2r%   r%   r&   rI   ]  s    
zFloatNode.__eq__r'   c                 C   s
   t | jS r)   rM   r*   r%   r%   r&   rO   l  s    zFloatNode.__hash__rj   c                 C   s   t  }| || |S r)   )r{   rV   rk   r%   r%   r&   rl   o  s    zFloatNode.__deepcopy__)NNNTN)r[   r\   r]   r   r   r   r_   r   r2   r    r|   r@   rI   r`   rO   rl   ra   r%   r%   r#   r&   r{   =  s         r{   c                	       sd   e Zd Zdeeee eeeeef  d fddZ	eedddZ
eeef d d	d
dZ  ZS )BooleanNodeNTrn   c              
      s$   t  j||t||tt|dd d S rp   )r   r    r   r_   rr   r#   r%   r&   r    v  s    zBooleanNode.__init__r5   c              
   C   s   t |tr|S t |tr |dkS t |trz| t|W S  ty } zX| dv rdW Y d }~dS | dv r~W Y d }~dS tdt	
 d |W Y d }~qd }~0 0 ntdd S )Nr   )yesyontrueT)nonofffalseFz5Value '$VALUE' is not a valid bool (type $VALUE_TYPE)   )r1   r_   r`   r2   r@   rx   lowerr   with_tracebacksysexc_info)r"   r   er%   r%   r&   r@     s,    



z&BooleanNode._validate_and_convert_implrj   c                 C   s   t  }| || |S r)   )r   rV   rk   r%   r%   r&   rl     s    zBooleanNode.__deepcopy__)NNNTNru   r%   r%   r#   r&   r   u  s        r   c                
       s   e Zd ZdZdee eeeef  e	ee
 eeeeef  d fddZe	dddd	Ze	edd
dZeee e	edddZeee	f d dddZ  ZS )EnumNodeaQ  
    NOTE: EnumNode is serialized to yaml as a string ("Color.BLUE"), not as a fully qualified yaml type.
    this means serialization to YAML of a typed config (with EnumNode) will not retain the type of the Enum
    when loaded.
    This is intentional, Please open an issue against OmegaConf if you wish to discuss this decision.
    NT)	enum_typer   rX   r   ro   r-   c           	   
      st   t |trt|ts$td| di | _|| _|j D ]\}}|j	| j|< q:t
 j||t|||||dd d S )Nz.EnumNode can only operate on Enum subclasses ()rq   r   )r1   r:   
issubclassr   r   fieldsr   __members__itemsr   r   r    r   )	r"   r   r   rX   r   ro   r-   nameZconstantr#   r%   r&   r      s&    	
zEnumNode.__init__r5   c                 C   s2   | j j}t||s.t| j j}td| dd S r6   )r8   r9   r1   r   r;   r   r<   r%   r%   r&   r=     s    

zEnumNode._strict_validate_typec                 C   s   | j | j|dS )N)r   r   )validate_and_convert_to_enumr   rA   r%   r%   r&   r@     s    z#EnumNode._validate_and_convert_impl)r   r   r(   c              
   C   s
  t |ttfs&t || s&td|  t || r4|S zlt |ttfrHtt |tr\| |W S t |tr| j d}||r|t	|d  }| | W S dsJ W nd tt
fy } zFddd | j D }td| dt d	 |W Y d }~n
d }~0 0 d S )
Nz4Value $VALUE ($VALUE_TYPE) is not a valid input for .Fz, c                 S   s   g | ]}|qS r%   r%   ).0rK   r%   r%   r&   
<listcomp>      z9EnumNode.validate_and_convert_to_enum.<locals>.<listcomp>z)Invalid value '$VALUE', expected one of []r   )r1   r2   r`   r   r|   r_   rx   r[   
startswithlenKeyErrorjoinr   keysr   r   r   )r   r   prefixr   Zvalidr%   r%   r&   r     s4    







z%EnumNode.validate_and_convert_to_enumrj   c                 C   s   t | jd}| || |S )N)r   )r   r   rV   rk   r%   r%   r&   rl     s    zEnumNode.__deepcopy__)NNNTN)r[   r\   r]   __doc__r   r   r   r	   r2   r   r   r_   r   r    r=   r@   staticmethodr   r`   rl   ra   r%   r%   r#   r&   r     s&   
     r   c                       s   e Zd ZdZdeeee eeee	f  d fddZ
deeeee	f  ddddZeed	d
dZeeef d dddZe	dddZ  ZS )InterpolationResultNodez@
    Special node type, used to wrap interpolation results.
    Nrb   c              
      s@   t  j||ttd |d|dd |d u s0d|vr<| dd d S )NTrc   r   r.   )r   r    r   r   Z	_set_flagre   r#   r%   r&   r       s    
z InterpolationResultNode.__init__r,   c                 C   s"   |  drtd| || _d S )Nr.   r/   )r0   r   r3   r   r4   r%   r%   r&   r!     s    
z"InterpolationResultNode._set_valuer5   c                 C   s   |S r)   r%   rA   r%   r%   r&   r@     s    z2InterpolationResultNode._validate_and_convert_implrj   c                 C   s   t d S r)   )NotImplementedError)r"   rQ   r%   r%   r&   rl     s    z$InterpolationResultNode.__deepcopy__r'   c                 C   s   dS )NFr%   r*   r%   r%   r&   r     s    z)InterpolationResultNode._is_interpolation)NNN)N)r[   r\   r]   r   r   r   r   r   r2   r_   r    r!   r@   r`   rl   r   ra   r%   r%   r#   r&   r     s       r   ))rS   r}   r   abcr   enumr   pathlibr   typingr   r   r   r   r	   Zomegaconf._utilsr
   r   r   r   r   r   Zomegaconf.baser   r   r   r   Zomegaconf.errorsr   r   r   r   rH   rm   rv   rw   rz   r{   r   r   r   r%   r%   r%   r&   <module>   s&    j&&)'"81U