class_docstr: Distribution class for the Incremental (Spline) Quantile Function in the
  paper ``Learning Quantile Functions without Quantile Crossing for
  Distribution-free Time Series Forecasting``
  by Park, Robinson, Aubet, Kan, Gasthaus, Wang
  Parameters
  ----------
  spline_knots, spline_heights
      Tensor parametrizing the x-positions (y-positions) of the spline knots
      Shape: (*batch_shape, (num_qk-1), num_pieces)
  qk_x, qk_y
      Tensor containing the increasing x-positions (y-positions) of the
      quantile knots, Shape: (*batch_shape, num_qk)
  beta_l, beta_r
      Tensor containing the non-negative learnable parameter of the
      left (right) tail, Shape: (*batch_shape,)
class_docstr_tok: ["Distribution","class","for","the","Incremental","(","Spline",")","Quantile","Function","in","the","paper","``","Learning","Quantile","Functions","without","Quantile","Crossing","for","Distribution-free","Time","Series","Forecasting","``","by","Park",",","Robinson",",","Aubet",",","Kan",",","Gasthaus",",","Wang","Parameters","--","--","--","--","--","spline_knots",",","spline_heights","Tensor","parametrizing","the","x-positions","(","y-positions",")","of","the","spline","knots","Shape",":","(","*","batch_shape",",","(","num_qk-1",")",",","num_pieces",")","qk_x",",","qk_y","Tensor","containing","the","increasing","x-positions","(","y-positions",")","of","the","quantile","knots",",","Shape",":","(","*","batch_shape",",","num_qk",")","beta_l",",","beta_r","Tensor","containing","the","non-negative","learnable","parameter","of","the","left","(","right",")","tail",",","Shape",":","(","*","batch_shape",",",")"]
docstr: Function to parameterize the x or y positions
  of the num_qk quantile knots
  Parameters
  ----------
  quantile_knots
      x or y positions of the quantile knots
      shape: (*batch_shape, num_qk)
  Returns
  -------
  qk
      x or y positions of the quantile knots (qk),
      with index=1, ..., num_qk-1,
      shape: (*batch_shape, num_qk-1)
  qk_plus
      x or y positions of the quantile knots (qk),
      with index=2, ..., num_qk,
      shape: (*batch_shape, num_qk-1)
  qk_l
      x or y positions of the left-most quantile knot (qk),
      shape: (*batch_shape)
  qk_r
      x or y positions of the right-most quantile knot (qk),
      shape: (*batch_shape)
docstr_tok: ["Function","to","parameterize","the","x","or","y","positions","of","the","num_qk","quantile","knots","Parameters","--","--","--","--","--","quantile_knots","x","or","y","positions","of","the","quantile","knots","shape",":","(","*","batch_shape",",","num_qk",")","Returns","--","--","--","-","qk","x","or","y","positions","of","the","quantile","knots","(","qk",")",",","with","index=1",",","...",",","num_qk-1",",","shape",":","(","*","batch_shape",",","num_qk-1",")","qk_plus","x","or","y","positions","of","the","quantile","knots","(","qk",")",",","with","index=2",",","...",",","num_qk",",","shape",":","(","*","batch_shape",",","num_qk-1",")","qk_l","x","or","y","positions","of","the","left-most","quantile","knot","(","qk",")",",","shape",":","(","*","batch_shape",")","qk_r","x","or","y","positions","of","the","right-most","quantile","knot","(","qk",")",",","shape",":","(","*","batch_shape",")"]
code: def parameterize_qk(
      quantile_knots: torch.Tensor,
  ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
      r"""
      Function to parameterize the x or y positions
      of the num_qk quantile knots
      Parameters
      ----------
      quantile_knots
          x or y positions of the quantile knots
          shape: (*batch_shape, num_qk)
      Returns
      -------
      qk
          x or y positions of the quantile knots (qk),
          with index=1, ..., num_qk-1,
          shape: (*batch_shape, num_qk-1)
      qk_plus
          x or y positions of the quantile knots (qk),
          with index=2, ..., num_qk,
          shape: (*batch_shape, num_qk-1)
      qk_l
          x or y positions of the left-most quantile knot (qk),
          shape: (*batch_shape)
      qk_r
          x or y positions of the right-most quantile knot (qk),
          shape: (*batch_shape)
      """
  
      qk, qk_plus = quantile_knots[..., :-1], quantile_knots[..., 1:]
      qk_l, qk_r = quantile_knots[..., 0], quantile_knots[..., -1]
  
      return qk, qk_plus, qk_l, qk_r
  
imports: from typing import Dict, List, Optional, Tuple
  import torch
  import torch.nn.functional
  from torch.distributions import AffineTransform, TransformedDistribution
  from gluonts.core.component import validated
  from .distribution_output import DistributionOutput
label_desc: Use image node_id 2 for calling the ISQF obj's underlying member method code with example usage: obj.parameterize_qk(quantile_knots) and returns: qk,  qk_plus,  qk_l,  qk_r