code: def _compute_confidence_bounds_of_transform(self, transform, alpha, ci_labels):
          
          alpha2 = 1 - alpha / 2.0
          z = inv_normal_cdf(alpha2)
          df = pd.DataFrame(index=self.timeline)
  
          # pylint: disable=no-value-for-parameter
          gradient_of_cum_hazard_at_mle = make_jvp_reversemode(transform)(
              self._fitted_parameters_, self.timeline.astype(float)
          )
  
          gradient_at_times = np.vstack(
              [gradient_of_cum_hazard_at_mle(basis) for basis in np.eye(len(self._fitted_parameters_), dtype=float)]
          )
  
          std_cumulative_hazard = np.sqrt(
              np.einsum("nj,jk,nk->n", gradient_at_times.T, self.variance_matrix_, gradient_at_times.T)
          )
  
          if ci_labels is None:
              ci_labels = ["%s_upper_%g" % (self._label, 1 - alpha), "%s_lower_%g" % (self._label, 1 - alpha)]
          assert len(ci_labels) == 2, "ci_labels should be a length 2 array."
  
          df[ci_labels[0]] = transform(self._fitted_parameters_, self.timeline) + z * std_cumulative_hazard
          df[ci_labels[1]] = transform(self._fitted_parameters_, self.timeline) - z * std_cumulative_hazard
          return df
docs: This computes the confidence intervals of a transform of the parameters. Ex: take
          the fitted parameters, a function/transform and the variance matrix and give me
          back confidence intervals of the transform.
  
          Parameters
          -----------
          transform: function
              must a function of two parameters:
                  ``params``, an iterable that stores the parameters
                  ``times``, a numpy vector representing some timeline
              the function must use autograd imports (scipy and numpy)
          alpha: float
              confidence level
          ci_labels: tuple