class_docstr: Models two "cure" possibilities: default, repay
code: def _cumulative_hazard(self, params, T, Xs):
      p_default_ = exp(dot(Xs["c_default"], params["c_default"]))
      p_repay_ = exp(dot(Xs["c_repay"], params["c_repay"]))
      p_cure_ = 1.0
  
      p_default = p_default_ / (p_cure_ + p_default_ + p_repay_)
      p_repay = p_repay_ / (p_cure_ + p_default_ + p_repay_)
      p_cure = p_cure_ / (p_cure_ + p_default_ + p_repay_)
  
      # cox like hazards.
      sf_default = exp(
          -exp(dot(Xs["beta_default"], params["beta_default"])) * T**2
      )
      sf_repay = exp(
          -exp(dot(Xs["beta_repay"], params["beta_repay"])) * T
      )
      sf_cure = 1.0
  
      return -np.log(
          (p_repay * sf_repay)
          + (p_default * sf_default)
          + (p_cure * sf_cure)
      )
  
file_path: lifelines/examples/mixture_cure_model.py
imports: from lifelines.fitters import ParametricRegressionFitter
  from autograd.scipy.special import expit
  from autograd import numpy
  from lifelines.utils.safe_exp import safe_exp
  from lifelines.datasets import load_rossi
label_desc: Use image node_id 1 for calling the MixtureCureModel obj's underlying member method code with example usage: obj._cumulative_hazard(params, T, Xs) and returns: unknown