code: def run(steppers, p):
      steppers = set(steppers)
      traces = {}
      effn = {}
      runtimes = {}
  
      with pm.Model() as model:
          if USE_XY:
              x = pm.Flat("x")
              y = pm.Flat("y")
              mu = np.array([0.0, 0.0])
              cov = np.array([[1.0, p], [p, 1.0]])
              z = pm.MvNormal.dist(mu=mu, cov=cov, shape=(2,)).logp(
                  tt.stack([x, y])
              )
              pot = pm.Potential("logp_xy", z)
              start = {"x": 0, "y": 0}
          else:
              mu = np.array([0.0, 0.0])
              cov = np.array([[1.0, p], [p, 1.0]])
              z = pm.MvNormal("z", mu=mu, cov=cov, shape=(2,))
              start = {"z": [0, 0]}
  
          for step_cls in steppers:
              name = step_cls.__name__
              t_start = time.time()
              mt = pm.sample(
                  draws=10000, chains=16, step=step_cls(), start=start
              )
              runtimes[name] = time.time() - t_start
              print(
                  "{} samples across {} chains".format(
                      len(mt) * mt.nchains, mt.nchains
                  )
              )
              traces[name] = mt
              en = az.ess(mt)
              print(f"effective: {en}\r\n")
              if USE_XY:
                  effn[name] = np.mean(en["x"]) / len(mt) / mt.nchains
              else:
                  effn[name] = np.mean(en["z"]) / len(mt) / mt.nchains
      return traces, effn, runtimes
  
imports: import time
  import arviz
  import numpy
  import pandas
  import theano.tensor
  import pymc3
label_desc: Use image node_id 1 for calling a global function with example usage: run(steppers, p) and returns: traces,  effn,  runtimes