o
    i                     @   s.   d dl Z d dlZd dlZG dd de jZdS )    Nc                       s<   e Zd ZdZdZ						d	 fdd	Zd
ddZ  ZS )NestedDictActiona  Action class to append items to dict object.

    Examples:
        >>> parser = argparse.ArgumentParser()
        >>> _ = parser.add_argument('--conf', action=NestedDictAction,
        ...                         default={'a': 4})
        >>> parser.parse_args(['--conf', 'a=3', '--conf', 'c=4'])
        Namespace(conf={'a': 3, 'c': 4})
        >>> parser.parse_args(['--conf', 'c.d=4'])
        Namespace(conf={'a': 4, 'c': {'d': 4}})
        >>> parser.parse_args(['--conf', 'c.d=4', '--conf', 'c=2'])
        Namespace(conf={'a': 4, 'c': 2})
        >>> parser.parse_args(['--conf', '{d: 5, e: 9}'])
        Namespace(conf={'d': 5, 'e': 9})

    zSyntax:
  {op} <key>=<yaml-string>
  {op} <key>.<key2>=<yaml-string>
  {op} <python-dict>
  {op} <yaml-string>
e.g.
  {op} a=4
  {op} a.b={{c: true}}
  {op} {{"c": True}}
  {op} {{a: 34.5}}
NFc	           	         s(   t  j|||t|d ||||d	 d S )N)	option_stringsdestnargsdefaulttypechoicesrequiredhelpmetavar)super__init__copydeepcopy)	selfr   r   r   r   r   r	   r
   r   	__class__ T/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/utils/nested_dict_action.pyr   %   s   
zNestedDictAction.__init__c                 C   s  d|v rct t|| ji }|jddd\}}| dks%tj|tjd}t	|t
s,i }|d}|}	t|D ]"\}
}|
t|d krH||	|< q7t	|	|i t
sUi |	|< |	| }	q7t|| j| d S z"t|i i }t	|t
s| jj|d}d| d	| }t| |W n+ ty   tj|tjd}t	|t
s| jj|d}d| d	| }t| |Y nw t|| jd }	t	|	t
r|	| d S t|| j| d S )
N=   )maxsplit )Loader.)opz%must be interpreted as dict: but got 
)r   r   getattrr   splitstripyamlloadr   
isinstancedict	enumeratelen
setdefaultsetattreval_syntaxformatargparseArgumentTypeError	ExceptionArgumentErrorupdate)r   parser	namespacevaluesr   indictkeyvaluekeysdidxksyntaxmesr   r   r   __call__<   sF   






zNestedDictAction.__call__)NNNFNN)N)__name__
__module____qualname____doc__r)   r   r<   __classcell__r   r   r   r   r      s    r   )r+   r   r    Actionr   r   r   r   r   <module>   s    