
    ُkhGD                        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(y)    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                   D    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  | j	                  |       d d d        y # 1 sw Y   y xY w)Nr   )
read_write)r   r   )	omegaconfr   super__init__
_set_value)selfr   r   r   r   	__class__s        K/var/www/teggl/fontify/venv/lib/python3.12/site-packages/omegaconf/nodes.pyr"   zValueNode.__init__   sA    (: 	#OOE"	# 	# 	#s	   <Areturnc                     | j                   S N)r   r$   s    r&   _valuezValueNode._value   s    yy    Nflagsc                     | j                  d      rt        d      t        |t              r5t	        |d      t
        j                  t
        j                  fv r|| _        y | j                  |      | _        y )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"   si    >>*%%&QRReS!n4'
 ##''
'
 DI11%8DIr,   c                     | j                   j                  }t        |t              r<t        |      |ur.t	        | j                   j
                        }t        d| d      y y 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   s_    >>**h%$u+X*E !9!9:I!WXaWbbcd  +F%r,   c                     |B| j                         ryt        | j                  j                        }t	        d| d| d      | j                  d      du r| j                  |       |S | j                  |      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     =  "#DNN$;$;<L!&ug-B<.PQR  >>)$-&&u-L22599r,   c                      y 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    499~r,   c                 H    t        | d      rt        | j                        S dS )Nr   __INVALID__)hasattrreprr   r*   s    r&   __repr__zValueNode.__repr__U   s    ")$"7tDIIJ]Jr,   otherc                 r    t        |t              r| j                  |j                  k(  S | j                  |k(  S r)   )r3   AnyNoder   )r$   rQ   s     r&   __eq__zValueNode.__eq__X   s.    eW%99

**99%%r,   c                 >    | j                  |      }|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       DIIr,   resmemoc                     t        j                  | j                  |      |j                  d<   | j                  |j                  d<   | j
                  |j                  d<   y )N)r_   r<   r   _parent)copydeepcopyr<   __dict__r   ra   )r$   r^   r_   s      r&   _deepcopy_implzValueNode._deepcopy_implf   sE    $(MM$..t$L[!#yyV #',,Yr,   c                 .    | j                   j                  S r)   )r<   optionalr*   s    r&   rD   zValueNode._is_optionaln   s    ~~&&&r,   c                 4    t        | j                               S r)   )r   r+   r*   s    r&   r   zValueNode._is_interpolationq   s     //r,   keyc                     | j                         }|6| j                  j                  yt        | j                  j                        S |j	                  | j                  j                        S )N )_get_parentr<   ri   r4   _get_full_key)r$   ri   r   s      r&   rm   zValueNode._get_full_keyt   sX    !!#>~~!!)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      sJ   
I#x} #S #H # 9 9HT#t)_,E 9QU 93 4 :# :# :,     K# K&C &D &C D 
# /# /T#s(^ / /'d '04 0<%S0@*A!B <s <r,   r   c                   z     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   r   ri   r   r-   c                 N    t         |   ||t        t        d |d|             y )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__   s0     	$C$e 	 	
r,   r'   c                     ddl m} | j                  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)_utilsr~   r2   r   r   rn   )r$   r   r~   ts       r&   rE   z"AnyNode._validate_and_convert_impl   sU    8 >>
:5AE"A&!**%HI  r,   r_   c                 >    t               }| j                  ||       |S r)   )rS   re   r$   r_   r^   s      r&   __deepcopy__zAnyNode.__deepcopy__   s    i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 )
StringNoder   ri   r   is_optionalr-   c                 V    t         |   ||t        ||t        t        |             y Nri   rg   r=   ry   r-   rz   )r!   r"   r   r4   r$   r   ri   r   r   r-   r%   s         r&   r"   zStringNode.__init__   4     	$ 	 
	
r,   r'   c                     ddl m} |j                  |      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   s=    ' &%e,%'!"TUU5zr,   r_   c                 >    t               }| j                  ||       |S r)   )r   re   r   s      r&   r   zStringNode.__deepcopy__   s    l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 )PathNodeNr   ri   r   r   r-   c                 V    t         |   ||t        ||t        t        |             y r   )r!   r"   r   r   r   s         r&   r"   zPathNode.__init__   4     	$  	 
	
r,   r'   c                 :    t        |t              st        d      y )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   s!    %&![  'r,   c                 Z    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                 >    t               }| j                  ||       |S r)   )r   re   r   s      r&   r   zPathNode.__deepcopy__   s    j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 )IntegerNoder   ri   r   r   r-   c                 V    t         |   ||t        ||t        t        |             y r   )r!   r"   r   rs   r   s         r&   r"   zIntegerNode.__init__   r   r,   r'   c                     	 t        |      t        t        fv rt        |      }|S t               # t        $ r t	        d      w xY w)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	  sP    	E{sCj(%j 
 !l" 	!X 	s   "0 
0 Ar_   c                 >    t               }| j                  ||       |S r)   )r   re   r   s      r&   r   zIntegerNode.__deepcopy__      m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 )	BytesNoder   ri   r   r   r-   c                 V    t         |   ||t        ||t        t        |             y r   )r!   r"   r   r   r   s         r&   r"   zBytesNode.__init__  4     	$! 	 
	
r,   r'   c                 <    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  s#    %'!M  r,   r_   c                 >    t               }| j                  ||       |S r)   )r   re   r   s      r&   r   zBytesNode.__deepcopy__7      k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 )	FloatNoder   ri   r   r   r-   c                 V    t         |   ||t        ||t        t        |             y 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  sK    	E{uc3//U|# l" 	!V 	s   &3 
3 ArQ   c                    t        |t              r|j                  }n|}| j                  |y| j                  |y| j                  |yt        | j                  t              rt	        j
                  | j                        nd}t        |t              rt	        j
                  |      nd}| j                  |k(  xs |xr |S )NTF)r3   r   r   r   mathisnan)r$   rQ   	other_valnan1nan2s        r&   rT   zFloatNode.__eq__]  s    eY'

II9999!299 U](2499e(Dtzz$))$%(29e(Dtzz)$%yyI%8$-48r,   c                 ,    t        | j                        S r)   rZ   r*   s    r&   r\   zFloatNode.__hash__l  r]   r,   r_   c                 >    t               }| j                  ||       |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# 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 )BooleanNoder   ri   r   r   r-   c                 V    t         |   ||t        ||t        t        |             y 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k7  S t        |t              r	 | j	                  t        |            S t        d      # t
        $ rc}|j                         dv rY d }~y|j                         dv rY d }~yt        d      j                  t        j                         d         |d }~ww xY w)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6s5zBB "G   ?;;=$>>[[]&AA )O$nS\\^A%67Q??s#   A 	C
'C>C0CC
r_   c                 >    t               }| j                  ||       |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.
    N	enum_typer   ri   r   r   r-   c                 6   t        |t              rt        |t              st	        d| d      i | _        || _        |j                  j                         D ]  \  }}|j                  | j
                  |<     t        	| -  ||t        |||||             y )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2M!@1M  ')%.'3399; 	/ND( (DKK	/$"% 	 
	
r,   r'   c                     | j                   j                  }t        ||      s.t        | j                   j                        }t        d| d      y r:   )r<   r=   r3   r   r?   r   r@   s       r&   rA   zEnumNode._strict_validate_type  sP    >>**%* !9!9:I!WXaWbbcd  +r,   c                 <    | j                  | 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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              r3| j                   d}|j                  |      r|t        |      d  }| |   S J # t        t        f$ rv}dj                  | j                  j                         D cg c]  }| nc c}w c}      }t        d| d      j                  t        j                          d         |d }~ww xY w)Nz4Value $VALUE ($VALUE_TYPE) is not a valid input for .z, 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   rW   valids         r&   r   z%EnumNode.validate_and_convert_to_enum  s*   %#s,Zy5Q!FykR  eY'L	7%%/  %% ''%%%../q1##F+!#f+-0E ''5H% 	7II)*?*?*D*D*FGQqGGHE!;E7!DnS\\^A./Q7	7s2    3B9 4AB9 7B9 9D>'D9/	C9
8AD99D>r_   c                 V    t        | j                        }| j                  ||       |S )N)r   )r   r   re   r   s      r&   r   zEnumNode.__deepcopy__  s%    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     s     -1 $ +/
:
 dCi()
 	

 
 
 S$Y(
:3 4 X X X 7T
 73 74 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| j	                  dd       y y )NTrx   rz   r/   )r!   r"   r   r   	_set_flagr{   s        r&   r"   z InterpolationResultNode.__init__   sQ     	$C$e 	 	
 =Je3NN:t, 4r,   r'   c                 h    | j                  d      rt        d      | j                  |      | _        y )Nr/   r0   )r2   r   r7   r   r8   s      r&   r#   z"InterpolationResultNode._set_value  s,    >>*%%&QRR--e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                      y)NFrH   r*   s    r&   r   z)InterpolationResultNode._is_interpolation  s    r,   )NNNr)   )rn   ro   rp   r   r   r   r   r   r4   rr   r"   r#   rE   rs   r   r   rt   ru   s   @r&   r   r     s      $+/-- - 	-
 S$Y(-$5 5HT#t)_,E 5QU 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  < ; W Wg< g<T#i #L# #L&y &R$) $N	 D5	 5p.) .bRy Rj&i &r,   