class_docstr: Binned univariate distribution designed as an nn.Module
  
  Arguments
  ----------
  bins_lower_bound: The lower bound of the bin edges
  bins_upper_bound: The upper bound of the bin edges
  nbins: The number of equidistance bins to allocate between `bins_lower_bound` and `bins_upper_bound`. Default value is 100.
  smoothing_indicator: The method of smoothing to perform on the bin probabilities
docstr: Cumulative density tensor for a tensor of datapoints `x`.
docstr_tok: ["Cumulative","density","tensor","for","a","tensor","of","datapoints","`","x","`","."]
code: def cdf(self, x):
      """
      Cumulative density tensor for a tensor of datapoints `x`.
      """
      x = x.view(x.shape.numel())
      sorted_x = x.sort()
      x, unsorted_index = sorted_x.values, sorted_x.indices
  
      idx, cum_density, bin_cdf_relative = self.cdf_components(
          x[0], idx=0, cum_density=torch.tensor([0.0])
      )
      cdf_tensor = (cum_density + bin_cdf_relative).view(1)
      if x.shape.numel() == 1:
          return cdf_tensor
  
      for xx in x[1:]:
          idx, cum_density, bin_cdf_relative = self.cdf_components(
              xx, idx, cum_density
          )
          cdfx = (cum_density + bin_cdf_relative).view(1)
          cdf_tensor = torch.cat((cdf_tensor, cdfx), 0)
  
      cdf_tensor = cdf_tensor[unsorted_index]
      return cdf_tensor
  
imports: from typing import Optional
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from .genpareto import GenPareto
label_desc: Use image node_id 12 for calling the Binned obj's underlying member method code with example usage: obj.cdf(x) and returns: cdf_tensor, cdf_tensor