# EVALUATOR - PROGRESS MANAGER
START_CONFIG = 'START_CONFIG'
END_CONFIG = 'END_CONFIG'
END_FINAL_RUN = 'END_FINAL_RUN'
OUTER_FOLD = 'outer_fold'
INNER_FOLD = 'inner_fold'
CONFIG_ID = 'config_id'
RUN_ID = 'run_id'
ELAPSED = 'elapsed'
EXP_NAME = 'exp_name'
SEED = 'seed'
GRID_SEARCH = 'grid'
RANDOM_SEARCH = 'random'
NUM_SAMPLES = 'num_samples'
SAMPLE_METHOD = 'sample_method'
DATASET = 'dataset'
CONFIG = 'config'
MODEL_ASSESSMENT = 'MODEL_ASSESSMENT'
FOLDS = 'folds'
TR_LOSS = 'training_loss'
VL_LOSS = 'validation_loss'
TR_SCORE = 'training_score'
VL_SCORE = 'validation_score'
BEST_CONFIG = 'best_config'
OUTER_TRAIN = 'outer_train'
OUTER_VALIDATION = 'outer_validation'
OUTER_TEST = 'outer_test'

# SPLITTER
DATA_SPLITTER_BASE_PATH = 'pydgn.data.splitter.'

# ENGINE
DEFAULT_ENGINE_CALLBACK = 'pydgn.training.callback.engine_callback.EngineCallback'

# STATE
TRAINING = 'training'
EVALUATION = 'evaluation'
VALIDATION = 'validation'
TEST = 'test'
MAIN_LOSS = 'main_loss'
MAIN_SCORE = 'main_score'
LOSSES = 'losses'
LOSS = 'loss'
SCORES = 'scores'
SCORE = 'score'
MODEL_STATE = 'model_state'
OPTIMIZER_STATE = 'optimizer_state'
SCHEDULER_STATE = 'scheduler_state'
BEST_EPOCH = 'best_epoch'
BEST_EPOCH_RESULTS = 'best_epoch_results'
EPOCH = 'epoch'
STOP_TRAINING = 'stop_training'
LAST_CHECKPOINT_FILENAME = 'last_checkpoint.pth'
BEST_CHECKPOINT_FILENAME = 'best_checkpoint.pth'
BATCH_LOSS_EXTRA = 'batch_loss_extra'

# STRING FORMATTING
TENSORBOARD = 'tensorboard'
EMB_TUPLE_SUBSTR = '_embeddings_tuple'
ATOMIC_SAVE_EXTENSION = '.part'
CLASS_NAME = 'class_name'
ARGS = 'args'
MODEL_STATE_DICT = 'model_state_dict'
OPTIMIZER_STATE_DICT = 'optimizer_state_dict'
AVG = 'avg'
STD = 'std'

# SET UP
CUDA = 'cuda'
PYDGN_RAY_NUM_GPUS_PER_TASK = 'PYDGN_RAY_NUM_GPUS_PER_TASK'
MIN = 'min'
MAX = 'max'

# CLI
CONFIG_FILE_CLI_ARGUMENT = '--config-file'
CONFIG_FILE = 'config_file'
DEBUG_CLI_ARGUMENT = '--debug'

DATA_ROOT = 'data_root'
DATA_SPLITS_FILE = 'data_splits_file'
DATASET_CLASS = 'dataset_class'
DATASET_GETTER = 'dataset_getter'
evaluate_every = 'evaluate_every'
EVALUATE_EVERY = 'evaluate_every'
DATA_LOADER = 'data_loader'
DATA_LOADER_ARGS = 'data_loader_args'
DATASET_NAME = 'dataset_name'
DEBUG = 'debug'
DEVICE = 'device'
EXPERIMENT = 'experiment'
FINAL_TRAINING_RUNS = 'final_training_runs'
GPUS_PER_TASK = 'gpus_per_task'
HIGHER_RESULTS_ARE_BETTER = 'higher_results_are_better'
MAX_CPUS = 'max_cpus'
MAX_GPUS = 'max_gpus'
MODEL = 'model'
RESULT_FOLDER = 'result_folder'