code: def test_proposal_choice(self):
      with pytensor.config.change_flags(
          mode=fast_unstable_sampling_mode
      ):
          _, model, _ = mv_simple()
          with model:
              initial_point = model.initial_point()
              initial_point_size = sum(
                  initial_point[n.name].size for n in model.value_vars
              )
  
              s = np.ones(initial_point_size)
              sampler = Metropolis(S=s)
              assert isinstance(sampler.proposal_dist, NormalProposal)
              s = np.diag(s)
              sampler = Metropolis(S=s)
              assert isinstance(
                  sampler.proposal_dist, MultivariateNormalProposal
              )
              s[0, 0] = -s[0, 0]
              with pytest.raises(np.linalg.LinAlgError):
                  sampler = Metropolis(S=s)
  
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 1 for calling the TestMetropolis obj's underlying member method code with example usage: obj.test_proposal_choice() without return types