code: def get_gmm_pdf(self, x):
          
  
          def my_norm_pdf(xt, mu, sigma):
              z = (xt - mu) / sigma
              return (math.exp(-0.5 * z * z)
                      / (math.sqrt(2. * np.pi) * sigma))
  
          y = 0
          if (x < self.min_limit):
              return 0
          if (x > self.max_limit):
              return 0
          for _x in range(self.points.size):
              y += (my_norm_pdf(x, self.points[_x], self.sigma[_x])
                    * self.weights[_x]) / self.W_sum
          return y
docs: Calculate the GMM likelihood for a single point.
  
          .. math::
              y = \\sum_{i=1}^{N} w_i
              \\times \\text{normpdf}(x, x_i, \\sigma_i)/\\sum_{i=1}^{N} w_i
              :label: gmm-likelihood
  
          Arguments
          ---------
          x : float
              Point at which likelihood needs to be computed
  
          Returns
          -------
          float
              Likelihood value at x