code: def npmle_compute_confidence_intervals(
      left, right, mle_, alpha=0.05, samples=1000
  ):
      """
      uses basic bootstrap
      """
      left, right = np.asarray(left, dtype=float), np.asarray(
          right, dtype=float
      )
      all_times = np.unique(np.concatenate((left, right, [0])))
  
      N = left.shape[0]
  
      bootstrapped_samples = np.empty((all_times.shape[0], samples))
  
      for i in range(samples):
          ix = np.random.randint(low=0, high=N, size=N)
          left_ = left[ix]
          right_ = right[ix]
  
          bootstrapped_samples[:, i] = reconstruct_survival_function(
              *npmle(left_, right_), all_times
          ).values[:, 0]
  
      return (
          2 * mle_.squeeze()
          - pd.Series(
              np.percentile(
                  bootstrapped_samples, (alpha / 2) * 100, axis=1
              ),
              index=all_times,
          ),
          2 * mle_.squeeze()
          - pd.Series(
              np.percentile(
                  bootstrapped_samples, (1 - alpha / 2) * 100, axis=1
              ),
              index=all_times,
          ),
      )
  
imports: from collections import defaultdict, namedtuple
  import warnings
  import numpy
  from numpy.linalg import norm
  import pandas
  from lifelines.exceptions import ConvergenceWarning
  from typing import *
label_desc: Use image node_id 16 for calling a global function with example usage: npmle_compute_confidence_intervals(left, right, mle_, alpha, samples) and returns: unknown,  unknown