Skip to main content

Python interface to CmdStan

Project description

pycmdstan

pipeline status coverage report PyPI package version

Python interface to CmdStan.

Install

Pycmdstan is a pure-Python package which can be installed from PyPI

pip install --upgrade pycmdstan

or from sources

pip install -e git+https://gitlab.thevirtualbrain.org/tvb/pycmdstan

Usage

import os
os.environ['CMDSTAN'] = '~/src/cmdstan-2.17.1'
from pycmdstan import Model, Run

model = Model('''
data { vector[20] x; real mu; }
parameters { real sig; }
model { x ~ normal(mu, sig); }
generate quantities {
    vector[20] log_lik;
    for (i in 1:20) log_lik[i] = normal_lpdf(x[i] | mu, sig);
}
''')

runs = model.sample(
	data=dict(mu, **data),
	chains=4
)
assert runs.N_eff_per_iter.min() > 0.2
assert runs.R_hat.max() < 1.2

data = {'x': np.random.randn(20) + 5.0}
loo = []
mus = np.r_[1.0, 3.0, 5.0, 7.0, 9.0]
for mu in mus:
    run = model.sample(
        data=dict(mu=mu, **data), num_warmup=200, num_samples=200)
    loo.append(run['loo'])
assert mus[np.argmin(loo)] == 5.0

CmdStan's command line arguments are structured as a tree, so while child parameters of the method argument can be passed directly,

model.sample(num_samples=500)

equivalent to

./$model sample num_samples=500

A more complex case with nested parameters looks like

./$model id=$i \
    sample save_warmup=1 num_warmup=200 num_samples=200 \
        adapt \
            delta=0.8 \
        algorithm=hmc \
            engine=nuts \
                max_depth=12

Pycmdstan doesn't do anything clever (yet), so full set of subarguments need to be passed as equivalent strings

model.sample(
	save_warmup=1,
	num_warmup=200,
	num_samples=200,
	adapt_='delta=0.8',
	algorithm='hmc engine=nuts max_depth=12'
)

Here, the _ postfix on adapt_ means adapt doesn't take a value, but subarguments. In doubt, the command line used to call the model is available as an attribute of the Run instance,

run = model.sample(...)
print(run.cmd)

Contributing

Contributions are welcome, please start in the issue tracker. Use YAPF to format the code. The Dockerfile can ease local development,

docker build -t pycmdstan .
docker run --rm -it pycmdstan pytest -n4 pycmdstan/tests.py

Acknowledgements

  • PSIS code is by Aki Vehtari & Tuomas Sivula (BSD licensed, repo here)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycmdstan-0.5.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

pycmdstan-0.5-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file pycmdstan-0.5.tar.gz.

File metadata

  • Download URL: pycmdstan-0.5.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pycmdstan-0.5.tar.gz
Algorithm Hash digest
SHA256 7dbff8cb5d742d07eb336689c192584925f83470a75269ace51b4a377ff71e14
MD5 d7eeb82940c9628abb4e1310fe33c530
BLAKE2b-256 370467ccac25262eb48cd34439744f5c3e016f2db48ded5f427beef78f1859b8

See more details on using hashes here.

File details

Details for the file pycmdstan-0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pycmdstan-0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 11cd5f10b763068f457eba7508c3071b79d797b2de28bf7cba7f9b23b5689ca3
MD5 df56692612fdd2c3f1a5313e8270c41c
BLAKE2b-256 8d471c2571d3a0af78fe245e9168a4a18711736a33aa6e2ebdd1014507e6850c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page