From 094748a6e65adb7cbc61dedeab33aa2dce73b4cc Mon Sep 17 00:00:00 2001 From: Horace Guy Date: Fri, 31 Dec 2021 18:13:03 +0100 Subject: [PATCH] Create documentation and github workflow --- .github/workflows/build_doc.yml | 33 ++++++++++++ .gitignore | 1 + Makefile | 4 ++ blackjax/adaptation/step_size.py | 41 +++++++------- blackjax/diagnostics.py | 18 +++---- blackjax/nuts.py | 47 ++++++++-------- blackjax/stan_warmup.py | 5 +- blackjax/tempered_smc.py | 2 +- blackjax/types.py | 4 ++ docs/_static/blackjax.png | Bin 0 -> 133718 bytes docs/_static/custom.css | 6 +++ docs/api.rst | 86 +++++++++++++++++++++++++++++ docs/conf.py | 89 +++++++++++++++++++++++++++++++ docs/examples.rst | 13 +++++ docs/index.rst | 78 +++++++++++++++++++++++++++ docs/notebooks | 1 + notebooks/use_with_pymc3.ipynb | 12 ++--- requirements-dev.txt | 5 ++ 18 files changed, 383 insertions(+), 62 deletions(-) create mode 100644 .github/workflows/build_doc.yml create mode 100644 docs/_static/blackjax.png create mode 100644 docs/_static/custom.css create mode 100644 docs/api.rst create mode 100644 docs/conf.py create mode 100644 docs/examples.rst create mode 100644 docs/index.rst create mode 120000 docs/notebooks diff --git a/.github/workflows/build_doc.yml b/.github/workflows/build_doc.yml new file mode 100644 index 000000000..983c9ec51 --- /dev/null +++ b/.github/workflows/build_doc.yml @@ -0,0 +1,33 @@ +name: Publish docs + +on: + push: + branches: + - main + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2.3.1 + with: + persist-credentials: false + + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + + - name: Build docs + run: | + pip install -r requirements-dev.txt + sphinx-build -b html docs docs/build/html + + - name: Publish docs + uses: JamesIves/github-pages-deploy-action@3.6.2 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages + FOLDER: docs/build/html + CLEAN: true diff --git a/.gitignore b/.gitignore index 9eebaa7e5..5bcdec52e 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ pip-delete-this-directory.txt # Sphinx documentation docs/_build/ +docs/_autosummary # pyenv .python-version diff --git a/Makefile b/Makefile index 40fdac96a..cc5c99b1c 100644 --- a/Makefile +++ b/Makefile @@ -8,3 +8,7 @@ test: publish: git tag -a $(LIB_VERSION) -m $(LIB_VERSION) git push --tag + + +build-docs: + sphinx-build -b html docs docs/_build/html diff --git a/blackjax/adaptation/step_size.py b/blackjax/adaptation/step_size.py index b61ec63a4..4f72e3829 100644 --- a/blackjax/adaptation/step_size.py +++ b/blackjax/adaptation/step_size.py @@ -63,8 +63,8 @@ def dual_averaging_adaptation( the error at time t. We would like to find a procedure that adapts the value of :math:`\\epsilon` such that :math:`h(x) =\\mathbb{E}\\left[H_t|\\epsilon\\right] = 0` - Following [1]_, the authors of [2]_ proposed the following update scheme. If - we note :math:``x = \\log \\epsilon` we follow: + Following [Nesterov2009]_, the authors of [Hoffman2014]_ proposed the following update scheme. If + we note :math:`x = \\log \\epsilon` we follow: .. math: x_{t+1} \\LongLeftArrow \\mu - \\frac{\\sqrt{t}}{\\gamma} \\frac{1}{t+t_0} \\sum_{i=1}^t H_i @@ -74,21 +74,21 @@ def dual_averaging_adaptation( :math:`h(\\overline{x}_t)` converges to 0, i.e. the Metropolis acceptance rate converges to the desired rate. - See reference [2]_ (section 3.2.1) for a detailed discussion. + See reference [Hoffman2014]_ (section 3.2.1) for a detailed discussion. Parameters ---------- t0: float >= 0 Free parameter that stabilizes the initial iterations of the algorithm. - Large values may slow down convergence. Introduced in [2]_ with a default + Large values may slow down convergence. Introduced in [Hoffman2014]_ with a default value of 10. - gamma - Controls the speed of convergence of the scheme. The authors of [2]_ recommend + gamma: + Controls the speed of convergence of the scheme. The authors of [Hoffman2014]_ recommend a value of 0.05. kappa: float in ]0.5, 1] Controls the weights of past steps in the current update. The scheme will quickly forget earlier step for a small value of `kappa`. Introduced - in [2]_, with a recommended value of .75 + in [Hoffman2014]_, with a recommended value of .75 target: Target acceptance rate. @@ -102,11 +102,11 @@ def dual_averaging_adaptation( References ---------- - .. [1]: Nesterov, Yurii. "Primal-dual subgradient methods for convex + .. [Nesterov2009] Nesterov, Yurii. "Primal-dual subgradient methods for convex problems." Mathematical programming 120.1 (2009): 221-259. - .. [2]: Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: - adaptively setting path lengths in Hamiltonian Monte Carlo." Journal - of Machine Learning Research 15.1 (2014): 1593-1623. + .. [Hoffman2014] Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: + adaptively setting path lengths in Hamiltonian Monte Carlo." Journal + of Machine Learning Research 15.1 (2014): 1593-1623. """ da_init, da_update, da_final = optimizers.dual_averaging(t0, gamma, kappa) @@ -183,7 +183,7 @@ def find_reasonable_step_size( value for the step size starting from any value, choosing a good first value can speed up the convergence. This heuristics doubles and halves the step size until the acceptance probability of the HMC proposal crosses the - target value. + target value [Hoffman2014]_. Parameters ---------- @@ -208,11 +208,12 @@ def find_reasonable_step_size( float A reasonable first value for the step size. - Reference - --------- - .. [1]: Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: - adaptively setting path lengths in Hamiltonian Monte Carlo." Journal - of Machine Learning Research 15.1 (2014): 1593-1623. + References + ---------- + .. [Hoffman2014] Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: + adaptively setting path lengths in Hamiltonian Monte Carlo." Journal + of Machine Learning Research 15.1 (2014): 1593-1623. + """ fp_limit = jnp.finfo(jax.lax.dtype(initial_step_size)) @@ -228,9 +229,9 @@ def do_continue(rss_state: ReasonableStepSizeState) -> bool: occur any performance penalty when calling it repeatedly inside this function. - Reference - --------- - .. [1]: jax.numpy.finfo documentation. https://jax.readthedocs.io/en/latest/_autosummary/jax.numpy.finfo.html + References + ---------- + .. [1] jax.numpy.finfo documentation. https://jax.readthedocs.io/en/latest/_autosummary/jax.numpy.finfo.html """ _, direction, previous_direction, step_size = rss_state diff --git a/blackjax/diagnostics.py b/blackjax/diagnostics.py index f5108a2f6..2deefde0b 100644 --- a/blackjax/diagnostics.py +++ b/blackjax/diagnostics.py @@ -41,8 +41,8 @@ def potential_scale_reduction( References ---------- - .. [1]: https://mc-stan.org/docs/2_27/reference-manual/notation-for-samples-chains-and-draws.html#potential-scale-reduction - .. [2]: Gelman, Andrew, and Donald B. Rubin. (1992) “Inference from Iterative Simulation Using Multiple Sequences.” Statistical Science 7 (4): 457–72. + .. [1] https://mc-stan.org/docs/2_27/reference-manual/notation-for-samples-chains-and-draws.html#potential-scale-reduction + .. [2] Gelman, Andrew, and Donald B. Rubin. (1992) “Inference from Iterative Simulation Using Multiple Sequences.” Statistical Science 7 (4): 457–72. """ assert ( @@ -95,19 +95,19 @@ def effective_sample_size( .. math:: \\hat{\\tau} = -1 + 2 \\sum_{t'=0}^K \\hat{P}_{t'} where :math:`M` is the number of chains, :math:`N` the number of draws, - :math:`\\hat{\rho}_t` is the estimated _autocorrelation at lag :math:`t`, and - :math:`K` is the last integer for which :math:`\\hat{P}_{K} = \\hat{\rho}_{2K} + - \\hat{\rho}_{2K+1}` is still positive. + :math:`\\hat{\\rho}_t` is the estimated _autocorrelation at lag :math:`t`, and + :math:`K` is the last integer for which :math:`\\hat{P}_{K} = \\hat{\\rho}_{2K} + + \\hat{\\rho}_{2K+1}` is still positive. The current implementation is similar to Stan, which uses Geyer's initial monotone sequence criterion (Geyer, 1992; Geyer, 2011). References ---------- - .. [1]: https://mc-stan.org/docs/2_27/reference-manual/effective-sample-size-section.html - .. [2]: Gelman, Andrew, J. B. Carlin, Hal S. Stern, David B. Dunson, Aki Vehtari, and Donald B. Rubin. (2013). Bayesian Data Analysis. Third Edition. Chapman; Hall/CRC. - .. [3]: Geyer, Charles J. (1992). “Practical Markov Chain Monte Carlo.” Statistical Science, 473–83. - .. [4]: Geyer, Charles J. (2011). “Introduction to Markov Chain Monte Carlo.” In Handbook of Markov Chain Monte Carlo, edited by Steve Brooks, Andrew Gelman, Galin L. Jones, and Xiao-Li Meng, 3–48. Chapman; Hall/CRC. + .. [1] https://mc-stan.org/docs/2_27/reference-manual/effective-sample-size-section.html + .. [2] Gelman, Andrew, J. B. Carlin, Hal S. Stern, David B. Dunson, Aki Vehtari, and Donald B. Rubin. (2013). Bayesian Data Analysis. Third Edition. Chapman; Hall/CRC. + .. [3] Geyer, Charles J. (1992). “Practical Markov Chain Monte Carlo.” Statistical Science, 473–83. + .. [4] Geyer, Charles J. (2011). “Introduction to Markov Chain Monte Carlo.” In Handbook of Markov Chain Monte Carlo, edited by Steve Brooks, Andrew Gelman, Galin L. Jones, and Xiao-Li Meng, 3–48. Chapman; Hall/CRC. """ input_shape = input_array.shape diff --git a/blackjax/nuts.py b/blackjax/nuts.py index b13249613..59735b082 100644 --- a/blackjax/nuts.py +++ b/blackjax/nuts.py @@ -67,6 +67,22 @@ def kernel( ) -> Callable: """Build an iterative NUTS kernel. + This algorithm is an iteration on the original NUTS algorithm [Hoffman2014]_ with two major differences: + - We do not use slice samplig but multinomial sampling for the proposal [Betancourt2017]_; + - The trajectory expansion is not recursive but iterative [Phan2019]_, [Lao2020]_. + + The implementation can seem unusual for those familiar with similar + algorithms. Indeed, we do not conceptualize the trajectory construction as + building a tree. We feel that the tree lingo, inherited from the recursive + version, is unnecessarily complicated and hides the more general concepts + on which the NUTS algorithm is built. + + NUTS, in essence, consists in sampling a trajectory by iteratively choosing + a direction at random and integrating in this direction a number of times + that doubles at every step. From this trajectory we continuously sample a + proposal. When the trajectory turns on itself or when we have reached the + maximum trajectory length we return the current proposal. + Parameters ---------- logprob_fb @@ -74,6 +90,13 @@ def kernel( parameters A NamedTuple that contains the parameters of the kernel to be built. + References + ---------- + .. [Hoffman2014] Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo." J. Mach. Learn. Res. 15.1 (2014): 1593-1623. + .. [Betancourt2017] Betancourt, Michael. "A conceptual introduction to Hamiltonian Monte Carlo." arXiv preprint arXiv:1701.02434 (2017). + .. [Phan2019] Phan, Du, Neeraj Pradhan, and Martin Jankowiak. "Composable effects for flexible and accelerated probabilistic programming in NumPyro." arXiv preprint arXiv:1912.11554 (2019). + .. [Lao2020] Lao, Junpeng, et al. "tfp. mcmc: Modern markov chain monte carlo tools built for modern hardware." arXiv preprint arXiv:2002.01184 (2020). + """ def potential_fn(x): @@ -105,23 +128,7 @@ def iterative_nuts_proposal( max_num_expansions: int = 10, divergence_threshold: float = 1000, ) -> Callable: - """Iterative NUTS algorithm. - - This algorithm is an iteration on the original NUTS algorithm [1]_ with two major differences: - - We do not use slice samplig but multinomial sampling for the proposal [2]_; - - The trajectory expansion is not recursive but iterative [3,4]_. - - The implementation can seem unusual for those familiar with similar - algorithms. Indeed, we do not conceptualize the trajectory construction as - building a tree. We feel that the tree lingo, inherited from the recursive - version, is unnecessarily complicated and hides the more general concepts - on which the NUTS algorithm is built. - - NUTS, in essence, consists in sampling a trajectory by iteratively choosing - a direction at random and integrating in this direction a number of times - that doubles at every step. From this trajectory we continuously sample a - proposal. When the trajectory turns on itself or when we have reached the - maximum trajectory length we return the current proposal. + """Iterative NUTS proposal. Parameters ---------- @@ -142,12 +149,6 @@ def iterative_nuts_proposal( ------- A kernel that generates a new chain state and information about the transition. - References - ---------- - .. [1]: Hoffman, Matthew D., and Andrew Gelman. "The No-U-Turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo." J. Mach. Learn. Res. 15.1 (2014): 1593-1623. - .. [2]: Betancourt, Michael. "A conceptual introduction to Hamiltonian Monte Carlo." arXiv preprint arXiv:1701.02434 (2017). - .. [3]: Phan, Du, Neeraj Pradhan, and Martin Jankowiak. "Composable effects for flexible and accelerated probabilistic programming in NumPyro." arXiv preprint arXiv:1912.11554 (2019). - .. [4]: Lao, Junpeng, et al. "tfp. mcmc: Modern markov chain monte carlo tools built for modern hardware." arXiv preprint arXiv:2002.01184 (2020). """ ( new_termination_state, diff --git a/blackjax/stan_warmup.py b/blackjax/stan_warmup.py index a77f51f96..dcaac741a 100644 --- a/blackjax/stan_warmup.py +++ b/blackjax/stan_warmup.py @@ -115,12 +115,11 @@ def stan_warmup( Schematically: - ``` +---------+---+------+------------+------------------------+------+ | fast | s | slow | slow | slow | fast | +---------+---+------+------------+------------------------+------+ - 1 2 3 3 3 3 - ``` + |1 |2 |3 |3 |3 |3 | + +---------+---+------+------------+------------------------+------+ Step (1) consists in find a "reasonable" first step size that is used to initialize the dual averaging scheme. In (2) we initialize the mass matrix diff --git a/blackjax/tempered_smc.py b/blackjax/tempered_smc.py index a655b4bde..af329d2ee 100644 --- a/blackjax/tempered_smc.py +++ b/blackjax/tempered_smc.py @@ -116,7 +116,7 @@ def tempered_smc( Tempered SMC uses tempering to sample from a distribution given by - :math.. + .. math:: p(x) \\propto p_0(x) \\exp(-V(x)) \\mathrm{d}x where :math:`p_0` is the prior distribution, typically easy to sample from and for which the density diff --git a/blackjax/types.py b/blackjax/types.py index d9a12b77d..1750ff0d1 100644 --- a/blackjax/types.py +++ b/blackjax/types.py @@ -3,10 +3,14 @@ import jax.numpy as jnp import numpy as np +#: JAX or Numpy array Array = Union[np.ndarray, jnp.ndarray] + +#: JAX PyTrees PyTree = Union[Array, Iterable[Array], Mapping[Any, Array]] # It is not currently tested but we also support recursive PyTrees. # Once recursive typing is fully supported (https://github.com/python/mypy/issues/731), we can uncomment the line below. # PyTree = Union[Array, Iterable["PyTree"], Mapping[Any, "PyTree"]] +#: JAX PRNGKey PRNGKey = jnp.ndarray diff --git a/docs/_static/blackjax.png b/docs/_static/blackjax.png new file mode 100644 index 0000000000000000000000000000000000000000..26ce4d7ab7379613415a561058ee8640dd7c2682 GIT binary patch literal 133718 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 literal 0 HcmV?d00001 diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 000000000..7d368071c --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,6 @@ +#site-navigation{ + background: #E6E7E8; + h1.site-logo { + font-weight: bold; + } +} diff --git a/docs/api.rst b/docs/api.rst new file mode 100644 index 000000000..5bd9bb47e --- /dev/null +++ b/docs/api.rst @@ -0,0 +1,86 @@ +Common Kernels +============== + +.. currentmodule:: blackjax + +.. autosummary:: + + hmc + nuts + rmh + tempered_smc + +HMC +~~~ + +.. automodule:: blackjax.hmc + :members: HMCInfo, kernel, new_state + +NUTS +~~~~ + +.. automodule:: blackjax.nuts + :members: NUTSInfo, kernel, new_state + +RMH +~~~ + +.. automodule:: blackjax.rmh + :members: + :undoc-members: + +Tempered SMC +~~~~~~~~~~~~ + +.. automodule:: blackjax.tempered_smc + :members: TemperedSMCState, adaptive_tempered_smc, tempered_smc + + +Adaptation +========== + + +Stan full warmup +~~~~~~~~~~~~~~~~ + +.. currentmodule:: blackjax + +.. automodule:: blackjax.stan_warmup + :members: run + +Step-size adataptation +~~~~~~~~~~~~~~~~~~~~~~ + +.. currentmodule:: blackjax.adaptation.step_size + +.. autofunction:: dual_averaging_adaptation + +.. autofunction:: find_reasonable_step_size + +Mass matrix adataptation +~~~~~~~~~~~~~~~~~~~~~~~~ + +.. currentmodule:: blackjax.adaptation.mass_matrix + +.. autofunction:: mass_matrix_adaptation + +Diagnostics +=========== + +.. currentmodule:: blackjax.diagnostics + +.. autosummary:: + + effective_sample_size + potential_scale_reduction + +Effective sample size +~~~~~~~~~~~~~~~~~~~~~ + +.. autofunction:: effective_sample_size + + +Potential scale reduction +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. autofunction:: potential_scale_reduction diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 000000000..9b3ddd990 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,89 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import pathlib +import sys +from datetime import date + +PROJECT_DIR = pathlib.Path(__file__).absolute().parent.parent +sys.path.append(str(PROJECT_DIR)) + +# -- Project information ----------------------------------------------------- + +project = "blackjax" +copyright = f"{date.today().year}, The Blackjax developers" +author = "The Blackjax developers" + +# The full version, including alpha/beta/rc tags +release = "0.3.0" + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.napoleon", + "sphinx.ext.intersphinx", + "sphinx.ext.viewcode", + "myst_nb", +] + +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), + "numpy": ("https://numpy.org/doc/stable", None), + "jax": ("https://jax.readthedocs.io/en/latest", None), +} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_book_theme" +html_theme_options = { + "repository_url": "https://github.com/blackjax-devs/blackjax", + "use_repository_button": True, + "use_download_button": False, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] +html_title = "Blackjax" +html_logo = "_static/blackjax.png" +html_css_files = ["custom.css"] + + +autosummary_generate = True +autodoc_typehints = "description" +add_module_names = False +# autodoc_unqualified_typehints = True +# autodoc_type_aliases = {"PyTree": "PyTree", "Array": "Array"} + + +source_suffix = {".rst": "restructuredtext", ".ipynb": "myst-nb", ".md": "myst-nb"} + +jupyter_execute_notebooks = "off" diff --git a/docs/examples.rst b/docs/examples.rst new file mode 100644 index 000000000..853c968af --- /dev/null +++ b/docs/examples.rst @@ -0,0 +1,13 @@ +Examples +======== + +.. toctree:: + :caption: Examples + + notebooks/Introduction.ipynb + notebooks/LogisticRegression.ipynb + notebooks/TemperedSMC.ipynb + notebooks/use_with_numpyro.ipynb + notebooks/use_with_pymc3.ipynb + notebooks/use_with_tfp.ipynb + notebooks/HierarchicalBNN.ipynb diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 000000000..2ec7a9cee --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,78 @@ +Welcome to Blackjax +=================== + +Blackjax is a library of samplers for `JAX `_ that works on CPU as well as GPU. It is designed with two categories of users in mind: + +- People who just need state-of-the-art samplers that are fast, robust and well tested; +- Researchers who can use the library's building blocks to design new algorithms. + +It integrates really well with PPLs as long as they can provide a (potentially unnormalized) log-probability density function compatible with JAX. And while you're here: + +.. code-block:: python + + import jax + import jax.numpy as jnp + import jax.scipy.stats as stats + import numpy as np + + import blackjax.nuts as nuts + + observed = np.random.normal(10, 20, size=1_000) + def logprob_fn(x): + logpdf = stats.norm.logpdf(observed, x["loc"], x["scale"]) + return jnp.sum(logpdf) + + # Build the kernel + step_size = 1e-3 + inverse_mass_matrix = jnp.array([1., 1.]) + kernel = nuts.kernel(logprob_fn, step_size, inverse_mass_matrix) + kernel = jax.jit(kernel) # try without to see the speedup + + # Initialize the state + initial_position = {"loc": 1., "scale": 2.} + state = nuts.new_state(initial_position, logprob_fn) + + # Iterate + rng_key = jax.random.PRNGKey(0) + for _ in range(1_000): + _, rng_key = jax.random.split(rng_key) + state, _ = kernel(rng_key, state) + +Installation +============ + +Blackjax is written in pure Python but depends on XLA via JAX. Since the JAX +installation depends on your CUDA version BlackJAX does not list JAX as a +dependency. If you simply want to use JAX on CPU, install it with: + +.. code-block:: bash + + pip install jax jaxlib + +Follow `these instructions `_ to +install JAX with the relevant hardware acceleration support. + +Then install BlackJAX + +.. code-block:: bash + + pip install blackjax + + +.. toctree:: + :maxdepth: 1 + :caption: Blackjax by example + + examples + +.. toctree:: + :maxdepth: 2 + :caption: API Documentation + + api + + +Index +===== + +* :ref:`genindex` diff --git a/docs/notebooks b/docs/notebooks new file mode 120000 index 000000000..edb8f02d7 --- /dev/null +++ b/docs/notebooks @@ -0,0 +1 @@ +../notebooks/ \ No newline at end of file diff --git a/notebooks/use_with_pymc3.ipynb b/notebooks/use_with_pymc3.ipynb index 61564e713..f7750d2ff 100644 --- a/notebooks/use_with_pymc3.ipynb +++ b/notebooks/use_with_pymc3.ipynb @@ -136,7 +136,7 @@ "id": "aabSQ11iYGZw" }, "source": [ - "# Model\n" + "## Model\n" ] }, { @@ -165,7 +165,7 @@ "id": "VKMdLEu1Y5jb" }, "source": [ - "# Sampling using PyMC NUTS Sampler" + "## Sampling using PyMC NUTS Sampler" ] }, { @@ -253,7 +253,7 @@ "id": "3I6zXC-JZCfs" }, "source": [ - "# Sampling using PyMC JAX Numpyro NUTS sampler" + "## Sampling using PyMC JAX Numpyro NUTS sampler" ] }, { @@ -299,9 +299,9 @@ "id": "h8cMqFwiZjxS" }, "source": [ - "# Sampling using BlackJax\n", + "## Sampling using BlackJax\n", "\n", - "## Configuring the model for BlackJax\n" + "### Configuring the model for BlackJax\n" ] }, { @@ -365,7 +365,7 @@ "id": "tsnfayfaispl" }, "source": [ - "## Sampling" + "### Sampling" ] }, { diff --git a/requirements-dev.txt b/requirements-dev.txt index d9a32f13f..7e4c20455 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -5,6 +5,7 @@ attrs==20.3.0 black==20.8b1 chex>=0.0.8 click==7.1.2 +docutils>=0.17 execnet==1.7.1 flake8==3.8.4 iniconfig==1.1.1 @@ -12,6 +13,7 @@ isort==5.6.4 mccabe==0.6.1 mypy==0.790 mypy-extensions==0.4.3 +myst_nb packaging==20.7 pathspec==0.8.1 pluggy==0.13.1 @@ -26,6 +28,9 @@ pytest-forked==1.3.0 pytest-html==3.1.1 pytest-xdist==2.1.0 regex==2020.11.13 +sphinx==4.3.2 +sphinx-autobuild==2021.3.14 +sphinx-book-theme toml==0.10.2 typed-ast==1.4.1 typing-extensions==3.7.4.3