code: def cumulative_distribution(self, X):
          
          self.check_fit()
  
          # Wrapper for pdf to accept vector as args
          def func(*args):
              return self.probability_density(list(args))
  
          # Lower bound for integral, to split significant part from tail
          lower_bound = self.get_lower_bound()
  
          ranges = [[lower_bound, val] for val in X]
          return integrate.nquad(func, ranges)[0]
docs: Computes the cumulative distribution function for the copula
  
          Args:
              X: `numpy.ndarray` or `pandas.DataFrame`
  
          Returns:
              np.array: cumulative probability