a
    d                     @   s  d dl Z d dlZd dlmZm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 d dl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%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 erdd	l8m9Z9 G d
d de)eZ:de;ee; ddddZ<e,e	ee; ddddZ=e,e	ddddZ>e:e	e	ddddZ?e,e	ddddZ@dS )    N)ABCabstractmethod)Enum)TYPE_CHECKINGAnyClassVarDictListOptionalTupleUnion   )_DEFAULT_MARKER_	ValueKind_ensure_container
_get_value_is_interpolation_is_missing_value_is_none_is_special_resolve_optionalget_structured_config_dataget_type_hintget_value_kindget_yaml_loaderis_container_annotationis_dict_annotationis_list_annotationis_primitive_dictis_primitive_type_annotationis_structured_configis_tuple_annotationis_union_annotation)Box	ContainerContainerMetadataDictKeyTypeNodeSCMode	UnionNode)ConfigCycleDetectedExceptionConfigTypeErrorInterpolationResolutionErrorKeyValidationErrorMissingMandatoryValueOmegaConfBaseExceptionReadonlyConfigErrorValidationError
DictConfigc                       s  e Zd ZU i Zeeeef  ed< e	e
 ed fddZdGeeeeeee	e ee	e  f ddd	Zefeeef eeed
ddZedddZedddZeeef dddZeeef ddddZeeddddZedddZddddZee ddd d!Zedd"d#Ze de!j"fe#eeee!edeeeeef ee f d$d%d&Z$e d d dd'd(d)Z%e eedd'd*d+Z&ed eeef ee e'ed,f ef dd-d.d/Z(ed eeef ee e'ed,f ef dd-d0d1Z)eedd2d3d4Z*eeedd5d6d7Z+e e#eeef e#eeef ed8d9d:Z,edd;d<Z-edd=d>Z.edHeedd2d?d@Z/eeedd2dAdBZ0eddCdDZ1eeee2df eddEdFZ3  Z4S )IBaseContainer
_resolversparentmetadatac                    s.   |d u st |tstdt j||d d S )Nz Parent type is not omegaconf.Boxr6   )
isinstancer#   r+   super__init__)selfr7   r8   	__class__ `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/omegaconf/basecontainer.pyr;   ;   s    zBaseContainer.__init__TF)keyvalidate_accessvalidate_keythrow_on_missing_valuethrow_on_missing_keyreturnc                 C   sN   | j |||||d}t|trJt|sJ| }t|trBt|trFJ |}|S )z=Like _get_node, passing through to the nearest concrete Node.)rA   rB   rC   rD   rE   )	_get_noder9   r)   r   _valuer'   )r<   rA   rB   rC   rD   rE   childvaluer?   r?   r@   
_get_child@   s    	zBaseContainer._get_child)rA   rJ   default_valuerF   c                 C   s6   t |r|tur|S td| j| ||dd}t|S )zEreturns the value with the specified key, like obj.key and obj['key']z"Missing mandatory value: $FULL_KEYT)r7   rA   rJ   Zthrow_on_resolution_failure)r   r   r.   Z_maybe_resolve_interpolationr   )r<   rA   rJ   rL   Zresolved_noder?   r?   r@   _resolve_with_defaultV   s    z#BaseContainer._resolve_with_defaultrF   c                 C   s   |   S N)__repr__r<   r?   r?   r@   __str__k   s    zBaseContainer.__str__c                 C   sJ   | j d d u rdS |  s"|  r8| j d }d| dS | j d  S d S )N_contentNone')__dict__r   _is_missingrP   )r<   vr?   r?   r@   rP   n   s    
zBaseContainer.__repr__c                 C   s   t  | j}|dd  t  |d |d< | jj}t|rjt|rNt|d _nt|rbt	|d _ndsjJ t
jdk r| jj}t|rtd|S )N_flags_cache	_metadataF)      zOSerializing structured configs with `Union` element type requires python >= 3.7)copyrV   poprZ   ref_typer   r   r   r   r	   sysversion_infoelement_typer"   r/   )r<   Z	dict_copyr_   rb   r?   r?   r@   __getstate__x   s"    
zBaseContainer.__getstate__N)drF   c                 C   s   ddl m} ddlm}m} t| |rF|d j}|d u rFt}||d _|d j}|d u rft}||d _|d j	}t
|r||rt||f |d _	n ||rt| |d _	ndsJ d |d< | j| d S )Nr   r2   )is_generic_dictis_generic_listrZ   FrY   )	omegaconfr3   Zomegaconf._utilsre   rf   r9   key_typer   rb   r_   r   r   r	   rV   update)r<   rd   r3   re   rf   rh   rb   r_   r?   r?   r@   __setstate__   s(    





zBaseContainer.__setstate__rA   rF   c                 C   s   d S rO   r?   )r<   rA   r?   r?   r@   __delitem__   s    zBaseContainer.__delitem__c                 C   s.   |   s|  s|  rdS | jd }t|S )Nr   rS   )r   rW   r   rV   len)r<   contentr?   r?   r@   __len__   s    
zBaseContainer.__len__c                 C   s   t jdd  }| | d S )Nr   )r`   argvmerge_with_dotlist)r<   Z	args_listr?   r?   r@   merge_with_cli   s    zBaseContainer.merge_with_cli)dotlistrF   c                 C   s   ddl m} d ddd}t|ttfs.|  |D ]j}t|tsF|  |d}|dkrb|}d }n,|d| }||d d  }tj|t	 d	}|
| || q2d S )
Nr   )	OmegaConfrN   c                   S   s   t dd S )Nz/Input list must be a list or a tuple of strings)
ValueErrorr?   r?   r?   r@   fail   s    z.BaseContainer.merge_with_dotlist.<locals>.fail=r   )Loader)rg   rt   r9   listtuplestrfindyamlloadr   ri   )r<   rs   rt   rv   argidxrA   rJ   r?   r?   r@   rq      s    

z BaseContainer.merge_with_dotlistc                 C   s   t | jd dkS )zreturn true if config is emptyrS   r   )rm   rV   rQ   r?   r?   r@   is_empty   s    zBaseContainer.is_empty)confresolvethrow_on_missingenum_to_strstructured_config_moderF   c                    s  ddl m}m}m} ttdfddtttf td fdd} 	 rZd S  
 rr| jd d td	d
 q|S n&s  r  }	t|	tsJ |	S rƈ  }
t|
tsJ |
 t |rT jjtd fvrtjkr S tjkrt jjr  S i }  D ]0}||}rDt|trD|j }|||< q|S t |rg }tt D ]}||}| | qp|S dsJ d S )Nr   )MISSINGr3   
ListConfigvalrF   c                    s"   |   } rt|tr|j }|S rO   )rH   r9   r   name)r   rJ   )r   r?   r@   convert   s    z*BaseContainer._to_content.<locals>.convertrk   c              
      s   z j | d}W n4 tyF } z j| d |d W Y d }~n
d }~0 0 t|tsVJ rz| }W n4 ty } z j| d |d W Y d }~n
d }~0 0 t|trtj	|d}n|}|S )N)rD   rA   rJ   cause)r   r   r   r   )
rK   r.   _format_and_raiser9   r'   _dereference_noder,   r$   r4   _to_content)rA   nodeerJ   r   r   r   r   r   r   r?   r@   get_node_value   s(    &&
z1BaseContainer._to_content.<locals>.get_node_valuezMissing mandatory valuer   F)!rg   r   r3   r   r'   r   r   r&   intr   rW   r   r.   r   rH   r9   r|   r   r$   rZ   object_typedictr(   ZDICT_CONFIGZINSTANTIATEr    Z
_to_objectkeysr   r   rangerm   append)r   r   r   r   r   r   r3   r   r   interZ_confretdictrA   rJ   Zretlistindexitemr?   r   r@   r      sZ    &zBaseContainer._to_content)destsrcrF   c                    s  ddl m}m m} t|  s"J t| s0J |jj}t|}|dusLJ | s\|	 r|| 
|  t| ||d dS | j|d tdd fdd}| r|  st|rt||d	}| 	 s|  r| s||  | st|ng }|D ]}|j|d
d}	| j|d
d}
t|	ts*J |
du sDt|
tsDJ t|	}t|	}|tju }t|
 rv|
j|	d t|
tr|
 r|st|	dds||
 |
dur|
	 r|
 }t|tr|| |< | |}
t| jj\}}|
du r*t|r*|s* || ||d| |< | |}
|
dur>t|
trlt|	trX|
|	 n|s<| ||	 nt|	tr| ||	 nt|
|tfsJ t|	|tfsJ zRt|
|r|rt  |	}|
|
  n|	}| || n|s|

| W n: t!t"fy: } z| j#|||d W Y d}~n
d}~0 0 qddl m$} t|r||  ||| |< W d   n1 s0    Y  q||| |< qt| ||d |jj%}|dusJ |& D ] \}}|dur| '|| qdS )zBmerge src into dest and return a new copy, does not modified inputr   )AnyNoder3   	ValueNodeNr   r_   r   )rJ   )r   rF   c                    s`   | j j}|tur:t|ri }qRt|s.t|r4g }qR|}nt|  rJi }ndsRJ | | d S )NF)rZ   r_   r   r   r   r!   r9   
_set_value)r   rtr   r2   r?   r@   expandG  s    
z(BaseContainer._map_merge.<locals>.expand)r_   r   F)rB   Tr   )r7   r_   is_optionalr   )	open_dict)(rg   r   r3   r   r9   rZ   r   r   r   r   r   rH   _update_typesZ_validate_merger$   rW   r    &_create_structured_with_missing_fieldsrz   rG   r'   r   r   r   MANDATORY_MISSING_maybe_dereference_noder   rb   r4   _merge_with__setitem__r)   r]   r1   r0   r   r   flagsitems	_set_flag)r   r   r   r   Zsrc_typeZsrc_ref_typer   Z	src_itemsrA   Zsrc_nodeZ	dest_nodeZ	src_valueZsrc_vkZsrc_node_missingZtarget_noder   etr   r   r   r   flagrJ   r?   r2   r@   
_map_merge2  s    







(

0
zBaseContainer._map_mergec                 C   sp  ddl m}m}m} t| |s"J t||s0J | rD| d  n| rf| jj	t
u rd|jj	| j_	n| r~| |  n|g |  d}t| jd |jd< t| jj	\}}t|r||||d}|jddD ]$}	t|	|r|||	}	||	 qn|jddD ]}	||	 q
|jd | jd< |jj}
|
d usBJ |
 D ] \}}|d urJ| || qJd S )	Nr   )r3   r   rt   )rn   r7   rZ   )r_   r   Fr   rS   )rg   r3   r   rt   r9   r   r   rW   rZ   rb   r   r   rH   _get_parentr]   deepcopyrV   r   r    Z_iter_exmerger   r   r   r   )r   r   r3   r   rt   Ztemp_targetr   r   Z	prototyper   r   r   rJ   r?   r?   r@   _list_merge  s:    


zBaseContainer._list_merge.)othersrF   c              
   G   sH   z| j |  W n4 tyB } z| jd d |d W Y d }~n
d }~0 0 d S )Nr   )r   	Exceptionr   )r<   r   r   r?   r?   r@   
merge_with  s    zBaseContainer.merge_withc                 G   s   ddl m} ddlm} |D ]}|d u r0tdi }| ddu rJddi}t||d}t| |rxt||rxt	| | qt| |rt||rt
| | qtdq|   d S )	Nr   r2   r   zCannot merge with a None configZallow_objectsT)r   z'Cannot merge DictConfig with ListConfig)
dictconfigr3   
listconfigr   ru   	_get_flagr   r9   r4   r   r   	TypeErrorZ
_re_parent)r<   r   r3   r   otherZmy_flagsr?   r?   r@   r     s    
zBaseContainer._merge_with)rA   rJ   rF   c              	      s&  ddl m}m} t|trd }|sHt|trH | u rHd}|rVt	|}|
d z,| }|   | W || q|| 0 n | drtdt|t} }|du st|tsJ t||ot|| }	ttd fd	d
}
|
|}t|\}}ttddfdd}|	rVt|sV| | nt|}|duo| pt||ot|}|r|rt|tr| }jd   | nf|r|rt|st|st|st|rt|} || n
| | n || dS )z
        Changes the value of the node key with the desired value. If the node key doesn't
        exist it creates a new one.
        r   )r   r   Zno_deepcopy_set_nodesTNreadonlyz(Cannot change read-only config containerr   c                    sH   t | sjj}n2 }|d u r.jj}nt|ts<J |jj}|S rO   )r    rZ   rb   rG   r9   r'   	type_hint)r   r   targetrA   r<   r?   r@   get_target_type_hint0  s    


z:BaseContainer._set_item_impl.<locals>.get_target_type_hint)	value_keyr   rF   c                    sJ   |  d u sJ |}|  ||  t| jjd | jd | < d S )N)r   r   rS   )r   _set_parent_set_key_deep_update_type_hintrZ   rb   rV   )r   r   rX   rQ   r?   r@   assign?  s    

z,BaseContainer._set_item_impl.<locals>.assignrS   )nodesr   r   r9   r'   r   r#   Z	_get_rootr]   r   r   _keyr   _validate_setr0   rG   r   r   r"   r   Z_has_ref_typer   rH   rV   r   r   r    r   _wrap_value_and_set)r<   rA   rJ   r   r   Zdo_deepcopyoldZinput_is_nodeZtarget_node_refZinput_is_typed_vnoder   Ztarget_type_hint_Ztarget_ref_typer   Zspecial_valueZshould_set_valuer?   r   r@   _set_item_impl
  sl    








	zBaseContainer._set_item_impl)rA   r   r   rF   c           	   
   C   sv   ddl m} t|\}}z|||||| d}W n4 tyb } z| j|||d W Y d }~n
d }~0 0 || jd |< d S )Nr   )_maybe_wrap)r_   rA   rJ   r   r7   r   rS   )Zomegaconf.omegaconfr   r   r1   r   rV   )	r<   rA   r   r   r   r   r_   wrappedr   r?   r?   r@   r   l  s    
&z!BaseContainer._wrap_value_and_set)c1k1c2k2rF   c                 C   s^  |  |}| |}|d ur$|d us(J t|ts6J t|tsDJ | rX| rXdS | rl| rldS | }| }|}|}	|r| }|r| }	|r|r|d u s|	d u r||kS t|trt|	tr||	krdS t|}t|	}	||	kS nd|s.|s.t|}t|}||k}
t|
t	s*J |
S t|}t|	}	||	k}
t|
t	sVJ |
S d S )NTF)
rK   r9   r'   r   rW   r   r   r$   r   bool)r   r   r   r   Zv1Zv2Zv1_interZv2_interZdv1Zdv2retr?   r?   r@   _item_eq}  sJ    


zBaseContainer._item_eqc                 C   s   | j d jdu S )NrZ   T)rV   optionalrQ   r?   r?   r@   _is_optional  s    zBaseContainer._is_optionalc                 C   s   t | jd S NrS   )r   rV   rQ   r?   r?   r@   r     s    zBaseContainer._is_interpolationc                 C   s   d S rO   r?   r<   rA   rJ   r?   r?   r@   _validate_get  s    zBaseContainer._validate_getc                 C   s   d S rO   r?   r   r?   r?   r@   r     s    zBaseContainer._validate_setc                 C   s
   | j d S r   )rV   rQ   r?   r?   r@   rH     s    zBaseContainer._valuec                    s  ddl m  ddlm} t|ttttt	t
ttd fs:dS t
tdddtttttttt
f  td fd	d
}|d ur|dkrt| tsJ || t|ddd\}}|d u r| }|dt|d |}| d ur||t| t|| }n|dt| t|| }n| }| d u r.dS |  }|d usDJ t|h}| d ur| }t||v rtd|d|t| |d usJ | d urN||t| t|| }qN|S )Nr   r   )_select_one )xrF   c                 S   s:   | j d ur$| j d| j d| j  S | j d| j S d S )N:)stepstartstop)r   r?   r?   r@   _slice_to_str  s    
z2BaseContainer._get_full_key.<locals>._slice_to_str)full_keyparent_typecur_typerA   rF   c                    s   |d u r| S t |tr |}nt |tr2|j}nt|}t |tsHJ t| r| dkrt| rvd| d|  } qd| d|  } qd| d} n4| dkr|} n&t| r| |  } n| d|  } | S )Nr   []z]..)r9   slicer   r   r|   
issubclass)r   r   r   rA   r   r   r?   r@   prepand  s(    





z,BaseContainer._get_full_key.<locals>.prepandF)crA   r   Zthrow_on_type_errorz*Cycle when iterating over parents of key ``)r   r   rg   r   r9   r   r|   r   floatr   r   bytestyper   r
   r   r&   r$   r   r   idr*   add)r<   rA   r   r   curr   r   memor?   r   r@   _get_full_key  sV    $
 

zBaseContainer._get_full_key)TTFF)N)5__name__
__module____qualname__r5   r   r   r|   r   __annotations__r
   r#   r%   r;   r   r   r'   r	   rK   r   r&   r   rM   rR   rP   rc   rj   r   rl   ro   rr   rq   r   staticmethodr(   DICTr$   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   r   r   __classcell__r?   r?   r=   r@   r4   8   s   
    

X )  b

5r4   r3   )r_   r   rF   c                 C   sX   ddl m}m} t| }| D ]}|| q ||}t| \|j_|j_	||j_
|S )Nr   )r   r3   )r   r   r3   r   valuesr   r   rZ   r   r_   r   )r_   r   r   r3   Zcfg_datarX   cfgr?   r?   r@   r     s    r   )r   r_   r   rF   c                 C   s2   |d urt |s|| j_| jjtu r.t| | d S rO   )r   rZ   r   r_   r   r   r   r?   r?   r@   r   +  s    r   )r   r   rF   c                 C   s0  ddl m}m} ddlm}m} |tu r,dS t| | t|\}}|| j	_
|| j	_t|rt| |r||}|| j	_t| stt| D ]}	t| |	| qt|r,t| |r,||\}
}|
| j	_|| j	_t| s,| D ]P}|
turt||
std|dt|j dd	|
j d
 t| || qdS )z@Ensure node is compatible with type_hint, mutating if necessary.r   )r3   r   r   )get_dict_key_value_typesget_list_element_typeNzKey  (z) is incompatiblez with key type hint 'rU   )rg   r3   r   _utilsr	  r
  r   _shallow_validate_type_hintr   rZ   r_   r   r   r9   rb   r   r   rm   _deep_update_subnoder   rh   r-   r   r   )r   r   r3   r   r	  r
  Znew_is_optionalZnew_ref_typeZnew_element_typeiZnew_key_typerA   r?   r?   r@   r   3  s6    

r   )r   rA   value_type_hintrF   c                 C   sX   |  |}t|tsJ t|rJ| || | |  |}t|tsJJ t|| dS )zVGet node[key] and ensure it is compatible with value_type_hint, mutating if necessary.N)rG   r9   r'   r   r   rH   r   )r   rA   r  Zsubnoder?   r?   r@   r  W  s    

r  c           	      C   s  ddl m}m}m} t|\}}t| }|  rj|sft| }td|dt	|j
 dd|j
 d dS |tjtjfv r~dS |tjkrt|rt| |r|  }t||std|dt	|j
 dd|j
 d nt|rt| |rdS t|r
t| |r
dS t|r$t| |r$dS t| |rb|  }td|dt	|j
 dd| d n"tdt	| j
 d	d
| d n
dsJ dS )zMError if node's type, content and metadata are not compatible with type_hint.r   )r3   r   r   zValue r  )z! is incompatible with type hint 'rU   Nz' is incompatiblez with type hint 'F)rg   r3   r   r   r   r   r   r   r1   r   r   r   r   ZINTERPOLATIONZVALUEr   r9   rH   r    r   r   )	r   r   r3   r   r   r   r_   ZvkrJ   r?   r?   r@   r  d  sT    


r  )N)Ar]   r`   abcr   r   enumr   typingr   r   r   r   r	   r
   r   r   r~   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   baser#   r$   r%   r&   r'   r(   r)   errorsr*   r+   r,   r-   r.   r/   r0   r1   r   r3   r4   r   r   r   r   r  r  r?   r?   r?   r@   <module>   s2   (\$	(     i $