code: def gaussian_overlapping_coefficient(means_0, stds_0, means_1, stds_1, lower=None, upper=None):
      
      if lower is None:
          lower = -np.inf
      if upper is None:
          upper = np.inf
  
      def point_iterator():
          for ind in range(means_0.shape[0]):
              yield np.squeeze(means_0[ind]), np.squeeze(stds_0[ind]), np.squeeze(means_1[ind]), np.squeeze(stds_1[ind])
  
      return np.array(list(multiprocess_mapping(_ComputeGaussianOverlap(lower, upper), point_iterator())))
docs: Compute the overlapping coefficient of two Gaussian continuous_distributions.
  
      This computes the :math:`\int_{-\infty}^{\infty}{\min(f(x), g(x))\partial x}` where
      :math:`f \sim \mathcal{N}(\mu_0, \sigma_0^{2})` and :math:`f \sim \mathcal{N}(\mu_1, \sigma_1^{2})` are normally
      distributed variables.
  
      This will compute the overlap for each element in the first dimension.
  
      Args:
          means_0 (ndarray): the set of means of the first distribution
          stds_0 (ndarray): the set of stds of the fist distribution
          means_1 (ndarray): the set of means of the second distribution
          stds_1 (ndarray): the set of stds of the second distribution
          lower (float): the lower limit of the integration. If not set we set it to -inf.
          upper (float): the upper limit of the integration. If not set we set it to +inf.