class_docstr: Temporal Normalization
  
  Standardization of the features is a common requirement for many
  machine learning estimators, and it is commonly achieved by removing
  the level and scaling its variance. The `TemporalNorm` module applies
  temporal normalization over the batch of inputs as defined by the type of scaler.
  
  $$\mathbf{z}_{[B,T,C]} = \textrm{Scaler}(\mathbf{x}_{[B,T,C]})$$
  
  If `scaler_type` is `revin` learnable normalization parameters are added on top of
  the usual normalization technique, the parameters are learned through scale decouple
  global skip connections. The technique is available for point and probabilistic outputs.
  
  $$\mathbf{\hat{z}}_{[B,T,C]} = \boldsymbol{\hat{\gamma}}_{[1,1,C]} \mathbf{z}_{[B,T,C]} +\boldsymbol{\hat{\beta}}_{[1,1,C]}$$
  
  **Parameters:**<br>
  `scaler_type`: str, defines the type of scaler used by TemporalNorm. Available [`identity`, `standard`, `robust`, `minmax`, `minmax1`, `invariant`, `revin`].<br>
  `dim` (int, optional): Dimension over to compute scale and shift. Defaults to -1.<br>
  `eps` (float, optional): Small value to avoid division by zero. Defaults to 1e-6.<br>
  `num_features`: int=None, for RevIN-like learnable affine parameters initialization.<br>
  
  **References**<br>
  - [Kin G. Olivares, David Luo, Cristian Challu, Stefania La Vattiata, Max Mergenthaler, Artur Dubrawski (2023). "HINT: Hierarchical Mixture Networks For Coherent Probabilistic Forecasting". Neural Information Processing Systems, submitted. Working Paper version available at arxiv.](https://arxiv.org/abs/2305.07089)<br>
docstr: Scale back the data to the original representation.
  
  **Parameters:**<br>
  `z`: torch.Tensor shape [batch, time, channels], scaled.<br>
  
  **Returns:**<br>
  `x`: torch.Tensor original data.
docstr_tok: ["Scale","back","the","data","to","the","original","representation",".","*","*","Parameters",":","*","*","<","br",">","`","z","`",":","torch.Tensor","shape","[","batch",",","time",",","channels","]",",","scaled.","<","br",">","*","*","Returns",":","*","*","<","br",">","`","x","`",":","torch.Tensor","original","data","."]
code: def inverse_transform(self, z, x_shift=None, x_scale=None):
      """Scale back the data to the original representation.
  
      **Parameters:**<br>
      `z`: torch.Tensor shape [batch, time, channels], scaled.<br>
  
      **Returns:**<br>
      `x`: torch.Tensor original data.
      """
  
      if x_shift is None:
          x_shift = self.x_shift
      if x_scale is None:
          x_scale = self.x_scale
  
      # Original Revin performs this operation
      # z = z - self.revin_bias
      # z = (z / (self.revin_weight + self.eps))
      # However this is only valid for point forecast not for
      # distribution's scale decouple technique.
  
      x = self.inverse_scaler(z, x_shift, x_scale)
      return x
  
imports: import torch
  import torch.nn
label_desc: Use image node_id 4 for calling the TemporalNorm obj's underlying member method code with example usage: obj.inverse_transform(z, x_shift, x_scale) and returns: x