class_docstr: trainer based on M-step summary statistics can add mini-batch statistics
  for a full-batch update.
class_docstr_tok: ["trainer","based","on","M-step","summary","statistics","can","add","mini-batch","statistics","for","a","full-batch","update","."]
code: def update(self):
      mu_ = self.sum_x / self.nz[:, None]
      Ex2 = self.sum_x2 / self.nz[:, None, None]
      cov_ = Ex2 - mu_[:, :, None] @ mu_[:, None, :]
      kR_ = np.linalg.inv(np.linalg.cholesky(cov_))
  
      self.model.log_prior_.set_data(np.log(self.nz / self.nz.sum()))
      self.model.mu_.set_data(mu_)
      self.model.kR_.set_data(kR_)
  
      self.zero_stats()
  
file_path: gluonts/src/gluonts/nursery/gmm_tpp/gmm_base.py
imports: import time
  import mxnet
  from mxnet import gluon
  import numpy
label_desc: Use image node_id 4 for calling the GMMTrainer obj's underlying member method code with example usage: obj.update() without return types