With Python 3.10 pattern matching released, we can very easily implement ModuelInterface.log() method which can take the following combinations of arguments:
ModuleInterface.log(msg:str) -> log message to loggers (stdout)
ModuleInterace.log(key:str, value:float) -> log metric to metric logger (azureml, tensorboard, stdout) as well as keeping track in pymarlin trainer to potentially use for Early Stopping and Best checkpointing
Other sane defaults may include, moving tensors to device automatically, base implementation of train/val step, etc