code: def smoothed_hazard_confidence_intervals_(self, bandwidth, hazard_=None):
          
          if hazard_ is None:
              hazard_ = self.smoothed_hazard_(bandwidth).values[:, 0]
  
          timeline = self.timeline
          z = inv_normal_cdf(1 - self.alpha / 2)
          self._cumulative_sq.iloc[0] = 0
          var_hazard_ = self._cumulative_sq.diff().fillna(self._cumulative_sq.iloc[0])
          C = var_hazard_.values != 0.0  # only consider the points with jumps
          std_hazard_ = np.sqrt(
              1.0
              / (bandwidth ** 2)
              * np.dot(
                  epanechnikov_kernel(timeline[:, None], timeline[C][None, :], bandwidth) ** 2, var_hazard_.values[C]
              )
          )
          values = {
              self.ci_labels[0]: hazard_ * np.exp(z * std_hazard_ / hazard_),
              self.ci_labels[1]: hazard_ * np.exp(-z * std_hazard_ / hazard_),
          }
          return pd.DataFrame(values, index=timeline)
docs: Parameters
          ----------
            bandwidth: float
              the bandwidth to use in the Epanechnikov kernel. > 0
            hazard_: numpy array
              a computed (n,) numpy array of estimated hazard rates. If none, uses ``smoothed_hazard_``