
    NgGD                        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
e          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de          Z% G d de          Z& G d de          Z' G 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                   n    e Zd ZU eed<   dee         dedef fdZdefdZ	dded	ee
eef                  ddfd
ZdeddfdZdedefdZededefd            ZdefdZdefdZdedefdZdedefdZdefdZdede
eef         ddfdZdefdZdefdZdeeeef                  defdZ xZS )	ValueNode_valparentvaluemetadatac                     ddl m} t                                          ||            ||           5  |                     |           d d d            d S # 1 swxY w Y   d S )Nr   )
read_write)r   r   )	omegaconfr   super__init__
_set_value)selfr   r   r   r   	__class__s        K/var/www/html/ai-engine/env/lib/python3.11/site-packages/omegaconf/nodes.pyr"   zValueNode.__init__   s    ((((((:::Z 	# 	#OOE"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AA Areturnc                     | j         S N)r   r$   s    r&   _valuezValueNode._value   s
    y    Nflagsc                    |                      d          rt          d          t          |t                    r2t	          |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-   s      r&   r#   zValueNode._set_value"   s    >>*%% 	S%&QRRReS!! 	9n4'
 '
 '
 #'
'
 '
 DIII11%88DIIIr,   c                     | 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_typer3   typer   	type_hintr   r$   r   r=   r?   s       r&   _strict_validate_typezValueNode._strict_validate_type0   sq    >*h%% 	$u++X*E*E !9::I!dXaddd  	 	*E*Er,   c                    |E|                                  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 'r;   convertF)_is_optionalr   r<   r=   r   r2   rA   _validate_and_convert_impl)r$   r   ref_type_strs      r&   r7   zValueNode.validate_and_convert8   s     =  "" t#DN$;<<L!RuRR<RRR   >>)$$--&&u---L225999r,   c                     d S r)    r$   r   s     r&   rE   z$ValueNode._validate_and_convert_implN   s    r,   c                 *    t          | j                  S r)   )r4   r   r*   s    r&   __str__zValueNode.__str__R   s    49~~r,   c                 N    t          | d          rt          | j                  ndS )Nr   __INVALID__)hasattrreprr   r*   s    r&   __repr__zValueNode.__repr__U   s#    ")$"7"7JtDI]Jr,   otherc                 b    t          |t                    r| j        |j        k    S | j        |k    S r)   )r3   AnyNoder   )r$   rQ   s     r&   __eq__zValueNode.__eq__X   s0    eW%% 	&9
**9%%r,   c                 H    |                      |          }|t          usJ | S r)   )rT   NotImplemented)r$   rQ   xs      r&   __ne__zValueNode.__ne__^   s+    KK&&&&ur,   c                 *    t          | j                  S r)   hashr   r*   s    r&   __hash__zValueNode.__hash__c       DIr,   resmemoc                     t          j        | j        |          |j        d<   | j        |j        d<   | j        |j        d<   d S )N)r_   r<   r   _parent)copydeepcopyr<   __dict__r   ra   )r$   r^   r_   s      r&   _deepcopy_implzValueNode._deepcopy_implf   sC    $(M$.t$L$L$L[!#yV #',Yr,   c                     | j         j        S r)   )r<   optionalr*   s    r&   rD   zValueNode._is_optionaln   s    ~&&r,   c                 D    t          |                                           S r)   )r   r+   r*   s    r&   r   zValueNode._is_interpolationq   s     ///r,   keyc                     |                                  }|'| j        j        dS t          | j        j                  S |                    | j        j                  S )N )_get_parentr<   ri   r4   _get_full_key)r$   ri   r   s      r&   rm   zValueNode._get_full_keyt   sT    !!##>~!)r4>-...''(:;;;r,   r)   )__name__
__module____qualname__r   __annotations__r   r   r   r"   r+   r   r4   boolr#   rA   r7   r   rE   rK   rP   rT   rX   intr\   re   rD   r   r
   r   rm   __classcell__r%   s   @r&   r   r      s\        
III#x} #S #H # # # # # #    9 9 9HT#t)_,E 9QU 9 9 9 93 4    :# :# : : : :,      ^    K# K K K K&C &D & & & &C D    
#    /# /T#s(^ / / / / /'d ' ' ' '04 0 0 0 0<%S0@*A!B <s < < < < < < < <r,   r   c                        e Zd Z	 	 	 	 ddededee         deeeef                  f fdZ	dedefdZ
d	eeef         dd fd
Z xZS )rS   Nr   ri   r   r-   c                 ~    t                                          ||t          t          d |d|                     d S )NTr=   object_typeri   rg   r-   r   r   r   )r!   r"   r   r   r$   r   ri   r   r-   r%   s        r&   r"   zAnyNode.__init__   sS     	$C$e   	 	
 	
 	
 	
 	
r,   r'   c                     ddl m} |                     d          dur2 ||          s't          |          }t	          d|j         d          |S )N   )is_primitive_type_annotationallow_objectsTzValue 'z#' is not a supported primitive type)_utilsr~   r2   r   r   rn   )r$   r   r~   ts       r&   rE   z"AnyNode._validate_and_convert_impl   s    888888 >>
 
 ::5AA E""A&I!*III   r,   r_   c                 N    t                      }|                     ||           |S r)   )rS   re   r$   r_   r^   s      r&   __deepcopy__zAnyNode.__deepcopy__   s&    iiC&&&
r,   )NNNN)rn   ro   rp   r   r   r   r   r4   rr   r"   rE   rs   r   rt   ru   s   @r&   rS   rS      s          $+/
 

 
 	

 S$Y(
 
 
 
 
 
      c3h I        r,   rS   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	efd
Z
deeef         d	d fdZ xZS )
StringNodeNTr   ri   r   is_optionalr-   c                     t                                          ||t          ||t          t          |                     d S Nri   rg   r=   ry   r-   rz   )r!   r"   r   r4   r$   r   ri   r   r   r-   r%   s         r&   r"   zStringNode.__init__   W     	$   	 
	
 
	
 
	
 
	
 
	
r,   r'   c                     ddl m} |                    |          s$t          |          st	          |t
                    rt          d          t          |          S )Nr   )	OmegaConfz0Cannot convert '$VALUE_TYPE' to string: '$VALUE')r    r   	is_configr   r3   bytesr   r4   )r$   r   r   s      r&   rE   z%StringNode._validate_and_convert_impl   sp    '''''' &&	V%e,,	V %''	V
 ""TUUU5zzr,   r_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zStringNode.__deepcopy__   s&    llC&&&
r,   NNNTNrn   ro   rp   r   r   r   rr   r   r4   r"   rE   rs   r   rt   ru   s   @r&   r   r      s          $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(	 	 	 	 	 	c3h L        r,   r   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	dfd
Z
ded	efdZdeeef         d	d fdZ xZS )PathNodeNTr   ri   r   r   r-   c                     t                                          ||t          ||t          t          |                     d S r   )r!   r"   r   r   r   s         r&   r"   zPathNode.__init__   W     	$    	 
	
 
	
 
	
 
	
 
	
r,   r'   c                 N    t          |t                    st          d          d S )NzIValue '$VALUE' of type '$VALUE_TYPE' is not an instance of 'pathlib.Path')r3   r   r   rI   s     r&   rA   zPathNode._strict_validate_type   s3    %&& 	![  	 	r,   c                 v    t          |t          t          f          st          d          t          |          S )NzCValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Path)r3   r4   r   r   rI   s     r&   rE   z#PathNode._validate_and_convert_impl   s;    %#t-- 	!U   E{{r,   r_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zPathNode.__deepcopy__   s&    jjC&&&
r,   r   )rn   ro   rp   r   r   r   rr   r   r4   r"   rA   r   rE   rs   r   rt   ru   s   @r&   r   r      s         $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(3 4         c3h J        r,   r   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	e
fd
Zdee
ef         d	d fdZ xZS )IntegerNodeNTr   ri   r   r   r-   c                     t                                          ||t          ||t          t          |                     d S r   )r!   r"   r   rs   r   s         r&   r"   zIntegerNode.__init__   r   r,   r'   c                     	 t          |          t          t          fv rt          |          }nt                      n# t          $ r t	          d          w xY w|S )NzFValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Integer)r>   r4   rs   
ValueErrorr   )r$   r   vals      r&   rE   z&IntegerNode._validate_and_convert_impl	  sq    	E{{sCj((%jj ll"   	 	 	!X  	 
s	   ;> Ar_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zIntegerNode.__deepcopy__  &    mmC&&&
r,   r   )rn   ro   rp   r   r   r   rr   r   r4   r"   rs   rE   r   rt   ru   s   @r&   r   r      s          $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(
 
 
 
 
 
c3h M        r,   r   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	e
fd
Zdeeef         d	d fdZ xZS )	BytesNodeNTr   ri   r   r   r-   c                     t                                          ||t          ||t          t          |                     d S r   )r!   r"   r   r   r   s         r&   r"   zBytesNode.__init__  W     	$!   	 
	
 
	
 
	
 
	
 
	
r,   r'   c                 N    t          |t                    st          d          |S )Nz;Value '$VALUE' of type '$VALUE_TYPE' is not of type 'bytes')r3   r   r   rI   s     r&   rE   z$BytesNode._validate_and_convert_impl0  s0    %'' 	!M   r,   r_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zBytesNode.__deepcopy__7  &    kkC&&&
r,   r   )rn   ro   rp   r   r   r   rr   r   r4   r"   r   rE   rs   r   rt   ru   s   @r&   r   r     s          $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(     c3h K        r,   r   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	e
fd
Zded	efdZd	efdZdeeef         d	d fdZ xZS )	FloatNodeNTr   ri   r   r   r-   c                     t                                          ||t          ||t          t          |                     d S r   )r!   r"   r   floatr   s         r&   r"   zFloatNode.__init__>  r   r,   r'   c                     	 t          |          t          t          t          fv rt          |          S t	                      # t          $ r t          d          w xY w)NzDValue '$VALUE' of type '$VALUE_TYPE' could not be converted to Float)r>   r   r4   rs   r   r   rI   s     r&   rE   z$FloatNode._validate_and_convert_implR  se    	E{{uc3///U||# ll" 	 	 	!V  	s   1A A ArQ   c                 `   t          |t                    r|j        }n|}| j        |dS | j        |dS | j        |dS t          | j        t                    rt	          j        | j                  nd}t          |t                    rt	          j        |          nd}| j        |k    p|o|S )NTF)r3   r   r   r   mathisnan)r$   rQ   	other_valnan1nan2s        r&   rT   zFloatNode.__eq__]  s    eY'' 	
III949!259 U]5(249e(D(DOtz$)$$$%(29e(D(DOtz)$$$%yI%8$-48r,   c                 *    t          | j                  S r)   rZ   r*   s    r&   r\   zFloatNode.__hash__l  r]   r,   r_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zFloatNode.__deepcopy__o  r   r,   r   )rn   ro   rp   r   r   r   rr   r   r4   r"   r   rE   rT   rs   r\   r   rt   ru   s   @r&   r   r   =  s         $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(	 	 	 	 	 	9C 9D 9 9 9 9#    c3h K        r,   r   c                        e Zd Z	 	 	 	 	 ddededee         dedeeeef                  f
 fdZ	ded	efd
Z
deeef         d	d fdZ xZS )BooleanNodeNTr   ri   r   r   r-   c                     t                                          ||t          ||t          t          |                     d S r   )r!   r"   r   rr   r   s         r&   r"   zBooleanNode.__init__v  r   r,   r'   c                    t          |t                    r|S t          |t                    r|dk    S t          |t                    r	 |                     t          |                    S # t
          $ rw}|                                dv rY d }~dS |                                dv rY d }~dS t          d                              t          j
                    d                   |d }~ww xY wt          d          )Nr   )yesyontrueT)nonofffalseFz5Value '$VALUE' is not a valid bool (type $VALUE_TYPE)   )r3   rr   rs   r4   rE   r   lowerr   with_tracebacksysexc_info)r$   r   es      r&   rE   z&BooleanNode._validate_and_convert_impl  s   eT"" 	LeS!! 	A:s## 	
?66s5zzBBB ? ? ?;;==$>>>44444[[]]&AAA 55555)O $nS\^^A%677Q?? "G  s$   	!A+ +
C,5C'C'-:C''C,r_   c                 N    t                      }|                     ||           |S r)   )r   re   r   s      r&   r   zBooleanNode.__deepcopy__  r   r,   r   r   ru   s   @r&   r   r   u  s          $ +/
 

 
 	

 
 S$Y(
 
 
 
 
 
(     ,c3h M        r,   r   c                       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
Zde	ddfdZde	defdZedee         de	defd            Zdeee	f         dd fdZ x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   ri   r   r   r-   c                 f   t          |t                    rt          |t                    st	          d| d          i | _        || _        |j                                        D ]\  }}|j	        | j        |<   t                                          ||t          |||||                     d S )Nz.EnumNode can only operate on Enum subclasses ()r   rz   )r3   r>   
issubclassr   r   fieldsr   __members__itemsr   r!   r"   r   )
r$   r   r   ri   r   r   r-   nameconstantr%   s
            r&   r"   zEnumNode.__init__  s     )T** 	*Y2M2M 	!MMMM   ')%.'399;; 	/ 	/ND( (DK$"%   	 
	
 
	
 
	
 
	
 
	
r,   r'   c                     | j         j        }t          ||          s,t          | j         j                  }t          d| d          d S r:   )r<   r=   r3   r   r?   r   r@   s       r&   rA   zEnumNode._strict_validate_type  s[    >*%** 	 !9::I!dXaddd  	 	r,   c                 :    |                      | j        |          S )N)r   r   )validate_and_convert_to_enumr   rI   s     r&   rE   z#EnumNode._validate_and_convert_impl  s    004>QV0WWWr,   c                    t          |t          t          f          s"t          ||           st          d|            t          ||           r|S 	 t          |t          t
          f          rt          t          |t                    r | |          S t          |t                    r>| j         d}|                    |          r|t          |          d          }| |         S J # t          t          f$ ry}d                    d | j                                        D                       }t          d| d                              t          j                    d                   |d }~ww xY w)	Nz4Value $VALUE ($VALUE_TYPE) is not a valid input for .Fz, c                     g | ]}|S rH   rH   ).0rW   s     r&   
<listcomp>z9EnumNode.validate_and_convert_to_enum.<locals>.<listcomp>  s    GGGQqGGGr,   z)Invalid value '$VALUE', expected one of []r   )r3   r4   rs   r   r   rr   r   rn   
startswithlenKeyErrorjoinr   keysr   r   r   )r   r   prefixr   valids        r&   r   z%EnumNode.validate_and_convert_to_enum  s   %#s,, 	Zy5Q5Q 	!RyRR   eY'' 	L	7%%// !  %%% ( y'''%%% (%.111##F++ 1!#f++--0E ''LH% 	7 	7 	7IIGG)*?*D*D*F*FGGGHHE!DEDDD nS\^^A.//Q7	7s'   AC* AC* (C* *E4;A4E//E4r_   c                 \    t          | j                  }|                     ||           |S )N)r   )r   r   re   r   s      r&   r   zEnumNode.__deepcopy__  s/    000C&&&
r,   r   )rn   ro   rp   __doc__r	   r   r   r
   r4   r   r   rr   r   r"   rA   rE   staticmethodr   rs   r   rt   ru   s   @r&   r   r     sg         -1 $ +/
 
:
 dCi()
 	

 
 
 S$Y(
 
 
 
 
 
:3 4    X X X X X X 7T
 73 74 7 7 7 \7<c3h J        r,   r   c                        e Zd ZdZ	 	 	 ddededee         deeee	f                  f fdZ
ddedeeee	f                  ddfd	Zdedefd
Zdeeef         dd fdZde	fdZ xZS )InterpolationResultNodez@
    Special node type, used to wrap interpolation results.
    Nr   ri   r   r-   c                     t                                          ||t          t          d |d|                     |d|vr|                     dd           d S d S )NTrx   rz   r/   )r!   r"   r   r   	_set_flagr{   s        r&   r"   z InterpolationResultNode.__init__   s|     	$C$e   	 	
 	
 	
 =Je33NN:t,,,,, 43r,   r'   c                     |                      d          rt          d          |                     |          | _        d S )Nr/   r0   )r2   r   r7   r   r8   s      r&   r#   z"InterpolationResultNode._set_value  s?    >>*%% 	S%&QRRR--e44			r,   c                     |S r)   rH   rI   s     r&   rE   z2InterpolationResultNode._validate_and_convert_impl  s    r,   r_   c                     t           r)   )NotImplementedError)r$   r_   s     r&   r   z$InterpolationResultNode.__deepcopy__  s    !!r,   c                     dS )NFrH   r*   s    r&   r   z)InterpolationResultNode._is_interpolation  s    ur,   )NNNr)   )rn   ro   rp   r   r   r   r   r   r4   rr   r"   r#   rE   rs   r   r   rt   ru   s   @r&   r   r     s2          $+/- -- - 	-
 S$Y(- - - - - -$5 5 5HT#t)_,E 5QU 5 5 5 5
     "c3h "4M " " " "4        r,   r   ))rb   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   rS   r   r   r   r   r   r   r   r   rH   r,   r&   <module>r      s     



                   3 3 3 3 3 3 3 3 3 3 3 3 3 3                < ; ; ; ; ; ; ; ; ; ; ; W W W W W W W W W Wg< g< g< g< g< g< g< g<T# # # # #i # # #L# # # # # # # #L& & & & &y & & &R$ $ $ $ $) $ $ $N    	   D5 5 5 5 5	 5 5 5p. . . . .) . . .bR R R R Ry R R Rj& & & & &i & & & & &r,   