From 04f2612f99b346013f051f1bf76c8f6f7dbd109c Mon Sep 17 00:00:00 2001 From: Michael Osthege Date: Sat, 13 Mar 2021 22:21:34 +0100 Subject: [PATCH 1/5] Restore plots and stats wrappers See #4528 --- docs/source/api/plots.rst | 15 ++++-- docs/source/api/stats.rst | 19 ++++++- pymc3/__init__.py | 1 + pymc3/plots/__init__.py | 101 ++++++++++++++++++++++++++++++++++++-- pymc3/stats/__init__.py | 69 ++++++++++++++++++++++++++ 5 files changed, 196 insertions(+), 9 deletions(-) create mode 100644 pymc3/stats/__init__.py diff --git a/docs/source/api/plots.rst b/docs/source/api/plots.rst index 0dec109b7f..70cf8719d2 100644 --- a/docs/source/api/plots.rst +++ b/docs/source/api/plots.rst @@ -8,7 +8,16 @@ Plots are delegated to the `ArviZ `_. library, a general purpose library for "exploratory analysis of Bayesian models." -Refer to its documentation to use the plotting functions directly. +For plots, ``pymc3.`` are now aliases +for ArviZ functions. Thus, the links below will redirect you to +ArviZ docs: -.. automodule:: pymc3.plots.posteriorplot - :members: +- :func:`pymc3.traceplot ` +- :func:`pymc3.plot_posterior ` +- :func:`pymc3.forestplot ` +- :func:`pymc3.compareplot ` +- :func:`pymc3.autocorrplot ` +- :func:`pymc3.energyplot ` +- :func:`pymc3.kdeplot ` +- :func:`pymc3.densityplot ` +- :func:`pymc3.pairplot ` diff --git a/docs/source/api/stats.rst b/docs/source/api/stats.rst index bf85bb596d..8d47e1adac 100644 --- a/docs/source/api/stats.rst +++ b/docs/source/api/stats.rst @@ -5,4 +5,21 @@ Statistics and diagnostics are delegated to the `ArviZ `_. library, a general purpose library for "exploratory analysis of Bayesian models." -Refer to its documentation to use the diagnostics functions directly. +For statistics and diagnostics, ``pymc3.`` are now aliases +for ArviZ functions. Thus, the links below will redirect you to +ArviZ docs: + +.. currentmodule:: pymc3.stats + + +- :func:`pymc3.bfmi ` +- :func:`pymc3.compare ` +- :func:`pymc3.ess ` +- :data:`pymc3.geweke ` +- :func:`pymc3.hpd ` +- :func:`pymc3.loo ` +- :func:`pymc3.mcse ` +- :func:`pymc3.r2_score ` +- :func:`pymc3.rhat ` +- :func:`pymc3.summary ` +- :func:`pymc3.waic ` diff --git a/pymc3/__init__.py b/pymc3/__init__.py index 1e51deeb64..1378d0d993 100644 --- a/pymc3/__init__.py +++ b/pymc3/__init__.py @@ -61,6 +61,7 @@ def __set_compiler_flags(): from pymc3.plots import * from pymc3.sampling import * from pymc3.smc import * +from pymc3.stats import * from pymc3.step_methods import * from pymc3.tests import test from pymc3.theanof import * diff --git a/pymc3/plots/__init__.py b/pymc3/plots/__init__.py index 5923114cee..15553e4570 100644 --- a/pymc3/plots/__init__.py +++ b/pymc3/plots/__init__.py @@ -14,10 +14,9 @@ """PyMC3 Plotting. -Plots are delegated to the `ArviZ `_ library, a general purpose library for -exploratory analysis of Bayesian models. For more details, see https://arviz-devs.github.io/arviz/. - -Only `plot_posterior_predictive_glm` is kept in the PyMC code base for now, but it will move to ArviZ once the latter adds features for regression plots. +Plots are delegated to the ArviZ library, a general purpose library for +"exploratory analysis of Bayesian models." See https://arviz-devs.github.io/arviz/ +for details on plots. """ import functools import sys @@ -25,6 +24,98 @@ import arviz as az + +def map_args(func): + swaps = [("varnames", "var_names")] + + @functools.wraps(func) + def wrapped(*args, **kwargs): + for (old, new) in swaps: + if old in kwargs and new not in kwargs: + warnings.warn( + f"Keyword argument `{old}` renamed to `{new}`, and will be removed in pymc3 3.8" + ) + kwargs[new] = kwargs.pop(old) + return func(*args, **kwargs) + + return wrapped + + +# pymc3 custom plots: override these names for custom behavior +autocorrplot = map_args(az.plot_autocorr) +forestplot = map_args(az.plot_forest) +kdeplot = map_args(az.plot_kde) +plot_posterior = map_args(az.plot_posterior) +energyplot = map_args(az.plot_energy) +densityplot = map_args(az.plot_density) +pairplot = map_args(az.plot_pair) + +# Use compact traceplot by default +@map_args +@functools.wraps(az.plot_trace) +def traceplot(*args, **kwargs): + try: + kwargs.setdefault("compact", True) + return az.plot_trace(*args, **kwargs) + except TypeError: + kwargs.pop("compact") + return az.plot_trace(*args, **kwargs) + + +# addition arg mapping for compare plot +@functools.wraps(az.plot_compare) +def compareplot(*args, **kwargs): + if "comp_df" in kwargs: + comp_df = kwargs["comp_df"].copy() + else: + args = list(args) + comp_df = args[0].copy() + if "WAIC" in comp_df.columns: + comp_df = comp_df.rename( + index=str, + columns={ + "WAIC": "waic", + "pWAIC": "p_waic", + "dWAIC": "d_waic", + "SE": "se", + "dSE": "dse", + "var_warn": "warning", + }, + ) + elif "LOO" in comp_df.columns: + comp_df = comp_df.rename( + index=str, + columns={ + "LOO": "loo", + "pLOO": "p_loo", + "dLOO": "d_loo", + "SE": "se", + "dSE": "dse", + "shape_warn": "warning", + }, + ) + if "comp_df" in kwargs: + kwargs["comp_df"] = comp_df + else: + args[0] = comp_df + return az.plot_compare(*args, **kwargs) + + from pymc3.plots.posteriorplot import plot_posterior_predictive_glm -__all__ = ["plot_posterior_predictive_glm"] +# Access to arviz plots: base plots provided by arviz +for plot in az.plots.__all__: + setattr(sys.modules[__name__], plot, map_args(getattr(az.plots, plot))) + +__all__ = tuple(az.plots.__all__) + ( + "autocorrplot", + "compareplot", + "forestplot", + "kdeplot", + "plot_posterior", + "traceplot", + "energyplot", + "densityplot", + "pairplot", + "plot_posterior_predictive_glm", +) diff --git a/pymc3/stats/__init__.py b/pymc3/stats/__init__.py new file mode 100644 index 0000000000..d4670d67ce --- /dev/null +++ b/pymc3/stats/__init__.py @@ -0,0 +1,69 @@ +# Copyright 2020 The PyMC Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Statistical utility functions for PyMC3 + +Diagnostics and auxiliary statistical functions are delegated to the ArviZ library, a general +purpose library for "exploratory analysis of Bayesian models." See +https://arviz-devs.github.io/arviz/ for details. +""" +import functools +import warnings + +import arviz as az + + +def map_args(func): + swaps = [("varnames", "var_names")] + + @functools.wraps(func) + def wrapped(*args, **kwargs): + for (old, new) in swaps: + if old in kwargs and new not in kwargs: + warnings.warn( + "Keyword argument `{old}` renamed to `{new}`, and will be removed in " + "pymc3 3.9".format(old=old, new=new) + ) + kwargs[new] = kwargs.pop(old) + return func(*args, **kwargs) + + return wrapped + + +bfmi = map_args(az.bfmi) +compare = map_args(az.compare) +ess = map_args(az.ess) +geweke = map_args(az.geweke) +hpd = map_args(az.hpd) +loo = map_args(az.loo) +mcse = map_args(az.mcse) +r2_score = map_args(az.r2_score) +rhat = map_args(az.rhat) +summary = map_args(az.summary) +waic = map_args(az.waic) + + +__all__ = [ + "bfmi", + "compare", + "ess", + "geweke", + "hpd", + "loo", + "mcse", + "r2_score", + "rhat", + "summary", + "waic", +] From b98a895c67e161bed85a0240abecbe0438820ed7 Mon Sep 17 00:00:00 2001 From: Michael Osthege Date: Sat, 13 Mar 2021 23:14:54 +0100 Subject: [PATCH 2/5] Alias stats/plots from ArviZ and add deprecation warnings in old wrappers --- RELEASE-NOTES.md | 4 +-- pymc3/plots/__init__.py | 70 ++++++++++++++++++++--------------------- pymc3/stats/__init__.py | 56 ++++++--------------------------- 3 files changed, 45 insertions(+), 85 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 388ca345e4..9274b26f32 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,12 +1,12 @@ # Release Notes -## PyMC3 vNext (TBD) +## PyMC3 3.11.2 (TBD) ### Breaking Changes + ... ### New Features + `pm.math.cartesian` can now handle inputs that are themselves >1D (see [#4482](https://github.com/pymc-devs/pymc3/pull/4482)). -+ ... ++ Statistics and plotting functions that were removed in `3.11.0` were brought back, albeit with deprecation warnings (see [#4536](https://github.com/pymc-devs/pymc3/pull/4536)). ### Maintenance - ⚠ Our memoization mechanism wasn't robust against hash collisions (#4506), sometimes resulting in incorrect values in, for example, posterior predictives. The `pymc3.memoize` module was removed and replaced with `cachetools`. The `hashable` function and `WithMemoization` class were moved to `pymc3.util` (see #4525). diff --git a/pymc3/plots/__init__.py b/pymc3/plots/__init__.py index 15553e4570..4cb76a22f2 100644 --- a/pymc3/plots/__init__.py +++ b/pymc3/plots/__init__.py @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""PyMC3 Plotting. +"""Alias for the `plots` submodule from ArviZ. Plots are delegated to the ArviZ library, a general purpose library for -"exploratory analysis of Bayesian models." See https://arviz-devs.github.io/arviz/ -for details on plots. +"exploratory analysis of Bayesian models." +See https://arviz-devs.github.io/arviz/ for details on plots. """ import functools import sys @@ -24,47 +24,49 @@ import arviz as az +# Makes this module as identical to arviz.plots as possible +for attr in dir(az.plots): + obj = getattr(az.plots, attr) + if not attr.startswith("__"): + setattr(sys.modules[__name__], attr, obj) -def map_args(func): - swaps = [("varnames", "var_names")] +def map_args(func, alias: str): @functools.wraps(func) def wrapped(*args, **kwargs): - for (old, new) in swaps: - if old in kwargs and new not in kwargs: - warnings.warn( - f"Keyword argument `{old}` renamed to `{new}`, and will be removed in pymc3 3.8" - ) - kwargs[new] = kwargs.pop(old) - return func(*args, **kwargs) + if "varnames" in kwargs: + raise DeprecationWarning(f"The `varnames` kwarg was renamed to `var_names`.") + original = func.__name__ + warnings.warn( + f"The function `{alias}` from PyMC3 is just an alias for `{original}` from ArviZ. " + f"Please switch to `pymc3.{original}` or `arviz.{original}`.", + DeprecationWarning, + ) + return func(*args, **kwargs) return wrapped -# pymc3 custom plots: override these names for custom behavior -autocorrplot = map_args(az.plot_autocorr) -forestplot = map_args(az.plot_forest) -kdeplot = map_args(az.plot_kde) -plot_posterior = map_args(az.plot_posterior) -energyplot = map_args(az.plot_energy) -densityplot = map_args(az.plot_density) -pairplot = map_args(az.plot_pair) - -# Use compact traceplot by default -@map_args -@functools.wraps(az.plot_trace) -def traceplot(*args, **kwargs): - try: - kwargs.setdefault("compact", True) - return az.plot_trace(*args, **kwargs) - except TypeError: - kwargs.pop("compact") - return az.plot_trace(*args, **kwargs) +# Aliases of ArviZ functions +autocorrplot = map_args(az.plot_autocorr, alias="autocorrplot") +forestplot = map_args(az.plot_forest, alias="forestplot") +kdeplot = map_args(az.plot_kde, alias="kdeplot") +plot_posterior = map_args(az.plot_posterior, alias="plot_posterior") +energyplot = map_args(az.plot_energy, alias="energyplot") +densityplot = map_args(az.plot_density, alias="densityplot") +pairplot = map_args(az.plot_pair, alias="pairplot") +traceplot = map_args(az.plot_trace, alias="traceplot") -# addition arg mapping for compare plot +# Customized with kwarg reformatting @functools.wraps(az.plot_compare) def compareplot(*args, **kwargs): + warnings.warn( + f"The function `compareplot` from PyMC3 is an alias for `plot_compare` from ArviZ. " + "It also applies some kwarg replacements. Nevertheless, please switch " + f"to `pymc3.plot_compare` or `arviz.plot_compare`.", + DeprecationWarning, + ) if "comp_df" in kwargs: comp_df = kwargs["comp_df"].copy() else: @@ -103,10 +105,6 @@ def compareplot(*args, **kwargs): from pymc3.plots.posteriorplot import plot_posterior_predictive_glm -# Access to arviz plots: base plots provided by arviz -for plot in az.plots.__all__: - setattr(sys.modules[__name__], plot, map_args(getattr(az.plots, plot))) - __all__ = tuple(az.plots.__all__) + ( "autocorrplot", "compareplot", diff --git a/pymc3/stats/__init__.py b/pymc3/stats/__init__.py index d4670d67ce..fc897c99fa 100644 --- a/pymc3/stats/__init__.py +++ b/pymc3/stats/__init__.py @@ -12,58 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Statistical utility functions for PyMC3 +"""Alias for the `stats` submodule from ArviZ. Diagnostics and auxiliary statistical functions are delegated to the ArviZ library, a general -purpose library for "exploratory analysis of Bayesian models." See -https://arviz-devs.github.io/arviz/ for details. +purpose library for "exploratory analysis of Bayesian models." +See https://arviz-devs.github.io/arviz/ for details. """ -import functools -import warnings +import sys import arviz as az +for attr in dir(az.stats): + obj = getattr(az.stats, attr) + if not attr.startswith("__"): + setattr(sys.modules[__name__], attr, obj) -def map_args(func): - swaps = [("varnames", "var_names")] - @functools.wraps(func) - def wrapped(*args, **kwargs): - for (old, new) in swaps: - if old in kwargs and new not in kwargs: - warnings.warn( - "Keyword argument `{old}` renamed to `{new}`, and will be removed in " - "pymc3 3.9".format(old=old, new=new) - ) - kwargs[new] = kwargs.pop(old) - return func(*args, **kwargs) - - return wrapped - - -bfmi = map_args(az.bfmi) -compare = map_args(az.compare) -ess = map_args(az.ess) -geweke = map_args(az.geweke) -hpd = map_args(az.hpd) -loo = map_args(az.loo) -mcse = map_args(az.mcse) -r2_score = map_args(az.r2_score) -rhat = map_args(az.rhat) -summary = map_args(az.summary) -waic = map_args(az.waic) - - -__all__ = [ - "bfmi", - "compare", - "ess", - "geweke", - "hpd", - "loo", - "mcse", - "r2_score", - "rhat", - "summary", - "waic", -] +__all__ = tuple(az.stats.__all__) From 19821709a57e7330156e4f83e900d46a08d9d696 Mon Sep 17 00:00:00 2001 From: Michael Osthege Date: Sun, 14 Mar 2021 14:06:34 +0100 Subject: [PATCH 3/5] Link to ArviZ docs, improve warnings UX --- RELEASE-NOTES.md | 10 +++++++++- docs/source/api/plots.rst | 16 +++------------- docs/source/api/stats.rst | 24 ++++++------------------ pymc3/plots/__init__.py | 15 +++++++++++---- pymc3/stats/__init__.py | 4 ++-- 5 files changed, 31 insertions(+), 38 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 9274b26f32..fbb68dada1 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -6,7 +6,15 @@ ### New Features + `pm.math.cartesian` can now handle inputs that are themselves >1D (see [#4482](https://github.com/pymc-devs/pymc3/pull/4482)). -+ Statistics and plotting functions that were removed in `3.11.0` were brought back, albeit with deprecation warnings (see [#4536](https://github.com/pymc-devs/pymc3/pull/4536)). ++ Statistics and plotting functions that were removed in `3.11.0` were brought back, albeit with deprecation warnings if an old naming scheme is used (see [#4536](https://github.com/pymc-devs/pymc3/pull/4536)). In order to future proof your code, rename these function calls: + + `pm.traceplot` → `pm.plot_trace` + + `pm.compareplot` → `pm.plot_compare` (here you might need to rename some columns in the input according to the [`arviz.plot_compare` documentation](https://arviz-devs.github.io/arviz/api/generated/arviz.plot_compare.html)) + + `pm.autocorrplot` → `pm.plot_autocorr` + + `pm.forestplot` → `pm.plot_forest` + + `pm.kdeplot` → `pm.plot_kde` + + `pm.energyplot` → `pm.plot_energy` + + `pm.densityplot` → `pm.plot_density` + + `pm.pairplot` → `pm.plot_pair` ### Maintenance - ⚠ Our memoization mechanism wasn't robust against hash collisions (#4506), sometimes resulting in incorrect values in, for example, posterior predictives. The `pymc3.memoize` module was removed and replaced with `cachetools`. The `hashable` function and `WithMemoization` class were moved to `pymc3.util` (see #4525). diff --git a/docs/source/api/plots.rst b/docs/source/api/plots.rst index 70cf8719d2..9bf5bce0a9 100644 --- a/docs/source/api/plots.rst +++ b/docs/source/api/plots.rst @@ -7,17 +7,7 @@ Plots Plots are delegated to the `ArviZ `_. library, a general purpose library for -"exploratory analysis of Bayesian models." -For plots, ``pymc3.`` are now aliases -for ArviZ functions. Thus, the links below will redirect you to -ArviZ docs: +"exploratory analysis of Bayesian models". -- :func:`pymc3.traceplot ` -- :func:`pymc3.plot_posterior ` -- :func:`pymc3.forestplot ` -- :func:`pymc3.compareplot ` -- :func:`pymc3.autocorrplot ` -- :func:`pymc3.energyplot ` -- :func:`pymc3.kdeplot ` -- :func:`pymc3.densityplot ` -- :func:`pymc3.pairplot ` +Functions from the `arviz.plots` module are available through ``pymc3.`` or ``pymc3.plots.``, +but for their API documentation please refer to the `ArviZ documentation `_. diff --git a/docs/source/api/stats.rst b/docs/source/api/stats.rst index 8d47e1adac..205d13f3e5 100644 --- a/docs/source/api/stats.rst +++ b/docs/source/api/stats.rst @@ -1,25 +1,13 @@ ***** Stats ***** -Statistics and diagnostics are delegated to the -`ArviZ `_. -library, a general purpose library for -"exploratory analysis of Bayesian models." -For statistics and diagnostics, ``pymc3.`` are now aliases -for ArviZ functions. Thus, the links below will redirect you to -ArviZ docs: .. currentmodule:: pymc3.stats +Statistics and diagnostics are delegated to the +`ArviZ `_. +library, a general purpose library for +"exploratory analysis of Bayesian models". -- :func:`pymc3.bfmi ` -- :func:`pymc3.compare ` -- :func:`pymc3.ess ` -- :data:`pymc3.geweke ` -- :func:`pymc3.hpd ` -- :func:`pymc3.loo ` -- :func:`pymc3.mcse ` -- :func:`pymc3.r2_score ` -- :func:`pymc3.rhat ` -- :func:`pymc3.summary ` -- :func:`pymc3.waic ` +Functions from the `arviz.stats` module are available through ``pymc3.`` or ``pymc3.stats.``, +but for their API documentation please refer to the `ArviZ documentation `_. diff --git a/pymc3/plots/__init__.py b/pymc3/plots/__init__.py index 4cb76a22f2..03c7715c24 100644 --- a/pymc3/plots/__init__.py +++ b/pymc3/plots/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2020 The PyMC Developers +# Copyright 2021 The PyMC Developers # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import arviz as az # Makes this module as identical to arviz.plots as possible -for attr in dir(az.plots): +for attr in az.plots.__all__: obj = getattr(az.plots, attr) if not attr.startswith("__"): setattr(sys.modules[__name__], attr, obj) @@ -35,23 +35,29 @@ def map_args(func, alias: str): @functools.wraps(func) def wrapped(*args, **kwargs): if "varnames" in kwargs: - raise DeprecationWarning(f"The `varnames` kwarg was renamed to `var_names`.") + raise DeprecationWarning( + f"The `varnames` kwarg was renamed to `var_names`.", stacklevel=2 + ) original = func.__name__ warnings.warn( f"The function `{alias}` from PyMC3 is just an alias for `{original}` from ArviZ. " f"Please switch to `pymc3.{original}` or `arviz.{original}`.", DeprecationWarning, + stacklevel=2, ) return func(*args, **kwargs) return wrapped +# Always show the DeprecationWarnings +warnings.filterwarnings("once", category=DeprecationWarning, module="pymc3.plots") + + # Aliases of ArviZ functions autocorrplot = map_args(az.plot_autocorr, alias="autocorrplot") forestplot = map_args(az.plot_forest, alias="forestplot") kdeplot = map_args(az.plot_kde, alias="kdeplot") -plot_posterior = map_args(az.plot_posterior, alias="plot_posterior") energyplot = map_args(az.plot_energy, alias="energyplot") densityplot = map_args(az.plot_density, alias="densityplot") pairplot = map_args(az.plot_pair, alias="pairplot") @@ -66,6 +72,7 @@ def compareplot(*args, **kwargs): "It also applies some kwarg replacements. Nevertheless, please switch " f"to `pymc3.plot_compare` or `arviz.plot_compare`.", DeprecationWarning, + stacklevel=2, ) if "comp_df" in kwargs: comp_df = kwargs["comp_df"].copy() diff --git a/pymc3/stats/__init__.py b/pymc3/stats/__init__.py index fc897c99fa..0880ca8b52 100644 --- a/pymc3/stats/__init__.py +++ b/pymc3/stats/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2020 The PyMC Developers +# Copyright 2021 The PyMC Developers # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,7 +22,7 @@ import arviz as az -for attr in dir(az.stats): +for attr in az.stats.__all__: obj = getattr(az.stats, attr) if not attr.startswith("__"): setattr(sys.modules[__name__], attr, obj) From 2abb02954b72d8c37e2188b1a525e80320759389 Mon Sep 17 00:00:00 2001 From: Michael Osthege Date: Sun, 14 Mar 2021 15:53:35 +0100 Subject: [PATCH 4/5] Use intersphinx for docs linking Co-authored-by: Oriol Abril-Pla --- docs/source/api/stats.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api/stats.rst b/docs/source/api/stats.rst index 205d13f3e5..4cd23c3446 100644 --- a/docs/source/api/stats.rst +++ b/docs/source/api/stats.rst @@ -10,4 +10,4 @@ library, a general purpose library for "exploratory analysis of Bayesian models". Functions from the `arviz.stats` module are available through ``pymc3.`` or ``pymc3.stats.``, -but for their API documentation please refer to the `ArviZ documentation `_. +but for their API documentation please refer to the :ref:`ArviZ documentation `. From 83e4a2c69c8863977061973e332d64d117ae2332 Mon Sep 17 00:00:00 2001 From: Michael Osthege Date: Sun, 14 Mar 2021 15:53:49 +0100 Subject: [PATCH 5/5] Use intersphinx for docs linking Co-authored-by: Oriol Abril-Pla --- docs/source/api/plots.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api/plots.rst b/docs/source/api/plots.rst index 9bf5bce0a9..1e2b2e0139 100644 --- a/docs/source/api/plots.rst +++ b/docs/source/api/plots.rst @@ -10,4 +10,4 @@ library, a general purpose library for "exploratory analysis of Bayesian models". Functions from the `arviz.plots` module are available through ``pymc3.`` or ``pymc3.plots.``, -but for their API documentation please refer to the `ArviZ documentation `_. +but for their API documentation please refer to the :ref:`ArviZ documentation `.