code: def test_search_space_transform_shapes_dtypes(
      param: Any, distribution: BaseDistribution
  ) -> None:
      trans = _SearchSpaceTransform({"x0": distribution})
      trans_params = trans.transform({"x0": param})
  
      if isinstance(distribution, CategoricalDistribution):
          expected_bounds_shape = (len(distribution.choices), 2)
          expected_params_shape = (len(distribution.choices),)
      else:
          expected_bounds_shape = (1, 2)
          expected_params_shape = (1,)
      assert trans.bounds.shape == expected_bounds_shape
      assert trans.bounds.dtype == numpy.float64
      assert trans_params.shape == expected_params_shape
      assert trans_params.dtype == numpy.float64
  
file_path: optuna/tests/test_transform.py
imports: import math
  from typing import Any
  import numpy
  import pytest
  from optuna._transform import _SearchSpaceTransform
  from optuna._transform import _untransform_numerical_param
  from optuna.distributions import BaseDistribution
  from optuna.distributions import CategoricalDistribution
  from optuna.distributions import FloatDistribution
  from optuna.distributions import IntDistribution
label_desc: Use image node_id 1 for calling a global function with example usage: test_search_space_transform_shapes_dtypes(param, distribution) without return types