code: def maximum_log_likelihood_objective(
      self, data: Tuple[tf.Tensor, tf.Tensor]
  ):
      x, y = data
      pis, mus, sigmas = self.eval_network(x)
      Z = (2 * np.pi) ** 0.5 * sigmas
      log_probs_mog = (
          (-0.5 * (mus - y) ** 2 / sigmas**2)
          - tf.math.log(Z)
          + tf.math.log(pis)
      )
      log_probs = tf.reduce_logsumexp(log_probs_mog, axis=1)
      return tf.reduce_sum(log_probs)
  
file_path: GPflow/doc/sphinx/notebooks/tailor/mixture_density_network.pct.py
imports: import matplotlib.pyplot
  import numpy
  from typing import Callable, Optional, Tuple
  import tensorflow
  from gpflow.base import Parameter
  from gpflow.models import BayesianModel, ExternalDataTrainingLossMixin
  from gpflow.utilities import print_summary
  from gpflow.ci_utils import reduce_in_tests
  from gpflow.optimizers import Scipy
  from sklearn.datasets import make_moons
label_desc: Use image node_id 4 for calling the MDN obj's underlying member method code with example usage: obj.maximum_log_likelihood_objective(data) and returns: tf