
    ُkh                     ,   U d Z ddlZddlZddlZddlZ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 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Zdd	l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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZF ddlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP dZQeeRd<   edef   ZSdeTdefdZUdeTdefdZVd*dZW G d d      ZX eW        ede=deeeT   eTf   deeeeY      eeY   f   dee=ddf   fd       ZZede=dee=ddf   fd       Z[ede<dee<ddf   fd       Z\efdee;   d eYd!ed"ed#ede=fd$Z]d#ed"ed!ed eYdeeA   de=fd%Z^	 d+d&e<d"eTd'eYd(eYdeee=   eeTe_f   f   f
d)Z`y),zOmegaConf module    N)defaultdict)contextmanager)Enum)dedent)IOAnyCallableDict	GeneratorIterableListOptionalSetTupleTypeUnionoverload   )
DictConfigDictKeyType
ListConfig)_DEFAULT_MARKER__ensure_container
_get_valueformat_and_raiseget_dict_key_value_typesget_list_element_typeget_omega_conf_dumperget_type_ofis_attr_classis_dataclassis_dict_annotationis_intis_list_annotationis_primitive_containeris_primitive_dictis_primitive_listis_structured_configis_tuple_annotationis_union_annotationnullcontext	split_keytype_str)Box	ContainerNodeSCMode	UnionNode)BaseContainer)MissingMandatoryValueOmegaConfBaseExceptionUnsupportedInterpolationTypeValidationError)	AnyNodeBooleanNode	BytesNodeEnumNode	FloatNodeIntegerNodePathNode
StringNode	ValueNodez???MISSING.interpolationreturnc                     d| z   dz   S )zt
    Equivalent to ``${interpolation}``

    :param interpolation:
    :return: input ``${node}`` with type Any
    ${} rB   s    O/var/www/teggl/fontify/venv/lib/python3.12/site-packages/omegaconf/omegaconf.pyIIrJ   Q   s     -#%%    c                     | S )z
    Use this for String interpolation, for example ``"http://${host}:${port}"``

    :param interpolation: interpolation string
    :return: input interpolation with type ``Any``
    rG   rH   s    rI   SIrM   [   s
     rK   c                     ddl m}  t        j                  d| j                         t        j                  d| j
                         t        j                  d| j                         t        j                  d| j                         t        j                  d| j                         t        j                  d| j                  j                         t        j                  d	| j                  j                         y )
Nr   ocz	oc.createz	oc.decodezoc.deprecatedzoc.envz	oc.selectzoc.dict.keyszoc.dict.values)omegaconf.resolversrP   	OmegaConfregister_new_resolvercreatedecode
deprecatedenvselectdictkeysvaluesrO   s    rI   register_default_resolversr\   e   s    &##K;##K;##OR]]C##Hbff5##K;##NBGGLLA##$4bggnnErK   c                      e Zd ZdZdYdZe	 	 dZdedee   dee	e
ef      defd       Zee	 	 dZde
dee   dee	e
ef      deeef   fd	              Zee	 	 dZdeee   eed
f   f   dee   dee	e
ef      defd              Zee	 	 dZdedee   dee	e
ef      defd              Zee	 	 dZdedee   dee	e
ef      defd              Zee	 	 	 d[dee	eef      dee   dee	e
ef      defd              Zeeddfdedee   dee	e
ef      deeef   fd       Zedee
ej,                  ee   f   deeef   fd       Ze	 d\dedee
ej,                  ee   f   deddfd       Zed]deee
      defd       Zedee
   defd       Zedeeee	eef   ee   eed
f   ef   deeef   fd       Zedeeee	eef   ee   eed
f   ef   deeef   fd       Zede
deddfd        Z ede
deddfd!       Z!eddd"de
ded#ed$eddf
d%       Z"e#de
defd&       Z$edYd'       Z%e#de
defd(       Z&ed)ede	e
ef   fd*       Z'ed)ed+e	e
ef   ddfd,       Z(ed)eddfd-       Z)ed.ed/eddfd0       Z*ed)e+d1ee   ddfd2       Z,ed)e+dee   fd3       Z-ed)e.d1ee   ddfd4       Z/ed)e.dee   fd5       Z0ed)ed6ee
ee
   f   defd7       Z1eddde2jf                  d8d9eded:ed;ed<e2dee	eef   ee   de
ef   fd=       Z4ed9edee	eef   ee   de
ef   fd>       Z5ed9ed?edefd@       Z6ed]dAed?eee7e
f      defdB       Z8ededefdC       Z9ededefdD       Z:ededefdE       Z;ed]ded?ee
   dee<e      fdF       Z=eedGddHd9e.d?e
dIedJed:edefdK       Z>e	 d]dGddLd9e.d?e
d1edMedNeddfdO       Z?edddPd9ededQede
fdR       Z@ed9e.ddfdS       ZAed9edeBe
   fdT       ZCeeddfdedee   dee	e
ef      deeef   fdU       ZDedVedee<e      fdW       ZEede
deeFe.e.e+eed
f   ee
d
f   gef      fdX       ZGy)^rR   zOmegaConf primary classrC   Nc                     t        d      )Nz,Use one of the static construction functions)NotImplementedError)selfs    rI   __init__zOmegaConf.__init__t   s    !"PQQrK   objparentflagsc                 0    t         j                  | ||      S N)rR   rT   rb   rc   rd   s      rI   
structuredzOmegaConf.structuredw   s     VU33rK   c                      y rf   rG   rg   s      rI   rT   zOmegaConf.create        	rK   .c                      y rf   rG   rg   s      rI   rT   zOmegaConf.create   rj   rK   c                      y rf   rG   rg   s      rI   rT   zOmegaConf.create   rj   rK   c                      y rf   rG   rg   s      rI   rT   zOmegaConf.create   rj   rK   c                      y rf   rG   rg   s      rI   rT   zOmegaConf.create   rj   rK   c                 2    t         j                  | ||      S )Nrg   )rR   _create_implrg   s      rI   rT   zOmegaConf.create   s%     %% & 
 	
rK   file_c                 `   ddl m} t        | t        t        j
                  f      r[t        j                  t        j                  j                  |       dd      5 }t        j                  | |             }d d d        n5t        | dd       rt        j                  |  |             }nt        d      <t        |t        t         t        f      s!t#        d	t%        |      j&                         |t(        j+                         }|S t(        j+                  |      }|S # 1 sw Y   vxY w)
Nr   get_yaml_loaderrutf-8encodingLoaderreadUnexpected file typezInvalid loaded object type: )_utilsrt   
isinstancestrpathlibPathioopenospathabspathyamlloadgetattr	TypeErrorlistrY   IOErrortype__name__rR   rT   )rq   rt   frb   rets        rI   r   zOmegaConf.load   s    +ec7<<01/wG =1ii/*;<= =UFD)))E/*;<C233?:cD$3D#E.tCy/A/A.BC 
 ;""$C 
 ""3'C
#= =s   D$$D-Fconfigr   resolvec                    t        |       st        |       rt        j                  |       } t        j	                  | |      }t        |t        t        j                  f      rPt        j                  t        j                  j                  |      dd      5 }|j                  |       ddd       yt        |d      r"|j                  |       |j!                          yt#        d      # 1 sw Y   yxY w)z
        Save as configuration object to a file

        :param config: omegaconf.Config object (DictConfig or ListConfig).
        :param f: filename or file object
        :param resolve: True to save a resolved config (defaults to False)
        )r   wrv   rw   Nwriter|   )r!   r    rR   rT   to_yamlr~   r   r   r   r   r   r   r   r   r   hasattrflushr   )r   r   r   datafiles        rI   savezOmegaConf.save   s     =#8%%f-F   9a#w||,-+S7C !t

4 ! !Q GGDMGGI233! !s   C,,C5	args_listc                 V    | t         j                  dd  } t        j                  |       S )Nr   )sysargvrR   from_dotlist)r   s    rI   from_clizOmegaConf.from_cli   s(    I%%i00rK   dotlistc                 P    t         j                         }|j                  |        |S )a  
        Creates config from the content sys.argv or from the specified args list of not None

        :param dotlist: A list of dotlist-style strings, e.g. ``["foo.bar=1", "baz=qux"]``.
        :return: A ``DictConfig`` object created from the dotlist.
        )rR   rT   merge_with_dotlist)r   confs     rI   r   zOmegaConf.from_dotlist   s%     !(rK   configsc                  Z   t        |       dkD  sJ t        j                  | d         }t        |      }t	        |t
        t        f      sJ t        |dd      5   |j                  | dd   |j                  d      du }ddd       rt        j                  |d       |S # 1 sw Y   #xY w)z
        Merge a list of previously created configs into a single one

        :param configs: Input configs
        :return: the merged config object.
        r   readonlyFr   NT)lencopydeepcopyr   r~   r   r   flag_override
merge_with	_get_flagrR   set_readonlyr   targetturned_readonlys      rI   mergezOmegaConf.merge   s    " 7|awqz*"6*&:z":;;;6:u5 	CFwqr{+$..z:dBO	C ""640	C 	Cs   &B!!B*c                  <   t        |       dkD  sJ | d   }t        |      }t        |t        t        f      sJ t        |ddgddg      5   |j                  | dd   |j                  d      du }ddd       rt        j                  |d       |S # 1 sw Y   #xY w)a^  
        Merge a list of previously created configs into a single one
        This is much faster than OmegaConf.merge() as the input configs are not copied.
        However, the input configs must not be used after this operation as will become inconsistent.

        :param configs: Input configs
        :return: the merged config object.
        r   r   no_deepcopy_set_nodesFTr   N)
r   r   r~   r   r   r   r   r   rR   r   r   s      rI   unsafe_mergezOmegaConf.unsafe_merge  s    & 7|a"6*&:z":;;;Z!89E4=
 	C Fwqr{+$..z:dBO		C ""640	C 	Cs   
&BBnameresolverc                 n    t        j                  t        d      d       t        j	                  | |      S )Nz            register_resolver() is deprecated.
            See https://github.com/omry/omegaconf/issues/426 for migration instructions.
               )
stacklevel)warningswarnr   rR   legacy_register_resolver)r   r   s     rI   register_resolverzOmegaConf.register_resolver<  s5     	
 11$AArK   c                     t              sJ d        t        j                  vsJ d  d       dt        dt        dt        dt        t
        df   d	t        t        df   d
t
        f fd}|t        j                   <   y )Nresolver must be callable
resolver '' is already registeredr   rc   nodeargs.args_strrC   c                 2   t         j                  |          }|D cg c]$  }|j                  dd      j                  dd      & }}	 t        d |D              }t	        d d| d      c c}w # t
        $ r Y nw xY w|}	|	|v r||	   n | }
|
||	<   |
S )	Nz\  z\,,c              3   *   K   | ]  }d |v s|  yw)rE   NrG   ).0is     rI   	<genexpr>zOOmegaConf.legacy_register_resolver.<locals>.resolver_wrapper.<locals>.<genexpr>a  s     BQ	qBs   	z
Resolver 'z' was called with argument 'a  ' that appears to be an interpolation. Nested interpolations are not supported for resolvers registered with `[legacy_]register_resolver()`, please use `register_new_resolver()` instead (see https://github.com/omry/omegaconf/issues/426 for migration instructions).)rR   	get_cachereplacenext
ValueErrorStopIteration)r   rc   r   r   r   cachex
args_unescbad_argkeyvalr   r   s              rI   resolver_wrapperz<OmegaConf.legacy_register_resolver.<locals>.resolver_wrapperR  s     ''/5EMUV!))E3/77sCVJV
B*BB ! &B7) L` a  W !  C #u%*(J2GCE#JJs   )A.
A3 3	A?>A?)callabler3   
_resolversr0   r   r   r   )r   r   r   s   `` rI   r   z"OmegaConf.legacy_register_resolverJ  s    !>#>>! 000	6v45	60	!	!	 	 S/		
 CHo	 	@ *:  &rK   )r   	use_cacher   r   c                   	 t              st        d       st        d      |s$t        j	                         rt        d  d      	 t        j                        	dt        dt        f	fd} |d	       |d
       |d      dt        dt        dt        dt        t        df   dt        t        df   dt        f fd}|t        j                   <   y# t        $ r d	Y w xY w)a  
        Register a resolver.

        :param name: Name of the resolver.
        :param resolver: Callable whose arguments are provided in the interpolation,
            e.g., with ${foo:x,0,${y.z}} these arguments are respectively "x" (str),
            0 (int) and the value of ``y.z``.
        :param replace: If set to ``False`` (default), then a ``ValueError`` is raised if
            an existing resolver has already been registered with the same name.
            If set to ``True``, then the new resolver replaces the previous one.
            NOTE: The cache on existing config objects is not affected, use
            ``OmegaConf.clear_cache(cfg)`` to clear it.
        :param use_cache: Whether the resolver's outputs should be cached. The cache is
            based only on the string literals representing the resolver arguments, e.g.,
            ${foo:${bar}} will always return the same value regardless of the value of
            ``bar`` if the cache is enabled for ``foo``.
        r   z!cannot use an empty resolver namer   r   NspecialrC   c                 T    d uxr | j                   v }|rrt        d|        |S )Nz?use_cache=True is incompatible with functions that receive the )
parametersr   )r   r   sigr   s     rI   _should_passz5OmegaConf.register_new_resolver.<locals>._should_pass  s?    T/?g&?Cy UV]U^_  JrK   _parent__node__root_r   rc   r   r   .r   c                     rt         j                  |          }	 ||   S i }
r||d<   	r||d<   r| |d<    |i |}r||<   |S # t        $ r Y 3w xY w)Nr   r   r   )rR   r   KeyError)r   rc   r   r   r   r   kwargsr   r   	pass_nodepass_parent	pass_rootr   r   s           rI   r   z9OmegaConf.register_new_resolver.<locals>.resolver_wrapper  s     !++F3D9 ?*
 ')F%+z"#'x #)x D+F+C"%hJ!   s   A
 
	AA)r   r   r   rR   has_resolverinspect	signaturer   boolr3   r/   r0   r   r   r   )
r   r   r   r   r   r   r   r   r   r   s
   `` `  @@@@rI   rS   zOmegaConf.register_new_resolvert  s   2 !788@AA911$7z$/FGHH	/6/@/@/JC	# 	$ 	 #:. *	 *		!		 	 S/		
 CHo	 	 	< *:  &[  	C	s   C' 'C54C5c                 (    | j                  |      d uS rf   )_get_resolverclsr   s     rI   r   zOmegaConf.has_resolver  s      &d22rK   c                  .    i t         _        t                y)zh
        Clear(remove) all OmegaConf resolvers, then re-register OmegaConf's default resolvers.
        N)r3   r   r\   rG   rK   rI   clear_resolverszOmegaConf.clear_resolvers  s    
 $& "$rK   c                 f    | j                  |      r t        j                  j                  |       yy)ap  
        Clear(remove) any resolver only if it exists.

        Returns a bool: True if resolver is removed and False if not removed.

        .. warning:
            This method can remove deafult resolvers as well.

        :param name: Name of the resolver.
        :return: A bool (``True`` if resolver is removed, ``False`` if not found before removing).
        TF)r   r3   r   popr   s     rI   clear_resolverzOmegaConf.clear_resolver  s.     D!$$((. rK   r   c                 .    | j                   j                  S rf   )	_metadataresolver_cacher   s    rI   r   zOmegaConf.get_cache  s    ~~,,,rK   r   c                 L    t        j                  |      | j                  _        y rf   )r   r   r   r   )r   r   s     rI   	set_cachezOmegaConf.set_cache  s    (,e(<%rK   c                 L    t         j                  | t        t        i              y rf   )rR   r   r   rY   r   s    rI   clear_cachezOmegaConf.clear_cache  s    D+dB"78rK   from_config	to_configc                 V    t         j                  |t         j                  |              y rf   )rR   r   r   )r  r  s     rI   
copy_cachezOmegaConf.copy_cache  s    Iy':':;'GHrK   valuec                 (    | j                  d|       y Nr   	_set_flagr   r  s     rI   r   zOmegaConf.set_readonly  s     	z5)rK   c                 $    | j                  d      S r  r   r   s    rI   is_readonlyzOmegaConf.is_readonly  s     ~~j))rK   c                 (    | j                  d|       y Nstructr  r
  s     rI   
set_structzOmegaConf.set_struct  s     	x'rK   c                 $    | j                  d      S r  r  r   s    rI   	is_structzOmegaConf.is_struct  s     ~~h''rK   rZ   c                     ddl m} t        | |      st        d      t        |t              r|g}| j                  d|      D ci c]  \  }}||
 }}} ||      S c c}}w )z
        Create a masked copy of of this config that contains a subset of the keys

        :param conf: DictConfig object
        :param keys: keys to preserve in the copy
        :return: The masked ``DictConfig`` object.
        r   r   z,masked_copy is only supported for DictConfigF)r   rZ   )content)
dictconfigr   r~   r   r   items_ex)r   rZ   r   r   r  r  s         rI   masked_copyzOmegaConf.masked_copy  sh     	+$
+KLLdC 6D04eRV0WX*#u3:XX'** Ys   A r   throw_on_missingenum_to_strstructured_config_modecfgr  r  r  c                    t         j                  |       s!t        dt        t	        |              d      t        j                  | ||||      S )a  
        Resursively converts an OmegaConf config to a primitive container (dict or list).

        :param cfg: the config to convert
        :param resolve: True to resolve all values
        :param throw_on_missing: When True, raise MissingMandatoryValue if any missing values are present.
            When False (the default), replace missing values with the string "???" in the output container.
        :param enum_to_str: True to convert Enum keys and values to strings
        :param structured_config_mode: Specify how Structured Configs (DictConfigs backed by a dataclass) are handled.
            - By default (``structured_config_mode=SCMode.DICT``) structured configs are converted to plain dicts.
            - If ``structured_config_mode=SCMode.DICT_CONFIG``, structured config nodes will remain as DictConfig.
            - If ``structured_config_mode=SCMode.INSTANTIATE``, this function will instantiate structured configs
              (DictConfigs backed by a dataclass), by creating an instance of the underlying dataclass.

          See also OmegaConf.to_object.
        :return: A dict or a list representing this config as a primitive container.
        z-Input cfg is not an OmegaConf config object ()r  )rR   	is_configr   r-   r   r3   _to_contentr  r   r  r  r  s        rI   to_containerzOmegaConf.to_container  sZ    4 ""3'?c@S?TTUV  ((-##9
 	
rK   c                 R    t         j                  | dddt        j                        S )a  
        Resursively converts an OmegaConf config to a primitive container (dict or list).
        Any DictConfig objects backed by dataclasses or attrs classes are instantiated
        as instances of those backing classes.

        This is an alias for OmegaConf.to_container(..., resolve=True, throw_on_missing=True,
                                                    structured_config_mode=SCMode.INSTANTIATE)

        :param cfg: the config to convert
        :return: A dict or a list or dataclass representing this config.
        TFr#  )rR   r$  r1   INSTANTIATE)r  s    rI   	to_objectzOmegaConf.to_objectE  s1     %%!#)#5#5 & 
 	
rK   r   c                     t        | t              sJ 	 | j                  |      }|yt        |t              sJ |j	                         S # t
        t        t        f$ r Y yw xY wNF)r~   r/   
_get_childr0   _is_missingr6   r   AttributeError)r  r   r   s      rI   
is_missingzOmegaConf.is_missingZ  se    #y)))	>>#&D|dD)))##%%,hG 		s   A
 !A
 
A! A!r   c                     |$t        | t              sJ | j                  |      }n| }|"t        |t              sJ |j	                         S yr)  )r~   r/   r*  r0   _is_interpolation)r   r   r   s      rI   is_interpolationzOmegaConf.is_interpolationf  sR    ?dI...__S)FFfd+++++--rK   c                 &    ddl m} t        | |      S )Nr   r   ) r   r~   )rb   r   s     rI   is_listzOmegaConf.is_listr       #z**rK   c                 &    ddl m} t        | |      S )Nr   r  )r3  r   r~   )rb   r   s     rI   is_dictzOmegaConf.is_dictx  r5  rK   c                 &    ddl m} t        | |      S )Nr   )r/   )r3  r/   r~   )rb   r/   s     rI   r!  zOmegaConf.is_config~  s    #y))rK   c                 X    || j                  |      }n| }t        j                  |      S rf   )r*  rR   _get_obj_type)rb   r   cs      rI   get_typezOmegaConf.get_type  s+    ?s#AA&&q))rK   T)defaultthrow_on_resolution_failurer  r=  r>  c          
          ddl m} 	  || ||||      S # t        $ r#}t        | |d|t	        |             Y d}~yd}~ww xY w)a  
        :param cfg: Config node to select from
        :param key: Key to select
        :param default: Default value to return if key is not found
        :param throw_on_resolution_failure: Raise an exception if an interpolation
               resolution error occurs, otherwise return None
        :param throw_on_missing: Raise an exception if an attempt to select a missing key (with the value '???')
               is made, otherwise return None
        :return: selected value or None if not found.
        r   )select_value)r  r   r=  r>  r  N)r   r   r  causemsg)_implr@  	Exceptionr   r   )r  r   r=  r>  r  r@  es          rI   rX   zOmegaConf.select  sT    & 	(		Q,G!1   	Q#3d!QPP	Qs    	A<A)r   	force_addr   rF  c                   t        |      }| }t        t        |      dz
        D ]P  }||   }t        ||d      \  }	}
t	        |	t
              s#|rt        |dd      5  i ||
<   ddd       ni ||
<   ||
   }R |d   }t	        |t
              sJ dt        |      j                          |}t	        |t              rt        |      }|rt        |dd      n	t               }|5  |rt        j                  |      st        |      ret	        |t              sJ |j!                  |      }t        j                  |      r-t	        |t              sJ |j#                  |       	 ddd       yt        j%                  |      r%t	        |t&              sJ |j)                  ||       n<t        j+                  |      r%t	        |t              sJ |j-                  ||       nJ ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)a5  
        Updates a dot separated key sequence to a value

        :param cfg: input config to update
        :param key: key to update (can be a dot separated path)
        :param value: value to set, if value if a list or a dict it will be merged or set
            depending on merge_config_values
        :param merge: If value is a dict or a list, True (default) to merge
                      into the destination, False to replace the destination.
        :param force_add: insert the entire path regardless of Struct flag or Structured Config nodes.
        r   F)r  r  NzUnexpected type for root: )r,   ranger   _select_oner~   r/   r   r   r   r   intr+   rR   r!  r%   r3   r*  r   r7  r   __setattr__r4  __setitem__)r  r   r  r   rF  splitrootr   k	next_rootkey_lastlast_keyctxr   s                  rI   updatezOmegaConf.update  s   * #s5zA~& 
	AaA)$EJOIti3&tXu= (%'T
( ( "$DJ:D
	 Ry)
 	>'T
(;(;'<=	> 
 %)dJ'4yH6?mD(E2[] 	)--e48Nu8U!$666x0&&t,%dM:::OOE*	 	   &!(C000  51""4(!(C000  51u!	 	#( ("	 	s    G)"A?G6*A6G6)G3	6G?)r   	sort_keysrW  c                    t        |       } t        j                  | |d      }t        j                  |dd|t                     S )a  
        returns a yaml dump of this config object.

        :param cfg: Config object, Structured Config type or instance
        :param resolve: if True, will return a string with the interpolations resolved, otherwise
            interpolations are preserved
        :param sort_keys: If True, will print dict keys in sorted order. default False.
        :return: A string containing the yaml representation.
        T)r   r  F)default_flow_styleallow_unicoderW  Dumper)r   rR   r$  r   dumpr   )r  r   rW  	containers       rI   r   zOmegaConf.to_yaml  sH      $**3T*R	yy$(*
 	
rK   c                     ddl }t        j                  |       s"t        dt	        |       j
                   d      |j                  j                  |        y)z
        Resolves all interpolations in the given config object in-place.

        :param cfg: An OmegaConf container (DictConfig, ListConfig)
                    Raises a ValueError if the input object is not an OmegaConf container.
        r   NzInvalid config type (z"), expected an OmegaConf Container)omegaconf._implrR   r!  r   r   r   rC  _resolve)r  	omegaconfs     rI   r   zOmegaConf.resolve  sP     	""3' 'S	(:(:';;]^  	  %rK   c                 b    t        |       } t               dt        ddffd |        S )aA  
        Returns a set of missing keys in a dotlist style.

        :param cfg: An ``OmegaConf.Container``,
                    or a convertible object via ``OmegaConf.create`` (dict, list, ...).
        :return: set of strings of the missing keys.
        :raises ValueError: On input not representing a config.
        _cfgrC   Nc                    t        | t              rt        t        |             }n| }|D ]]  }t        j                  | |      r!j                  | j                  |             :t        j                  | |         sS | |          _ y rf   )	r~   r   rI  r   rR   r-  add_get_full_keyr!  )rc  itrr   gathermissingss      rI   rh  z&OmegaConf.missing_keys.<locals>.gather   st    $
+CI& &''c2LL!3!3C!89((c349%	&rK   )r   setr/   )r  rh  ri  s    @@rI   missing_keyszOmegaConf.missing_keys  s7      $ U	& 	&t 	& 	srK   c           	      J   	 ddl m} ddlm} ddlm} | t        u ri } t        | t              rt        j                  |  |             } | t        j                  i ||      S t        | t              rt        j                  | d i||      S t        | t        t        f      sJ t        j                  | ||      S t        |       s"t        j!                  |       st#        |       s| t        | |      r_ || || j$                  j&                  | j$                  j(                  | j$                  j*                  | j$                  j,                  |      S t        j/                  |       }t1        |      \  }} || ||||      S t3        |       st        j5                  |       rt        | |      rJ || || j$                  j,                  | j$                  j&                  | j$                  j(                  |	      S t        j/                  |       }t7        |      } || ||t8        d
|	      S t        | t:              rt=        d| j>                   d      t=        dt;        |       j>                   d      # t@        $ r }	tC        d d d t        |	      |	       J d }	~	ww xY w)Nr   rs   r  r2  ry   )rc   rd   )r  rc   ref_typeis_optionalkey_typeelement_typerd   )r  rc   ro  rp  rd   )r  rc   rp  rm  rn  rd   TzInput class 'zK' is not a structured config. did you forget to decorate it as a dataclass?zObject of unsupported type: '')r   r   r  rB  rA  )"r}   rt   r  r   
listconfigr   r   r~   r   r   r   rR   rT   r   rY   r&   r7  r(   r   rm  optionalro  rp  r<  r   r'   r4  r   r   r   r7   r   r5   r   )
rb   rc   rd   rt   r   r   obj_typero  rp  rE  s
             rI   rp   zOmegaConf._create_impl2  s|   M	/..&&#s#iiO,=>;$++BvU+KKS)$++S$Ke+TT%cD$<888$++Ce+LL &c* ((-+C0{!#z2)$'#)%(]]%;%;(+(>(>%(]]%;%;),)C)C"'   $-#5#5c#:1I(1S.,)$'#)%-)5"'   's+y/@/@/E!#z2)$'#)),)C)C%(]]%;%;(+(>(>"'   $-#5#5c#:'<X'F)$'#))5%((,"'   "#t,-+CLL> :L L 
 .;DI<N<N;OqQ  & 	$D#a&PQR5	sE   A!I9 $)I9 /I9 >BI9 /I9 A5I9 <1I9 .AI9 9	J"JJ"r;  c                 N   t        |       rt        |       S | y t        | t              r]| j	                         ry | j                         ry t        | j                  j                        r| j                  j                  S t        S t        | t              rt        S t        | t              rt        | j                               S t        | t              rt        t        |             S t        | t              rt        S t        | t        t         f      rt        S t        |       S rf   )r(   r   r~   r   _is_noner+  r   object_typerY   r   r   r@   r   _valuer2   r   tuple)r;  s    rI   r:  zOmegaConf._get_obj_type  s    "q>!Y:&zz|'(?(?@;;222K:&K9%
##9%
1&&4 KD%=)Kq>!rK   c                 P    | t         j                  v rt         j                  |    S d S rf   )r3   r   )r   s    rI   r   zOmegaConf._get_resolver  s,     /3m6N6N.NM$$T*	
TX	
rK   rC   N)NN)NNN)Frf   )Hr   
__module____qualname____doc__ra   staticmethodr   r   r3   r
   r   r   rh   r   r   r   r   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   Resolverr   r   rS   classmethodr   r   r   r   r   r   r  r0   r   r  r/   r  r  r  r1   DICTr$  r'  r-  rK  r0  r4  r7  r!  r   r<  rX   rV  r   r   r   rk  rp   r:  r	   r   rG   rK   rI   rR   rR   q   s
   !R  +/+/44'4 S$Y(4 
	4 4  +/+/' S$Y( 
z:%	&	    +/+/49eCHo-.' S$Y( 
	    +/+/' S$Y( 
	    +/+/' S$Y( 
	   (,*.+/d38n%' S$Y( 
	   #*.+/	
	
'	
 S$Y(	
 
z:%	&		
 	
 E#w||RW45 %
J@V:W  . KP44c7<<C894DH4	4 4, 1HT#Y/ 1: 1 1 	d3i 	J 	 	 c!"I#s(O
 
z:%	& <  c!"I#s(O
  
z:%	&   D 
B 
Bx 
BD 
B 
B ':s ':h ':4 ': ':R 
 O:O:O: 	O:
 O: 
O: O:b 3 3 3 3 % % # $  & - -$sCx. - - = =d38n = = = 9- 9D 9 9 I I- ID I I *4 * *4 * * *$ *8D> * * ( (8D> (d ( ( (	 (htn ( ( +* +E#tCy.,A +j + +$  !&!)/$
$
 $
 	$

 $
 !'$
 
tK$%tCy$S@	A$
 $
L 
s 
uT+s*:%;T#YcSV%VW 
 
( 	 	+ 	$ 	 	 	s 	%S/)B 	d 	 	 +S +T + +
 +S +T + +
 *s *t * *
 *c * *$s)9L * * 
 (,0!&QQQ 	Q
 &*Q Q 
Q Q>  =
 === =
 = = 
= =~ -2e 
S 
d 
t 
PS 
 
( &Y &4 & &" # #c(  < #*.+/RR'R S$Y(R 
z:%	&	R Rh " "$s)!4 " "8 

		4sCx%S/J	


 
rK   rR   r   namesr[   c              #   "  K   t        |t              r|g}|t        |t              r|g}|D cg c]  }| j                  |       }}	 | j	                  ||       |  | j	                  ||       y c c}w # | j	                  ||       w xY wwrf   )r~   r   r   _get_node_flagr	  )r   r  r[   r   prev_statess        rI   r   r     s      %~FD1;@A46((.AKA-', B 	,s(   -BA3B
A8  B8BBc              #      K   | j                  d      }	 t        j                  | d       |  t        j                  | |       y # t        j                  | |       w xY ww)Nr   F)r  rR   r   r   
prev_states     rI   
read_writer    sP     &&z2J3vu-vz2	vz2   A!A A!AA!c              #      K   | j                  d      }	 t        j                  | d       |  t        j                  | |       y # t        j                  | |       w xY ww)Nr  F)r  rR   r  r  s     rI   	open_dictr    sP     &&x0J1VU+VZ0	VZ0r  rc   rn  r  r   rm  c           	         t        |      st        |      r*|t        u r"t        |      \  }}t	        ||| ||||      }|S t        |      s*t        |      st        |      t        t        fv r&|t        u rt        |      }t        ||| |||      }|S t        |      st        |      r"t        |      \  }}t	        ||||| ||      }|S t        |      rt        |||||       }|S |t        k(  s|t        |||       }|S t!        |t              r"t#        |t$              rt'        |||| |      }|S |t(        k(  rt+        ||| |      }|S |t,        k(  rt/        ||| |      }|S |t0        k(  rt3        ||| |      }|S |t4        k(  rt7        ||| |      }|S |t8        k(  rt;        ||| |      }|S |t<        j>                  k(  rtA        ||| |      }|S | i| jC                  d      d	u rVt        |      t        t        fv rt        ||| ||
      }|S t        |      rt	        ||| ||
      }|S t        |||       }|S tE        dtG        |             )N)r  r   rc   rm  rn  ro  rp  )r  r   rc   rn  rp  rm  )rm  rn  r  r   rc   ro  rp  )r  rm  rn  r   rc   )r  r   rc   )	enum_typer  r   rc   rn  )r  r   rc   rn  allow_objectsT)r  r   rc   rm  rn  zUnexpected type annotation: )$r"   r&   r   r   r   r$   r)   r   r   ry  r   r   r(   r*   r2   r8   r~   
issubclassr   r;   rK  r=   floatr<   r   r9   r   r?   bytesr:   r   r   r>   r   r7   r-   )rc   rn  r  r   rm  ro  rp  r   s           rI   
_node_wrapr    s    (#(9%(@XQT_!9(!C,#%
h KW X
&*=h*GUe}$S,X6#%
N K 
h	'+?+F!9%!@,#%
z Ki 
X	&#
f KY 
SH,UF;V KU 
Hd	#
8T(B#
R KE 
SCKXB KA 
U	u#f+V> K= 
T	CKX: K9 
S3v;W6 K5 
U	u#f+V2 K1 
W\\	!eVU. K+ &"2"2?"Ct"KE{tUm+!!!% +& K #5)!!!% + K UFC K "$@(AS@T"UVVrK   c                     t        |t              r$|j                  |       |j                  |       |S t	        | ||||      S )N)rm  rc   rn  r  r   )r~   r0   _set_key_set_parentr  )rm  r   r  rn  rc   s        rI   _maybe_wrapr  C  sI     %s&!#
 	
rK   r;  r  throw_on_type_errorc                    ddl m} ddlm} |}t	        | t
              s
J d|         | j                         rd |fS t	        | |      r&t	        |t              sJ | j                  |d      }nt	        | |      r}t	        |t              sJ t        |      s*|r%t        d| dt        |      j                   d	      d }n8t        |      }|d
k  s|dz   t        |       kD  rd }n| j                  |      }nJ |Et	        |t              sJ |j!                         r#|rt#        d| j%                  |             ||fS |t	        |t              sJ ||fS )Nr   r  r2  zUnexpected type: F)validate_accesszIndex 'z' (z) is not an intr   zMissing mandatory value: )r  r   rr  r   r~   r/   rv  r   r*  r#   r   r   r   rK  r   r0   r+  r4   rf  )r;  r   r  r  r   r   ret_keyr   s           rI   rJ  rJ  Z  sd    '&"Ga#<'8%<<#zz|W}!Z '3'''ll7El:	Az	"'3'''g"gYc$w-*@*@)AQ  'lG{gkCF2ll7+u
#t$$$??+/0H/IJ  G|#;*S$///<rK   r{  )T)ar~  r   r   r   r   r   r   r   collectionsr   
contextlibr   enumr   textwrapr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r3  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/   r0   r1   r2   basecontainerr3   errorsr4   r5   r6   r7   nodesr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   __annotations__r  r   rJ   rM   r\   rR   r   r   r  r  r  r  rK  rJ  rG   rK   rI   <module>r     s      	 	  
  # %        1 1     0 : 9 ( 
 
 
  CH&c &c &c c 	F
 
F   --cC - $x~&67- tT4 	- -& 3t 3	$d*: ; 3 3 1i 1Iit.C$D 1 1" ^SM^^ ^ 
	^
 ^ 
^B

	
 
 	

 ]#
 

0 QU+++.2+IM+
8D>5c?*++rK   