a
    d                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ eeed	d
dZe
feeee dddZee eeedddZdeeeeedddZe
feeeedddZg dZdS )    N)AnyOptional)	ContainerNode)_DEFAULT_MARKER_
_get_value)BaseContainer)ConfigKeyError)parse)dict)obj_parent_returnc                 C   s(   ddl m} t|tsJ |j| |dS )z@Create a config object from `obj`, similar to `OmegaConf.create`r   )	OmegaConf)parent)	omegaconfr   
isinstancer   create)r   r   r    r   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/omegaconf/resolvers/oc/__init__.pyr      s    r   )keydefaultr   c                 C   sT   zt j|  W S  tyN   |tur:|dur2t|nd Y S td|  dY n0 dS )a=  
    :param key: Environment variable key
    :param default: Optional default value to use in case the key environment variable is not set.
                    If default is not a string, it is converted with str(default).
                    None default is returned as is.
    :return: The environment variable 'key'. If the environment variable is not set and a default is
            provided, the default is used. If used, the default is converted to a string with str(default).
            If the default is None, None is returned (without a string conversion).
    NzEnvironment variable 'z' not found)osenvironKeyErrorr   str)r   r   r   r   r   env   s    
r   )exprr   _node_r   c                 C   sT   | du rdS t | ts0td|  dt| j t| ddd}|j||d}t|S )z
    Parse and evaluate `expr` according to the `singleElement` rule of the grammar.

    If `expr` is `None`, then return `None`.
    Nz9`oc.decode` can only take strings or None as input, but `z` is of type ZsingleElementZ
VALUE_MODE)Zparser_ruleZ
lexer_mode)node)r   r   	TypeErrortype__name__r
   Zresolve_parse_treer   )r   r   r   Z
parse_treevalr   r   r   decode)   s    
r$   G'$OLD_KEY' is deprecated. Change your code and config to use '$NEW_KEY')r   messager   r   r   c          	      C   s   ddl m} t| ts,tdt| j dt|tsLtdt|j d|jd d}||| dd}|d u rtd	| d
|  d|jd d}t	
|j||d}tjt|d |S )Nr   )select_nodez7oc.deprecated: interpolation key type is not a string ()z;oc.deprecated: interpolation message type is not a string ()r   T)absolute_keyzIn oc.deprecated resolver at 'z': Key not found: '')ZOLD_KEYZNEW_KEY)categoryr&   )omegaconf._implr'   r   r   r    r!   r"   Z_get_full_keyr	   stringTemplatesafe_substitutewarningswarnUserWarning)	r   r&   r   r   r'   Zfull_keyZtarget_nodeZnew_keymsgr   r   r   
deprecated=   s,    


r4   )r   r   r   r   c                C   s   ddl m} ||| d|dS )Nr   )select_valueT)cfgr   r)   r   )r,   r5   )r   r   r   r5   r   r   r   select_   s    r7   )r   r$   r4   r   r   r7   )r%   )r   r-   r0   typingr   r   r   r   r   Zomegaconf._utilsr   r   Zomegaconf.basecontainerr   Zomegaconf.errorsr	   Zomegaconf.grammar_parserr
   Zomegaconf.resolvers.ocr   r   r   r   r$   r4   r7   __all__r   r   r   r   <module>   s8    $