class_docstr: DistributionOutput class for the Incremental (Spline) Quantile Function
  
  Parameters
  ----------
  num_pieces
      number of spline pieces for each spline
      ISQF reduces to IQF when num_pieces = 1
  alpha
      Tensor containing the x-positions of quantile knots
  tol
      tolerance for numerical safeguarding
class_docstr_tok: ["DistributionOutput","class","for","the","Incremental","(","Spline",")","Quantile","Function","Parameters","--","--","--","--","--","num_pieces","number","of","spline","pieces","for","each","spline","ISQF","reduces","to","IQF","when","num_pieces","=","1","alpha","Tensor","containing","the","x-positions","of","quantile","knots","tol","tolerance","for","numerical","safeguarding"]
docstr: Domain map function The inputs of this function are specified by
  self.args_dim knots, heights:
  
  parameterizing the x-/ y-positions of the spline knots,
  shape = (*batch_shape, (num_qk-1)*num_pieces)
  q:
  parameterizing the y-positions of the quantile knots,
  shape = (*batch_shape, num_qk)
  beta_l, beta_r:
  parameterizing the left/right tail, shape = (*batch_shape, 1)
code: def domain_map(
      cls,
      F,
      *args: Tensor,
      tol: float = 1e-4,
  ) -> Tuple[Tensor, Tensor, Tensor, Tensor, Tensor]:
      """
      Domain map function The inputs of this function are specified by
      self.args_dim knots, heights:
  
      parameterizing the x-/ y-positions of the spline knots,
      shape = (*batch_shape, (num_qk-1)*num_pieces)
      q:
      parameterizing the y-positions of the quantile knots,
      shape = (*batch_shape, num_qk)
      beta_l, beta_r:
      parameterizing the left/right tail, shape = (*batch_shape, 1)
      """
  
      try:
          (
              spline_knots,
              spline_heights,
              beta_l,
              beta_r,
              quantile_knots,
          ) = args
      except ValueError:
          raise ValueError(
              "Failed to unpack args of domain_map. Double check your input."
          )
  
      # Add tol to prevent the y-distance of
      # two quantile knots from being too small
      #
      # Because in this case the spline knots could be squeezed together
      # and cause overflow in spline CRPS computation
      qk_y = F.concat(
          F.slice_axis(quantile_knots, axis=-1, begin=0, end=1),
          F.abs(
              F.slice_axis(quantile_knots, axis=-1, begin=1, end=None)
          )
          + tol,
          dim=-1,
      )
      # TODO: update to mxnet cumsum when it supports axis=-1
      qk_y = cumsum(F, qk_y)
  
      # Prevent overflow when we compute 1/beta
      beta_l, beta_r = (
          F.abs(beta_l.squeeze(axis=-1)) + tol,
          F.abs(beta_r.squeeze(axis=-1)) + tol,
      )
  
      return spline_knots, spline_heights, beta_l, beta_r, qk_y
  
imports: from typing import Dict, List, Optional, Tuple
  import numpy
  from gluonts.core.component import validated
  from gluonts.mx import Tensor
  from gluonts.mx.util import cumsum
  from .bijection import AffineTransformation, Bijection
  from .distribution import Distribution, getF
  from .distribution_output import DistributionOutput
  from .transformed_distribution import TransformedDistribution
label_desc: Use image node_id 2 for calling the ISQFOutput obj's underlying member method code with example usage: obj.domain_map(cls, F) and returns: spline_knots,  spline_heights,  beta_l,  beta_r,  qk_y