code: def test_perturb_hierarchical_params(self, hspace):
      explore = PerturbExplore()
      rng = RNGStub()
      rng.randint = (
          lambda low, high=None, size=None: numpy.ones(size)
          if size
          else 1
      )
      rng.random = lambda: 1.0
      rng.normal = lambda mean, variance: 0.0
  
      params = {"numerical": {"x": 1.0, "y": 2, "f": 10}, "z": 0}
      new_params = explore(rng, hspace, params)
      assert "numerical" in new_params
      assert "x" in new_params["numerical"]
      for key in hspace.keys():
          assert flatten(new_params)[key] in hspace[key]
  
imports: import numpy
  import pytest
  from base import RNGStub, TrialStub
  from orion.algo.pbt.explore import PerturbExplore, PipelineExplore, ResampleExplore
  from orion.algo.space import Categorical, Dimension
  from orion.core.utils.flatten import flatten
label_desc: Use image node_id 13 for calling the TestPerturb obj's underlying member method code with example usage: obj.test_perturb_hierarchical_params(hspace) without return types