code: def sinusoidal_data(N, noise):
      Y = np.linspace(-2, 2, N)[:, None]
      X = np.sin(4 * Y) * 2.0 + Y * 0.5
      X += np.random.randn(N, 1) * noise
      Y += np.random.randn(N, 1) * noise
      return X, Y
  
file_path: GPflow/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 1 for calling a global function with example usage: sinusoidal_data(N, noise) and returns: X,  Y