code: def forward(self, predict_data, target_data):
      if self.quantile_levels is None:
          return None
      target_data = target_data.contiguous().reshape(-1, 1)
      batch_size = target_data.size()[0]
      predict_data = predict_data.contiguous().reshape(batch_size, -1)
  
      error_data = target_data - predict_data
      if self.alpha == 0.0:
          loss_data = torch.max(
              self.quantile_levels * error_data,
              (self.quantile_levels - 1) * error_data,
          )
      else:
          loss_data = torch.where(
              torch.abs(error_data) < self.alpha,
              0.5 * error_data * error_data,
              self.alpha * (torch.abs(error_data) - 0.5 * self.alpha),
          )
          loss_data = loss_data / self.alpha
  
          scale = torch.where(
              error_data >= 0,
              torch.ones_like(error_data) * self.quantile_levels,
              torch.ones_like(error_data) * (1 - self.quantile_levels),
          )
          loss_data *= scale
      return loss_data.mean()
  
file_path: autogluon/tabular/src/autogluon/tabular/models/fastainn/quantile_helpers.py
imports: import numpy
  import torch
  import torch.nn
  from sklearn.isotonic import IsotonicRegression
label_desc: Use image node_id 2 for calling the HuberPinballLoss obj's underlying member method code with example usage: obj.forward(predict_data, target_data) and returns: loss_data, None