code: def suggest_normal(
      args, rng, param_history, prior_mu, prior_sigma, clip
  ):
      """
      Suggest a normal distributed parameter.
      Uniform has been converted to normal in the caller function; log and q will be handled by "deformat_parameters".
      """
      below, above = split_history(
          args, param_history
      )  # split history into good ones and bad ones
  
      weights, mus, sigmas = adaptive_parzen_normal(
          args, below, prior_mu, prior_sigma
      )  # calculate weight of good segments
      samples = gmm1(
          args, rng, weights, mus, sigmas, clip
      )  # sample N EIs using the weights
      below_llik = gmm1_lpdf(
          args, samples, weights, mus, sigmas, clip
      )  # the probability of these samples to be good
  
      weights, mus, sigmas = adaptive_parzen_normal(
          args, above, prior_mu, prior_sigma
      )  # calculate weight of bad segments
      above_llik = gmm1_lpdf(
          args, samples, weights, mus, sigmas, clip
      )  # the probability of above samples to be bad
  
      return samples[np.argmax(below_llik - above_llik)]
  
imports: from __future__ import annotations
  from collections import defaultdict
  import logging
  import math
  from typing import Any, NamedTuple
  import numpy
  from scipy.special import erf
  from typing_extensions import Literal
  import nni
  from nni.common.hpo_utils import Deduplicator, OptimizeMode, format_search_space, deformat_parameters, format_parameters
  from nni.tuner import Tuner
  from nni.utils import extract_scalar_reward
  from .None import random_tuner
label_desc: Use image node_id 5 for calling a global function with example usage: suggest_normal(args, rng, param_history, prior_mu, prior_sigma, clip) and returns: samples