o
    ڷiGD                     @   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                       sJ  e Zd ZU eed< dee dedef fddZdefdd	Z	d*dedee
eef  dd
fddZdedd
fddZdedefddZededefddZdefddZdefddZdedefddZdedefddZdefddZded e
eef dd
fd!d"Zdefd#d$Zdefd%d&Zd'eeeef  defd(d)Z  ZS )+	ValueNode_valparentvaluemetadatac                    sT   ddl m} t j||d ||  | | W d    d S 1 s#w   Y  d S )Nr   )
read_write)r   r   )	omegaconfr   super__init__
_set_value)selfr   r   r   r   	__class__ E/home/ubuntu/vllm_env/lib/python3.10/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flagsc                 C   sN   |  dr	tdt|trt|ddtjtjfv r|| _d S | 	|| _d S )Nreadonly)Cannot set value of read-only config nodeT)strict_interpolation_validation)
	_get_flagr   
isinstancestrr   r
   INTERPOLATIONMANDATORY_MISSINGr   validate_and_convertr!   r   r*   r$   r$   r%   r    "   s   

zValueNode._set_valuec                 C   sB   | j j}t|trt||urt| j j}td| dd S d S NzEValue '$VALUE' of type '$VALUE_TYPE' is incompatible with type hint '')	_metadataref_typer/   typer   	type_hintr   r!   r   r8   r:   r$   r$   r%   _strict_validate_type0   s   
zValueNode._strict_validate_typec                 C   s\   |du r|   r
dS t| jj}td| d| d| ddu r)| | |S | |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 'r6   convertF)_is_optionalr   r7   r8   r   r.   r<   _validate_and_convert_impl)r!   r   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      z$ValueNode._validate_and_convert_implc                 C   
   t | jS r'   )r0   r   r(   r$   r$   r%   __str__R      
zValueNode.__str__c                 C   s   t | dr
t| jS dS )Nr   __INVALID__)hasattrreprr   r(   r$   r$   r%   __repr__U   s   zValueNode.__repr__otherc                 C   s    t |tr| j|jkS | j|kS r'   )r/   AnyNoder   )r!   rJ   r$   r$   r%   __eq__X   s   

zValueNode.__eq__c                 C   s   |  |}|tusJ | S r'   )rL   NotImplemented)r!   rJ   xr$   r$   r%   __ne__^   s   
zValueNode.__ne__c                 C   rC   r'   hashr   r(   r$   r$   r%   __hash__c   rE   zValueNode.__hash__resmemoc                 C   s2   t j| j|d|jd< | j|jd< | j|jd< d S )N)rT   r7   r   _parent)copydeepcopyr7   __dict__r   rU   )r!   rS   rT   r$   r$   r%   _deepcopy_implf   s   zValueNode._deepcopy_implc                 C   s   | j jS r'   )r7   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keyc                 C   s:   |   }|d u r| jjd u rdS t| jjS || jjS )N )_get_parentr7   r[   r0   _get_full_key)r!   r[   r   r$   r$   r%   r^   t   s   zValueNode._get_full_keyr'   )__name__
__module____qualname__r   __annotations__r   r   r   r   r)   r   r0   boolr    r<   r3   r   r?   rD   rI   rL   rO   intrR   rY   r>   r   r	   r   r^   __classcell__r$   r$   r"   r%   r      s$   
 $&r   c                       st   e Zd Z				ddededee deeeef  f fddZ	dedefd	d
Z
deeef dd fddZ  ZS )rK   Nr   r[   r   r*   c              
      s$   t  j||ttd |d|dd d S )NTr8   object_typer[   rZ   r*   r   r   r   )r   r   r   r   r!   r   r[   r   r*   r"   r$   r%   r      s   

zAnyNode.__init__r&   c                 C   s@   ddl m} | ddur||st|}td|j d|S )N   )is_primitive_type_annotationallow_objectsTzValue 'z#' is not a supported primitive type)_utilsrk   r.   r   r   r_   )r!   r   rk   tr$   r$   r%   r?      s   z"AnyNode._validate_and_convert_implrT   c                 C      t  }| || |S r'   )rK   rY   r!   rT   rS   r$   r$   r%   __deepcopy__      zAnyNode.__deepcopy__)NNNN)r_   r`   ra   r   r   r   r   r0   rc   r   r?   rd   rq   re   r$   r$   r"   r%   rK      s     "rK   c                       sz   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
efddZ
deeef d
d fddZ  ZS )
StringNodeNTr   r[   r   is_optionalr*   c              
      $   t  j||t||tt|dd d S Nr[   rZ   r8   rg   r*   rh   )r   r   r   r0   r!   r   r[   r   rt   r*   r"   r$   r%   r         
zStringNode.__init__r&   c                 C   s8   ddl m} ||st|st|trtdt|S )Nr   )	OmegaConfz0Cannot convert '$VALUE_TYPE' to string: '$VALUE')r   rz   	is_configr   r/   bytesr   r0   )r!   r   rz   r$   r$   r%   r?      s   z%StringNode._validate_and_convert_implrT   c                 C   ro   r'   )rs   rY   rp   r$   r$   r%   rq      rr   zStringNode.__deepcopy__NNNTNr_   r`   ra   r   r   r   rc   r   r0   r   r?   rd   rq   re   r$   r$   r"   r%   rs      s&    "rs   c                       s   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
dfddZ
ded
efddZdeeef d
d fddZ  ZS )PathNodeNTr   r[   r   rt   r*   c              
      ru   rv   )r   r   r   r   rx   r"   r$   r%   r      ry   zPathNode.__init__r&   c                 C   s   t |ts	tdd S )NzIValue '$VALUE' of type '$VALUE_TYPE' is not an instance of 'pathlib.Path')r/   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)r/   r0   r   r   rA   r$   r$   r%   r?      s
   z#PathNode._validate_and_convert_implrT   c                 C   ro   r'   )r   rY   rp   r$   r$   r%   rq      rr   zPathNode.__deepcopy__r}   )r_   r`   ra   r   r   r   rc   r   r0   r   r<   r   r?   rd   rq   re   r$   r$   r"   r%   r      s(    "r   c                       sz   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
e
fddZdee
ef d
d fddZ  ZS )IntegerNodeNTr   r[   r   rt   r*   c              
      ru   rv   )r   r   r   rd   rx   r"   r$   r%   r      ry   zIntegerNode.__init__r&   c                 C   s<   zt |ttfv rt|}W |S t  ty   tdw )NzFValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Integer)r9   r0   rd   
ValueErrorr   )r!   r   valr$   r$   r%   r?   	  s   
z&IntegerNode._validate_and_convert_implrT   c                 C   ro   r'   )r   rY   rp   r$   r$   r%   rq     rr   zIntegerNode.__deepcopy__r}   )r_   r`   ra   r   r   r   rc   r   r0   r   rd   r?   rq   re   r$   r$   r"   r%   r      s&    "r   c                       sz   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
e
fddZdeeef d
d fddZ  ZS )	BytesNodeNTr   r[   r   rt   r*   c              
      ru   rv   )r   r   r   r|   rx   r"   r$   r%   r     ry   zBytesNode.__init__r&   c                 C   s   t |ts	td|S )Nz;Value '$VALUE' of type '$VALUE_TYPE' is not of type 'bytes')r/   r|   r   rA   r$   r$   r%   r?   0  s
   
z$BytesNode._validate_and_convert_implrT   c                 C   ro   r'   )r   rY   rp   r$   r$   r%   rq   7  rr   zBytesNode.__deepcopy__r}   )r_   r`   ra   r   r   r   rc   r   r0   r   r|   r?   rd   rq   re   r$   r$   r"   r%   r     s&    "r   c                       s   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
e
fddZded
efddZd
efddZdeeef d
d fddZ  ZS )	FloatNodeNTr   r[   r   rt   r*   c              
      ru   rv   )r   r   r   floatrx   r"   r$   r%   r   >  ry   zFloatNode.__init__r&   c                 C   s:   zt |tttfv rt|W S t  ty   tdw )NzDValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Float)r9   r   r0   rd   r   r   rA   r$   r$   r%   r?   R  s   
z$FloatNode._validate_and_convert_implrJ   c                 C   s   t |tr	|j}n|}| jd u r|d u rdS | jd u r!|d ur!dS | jd ur,|d u r,dS t | jtr8t| jnd}t |trDt|nd}| j|kpN|oN|S )NTF)r/   r   r   r   mathisnan)r!   rJ   	other_valnan1nan2r$   r$   r%   rL   ]  s   
zFloatNode.__eq__c                 C   rC   r'   rP   r(   r$   r$   r%   rR   l  rE   zFloatNode.__hash__rT   c                 C   ro   r'   )r   rY   rp   r$   r$   r%   rq   o  rr   zFloatNode.__deepcopy__r}   )r_   r`   ra   r   r   r   rc   r   r0   r   r   r?   rL   rd   rR   rq   re   r$   r$   r"   r%   r   =  s*    "r   c                       sz   e Zd Z					ddededee dedeeeef  f
 fdd	Z	ded
efddZ
deeef d
d fddZ  ZS )BooleanNodeNTr   r[   r   rt   r*   c              
      ru   rv   )r   r   r   rc   rx   r"   r$   r%   r   v  ry   zBooleanNode.__init__r&   c              
   C   s   t |tr|S t |tr|dkS t |trPz| t|W S  tyO } z&| dv r2W Y d }~dS | dv r?W Y d }~dS tdt	
 d |d }~ww td)Nr   )yesyontrueT)nonofffalseFz5Value '$VALUE' is not a valid bool (type $VALUE_TYPE)   )r/   rc   rd   r0   r?   r   lowerr   with_tracebacksysexc_info)r!   r   er$   r$   r%   r?     s,   



z&BooleanNode._validate_and_convert_implrT   c                 C   ro   r'   )r   rY   rp   r$   r$   r%   rq     rr   zBooleanNode.__deepcopy__r}   r~   r$   r$   r"   r%   r   u  s&    "r   c                       s   e Zd ZdZ					ddee deeeef  de	dee
 ded	eeeef  f fd
dZde	ddfddZde	defddZedee de	defddZdeee	f dd f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   r[   r   rt   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 ()rw   rh   )r/   r9   
issubclassr   r   fieldsr   __members__itemsr   r   r   r   )	r!   r   r   r[   r   rt   r*   nameconstantr"   r$   r%   r     s&   	

zEnumNode.__init__r&   c                 C   s2   | j j}t||st| j j}td| dd S r5   )r7   r8   r/   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_implc              
   C   s   t |ttfst || std|  t || r|S z2t |ttfr$tt |tr.| |W S t |trK| j d}||rF|t	|d  }| | W S J  tt
fyw } zddd | j D }td| dt d	 |d }~ww )
Nz4Value $VALUE ($VALUE_TYPE) is not a valid input for .Fz, c                 S   s   g | ]}|qS r$   r$   ).0rN   r$   r$   r%   
<listcomp>  s    z9EnumNode.validate_and_convert_to_enum.<locals>.<listcomp>z)Invalid value '$VALUE', expected one of []r   )r/   r0   rd   r   r   rc   r   r_   
startswithlenKeyErrorjoinr   keysr   r   r   )r   r   prefixr   validr$   r$   r%   r     s4   






z%EnumNode.validate_and_convert_to_enumrT   c                 C   s   t | jd}| || |S )N)r   )r   r   rY   rp   r$   r$   r%   rq     s   zEnumNode.__deepcopy__r}   )r_   r`   ra   __doc__r   r   r   r	   r0   r   r   rc   r   r   r<   r?   staticmethodr   rd   rq   re   r$   r$   r"   r%   r     s2    
"r   c                       s   e Zd ZdZ			ddededee deeee	f  f fddZ
ddedeeee	f  d	dfd
dZded	efddZdeeef d	d fddZd	e	fddZ  ZS )InterpolationResultNodez@
    Special node type, used to wrap interpolation results.
    Nr   r[   r   r*   c              
      sD   t  j||ttd |d|dd |d u sd|vr | dd d S d S )NTrf   rh   r+   )r   r   r   r   	_set_flagri   r"   r$   r%   r      s   
z InterpolationResultNode.__init__r&   c                 C   s"   |  dr	td| || _d S )Nr+   r,   )r.   r   r3   r   r4   r$   r$   r%   r      s   
z"InterpolationResultNode._set_valuec                 C   s   |S r'   r$   rA   r$   r$   r%   r?     rB   z2InterpolationResultNode._validate_and_convert_implrT   c                 C   s   t r'   )NotImplementedError)r!   rT   r$   r$   r%   rq     rB   z$InterpolationResultNode.__deepcopy__c                 C   s   dS )NFr$   r(   r$   r$   r%   r     rB   z)InterpolationResultNode._is_interpolation)NNNr'   )r_   r`   ra   r   r   r   r   r   r0   rc   r   r    r?   rd   rq   r   re   r$   r$   r"   r%   r     s$    $r   ))rV   r   r   abcr   enumr   pathlibr   typingr   r   r   r   r	   omegaconf._utilsr
   r   r   r   r   r   omegaconf.baser   r   r   r   omegaconf.errorsr   r   r   r   rK   rs   r   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s(     j&&)'"81U