From 969438c4e82d725102a377f2026816f83e7630a8 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Thu, 14 Oct 2021 10:12:40 +0300 Subject: [PATCH 01/12] improve appearance --- _static/{PyMC3.ico => PyMC.ico} | Bin _static/PyMC.png | Bin 0 -> 69626 bytes _static/binder.svg | 1 + _static/colab.svg | 1 + _static/github.svg | 1 + _templates/page.html | 29 ++++++++++++++++++ _templates/postcard.html | 50 ++++++++++++++++++++++++++++++++ examples/bibliography.md | 6 ---- examples/conf.py | 34 +++++++++++++++++----- examples/index.md | 1 - examples/splines/spline.ipynb | 17 ++++------- 11 files changed, 114 insertions(+), 26 deletions(-) rename _static/{PyMC3.ico => PyMC.ico} (100%) create mode 100644 _static/PyMC.png create mode 100644 _static/binder.svg create mode 100644 _static/colab.svg create mode 100644 _static/github.svg create mode 100644 _templates/page.html create mode 100644 _templates/postcard.html delete mode 100644 examples/bibliography.md diff --git a/_static/PyMC3.ico b/_static/PyMC.ico similarity index 100% rename from _static/PyMC3.ico rename to _static/PyMC.ico diff --git a/_static/PyMC.png b/_static/PyMC.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1c092fee572b52cb6d9cbb592d052797473420 GIT binary patch literal 69626 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 launchlaunchbinderbinder \ No newline at end of file diff --git a/_static/colab.svg b/_static/colab.svg new file mode 100644 index 000000000..c08066ee3 --- /dev/null +++ b/_static/colab.svg @@ -0,0 +1 @@ + Open in ColabOpen in Colab diff --git a/_static/github.svg b/_static/github.svg new file mode 100644 index 000000000..e02d8ed55 --- /dev/null +++ b/_static/github.svg @@ -0,0 +1 @@ + View On GitHubView On GitHub \ No newline at end of file diff --git a/_templates/page.html b/_templates/page.html new file mode 100644 index 000000000..cf59c6934 --- /dev/null +++ b/_templates/page.html @@ -0,0 +1,29 @@ +{%- extends "layout.html" %} +{% block body %} + +{% if pagename in ablog %} + + {% set gh_basepath = github_user + '/' + github_repo + '/blob/' + github_version + '/' %} + {% set gh_binder = github_user + '/' + github_repo + '/' + github_version %} + {% set doc_path_aux = doc_path | trim('/') %} + {% set file_path = doc_path_aux + '/' + pagename + page_source_suffix %} + +

+{% endif %} + + {{ body }} +{% endblock %} diff --git a/_templates/postcard.html b/_templates/postcard.html new file mode 100644 index 000000000..8c510a8d0 --- /dev/null +++ b/_templates/postcard.html @@ -0,0 +1,50 @@ +{% if pagename in ablog %} + {% set fa = ablog.fontawesome %} + {% set post = ablog[pagename] %} + +{% endif %} diff --git a/examples/bibliography.md b/examples/bibliography.md deleted file mode 100644 index ff9f2df07..000000000 --- a/examples/bibliography.md +++ /dev/null @@ -1,6 +0,0 @@ -# General Bibliography - -:::{bibliography} -:all: - -::: diff --git a/examples/conf.py b/examples/conf.py index c029a2b99..5e529bf00 100644 --- a/examples/conf.py +++ b/examples/conf.py @@ -17,7 +17,7 @@ # -- Project information ----------------------------------------------------- -project = "PyMC3" +project = "PyMC" copyright = "2021, PyMC Community" author = "PyMC Community" @@ -78,26 +78,44 @@ "search_bar_text": "Search...", "navbar_end": ["search-field.html", "navbar-icon-links.html"], "external_links": [ - {"name": "Learning", "url": "https://pymc3.readthedocs.io/en/latest/learn.html"}, - {"name": "API", "url": "https://pymc3.readthedocs.io/en/latest/api.html"}, + {"name": "Learning", "url": "https://docs.pymc.io/en/stable/learn.html"}, + {"name": "API", "url": "https://docs.pymc.io/en/stable/api.html"}, ], } +html_context = { + "github_url": "https://github.com", + "github_user": "pymc-devs", + "github_repo": "pymc-examples", + "github_version": "main", + "doc_path": "examples/", +} + -html_favicon = "../_static/PyMC3.ico" +html_favicon = "../_static/PyMC.ico" +html_logo = "../_static/PyMC.png" # 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"] +templates_path = ["../_templates"] +# Workaround to make the whole sidebar scrollable. See https://github.com/pydata/pydata-sphinx-theme/issues/500 +# ideally the tagcloud, categories and ads would be added from here in conf.py html_sidebars = { - "**": ["sidebar-nav-bs.html", "tagcloud.html", "categories.html"], + "**": [ + # "sidebar-nav-bs.html", + "postcard.html", + # "tagcloud.html", + # "categories.html", + # "sidebar-ethical-ads.html", + ], } # ablog config -# blog_baseurl = "https://predictablynoisy.com" +blog_baseurl = "https://examples.pymc.io" blog_title = "PyMC Examples" blog_path = "blog" -# fontawesome_included = True +fontawesome_included = True # post_redirect_refresh = 1 # post_auto_image = 1 # post_auto_excerpt = 2 @@ -124,7 +142,7 @@ # "mpl": ("https://matplotlib.org/", None), # "numpy": ("https://numpy.org/doc/stable/", None), # "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), - "pymc3": ("https://docs.pymc.io/", None), + "pymc": ("https://docs.pymc.io/en/stable/", None), # "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), # "xarray": ("http://xarray.pydata.org/en/stable/", None), } diff --git a/examples/index.md b/examples/index.md index 62fbc5a59..46bf0e87d 100644 --- a/examples/index.md +++ b/examples/index.md @@ -11,5 +11,4 @@ via the search bar. :::{toctree} :maxdepth: 2 blog -bibliography ::: diff --git a/examples/splines/spline.ipynb b/examples/splines/spline.ipynb index d68e7b370..09eec3be7 100644 --- a/examples/splines/spline.ipynb +++ b/examples/splines/spline.ipynb @@ -4,16 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Splines in PyMC3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "# Splines in PyMC3\n", + "\n", ":::{post} Oct 8, 2021 \n", ":tags: patsy, pymc3.Deterministic, pymc3.Exponential, pymc3.Model, pymc3.Normal, regression, spline\n", ":category: beginner\n", + ":author: Joshua Cook, Tyler James Burch\n", ":::" ] }, @@ -1538,11 +1534,10 @@ } ], "metadata": { - "celltoolbar": "Tags", "kernelspec": { - "display_name": "pymc_1010", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "pymc_1010" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1554,7 +1549,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.6" } }, "nbformat": 4, From 818098b392c2ac5c27ffc36d2649895f01ab316e Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Thu, 14 Oct 2021 10:32:57 +0300 Subject: [PATCH 02/12] get tags and categories to show in all pages, not only posts --- _templates/postcard.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/_templates/postcard.html b/_templates/postcard.html index 8c510a8d0..7e9a176c0 100644 --- a/_templates/postcard.html +++ b/_templates/postcard.html @@ -1,8 +1,8 @@ + From 36042ebbbbac1308a5f0682bf23345b6663a37b9 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Sun, 17 Oct 2021 05:43:06 +0300 Subject: [PATCH 03/12] further improvements --- _templates/nb-badges.html | 21 +++++++++++++++++++++ _templates/page.html | 22 +--------------------- _templates/postcard.html | 10 ---------- examples/conf.py | 28 ++++++++-------------------- 4 files changed, 30 insertions(+), 51 deletions(-) create mode 100644 _templates/nb-badges.html diff --git a/_templates/nb-badges.html b/_templates/nb-badges.html new file mode 100644 index 000000000..168821312 --- /dev/null +++ b/_templates/nb-badges.html @@ -0,0 +1,21 @@ + +{% set gh_basepath = github_user + '/' + github_repo + '/blob/' + github_version + '/' %} +{% set encoded_base = github_user + '%252F' + github_repo %} +{% set gh_binder = github_user + '/' + github_repo + '/' + github_version %} +{% set doc_path_aux = doc_path | trim('/') %} +{% set file_path = doc_path_aux + '/' + pagename + page_source_suffix %} +{% set encoded_path = file_path | replace("/", "%252F") %} + + +
+

+ + View On GitHub + + + Open In Binder + + + Open In Colab +

+
diff --git a/_templates/page.html b/_templates/page.html index cf59c6934..6a272d7ac 100644 --- a/_templates/page.html +++ b/_templates/page.html @@ -2,27 +2,7 @@ {% block body %} {% if pagename in ablog %} - - {% set gh_basepath = github_user + '/' + github_repo + '/blob/' + github_version + '/' %} - {% set gh_binder = github_user + '/' + github_repo + '/' + github_version %} - {% set doc_path_aux = doc_path | trim('/') %} - {% set file_path = doc_path_aux + '/' + pagename + page_source_suffix %} - -
-

- - View On GitHub - - - - Open In Binder - - - - Open In Colab - -

-
+ {% include "nb-badges.html" %} {% endif %} {{ body }} diff --git a/_templates/postcard.html b/_templates/postcard.html index 7e9a176c0..14734c3eb 100644 --- a/_templates/postcard.html +++ b/_templates/postcard.html @@ -1,5 +1,3 @@ - diff --git a/examples/conf.py b/examples/conf.py index 5e529bf00..5c3d45eed 100644 --- a/examples/conf.py +++ b/examples/conf.py @@ -1,22 +1,7 @@ -# 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 os -# import sys -# sys.path.insert(0, os.path.abspath('.')) +import os # -- Project information ----------------------------------------------------- - project = "PyMC" copyright = "2021, PyMC Community" author = "PyMC Community" @@ -82,12 +67,15 @@ {"name": "API", "url": "https://docs.pymc.io/en/stable/api.html"}, ], } +version = os.environ.get("READTHEDOCS_VERSION", "") +version = version if "-" in version else "main" html_context = { "github_url": "https://github.com", "github_user": "pymc-devs", "github_repo": "pymc-examples", - "github_version": "main", + "github_version": version, "doc_path": "examples/", + "sandbox_repo": f"pymc-devs/pymc-sandbox/{version}", } @@ -105,9 +93,9 @@ "**": [ # "sidebar-nav-bs.html", "postcard.html", - # "tagcloud.html", - # "categories.html", - # "sidebar-ethical-ads.html", + "tagcloud.html", + "categories.html", + "sidebar-ethical-ads.html", ], } From 18d89a94dc17f57c7d7d7fbcc240c8d99ce5a5ea Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Thu, 4 Nov 2021 14:34:09 +0200 Subject: [PATCH 04/12] try adding codeautolink --- .../blackbox_external_likelihood.ipynb | 2 +- .../conditional-autoregressive-model.ipynb | 22 +++++++------ examples/conf.py | 32 +++++++++++++++---- examples/getting_started.ipynb | 4 +-- .../pymc3_howto/sampling_compound_step.ipynb | 13 +++----- requirements-docs.txt | 1 + 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/examples/case_studies/blackbox_external_likelihood.ipynb b/examples/case_studies/blackbox_external_likelihood.ipynb index b14893ba5..d2148b0bf 100644 --- a/examples/case_studies/blackbox_external_likelihood.ipynb +++ b/examples/case_studies/blackbox_external_likelihood.ipynb @@ -73,7 +73,7 @@ "However, this is not necessarily that simple if you have a model function, or probability distribution, that, for example, relies on an external code that you have little/no control over (and may even be, for example, wrapped `C` code rather than Python). This can be problematic went you need to pass parameters set as PyMC3 distributions to these external functions; your external function probably wants you to pass it floating point numbers rather than PyMC3 distributions!\n", "\n", "```python\n", - "import pymc3 as pm:\n", + "import pymc3 as pm\n", "from external_module import my_external_func # your external function!\n", "\n", "# set up your model\n", diff --git a/examples/case_studies/conditional-autoregressive-model.ipynb b/examples/case_studies/conditional-autoregressive-model.ipynb index 7d979f857..646f5ab17 100644 --- a/examples/case_studies/conditional-autoregressive-model.ipynb +++ b/examples/case_studies/conditional-autoregressive-model.ipynb @@ -122,7 +122,7 @@ "\n", "The classical `WinBUGS` implementation (more information [here](http://glau.ca/?p=340)):\n", "\n", - "```python\n", + "```stan\n", "model\n", "{\n", " for (i in 1 : regions) {\n", @@ -2854,7 +2854,7 @@ "metadata": {}, "source": [ "Then in the `Stan` model:\n", - "```\n", + "```stan\n", "model {\n", " phi ~ multi_normal_prec(zeros, tau * (D - alpha * W));\n", " ...\n", @@ -3004,7 +3004,7 @@ "Note that in the node $\\phi \\sim \\mathcal{N}(0, [D_\\tau (I - \\alpha B)]^{-1})$, we are computing the log-likelihood for a multivariate Gaussian distribution, which might not scale well in high-dimensions. We can take advantage of the fact that the covariance matrix here $[D_\\tau (I - \\alpha B)]^{-1}$ is **sparse**, and there are faster ways to compute its log-likelihood. \n", "\n", "For example, a more efficient sparse representation of the CAR in `Stan`:\n", - "```python\n", + "```stan\n", "functions {\n", " /**\n", " * Return the log probability of a proper conditional autoregressive (CAR) prior \n", @@ -3040,9 +3040,9 @@ " - tau * (phit_D * phi - alpha * (phit_W * phi)));\n", " }\n", "}\n", - "```python\n", - "with the data transformed in the model:\n", "```\n", + "with the data transformed in the model:\n", + "```stan\n", "transformed data {\n", " int W_sparse[W_n, 2]; // adjacency pairs\n", " vector[n] D_sparse; // diagonal of D (number of neigbors for each site)\n", @@ -3073,7 +3073,7 @@ "}\n", "```\n", "and the likelihood:\n", - "```\n", + "```stan\n", "model {\n", " phi ~ sparse_car(tau, alpha, W_sparse, D_sparse, lambda, n, W_n);\n", "}\n", @@ -3297,6 +3297,7 @@ "In `Stan`, there is an option to write a `generated quantities` block for sample generation. Doing the similar in pymc3, however, is not recommended. \n", "\n", "Consider the following simple sample:\n", + "\n", "```python\n", "# Data\n", "x = np.array([1.1, 1.9, 2.3, 1.8])\n", @@ -3312,9 +3313,12 @@ " p = pm.Deterministic('p', pm.math.sigmoid(mu))\n", " count = pm.Binomial('count', n=10, p=p, shape=10)\n", "```\n", + "\n", "where we intended to use \n", + "\n", "```python\n", - "count = pm.Binomial('count', n=10, p=p, shape=10)```\n", + "count = pm.Binomial('count', n=10, p=p, shape=10)\n", + "```\n", "to generate posterior prediction. However, if the new RV added to the model is a discrete variable it can cause weird turbulence to the trace. You can see [issue #1990](https://github.com/pymc-devs/pymc3/issues/1990) for related discussion." ] }, @@ -3486,7 +3490,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -3500,7 +3504,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/examples/conf.py b/examples/conf.py index 5c3d45eed..8b38e1951 100644 --- a/examples/conf.py +++ b/examples/conf.py @@ -21,6 +21,7 @@ "sphinxext.opengraph", "sphinx_copybutton", "sphinxcontrib.bibtex", + "sphinx_codeautolink", ] # List of patterns, relative to source directory, that match files and @@ -110,6 +111,7 @@ # MyST config myst_enable_extensions = ["colon_fence", "deflist", "dollarmath", "amsmath"] +jupyter_execute_notebooks = "off" # bibtex config bibtex_bibfiles = ["references.bib"] @@ -120,17 +122,33 @@ # ogp_site_url = "https://predictablynoisy.com" # ogp_image = "https://predictablynoisy.com/_static/profile-bw.png" -# Temporarily stored as off until we fix it -jupyter_execute_notebooks = "off" +# codeautolink config +from IPython.core.inputtransformer2 import TransformerManager + + +def ipython_cell_transform(source): + out = TransformerManager().transform_cell(source) + return source, out + + +# codeautolink +codeautolink_custom_blocks = { + "ipython3": ipython_cell_transform, +} +codeautolink_autodoc_inject = False +codeautolink_global_preface = """ +import arviz as az +import pymc3 as pm +""" # intersphinx mappings intersphinx_mapping = { "aesara": ("https://aesara.readthedocs.io/en/latest/", None), "arviz": ("https://arviz-devs.github.io/arviz/", None), - # "mpl": ("https://matplotlib.org/", None), - # "numpy": ("https://numpy.org/doc/stable/", None), - # "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), + "mpl": ("https://matplotlib.org/", None), + "numpy": ("https://numpy.org/doc/stable/", None), + "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), "pymc": ("https://docs.pymc.io/en/stable/", None), - # "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), - # "xarray": ("http://xarray.pydata.org/en/stable/", None), + "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), + "xarray": ("http://xarray.pydata.org/en/stable/", None), } diff --git a/examples/getting_started.ipynb b/examples/getting_started.ipynb index a8cb82929..594392b1d 100644 --- a/examples/getting_started.ipynb +++ b/examples/getting_started.ipynb @@ -253,7 +253,7 @@ "\n", "Following instantiation of the model, the subsequent specification of the model components is performed inside a `with` statement:\n", "\n", - "```python\n", + "```\n", "with basic_model:\n", "```\n", "This creates a *context manager*, with our `basic_model` as the context, that includes all statements until the indented block ends. This means all PyMC3 objects introduced in the indented code block below the `with` statement are added to the model behind the scenes. Absent this context manager idiom, we would be forced to manually associate each of the variables with `basic_model` right after we create them. If you try to create a new random variable without a `with model:` statement, it will raise an error since there is no obvious model for the variable to be added to.\n", @@ -3840,7 +3840,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/examples/pymc3_howto/sampling_compound_step.ipynb b/examples/pymc3_howto/sampling_compound_step.ipynb index 137e703f1..1ae8c1e3d 100644 --- a/examples/pymc3_howto/sampling_compound_step.ipynb +++ b/examples/pymc3_howto/sampling_compound_step.ipynb @@ -63,10 +63,10 @@ " rv1 = ... # random variable 1 (continuous)\n", " rv2 = ... # random variable 2 (continuous)\n", " rv3 = ... # random variable 3 (categorical)\n", - " ...\n", + " #...\n", " step1 = pm.Metropolis([rv1, rv2])\n", " step2 = pm.CategoricalGibbsMetropolis([rv3])\n", - " trace = pm.sample(..., step=[step1, step2]...)\n", + " trace = pm.sample(..., step=[step1, step2])\n", "```\n", "The compound step now contains a list of `methods`. At each sampling step, it iterates over these methods, taking a `point` as input. In each step a new `point` is proposed as an output, if rejected by the Metropolis-Hastings criteria the original input `point` sticks around as the output. " ] @@ -678,11 +678,6 @@ "The concern with mixing discrete and continuous sampling is that the change in discrete parameters will affect the continuous distribution's geometry so that the adaptation (i.e., the tuned mass matrix and step size) may be inappropriate for the Hamiltonian Monte Carlo sampling. HMC/NUTS is hypersensitive to its tuning parameters (mass matrix and step size). Another issue is that we also don't know how many iterations we have to run to get a decent sample when the discrete parameters change. Though it hasn't been fully evaluated, it seems that if the discrete parameter is in low dimensions (e.g., 2-class mixture models, outlier detection with explicit discrete labeling), the mixing of discrete sampling with HMC/NUTS works OK. However, it is much less efficient than marginalizing out the discrete parameters. And sometimes it can be observed that the Markov chains get stuck quite often. In order to evaluate this more properly, one can use a simulation-based method to look at the posterior coverage and establish the computational correctness, as explained in [Cook, Gelman, and Rubin 2006](https://amstat.tandfonline.com/doi/abs/10.1198/106186006x136976)." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -724,7 +719,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -738,7 +733,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.9.7" }, "latex_envs": { "LaTeX_envs_menu_present": true, diff --git a/requirements-docs.txt b/requirements-docs.txt index 64f877a14..c6ee71b7f 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -6,3 +6,4 @@ sphinx-copybutton sphinxcontrib-bibtex ablog sphinxext-opengraph +git+https://github.com/felix-hilden/sphinx-codeautolink From d21b1f852760a68914de63f2a0c8ee513cd54755 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Fri, 5 Nov 2021 07:13:06 +0200 Subject: [PATCH 05/12] add auto footer with license and citation --- _templates/page.html | 16 ++++++++++++++++ _templates/postcard.html | 10 ---------- examples/conf.py | 12 +++++------- examples/getting_started.ipynb | 8 ++++++++ examples/page_footer.md | 26 ++++++++++++++++++++++++++ examples/splines/spline.ipynb | 17 ++++++++++++++++- 6 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 examples/page_footer.md diff --git a/_templates/page.html b/_templates/page.html index 6a272d7ac..0d778d335 100644 --- a/_templates/page.html +++ b/_templates/page.html @@ -6,4 +6,20 @@ {% endif %} {{ body }} + + +{% if pagename in ablog %} +
    +
  • + {% for coll in post.author %} + {% if coll|length %} + {{ coll }} + {% if loop.index < post.author|length %},{% endif %} + {% else %} + {{ coll }} + {% if loop.index < post.author|length %},{% endif %} + {% endif %} + {% endfor %}. "{{ title.split(' — ')[0] }}". In: PyMC Examples. DOI: {{ doi_code }}
  • +
+{% endif %} {% endblock %} diff --git a/_templates/postcard.html b/_templates/postcard.html index 14734c3eb..f7c3956e7 100644 --- a/_templates/postcard.html +++ b/_templates/postcard.html @@ -4,16 +4,6 @@

Notebook metadata

    - {% if post.author %} -
  • - - {% for coll in post.author %} {% if coll|length %} - {{ coll }}{% if loop.index < - post.author|length %},{% endif %} {% else %}{{ coll }}{% if loop.index < - post.author|length %},{% endif %}{% endif %} {% endfor %} - -
  • - {% endif %} {% if post.category %}
  • diff --git a/examples/conf.py b/examples/conf.py index 8b38e1951..6185bc75b 100644 --- a/examples/conf.py +++ b/examples/conf.py @@ -1,12 +1,10 @@ import os - # -- Project information ----------------------------------------------------- project = "PyMC" copyright = "2021, PyMC Community" author = "PyMC Community" - # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be @@ -110,7 +108,7 @@ # post_auto_excerpt = 2 # MyST config -myst_enable_extensions = ["colon_fence", "deflist", "dollarmath", "amsmath"] +myst_enable_extensions = ["colon_fence", "deflist", "dollarmath", "amsmath", "substitution"] jupyter_execute_notebooks = "off" # bibtex config @@ -136,10 +134,10 @@ def ipython_cell_transform(source): "ipython3": ipython_cell_transform, } codeautolink_autodoc_inject = False -codeautolink_global_preface = """ -import arviz as az -import pymc3 as pm -""" +# codeautolink_global_preface = """ +# import arviz as az +# import pymc3 as pm +# """ # intersphinx mappings intersphinx_mapping = { diff --git a/examples/getting_started.ipynb b/examples/getting_started.ipynb index 594392b1d..4cc794ab1 100644 --- a/examples/getting_started.ipynb +++ b/examples/getting_started.ipynb @@ -3821,6 +3821,14 @@ "%load_ext watermark\n", "%watermark -n -u -v -iv -w" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ":::{include} page_footer.md\n", + ":::" + ] } ], "metadata": { diff --git a/examples/page_footer.md b/examples/page_footer.md new file mode 100644 index 000000000..2a37b2169 --- /dev/null +++ b/examples/page_footer.md @@ -0,0 +1,26 @@ +## License notice +All the notebooks in this example gallery are provided under the +[MIT License](https://github.com/pymc-devs/pymc-examples/blob/main/LICENSE) +which allows modification, and redistribution for any +use provided the copyright and license notices are preserved. + +## Citing PyMC examples + +To cite this notebook, use the DOI provided by Zenodo for the pymc-examples repository. +Here is an citation template in bibtex: + +```bibtex +@incollection{citekey, + author = "" + title = "", + booktitle = "PyMC examples", + doi = "" +} +``` + +which once rendered could look like: + + + diff --git a/examples/splines/spline.ipynb b/examples/splines/spline.ipynb index 09eec3be7..f9dae2254 100644 --- a/examples/splines/spline.ipynb +++ b/examples/splines/spline.ipynb @@ -1531,6 +1531,21 @@ "%load_ext watermark\n", "%watermark -n -u -v -iv -w -p theano,xarray,patsy" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ":::{include} ../page_footer.md\n", + ":::" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1549,7 +1564,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.9.7" } }, "nbformat": 4, From 74d86a59dacb9e4fd9c6b32a067177f7e9009edd Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Fri, 5 Nov 2021 07:18:51 +0200 Subject: [PATCH 06/12] fix template --- _templates/page.html | 1 + 1 file changed, 1 insertion(+) diff --git a/_templates/page.html b/_templates/page.html index 0d778d335..7b8282db6 100644 --- a/_templates/page.html +++ b/_templates/page.html @@ -9,6 +9,7 @@ {% if pagename in ablog %} + {% set post = ablog[pagename] %}
    • {% for coll in post.author %} From db5f665e28f1b2a9de681897a8a54a380c017ea5 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Mon, 8 Nov 2021 18:33:31 +0200 Subject: [PATCH 07/12] some updates to readme --- README.rst | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.rst b/README.rst index 94a8326f6..d842f1ecc 100644 --- a/README.rst +++ b/README.rst @@ -1,17 +1,17 @@ -.. image:: https://cdn.rawgit.com/pymc-devs/pymc3/master/docs/logos/svg/PyMC3_banner.svg +.. image:: https://cdn.rawgit.com/pymc-devs/pymc/main/docs/logos/svg/PyMC_banner.svg :height: 100px - :alt: PyMC3 logo + :alt: PyMC logo :align: center -PyMC3 Examples +PyMC Examples ============== -Supporting examples and tutorials for PyMC3, the Python package for Bayesian statistical modeling and Probabilistic Machine Learning! +Supporting examples and tutorials for PyMC, the Python package for Bayesian statistical modeling and Probabilistic Machine Learning! Check out the `getting started guide `__, or -`interact with live examples `__ -using Binder! -For questions on PyMC3, head on over to our `PyMC Discourse `__ forum. +interact with live examples using Binder! Each notebook in `PyMC examples gallery +`__ has a binder badge. +For questions on PyMC, head on over to our `PyMC Discourse `__ forum. Contributing ============ @@ -26,15 +26,15 @@ Contact We are using `discourse.pymc.io `__ as our main communication channel. You can also follow us on `Twitter @pymc_devs `__ for updates and other announcements. -To ask a question regarding modeling or usage of PyMC3 we encourage posting to our Discourse forum under the `“Questions” Category `__. You can also suggest feature in the `“Development” Category `__. +To ask a question regarding modeling or usage of PyMC we encourage posting to our Discourse forum under the `“Questions” Category `__. You can also suggest feature in the `“Development” Category `__. To report an issue, please use the following: -- `PyMC3 Examples - Issue Tracker `__. For +- `PyMC Examples - Issue Tracker `__. For issues about the example notebooks, errors in the example codes, outdated information, improvement suggestions... -- `PyMC3 - Issue Tracker `__. For issues, bugs or - feature requests related to the PyMC3 library itself. +- `PyMC - Issue Tracker `__. For issues, bugs or + feature requests related to the PyMC library itself. Finally, if you need to get in touch for non-technical information about the project, `send us an e-mail `__. @@ -46,39 +46,39 @@ If you already know about Bayesian statistics: - `API quickstart guide `__ -- The `PyMC3 tutorial `__ -- `PyMC3 examples `__ and the `API reference `__ +- The `PyMC tutorial `__ +- `PyMC examples `__ and the `API reference `__ -Learn Bayesian statistics with a book together with PyMC3: +Learn Bayesian statistics with a book together with PyMC: ---------------------------------------------------------- - `Probabilistic Programming and Bayesian Methods for Hackers `__ by Cameron Davidson-Pilon: Fantastic book with many applied code examples. - `Doing Bayesian Data Analysis `__ by John Kruschke, as well as the `second edition `__: Principled introduction to Bayesian data analysis. -- `Statistical Rethinking: A Bayesian Course with Examples in R and Stan `__ by Richard McElreath: Comprehensive text on modeling choices and interpretations. +- `Statistical Rethinking: A Bayesian Course with Examples in R and Stan `__ by Richard McElreath: Comprehensive text on modeling choices and interpretations. - `Bayesian Cognitive Modeling `__ by Michael Lee and EJ Wagenmakers: Focused on using Bayesian statistics in cognitive modeling. - `Bayesian Analysis with Python `__ (second edition) by Osvaldo Martin: Great introductory book. (`code `__ and errata). -PyMC3 talks +PyMC talks ----------- -There are also several talks on PyMC3 which are gathered in this `YouTube playlist `__ +There are also several talks on PyMC which are gathered in this `YouTube playlist `__ and as part of `PyMCon 2020 `__ Installation ------------ -To install PyMC3 on your system, see its `installation section here `__ +To install PyMC on your system, see its `installation section here `__ -Citing PyMC3 +Citing PyMC ============ Salvatier J., Wiecki T.V., Fonnesbeck C. (2016) Probabilistic programming in Python using PyMC3. PeerJ Computer Science 2:e55 `DOI: 10.7717/peerj-cs.55 `__. -Papers citing PyMC3 +Papers citing PyMC ------------------- See `Google Scholar `__ for a continuously updated list. @@ -86,7 +86,7 @@ See `Google Scholar `__. +PyMC is a non-profit project under NumFOCUS umbrella. If you want to support PyMC financially, you can donate `here `__. PyMC for enterprise =================== From 2356136159c9dddb7d0f37d992daca56e85a1ee1 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Mon, 8 Nov 2021 18:45:23 +0200 Subject: [PATCH 08/12] update citations with DOI --- README.rst | 25 ++++++++++--------------- _templates/page.html | 2 +- examples/conf.py | 7 +++---- examples/page_footer.md | 3 ++- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/README.rst b/README.rst index d842f1ecc..130f84708 100644 --- a/README.rst +++ b/README.rst @@ -74,9 +74,14 @@ To install PyMC on your system, see its `installation section here `__. +* To cite the PyMC software, use: + + Salvatier J., Wiecki T.V., Fonnesbeck C. (2016) Probabilistic programming + in Python using PyMC3. PeerJ Computer Science 2:e55 + `DOI: 10.7717/peerj-cs.55 `__. + +* To cite specific guides from this collection, use |zenodo|. You'll find page specific + citation instructions at the bottom of each page. Papers citing PyMC ------------------- @@ -107,22 +112,12 @@ Sponsors |PyMCLabs| -.. |Binder| image:: https://mybinder.org/badge_logo.svg - :target: https://mybinder.org/v2/gh/pymc-devs/pymc3/master?filepath=%2Fdocs%2Fsource%2Fnotebooks -.. |Build Status| image:: https://github.com/pymc-devs/pymc3/workflows/pytest/badge.svg - :target: https://github.com/pymc-devs/pymc3/actions -.. |Coverage| image:: https://codecov.io/gh/pymc-devs/pymc3/branch/master/graph/badge.svg - :target: https://codecov.io/gh/pymc-devs/pymc3 -.. |Dockerhub| image:: https://img.shields.io/docker/automated/pymc/pymc3.svg - :target: https://hub.docker.com/r/pymc/pymc3 +.. |zenodo| image:: https://zenodo.org/badge/321449673.svg + :target: https://zenodo.org/badge/latestdoi/321449673 .. |NumFOCUS| image:: https://www.numfocus.org/wp-content/uploads/2017/03/1457562110.png :target: http://www.numfocus.org/ -.. |NumFOCUS_badge| image:: https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A - :target: http://www.numfocus.org/ .. |PyMCLabs| image:: https://github.com/pymc-devs/pymc/blob/main/docs/pymc-labs-logo.png :target: https://pymc-labs.io -.. |tidelift| image:: https://img.shields.io/badge/-lifted!-2dd160.svg?colorA=58595b&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAOCAYAAADJ7fe0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAVhJREFUKBV1kj0vBFEUhmd2sdZHh2IlGhKFQuOviEYiNlFodCqtUqPxA%2FwCjUTnDygkGoVERFQaZFlE9nreO%2BdM5u5wkifvuee892Pu3CyEcA0DeIc%2B9IwftJsR6Cko3uCjguZdjuBZhhwmYDjGrOC96WED41UtsgEdGEAPlmAfpuAbFF%2BFZLfoMfRBGzThDtLgePPwBIpdddGzOArhPHUXowbNptE2www6a%2Fm96Y3pHN7oQ1s%2B13pxt1ENaKzBFWyWzaJ%2BRO0C9Jny6VPSoKjLVbMDC5bn5OPuJF%2BBSe95PVEMuugY5AegS9fCh7BedP45hRnj8TC34QQUe9bTZyh2KgvFk2vc8GIlXyTfsvqr6bPpNgv52ynnlomZJNpB70Xhl%2Bf6Sa02p1bApEfnETwxVa%2Faj%2BW%2FFtHltmxS%2FO3krvpTtTnVgu%2F6gvHRFvG78Ef3kOe5PimJXycY74blT5R%2BAAAAAElFTkSuQmCC - :target: https://tidelift.com/subscription/pkg/pypi-pymc3?utm_source=pypi-pymc3&utm_medium=referral&utm_campaign=enterprise .. |tidelift_learn| image:: https://img.shields.io/badge/-learn%20more-2dd160.svg?color=orange&labelColor=58595b&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAOCAYAAADJ7fe0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAVhJREFUKBV1kj0vBFEUhmd2sdZHh2IlGhKFQuOviEYiNlFodCqtUqPxA%2FwCjUTnDygkGoVERFQaZFlE9nreO%2BdM5u5wkifvuee892Pu3CyEcA0DeIc%2B9IwftJsR6Cko3uCjguZdjuBZhhwmYDjGrOC96WED41UtsgEdGEAPlmAfpuAbFF%2BFZLfoMfRBGzThDtLgePPwBIpdddGzOArhPHUXowbNptE2www6a%2Fm96Y3pHN7oQ1s%2B13pxt1ENaKzBFWyWzaJ%2BRO0C9Jny6VPSoKjLVbMDC5bn5OPuJF%2BBSe95PVEMuugY5AegS9fCh7BedP45hRnj8TC34QQUe9bTZyh2KgvFk2vc8GIlXyTfsvqr6bPpNgv52ynnlomZJNpB70Xhl%2Bf6Sa02p1bApEfnETwxVa%2Faj%2BW%2FFtHltmxS%2FO3krvpTtTnVgu%2F6gvHRFvG78Ef3kOe5PimJXycY74blT5R%2BAAAAAElFTkSuQmCC :target: https://tidelift.com/subscription/pkg/pypi-pymc3?utm_source=pypi-pymc3&utm_medium=referral&utm_campaign=enterprise .. |tidelift_demo| image:: https://img.shields.io/badge/-request%20a%20demo-2dd160.svg?color=orange&labelColor=58595b&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAOCAYAAADJ7fe0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAVhJREFUKBV1kj0vBFEUhmd2sdZHh2IlGhKFQuOviEYiNlFodCqtUqPxA%2FwCjUTnDygkGoVERFQaZFlE9nreO%2BdM5u5wkifvuee892Pu3CyEcA0DeIc%2B9IwftJsR6Cko3uCjguZdjuBZhhwmYDjGrOC96WED41UtsgEdGEAPlmAfpuAbFF%2BFZLfoMfRBGzThDtLgePPwBIpdddGzOArhPHUXowbNptE2www6a%2Fm96Y3pHN7oQ1s%2B13pxt1ENaKzBFWyWzaJ%2BRO0C9Jny6VPSoKjLVbMDC5bn5OPuJF%2BBSe95PVEMuugY5AegS9fCh7BedP45hRnj8TC34QQUe9bTZyh2KgvFk2vc8GIlXyTfsvqr6bPpNgv52ynnlomZJNpB70Xhl%2Bf6Sa02p1bApEfnETwxVa%2Faj%2BW%2FFtHltmxS%2FO3krvpTtTnVgu%2F6gvHRFvG78Ef3kOe5PimJXycY74blT5R%2BAAAAAElFTkSuQmCC diff --git a/_templates/page.html b/_templates/page.html index 7b8282db6..e3378a723 100644 --- a/_templates/page.html +++ b/_templates/page.html @@ -20,7 +20,7 @@ {{ coll }} {% if loop.index < post.author|length %},{% endif %} {% endif %} - {% endfor %}. "{{ title.split(' — ')[0] }}". In: PyMC Examples. DOI: {{ doi_code }}
    • + {% endfor %}. "{{ title.split(' — ')[0] }}". In: PyMC Examples. Ed. by PyMC Team. DOI: {{ doi_code }}
    {% endif %} {% endblock %} diff --git a/examples/conf.py b/examples/conf.py index 6185bc75b..8f21fedcd 100644 --- a/examples/conf.py +++ b/examples/conf.py @@ -75,6 +75,8 @@ "github_version": version, "doc_path": "examples/", "sandbox_repo": f"pymc-devs/pymc-sandbox/{version}", + "doi_url": "https://doi.org/10.5281/zenodo.5654871", + "doi_code": "10.5281/zenodo.5654871", } @@ -134,10 +136,7 @@ def ipython_cell_transform(source): "ipython3": ipython_cell_transform, } codeautolink_autodoc_inject = False -# codeautolink_global_preface = """ -# import arviz as az -# import pymc3 as pm -# """ +codeautolink_concat_default = True # intersphinx mappings intersphinx_mapping = { diff --git a/examples/page_footer.md b/examples/page_footer.md index 2a37b2169..0460ef93c 100644 --- a/examples/page_footer.md +++ b/examples/page_footer.md @@ -13,8 +13,9 @@ Here is an citation template in bibtex: @incollection{citekey, author = "" title = "", + editor = "PyMC Team",j booktitle = "PyMC examples", - doi = "" + doi = "10.5281/zenodo.5654871" } ``` From 2bf9de51ce77d0467389a25c8366cd0080b3a125 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Tue, 9 Nov 2021 01:28:38 +0200 Subject: [PATCH 09/12] update templates --- .github/ISSUE_TEMPLATE/bug-report.md | 4 ++-- .github/ISSUE_TEMPLATE/config.yml | 8 ++++---- .github/ISSUE_TEMPLATE/notebook-proposal.md | 2 +- examples/page_footer.md | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 5b3965823..19c40beee 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -12,8 +12,8 @@ Explain the bug, error or mistake, where it is in the notebook, if it happens only once or multiple times... *Note that this issue tracker is about the contents in the notebooks, if -the notebook is instead triggering a bug or error in pymc3, please -report to https://github.com/pymc-devs/pymc3/issues instead* +the notebook is instead triggering a bug or error in pymc, please +report to https://github.com/pymc-devs/pymc/issues instead* ## Expected output If applicable, describe what should happen instead. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 911f97c15..90ec7040d 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,7 +2,7 @@ blank_issues_enabled: false contact_links: - name: PyMC Discourse url: https://discourse.pymc.io/ - about: Ask usage questions about PyMC3 or doubts about the examples here - - name: PyMC3 bug report - url: https://github.com/pymc-devs/pymc3/issues - about: Please report bugs or propose enhancements of the PyMC3 library here. + about: Ask usage questions about PyMC or doubts about the examples. If not sure where to ask, ask on Discourse. + - name: PyMC bug report + url: https://github.com/pymc-devs/pymc/issues + about: Please report bugs or propose enhancements of the PyMC library here. diff --git a/.github/ISSUE_TEMPLATE/notebook-proposal.md b/.github/ISSUE_TEMPLATE/notebook-proposal.md index ef71d4f80..76ac56f55 100644 --- a/.github/ISSUE_TEMPLATE/notebook-proposal.md +++ b/.github/ISSUE_TEMPLATE/notebook-proposal.md @@ -9,7 +9,7 @@ labels: proposal **Title**: Use this also as issue title ## Why should this notebook be added to pymc-examples? -Explain why this topic is interesting and useful to PyMC3 users. +Explain why this topic is interesting and useful to PyMC users. ## Related notebooks Cover related notebooks on which this notebook will build, diff --git a/examples/page_footer.md b/examples/page_footer.md index 0460ef93c..851c38a2f 100644 --- a/examples/page_footer.md +++ b/examples/page_footer.md @@ -13,7 +13,7 @@ Here is an citation template in bibtex: @incollection{citekey, author = "" title = "", - editor = "PyMC Team",j + editor = "PyMC Team", booktitle = "PyMC examples", doi = "10.5281/zenodo.5654871" } From cdb9b220f4f7be2ac56efc96eb9231fd5374708a Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Tue, 9 Nov 2021 01:29:44 +0200 Subject: [PATCH 10/12] update requirements --- requirements-docs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-docs.txt b/requirements-docs.txt index c6ee71b7f..73a72ccd8 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -6,4 +6,4 @@ sphinx-copybutton sphinxcontrib-bibtex ablog sphinxext-opengraph -git+https://github.com/felix-hilden/sphinx-codeautolink +sphinx-codeautolink From 55faf22efa675571faa92e93e31a8530fb73a432 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Fri, 12 Nov 2021 17:10:20 +0200 Subject: [PATCH 11/12] fix citations and hide authors from exerpts --- _templates/postcard2.html | 83 +++++++++++++++++++++++++++++++++++++++ examples/page_footer.md | 8 ++++ 2 files changed, 91 insertions(+) create mode 100644 _templates/postcard2.html diff --git a/_templates/postcard2.html b/_templates/postcard2.html new file mode 100644 index 000000000..523d69d18 --- /dev/null +++ b/_templates/postcard2.html @@ -0,0 +1,83 @@ +{% if post.published and post.date != post.update %} +
  • + {% if fa %}{% else %}{{ + gettext('Update') }}:{% endif %} + {{ post.update.strftime(ablog.post_date_format) }} +
  • +{% endif %} {% if post.location %} +
  • + {% if fa %}{% else %}{{ + gettext('Location') }}:{% endif %} + {% for coll in post.location %} {% if coll|length %} + {{ coll }}{% if loop.index < + post.location|length %},{% endif %} {% else %}{{ coll }}{% if loop.index < + post.location|length %},{% endif %}{% endif %} {% endfor %} +
  • +{% endif %} {% if post.language %} +
  • + {% if fa %}{% else %}{{ + gettext('Language') }}:{% endif %} + {% for coll in post.language %} {% if coll|length %} + {{ coll }}{% if loop.index < + post.language|length %},{% endif %} {% else %}{{ coll }}{% if loop.index < + post.language|length %},{% endif %}{% endif %} {% endfor %} +
  • +{% endif %} {% if post.category %} +
  • + {% if fa %}{% else %}{{ + gettext('Category') }}:{% endif %} + {% for coll in post.category %} {% if coll|length %} + {{ coll }}{% if loop.index < + post.category|length %},{% endif %} {% else %}{{ coll }}{% if loop.index < + post.category|length %},{% endif %}{% endif %} {% endfor %} +
  • +{% endif %} {% if post.tags %} +
  • + {% if post.tags|length > 1 %}{% if fa %}{% + else %}{{ gettext('Tags') }}:{% endif %} {% else %}{% if fa %}{% else %}{{ gettext('Tag') }}:{% endif %}{% endif %} + {% for coll in post.tags %} {% if coll|length %} + {{ coll }}{% if loop.index < + post.tags|length %}{% endif %} {% else %}{{ coll }}{% if loop.index < + post.tags|length %}{% endif %}{% endif %} {% endfor %} +
  • +{% endif %} {% if ablog.disqus_shortname and (ablog[pagename].published or +ablog.disqus_drafts) %} +
  • + + {% if fa %}{% endif %} + + {% if not fa %}Comments{% endif %} +
  • +{% endif %} diff --git a/examples/page_footer.md b/examples/page_footer.md index 851c38a2f..8cfa05b89 100644 --- a/examples/page_footer.md +++ b/examples/page_footer.md @@ -7,6 +7,14 @@ use provided the copyright and license notices are preserved. ## Citing PyMC examples To cite this notebook, use the DOI provided by Zenodo for the pymc-examples repository. + +:::{important} +Many notebooks are adapted from other sources: blogs, books... In such cases you should +cite the original source as well. + +Also remember to cite the relevant libraries used by your code. +::: + Here is an citation template in bibtex: ```bibtex From 959c7c65ea09198b1f94dc175b0e6c6ebf5e33f6 Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Sat, 13 Nov 2021 18:50:27 +0200 Subject: [PATCH 12/12] fix typo --- examples/splines/spline.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/splines/spline.ipynb b/examples/splines/spline.ipynb index f9dae2254..906948870 100644 --- a/examples/splines/spline.ipynb +++ b/examples/splines/spline.ipynb @@ -24,7 +24,7 @@ "Often, the model we want to fit is not a perfect line between some $x$ and $y$.\n", "Instead, the parameters of the model are expected to vary over $x$.\n", "There are multiple ways to handle this situation, one of which is to fit a *spline*.\n", - "The spline is effectively multiple individual lines, each fit to a different section of $x$, that are tied togehter at their boundaries, often called *knots*.\n", + "The spline is effectively multiple individual lines, each fit to a different section of $x$, that are tied together at their boundaries, often called *knots*.\n", "Below is an exmaple of how to fit a spline using the Bayesian framework [PyMC3](https://docs.pymc.io).\n", "\n", "Below is a full working example of how to fit a spline using the probabilitic programming language PyMC3.\n",