code: def safe_cumprod(tensor, dim: int, eps: float = 1e-10):
      """
      An implementation of cumprod to prevent precision issue.
      cumprod(x)
      = [x1, x1x2, x1x2x3, ....]
      = [exp(log(x1)), exp(log(x1) + log(x2)), exp(log(x1) + log(x2) + log(x3)), ...]
      = exp(cumsum(log(x)))
      """
  
      if (tensor + eps < 0).any().item():
          raise RuntimeError(
              "Safe cumprod can only take non-negative tensors as input."
              "Consider use torch.cumprod if you want to calculate negative values."
          )
  
      log_tensor = torch.log(tensor + eps)
      cumsum_log_tensor = torch.cumsum(log_tensor, dim)
      exp_cumsum_log_tensor = torch.exp(cumsum_log_tensor)
      return exp_cumsum_log_tensor
  
imports: import torch
label_desc: Use image node_id 3 for calling a global function with example usage: safe_cumprod(tensor, dim, eps) and returns: exp_cumsum_log_tensor