class_docstr: Gaussian mixture model (GMM).
  
  Parameters
  ----------
  space : Manifold
      Equipped manifold.
  means : array-like, shape=[n_gaussians, dim]
      Means of each component of the GMM.
  variances : array-like, shape=[n_gaussians,]
      Variances of each component of the GMM.
  
  Attributes
  ----------
  normalization_factor_var : array-like, shape=[n_variances,]
      Array of computed normalization factor.
  variances_range : array-like, shape=[n_variances,]
      Array of standard deviations.
  phi_inv_var : array-like, shape=[n_variances,]
      Array of the computed inverse of a function phi
      whose expression is closed-form
      :math:`\sigma\mapsto \sigma^3 \times \frac{d}
      {\mathstrut d\sigma}\log \zeta_m(\sigma)`
      where :math:`\sigma` denotes the variance
      and :math:`\zeta` the normalization coefficient
      and :math:`m` the dimension.
class_docstr_tok: ["Gaussian","mixture","model","(","GMM",")",".","Parameters","--","--","--","--","--","space",":","Manifold","Equipped","manifold",".","means",":","array-like",",","shape=","[","n_gaussians",",","dim","]","Means","of","each","component","of","the","GMM",".","variances",":","array-like",",","shape=","[","n_gaussians",",","]","Variances","of","each","component","of","the","GMM",".","Attributes","--","--","--","--","--","normalization_factor_var",":","array-like",",","shape=","[","n_variances",",","]","Array","of","computed","normalization","factor",".","variances_range",":","array-like",",","shape=","[","n_variances",",","]","Array","of","standard","deviations",".","phi_inv_var",":","array-like",",","shape=","[","n_variances",",","]","Array","of","the","computed","inverse","of","a","function","phi","whose","expression","is","closed-form",":","math",":","`","\\sigma\\mapsto","\\sigma^3","\\times","\\frac","{","d","}","{","\\mathstrut","d\\sigma","}","\\log","\\zeta_m","(","\\sigma",")","`","where",":","math",":","`","\\sigma","`","denotes","the","variance","and",":","math",":","`","\\zeta","`","the","normalization","coefficient","and",":","math",":","`","m","`","the","dimension","."]
docstr: Return the separate probability density function of GMM.
  
  The probability density function is computed for
  each component of the GMM separately (i.e., mixture coefficients
  are not taken into account).
  
  Parameters
  ----------
  data : array-like, shape=[n_samples, dim]
      Points at which the GMM probability density is computed.
  
  Returns
  -------
  pdf : array-like, shape=[n_samples, n_gaussians,]
      Probability density function computed at each data
      sample and for each component of the GMM.
docstr_tok: ["Return","the","separate","probability","density","function","of","GMM",".","The","probability","density","function","is","computed","for","each","component","of","the","GMM","separately","(","i.e.",",","mixture","coefficients","are","not","taken","into","account",")",".","Parameters","--","--","--","--","--","data",":","array-like",",","shape=","[","n_samples",",","dim","]","Points","at","which","the","GMM","probability","density","is","computed",".","Returns","--","--","--","-","pdf",":","array-like",",","shape=","[","n_samples",",","n_gaussians",",","]","Probability","density","function","computed","at","each","data","sample","and","for","each","component","of","the","GMM","."]
code: def pdf(self, data):
      """Return the separate probability density function of GMM.
  
      The probability density function is computed for
      each component of the GMM separately (i.e., mixture coefficients
      are not taken into account).
  
      Parameters
      ----------
      data : array-like, shape=[n_samples, dim]
          Points at which the GMM probability density is computed.
  
      Returns
      -------
      pdf : array-like, shape=[n_samples, n_gaussians,]
          Probability density function computed at each data
          sample and for each component of the GMM.
      """
      data_length, _, _ = data.shape + (self.means.shape[0],)
  
      variances_expanded = gs.expand_dims(self.variances, 0)
      variances_expanded = gs.repeat(variances_expanded, data_length, 0)
  
      variances_flatten = variances_expanded.flatten()
  
      distances = -(
          self.space.metric.dist_broadcast(data, self.means) ** 2
      )
      distances = gs.reshape(
          distances, (data.shape[0] * self.variances.shape[0],)
      )
  
      num = gs.exp(distances / (2 * variances_flatten**2))
  
      den = self._compute_normalization_factor()
  
      den = gs.expand_dims(den, 0)
      den = gs.repeat(den, data_length, axis=0).flatten()
  
      pdf = num / den
      pdf = gs.reshape(pdf, (data.shape[0], self.means.shape[0]))
  
      return pdf
  
imports: import logging
  from sklearn.base import BaseEstimator, ClusterMixin
  import geomstats.backend
  from geomstats.learning._template import TransformerMixin
  from geomstats.learning.frechet_mean import FrechetMean, variance
  from geomstats.learning.kmeans import RiemannianKMeans
label_desc: Use image node_id 3 for calling the GaussianMixtureModel obj's underlying member method code with example usage: obj.pdf(data) and returns: pdf