class_docstr: Spliced Binned-Pareto univariate distribution.
  
  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.
  percentile_gen_pareto: The percentile of the distribution that is each tail. Default value is 0.05. NB: This symmetric percentile can still represent asymmetric upper and lower tails.
code: def __init__(
      self,
      bins_lower_bound: float,
      bins_upper_bound: float,
      nbins: int = 100,
      percentile_gen_pareto: torch.Tensor = torch.tensor(0.05),
      validate_args=None,
  ):
      super().__init__(
          bins_lower_bound, bins_upper_bound, nbins, validate_args
      )
  
      assert (
          percentile_gen_pareto > 0 and percentile_gen_pareto < 1
      ), "percentile_gen_pareto must be between (0,1)"
      self.percentile_gen_pareto = percentile_gen_pareto
  
      self.lower_xi = torch.nn.Parameter(torch.tensor(0.5))
      self.lower_beta = torch.nn.Parameter(torch.tensor(0.5))
      self.lower_gen_pareto = GenPareto(self.lower_xi, self.lower_beta)
  
      self.upper_xi = torch.nn.Parameter(torch.tensor(0.5))
      self.upper_beta = torch.nn.Parameter(torch.tensor(0.5))
      self.upper_gen_pareto = GenPareto(self.upper_xi, self.upper_beta)
  
      self.lower_xi_batch = None
      self.lower_beta_batch = None
      self.upper_xi_batch = None
      self.upper_beta_batch = None
  
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 1 to create a new SplicedBinnedPareto object from inherited base classes: Binned with example: obj = SplicedBinnedPareto(bins_lower_bound, bins_upper_bound, nbins, percentile_gen_pareto, validate_args)