code: def training_step(self, batch, batch_idx):
      y = batch["target"]
      ret_value = self(batch)
      loss = self.calculate_loss(
          y,
          ret_value["pi"],
          ret_value["sigma"],
          ret_value["mu"],
          tag="train",
      )
      if self.head.hparams.speedup_training:
          pass
      else:
          y_hat = self.head.generate_point_predictions(
              ret_value["pi"], ret_value["sigma"], ret_value["mu"]
          )
          self.calculate_metrics(y, y_hat, tag="train")
      return loss
  
imports: from typing import Dict, Optional, Union
  import torch
  import torch.nn
  from omegaconf import DictConfig, OmegaConf
  from torch import Tensor
  from pytorch_tabular import models
  from pytorch_tabular.config.config import ModelConfig
  from pytorch_tabular.models.common.heads import blocks
  from pytorch_tabular.models.tab_transformer.tab_transformer import TabTransformerBackbone
  from pytorch_tabular.tabular_model import getattr_nested
  from pytorch_tabular.utils import get_logger
  from ..base_model import BaseModel, safe_merge_config
label_desc: Use image node_id 13 for calling the MDNModel obj's underlying member method code with example usage: obj.training_step(batch, batch_idx) and returns: loss