docstr: Transforms a tensor to satisfy the specified bounds.
  
  If upper_bound is finite, we assume that `self.transform` saturates at 1 as tensor -> infinity. Similarly,
  if lower_bound is finite, we assume that `self.transform` saturates at 0 as tensor -> -infinity.
  
  Example transforms for one of the bounds being finite include torch.exp and torch.nn.functional.softplus.
  An example transform for the case where both are finite is torch.nn.functional.sigmoid.
code: def transform(self, tensor: Tensor) -> Tensor:
      """
      Transforms a tensor to satisfy the specified bounds.
  
      If upper_bound is finite, we assume that `self.transform` saturates at 1 as tensor -> infinity. Similarly,
      if lower_bound is finite, we assume that `self.transform` saturates at 0 as tensor -> -infinity.
  
      Example transforms for one of the bounds being finite include torch.exp and torch.nn.functional.softplus.
      An example transform for the case where both are finite is torch.nn.functional.sigmoid.
      """
      if not self.enforced:
          return tensor
  
      transformed_tensor = (
          self._transform(tensor)
          * (self.upper_bound - self.lower_bound)
      ) + self.lower_bound
  
      return transformed_tensor
  
imports: from __future__ import annotations
  import math
  from typing import Optional
  import torch
  from torch import sigmoid, Tensor
  from torch.nn import Module
  from ..utils.transforms import _get_inv_param_transform, inv_sigmoid, inv_softplus
label_desc: Use image node_id 8 for calling the Interval obj's underlying member method code with example usage: obj.transform(tensor) and returns: transformed_tensor, tensor