code: def test_custom_proposal_dist(self):
      with pm.Model() as pmodel:
          D = 3
          pm.Normal("n", 0, 2, size=(D,))
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore", ".*number of samples.*", UserWarning
              )
              trace = pm.sample(
                  tune=100,
                  draws=50,
                  step=DEMetropolisZ(proposal_dist=NormalProposal),
                  cores=1,
                  chains=3,
                  discard_tuned_samples=False,
              )
  
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 8 for calling the TestDEMetropolisZ obj's underlying member method code with example usage: obj.test_custom_proposal_dist() without return types