code: def make_s_curve(n_samples=100, *, noise=0.0, random_state=None):
      """Generate an S curve dataset.
  
      Read more in the :ref:`User Guide <sample_generators>`.
  
      Parameters
      ----------
      n_samples : int, default=100
          The number of sample points on the S curve.
  
      noise : float, default=0.0
          The standard deviation of the gaussian noise.
  
      random_state : int, RandomState instance or None, default=None
          Determines random number generation for dataset creation. Pass an int
          for reproducible output across multiple function calls.
          See :term:`Glossary <random_state>`.
  
      Returns
      -------
      X : ndarray of shape (n_samples, 3)
          The points.
  
      t : ndarray of shape (n_samples,)
          The univariate position of the sample according to the main dimension
          of the points in the manifold.
      """
      generator = check_random_state(random_state)
  
      t = 3 * np.pi * (generator.uniform(size=(1, n_samples)) - 0.5)
      X = np.empty(shape=(n_samples, 3), dtype=np.float64)
      X[:, 0] = np.sin(t)
      X[:, 1] = 2.0 * generator.uniform(size=n_samples)
      X[:, 2] = np.sign(t) * (np.cos(t) - 1)
      X += noise * generator.standard_normal(size=(3, n_samples)).T
      t = np.squeeze(t)
  
      return X, t
  
imports: import array
  import numbers
  import warnings
  from collections.abc import Iterable
  from numbers import Integral, Real
  import numpy
  import scipy.sparse
  from scipy import linalg
  from ..preprocessing import MultiLabelBinarizer
  from ..utils import check_array, check_random_state
  from ..utils import shuffle
  from ..utils._param_validation import Hidden, Interval, StrOptions, validate_params
  from ..utils.random import sample_without_replacement
label_desc: Use image node_id 18 for calling a global function with example usage: make_s_curve(n_samples) and returns: X,  t