code: def suggest_parameter(args, rng, spec, parameter_history):
      if (
          len(parameter_history) < args.n_startup_jobs
      ):  # not enough history, still warming up
          return random_tuner.suggest_parameter(rng, spec)
  
      if spec.categorical:
          return suggest_categorical(
              args, rng, parameter_history, spec.size
          )
  
      if spec.normal_distributed:
          mu = spec.mu
          sigma = spec.sigma
          clip = None
      else:
          # TPE does not support uniform distribution natively
          # they are converted to normal((low + high) / 2, high - low)
          mu = (spec.low + spec.high) * 0.5
          sigma = spec.high - spec.low
          clip = (spec.low, spec.high)
  
      return suggest_normal(
          args, rng, parameter_history, mu, sigma, clip
      )
  
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 2 for calling a global function with example usage: suggest_parameter(args, rng, spec, parameter_history) and returns: suggest_normal, random_tuner, suggest_categorical