code: def _scale_samples(params: np.ndarray, bounds: List):
      """Rescale samples in 0-to-1 range to arbitrary bounds
  
      Parameters
      ----------
      params : numpy.ndarray
          numpy array of dimensions `num_params`-by-:math:`N`,
          where :math:`N` is the number of samples
  
      bounds : list
          list of lists of dimensions `num_params`-by-2
      """
      # Check bounds are legal (upper bound is greater than lower bound)
      lower_bounds, upper_bounds = _check_bounds(bounds)
  
      if np.any(lower_bounds >= upper_bounds):
          raise ValueError(
              "Bounds are not legal (upper bound must be greater than lower bound)"
          )
  
      # This scales the samples in-place, by using the optional output
      # argument for the numpy ufunctions
      # The calculation is equivalent to:
      #   sample * (upper_bound - lower_bound) + lower_bound
      np.add(
          np.multiply(
              params, (upper_bounds - lower_bounds), out=params
          ),
          lower_bounds,
          out=params,
      )
  
file_path: SALib/src/SALib/util/__init__.py
imports: from collections import OrderedDict
  from typing import Dict, Tuple
  import warnings
  import numpy
  import scipy
  from typing import List
  from .util_funcs import avail_approaches, read_param_file, _check_bounds, _check_groups
  from .problem import ProblemSpec
  from .results import ResultDict
label_desc: Use image node_id 1 for calling a global function with example usage: _scale_samples(params, bounds) without return types