pymc-devs / pymc-devs/pymc-examples

Error in `examples/samplers/SMC-ABC_Lotka-Volterra_example.ipynb`

Open
#732 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
398
Forks
325
Avg merge
9d 15m
Merged PRs (30d)
1

Description

────────────────────────────────────── Error running examples/samplers/SMC-ABC_Lotka-Volterra_example.ipynb ──────────────────────────────────────

---------------------------------------------------------------------------
Exception encountered at "In [12]":
---------------------------------------------------------------------------
_RemoteTraceback                          Traceback (most recent call last)
_RemoteTraceback:
"""
Traceback (most recent call last):
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/compile/function/types.py", line 959, in __call__
    self.vm()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/graph/op.py", line 524, in rval
    r = p(n, [x[0] for x in i], o)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/tensor/random/op.py", line 403, in perform
    smpl_val = self.rng_fn(rng, *([*args, size]))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/distributions/simulator.py", line 53, in rng_fn
    return cls.fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ipykernel_43958/1881729530.py", line 27, in competition_model
    return odeint(dX_dt, y0=X0, t=t, rtol=0.01, args=(a, b, c, d))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/scipy/integrate/_odepack_py.py", line 243, in odeint
    output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv, ml, mu,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: The array return by func must be one-dimensional, but got ndim=3.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/concurrent/futures/process.py", line 261, in _process_worker
    r = call_item.fn(*call_item.args, **call_item.kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py", line 303, in _sample_smc_int
    smc._initialize_kernel()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 249, in _initialize_kernel
    likelihoods =
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 249, in <listcomp>
    likelihoods =
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/compile/function/types.py", line 972, in __call__
    raise_with_op(
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/link/utils.py", line 524, in raise_with_op
    raise exc_value.with_traceback(exc_trace)
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/compile/function/types.py", line 959, in __call__
    self.vm()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/graph/op.py", line 524, in rval
    r = p(n, [x[0] for x in i], o)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pytensor/tensor/random/op.py", line 403, in perform
    smpl_val = self.rng_fn(rng, *([*args, size]))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/distributions/simulator.py", line 53, in rng_fn
    return cls.fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ipykernel_43958/1881729530.py", line 27, in competition_model
    return odeint(dX_dt, y0=X0, t=t, rtol=0.01, args=(a, b, c, d))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/scipy/integrate/_odepack_py.py", line 243, in odeint
    output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv, ml, mu,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: The array return by func must be one-dimensional, but got ndim=3.
Apply node that caused the error: Simulator_sim_rv{"(),()->()"}(simulator_rng, [100   2], Exp.0, Exp.0)
Toposort index: 8
Inputs types: [RandomGeneratorType, TensorType(int64, shape=(2,)), TensorType(float64, shape=(1, 1)), TensorType(float64, shape=(1, 1))]
Inputs shapes: ['No shapes', (2,), (1, 1), (1, 1)]
Inputs strides: ['No strides', (8,), (8, 8), (8, 8)]
Inputs values: [Generator(PCG64) at 0x7F6744184C80, array([100,   2]), array([[0.74738862]]), array([[0.78745484]])]
Outputs clients: [[output[1](Simulator_sim_rv{"(),()->()"}.0)], [Composite{sqr((0.1 * (i0 - i1)))}(sim{[[ 9.52728 ... 47175637]]},
Simulator_sim_rv{"(),()->()"}.out)]]

Backtrace when the node is created (use PyTensor flag traceback__limit=N to make it longer):
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/concurrent/futures/process.py", line 261, in _process_worker
    r = call_item.fn(*call_item.args, **call_item.kwargs)
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py", line 303, in _sample_smc_int
    smc._initialize_kernel()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 244, in _initialize_kernel
    self.likelihood_logp_func = _logp_forw(
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 636, in _logp_forw
    out_list, inarray0 = join_nonshared_inputs(
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/pytensorf.py", line 619, in join_nonshared_inputs
    new_outputs = [
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/pytensorf.py", line 620, in <listcomp>
    pytensor.clone_replace(output, replace, rebuild_strict=False) for output in outputs

HINT: Use the PyTensor flag `exception_verbosity=high` for a debug print-out and storage map footprint of this Apply node.
"""

The above exception was the direct cause of the following exception:

RuntimeError                              Traceback (most recent call last)
Cell In[12], line 7
      3 b = pm.HalfNormal("b", 1.0)
      5 sim = pm.Simulator("sim", competition_model, params=(a, b), epsilon=10, observed=observed)
----> 7 idata_lv = pm.sample_smc()

File ~/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py:180, in sample_smc(draws, kernel, start, model,
random_seed, chains, cores, compute_convergence_checks, return_inferencedata, idata_kwargs, progressbar, **kernel_kwargs)
    171 params = (
    172     draws,
    173     kernel,
    174     start,
    175     model,
    176 )
    178 t1 = time.time()
--> 180 results = run_chains(chains, progressbar, params, random_seed, kernel_kwargs, cores)
    182 (
    183     traces,
    184     sample_stats,
    185     sample_settings,
    186 ) = zip(*results)
    188 trace = MultiTrace(traces)

File ~/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py:385, in run_chains(chains, progressbar, params,
random_seed, kernel_kwargs, cores)
    378                 # update the progress bar for this task:
    379                 progress.update(
    380                     status=f"Stage: {stage} Beta: {beta:.3f}",
    381                     task_id=task_id,
    382                     refresh=True,
    383                 )
--> 385 return tuple(cloudpickle.loads(r.result()) for r in done)

File ~/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py:385, in <genexpr>(.0)
    378                 # update the progress bar for this task:
    379                 progress.update(
    380                     status=f"Stage: {stage} Beta: {beta:.3f}",
    381                     task_id=task_id,
    382                     refresh=True,
    383                 )
--> 385 return tuple(cloudpickle.loads(r.result()) for r in done)

File ~/micromamba/envs/pymc-examples/lib/python3.11/concurrent/futures/_base.py:449, in Future.result(self, timeout)
    447     raise CancelledError()
    448 elif self._state == FINISHED:
--> 449     return self.__get_result()
    451 self._condition.wait(timeout)
    453 if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:

File ~/micromamba/envs/pymc-examples/lib/python3.11/concurrent/futures/_base.py:401, in Future.__get_result(self)
    399 if self._exception:
    400     try:
--> 401         raise self._exception
    402     finally:
    403         # Break a reference cycle with the exception in self._exception
    404         self = None

RuntimeError: The array return by func must be one-dimensional, but got ndim=3.
Apply node that caused the error: Simulator_sim_rv{"(),()->()"}(simulator_rng, [100   2], Exp.0, Exp.0)
Toposort index: 8
Inputs types: [RandomGeneratorType, TensorType(int64, shape=(2,)), TensorType(float64, shape=(1, 1)), TensorType(float64, shape=(1, 1))]
Inputs shapes: ['No shapes', (2,), (1, 1), (1, 1)]
Inputs strides: ['No strides', (8,), (8, 8), (8, 8)]
Inputs values: [Generator(PCG64) at 0x7F6744184C80, array([100,   2]), array([[0.74738862]]), array([[0.78745484]])]
Outputs clients: [[output[1](Simulator_sim_rv{"(),()->()"}.0)], [Composite{sqr((0.1 * (i0 - i1)))}(sim{[[ 9.52728 ... 47175637]]},
Simulator_sim_rv{"(),()->()"}.out)]]

Backtrace when the node is created (use PyTensor flag traceback__limit=N to make it longer):
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/concurrent/futures/process.py", line 261, in _process_worker
    r = call_item.fn(*call_item.args, **call_item.kwargs)
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/sampling.py", line 303, in _sample_smc_int
    smc._initialize_kernel()
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 244, in _initialize_kernel
    self.likelihood_logp_func = _logp_forw(
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/smc/kernels.py", line 636, in _logp_forw
    out_list, inarray0 = join_nonshared_inputs(
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/pytensorf.py", line 619, in join_nonshared_inputs
    new_outputs = [
  File "/home/wdean/micromamba/envs/pymc-examples/lib/python3.11/site-packages/pymc/pytensorf.py", line 620, in <listcomp>
    pytensor.clone_replace(output, replace, rebuild_strict=False) for output in outputs

HINT: Use the PyTensor flag `exception_verbosity=high` for a debug print-out and storage map footprint of this Apply node.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Open examples/samplers/SMC-ABC_Lotka-Volterra_example.ipynb and inspect cell 12, especially competition_model and its odeint call. Reproduce the failure at pm.sample_smc(); the work is done when the notebook runs without the ndim=3 error.

Written by the indexing model from the issue text.

Assessment

Tech stack
jupyter-notebook, python
Domain
documentation
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.