code: def test_flatten_steps(self):
      with pm.Model():
          a = pm.Normal("a")
          b = pm.Normal("b")
          c = pm.Normal("c")
          s1 = Metropolis([a])
          s2 = Metropolis([b])
          c1 = CompoundStep([s1, s2])
          s3 = NUTS([c])
          c2 = CompoundStep([c1, s3])
      assert flatten_steps(s1) == [s1]
      assert flatten_steps(c2) == [s1, s2, s3]
      with pytest.raises(ValueError, match="Unexpected type"):
          flatten_steps("not a step")
  
imports: import pytensor
  import pytest
  import pymc
  from pymc.step_methods import NUTS, CompoundStep, DEMetropolis, HamiltonianMC, Metropolis, Slice
  from pymc.step_methods.compound import BlockedStep, StatsBijection, flatten_steps, get_stats_dtypes_shapes_from_steps, infer_warn_stats_info
  from pymc.testing import fast_unstable_sampling_mode
  from tests.helpers import StepMethodTester
  from tests.models import simple_2model_continuous
label_desc: Use image node_id 1 for calling the TestStatsBijection obj's underlying member method code with example usage: obj.test_flatten_steps() without return types