a
    dk                     @   s*  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZ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mZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 dd	l8m9Z9m:Z: G d
d de-eeef Z;dS )    N)Enum)AnyDict	ItemsViewIterableIteratorKeysViewListMutableMappingOptionalSequenceTupleTypeUnion   )_DEFAULT_MARKER_	ValueKind
_get_value_is_interpolation_is_missing_literal_is_missing_value_is_none_resolve_optional_valid_dict_key_annotation_typeformat_and_raiseget_structured_config_data&get_structured_config_init_field_namesget_type_ofget_value_kindis_container_annotationis_dictis_primitive_dictis_structured_configis_structured_config_frozentype_str)Box	ContainerContainerMetadataDictKeyTypeNode)BaseContainer)	ConfigAttributeErrorConfigKeyErrorConfigTypeErrorInterpolationResolutionErrorKeyValidationErrorMissingMandatoryValueOmegaConfBaseExceptionReadonlyConfigErrorValidationError)EnumNode	ValueNodec                       s  e Zd ZU eed< eeeef de	f ed< dde
e
e
ddfeeee
f d e
f e
ee ee
ee
 f ee
ee
 f ee
ee
 f eeee	ef  dd	 fddZeee
f d dd	d
Zd dddZedddZdae
e
ddddZe
e
ddddZe
ddddZee e
ddddZe
e
e
ddddZe
edddZe
e
ed d!d"Zee
ddd#d$Zee
ddd%d&Zee	 dd'd(Ze	e
ddd)d*Ze	e
dd+d,Z ee
dd-d.Z!e	ddd/d0Z"eddd1d2Z#dbee
e
d3d4d5Z$dcee
ee
d6d7d8Z%ddeeeeeeee e&ee  f d:d;d<Z'e(fee
e
d=d>d?Z)e*e dd@dAZ+e,eddBdCZ-e.e ddDdEZ/e0ee
f ddFdGZ1deee
e
d=dHdIZ2dfeee3e  e&e4ee
f  dJdKdLZ5e
edMdNdOZ6e
edMdPdQZ7eddRdSZ8eee
  ddTdUdVZ9dge
eee	ef  ddWdXdYZ:dhe
eee	ef  ddWdZd[Z;e<d d ed\d]d^Z=e
dd_d`Z>  Z?S )i
DictConfig	_metadataN_contentT)	contentkeyparentref_typekey_typeelement_typeis_optionalflagsreturnc	                    s   zt |tr|d u r|jj}t j|t|||t|||dd t|sTt	d| t
|sdt
|r| j||d t|st|r| dd nLt |trt|j}	||	_||	_||	_||	_||	_|	| jd< | j||d W n< ty }
 z"td |d |
t|
d W Y d }
~
n
d }
~
0 0 d S )	N)r:   optionalr<   object_typer=   r>   r@   )r;   metadataUnsupported key type r@   readonlyTr7   )noder:   valuecausemsg)
isinstancer6   r7   r@   super__init__r'   dictr   r/   r"   
_set_valuer#   Z	_set_flagcopydeepcopyr:   r<   rB   r>   r=   __dict__	Exceptionr   str)selfr9   r:   r;   r<   r=   r>   r?   r@   rD   ex	__class__ ]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/omegaconf/dictconfig.pyrN   >   sF    



zDictConfig.__init__)memorA   c           	   
   C   s   t d }tj| jd |d|jd< tj| jd |d|jd< | jd }t|tri }| D ]X\}}|jd }z8d |jd< tj||d}||jd< |||< W ||jd< q\||jd< 0 q\n|}||jd< | jd |jd< |S )Nr7   )r\   Z_flags_cacher8   _parent)r6   rQ   rR   rS   rL   rO   items)	rV   r\   resZsrc_contentZcontent_copykvZ
old_parentZvcrZ   rZ   r[   __deepcopy__q   s(    







zDictConfig.__deepcopy__)rA   c                 C   s
   t  | S N)rQ   rV   rZ   rZ   r[   rQ      s    zDictConfig.copyc                 C   s   | j jtd fvot| j j S rc   )r7   rC   r   r    rd   rZ   rZ   r[   	_is_typed   s    zDictConfig._is_typed)r:   rI   rA   c                 C   s   |   }| ddu }|| jd vr|r:| ddu r:d S |sB|r|rt| jjtd fvsZJ d| d| jjj d}nd| d}| j||t	|d	 d S )
NstructTr8   FzKey 'z
' not in ''z' is not in structr:   rI   rJ   )
re   	_get_flagrS   _get_node_flagr7   rC   rO   __name___format_and_raiser+   )rV   r:   rI   Zis_typedZ	is_structrK   rZ   rZ   r[   _validate_get   s    
zDictConfig._validate_getc                 C   s4  ddl m} t|}|tjkr"d S t|r:| || d S |tjksL|d u rPd S |d urb| |n| }t	|t
o~|jjttfv}|d u p| }|rd S t	|tsJ |jj}||}	t|	rt|rd S t|rt|	stdt|	 dt| |d ur0|	d ur0t|d|}
t|	|
s0| ||	| d S )Nr   	OmegaConfzCannot assign z to 
__origin__)	omegaconfro   r   r   ZINTERPOLATIONr   _validate_non_optionalZMANDATORY_MISSING	_get_noderL   r6   r7   r<   r   rO   r)   get_typer    r   r3   r$   getattr
issubclass_raise_invalid_value)rV   r:   rI   ro   ZvktargetZtarget_has_ref_typeZis_valid_targettarget_type
value_typeoriginrZ   rZ   r[   _validate_set   sB    


zDictConfig._validate_set)rI   rA   c           	      C   s   ddl m} | }|}| d | ||}||}| r^|jjtd fvr^| jd t	|d | rjd S |d uo|d uot
|o|  ot| ot|| }|rdt| dt| d| }t|d S )Nr   rn   r:   rI   zMerge error:  is not a subclass of 	. value: )rq   ro   rr   rt   _is_missingr7   rC   rO   r|   r   r"   r   r    rv   r$   r3   )	rV   rI   ro   destsrcZdest_obj_typeZsrc_obj_typeZvalidation_errorrK   rZ   rZ   r[   _validate_merge   s:    


zDictConfig._validate_mergec                 C   sv   t |dddrr|d urR| |}|d ur@t|ts6J | }qZt| jj\}}n|  }|sr| j||t	dd d S )NTF)resolveZthrow_on_resolution_failurez!field '$FULL_KEY' is not Optionalrh   )
r   rs   rL   r)   Z_is_optionalr   r7   r>   rl   r3   )rV   r:   rI   childZfield_is_optional_rZ   rZ   r[   rr      s     


z!DictConfig._validate_non_optional)rI   rz   ry   rA   c                 C   sB   |d usJ |d usJ dt | dt | d| }t|d S )NzInvalid type assigned: r~   r   )r$   r3   )rV   rI   rz   ry   rK   rZ   rZ   r[   rw     s    zDictConfig._raise_invalid_value)r:   rA   c                 C   s   |  | jj|S rc   )_s_validate_and_normalize_keyr7   r=   )rV   r:   rZ   rZ   r[   _validate_and_normalize_key  s    z&DictConfig._validate_and_normalize_key)r=   r:   rA   c              	   C   s   |t u r0tjD ]}t||r|  S qtdn|tu rH|dv rHt|S |tttt	tfv rzt||svtd|j
 d|S t|trzt||W S  ty   ddd |j D }td|j
 d	| d
Y q0 ndsJ d| d S )Nz!Incompatible key type '$KEY_TYPE')r   r   z+Key $KEY ($KEY_TYPE) is incompatible with ()z, c                 S   s   g | ]}|qS rZ   rZ   ).0xrZ   rZ   r[   
<listcomp>+      z<DictConfig._s_validate_and_normalize_key.<locals>.<listcomp>z/Key '$KEY' is incompatible with the enum type 'z', valid: []FrE   )r   r(   __args__rL   r/   boolrU   bytesintfloatrk   rv   r   r4   Zvalidate_and_convert_to_enumr3   join__members__keys)rV   r=   r:   tZvalidrZ   rZ   r[   r     s,    





z(DictConfig._s_validate_and_normalize_keyc              
   C   s   z| j ||d W nh tyH } z| j||t|d W Y d }~n<d }~0  tyz } z| j|||d W Y d }~n
d }~0 0 d S )Nr}   )r:   rI   type_overriderJ   rh   )_DictConfig__set_implAttributeErrorrl   r,   rT   rV   r:   rI   erZ   rZ   r[   __setitem__2  s    zDictConfig.__setitem__c                 C   s   |  |}| || d S rc   )r   Z_set_item_impl)rV   r:   rI   rZ   rZ   r[   Z
__set_impl<  s    
zDictConfig.__set_implc                 C   s"   |   s|  rg S | jd  S Nr8   )r   r   rS   r   rd   rZ   rZ   r[   __dir__A  s    zDictConfig.__dir__c              
   C   sf   z|  || W nP ty` } z8t|tr4|jr4|| j|||d dsLJ W Y d}~n
d}~0 0 dS )zu
        Allow assigning attributes to DictConfig
        :param key:
        :param value:
        :return:
        rh   FN)r   rT   rL   r1   _initializedrl   r   rZ   rZ   r[   __setattr__F  s    zDictConfig.__setattr__c              
   C   s   |dkrt  z| j|tddW S  tyV } z| j|d|td W Y d}~n<d}~0  ty } z| j|d|d W Y d}~n
d}~0 0 dS )zf
        Allow accessing dictionary values as attributes
        :param key:
        :return:
        rk   F)r:   default_valuevalidate_keyNr:   rI   rJ   r   rh   )r   	_get_implr   r,   rl   r+   rT   rV   r:   r   rZ   rZ   r[   __getattr__U  s    zDictConfig.__getattr__c              
   C   s~   z| j |tdW S  tyF } z| j|d|td W Y d}~n<d}~0  tyx } z| j|d|d W Y d}~n
d}~0 0 dS )zM
        Allow map style access
        :param key:
        :return:
        r:   r   Nr   rh   )r   r   r   rl   r,   rT   r   rZ   rZ   r[   __getitem__i  s    zDictConfig.__getitem__c                 C   s^   |  dr| j|dtdd z| jd |= W n* tyX   d}| j|dt|d Y n0 dS )ze
        Allow deleting dictionary values as attributes
        :param key:
        :return:
        rG   N6DictConfig in read-only mode does not support deletionrh   r8   zAttribute not found: '$KEY')ri   rl   r2   rS   KeyErrorr+   rV   r:   rK   rZ   rZ   r[   __delattr__y  s    
zDictConfig.__delattr__c                 C   s   |  |}| dr(| j|d tdd | drF| j|d tdd |  r~| ddur~| j|d tt| jj	 dd z| j
d |= W n* ty   d	}| j|d t|d Y n0 d S )
NrG   r   rh   rf   z3DictConfig in struct mode does not support deletionFz' (DictConfig) does not support deletionr8   zKey not found: '$KEY')r   ri   rl   r2   r-   re   rj   r$   r7   rC   rS   r   r,   r   rZ   rZ   r[   __delitem__  s<    


zDictConfig.__delitem__)r:   r   rA   c              
   C   sJ   z| j ||dW S  tyD } z| j|d|d W Y d}~n
d}~0 0 dS )znReturn the value for `key` if `key` is in the dictionary, else
        `default_value` (defaulting to `None`).r   Nrh   )r   r/   rl   )rV   r:   r   r   rZ   rZ   r[   get  s    zDictConfig.get)r:   r   r   rA   c              	   C   s\   z| j |d|d}W n( ttfy<   |tur6| Y S  Y n0 t|tsLJ | j|||dS )NT)r:   throw_on_missing_keyr   r:   rI   r   )
_get_childr+   r,   r   rL   r)   _resolve_with_default)rV   r:   r   r   rH   rZ   rZ   r[   r     s    
zDictConfig._get_implF)r:   validate_accessr   throw_on_missing_valuer   rA   c                 C   s   z|  |}W n. ty<   |r(|r( n|r2tnY d S Y n0 |rL| | | jd |}|d u rx|rtd|n|r| rtd|S )Nr8   zMissing key zMissing mandatory value: $KEY)	r   r/   r+   rm   rS   r   r,   r   r0   )rV   r:   r   r   r   r   rI   rZ   rZ   r[   rs     s"    
zDictConfig._get_node)r:   defaultrA   c              
   C   s$  z|  drtd|  dr&td|  rR| ddurRtt| jj d| |}| j	|dd}|d urt
|tsJ | j|||d}| |= |W S |tur|W S | j|d	}||krtd
|d| dntd
|dW n6 ty } z| j|d |d W Y d }~n
d }~0 0 d S )NrG   zCannot pop from read-only noderf   z.DictConfig in struct mode does not support popFz" (DictConfig) does not support pop)r:   r   r   )r:   zKey not found: 'z
' (path: 'z')rg   rh   )ri   r2   r-   re   rj   r$   r7   rC   r   r   rL   r)   r   r   Z_get_full_keyr,   rT   rl   )rV   r:   r   rH   rI   fullr   rZ   rZ   r[   pop  s8    


zDictConfig.popc                 C   s@   |   s|  s|  r i  S | jd  }t|ts<J |S r   )r   r   r   r   rS   rL   r   )rV   retrZ   rZ   r[   r     s
    zDictConfig.keysc              	   C   s   z|  |}W n ty"   Y dS 0 z$| |}|du sFt|tsFJ W n ttfyb   d}Y n0 |du rpdS z| j||d W dS  ty   Y dS  t	y   Y dS 0 dS )z
        A key is contained in a DictConfig if there is an associated value and
        it is not a mandatory missing value ('???').
        :param key:
        :return:
        FNr}   T)
r   r/   r   rL   r)   r   r   r   r.   r0   )rV   r:   rH   rZ   rZ   r[   __contains__  s$    

zDictConfig.__contains__c                 C   s   t |  S rc   )iterr   rd   rZ   rZ   r[   __iter__.  s    zDictConfig.__iter__c                 C   s   t | jdd d S )NT)r   r   )rO   items_exr^   rd   rZ   rZ   r[   r^   1  s    zDictConfig.itemsc                 C   s(   || v r|  |}n|}| || |S rc   )r   r   )rV   r:   r   r   rZ   rZ   r[   
setdefault4  s
    zDictConfig.setdefault)r   r   rA   c                 C   s   g }|   r | jd d tdd |  r0td|  D ]P}|rJ| | }n | jd | }t|trj|	 }|d u sz||v r8|
||f q8|S )Nz4Cannot iterate a DictConfig object representing Nonerh   z#Cannot iterate a missing DictConfigr8   )r   rl   	TypeErrorr   r0   r   rS   rL   r5   _valueappend)rV   r   r   r^   r:   rI   rZ   rZ   r[   r   <  s$    

zDictConfig.items_ex)otherrA   c                 C   sl   |d u r| j d d u S t|s&t|rBt|ddid}t| |S t|trXt| |S |  rht|S tS )Nr8   allow_objectsTrF   )	rS   r!   r"   r6   _dict_conf_eqrL   r   r   NotImplemented)rV   r   rZ   rZ   r[   __eq__V  s    
zDictConfig.__eq__c                 C   s   |  |}|tur| S tS rc   )r   r   )rV   r   r   rZ   rZ   r[   __ne__b  s    
zDictConfig.__ne__c                 C   s   t t| S rc   )hashrU   rd   rZ   rZ   r[   __hash__h  s    zDictConfig.__hash__)type_or_prototyperA   c                 C   s^   |du rdS t |s"td| ddlm} ||}|jj}d|j_| | || j_dS )a  
        Retypes a node.
        This should only be used in rare circumstances, where you want to dynamically change
        the runtime structured-type of a DictConfig.
        It will change the type and add the additional fields based on the input class or object
        Nz"Expected structured config class: r   rn   )r"   
ValueErrorrq   ro   Z
structuredr7   rC   Z
merge_with)rV   r   ro   protorC   rZ   rZ   r[   _promotek  s    

zDictConfig._promote)rI   r@   rA   c              
   C   sR   z| j d }| || W n2 tyL } z|| j d< |W Y d }~n
d }~0 0 d S r   )rS   _set_value_implrT   )rV   rI   r@   Zprevious_contentr   rZ   rZ   r[   rP     s    

zDictConfig._set_valuec           
      C   s(  ddl m}m} |d u ri }t|tr*J | jd |d t|ddrZd | jd< d | j_	nt
|ddr||| jd< d | j_	nt|r|| jd< d | j_	ni | jd< t|r*d | j_	| d}t||d	}|| d
dgd. | D ]\}}| || qW d    n1 s0    Y  t|| j_	nt|trt|| j_|| d
dgd6 |jd  D ]\}}| || qdW d    n1 s0    Y  |jj	| j_	nzt|tr|| d
dgd0 | D ]\}}| || qW d    n1 s0    Y  t| j_	nd| }	t|	d S )Nr   )MISSINGflag_overrider}   Tr   r8   )Zstrict_interpolation_validationr   )r   rf   rG   FzUnsupported value type: )rq   r   r   rL   r5   r|   r   rS   r7   rC   r   r   r"   ri   r   r^   r   r   r6   rQ   rR   r@   rO   r3   )
rV   rI   r@   r   r   Zaodatar`   ra   rK   rZ   rZ   r[   r     sH    





.00

zDictConfig._set_value_impl)d1d2rA   c                 C   s   | j d d u }|j d d u }|r(|r(dS ||kr4dS t| tsBJ t|tsPJ t| t|krddS |  st| r|  | u S | jddD ]2\}}||j d vr dS t| |||s dS qdS )Nr8   TFr   )rS   rL   r6   lenr   r   r*   Z_item_eq)r   r   Zd1_noneZd2_noner`   ra   rZ   rZ   r[   r     s$    zDictConfig._dict_conf_eqc                 C   s:  ddl m} | jj}t|s J tt|}i }i }|  D ]}t|t	sNJ | 
|}t|tsfJ z| }W n4 ty } z| j|d|d W Y d}~n
d}~0 0 | r||vrq<| j|dtdd t|tr||}	n| }	||v r|	||< q<|	||< q<|f i |}
| D ]\}}	t|
||	 q|
S )z
        Instantiate an instance of `self._metadata.object_type`.
        This requires `self` to be a structured config.
        Nested subconfigs are converted by calling `OmegaConf.to_object`.
        r   rn   Nrh   zJStructured config of type `$OBJECT_TYPE` has missing mandatory value: $KEY)rq   ro   r7   rC   r"   setr   r   rL   rU   r   r)   Z_dereference_noder.   rl   r   r0   r&   Z	to_objectr   r^   setattr)rV   ro   rC   Zinit_field_namesZinit_field_itemsZnon_init_field_itemsr`   rH   r   ra   resultrZ   rZ   r[   
_to_object  sD    
&


zDictConfig._to_object)N)N)T)TTFF)N)TN)N)N)@rk   
__module____qualname__r'   __annotations__r   r   r(   r)   rU   r   r   r%   r   r   rN   r   rb   rQ   re   rm   r|   r   rr   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   rs   r   r   r   r   objectr   r   r   r   r^   r   r   r   r   r   r   r   r   rP   r   staticmethodr   r   __classcell__rZ   rZ   rX   r[   r6   9   s   
3) 
!	     " 	  	 0r6   )<rQ   enumr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   _utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   baser%   r&   r'   r(   r)   Zbasecontainerr*   errorsr+   r,   r-   r.   r/   r0   r1   r2   r3   nodesr4   r5   r6   rZ   rZ   rZ   r[   <module>   s   <X,