o
    }oi                     @   s   d dl mZ d dlmZmZmZmZmZ 			ddedede	deeeeef ee f  d	ef
d
dZ
ded	efddZded	efddZded	efddZdS )    )ArgumentParser)AnyDictListOptionalUnionadamNparent_parser	optimizer
default_lrdefault_opt_argsreturnc                 C   sX   |du rg }t | gddd}|jdt|dd |jdt|d	d |jd
|dtdd |S )a  Extends existing argparse with support for optimizers.

    # Example of adding optimizer args to command line :
    python train_script.py ... --optimizer "novograd" --lr 0.01         --opt_args betas=0.95,0.5 weight_decay=0.001

    Args:
        parent_parser (ArgumentParser): Custom CLI parser that will be extended.
        optimizer (str): Default optimizer required.
        default_lr (float): Default learning rate that should be overriden during training.
        default_opt_args (list(str)): List of overriding arguments for the instantiated optimizer.

    Returns:
        ArgumentParser: Parser extended by Optimizers arguments.
    NTresolveparentsadd_helpconflict_handlerz--optimizerz(Name of the optimizer. Defaults to Adam.)typedefaulthelpz--lrzLearning rate of the optimizer.z
--opt_args+zOverriding arguments for the optimizer. 
 Must follow the pattern : 
 name=value separated by spaces.Example: --opt_args weight_decay=0.001 eps=1e-8 betas=0.9,0.999)r   nargsr   r   )r   add_argumentstrfloat)r	   r
   r   r   parser r   H/home/ubuntu/.local/lib/python3.10/site-packages/nemo/utils/arguments.pyadd_optimizer_args   s   	r   c                 C   s   t | gddd}|jdtdddd |jdtddd	d |jd
tdddd |jdtdddd |jdtdddd |jdtdddd |S )zExtends existing argparse with default LR scheduler args.

    Args:
        parent_parser (ArgumentParser): Custom CLI parser that will be extended.

    Returns:
        ArgumentParser: Parser extended by LR Scheduler arguments.
    Fr   r   z--warmup_stepsNzNumber of warmup stepsr   requiredr   r   z--warmup_ratioz>Number of warmup steps as a percentage of total training stepsz--hold_stepszNumber of hold LR stepsz--hold_ratioz?Number of hold LR steps as a percentage of total training stepsz--min_lrg        zMinimum learning ratez--last_epochz1Last epoch id. -1 indicates training from scratch)r   r   intr   r	   r   r   r   r   add_scheduler_args;   s,   	
r$   c                 C   sN   t | gddd}|jdtdddd |jd	tdd
dd |jdtddd |S )zExtends existing argparse with default ASR collection args.

    Args:
        parent_parser (ArgumentParser): Custom CLI parser that will be extended.

    Returns:
        ArgumentParser: Parser extended by NeMo ASR Collection arguments.
    Fr   r   z--asr_modelTzbad_quartznet15x5.yaml r   z--train_datasetNztraining dataset pathz--eval_datasetzevaluation dataset pathr   r    r   r   r   r   r#   r   r   r   add_asr_args\   s
   	r(   c                 C   s   t | gddd}|jdtddd |jdtddd	d
 |jddtddd |jddtddgdd |jddtdd |jddddd |S )zExtends existing argparse with default NLP collection args.

    Args:
        parent_parser (ArgumentParser): Custom CLI parser that will be extended.

    Returns:
        ArgumentParser: Parser extended by NeMo NLP Collection arguments.
    Fr   r   z
--data_dirz4data directory to training or/and evaluation datasetr&   z--config_fileNz$Huggingface model configuration filer   z--pretrained_model_namezbert-base-uncasedzpretrained model name)r   r   r    r   z--tokenizer_namenemobertsentencepiecezTokenizer type)r   r   choicesr   z--tokenizer_modelz!Tokenizer file for sentence piece)r   r   r   z--do_lower_case
store_truezlower case data)actionr    r   r'   r#   r   r   r   add_nlp_argsl   s    	

r.   )r   NN)argparser   typingr   r   r   r   r   r   r   r   r$   r(   r.   r   r   r   r   <module>   s&   
(!