code: def test_step_categorical(self, proposal):
      start, model, (mu, C) = simple_categorical()
      unc = C**0.5
      check = (
          ("x", np.mean, mu, unc / 10.0),
          ("x", np.std, unc, unc / 10.0),
      )
      with model:
          step = CategoricalGibbsMetropolis(
              [model.x], proposal=proposal
          )
          idata = pm.sample(
              tune=1000,
              draws=2000,
              chains=1,
              step=step,
              initvals=start,
              model=model,
              random_seed=1,
          )
          self.check_stat(check, idata)
          self.check_stat_dtype(idata, step)
  
imports: import warnings
  import arviz
  import numpy
  import numpy.testing
  import pytensor
  import pytest
  import pymc
  from pymc.step_methods.metropolis import BinaryGibbsMetropolis, CategoricalGibbsMetropolis, DEMetropolis, DEMetropolisZ, Metropolis, MultivariateNormalProposal, NormalProposal
  from pymc.testing import fast_unstable_sampling_mode
  from tests import sampler_fixtures
  from tests.helpers import RVsAssignmentStepsTester, StepMethodTester
  from tests.models import mv_simple, mv_simple_discrete, simple_categorical
label_desc: Use image node_id 2 for calling the TestStepMetropolis obj's underlying member method code with example usage: obj.test_step_categorical(proposal) without return types