From e83182c3aa4c3641ac712001e52169ff8016d4d6 Mon Sep 17 00:00:00 2001 From: horizon-blue Date: Wed, 18 Oct 2023 16:41:46 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=205c1da?= =?UTF-8?q?0a7fd4eb019c8c1702273b279b88f0ce2ab=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 ++-- ...ticDifferentiationVariationalInference.mdx | 9 ++++--- .../BayesianLogisticRegression.mdx | 6 +++-- .../BayesianNnsWithAdvi.mdx | 6 +++-- .../BayesianStructuralTimeSeries.mdx | 6 +++-- .../tutorials/Coin_flipping/CoinFlipping.mdx | 6 +++-- .../GmmWith2DimensionsAnd4Components.mdx | 15 +++++++----- ...099b0943-3337-4c28-b038-92a6c8c3bbaf.json} | 0 ...20daa748-3996-48d1-8519-a4767e24b053.json} | 0 ...668a0359-ab11-4225-a7c1-87a7d9e14d7d.json} | 0 .../GaussianProcessGpytorch.mdx | 6 +++-- .../Hidden_Markov_model/HiddenMarkovModel.mdx | 6 +++-- .../HierarchicalModeling.mdx | 6 +++-- .../HierarchicalRegression.mdx | 6 +++-- .../ItemResponseTheory.mdx | 6 +++-- .../MleAndMapPointEstimation.mdx | 6 +++-- .../tutorials/Neals_funnel/NealsFunnel.mdx | 22 ++++++++++-------- ...0913be93-a0f4-487a-bd63-ef09dee280d7.json} | 0 ...0c35d279-b397-4465-9ce1-bb2f0a3b1625.json} | 0 ...475cbb1a-f90b-4824-a50c-b43318e0754b.json} | 0 ...78ef9fa7-475b-4f5f-b19c-882be05b3c23.json} | 0 ...b33b0a5c-a8dc-4c94-bea4-3f111f7b0c7a.json} | 0 ...b9549d03-35cf-43e7-ac7e-e350de587676.json} | 0 ...de3efd26-bee9-4a3f-b348-87cdacebc2f7.json} | 0 ...e1ec607b-dd82-4252-9679-2e353b7ed4d1.json} | 0 .../Probabilistic_PCA/ProbabilisticPca.mdx | 6 +++-- .../RobustLinearRegression.mdx | 6 +++-- .../SparseLogisticRegression.mdx | 6 +++-- .../ViGeneralizedLinearMixedModel.mdx | 9 ++++--- .../ZeroInflatedCountData.mdx | 6 +++-- api/_static/css/theme.css | 2 +- api/_static/pygments.css | 1 + ...nmachine.ppl.inference.base_inference.html | 2 +- api/searchindex.js | 2 +- ...1134d.92de9c6d.js => 24d1134d.5a5502f2.js} | 2 +- assets/js/2b917cd1.1d9969c5.js | 1 + assets/js/2b917cd1.cf50796a.js | 1 - ...n.1baa955e.js => runtime~main.966a342d.js} | 2 +- blog/archive/index.html | 4 ++-- blog/index.html | 4 ++-- blog/tags/beanmachine/index.html | 4 ++-- blog/tags/hello/index.html | 4 ++-- blog/tags/index.html | 4 ++-- blog/welcome/index.html | 4 ++-- docs/ancestral_metropolis_hastings/index.html | 4 ++-- docs/beanstalk/index.html | 4 ++-- docs/block_inference/index.html | 4 ++-- docs/compositional_inference/index.html | 4 ++-- docs/contributing/index.html | 4 ++-- docs/custom_proposers/index.html | 4 ++-- docs/diagnostics/index.html | 4 ++-- docs/hamiltonian_monte_carlo/index.html | 4 ++-- docs/logging/index.html | 4 ++-- docs/mcmc_inference/index.html | 4 ++-- docs/mdx/index.html | 4 ++-- docs/model_comparison/index.html | 4 ++-- docs/newtonian_monte_carlo/index.html | 4 ++-- docs/no_u_turn_sampler/index.html | 4 ++-- docs/overview/analysis/index.html | 4 ++-- docs/overview/api/index.html | 4 ++-- docs/overview/inference/index.html | 4 ++-- docs/overview/installation/index.html | 4 ++-- docs/overview/modeling/index.html | 4 ++-- docs/overview/packages/packages/index.html | 4 ++-- docs/overview/quick_start/index.html | 4 ++-- .../index.html | 4 ++-- .../BayesianLogisticRegression/index.html | 4 ++-- .../BayesianNnsWithAdvi/index.html | 4 ++-- .../BayesianStructuralTimeSeries/index.html | 4 ++-- .../Coin_flipping/CoinFlipping/index.html | 4 ++-- .../index.html | 4 ++-- .../GaussianProcessGpytorch/index.html | 4 ++-- .../HiddenMarkovModel/index.html | 4 ++-- .../HierarchicalModeling/index.html | 4 ++-- .../HierarchicalRegression/index.html | 4 ++-- .../ItemResponseTheory/index.html | 4 ++-- .../MleAndMapPointEstimation/index.html | 4 ++-- .../Neals_funnel/NealsFunnel/index.html | 4 ++-- .../ProbabilisticPca/index.html | 4 ++-- .../RobustLinearRegression/index.html | 4 ++-- .../SparseLogisticRegression/index.html | 4 ++-- .../ViGeneralizedLinearMixedModel/index.html | 4 ++-- .../ZeroInflatedCountData/index.html | 4 ++-- docs/overview/why_bean_machine/index.html | 4 ++-- docs/posterior_predictive_checks/index.html | 4 ++-- docs/programmable_inference/index.html | 4 ++-- docs/random_walk/index.html | 4 ++-- docs/transforms/index.html | 4 ++-- docs/tutorials/listing/index.html | 4 ++-- docs/uniform_metropolis_hastings/index.html | 4 ++-- docs/variational_inference/index.html | 4 ++-- docs/world/index.html | 4 ++-- ...chine.ppl.inference.base_inference.doctree | Bin 31208 -> 31256 bytes doctrees/environment.pickle | Bin 536108 -> 536108 bytes index.html | 4 ++-- 95 files changed, 208 insertions(+), 168 deletions(-) rename _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/{7905578b-b3ce-4a11-b6c4-adf91cbdbeae.json => 099b0943-3337-4c28-b038-92a6c8c3bbaf.json} (100%) rename _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/{5569cf5d-1e3d-448b-a54c-b797704773f5.json => 20daa748-3996-48d1-8519-a4767e24b053.json} (100%) rename _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/{39c9d9ff-1835-4713-a7d2-f29df3b2c9aa.json => 668a0359-ab11-4225-a7c1-87a7d9e14d7d.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{6f778d0a-2e95-46a5-a15c-f675285bd7c5.json => 0913be93-a0f4-487a-bd63-ef09dee280d7.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{0ac8f10b-3a28-4782-8225-310691a194b0.json => 0c35d279-b397-4465-9ce1-bb2f0a3b1625.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{b6dd745b-613d-47ea-9b28-d07355e66bc5.json => 475cbb1a-f90b-4824-a50c-b43318e0754b.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{dcd4d5c6-2eb0-45ed-9b87-c3ff8ccb29f6.json => 78ef9fa7-475b-4f5f-b19c-882be05b3c23.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{00d44702-36e0-45a0-a82c-01bf80b5ef02.json => b33b0a5c-a8dc-4c94-bea4-3f111f7b0c7a.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{09377f38-3ae1-440b-8ece-d2ff39c850b1.json => b9549d03-35cf-43e7-ac7e-e350de587676.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{d6465ca5-de87-4125-bd31-35038ecc77d9.json => de3efd26-bee9-4a3f-b348-87cdacebc2f7.json} (100%) rename _src/overview/tutorials/Neals_funnel/assets/plot_data/{bbd0dc87-8a1b-44e3-8b3f-4e8424ec3413.json => e1ec607b-dd82-4252-9679-2e353b7ed4d1.json} (100%) rename assets/js/{24d1134d.92de9c6d.js => 24d1134d.5a5502f2.js} (75%) create mode 100644 assets/js/2b917cd1.1d9969c5.js delete mode 100644 assets/js/2b917cd1.cf50796a.js rename assets/js/{runtime~main.1baa955e.js => runtime~main.966a342d.js} (98%) diff --git a/404.html b/404.html index bf90fa86df..b04e057be5 100644 --- a/404.html +++ b/404.html @@ -15,14 +15,14 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/_src/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference.mdx b/_src/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference.mdx index 3dcb3b806c..d8e644549c 100644 --- a/_src/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference.mdx +++ b/_src/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference.mdx @@ -1,10 +1,13 @@ --- title: Automatic differentiation variational inference sidebar_label: ADVI -path: overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference +path: + overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference nb_path: tutorials/Automatic_differentiation_variational_inference.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Automatic_differentiation_variational_inference.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Automatic_differentiation_variational_inference.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Automatic_differentiation_variational_inference.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Automatic_differentiation_variational_inference.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression.mdx b/_src/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression.mdx index 0711dc3214..55a26faaef 100644 --- a/_src/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression.mdx +++ b/_src/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression.mdx @@ -3,8 +3,10 @@ title: Logistic regression sidebar_label: Logistic regression path: overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression nb_path: tutorials/Bayesian_Logistic_Regression.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Logistic_Regression.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Logistic_Regression.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Logistic_Regression.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Logistic_Regression.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi.mdx b/_src/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi.mdx index 9ea03645df..a83728486f 100644 --- a/_src/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi.mdx +++ b/_src/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi.mdx @@ -3,8 +3,10 @@ title: Bayesian Neural Networks with ADVI sidebar_label: BNNs with ADVI path: overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi nb_path: tutorials/Bayesian_NNs_with_ADVI.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_NNs_with_ADVI.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_NNs_with_ADVI.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_NNs_with_ADVI.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_NNs_with_ADVI.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries.mdx b/_src/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries.mdx index 175ae97bfc..c983e9a847 100644 --- a/_src/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries.mdx +++ b/_src/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries.mdx @@ -3,8 +3,10 @@ title: Bayesian Structural Time Series sidebar_label: Bayesian Structural Time Series path: overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries nb_path: tutorials/Bayesian_Structural_Time_Series.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Structural_Time_Series.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Structural_Time_Series.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Structural_Time_Series.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Bayesian_Structural_Time_Series.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Coin_flipping/CoinFlipping.mdx b/_src/overview/tutorials/Coin_flipping/CoinFlipping.mdx index dabf74979f..b570e534d2 100644 --- a/_src/overview/tutorials/Coin_flipping/CoinFlipping.mdx +++ b/_src/overview/tutorials/Coin_flipping/CoinFlipping.mdx @@ -3,8 +3,10 @@ title: Coin flipping sidebar_label: Coin flipping path: overview/tutorials/Coin_flipping/CoinFlipping nb_path: tutorials/Coin_flipping.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Coin_flipping.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Coin_flipping.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Coin_flipping.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Coin_flipping.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components.mdx b/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components.mdx index c79dfc8fb8..5aaf6e719b 100644 --- a/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components.mdx +++ b/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components.mdx @@ -1,10 +1,13 @@ --- title: Gaussian mixture model sidebar_label: Gaussian mixture model -path: overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components +path: + overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components nb_path: tutorials/GMM_with_2_dimensions_and_4_components.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; @@ -295,7 +298,7 @@ fig = draw_points_and_components( fig.show() ``` - + ## Inference @@ -369,7 +372,7 @@ fig = draw_points_and_components( fig.show() ``` - + After running `n_samples` MCMC steps, the effects of initialization should be diminished. @@ -409,5 +412,5 @@ fig = draw_points_and_components( fig.show() ``` - + diff --git a/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/7905578b-b3ce-4a11-b6c4-adf91cbdbeae.json b/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/099b0943-3337-4c28-b038-92a6c8c3bbaf.json similarity index 100% rename from _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/7905578b-b3ce-4a11-b6c4-adf91cbdbeae.json rename to _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/099b0943-3337-4c28-b038-92a6c8c3bbaf.json diff --git a/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/5569cf5d-1e3d-448b-a54c-b797704773f5.json b/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/20daa748-3996-48d1-8519-a4767e24b053.json similarity index 100% rename from _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/5569cf5d-1e3d-448b-a54c-b797704773f5.json rename to _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/20daa748-3996-48d1-8519-a4767e24b053.json diff --git a/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/39c9d9ff-1835-4713-a7d2-f29df3b2c9aa.json b/_src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/668a0359-ab11-4225-a7c1-87a7d9e14d7d.json similarity index 100% rename from _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/39c9d9ff-1835-4713-a7d2-f29df3b2c9aa.json rename to _src/overview/tutorials/GMM_with_2_dimensions_and_4_components/assets/plot_data/668a0359-ab11-4225-a7c1-87a7d9e14d7d.json diff --git a/_src/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch.mdx b/_src/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch.mdx index a31dd29e10..aa90c66362 100644 --- a/_src/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch.mdx +++ b/_src/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch.mdx @@ -3,8 +3,10 @@ title: Gaussian process sidebar_label: Gaussian process path: overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch nb_path: tutorials/Gaussian_Process_Gpytorch.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Gaussian_Process_Gpytorch.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Gaussian_Process_Gpytorch.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Gaussian_Process_Gpytorch.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Gaussian_Process_Gpytorch.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel.mdx b/_src/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel.mdx index d63b6afeb7..ddcec2050a 100644 --- a/_src/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel.mdx +++ b/_src/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel.mdx @@ -3,8 +3,10 @@ title: Hidden Markov Model sidebar_label: Hidden Markov Model path: overview/tutorials/Hidden_Markov_model/HiddenMarkovModel nb_path: tutorials/Hidden_Markov_model.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hidden_Markov_model.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hidden_Markov_model.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hidden_Markov_model.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hidden_Markov_model.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Hierarchical_modeling/HierarchicalModeling.mdx b/_src/overview/tutorials/Hierarchical_modeling/HierarchicalModeling.mdx index 968109b989..807e3b3634 100644 --- a/_src/overview/tutorials/Hierarchical_modeling/HierarchicalModeling.mdx +++ b/_src/overview/tutorials/Hierarchical_modeling/HierarchicalModeling.mdx @@ -3,8 +3,10 @@ title: Hierarchical modeling sidebar_label: Hierarchical modeling path: overview/tutorials/Hierarchical_modeling/HierarchicalModeling nb_path: tutorials/Hierarchical_modeling.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_modeling.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_modeling.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_modeling.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_modeling.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Hierarchical_regression/HierarchicalRegression.mdx b/_src/overview/tutorials/Hierarchical_regression/HierarchicalRegression.mdx index 0cefa52c70..6d44f51f65 100644 --- a/_src/overview/tutorials/Hierarchical_regression/HierarchicalRegression.mdx +++ b/_src/overview/tutorials/Hierarchical_regression/HierarchicalRegression.mdx @@ -3,8 +3,10 @@ title: Hierarchical regression sidebar_label: Hierarchical regression path: overview/tutorials/Hierarchical_regression/HierarchicalRegression nb_path: tutorials/Hierarchical_regression.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_regression.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_regression.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_regression.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Hierarchical_regression.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Item_Response_Theory/ItemResponseTheory.mdx b/_src/overview/tutorials/Item_Response_Theory/ItemResponseTheory.mdx index ccdc6853fa..8a044b31cd 100644 --- a/_src/overview/tutorials/Item_Response_Theory/ItemResponseTheory.mdx +++ b/_src/overview/tutorials/Item_Response_Theory/ItemResponseTheory.mdx @@ -3,8 +3,10 @@ title: Item Response Theory sidebar_label: Item Response Theory path: overview/tutorials/Item_Response_Theory/ItemResponseTheory nb_path: tutorials/Item_Response_Theory.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Item_Response_Theory.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Item_Response_Theory.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Item_Response_Theory.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Item_Response_Theory.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation.mdx b/_src/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation.mdx index 7f65c2a8a0..324d7498d6 100644 --- a/_src/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation.mdx +++ b/_src/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation.mdx @@ -3,8 +3,10 @@ title: Maximum likelihood estimation and maximum a priori inference sidebar_label: MLE and MAP path: overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation nb_path: tutorials/MLE_and_MAP_point_estimation.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/MLE_and_MAP_point_estimation.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/MLE_and_MAP_point_estimation.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/MLE_and_MAP_point_estimation.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/MLE_and_MAP_point_estimation.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Neals_funnel/NealsFunnel.mdx b/_src/overview/tutorials/Neals_funnel/NealsFunnel.mdx index 997f756537..1b125f31ba 100644 --- a/_src/overview/tutorials/Neals_funnel/NealsFunnel.mdx +++ b/_src/overview/tutorials/Neals_funnel/NealsFunnel.mdx @@ -3,8 +3,10 @@ title: Neal's funnel sidebar_label: Neal's funnel path: overview/tutorials/Neals_funnel/NealsFunnel nb_path: tutorials/Neals_funnel.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; @@ -412,16 +414,16 @@ look: bm.Diagnostics(single_site_nmc_samples).plot(display=True); ``` - + - + - + - + The diagnostics output shows two diagnostic plots for individual random variables: trace plots and autocorrelation plots. @@ -565,16 +567,16 @@ And the unhealthy trace and autocorrelation plots: bm.Diagnostics(hmc_samples).plot(display=True); ``` - + - + - + - + ## Appendix: Metropolis-Adjusted Langevin Algorithm diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/6f778d0a-2e95-46a5-a15c-f675285bd7c5.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/0913be93-a0f4-487a-bd63-ef09dee280d7.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/6f778d0a-2e95-46a5-a15c-f675285bd7c5.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/0913be93-a0f4-487a-bd63-ef09dee280d7.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/0ac8f10b-3a28-4782-8225-310691a194b0.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/0c35d279-b397-4465-9ce1-bb2f0a3b1625.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/0ac8f10b-3a28-4782-8225-310691a194b0.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/0c35d279-b397-4465-9ce1-bb2f0a3b1625.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/b6dd745b-613d-47ea-9b28-d07355e66bc5.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/475cbb1a-f90b-4824-a50c-b43318e0754b.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/b6dd745b-613d-47ea-9b28-d07355e66bc5.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/475cbb1a-f90b-4824-a50c-b43318e0754b.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/dcd4d5c6-2eb0-45ed-9b87-c3ff8ccb29f6.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/78ef9fa7-475b-4f5f-b19c-882be05b3c23.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/dcd4d5c6-2eb0-45ed-9b87-c3ff8ccb29f6.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/78ef9fa7-475b-4f5f-b19c-882be05b3c23.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/00d44702-36e0-45a0-a82c-01bf80b5ef02.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/b33b0a5c-a8dc-4c94-bea4-3f111f7b0c7a.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/00d44702-36e0-45a0-a82c-01bf80b5ef02.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/b33b0a5c-a8dc-4c94-bea4-3f111f7b0c7a.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/09377f38-3ae1-440b-8ece-d2ff39c850b1.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/b9549d03-35cf-43e7-ac7e-e350de587676.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/09377f38-3ae1-440b-8ece-d2ff39c850b1.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/b9549d03-35cf-43e7-ac7e-e350de587676.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/d6465ca5-de87-4125-bd31-35038ecc77d9.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/de3efd26-bee9-4a3f-b348-87cdacebc2f7.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/d6465ca5-de87-4125-bd31-35038ecc77d9.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/de3efd26-bee9-4a3f-b348-87cdacebc2f7.json diff --git a/_src/overview/tutorials/Neals_funnel/assets/plot_data/bbd0dc87-8a1b-44e3-8b3f-4e8424ec3413.json b/_src/overview/tutorials/Neals_funnel/assets/plot_data/e1ec607b-dd82-4252-9679-2e353b7ed4d1.json similarity index 100% rename from _src/overview/tutorials/Neals_funnel/assets/plot_data/bbd0dc87-8a1b-44e3-8b3f-4e8424ec3413.json rename to _src/overview/tutorials/Neals_funnel/assets/plot_data/e1ec607b-dd82-4252-9679-2e353b7ed4d1.json diff --git a/_src/overview/tutorials/Probabilistic_PCA/ProbabilisticPca.mdx b/_src/overview/tutorials/Probabilistic_PCA/ProbabilisticPca.mdx index 1ff06da86d..20e1d7e413 100644 --- a/_src/overview/tutorials/Probabilistic_PCA/ProbabilisticPca.mdx +++ b/_src/overview/tutorials/Probabilistic_PCA/ProbabilisticPca.mdx @@ -3,8 +3,10 @@ title: Probabilistic principal components analysis sidebar_label: Probabilistic PCA path: overview/tutorials/Probabilistic_PCA/ProbabilisticPca nb_path: tutorials/Probabilistic_PCA.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Probabilistic_PCA.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Probabilistic_PCA.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Probabilistic_PCA.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Probabilistic_PCA.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression.mdx b/_src/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression.mdx index efa316514d..26ae5c5465 100644 --- a/_src/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression.mdx +++ b/_src/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression.mdx @@ -3,8 +3,10 @@ title: Robust linear regression sidebar_label: Robust linear regression path: overview/tutorials/Robust_Linear_Regression/RobustLinearRegression nb_path: tutorials/Robust_Linear_Regression.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Robust_Linear_Regression.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Robust_Linear_Regression.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Robust_Linear_Regression.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Robust_Linear_Regression.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression.mdx b/_src/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression.mdx index 5338d79847..f438ad9004 100644 --- a/_src/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression.mdx +++ b/_src/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression.mdx @@ -3,8 +3,10 @@ title: Sparse logistic regression sidebar_label: Sparse logistic regression path: overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression nb_path: tutorials/Sparse_Logistic_Regression.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Sparse_Logistic_Regression.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Sparse_Logistic_Regression.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Sparse_Logistic_Regression.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Sparse_Logistic_Regression.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel.mdx b/_src/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel.mdx index fde0ad27a9..abdf0a0a5a 100644 --- a/_src/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel.mdx +++ b/_src/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel.mdx @@ -1,10 +1,13 @@ --- title: Variational inference in a generalized linear mixed model sidebar_label: VI in GLMM -path: overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel +path: + overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel nb_path: tutorials/VI_generalized_linear_mixed_model.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/VI_generalized_linear_mixed_model.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/VI_generalized_linear_mixed_model.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/VI_generalized_linear_mixed_model.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/VI_generalized_linear_mixed_model.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/_src/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData.mdx b/_src/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData.mdx index 0c30d371b6..3dc7e48f2e 100644 --- a/_src/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData.mdx +++ b/_src/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData.mdx @@ -3,8 +3,10 @@ title: Zero inflated count data sidebar_label: Zero inflated count data path: overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData nb_path: tutorials/Zero_inflated_count_data.ipynb -github: https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Zero_inflated_count_data.ipynb -colab: https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Zero_inflated_count_data.ipynb +github: + https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Zero_inflated_count_data.ipynb +colab: + https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Zero_inflated_count_data.ipynb --- import LinkButtons from "../../../../website/src/components/LinkButtons.jsx"; diff --git a/api/_static/css/theme.css b/api/_static/css/theme.css index c03c88f06c..19a446a0e7 100644 --- a/api/_static/css/theme.css +++ b/api/_static/css/theme.css @@ -1,4 +1,4 @@ html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/api/_static/pygments.css b/api/_static/pygments.css index 08bec689d3..84ab3030a9 100644 --- a/api/_static/pygments.css +++ b/api/_static/pygments.css @@ -17,6 +17,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #E40000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #008400 } /* Generic.Inserted */ diff --git a/api/beanmachine.ppl.inference.base_inference.html b/api/beanmachine.ppl.inference.base_inference.html index c00f7c3db7..79ec1952f3 100644 --- a/api/beanmachine.ppl.inference.base_inference.html +++ b/api/beanmachine.ppl.inference.base_inference.html @@ -113,7 +113,7 @@
-infer(queries: List[beanmachine.ppl.model.rv_identifier.RVIdentifier], observations: Dict[beanmachine.ppl.model.rv_identifier.RVIdentifier, torch.Tensor], num_samples: int, num_chains: int = 4, num_adaptive_samples: Optional[int] = None, show_progress_bar: bool = True, initialize_fn: Callable[[torch.distributions.distribution.Distribution], torch.Tensor] = <function init_to_uniform>, max_init_retries: int = 100, run_in_parallel: bool = False, mp_context: Optional[Literal['fork', 'spawn', 'forkserver']] = None, verbose: Optional[beanmachine.ppl.inference.utils.VerboseLevel] = None) beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples
+infer(queries: List[beanmachine.ppl.model.rv_identifier.RVIdentifier], observations: Dict[beanmachine.ppl.model.rv_identifier.RVIdentifier, torch.Tensor], num_samples: int, num_chains: int = 4, num_adaptive_samples: Optional[int] = None, show_progress_bar: bool = True, initialize_fn: Callable[[torch.distributions.distribution.Distribution], torch.Tensor] = <function init_to_uniform>, max_init_retries: int = 100, run_in_parallel: bool = False, mp_context: Optional[typing_extensions.Literal[fork, spawn, forkserver]] = None, verbose: Optional[beanmachine.ppl.inference.utils.VerboseLevel] = None) beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples

Performs inference and returns a MonteCarloSamples object with samples from the posterior.

Parameters
diff --git a/api/searchindex.js b/api/searchindex.js index a4742822a8..3af6857004 100644 --- a/api/searchindex.js +++ b/api/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["beanmachine","beanmachine.ppl","beanmachine.ppl.compiler","beanmachine.ppl.compiler.ast_patterns","beanmachine.ppl.compiler.ast_tools","beanmachine.ppl.compiler.beanstalk_common","beanmachine.ppl.compiler.bm_graph_builder","beanmachine.ppl.compiler.bm_to_bmg","beanmachine.ppl.compiler.bmg_node_types","beanmachine.ppl.compiler.bmg_nodes","beanmachine.ppl.compiler.bmg_requirements","beanmachine.ppl.compiler.bmg_types","beanmachine.ppl.compiler.broadcaster","beanmachine.ppl.compiler.copy_and_replace","beanmachine.ppl.compiler.copy_transformer","beanmachine.ppl.compiler.devectorizer_transformer","beanmachine.ppl.compiler.error_report","beanmachine.ppl.compiler.execution_context","beanmachine.ppl.compiler.fix_additions","beanmachine.ppl.compiler.fix_arithmetic","beanmachine.ppl.compiler.fix_beta_conjugate_prior","beanmachine.ppl.compiler.fix_bool_arithmetic","beanmachine.ppl.compiler.fix_bool_comparisons","beanmachine.ppl.compiler.fix_logsumexp","beanmachine.ppl.compiler.fix_matrix_scale","beanmachine.ppl.compiler.fix_multiary_ops","beanmachine.ppl.compiler.fix_normal_conjugate_prior","beanmachine.ppl.compiler.fix_observations","beanmachine.ppl.compiler.fix_observe_true","beanmachine.ppl.compiler.fix_problem","beanmachine.ppl.compiler.fix_problems","beanmachine.ppl.compiler.fix_requirements","beanmachine.ppl.compiler.fix_transpose","beanmachine.ppl.compiler.fix_unsupported","beanmachine.ppl.compiler.gen_bm_python","beanmachine.ppl.compiler.gen_bmg_cpp","beanmachine.ppl.compiler.gen_bmg_graph","beanmachine.ppl.compiler.gen_bmg_python","beanmachine.ppl.compiler.gen_builder","beanmachine.ppl.compiler.gen_dot","beanmachine.ppl.compiler.gen_mini","beanmachine.ppl.compiler.graph_labels","beanmachine.ppl.compiler.internal_error","beanmachine.ppl.compiler.lattice_typer","beanmachine.ppl.compiler.patterns","beanmachine.ppl.compiler.performance_report","beanmachine.ppl.compiler.profiler","beanmachine.ppl.compiler.rules","beanmachine.ppl.compiler.runtime","beanmachine.ppl.compiler.single_assignment","beanmachine.ppl.compiler.size_assessment","beanmachine.ppl.compiler.sizer","beanmachine.ppl.compiler.special_function_caller","beanmachine.ppl.compiler.support","beanmachine.ppl.compiler.tensorizer_transformer","beanmachine.ppl.compiler.typer_base","beanmachine.ppl.distributions","beanmachine.ppl.distributions.delta","beanmachine.ppl.distributions.flat","beanmachine.ppl.distributions.unit","beanmachine.ppl.inference","beanmachine.ppl.inference.base_inference","beanmachine.ppl.inference.bmg_inference","beanmachine.ppl.inference.compositional_infer","beanmachine.ppl.inference.hmc_inference","beanmachine.ppl.inference.monte_carlo_samples","beanmachine.ppl.inference.nuts_inference","beanmachine.ppl.inference.predictive","beanmachine.ppl.inference.proposer","beanmachine.ppl.inference.proposer.base_proposer","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer","beanmachine.ppl.inference.proposer.hmc_proposer","beanmachine.ppl.inference.proposer.hmc_utils","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils","beanmachine.ppl.inference.proposer.nmc","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer","beanmachine.ppl.inference.proposer.nnc","beanmachine.ppl.inference.proposer.nnc.utils","beanmachine.ppl.inference.proposer.normal_eig","beanmachine.ppl.inference.proposer.nuts_proposer","beanmachine.ppl.inference.proposer.sequential_proposer","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer","beanmachine.ppl.inference.proposer.single_site_uniform_proposer","beanmachine.ppl.inference.proposer.utils","beanmachine.ppl.inference.sampler","beanmachine.ppl.inference.single_site_ancestral_mh","beanmachine.ppl.inference.single_site_inference","beanmachine.ppl.inference.single_site_nmc","beanmachine.ppl.inference.single_site_random_walk","beanmachine.ppl.inference.single_site_uniform_mh","beanmachine.ppl.inference.utils","beanmachine.ppl.inference.vi","beanmachine.ppl.inference.vi.autoguide","beanmachine.ppl.inference.vi.discrepancy","beanmachine.ppl.inference.vi.gradient_estimator","beanmachine.ppl.inference.vi.variational_infer","beanmachine.ppl.inference.vi.variational_world","beanmachine.ppl.model","beanmachine.ppl.model.rv_identifier","beanmachine.ppl.model.statistical_model","beanmachine.ppl.model.utils","beanmachine.ppl.world","beanmachine.ppl.world.base_world","beanmachine.ppl.world.initialize_fn","beanmachine.ppl.world.utils","beanmachine.ppl.world.variable","beanmachine.ppl.world.world","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["beanmachine.rst","beanmachine.ppl.rst","beanmachine.ppl.compiler.rst","beanmachine.ppl.compiler.ast_patterns.rst","beanmachine.ppl.compiler.ast_tools.rst","beanmachine.ppl.compiler.beanstalk_common.rst","beanmachine.ppl.compiler.bm_graph_builder.rst","beanmachine.ppl.compiler.bm_to_bmg.rst","beanmachine.ppl.compiler.bmg_node_types.rst","beanmachine.ppl.compiler.bmg_nodes.rst","beanmachine.ppl.compiler.bmg_requirements.rst","beanmachine.ppl.compiler.bmg_types.rst","beanmachine.ppl.compiler.broadcaster.rst","beanmachine.ppl.compiler.copy_and_replace.rst","beanmachine.ppl.compiler.copy_transformer.rst","beanmachine.ppl.compiler.devectorizer_transformer.rst","beanmachine.ppl.compiler.error_report.rst","beanmachine.ppl.compiler.execution_context.rst","beanmachine.ppl.compiler.fix_additions.rst","beanmachine.ppl.compiler.fix_arithmetic.rst","beanmachine.ppl.compiler.fix_beta_conjugate_prior.rst","beanmachine.ppl.compiler.fix_bool_arithmetic.rst","beanmachine.ppl.compiler.fix_bool_comparisons.rst","beanmachine.ppl.compiler.fix_logsumexp.rst","beanmachine.ppl.compiler.fix_matrix_scale.rst","beanmachine.ppl.compiler.fix_multiary_ops.rst","beanmachine.ppl.compiler.fix_normal_conjugate_prior.rst","beanmachine.ppl.compiler.fix_observations.rst","beanmachine.ppl.compiler.fix_observe_true.rst","beanmachine.ppl.compiler.fix_problem.rst","beanmachine.ppl.compiler.fix_problems.rst","beanmachine.ppl.compiler.fix_requirements.rst","beanmachine.ppl.compiler.fix_transpose.rst","beanmachine.ppl.compiler.fix_unsupported.rst","beanmachine.ppl.compiler.gen_bm_python.rst","beanmachine.ppl.compiler.gen_bmg_cpp.rst","beanmachine.ppl.compiler.gen_bmg_graph.rst","beanmachine.ppl.compiler.gen_bmg_python.rst","beanmachine.ppl.compiler.gen_builder.rst","beanmachine.ppl.compiler.gen_dot.rst","beanmachine.ppl.compiler.gen_mini.rst","beanmachine.ppl.compiler.graph_labels.rst","beanmachine.ppl.compiler.internal_error.rst","beanmachine.ppl.compiler.lattice_typer.rst","beanmachine.ppl.compiler.patterns.rst","beanmachine.ppl.compiler.performance_report.rst","beanmachine.ppl.compiler.profiler.rst","beanmachine.ppl.compiler.rules.rst","beanmachine.ppl.compiler.runtime.rst","beanmachine.ppl.compiler.single_assignment.rst","beanmachine.ppl.compiler.size_assessment.rst","beanmachine.ppl.compiler.sizer.rst","beanmachine.ppl.compiler.special_function_caller.rst","beanmachine.ppl.compiler.support.rst","beanmachine.ppl.compiler.tensorizer_transformer.rst","beanmachine.ppl.compiler.typer_base.rst","beanmachine.ppl.distributions.rst","beanmachine.ppl.distributions.delta.rst","beanmachine.ppl.distributions.flat.rst","beanmachine.ppl.distributions.unit.rst","beanmachine.ppl.inference.rst","beanmachine.ppl.inference.base_inference.rst","beanmachine.ppl.inference.bmg_inference.rst","beanmachine.ppl.inference.compositional_infer.rst","beanmachine.ppl.inference.hmc_inference.rst","beanmachine.ppl.inference.monte_carlo_samples.rst","beanmachine.ppl.inference.nuts_inference.rst","beanmachine.ppl.inference.predictive.rst","beanmachine.ppl.inference.proposer.rst","beanmachine.ppl.inference.proposer.base_proposer.rst","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer.rst","beanmachine.ppl.inference.proposer.hmc_proposer.rst","beanmachine.ppl.inference.proposer.hmc_utils.rst","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils.rst","beanmachine.ppl.inference.proposer.nmc.rst","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nnc.rst","beanmachine.ppl.inference.proposer.nnc.utils.rst","beanmachine.ppl.inference.proposer.normal_eig.rst","beanmachine.ppl.inference.proposer.nuts_proposer.rst","beanmachine.ppl.inference.proposer.sequential_proposer.rst","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer.rst","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer.rst","beanmachine.ppl.inference.proposer.single_site_uniform_proposer.rst","beanmachine.ppl.inference.proposer.utils.rst","beanmachine.ppl.inference.sampler.rst","beanmachine.ppl.inference.single_site_ancestral_mh.rst","beanmachine.ppl.inference.single_site_inference.rst","beanmachine.ppl.inference.single_site_nmc.rst","beanmachine.ppl.inference.single_site_random_walk.rst","beanmachine.ppl.inference.single_site_uniform_mh.rst","beanmachine.ppl.inference.utils.rst","beanmachine.ppl.inference.vi.rst","beanmachine.ppl.inference.vi.autoguide.rst","beanmachine.ppl.inference.vi.discrepancy.rst","beanmachine.ppl.inference.vi.gradient_estimator.rst","beanmachine.ppl.inference.vi.variational_infer.rst","beanmachine.ppl.inference.vi.variational_world.rst","beanmachine.ppl.model.rst","beanmachine.ppl.model.rv_identifier.rst","beanmachine.ppl.model.statistical_model.rst","beanmachine.ppl.model.utils.rst","beanmachine.ppl.world.rst","beanmachine.ppl.world.base_world.rst","beanmachine.ppl.world.initialize_fn.rst","beanmachine.ppl.world.utils.rst","beanmachine.ppl.world.variable.rst","beanmachine.ppl.world.world.rst","index.rst","modules.rst"],objects:{"":{beanmachine:[0,0,0,"-"]},"beanmachine.ppl":{CompositionalInference:[1,1,1,""],Diagnostics:[1,1,1,""],GlobalHamiltonianMonteCarlo:[1,1,1,""],GlobalNoUTurnSampler:[1,1,1,""],RVIdentifier:[1,1,1,""],SingleSiteAncestralMetropolisHastings:[1,1,1,""],SingleSiteHamiltonianMonteCarlo:[1,1,1,""],SingleSiteNewtonianMonteCarlo:[1,1,1,""],SingleSiteNoUTurnSampler:[1,1,1,""],SingleSiteRandomWalk:[1,1,1,""],SingleSiteUniformMetropolisHastings:[1,1,1,""],compiler:[2,0,0,"-"],distributions:[56,0,0,"-"],effective_sample_size:[1,5,1,""],empirical:[1,5,1,""],functional:[1,5,1,""],inference:[60,0,0,"-"],model:[100,0,0,"-"],param:[1,5,1,""],r_hat:[1,5,1,""],random_variable:[1,5,1,""],seed:[1,5,1,""],simulate:[1,5,1,""],split_r_hat:[1,5,1,""],world:[104,0,0,"-"]},"beanmachine.ppl.CompositionalInference":{get_proposers:[1,2,1,""]},"beanmachine.ppl.GlobalHamiltonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.GlobalNoUTurnSampler":{get_proposers:[1,2,1,""]},"beanmachine.ppl.RVIdentifier":{"function":[1,4,1,""],arguments:[1,3,1,""],is_functional:[1,4,1,""],is_random_variable:[1,4,1,""],wrapper:[1,3,1,""]},"beanmachine.ppl.SingleSiteHamiltonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteNewtonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteNoUTurnSampler":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteRandomWalk":{get_proposers:[1,2,1,""]},"beanmachine.ppl.compiler":{ast_patterns:[3,0,0,"-"],ast_tools:[4,0,0,"-"],beanstalk_common:[5,0,0,"-"],bm_graph_builder:[6,0,0,"-"],bm_to_bmg:[7,0,0,"-"],bmg_node_types:[8,0,0,"-"],bmg_nodes:[9,0,0,"-"],bmg_requirements:[10,0,0,"-"],bmg_types:[11,0,0,"-"],broadcaster:[12,0,0,"-"],copy_and_replace:[13,0,0,"-"],copy_transformer:[14,0,0,"-"],devectorizer_transformer:[15,0,0,"-"],error_report:[16,0,0,"-"],execution_context:[17,0,0,"-"],fix_additions:[18,0,0,"-"],fix_arithmetic:[19,0,0,"-"],fix_beta_conjugate_prior:[20,0,0,"-"],fix_bool_arithmetic:[21,0,0,"-"],fix_bool_comparisons:[22,0,0,"-"],fix_logsumexp:[23,0,0,"-"],fix_matrix_scale:[24,0,0,"-"],fix_multiary_ops:[25,0,0,"-"],fix_normal_conjugate_prior:[26,0,0,"-"],fix_observations:[27,0,0,"-"],fix_observe_true:[28,0,0,"-"],fix_problem:[29,0,0,"-"],fix_problems:[30,0,0,"-"],fix_requirements:[31,0,0,"-"],fix_transpose:[32,0,0,"-"],fix_unsupported:[33,0,0,"-"],gen_bm_python:[34,0,0,"-"],gen_bmg_cpp:[35,0,0,"-"],gen_bmg_graph:[36,0,0,"-"],gen_bmg_python:[37,0,0,"-"],gen_builder:[38,0,0,"-"],gen_dot:[39,0,0,"-"],gen_mini:[40,0,0,"-"],graph_labels:[41,0,0,"-"],internal_error:[42,0,0,"-"],lattice_typer:[43,0,0,"-"],patterns:[44,0,0,"-"],performance_report:[45,0,0,"-"],profiler:[46,0,0,"-"],rules:[47,0,0,"-"],runtime:[48,0,0,"-"],single_assignment:[49,0,0,"-"],size_assessment:[50,0,0,"-"],sizer:[51,0,0,"-"],special_function_caller:[52,0,0,"-"],support:[53,0,0,"-"],tensorizer_transformer:[54,0,0,"-"],typer_base:[55,0,0,"-"]},"beanmachine.ppl.compiler.ast_patterns":{ann_assign:[3,5,1,""],arguments:[3,5,1,""],assign:[3,5,1,""],ast_assert:[3,5,1,""],ast_boolop:[3,5,1,""],ast_compare:[3,5,1,""],ast_dict:[3,5,1,""],ast_dictComp:[3,5,1,""],ast_for:[3,5,1,""],ast_generator:[3,5,1,""],ast_if:[3,5,1,""],ast_index:[3,5,1,""],ast_list:[3,5,1,""],ast_listComp:[3,5,1,""],ast_luple:[3,5,1,""],ast_return:[3,5,1,""],ast_setComp:[3,5,1,""],ast_str:[3,5,1,""],ast_while:[3,5,1,""],attribute:[3,5,1,""],aug_assign:[3,5,1,""],binary_compare:[3,5,1,""],binop:[3,5,1,""],boolop:[3,5,1,""],call:[3,5,1,""],call_to:[3,5,1,""],compare:[3,5,1,""],equal:[3,5,1,""],expr:[3,5,1,""],function_def:[3,5,1,""],get_value:[3,5,1,""],greater_than:[3,5,1,""],greater_than_equal:[3,5,1,""],id_from_call:[3,5,1,""],if_exp:[3,5,1,""],if_statement:[3,5,1,""],index:[3,5,1,""],keyword:[3,5,1,""],less_than:[3,5,1,""],less_than_equal:[3,5,1,""],module:[3,5,1,""],name:[3,5,1,""],name_constant:[3,5,1,""],not_equal:[3,5,1,""],num:[3,5,1,""],slice_pattern:[3,5,1,""],starred:[3,5,1,""],subscript:[3,5,1,""],unaryop:[3,5,1,""],unarysub:[3,5,1,""]},"beanmachine.ppl.compiler.ast_tools":{print_graph:[4,5,1,""],print_python:[4,5,1,""],print_tree:[4,5,1,""]},"beanmachine.ppl.compiler.bm_graph_builder":{BMGraphBuilder:[6,1,1,""],phi:[6,5,1,""],rv_to_query:[6,5,1,""]},"beanmachine.ppl.compiler.bm_graph_builder.BMGraphBuilder":{add_addition:[6,2,1,""],add_bernoulli:[6,2,1,""],add_bernoulli_logit:[6,2,1,""],add_beta:[6,2,1,""],add_binomial:[6,2,1,""],add_binomial_logit:[6,2,1,""],add_bitand:[6,2,1,""],add_bitor:[6,2,1,""],add_bitxor:[6,2,1,""],add_boolean:[6,2,1,""],add_boolean_matrix:[6,2,1,""],add_broadcast:[6,2,1,""],add_categorical:[6,2,1,""],add_categorical_logit:[6,2,1,""],add_chi2:[6,2,1,""],add_choice:[6,2,1,""],add_cholesky:[6,2,1,""],add_column_index:[6,2,1,""],add_complement:[6,2,1,""],add_constant:[6,2,1,""],add_constant_of_matrix_type:[6,2,1,""],add_constant_of_type:[6,2,1,""],add_constant_tensor:[6,2,1,""],add_dirichlet:[6,2,1,""],add_division:[6,2,1,""],add_elementwise_multiplication:[6,2,1,""],add_equal:[6,2,1,""],add_exp2:[6,2,1,""],add_exp:[6,2,1,""],add_exp_product:[6,2,1,""],add_expm1:[6,2,1,""],add_fill_matrix:[6,2,1,""],add_flat:[6,2,1,""],add_floordiv:[6,2,1,""],add_gamma:[6,2,1,""],add_greater_than:[6,2,1,""],add_greater_than_equal:[6,2,1,""],add_halfcauchy:[6,2,1,""],add_halfnormal:[6,2,1,""],add_if_then_else:[6,2,1,""],add_in:[6,2,1,""],add_index:[6,2,1,""],add_invert:[6,2,1,""],add_is:[6,2,1,""],add_is_not:[6,2,1,""],add_item:[6,2,1,""],add_less_than:[6,2,1,""],add_less_than_equal:[6,2,1,""],add_lkj_cholesky:[6,2,1,""],add_log10:[6,2,1,""],add_log1mexp:[6,2,1,""],add_log1p:[6,2,1,""],add_log2:[6,2,1,""],add_log:[6,2,1,""],add_log_prob:[6,2,1,""],add_logaddexp:[6,2,1,""],add_logistic:[6,2,1,""],add_logsumexp:[6,2,1,""],add_logsumexp_torch:[6,2,1,""],add_logsumexp_vector:[6,2,1,""],add_lshift:[6,2,1,""],add_matrix_addition:[6,2,1,""],add_matrix_complement:[6,2,1,""],add_matrix_exp:[6,2,1,""],add_matrix_log1mexp:[6,2,1,""],add_matrix_log:[6,2,1,""],add_matrix_multiplication:[6,2,1,""],add_matrix_negate:[6,2,1,""],add_matrix_phi:[6,2,1,""],add_matrix_scale:[6,2,1,""],add_matrix_sum:[6,2,1,""],add_mod:[6,2,1,""],add_multi_addition:[6,2,1,""],add_multi_multiplication:[6,2,1,""],add_multiplication:[6,2,1,""],add_natural:[6,2,1,""],add_natural_matrix:[6,2,1,""],add_neg_real:[6,2,1,""],add_neg_real_matrix:[6,2,1,""],add_negate:[6,2,1,""],add_node:[6,2,1,""],add_normal:[6,2,1,""],add_not:[6,2,1,""],add_not_equal:[6,2,1,""],add_not_in:[6,2,1,""],add_observation:[6,2,1,""],add_phi:[6,2,1,""],add_poisson:[6,2,1,""],add_pos_real:[6,2,1,""],add_pos_real_matrix:[6,2,1,""],add_power:[6,2,1,""],add_probability:[6,2,1,""],add_probability_matrix:[6,2,1,""],add_query:[6,2,1,""],add_real:[6,2,1,""],add_real_matrix:[6,2,1,""],add_rshift:[6,2,1,""],add_sample:[6,2,1,""],add_simplex:[6,2,1,""],add_squareroot:[6,2,1,""],add_studentt:[6,2,1,""],add_subtraction:[6,2,1,""],add_sum:[6,2,1,""],add_switch:[6,2,1,""],add_tensor:[6,2,1,""],add_to_int:[6,2,1,""],add_to_matrix:[6,2,1,""],add_to_negative_real:[6,2,1,""],add_to_negative_real_matrix:[6,2,1,""],add_to_positive_real:[6,2,1,""],add_to_positive_real_matrix:[6,2,1,""],add_to_probability:[6,2,1,""],add_to_real:[6,2,1,""],add_to_real_matrix:[6,2,1,""],add_transpose:[6,2,1,""],add_uniform:[6,2,1,""],add_vector_index:[6,2,1,""],all_ancestor_nodes:[6,2,1,""],all_nodes:[6,2,1,""],all_observations:[6,2,1,""],execution_context:[6,3,1,""],remove_leaf:[6,2,1,""],remove_node:[6,2,1,""]},"beanmachine.ppl.compiler.bmg_node_types":{dist_type:[8,5,1,""],factor_type:[8,5,1,""],is_supported_by_bmg:[8,5,1,""],operator_type:[8,5,1,""]},"beanmachine.ppl.compiler.bmg_nodes":{AdditionNode:[9,1,1,""],BMGNode:[9,1,1,""],BernoulliBase:[9,1,1,""],BernoulliLogitNode:[9,1,1,""],BernoulliNode:[9,1,1,""],BetaNode:[9,1,1,""],BinaryOperatorNode:[9,1,1,""],BinomialLogitNode:[9,1,1,""],BinomialNode:[9,1,1,""],BinomialNodeBase:[9,1,1,""],BitAndNode:[9,1,1,""],BitOrNode:[9,1,1,""],BitXorNode:[9,1,1,""],BooleanNode:[9,1,1,""],BroadcastNode:[9,1,1,""],CategoricalLogitNode:[9,1,1,""],CategoricalNode:[9,1,1,""],CategoricalNodeBase:[9,1,1,""],Chi2Node:[9,1,1,""],ChoiceNode:[9,1,1,""],CholeskyNode:[9,1,1,""],ColumnIndexNode:[9,1,1,""],ComparisonNode:[9,1,1,""],ComplementNode:[9,1,1,""],ConstantBooleanMatrixNode:[9,1,1,""],ConstantNaturalMatrixNode:[9,1,1,""],ConstantNegativeRealMatrixNode:[9,1,1,""],ConstantNode:[9,1,1,""],ConstantPositiveRealMatrixNode:[9,1,1,""],ConstantProbabilityMatrixNode:[9,1,1,""],ConstantRealMatrixNode:[9,1,1,""],ConstantSimplexMatrixNode:[9,1,1,""],ConstantTensorNode:[9,1,1,""],DirichletNode:[9,1,1,""],DistributionNode:[9,1,1,""],DivisionNode:[9,1,1,""],ElementwiseMultiplyNode:[9,1,1,""],EqualNode:[9,1,1,""],Exp2Node:[9,1,1,""],ExpM1Node:[9,1,1,""],ExpNode:[9,1,1,""],ExpProductFactorNode:[9,1,1,""],FactorNode:[9,1,1,""],FillMatrixNode:[9,1,1,""],FlatNode:[9,1,1,""],FloorDivNode:[9,1,1,""],GammaNode:[9,1,1,""],GreaterThanEqualNode:[9,1,1,""],GreaterThanNode:[9,1,1,""],HalfCauchyNode:[9,1,1,""],HalfNormalNode:[9,1,1,""],IfThenElseNode:[9,1,1,""],InNode:[9,1,1,""],IndexNode:[9,1,1,""],InputList:[9,1,1,""],InvertNode:[9,1,1,""],IsNode:[9,1,1,""],IsNotNode:[9,1,1,""],ItemNode:[9,1,1,""],LKJCholeskyNode:[9,1,1,""],LShiftNode:[9,1,1,""],LessThanEqualNode:[9,1,1,""],LessThanNode:[9,1,1,""],Log10Node:[9,1,1,""],Log1mexpNode:[9,1,1,""],Log1pNode:[9,1,1,""],Log2Node:[9,1,1,""],LogAddExpNode:[9,1,1,""],LogNode:[9,1,1,""],LogProbNode:[9,1,1,""],LogSumExpNode:[9,1,1,""],LogSumExpTorchNode:[9,1,1,""],LogSumExpVectorNode:[9,1,1,""],LogisticNode:[9,1,1,""],MatrixAddNode:[9,1,1,""],MatrixComplementNode:[9,1,1,""],MatrixExpNode:[9,1,1,""],MatrixLog1mexpNode:[9,1,1,""],MatrixLogNode:[9,1,1,""],MatrixMultiplicationNode:[9,1,1,""],MatrixNegateNode:[9,1,1,""],MatrixPhiNode:[9,1,1,""],MatrixScaleNode:[9,1,1,""],MatrixSumNode:[9,1,1,""],ModNode:[9,1,1,""],MultiplicationNode:[9,1,1,""],NaturalNode:[9,1,1,""],NegateNode:[9,1,1,""],NegativeRealNode:[9,1,1,""],NormalNode:[9,1,1,""],NotEqualNode:[9,1,1,""],NotInNode:[9,1,1,""],NotNode:[9,1,1,""],Observation:[9,1,1,""],OperatorNode:[9,1,1,""],PhiNode:[9,1,1,""],PoissonNode:[9,1,1,""],PositiveRealNode:[9,1,1,""],PowerNode:[9,1,1,""],ProbabilityNode:[9,1,1,""],Query:[9,1,1,""],RShiftNode:[9,1,1,""],RealNode:[9,1,1,""],SampleNode:[9,1,1,""],SquareRootNode:[9,1,1,""],StudentTNode:[9,1,1,""],SumNode:[9,1,1,""],SwitchNode:[9,1,1,""],TensorNode:[9,1,1,""],ToIntNode:[9,1,1,""],ToMatrixNode:[9,1,1,""],ToNegativeRealMatrixNode:[9,1,1,""],ToNegativeRealNode:[9,1,1,""],ToPositiveRealMatrixNode:[9,1,1,""],ToPositiveRealNode:[9,1,1,""],ToProbabilityNode:[9,1,1,""],ToRealMatrixNode:[9,1,1,""],ToRealNode:[9,1,1,""],TransposeNode:[9,1,1,""],UnaryOperatorNode:[9,1,1,""],UniformNode:[9,1,1,""],UntypedConstantNode:[9,1,1,""],VectorIndexNode:[9,1,1,""],is_one:[9,5,1,""],is_zero:[9,5,1,""]},"beanmachine.ppl.compiler.bmg_nodes.AdditionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BMGNode":{inputs:[9,3,1,""],is_leaf:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliBase":{inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BetaNode":{alpha:[9,4,1,""],beta:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinaryOperatorNode":{inputs:[9,3,1,""],left:[9,4,1,""],outputs:[9,3,1,""],right:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialNodeBase":{count:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""],support:[9,2,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitAndNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitOrNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitXorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BooleanNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BroadcastNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalNodeBase":{inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Chi2Node":{df:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ChoiceNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CholeskyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ColumnIndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ComparisonNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ComplementNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantBooleanMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNaturalMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNegativeRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantPositiveRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantProbabilityMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantSimplexMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantTensorNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DirichletNode":{concentration:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DistributionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DivisionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ElementwiseMultiplyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.EqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Exp2Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpM1Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpProductFactorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FactorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FillMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FlatNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FloorDivNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GammaNode":{concentration:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],rate:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GreaterThanEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GreaterThanNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.HalfCauchyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],scale:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.HalfNormalNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],sigma:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IfThenElseNode":{alternative:[9,4,1,""],condition:[9,4,1,""],consequence:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InputList":{inputs:[9,3,1,""],node:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InvertNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IsNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IsNotNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ItemNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LKJCholeskyNode":{dim:[9,4,1,""],eta:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LShiftNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LessThanEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LessThanNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log10Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log1mexpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log1pNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log2Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogAddExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogProbNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpTorchNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpVectorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogisticNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixAddNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixComplementNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixLog1mexpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixLogNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixMultiplicationNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixNegateNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixPhiNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixScaleNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixSumNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ModNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MultiplicationNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NaturalNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NegateNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NegativeRealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NormalNode":{inputs:[9,3,1,""],mu:[9,4,1,""],outputs:[9,3,1,""],sigma:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotInNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Observation":{observed:[9,4,1,""],value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.OperatorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PhiNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PoissonNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],rate:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PositiveRealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PowerNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ProbabilityNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Query":{inputs:[9,3,1,""],operator:[9,4,1,""],outputs:[9,3,1,""],rv_identifier:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.RShiftNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.RealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SampleNode":{inputs:[9,3,1,""],operand:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SquareRootNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.StudentTNode":{df:[9,4,1,""],inputs:[9,3,1,""],loc:[9,4,1,""],outputs:[9,3,1,""],scale:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SumNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SwitchNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToIntNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToMatrixNode":{columns:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],rows:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToNegativeRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToNegativeRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToPositiveRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToPositiveRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToProbabilityNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.TransposeNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UnaryOperatorNode":{inputs:[9,3,1,""],operand:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UniformNode":{high:[9,4,1,""],inputs:[9,3,1,""],low:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UntypedConstantNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.VectorIndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_requirements":{EdgeRequirements:[10,1,1,""]},"beanmachine.ppl.compiler.bmg_requirements.EdgeRequirements":{requirements:[10,2,1,""],typer:[10,3,1,""]},"beanmachine.ppl.compiler.bmg_types":{AlwaysMatrix:[11,1,1,""],AnyPosRealMatrix:[11,1,1,""],AnyRealMatrix:[11,1,1,""],AnyRequirement:[11,1,1,""],BMGElementType:[11,1,1,""],BMGLatticeType:[11,1,1,""],BMGMatrixType:[11,1,1,""],BaseRequirement:[11,1,1,""],BooleanMatrix:[11,1,1,""],BroadcastMatrixType:[11,1,1,""],NaturalMatrix:[11,1,1,""],NegativeRealMatrix:[11,1,1,""],OneHotMatrix:[11,1,1,""],PositiveRealMatrix:[11,1,1,""],ProbabilityMatrix:[11,1,1,""],RealMatrix:[11,1,1,""],SimplexMatrix:[11,1,1,""],Untypable:[11,6,1,""],UpperBound:[11,1,1,""],ZeroMatrix:[11,1,1,""],always_matrix:[11,5,1,""],is_atomic:[11,5,1,""],is_convertible_to:[11,5,1,""],is_one:[11,5,1,""],is_zero:[11,5,1,""],lattice_to_bmg:[11,5,1,""],must_be_matrix:[11,5,1,""],requirement_to_type:[11,5,1,""],supremum:[11,5,1,""],type_of_value:[11,5,1,""],upper_bound:[11,5,1,""]},"beanmachine.ppl.compiler.bmg_types.AlwaysMatrix":{bound:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyPosRealMatrix":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyRealMatrix":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyRequirement":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGElementType":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGLatticeType":{is_singleton:[11,2,1,""],long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGMatrixType":{columns:[11,3,1,""],element_type:[11,3,1,""],is_singleton:[11,2,1,""],rows:[11,3,1,""],with_dimensions:[11,2,1,""],with_size:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.BaseRequirement":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BooleanMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.BroadcastMatrixType":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.NaturalMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.NegativeRealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.OneHotMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.PositiveRealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.ProbabilityMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.RealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.SimplexMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.UpperBound":{bound:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.ZeroMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.broadcaster":{broadcast_fnc:[12,5,1,""],identity_fnc:[12,5,1,""]},"beanmachine.ppl.compiler.copy_and_replace":{Cloner:[13,1,1,""],NodeTransformer:[13,1,1,""],TransformAssessment:[13,1,1,""],copy_and_replace:[13,5,1,""],flatten:[13,5,1,""]},"beanmachine.ppl.compiler.copy_and_replace.Cloner":{clone:[13,2,1,""]},"beanmachine.ppl.compiler.copy_and_replace.NodeTransformer":{assess_node:[13,2,1,""],transform_node:[13,2,1,""]},"beanmachine.ppl.compiler.copy_and_replace.TransformAssessment":{error_report:[13,3,1,""],node_needs_transform:[13,3,1,""]},"beanmachine.ppl.compiler.copy_transformer":{CopyGraph:[14,1,1,""],copy:[14,5,1,""]},"beanmachine.ppl.compiler.copy_transformer.CopyGraph":{assess_node:[14,2,1,""],transform_node:[14,2,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer":{CopyContext:[15,1,1,""],DevectorizeTransformation:[15,1,1,""],Devectorizer:[15,1,1,""],ElementType:[15,1,1,""],vectorized_graph_fixer:[15,5,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.DevectorizeTransformation":{NO:[15,3,1,""],YES:[15,3,1,""],YES_WITH_MERGE:[15,3,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.Devectorizer":{assess_node:[15,2,1,""],transform_node:[15,2,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.ElementType":{ANY:[15,3,1,""],SCALAR:[15,3,1,""],TENSOR:[15,3,1,""]},"beanmachine.ppl.compiler.error_report":{BMGError:[16,1,1,""],BadMatrixMultiplication:[16,1,1,""],ErrorReport:[16,1,1,""],ImpossibleObservation:[16,1,1,""],UnsizableNode:[16,1,1,""],UnsupportedNode:[16,1,1,""],UntypableNode:[16,1,1,""],Violation:[16,1,1,""]},"beanmachine.ppl.compiler.error_report.BadMatrixMultiplication":{left_type:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""],right_type:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.ErrorReport":{add_error:[16,2,1,""],any:[16,2,1,""],errors:[16,3,1,""],raise_errors:[16,2,1,""]},"beanmachine.ppl.compiler.error_report.ImpossibleObservation":{distribution_type:[16,3,1,""],node:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UnsizableNode":{node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UnsupportedNode":{consumer:[16,3,1,""],edge:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UntypableNode":{node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.Violation":{consumer:[16,3,1,""],edge:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""],node_type:[16,3,1,""],requirement:[16,3,1,""]},"beanmachine.ppl.compiler.execution_context":{CallStack:[17,1,1,""],ExecutionContext:[17,1,1,""],FunctionCall:[17,1,1,""]},"beanmachine.ppl.compiler.execution_context.CallStack":{peek:[17,2,1,""],pop:[17,2,1,""],push:[17,2,1,""]},"beanmachine.ppl.compiler.execution_context.ExecutionContext":{call:[17,2,1,""],current_site:[17,2,1,""],node_locations:[17,2,1,""],record_node_call:[17,2,1,""]},"beanmachine.ppl.compiler.execution_context.FunctionCall":{args:[17,3,1,""],func:[17,3,1,""],kwargs:[17,3,1,""]},"beanmachine.ppl.compiler.fix_additions":{addition_fixer:[18,5,1,""],sum_fixer:[18,5,1,""]},"beanmachine.ppl.compiler.fix_arithmetic":{log1mexp_fixer:[19,5,1,""],neg_neg_fixer:[19,5,1,""],negative_real_multiplication_fixer:[19,5,1,""],nested_if_same_cond_fixer:[19,5,1,""]},"beanmachine.ppl.compiler.fix_beta_conjugate_prior":{beta_bernoulli_conjugate_fixer:[20,5,1,""],beta_binomial_conjugate_fixer:[20,5,1,""]},"beanmachine.ppl.compiler.fix_bool_arithmetic":{BoolArithmeticFixer:[21,1,1,""],bool_arithmetic_fixer:[21,5,1,""]},"beanmachine.ppl.compiler.fix_bool_comparisons":{BoolComparisonFixer:[22,1,1,""],bool_comparison_fixer:[22,5,1,""]},"beanmachine.ppl.compiler.fix_logsumexp":{logsumexp_fixer:[23,5,1,""]},"beanmachine.ppl.compiler.fix_matrix_scale":{matrix_scale_fixer:[24,5,1,""],nested_matrix_scale_fixer:[24,5,1,""],trivial_matmul_fixer:[24,5,1,""]},"beanmachine.ppl.compiler.fix_multiary_ops":{MultiaryOperatorFixer:[25,1,1,""],multiary_addition_fixer:[25,5,1,""],multiary_multiplication_fixer:[25,5,1,""]},"beanmachine.ppl.compiler.fix_multiary_ops.MultiaryOperatorFixer":{accumulate_input_nodes:[25,2,1,""]},"beanmachine.ppl.compiler.fix_normal_conjugate_prior":{normal_normal_conjugate_fixer:[26,5,1,""]},"beanmachine.ppl.compiler.fix_observations":{observations_fixer:[27,5,1,""]},"beanmachine.ppl.compiler.fix_observe_true":{observe_true_fixer:[28,5,1,""]},"beanmachine.ppl.compiler.fix_problem":{NodeFixerError:[29,1,1,""],ancestors_first_graph_fixer:[29,5,1,""],conditional_graph_fixer:[29,5,1,""],edge_error_pass:[29,5,1,""],fixpoint_graph_fixer:[29,5,1,""],identity_graph_fixer:[29,5,1,""],node_error_pass:[29,5,1,""],node_fixer_first_match:[29,5,1,""],sequential_graph_fixer:[29,5,1,""],type_guard:[29,5,1,""]},"beanmachine.ppl.compiler.fix_problems":{arithmetic_graph_fixer:[30,5,1,""],conjugacy_graph_fixer:[30,5,1,""],fix_problems:[30,5,1,""]},"beanmachine.ppl.compiler.fix_requirements":{RequirementsFixer:[31,1,1,""],requirements_fixer:[31,5,1,""]},"beanmachine.ppl.compiler.fix_requirements.RequirementsFixer":{bmg:[31,3,1,""],errors:[31,3,1,""],fix_problems:[31,2,1,""],meet_requirement:[31,2,1,""]},"beanmachine.ppl.compiler.fix_transpose":{identity_transpose_fixer:[32,5,1,""]},"beanmachine.ppl.compiler.fix_unsupported":{UnsupportedNodeFixer:[33,1,1,""],bad_matmul_reporter:[33,5,1,""],unsupported_node_fixer:[33,5,1,""],unsupported_node_reporter:[33,5,1,""],untypable_node_reporter:[33,5,1,""]},"beanmachine.ppl.compiler.gen_bm_python":{ToBMPython:[34,1,1,""],to_bm_python:[34,5,1,""]},"beanmachine.ppl.compiler.gen_bm_python.ToBMPython":{bmg:[34,3,1,""],code:[34,3,1,""],dist_to_rv_id:[34,3,1,""],no_dist_samples:[34,3,1,""],node_to_func_id:[34,3,1,""],node_to_var_id:[34,3,1,""],observations:[34,3,1,""],queries:[34,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_cpp":{GeneratedGraphCPP:[35,1,1,""],to_bmg_cpp:[35,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_cpp.GeneratedGraphCPP":{bmg:[35,3,1,""],code:[35,3,1,""],node_to_graph_id:[35,3,1,""],query_to_query_id:[35,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_graph":{GeneratedGraph:[36,1,1,""],to_bmg_graph:[36,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_graph.GeneratedGraph":{bmg:[36,3,1,""],graph:[36,3,1,""],node_to_graph_id:[36,3,1,""],query_to_query_id:[36,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_python":{GeneratedGraphPython:[37,1,1,""],to_bmg_python:[37,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_python.GeneratedGraphPython":{bmg:[37,3,1,""],code:[37,3,1,""],node_to_graph_id:[37,3,1,""],query_to_query_id:[37,3,1,""]},"beanmachine.ppl.compiler.gen_builder":{GenerateBuilder:[38,1,1,""],generate_builder:[38,5,1,""]},"beanmachine.ppl.compiler.gen_builder.GenerateBuilder":{bmg:[38,3,1,""]},"beanmachine.ppl.compiler.gen_dot":{to_dot:[39,5,1,""]},"beanmachine.ppl.compiler.gen_mini":{ToMini:[40,1,1,""],to_mini:[40,5,1,""]},"beanmachine.ppl.compiler.gen_mini.ToMini":{to_json:[40,2,1,""]},"beanmachine.ppl.compiler.graph_labels":{get_edge_label:[41,5,1,""],get_edge_labels:[41,5,1,""],get_node_error_label:[41,5,1,""],get_node_label:[41,5,1,""]},"beanmachine.ppl.compiler.internal_error":{InternalError:[42,7,1,""],LiftedCompilationError:[42,7,1,""]},"beanmachine.ppl.compiler.internal_error.InternalError":{original_exception:[42,3,1,""]},"beanmachine.ppl.compiler.internal_error.LiftedCompilationError":{ast:[42,3,1,""],source:[42,3,1,""]},"beanmachine.ppl.compiler.lattice_typer":{LatticeTyper:[43,1,1,""]},"beanmachine.ppl.compiler.lattice_typer.LatticeTyper":{is_bool:[43,2,1,""],is_matrix:[43,2,1,""],is_natural:[43,2,1,""],is_neg_real:[43,2,1,""],is_pos_real:[43,2,1,""],is_prob_or_bool:[43,2,1,""],is_real:[43,2,1,""]},"beanmachine.ppl.compiler.patterns":{AnyPattern:[44,1,1,""],AtomicPattern:[44,1,1,""],AttributeSubpattern:[44,1,1,""],BoolPattern:[44,1,1,""],EmptyListPattern:[44,1,1,""],Fail:[44,1,1,""],FailPattern:[44,1,1,""],FloatPattern:[44,1,1,""],HeadTail:[44,1,1,""],IntPattern:[44,1,1,""],ListAll:[44,1,1,""],ListAny:[44,1,1,""],ListPattern:[44,1,1,""],MatchAny:[44,1,1,""],MatchEvery:[44,1,1,""],MatchResult:[44,1,1,""],Negate:[44,1,1,""],NonePattern:[44,1,1,""],PatternBase:[44,1,1,""],PredicatePattern:[44,1,1,""],StringPattern:[44,1,1,""],Subpattern:[44,1,1,""],Success:[44,1,1,""],TypePattern:[44,1,1,""],attribute:[44,5,1,""],is_any:[44,5,1,""],match:[44,5,1,""],match_any:[44,5,1,""],match_every:[44,5,1,""],negate:[44,5,1,""],to_pattern:[44,5,1,""],type_and_attributes:[44,5,1,""]},"beanmachine.ppl.compiler.patterns.AnyPattern":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.AtomicPattern":{match:[44,2,1,""],value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.AttributeSubpattern":{match:[44,2,1,""],name:[44,3,1,""],subpattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.BoolPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.EmptyListPattern":{match:[44,2,1,""],name:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Fail":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.FailPattern":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.FloatPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.HeadTail":{head:[44,3,1,""],match:[44,2,1,""],name:[44,3,1,""],tail:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.IntPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListAll":{match:[44,2,1,""],name:[44,3,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListAny":{match:[44,2,1,""],name:[44,3,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListPattern":{match:[44,2,1,""],name:[44,3,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchAny":{match:[44,2,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchEvery":{match:[44,2,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchResult":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Negate":{match:[44,2,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.NonePattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.PatternBase":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.PredicatePattern":{match:[44,2,1,""],name:[44,3,1,""],predicate:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.StringPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Subpattern":{get_subtest:[44,3,1,""],match:[44,2,1,""],name:[44,3,1,""],subpattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Success":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.TypePattern":{match:[44,2,1,""],typ:[44,3,1,""]},"beanmachine.ppl.compiler.performance_report":{PerformanceReport:[45,1,1,""],json_to_perf_report:[45,5,1,""]},"beanmachine.ppl.compiler.performance_report.PerformanceReport":{json:[45,3,1,""]},"beanmachine.ppl.compiler.profiler":{Event:[46,1,1,""],ProfileReport:[46,1,1,""],ProfilerData:[46,1,1,""],event_list_to_report:[46,5,1,""]},"beanmachine.ppl.compiler.profiler.Event":{begin:[46,3,1,""],kind:[46,3,1,""],timestamp:[46,3,1,""]},"beanmachine.ppl.compiler.profiler.ProfileReport":{calls:[46,3,1,""],children:[46,3,1,""],parent:[46,3,1,""],total_time:[46,3,1,""]},"beanmachine.ppl.compiler.profiler.ProfilerData":{begin:[46,2,1,""],events:[46,3,1,""],finish:[46,2,1,""],in_flight:[46,3,1,""],time_in:[46,2,1,""],to_report:[46,2,1,""]},"beanmachine.ppl.compiler.rules":{AllChildren:[47,1,1,""],AllListEditMembers:[47,1,1,""],AllListMembers:[47,1,1,""],AllOf:[47,1,1,""],AllTermChildren:[47,1,1,""],Check:[47,1,1,""],Choose:[47,1,1,""],Compose:[47,1,1,""],Fail:[47,1,1,""],FirstMatch:[47,1,1,""],IgnoreException:[47,1,1,""],ListEdit:[47,1,1,""],OneChild:[47,1,1,""],OneListMember:[47,1,1,""],OrElse:[47,1,1,""],PatternRule:[47,1,1,""],Recursive:[47,1,1,""],Rule:[47,1,1,""],RuleDomain:[47,1,1,""],RuleResult:[47,1,1,""],SomeChildren:[47,1,1,""],SomeListMembers:[47,1,1,""],SomeOf:[47,1,1,""],SpecificChild:[47,1,1,""],Success:[47,1,1,""],Trace:[47,1,1,""],TryMany:[47,1,1,""],TryOnce:[47,1,1,""],always_replace:[47,5,1,""],at_least_once:[47,5,1,""],either_or_both:[47,5,1,""],if_then:[47,5,1,""],ignore_div_zero:[47,5,1,""],ignore_runtime_error:[47,5,1,""],ignore_value_error:[47,5,1,""],list_member_children:[47,5,1,""],make_logger:[47,5,1,""],pattern_rules:[47,5,1,""],projection_rule:[47,5,1,""]},"beanmachine.ppl.compiler.rules.AllChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],combined_rule:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllListEditMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllListMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllOf":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllTermChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Check":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Choose":{alternative:[47,3,1,""],always_succeeds:[47,2,1,""],apply:[47,2,1,""],condition:[47,3,1,""],consequence:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Compose":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],first:[47,3,1,""],second:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Fail":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],test:[47,3,1,""]},"beanmachine.ppl.compiler.rules.FirstMatch":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.IgnoreException":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],expected:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.ListEdit":{edits:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OneChild":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OneListMember":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OrElse":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],first:[47,3,1,""],second:[47,3,1,""]},"beanmachine.ppl.compiler.rules.PatternRule":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],pattern:[47,3,1,""],projection:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Recursive":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule_maker:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Rule":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],name:[47,3,1,""]},"beanmachine.ppl.compiler.rules.RuleDomain":{all_children:[47,2,1,""],bottom_up:[47,2,1,""],construct:[47,3,1,""],descend_until:[47,2,1,""],down_then_up:[47,2,1,""],get_children:[47,3,1,""],one_child:[47,2,1,""],some_bottom_up:[47,2,1,""],some_children:[47,2,1,""],some_top_down:[47,2,1,""],specific_child:[47,2,1,""],top_down:[47,2,1,""]},"beanmachine.ppl.compiler.rules.RuleResult":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],test:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeListMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeOf":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SpecificChild":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],child:[47,3,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Success":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],result:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Trace":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],logger:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.TryMany":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.TryOnce":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.runtime":{BMGRuntime:[48,1,1,""]},"beanmachine.ppl.compiler.runtime.BMGRuntime":{accumulate_graph:[48,2,1,""],handle_dot_get:[48,2,1,""],handle_dot_set:[48,2,1,""],handle_for:[48,2,1,""],handle_function:[48,2,1,""],handle_if:[48,2,1,""],handle_index:[48,2,1,""],handle_not_in:[48,2,1,""],handle_slice:[48,2,1,""],handle_subscript_assign:[48,2,1,""],in_flight:[48,3,1,""],lifted_map:[48,3,1,""],rv_map:[48,3,1,""]},"beanmachine.ppl.compiler.single_assignment":{SingleAssignment:[49,1,1,""],single_assignment:[49,5,1,""]},"beanmachine.ppl.compiler.single_assignment.SingleAssignment":{fresh_names:[49,2,1,""],single_assignment:[49,2,1,""]},"beanmachine.ppl.compiler.size_assessment":{SizeAssessment:[50,1,1,""]},"beanmachine.ppl.compiler.size_assessment.SizeAssessment":{size_error:[50,2,1,""]},"beanmachine.ppl.compiler.sizer":{Sizer:[51,1,1,""],is_scalar:[51,5,1,""],size_to_str:[51,5,1,""]},"beanmachine.ppl.compiler.special_function_caller":{KnownFunction:[52,1,1,""],SpecialFunctionCaller:[52,1,1,""],canonicalize_function:[52,5,1,""],only_ordinary_arguments:[52,5,1,""]},"beanmachine.ppl.compiler.special_function_caller.KnownFunction":{"function":[52,3,1,""],receiver:[52,3,1,""]},"beanmachine.ppl.compiler.special_function_caller.SpecialFunctionCaller":{bind_torch_instance_function:[52,2,1,""],distribution_to_node:[52,2,1,""],do_special_call_always_stochastic:[52,2,1,""],do_special_call_maybe_stochastic:[52,2,1,""],is_special_function:[52,2,1,""],is_special_tensor_bound_instance_method:[52,2,1,""]},"beanmachine.ppl.compiler.support":{ComputeSupport:[53,1,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer":{ElementType:[54,1,1,""],Tensorizer:[54,1,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer.ElementType":{MATRIX:[54,3,1,""],SCALAR:[54,3,1,""],TENSOR:[54,3,1,""],UNKNOWN:[54,3,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer.Tensorizer":{assess_node:[54,2,1,""],can_be_tensorized:[54,2,1,""],div_can_be_tensorized:[54,2,1,""],mult_can_be_tensorized:[54,2,1,""],negate_can_be_tensorized:[54,2,1,""],transform_node:[54,2,1,""]},"beanmachine.ppl.compiler.typer_base":{TyperBase:[55,1,1,""]},"beanmachine.ppl.compiler.typer_base.TyperBase":{update_type:[55,2,1,""]},"beanmachine.ppl.distributions":{Delta:[56,1,1,""],Flat:[56,1,1,""],Unit:[56,1,1,""],delta:[57,0,0,"-"],flat:[58,0,0,"-"],unit:[59,0,0,"-"]},"beanmachine.ppl.distributions.Delta":{arg_constraints:[56,3,1,""],event_dim:[56,4,1,""],expand:[56,2,1,""],has_rsample:[56,3,1,""],log_prob:[56,2,1,""],mean:[56,4,1,""],rsample:[56,2,1,""],shape:[56,2,1,""],support:[56,3,1,""],variance:[56,4,1,""]},"beanmachine.ppl.distributions.Flat":{arg_constraints:[56,3,1,""],has_enumerate_support:[56,3,1,""],has_rsample:[56,3,1,""],log_prob:[56,2,1,""],rsample:[56,2,1,""],sample:[56,2,1,""],support:[56,3,1,""]},"beanmachine.ppl.distributions.Unit":{arg_constraints:[56,3,1,""],expand:[56,2,1,""],log_prob:[56,2,1,""],sample:[56,2,1,""],support:[56,3,1,""]},"beanmachine.ppl.distributions.delta":{Delta:[57,1,1,""],sum_rightmost:[57,5,1,""]},"beanmachine.ppl.distributions.delta.Delta":{arg_constraints:[57,3,1,""],event_dim:[57,4,1,""],expand:[57,2,1,""],has_rsample:[57,3,1,""],log_prob:[57,2,1,""],mean:[57,4,1,""],rsample:[57,2,1,""],shape:[57,2,1,""],support:[57,3,1,""],variance:[57,4,1,""]},"beanmachine.ppl.distributions.flat":{Flat:[58,1,1,""]},"beanmachine.ppl.distributions.flat.Flat":{arg_constraints:[58,3,1,""],has_enumerate_support:[58,3,1,""],has_rsample:[58,3,1,""],log_prob:[58,2,1,""],rsample:[58,2,1,""],sample:[58,2,1,""],support:[58,3,1,""]},"beanmachine.ppl.distributions.unit":{Unit:[59,1,1,""],broadcast_shape:[59,5,1,""]},"beanmachine.ppl.distributions.unit.Unit":{arg_constraints:[59,3,1,""],expand:[59,2,1,""],log_prob:[59,2,1,""],sample:[59,2,1,""],support:[59,3,1,""]},"beanmachine.ppl.inference":{BMGInference:[60,1,1,""],CompositionalInference:[60,1,1,""],GlobalHamiltonianMonteCarlo:[60,1,1,""],GlobalNoUTurnSampler:[60,1,1,""],SingleSiteAncestralMetropolisHastings:[60,1,1,""],SingleSiteHamiltonianMonteCarlo:[60,1,1,""],SingleSiteNewtonianMonteCarlo:[60,1,1,""],SingleSiteNoUTurnSampler:[60,1,1,""],SingleSiteRandomWalk:[60,1,1,""],SingleSiteUniformMetropolisHastings:[60,1,1,""],VerboseLevel:[60,1,1,""],base_inference:[61,0,0,"-"],bmg_inference:[62,0,0,"-"],compositional_infer:[63,0,0,"-"],empirical:[60,5,1,""],hmc_inference:[64,0,0,"-"],monte_carlo_samples:[65,0,0,"-"],nuts_inference:[66,0,0,"-"],predictive:[67,0,0,"-"],proposer:[68,0,0,"-"],sampler:[87,0,0,"-"],seed:[60,5,1,""],simulate:[60,5,1,""],single_site_ancestral_mh:[88,0,0,"-"],single_site_inference:[89,0,0,"-"],single_site_nmc:[90,0,0,"-"],single_site_random_walk:[91,0,0,"-"],single_site_uniform_mh:[92,0,0,"-"],utils:[93,0,0,"-"],vi:[94,0,0,"-"]},"beanmachine.ppl.inference.BMGInference":{infer:[60,2,1,""],to_bm_python:[60,2,1,""],to_cpp:[60,2,1,""],to_dot:[60,2,1,""],to_graph:[60,2,1,""],to_graphviz:[60,2,1,""],to_python:[60,2,1,""]},"beanmachine.ppl.inference.CompositionalInference":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.GlobalHamiltonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.GlobalNoUTurnSampler":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteHamiltonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteNewtonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteNoUTurnSampler":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteRandomWalk":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.VerboseLevel":{LOAD_BAR:[60,3,1,""],OFF:[60,3,1,""]},"beanmachine.ppl.inference.base_inference":{BaseInference:[61,1,1,""]},"beanmachine.ppl.inference.base_inference.BaseInference":{get_proposers:[61,2,1,""],infer:[61,2,1,""],sampler:[61,2,1,""]},"beanmachine.ppl.inference.bmg_inference":{BMGInference:[62,1,1,""]},"beanmachine.ppl.inference.bmg_inference.BMGInference":{infer:[62,2,1,""],to_bm_python:[62,2,1,""],to_cpp:[62,2,1,""],to_dot:[62,2,1,""],to_graph:[62,2,1,""],to_graphviz:[62,2,1,""],to_python:[62,2,1,""]},"beanmachine.ppl.inference.compositional_infer":{CompositionalInference:[63,1,1,""]},"beanmachine.ppl.inference.compositional_infer.CompositionalInference":{get_proposers:[63,2,1,""]},"beanmachine.ppl.inference.hmc_inference":{GlobalHamiltonianMonteCarlo:[64,1,1,""],SingleSiteHamiltonianMonteCarlo:[64,1,1,""]},"beanmachine.ppl.inference.hmc_inference.GlobalHamiltonianMonteCarlo":{get_proposers:[64,2,1,""]},"beanmachine.ppl.inference.hmc_inference.SingleSiteHamiltonianMonteCarlo":{get_proposers:[64,2,1,""]},"beanmachine.ppl.inference.monte_carlo_samples":{MonteCarloSamples:[65,1,1,""],Samples:[65,1,1,""]},"beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples":{adaptive_samples:[65,4,1,""],add_groups:[65,2,1,""],diagnostics:[65,3,1,""],get:[65,2,1,""],get_chain:[65,2,1,""],get_log_likelihoods:[65,2,1,""],get_num_samples:[65,2,1,""],get_variable:[65,2,1,""],samples:[65,4,1,""],to_inference_data:[65,2,1,""],to_xarray:[65,2,1,""]},"beanmachine.ppl.inference.monte_carlo_samples.Samples":{adaptive_samples:[65,3,1,""],samples:[65,3,1,""]},"beanmachine.ppl.inference.nuts_inference":{GlobalNoUTurnSampler:[66,1,1,""],SingleSiteNoUTurnSampler:[66,1,1,""]},"beanmachine.ppl.inference.nuts_inference.GlobalNoUTurnSampler":{get_proposers:[66,2,1,""]},"beanmachine.ppl.inference.nuts_inference.SingleSiteNoUTurnSampler":{get_proposers:[66,2,1,""]},"beanmachine.ppl.inference.predictive":{Predictive:[67,1,1,""],empirical:[67,5,1,""],simulate:[67,5,1,""]},"beanmachine.ppl.inference.predictive.Predictive":{empirical:[67,2,1,""],simulate:[67,2,1,""]},"beanmachine.ppl.inference.proposer":{base_proposer:[69,0,0,"-"],base_single_site_mh_proposer:[70,0,0,"-"],hmc_proposer:[71,0,0,"-"],hmc_utils:[72,0,0,"-"],newtonian_monte_carlo_utils:[73,0,0,"-"],nmc:[74,0,0,"-"],nnc:[78,0,0,"-"],normal_eig:[80,0,0,"-"],nuts_proposer:[81,0,0,"-"],sequential_proposer:[82,0,0,"-"],single_site_ancestral_proposer:[83,0,0,"-"],single_site_random_walk_proposer:[84,0,0,"-"],single_site_uniform_proposer:[85,0,0,"-"],utils:[86,0,0,"-"]},"beanmachine.ppl.inference.proposer.base_proposer":{BaseProposer:[69,1,1,""]},"beanmachine.ppl.inference.proposer.base_proposer.BaseProposer":{do_adaptation:[69,2,1,""],finish_adaptation:[69,2,1,""],propose:[69,2,1,""]},"beanmachine.ppl.inference.proposer.base_single_site_mh_proposer":{BaseSingleSiteMHProposer:[70,1,1,""]},"beanmachine.ppl.inference.proposer.base_single_site_mh_proposer.BaseSingleSiteMHProposer":{get_proposal_distribution:[70,2,1,""],propose:[70,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_proposer":{HMCProposer:[71,1,1,""]},"beanmachine.ppl.inference.proposer.hmc_proposer.HMCProposer":{do_adaptation:[71,2,1,""],finish_adaptation:[71,2,1,""],propose:[71,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils":{DictTransform:[72,1,1,""],DualAverageAdapter:[72,1,1,""],MassMatrixAdapter:[72,1,1,""],RealSpaceTransform:[72,1,1,""],WelfordCovariance:[72,1,1,""],WindowScheme:[72,1,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.DictTransform":{inv:[72,2,1,""],log_abs_det_jacobian:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.DualAverageAdapter":{finalize:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.MassMatrixAdapter":{finalize:[72,2,1,""],initialize_momentums:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.WelfordCovariance":{finalize:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.WindowScheme":{is_end_window:[72,4,1,""],is_in_window:[72,4,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils":{compute_eigvals_eigvecs:[73,5,1,""],compute_first_gradient:[73,5,1,""],compute_hessian:[73,5,1,""],hessian_of_log_prob:[73,5,1,""],is_scalar:[73,5,1,""],is_valid:[73,5,1,""],soft_abs_inverse:[73,5,1,""],zero_grad:[73,5,1,""]},"beanmachine.ppl.inference.proposer.nmc":{SingleSiteHalfSpaceNMCProposer:[74,1,1,""],SingleSiteRealSpaceNMCProposer:[74,1,1,""],SingleSiteSimplexSpaceNMCProposer:[74,1,1,""],single_site_half_space_nmc_proposer:[75,0,0,"-"],single_site_real_space_nmc_proposer:[76,0,0,"-"],single_site_simplex_space_nmc_proposer:[77,0,0,"-"]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteHalfSpaceNMCProposer":{compute_alpha_beta:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteRealSpaceNMCProposer":{compute_beta_priors_from_accepted_lr:[74,2,1,""],do_adaptation:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteSimplexSpaceNMCProposer":{compute_alpha:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer":{SingleSiteHalfSpaceNMCProposer:[75,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer.SingleSiteHalfSpaceNMCProposer":{compute_alpha_beta:[75,2,1,""],get_proposal_distribution:[75,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer":{SingleSiteRealSpaceNMCProposer:[76,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer.SingleSiteRealSpaceNMCProposer":{compute_beta_priors_from_accepted_lr:[76,2,1,""],do_adaptation:[76,2,1,""],get_proposal_distribution:[76,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer":{SingleSiteSimplexSpaceNMCProposer:[77,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer.SingleSiteSimplexSpaceNMCProposer":{compute_alpha:[77,2,1,""],get_proposal_distribution:[77,2,1,""]},"beanmachine.ppl.inference.proposer.nnc":{nnc_jit:[78,5,1,""],utils:[79,0,0,"-"]},"beanmachine.ppl.inference.proposer.nnc.utils":{nnc_jit:[79,5,1,""]},"beanmachine.ppl.inference.proposer.normal_eig":{NormalEig:[80,1,1,""]},"beanmachine.ppl.inference.proposer.normal_eig.NormalEig":{log_prob:[80,2,1,""],sample:[80,2,1,""]},"beanmachine.ppl.inference.proposer.nuts_proposer":{NUTSProposer:[81,1,1,""]},"beanmachine.ppl.inference.proposer.nuts_proposer.NUTSProposer":{propose:[81,2,1,""]},"beanmachine.ppl.inference.proposer.sequential_proposer":{SequentialProposer:[82,1,1,""]},"beanmachine.ppl.inference.proposer.sequential_proposer.SequentialProposer":{do_adaptation:[82,2,1,""],finish_adaptation:[82,2,1,""],propose:[82,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_ancestral_proposer":{SingleSiteAncestralProposer:[83,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_ancestral_proposer.SingleSiteAncestralProposer":{get_proposal_distribution:[83,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_random_walk_proposer":{SingleSiteRandomWalkProposer:[84,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_random_walk_proposer.SingleSiteRandomWalkProposer":{beta_dist_from_moments:[84,2,1,""],dirichlet_dist_from_moments:[84,2,1,""],do_adaptation:[84,2,1,""],gamma_dist_from_moments:[84,2,1,""],get_proposal_distribution:[84,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_uniform_proposer":{SingleSiteUniformProposer:[85,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_uniform_proposer.SingleSiteUniformProposer":{get_proposal_distribution:[85,2,1,""]},"beanmachine.ppl.inference.proposer.utils":{DictToVecConverter:[86,1,1,""]},"beanmachine.ppl.inference.proposer.utils.DictToVecConverter":{to_dict:[86,2,1,""],to_vec:[86,2,1,""]},"beanmachine.ppl.inference.sampler":{Sampler:[87,1,1,""]},"beanmachine.ppl.inference.sampler.Sampler":{"throw":[87,2,1,""],send:[87,2,1,""]},"beanmachine.ppl.inference.single_site_ancestral_mh":{SingleSiteAncestralMetropolisHastings:[88,1,1,""]},"beanmachine.ppl.inference.single_site_inference":{SingleSiteInference:[89,1,1,""]},"beanmachine.ppl.inference.single_site_inference.SingleSiteInference":{get_proposers:[89,2,1,""]},"beanmachine.ppl.inference.single_site_nmc":{SingleSiteNewtonianMonteCarlo:[90,1,1,""]},"beanmachine.ppl.inference.single_site_nmc.SingleSiteNewtonianMonteCarlo":{get_proposers:[90,2,1,""]},"beanmachine.ppl.inference.single_site_random_walk":{SingleSiteRandomWalk:[91,1,1,""]},"beanmachine.ppl.inference.single_site_random_walk.SingleSiteRandomWalk":{get_proposers:[91,2,1,""]},"beanmachine.ppl.inference.single_site_uniform_mh":{SingleSiteUniformMetropolisHastings:[92,1,1,""]},"beanmachine.ppl.inference.utils":{VerboseLevel:[93,1,1,""],detach_samples:[93,5,1,""],merge_dicts:[93,5,1,""],safe_log_prob_sum:[93,5,1,""],seed:[93,5,1,""]},"beanmachine.ppl.inference.utils.VerboseLevel":{LOAD_BAR:[93,3,1,""],OFF:[93,3,1,""]},"beanmachine.ppl.inference.vi":{ADVI:[94,1,1,""],MAP:[94,1,1,""],VariationalInfer:[94,1,1,""],autoguide:[95,0,0,"-"],discrepancy:[96,0,0,"-"],gradient_estimator:[97,0,0,"-"],variational_infer:[98,0,0,"-"],variational_world:[99,0,0,"-"]},"beanmachine.ppl.inference.vi.ADVI":{get_guide:[94,2,1,""]},"beanmachine.ppl.inference.vi.MAP":{get_guide:[94,2,1,""]},"beanmachine.ppl.inference.vi.VariationalInfer":{infer:[94,2,1,""],initialize_world:[94,2,1,""],step:[94,2,1,""]},"beanmachine.ppl.inference.vi.autoguide":{ADVI:[95,1,1,""],AutoGuideVI:[95,1,1,""],MAP:[95,1,1,""]},"beanmachine.ppl.inference.vi.autoguide.ADVI":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.autoguide.AutoGuideVI":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.autoguide.MAP":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.discrepancy":{kl_forward:[96,5,1,""],kl_reverse:[96,5,1,""]},"beanmachine.ppl.inference.vi.gradient_estimator":{monte_carlo_approximate_reparam:[97,5,1,""],monte_carlo_approximate_sf:[97,5,1,""]},"beanmachine.ppl.inference.vi.variational_infer":{VariationalInfer:[98,1,1,""]},"beanmachine.ppl.inference.vi.variational_infer.VariationalInfer":{infer:[98,2,1,""],initialize_world:[98,2,1,""],step:[98,2,1,""]},"beanmachine.ppl.inference.vi.variational_world":{VariationalWorld:[99,1,1,""]},"beanmachine.ppl.inference.vi.variational_world.VariationalWorld":{copy:[99,2,1,""],get_guide_distribution:[99,2,1,""],get_param:[99,2,1,""],set_params:[99,2,1,""],update_graph:[99,2,1,""]},"beanmachine.ppl.model":{RVIdentifier:[100,1,1,""],StatisticalModel:[100,1,1,""],functional:[100,5,1,""],get_beanmachine_logger:[100,5,1,""],param:[100,5,1,""],random_variable:[100,5,1,""],rv_identifier:[101,0,0,"-"],statistical_model:[102,0,0,"-"],utils:[103,0,0,"-"]},"beanmachine.ppl.model.RVIdentifier":{"function":[100,4,1,""],arguments:[100,3,1,""],is_functional:[100,4,1,""],is_random_variable:[100,4,1,""],wrapper:[100,3,1,""]},"beanmachine.ppl.model.StatisticalModel":{functional:[100,2,1,""],get_func_key:[100,2,1,""],param:[100,2,1,""],random_variable:[100,2,1,""]},"beanmachine.ppl.model.rv_identifier":{RVIdentifier:[101,1,1,""]},"beanmachine.ppl.model.rv_identifier.RVIdentifier":{"function":[101,4,1,""],arguments:[101,3,1,""],is_functional:[101,4,1,""],is_random_variable:[101,4,1,""],wrapper:[101,3,1,""]},"beanmachine.ppl.model.statistical_model":{StatisticalModel:[102,1,1,""],functional:[102,5,1,""],param:[102,5,1,""],random_variable:[102,5,1,""]},"beanmachine.ppl.model.statistical_model.StatisticalModel":{functional:[102,2,1,""],get_func_key:[102,2,1,""],param:[102,2,1,""],random_variable:[102,2,1,""]},"beanmachine.ppl.model.utils":{LogLevel:[103,1,1,""],get_beanmachine_logger:[103,5,1,""]},"beanmachine.ppl.model.utils.LogLevel":{DEBUG_GRAPH:[103,3,1,""],DEBUG_PROPOSER:[103,3,1,""],DEBUG_UPDATES:[103,3,1,""],ERROR:[103,3,1,""],INFO:[103,3,1,""],WARNING:[103,3,1,""]},"beanmachine.ppl.world":{BetaDimensionTransform:[104,1,1,""],World:[104,1,1,""],base_world:[105,0,0,"-"],get_default_transforms:[104,5,1,""],get_world_context:[104,5,1,""],init_from_prior:[104,5,1,""],init_to_uniform:[104,5,1,""],initialize_fn:[106,0,0,"-"],utils:[107,0,0,"-"],variable:[108,0,0,"-"],world:[109,0,0,"-"]},"beanmachine.ppl.world.BetaDimensionTransform":{bijective:[104,3,1,""],codomain:[104,3,1,""],domain:[104,3,1,""],forward_shape:[104,2,1,""],inverse_shape:[104,2,1,""],log_abs_det_jacobian:[104,2,1,""]},"beanmachine.ppl.world.World":{copy:[104,2,1,""],enumerate_node:[104,2,1,""],get_variable:[104,2,1,""],initialize_value:[104,2,1,""],initialize_world:[104,2,1,""],latent_nodes:[104,4,1,""],log_prob:[104,2,1,""],replace:[104,2,1,""],update_graph:[104,2,1,""]},"beanmachine.ppl.world.base_world":{BaseWorld:[105,1,1,""],get_world_context:[105,5,1,""]},"beanmachine.ppl.world.base_world.BaseWorld":{call:[105,2,1,""],update_graph:[105,2,1,""]},"beanmachine.ppl.world.initialize_fn":{init_from_prior:[106,5,1,""],init_to_uniform:[106,5,1,""]},"beanmachine.ppl.world.utils":{BetaDimensionTransform:[107,1,1,""],get_default_transforms:[107,5,1,""],initialize_value:[107,5,1,""],is_constraint_eq:[107,5,1,""]},"beanmachine.ppl.world.utils.BetaDimensionTransform":{bijective:[107,3,1,""],codomain:[107,3,1,""],domain:[107,3,1,""],forward_shape:[107,2,1,""],inverse_shape:[107,2,1,""],log_abs_det_jacobian:[107,2,1,""]},"beanmachine.ppl.world.variable":{Variable:[108,1,1,""]},"beanmachine.ppl.world.variable.Variable":{children:[108,3,1,""],distribution:[108,3,1,""],log_prob:[108,4,1,""],parents:[108,3,1,""],replace:[108,2,1,""],value:[108,3,1,""]},"beanmachine.ppl.world.world":{World:[109,1,1,""]},"beanmachine.ppl.world.world.World":{copy:[109,2,1,""],enumerate_node:[109,2,1,""],get_variable:[109,2,1,""],initialize_value:[109,2,1,""],initialize_world:[109,2,1,""],latent_nodes:[109,4,1,""],log_prob:[109,2,1,""],replace:[109,2,1,""],update_graph:[109,2,1,""]},beanmachine:{ppl:[1,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","property","Python property"],"5":["py","function","Python function"],"6":["py","data","Python data"],"7":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:property","5":"py:function","6":"py:data","7":"py:exception"},terms:{"0":[1,9,11,13,48,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,76,77,81,87,90,91,93,97,100,102,104,107,109],"001":[74,77],"007":72,"0149":72,"02434":81,"03431":[94,95],"05254":97,"1":[1,9,11,13,15,18,54,56,58,60,63,64,65,66,67,71,72,74,75,76,77,81,87,90,91,93,94,97,98,100,102,104,107,109],"10":[1,60,66,67,72,74,76,81,90],"100":[61,104,109],"1000":[1,60,66,67,81],"1000000":73,"1007":72,"1111":[71,72,81],"12":103,"1206":71,"1212":73,"1312":97,"14":[27,103],"1506":[94,95,97],"16":103,"1701":81,"1901":71,"1x1":32,"1x2":11,"2":[1,9,15,54,60,61,63,66,71,72,74,75,77,81,87,100,102],"20":103,"2009":72,"2011":71,"2014":[71,72,81],"2017":81,"2_26":72,"2x2":11,"3":[11,15,27,54,60,62,74,75,76,77,87],"30":103,"4":[54,60,61,62,87],"40":103,"4246":[71,72,81],"4693":73,"5":[48,74,76],"6":81,"6114":97,"8":[1,60,64,66,71,72,81],"abstract":[11,44,47,61,69,70,95,105],"boolean":[9,11,27,44],"case":[9,11,47,74,76,104,109],"class":[1,3,6,9,10,11,13,14,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,107,108,109],"default":[1,3,60,61,62,63,64,65,66,67,71,81,87,90,91,104,107,109],"do":[11,31,47,48,74,76],"enum":[15,54,60,93,103],"final":72,"float":[1,3,6,9,44,47,60,64,66,71,72,73,74,76,77,81,84,90,91,94,97,98],"function":[1,9,11,29,47,48,52,56,57,58,59,61,72,73,78,80,93,94,96,97,98,99,100,101,102,104,105,109],"import":78,"int":[1,3,6,9,11,12,29,34,35,36,37,41,44,46,47,60,61,62,63,64,65,66,67,71,72,74,76,78,81,87,89,90,91,93,94,97,98,104,109],"long":25,"new":[31,47,56,57,59,61,70,74,75,76,77,83,84,85,87,93,99,104,108,109],"return":[1,3,6,11,29,31,44,47,48,56,57,58,59,60,61,62,63,64,65,66,67,70,73,74,75,76,77,80,84,87,89,90,91,93,94,98,99,100,102,104,105,107,108,109],"static":[1,60,62,63,67,94,95,100,102],"throw":[11,47,61,87,104,109],"true":[1,4,9,11,39,47,56,57,58,60,61,62,63,64,65,66,67,71,72,81,93,104,107],"try":[44,47],"var":65,"while":[1,60,64],A:[1,9,11,44,47,48,60,61,66,72,78,80,81,86,93,94,95,98,99,104,105,106,107,109],And:11,As:[56,57,59],At:[47,87],But:[9,47],By:[1,60,63],For:[1,9,11,48,60,67,87],IF:22,If:[1,11,31,44,47,60,61,64,65,66,71,81,87,104,107,109],In:[11,104,109],It:[9,11,27,44,47,87],NO:15,NOT:9,No:[1,60,66,71,72,81],Not:[74,76],One:11,That:[11,47],The:[1,9,11,29,31,44,47,48,56,59,60,61,62,63,65,66,71,72,74,75,76,77,81,84,87,97,99,104,108,109],There:11,To:[1,47,60,63,67],__init__:[56,57,59],_ident:47,_instanc:[56,57,59],ab:[71,72,81,94,95,97],abc:[9,16,44,47,55],about:[1,60,63],abov:[1,60,63],absolut:9,acceler:[1,60,64,66,71,81],accept:[1,60,64,66,71,74,76,81,87],accept_log_prob:[69,74,76,84],access:65,accord:[9,87],accumul:[11,31,39,48],accumulate_graph:48,accumulate_input_nod:25,across:[65,93],activ:[60,62],actual:[11,48,60,62],ad:[6,31,47],adapt:[1,60,61,64,66,71,72,74,76,81,87],adapt_mass_matrix:[1,60,64,66,71,81],adapt_step_s:[1,60,64,66,71,81],adaptive_sampl:65,add:[6,9,11,18,104,109],add_addit:6,add_bernoulli:6,add_bernoulli_logit:6,add_beta:6,add_binomi:6,add_binomial_logit:6,add_bitand:6,add_bitor:6,add_bitxor:6,add_boolean:6,add_boolean_matrix:6,add_broadcast:6,add_categor:6,add_categorical_logit:6,add_chi2:6,add_choic:6,add_choleski:6,add_column_index:6,add_compl:6,add_const:6,add_constant_of_matrix_typ:6,add_constant_of_typ:6,add_constant_tensor:6,add_dirichlet:6,add_divis:6,add_elementwise_multipl:6,add_equ:6,add_error:16,add_exp2:6,add_exp:6,add_exp_product:6,add_expm1:6,add_fill_matrix:6,add_flat:6,add_floordiv:6,add_gamma:6,add_greater_than:6,add_greater_than_equ:6,add_group:65,add_halfcauchi:6,add_halfnorm:6,add_i:6,add_if_then_els:6,add_in:6,add_index:6,add_invert:6,add_is_not:6,add_item:6,add_less_than:6,add_less_than_equ:6,add_lkj_choleski:6,add_log10:6,add_log1mexp:6,add_log1p:6,add_log2:6,add_log:6,add_log_prob:6,add_logaddexp:6,add_logist:6,add_logsumexp:6,add_logsumexp_torch:6,add_logsumexp_vector:6,add_lshift:6,add_matrix_addit:6,add_matrix_compl:6,add_matrix_exp:6,add_matrix_log1mexp:6,add_matrix_log:6,add_matrix_multipl:6,add_matrix_neg:6,add_matrix_phi:6,add_matrix_scal:6,add_matrix_sum:6,add_mod:6,add_multi_addit:6,add_multi_multipl:6,add_multipl:6,add_natur:6,add_natural_matrix:6,add_neg:6,add_neg_r:6,add_neg_real_matrix:6,add_nod:6,add_norm:6,add_not:6,add_not_equ:6,add_not_in:6,add_observ:6,add_phi:6,add_poisson:6,add_pos_r:6,add_pos_real_matrix:6,add_pow:6,add_prob:6,add_probability_matrix:6,add_queri:6,add_real:6,add_real_matrix:6,add_rshift:6,add_sampl:6,add_simplex:6,add_squareroot:6,add_studentt:6,add_subtract:6,add_sum:6,add_switch:6,add_tensor:6,add_to_int:6,add_to_matrix:6,add_to_negative_r:6,add_to_negative_real_matrix:6,add_to_positive_r:6,add_to_positive_real_matrix:6,add_to_prob:6,add_to_r:6,add_to_real_matrix:6,add_transpos:6,add_uniform:6,add_vector_index:6,addit:[9,18,25],addition:[56,57,59],addition_fix:18,additionnod:9,adjust:71,advi:[94,95],after:[9,44],after_transform:[39,60,62],again:[11,47],against:[44,73,107],al:[1,60,74,75,76,77,90],algorithm:[1,60,61,62,63,64,66,70,71,72,81,89,90,91,92],algorithms_for_calculating_vari:72,alia:[13,65],all:[1,6,9,11,22,31,33,44,47,60,61,64,65,82,87,100,102,104,109],all_ancestor_nod:6,all_children:47,all_list_edit_memb:47,all_list_memb:47,all_nod:6,all_observ:6,all_of:47,allchildren:47,alllisteditmemb:47,alllistmemb:47,alloc:[56,57,59],allof:47,alltermchildren:47,alon:47,alpha:[1,6,9,20,60,72,73,74,75,76,77,90],alreadi:[104,109],also:[6,27,96,99,104,109],altern:[6,9,47],alwai:[44,47],always_matrix:11,always_replac:47,always_succe:47,alwaysmatrix:11,an:[1,4,9,11,15,24,27,29,31,42,44,47,54,56,57,58,59,60,61,62,63,65,72,104,106,107,109],analog:65,analysi:[9,11],analyt:[20,26],analyz:11,ancestor:[6,29],ancestors_first_graph_fix:29,andrew:[71,72,81],ani:[6,8,9,11,15,16,17,44,47,48,49,52,56,57,59,65],ann_assign:3,anoth:47,anypattern:[3,44],anyposrealmatrix:11,anyrealmatrix:11,anyrequir:11,anyth:[44,47],appear:9,appendix:81,appli:[29,47,72,104,107],applic:[47,87],ar:[1,6,9,11,22,27,31,33,39,44,47,48,56,57,58,59,80,84,87,100,102,104,109],arg:[3,11,17,52,56,57,58,59,69,71,74,76,82,84,104,106],arg_constraint:[56,57,58,59],argument:[1,3,11,48,52,100,101,102,104,109],arithmetic_graph_fix:30,arora:[1,60,74,75,76,77,90],around:[9,86],arrai:93,arviz:65,arxiv:[71,72,73,81,94,95,97],asid:47,assert:[104,109],assess_nod:[13,14,15,54],assign:[3,48],associ:[9,60,62],ast:[3,4,42,47,49],ast_assert:3,ast_boolop:3,ast_compar:3,ast_dict:3,ast_dictcomp:3,ast_for:3,ast_gener:3,ast_if:3,ast_index:3,ast_list:3,ast_listcomp:3,ast_lupl:3,ast_op:3,ast_pattern:[1,2,110],ast_return:3,ast_setcomp:3,ast_str:3,ast_tool:[1,2,110],ast_whil:3,at_least_onc:47,atom:44,atomicpattern:44,attach:11,attempt:[11,23,24,27,31,33,44,61,104,109],attr:3,attribut:[3,44],attributesubpattern:44,aug_assign:3,autoguid:[60,94],autoguidevi:[94,95],autom:[94,95],automat:[44,72,94,95],avail:[1,60,63,99],averag:[1,60,66,71,72,81],avoid:[47,94,96,98],az:65,b:[9,23,47],back:[47,61],bad_matmul_report:33,badmatrixmultipl:16,bar:[1,60,61,63,100,102],base:[1,6,9,10,11,13,14,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,107,108,109],base_constraint:107,base_infer:[1,60,63,64,66,89,90,91,110],base_propos:[1,60,61,63,64,66,68,70,71,82,89,90,91],base_single_site_mh_propos:[60,68,83,85,89],base_world:[1,99,104,109,110],basediagnost:1,baseexcept:87,baseinfer:[1,60,61,63,64,66,87,89,90,91],basepropos:[1,60,61,63,64,66,69,70,71,82,89,90,91],baserequir:[10,11,16,31],basesinglesitemhpropos:[70,83,85,89],baseworld:[99,104,105,109],basic:[31,71],batch:[56,57,58,59,80],batch_shap:[56,57,59],batch_siz:[56,57,59],bayesian:[20,26],bean:[7,16,22,31,33,49,60,62,100,102],beanstalk:48,beanstalk_common:[1,2,110],becaus:[9,11],befor:[47,61,94,98,104,109],begin:[46,65],behavior:[1,60,61,63,87,96],belief:9,bell:9,bernoulli:[9,11,20,48],bernoullibas:9,bernoullilogitnod:[6,9],bernoullinod:[6,9],best:31,beta:[1,6,9,11,20,60,74,75,76,84,90,104,107],beta_bernoulli_conjugate_fix:[20,30,36,39,60,62],beta_binomial_conjugate_fix:[20,30,36,39,60,62],beta_dist_from_mo:84,betadimensiontransform:[104,107],betancourt:[1,60,66,81],betanod:[6,9],between:[1,9,11,60,63,74,76],bigger:11,biject:[61,94,95,104,106,107],binari:[9,24,25],binary_compar:3,binaryoperatornod:9,bind_torch_instance_funct:52,binomi:[9,11,20],binomiallogitnod:[6,9],binomialnod:[6,9],binomialnodebas:9,binop:3,bit:9,bitandnod:9,bitornod:9,bitxornod:9,block:[1,60,63,64,66],bm:[1,60,61,62,63,100,101,102,104,109],bm_graph_build:[1,2,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,50,52,54,110],bm_to_bmg:[1,2,110],bmg:[6,9,11,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,40,48,52,60,62],bmg_infer:[1,60,110],bmg_node:[1,2,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,31,32,33,34,35,36,37,41,43,48,50,52,54,55,110],bmg_node_typ:[1,2,110],bmg_old:14,bmg_origin:13,bmg_raw:39,bmg_requir:[1,2,110],bmg_type:[1,2,6,10,16,31,43,110],bmgelementtyp:11,bmgerror:[16,29,50],bmginfer:[60,62],bmglatticetyp:[6,10,11,16,31,43],bmgmatrixtyp:[6,11,16],bmgnode:[6,8,9,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,31,32,33,34,35,36,37,41,43,48,50,52,54,55],bmgraphbuild:[6,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,50,52,54],bmgruntim:48,bodi:3,bool:[1,4,6,8,9,11,14,15,16,18,22,28,29,30,31,33,39,43,44,46,47,51,52,54,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,81,93,107],bool_arithmetic_fix:21,bool_comparison_fix:22,boolarithmeticfix:21,boolcomparisonfix:22,booleanmatrix:11,booleannod:[6,9],boolop:3,boolpattern:44,both:[9,11,25,44,47],bottom:[11,47],bottom_up:47,bound:11,broadcast:[1,2,56,57,59,110],broadcast_fnc:12,broadcast_shap:59,broadcastmatrixtyp:11,broadcastnod:[6,9],build:[4,29],builder:[6,22,31,33,38,39,48,49],burn:[60,62],c:[3,11,23,47,48,60,62,65],cache_s:[104,107],calcul:[70,72],call:[3,9,11,17,44,46,48,56,57,59,60,62,100,102,105],call_to:3,callabl:[1,12,13,15,17,18,19,20,21,22,23,24,25,26,29,30,32,33,44,47,48,49,52,60,61,63,73,78,94,97,98,99,100,101,102,104,109],callback:[94,98],callstack:17,can:[1,9,11,20,25,26,44,47,60,63,72,104,109],can_be_tensor:54,cannot:[1,31,60,63],canonicalize_funct:52,carlo:[1,60,62,64,66,67,71,72,74,75,76,77,81,87,90,94,98,104,109],categor:[1,9,60,92,104,106],categoricallogitnod:[6,9],categoricalnod:[6,9],categoricalnodebas:9,cauchi:9,caus:11,cdf:9,chain:[25,60,61,62,65],chain_result:65,chainto:65,chang:[1,60,62,63,108],character:9,check:[11,29,44,47,56,57,59,104,107],check_constraint:107,chi2:9,chi2nod:[6,9],child:47,children:[46,47,108],choic:9,choicenod:[6,9],choleski:9,choleskynod:9,choos:47,classmethod:[104,109],clear:11,clone:13,cloner:[13,14,15,54],cluster:9,co:72,code:[34,35,37,42,48,60,62],codomain:[104,107],coin:[9,48],collect:[104,109],column:[6,9,11],columnindexnod:9,combin:[1,44,47,60,63],combined_rul:47,come:9,common:9,compar:3,comparison:[9,22],comparisonnod:9,compil:[0,1,60,62,63,64,66,71,78,81,110],complement:[9,18],complementnod:9,complex:11,compos:47,composetransform:[73,74,77],composit:[1,60,63],compositional_inf:[1,60,110],compositionalinfer:[1,60,63],comput:[9,11,48,65,72,73,74,75,76,77,82,93,104,107],compute_alpha:[74,77],compute_alpha_beta:[74,75],compute_beta_priors_from_accepted_lr:[74,76],compute_eigvals_eigvec:73,compute_first_gradi:73,compute_hessian:73,computesupport:53,concaten:86,concentr:[6,9,84],concept:47,conceptu:[1,60,66,81],concis:11,condit:[6,9,11,29,47,70],conditional_graph_fix:29,configur:[1,60,63],conjug:[20,26],conjugacy_graph_fix:30,conjunct:108,consequ:[6,9,47],consid:47,consist:[60,62],console_level:[100,103],constant:[1,6,9,11,48,60,64],constantbooleanmatrixnod:[6,9],constantnaturalmatrixnod:[6,9],constantnegativerealmatrixnod:[6,9],constantnod:[6,9],constantpositiverealmatrixnod:[6,9],constantprobabilitymatrixnod:[6,9],constantrealmatrixnod:[6,9],constantsimplexmatrixnod:[6,9],constanttensornod:[6,9],constrain:[72,104,106,107],constraint:[104,107],construct:[47,60,62,94,95],consum:[16,31],contain:[1,4,9,47,60,62,67,72,99,104,107,108,109],content:[39,110,111],context:[11,50,61,104,109],continu:[1,60,63,104,106],control:9,conveni:11,convers:9,convert:[11,38,86,93],convex:72,copi:[14,99,104,109],copy_and_replac:[1,2,14,15,54,110],copy_transform:[1,2,110],copycontext:15,copygraph:14,core:65,correl:9,correspond:[1,60,61,62,63,64,66,67,72,89,90,91,94,98,100,101,104,106],could:[9,11],count:[6,9],covari:80,cover:96,cpu:[94,97,98],creat:[6,9,39,48,56,57,59,100,102],create_graph:73,csiszar:96,ctx:3,cumul:9,current:[60,62,70,71,74,76,81,87,94,98,99,104,109],current_sit:17,curv:9,d:[9,73],d_f:96,dag:11,data:[6,56,59,65],dataset:65,debug:[4,47],debug_graph:103,debug_propos:103,debug_upd:103,declar:[16,100,102],decomposit:80,decor:[1,100,102],decorator_list:3,decreas:[20,25,26],deduc:[60,62],dedupl:9,def:[1,48,100,102,104,109],default_namespac:65,defin:[1,11,70,100,102],delai:47,delet:[20,26,47],delta:[1,56,60,66,72,81,94,95,110],denot:72,densiti:[56,57,58,59,80],depend:[11,47],deprec:61,depth:[1,60,66,81],deriv:[44,56,57,59,97],descend:[29,47],descend_until:47,describ:[71,81],descript:39,desir:[56,57,59],det:[72,104,107],detach:93,detach_sampl:93,detect:16,determin:86,determinist:[100,102],devector:15,devectorizer_transform:[1,2,110],devectorizetransform:15,develop:[60,62],deviat:9,devic:[94,97,98],df:[6,9],diagnost:[1,65],diagnosticstool:65,diagon:[72,74,77],dict:[1,6,17,34,35,36,37,44,46,47,48,52,60,61,62,63,65,67,72,86,93,94,95,97,98,99,104,109],dict_in:86,dictionari:[65,72,86,93,104,109],dicttovecconvert:86,dicttransform:72,die:9,differ:[1,9,47,60,63,107],differenti:[94,95],dim:[6,9,57,93],dimens:[56,57,59,93],dimension:11,direct:[9,11],directli:48,dirichlet:[9,74,77,84],dirichlet_dist_from_mo:84,dirichletnod:[6,9],disabl:[60,62],discard:[60,62],discrep:[60,94,98],discrepancy_fn:[94,97,98],discret:[1,60,63,92,104,106],displai:[61,78],dist_to_rv_id:34,dist_typ:8,distanc:[74,76],distinct:9,distrib:[93,94,95],distribut:[0,1,9,48,52,60,61,62,67,70,72,73,74,75,76,77,80,81,83,84,85,91,92,94,95,98,99,100,102,104,106,107,108,109,110],distribution_to_nod:52,distribution_typ:16,distributionnod:[6,8,9,52],distributiontyp:8,div_can_be_tensor:54,diverg:[96,97],divis:9,divisionnod:[9,54],do_adapt:[69,71,74,76,82,84],do_special_call_always_stochast:52,do_special_call_maybe_stochast:52,doc:72,doe:[11,31,47,48,56,57,59,60,62,71,81],doi:72,domain:[104,107],dot:[4,39,60,62],down:47,down_then_up:47,draw:72,drawn:[9,65,81],dual:[1,60,66,71,72,81],dualaverageadapt:72,dump:39,dure:[1,11,20,25,26,48,60,62,64,65,72,87,93,100,102,108],dx:[72,104,107],dy:[72,104,107],dynam:[1,60,64,71],e:[1,56,59,60,63,94,98,100,102],each:[1,9,11,29,47,60,61,62,64,66,72,87,90,94,98],edg:[6,11,16,20,25,26,29,31],edge_error_pass:29,edge_requir:39,edgerequir:10,edit:47,effect:47,effective_sample_s:1,effort:31,eig_val:80,eig_vec:80,eigen:[73,80],either:[9,11,44,47,48,61],either_or_both:47,elbo:[94,96,98],element:[6,9,44,47,107],element_typ:11,elementtyp:[15,54],elementwisemultiplynod:9,elimin:32,ellipsi:[1,60,63],els:[47,65],elt:3,emit:48,empir:[1,60,67],empti:[44,47,59],empty_list:44,emptylistpattern:44,en:72,enabl:[1,60,63,93],encapsul:44,energi:[1,60,66,72,81],engin:[9,44,47,62],ensur:6,entir:[39,84],entri:86,enumer:[15,39,54,104,109],enumerate_nod:[104,109],equal:[3,11,107],equalnod:9,equival:[22,33,48,59,71],error:[11,16,27,29,31,42,61,87,103,104,109],error_report:[1,2,13,14,15,28,29,30,31,33,50,110],errorreport:[13,14,15,16,28,29,30,31,33],estim:[72,94,95,97,98],et:[1,60,74,75,76,77,90],eta:[6,9],euclidean:72,evalu:[56,57,58,59,80,94,96,98,104,109],event:46,event_dim:[56,57],event_list_to_report:46,everi:[1,9,29,31,44,47,48,60,61,63,64,66,89,90,91,100,102],evid:9,exact:11,exactli:11,exampl:[1,9,11,60,63,67,104,109],example_dict:86,except:[11,42,47,87,93],exclud:[74,77],exclus:96,execut:[29,47,48,87],execution_context:[1,2,6,16,110],executioncontext:[6,17],exist:[47,56,57,59],exp2nod:9,exp:[9,23],expand:[56,57,59],expect:[47,84],expect_success:47,expens:47,experiment:[60,62,71,78,81],experimental_inductor_compil:[1,60,64,66],expm1:9,expm1nod:9,expnod:9,exponenti:9,expproductfactornod:[6,9],expr:3,express:[4,11,23,47],extend:59,extens:9,f:[1,52,78,79,94,96,97,98,100,102],factor:[6,9,11,56,59,94,98],factor_typ:8,factori:108,factornod:[8,9],factortyp:8,fail:[29,44,47],failpattern:44,failur:44,fall:61,fals:[1,9,11,39,56,58,60,61,62,64,65,66,67,71,72,73,74,76,81,107],famili:[1,60,63],featur:48,field:[13,65,108],fifth:48,file_level:[100,103],fillmatrixnod:[6,9],find:[11,27,47,74,76],finish:46,finish_adapt:[69,71,82],first:[11,44,47,48,56,57,59,73],first_grad:[74,75],first_gradi:73,first_match:47,firstmatch:47,fit:11,five:48,fix:[1,11,26,27,31,33,60,64,104,109],fix_addit:[1,2,110],fix_arithmet:[1,2,110],fix_beta_conjugate_prior:[1,2,110],fix_bool_arithmet:[1,2,110],fix_bool_comparison:[1,2,110],fix_logsumexp:[1,2,110],fix_matrix_scal:[1,2,110],fix_multiary_op:[1,2,110],fix_normal_conjugate_prior:[1,2,110],fix_observ:[1,2,110],fix_observe_tru:[1,2,110],fix_problem:[1,2,18,19,20,21,22,23,24,25,26,31,32,33,110],fix_requir:[1,2,110],fix_transpos:[1,2,110],fix_unsupport:[1,2,110],fixer:[18,19,20,23,24,25,26,27,29,32],fixpoint_graph_fix:29,flag:71,flat:[1,9,56,71,110],flatnod:[6,9],flatten:[13,72,86],flip:[9,48],floatpattern:44,floordivnod:9,flow:9,follow:[11,72,81,87],foo:[1,60,63,100,102,104,109],forc:96,fork:61,forkserv:61,form:[23,48],forward:[96,104,107],forward_shap:[104,107],found:[11,99,104,109],four:48,fourth:48,fraction:[74,76],fragment:[60,62],framework:[60,62],fresh_nam:49,from:[1,6,9,11,20,26,44,47,60,61,62,65,67,71,72,81,87,92,94,96,98,104,106,107,108],full:[1,60,67,93],full_mass_matrix:[1,60,64,66,71,72,81],func:[3,17,52],function_def:3,functioncal:[16,17],g:[1,100,102],gamma:[9,74,75,84],gamma_dist_from_mo:84,gammanod:[6,9],gaussian:[9,94,95],gb:29,gelman:[1,60,66,71,72,81],gen_bm_python:[1,2,110],gen_bmg_cpp:[1,2,110],gen_bmg_graph:[1,2,110],gen_bmg_python:[1,2,110],gen_build:[1,2,110],gen_dot:[1,2,110],gen_mini:[1,2,110],gener:[1,3,9,11,55,56,57,58,59,60,61,62,67,72,80,86,87,95],generate_build:38,generatebuild:38,generatedgraph:36,generatedgraphcpp:35,generatedgraphpython:37,get:[9,20,26,65,87,99,104,107],get_beanmachine_logg:[100,103],get_chain:65,get_children:47,get_default_transform:[104,107],get_edge_label:41,get_error:29,get_func_kei:[100,102],get_guid:[94,95],get_guide_distribut:99,get_log_likelihood:65,get_node_error_label:41,get_node_label:41,get_num_sampl:65,get_param:99,get_propos:[1,60,61,63,64,66,89,90,91],get_proposal_distribut:[70,74,75,76,77,83,84,85],get_subtest:44,get_valu:3,get_vari:[65,104,109],get_world_context:[104,105],give:[56,58],given:[9,11,29,31,44,47,74,75,77,84,104,107,108],global:[1,60,64,66],globalhamiltonianmontecarlo:[1,60,64],globalnouturnpropos:[1,60,63],globalnouturnsampl:[1,60,63,66],go:[11,74,76],goal:11,good:11,gradient:[1,60,73,74,75,76,77,90,94,97,98],gradient_estim:[60,94],graph:[1,4,6,7,8,9,11,16,20,22,25,26,29,31,33,36,38,39,48,49,60,61,62,63,99,104,109],graph_label:[1,2,110],graphic:[104,109],graphviz:[60,62],greater:11,greater_than:3,greater_than_equ:3,greaterthanequalnod:9,greaterthannod:9,greatest:11,greatli:[20,25,26],guid:[94,95,98,99,100,102],ha:[9,11,31,44,47,48,56,59],had:9,half:[9,74,75],halfcauchynod:[6,9],halfnormalnod:[6,9],hamiltonian:[1,60,64,66,71,72,81],handl:[47,87],handle_dot_get:48,handle_dot_set:48,handle_for:48,handle_funct:48,handle_if:48,handle_index:48,handle_not_in:48,handle_slic:48,handle_subscript_assign:48,happen:47,hard:73,has_enumerate_support:[56,58],has_rsampl:[56,57,58],hast:[1,60,70,91,92],have:[9,11,48,94,98],head:[9,44],head_tail:44,headtail:44,healthi:65,heavier:9,help:[94,98],helper:[78,93,105],hessian:[73,74,77],hessian_diag:[74,75],hessian_fn:73,hessian_of_log_prob:73,hierarch:4,high:[6,9,48,60,62],highli:[60,62],hmc:[1,60,66,71,72,81],hmc_infer:[1,60,110],hmc_propos:[60,68,81],hmc_util:[60,68],hmcpropos:[71,81],hoffman:[1,60,66,71,72,81],hot:11,how:[11,47,60,93],howev:[11,47,84],html:72,http:[71,72,73,81,94,95,97],human:4,hyperparamet:[1,60,66],i:[1,41,56,59,60,63,67,71,74,77],id:3,id_from_cal:3,idea:31,ident:[9,72],identifi:[100,102],identity_fnc:12,identity_graph_fix:29,identity_transpose_fix:32,ie:[104,109],if_exp:3,if_stat:3,if_then:47,iff:47,ifthenelsenod:9,ignore_div_zero:47,ignore_runtime_error:47,ignore_value_error:47,ignoreexcept:47,implement:[1,11,47,48,60,61,62,63,64,66,71,72,81,89,90,91,100,102],imposs:27,impossibleobserv:16,improp:[56,58],in_flight:[46,48],includ:[1,39,60,62,65,90],include_adapt_step:65,inclus:96,incom:11,increas:[1,60,64,66,72,81],indent:40,independ:[1,60,63,90,107],independentconstraint:[104,107],index:[3,9,29,48],indexnod:9,indic:[9,11,60,62,65,71,81,107],indirectli:48,individu:84,inf:[73,87],infer:[0,1,9,20,25,26,100,102,104,107,108,109,110],inference_data:65,inference_dict:[1,60,63],inference_typ:[60,62],inferencedata:65,inferencetyp:[60,62],infimum:11,infin:93,infinit:61,info:[100,103],inform:48,inherit:[61,70],init_fn:[1,100,102],init_from_prior:[99,104,106,109],init_to_uniform:[61,104,106,109],initi:[61,71,72,78,81,87,89,94,95,98,99,104,106,107,109],initial_epsilon:72,initial_posit:72,initial_step_s:[1,60,64,66,71,81],initial_world:[71,81,87],initialize_fn:[1,61,99,104,109,110],initialize_from_prior:107,initialize_momentum:72,initialize_valu:[104,107,109],initialize_world:[94,98,104,109],innod:9,input:[6,9,11,13,31,48,104,107],input_s:[12,16],inputlist:9,insert:11,instanc:[11,44,48,56,57,59,107],instanti:[104,109],instead:[48,61,81],integ:[9,44],intend:47,interest:[9,72],interfac:[60,62],intern:[42,60,62,104,109],internal_error:[1,2,110],internalerror:42,interop:48,intpattern:44,introduc:[11,47,72,81],introduct:[1,60,66,81],inv:72,invari:6,invers:[9,72,73,84,104,107],inverse_shap:[104,107],invertnod:9,invok:[78,94,98,105],involv:[19,24,48],is_accept:[74,76],is_ani:44,is_atom:11,is_bool:43,is_constraint_eq:107,is_convertible_to:11,is_end_window:72,is_fail:[44,47],is_funct:[1,100,101],is_in_window:72,is_leaf:9,is_logit:9,is_matrix:43,is_natur:43,is_neg_r:43,is_on:[9,11],is_pos_r:43,is_prob_or_bool:43,is_random_vari:[1,100,101],is_real:43,is_scalar:[51,73],is_singleton:11,is_special_funct:52,is_special_tensor_bound_instance_method:52,is_success:[44,47],is_supported_by_bmg:8,is_valid:73,is_zero:[9,11],isnod:9,isnotnod:9,item:[9,47],item_count:9,itemcount:9,itemnod:9,iter:[1,3,9,47,48,60,61,63,72,87,94,95,104,107,109],ith:[74,77],its:[1,6,11,47,60,62,64,70,80,99,104,105,109],jacobian:[72,104,107],jargon:48,jit_backend:[71,81],joint:[82,87,104,109],jointli:[1,60,63,64,66],json:45,json_to_perf_report:45,just:[9,44],keep:[47,104,109],keepdim:[6,9],kei:[1,3,61,72,86,100,101,102],kernel:[1,60,66,87],keytyp:86,keyword:3,kind:[11,46],kl:96,kl_forward:96,kl_revers:[94,96,98],know:[9,11,47],known:96,knownfunct:52,kw_default:3,kwarg:[3,17,48,52,59,69,71,74,76,82,84,89,94,95,104,109],kwonlyarg:3,l:9,label_edg:[39,60,62],lambda:[94,98],languag:[39,48,60,62],larger:11,largest:11,last:47,latent:[1,60,63,67,104,109],latent_nod:[104,109],latter:11,lattic:11,lattice_to_bmg:11,lattice_typ:[1,2,10,18,19,21,22,24,31,32,33,110],latticetyp:[10,18,19,21,22,24,31,32,33,43],lazili:78,lead:[1,20,25,26,60,64,66,81],leaf:6,leapfrog:[1,60,64],learn:[1,60,63,72,74,76,100,102],least:47,leav:47,left:[3,6,9,11,48],left_typ:16,length:[1,60,64,66,71,72,81],less_than:3,less_than_equ:3,lessthanequalnod:9,lessthannod:9,let:[11,65],level:[48,103],lift:[42,48],lifted_map:48,liftedcompilationerror:42,like:[9,47,73,100,102],likelihood:[1,20,26,60,67],limit:[60,62],list:[1,3,6,9,10,12,13,14,15,16,25,29,34,41,44,46,47,48,49,52,54,60,61,62,63,64,65,66,67,82,89,90,91,93,104,107,109],list_al:44,list_ani:44,list_member_children:47,list_pattern:44,listal:44,listani:44,listedit:47,listpattern:44,liter:61,lkj:9,lkjcholeski:9,lkjcholeskynod:[6,9],ll:[47,48],load_bar:[60,93],loc:[6,9],log10nod:9,log1mexp:9,log1mexp_fix:19,log1mexpnod:9,log1pnod:9,log2nod:9,log:[9,23,47,56,57,58,59,72,74,76,80,82,96,97,100,103,104,107,109],log_abs_det_jacobian:[72,104,107],log_dens:[56,57],log_factor:[56,59],log_likelihood:65,log_prob:[9,56,57,58,59,80,93,96,104,108,109],logaddexp:9,logaddexpnod:[6,9],loger:9,logger:[47,100,103],logic:[9,44],logisticnod:9,loglevel:[100,103],logll_result:65,lognod:9,logp:[94,98],logprob:108,logprobnod:[6,9],logq:[94,98],logsumexp:[9,23],logsumexp_fix:23,logsumexpnod:[6,9],logsumexptorchnod:[6,9],logsumexpvectornod:[6,9],logu:96,long_nam:11,look:47,loop:[60,93],loss:[94,97,98],low:[6,9],lower:[3,11,48],lshiftnod:9,m:[71,72],machin:[7,16,22,31,33,49,60,62,100,102],made:31,magnitud:84,maintain:[6,108],make:[29,31,61,62,104,109],make_logg:47,manag:[104,109],mani:47,manipul:[104,109],manual:72,map:[59,60,62,65,73,94,95,97,99,103,104,109],margin:[1,60,67],marker:9,mass:[1,56,57,58,59,60,64,71,72,80,81,96],massmatrixadapt:72,match:[3,44,47,94,95,107],match_ani:44,match_everi:44,matchani:44,matcheveri:44,matchresult:44,math:9,matric:[9,11,72],matrix:[1,6,9,11,24,54,60,64,71,72,73,81],matrix_s:72,matrix_scal:24,matrix_scale_fix:24,matrixaddnod:9,matrixcomplementnod:9,matrixexpnod:9,matrixlog1mexpnod:9,matrixlognod:9,matrixmultiplicationnod:[9,16],matrixnegatenod:9,matrixphinod:9,matrixscalenod:9,matrixsumnod:9,matthew:[71,72,81],max:[74,77],max_delta_energi:[1,60,66,81],max_init_retri:61,max_lr_num:[74,76],max_retri:[104,109],max_tree_depth:[1,60,66,81],maximum:[1,60,66,74,77,81,94,95],mb:11,mc:[65,72],mc_approx:[94,98],mcmc:[1,60,64,71,74,75,76,77,87,90,104,109],mean:[9,56,57,60,62,74,76,80],mechan:[71,72],meet:[1,11,31,47,60,74,75,76,77,90],meet_requir:31,member:[9,47],memoiz:48,memoizationkei:48,memori:[48,56,57,59],merg:93,merge_dict:93,messag:42,met:11,metadata:[104,108,109],method:[1,56,57,59,60,61,62,63,65,72,74,75,76,77,87,90,104,109],metric:72,metropoli:[1,60,70,91,92],mh:87,michael:[1,60,66,81],might:[9,11,48],min_alpha_valu:[74,77],minim:[11,94,96,98],mint:9,minu:9,mn:11,mode:[94,95,96],model:[0,1,6,9,16,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,104,105,108,109,110],modifi:47,modnod:9,modul:[110,111],moment:[74,76],momentum:72,monoton:72,mont:[1,60,62,64,66,67,71,72,74,75,76,77,81,87,90,94,98,104,109],monte_carlo_approximate_reparam:[94,97,98],monte_carlo_approximate_sf:97,monte_carlo_sampl:[1,60,61,62,67,110],montecarlosampl:[1,60,61,62,65,67],more:[1,11,44,47,60,63],move:70,mp:11,mp_context:61,mr:11,msg:3,mu:[1,6,9,26,84,100,102],much:[60,93],mult_can_be_tensor:54,multi:[1,60,64],multiari:[18,25],multiary_addition_fix:25,multiary_multiplication_fix:25,multiaryoperatorfix:25,multinomi:[1,60,66,81],multinomial_sampl:[1,60,66,81],multipl:[1,9,11,19,24,25,60,61,63,66,93],multipli:11,multiplicationnod:[9,54],multiprocess:61,multivari:80,multivariatenorm:72,must:[1,9,11,31,44,47,60,63],must_be_matrix:11,mutablemap:99,mutat:[11,48],n:[3,9,25],name:[3,31,44,47,48,49,52],name_const:3,namedtupl:65,namespac:65,nan:73,nativ:48,natur:[9,11],naturalmatrix:11,naturalnod:[6,9],ndarrai:93,neal:[1,60,64,71],need:[11,47,56,57,59,100,102,104,107,109],neg:[9,11,19,73,94,96,98],neg_hessian:73,neg_neg_fix:19,negat:[9,18,44],negate_can_be_tensor:54,negatenod:[9,54],negative_real_multiplication_fix:19,negativerealmatrix:11,negativerealnod:[6,9],nested_if_same_cond_fix:19,nested_matrix_scale_fix:24,nesterov:72,net:47,new_input:[13,14,15,54],newtonian:[1,60,62,74,75,76,77,90],newtonian_monte_carlo_util:[60,68],next:[70,81,87],nim:[1,60,74,75,76,77,90],nmc:[60,62,68],nnc:[1,60,63,64,66,68,71,81],nnc_compil:[1,60,63,64,66,71,81],nnc_jit:[78,79],no_dist_sampl:34,node:[4,6,8,9,10,11,13,14,15,16,17,20,22,24,25,26,27,29,31,33,39,41,43,47,48,49,50,54,55,70,73,74,75,76,77,83,84,85,99,104,105,109],node_error_pass:29,node_fix:29,node_fixer_first_match:29,node_loc:[16,17],node_needs_transform:13,node_s:39,node_to_func_id:34,node_to_graph_id:[35,36,37],node_to_var_id:34,node_typ:[6,16,39],node_v:[72,73],node_var:[74,77],nodefixererror:[18,19,20,21,22,23,24,25,26,29,32,33],nodetransform:[13,14,15,54],non:[1,9,60,61,63,64,66,89,90,91],none:[1,6,16,17,18,19,20,21,22,23,24,25,26,29,32,33,40,42,44,45,46,47,48,55,56,57,59,60,61,63,65,67,69,71,72,73,74,76,78,79,82,84,87,93,94,98,99,104,109],nonepattern:44,nonnorm:[56,59],nor:71,noreturn:87,norm:84,normal:[1,9,26,48,60,80,91,100,102,104,109],normal_eig:[60,68],normal_normal_conjugate_fix:[26,30,36,39,60,62],normaleig:80,normalnod:[6,9],not_equ:3,notat:72,note:[9,11,47,48,60,62],notequalnod:9,noth:[44,47],notinnod:9,notnod:9,now:11,np:[59,93],num:3,num_adaptive_sampl:[1,60,61,62,63,64,65,66,71,72,81,87,89,90,91],num_chain:[60,61,62],num_sampl:[1,60,61,62,67,87,94,97,98],num_step:[94,98],number:[1,9,11,13,20,25,26,60,61,62,63,65,67,71,81,87,94,98,104,109],numel:[56,59],numer:[1,60,66,81,103],numpi:93,nut:[72,81],nuts_infer:[1,60,110],nuts_propos:[60,68],nutspropos:81,obei:48,object:[1,3,6,9,10,11,13,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,44,45,46,47,48,49,50,52,60,61,62,67,69,72,94,98,100,101,102,104,105,108,109],obs_queri:[1,60,67],observ:[1,6,9,16,20,26,27,29,34,48,60,61,62,63,64,65,66,67,89,90,91,94,95,97,98,99,104,109],observations_fix:27,observe_true_fix:28,off:[60,93],oh:11,onc:[11,20,26,29,47],one:[1,11,29,44,47,60,66,67,94,98],one_child:47,onechild:47,onehotmatrix:11,onelistmemb:47,onli:[11,19,47,48,60,62,65,84],onlin:72,only_ordinary_argu:52,op:3,oper:[6,9,22,25,33,74,76],operand:[3,6,9,22,48],operator_typ:8,operatornod:[8,9],operatortyp:8,optim:[1,9,60,62,94,98,100,102],option:[1,3,9,12,13,14,15,17,29,42,44,45,46,47,48,50,54,60,61,63,65,67,73,78,87,94,98,99,104,105,109],or_els:47,order:[1,11,39,47,60,74,75,76,77,86,90],ordinari:24,orels:[3,47],org:[71,72,73,81,94,95,97],origin:[13,14,15,47,48,54,93,99,104,109],original_except:42,original_nod:54,orphan:39,other:[3,11,48,86],otherwis:[44,47,65,99,104,106,107],our:[1,9,11,60,63,74,76],out:[86,93],outcom:9,output:[6,9,11,47,60,93,104,107],outsid:[104,109],overrid:[1,56,57,59,60,63,70],overshrink:[94,98],own:[1,60,64],p:[1,9,11,72,78,96,100,102],packag:[110,111],page:[1,60,63],pair:[20,26,47,72],parallel:61,param:[1,59,73,97,99,100,102],paramet:[1,9,20,26,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,80,81,82,84,86,87,89,90,91,93,94,96,98,99,100,102,104,106,107,109],parent:[13,29,46,47,100,102,108],partial:47,particular:[47,60,62,74,76,100,102],pass:[1,29,47,56,58,60,63],path:[1,60,66,71,72,81],pathwis:97,pattern:[1,2,3,47,110],pattern_rul:47,patternbas:[3,44,47],patternrul:47,pdf:[73,97],peek:17,per:[1,60,67,94,98],perform:[20,25,26,60,61,62,94,95,98],performance_report:[1,2,110],performancereport:45,phase:[11,48],phi:[6,9],phinod:9,pick:[74,76],pleas:[1,60,61,62,63],plu:71,point:[9,94,95],poisson:9,poissonnod:[6,9],pop:17,popul:[56,57,59],portion:48,posit:[1,9,11,19,60,72,90],positiver:11,positiverealmatrix:11,positiverealnod:[6,9],possibl:[9,11,31,47,94,95],post:47,post_rul:47,posterior:[1,20,26,60,61,65,67,94,95,104,109],posteriori:[94,95],potenti:47,powernod:9,ppl:[0,110,111],pre:47,pre_rul:47,predic:44,predicatepattern:44,predict:[1,60,110],prefix_list:49,preserv:[104,107],primal:72,primit:[60,62,108],print:[60,93],print_graph:4,print_python:4,print_tre:4,prior:[1,9,20,26,56,58,60,67,83,84,85,94,98,99,104,106,107],prob:[1,18,60,64,71,74,76,82,104,109],probabilitymatrix:11,probabilitynod:[6,9],probabl:[1,6,9,11,31,48,56,57,58,59,60,66,70,80,81],problem:[11,72],process:[9,61],produc:[4,9,29,38,44,47,60,62],profil:[1,2,110],profilerdata:46,profilereport:46,program:[7,9,38,48,49,60,62],progress:[29,61],progress_bar:[1,60,67],project:[44,47],projection_rul:47,properti:[1,9,56,57,65,72,100,101,104,108,109],proport:84,propos:[1,60,61,63,64,66,87,89,90,91,92,110],proposer_class:89,provid:[31,56,57,59,61,87,107],purpos:65,push:17,put:11,py:[56,57,59],pyro:[56,59],python:[4,9,11,48,60,62,65],pytorch:93,q:96,queri:[1,6,9,29,34,35,36,37,48,60,61,62,67,94,95,98,100,102,104,109],queries_to_guid:[94,97,98,99],query_sampl:1,query_to_query_id:[35,36,37],r:[11,72,78],r_hat:1,radford:[1,60,64,71],rais:59,raise_error:16,random:[1,48,60,62,63,64,65,66,67,72,87,90,91,100,101,102,104,105,108,109],random_vari:[1,60,64,67,100,102,104,109],randomli:72,rang:[1,60,67],rate:[6,9,74,76],rather:9,ratio:87,re:[11,74,75,76,77],readabl:4,real:[1,9,11,19,56,57,58,59,60,72,74,76,90,104,107],real_space_alpha:[1,60,90],real_space_beta:[1,60,90],realmatrix:11,realnod:[6,9],realspacetransform:72,receiv:52,recent:6,reconstruct:86,record_node_cal:17,recurs:47,recurses:47,reduc:[20,26],refer:[48,71,72,81,100,102],regular:72,reject:87,remov:[6,47],remove_leaf:6,remove_nod:6,reparameter:[56,57,58,97],repeat:[56,57,59],repeatedli:[29,47],replac:[1,22,33,47,60,67,94,98,104,108,109],report:[11,16,27,31,42],repres:[1,9,11,31,44,47,48,56,59,60,61,62,65,74,76,100,101,104,107,109],represent:4,request:[60,62],requir:[10,11,16,27,31,47,74,76,81],requirement_to_typ:11,requirements_fix:31,requirementsfix:31,resampl:[104,109],resiz:59,resolv:11,respect:73,rest:[1,60,64],restrict:[9,11,65],result:[11,44,47,60,62,65,96],retain_graph:73,revers:96,rewrit:[18,19,23,24,47],rewritten:47,right:[3,6,9,11,48],right_typ:16,roll:9,root:47,roughli:81,row:[6,9,11,74,77],rsampl:[56,57,58],rshiftnod:9,rtype:59,rule:[1,2,11,48,110],rule_mak:47,ruledomain:47,ruleresult:47,run:[44,47,61,65,71,81,82,87,104,109],run_in_parallel:61,runtim:[1,2,60,62,110],rv:[65,99,104,106],rv_identifi:[1,6,9,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,100,102,104,105,108,109,110],rv_map:48,rv_to_queri:6,rvdict:[1,60,61,67,104,109],rvidentifi:[1,6,9,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,100,101,102,104,105,108,109],s10107:72,s1:47,s2:47,s:[1,3,11,31,47,51,56,57,59,60,61,63,64,65,66,67,72,87,89,90,91,96],s_online_algorithm:72,sa:48,safe_log_prob_sum:93,sai:27,same:[1,9,11,31,44,60,65,67,72,104,109],sampl:[1,6,9,11,20,26,29,48,56,57,58,59,60,61,62,65,66,67,70,71,72,80,81,87,93,94,96,98,104,106,107,108,109],sample_shap:[1,56,57,58,59,60,67,80],samplenod:[6,9],sampler:[1,60,61,64,66,71,72,81,110],scalar:[6,9,15,24,32,54,73,84],scale:[6,9,94,98],scenario:[11,47],scheme:81,score:[73,97],sec:[74,75,76,77],second:[1,47,48,60,74,75,76,77,90],see:[1,11,44,47,60,63,65,73,74,75,76,77,94,95],seed:[1,60,93],seek:96,select:[1,60,90],self:[70,83,84,85,87],semant:[22,31,33,44,47,48],send:87,sequenc:47,sequential_graph_fix:29,sequential_propos:[60,68],sequentialpropos:82,seri:72,serv:65,set:[1,6,16,17,30,36,39,48,60,61,62,63,64,66,71,72,81,84,89,90,91,93,99,104,107,108,109],set_of_tensor:53,set_param:99,setoftensor:53,shallow:[99,104,109],shape:[1,56,57,58,59,60,65,67,80,104,107],short_nam:11,should:[1,9,47,60,61,62,63,64,65,66,67,70,72,89,90,91,100,102],show_progress_bar:61,shown:[1,60,63],shuffl:87,side:[9,47],sigma:[6,9,26,84],sigmoid:9,similar:59,similarli:11,simpl:48,simplex:[1,9,11,60,74,77,90],simplexmatrix:11,simul:[1,60,67],sinc:[20,26],singl:[1,9,11,44,48,56,59,60,64,66,71,74,75,76,77,86,89,90,91,92,93,104,107,109],single_assign:[1,2,110],single_site_ancestral_mh:[1,60,110],single_site_ancestral_propos:[60,68,74,75,76,77,84],single_site_half_space_nmc_propos:[68,74],single_site_infer:[1,60,88,92,110],single_site_nmc:[1,60,110],single_site_random_walk:[1,60,110],single_site_random_walk_propos:[60,68],single_site_real_space_nmc_propos:[68,74],single_site_simplex_space_nmc_propos:[68,74],single_site_uniform_mh:[1,60,110],single_site_uniform_propos:[60,68],singleassign:49,singlesiteancestralmetropolishast:[1,60,63,88],singlesiteancestralpropos:[74,75,76,77,83,84],singlesitehalfspacenmcpropos:[74,75],singlesitehamiltonianmontecarlo:[1,60,64,67],singlesiteinfer:[1,60,88,89,92],singlesitenewtonianmontecarlo:[1,60,63,90],singlesitenouturnsampl:[1,60,66],singlesiterandomwalk:[1,60,91],singlesiterandomwalkpropos:84,singlesiterealspacenmcpropos:[74,76],singlesitesimplexspacenmcpropos:[74,77],singlesiteuniformmetropolishast:[1,60,92],singlesiteuniformpropos:[1,60,63,85],site:[1,17,60,64,66,74,75,76,77,89,90,91,92],situat:[9,11],size:[1,6,9,11,12,16,51,56,57,59,60,64,66,71,72,80,81,86,91],size_assess:[1,2,110],size_error:50,size_to_str:51,sizeassess:50,sizer:[1,2,13,14,15,24,50,54,110],skip:30,skip_optim:[30,36,39,60,62],slice:3,slice_field:3,slice_pattern:3,small:[9,48,60,62],smaller:[1,11,60,64,66,81],smallest:11,so:[9,11,44,47,48,84,94,95],soft_abs_invers:73,softab:73,some:[11,44,47,48],some_bottom_up:47,some_children:47,some_list_memb:47,some_of:47,some_top_down:47,somechildren:47,somehow:48,somelistmemb:47,someof:47,sometim:44,sort:6,sourc:[11,42,60,62],space:[1,60,72,74,75,76,90,96,99,104,107,109],spawn:61,special:9,special_function_cal:[1,2,110],specialfunctioncal:52,specif:[1,11,44,47,60,61,63,64,65,66,70,89,90,91],specifi:[1,60,65,67,80,81,87,90,99,104,107,109],specific_child:47,specificchild:47,split_r_hat:1,splite:72,squarerootnod:9,stabil:[1,60,66,81],stack:93,stack_not_cat:[65,93],stan:72,standard:9,star:3,start:47,state:[6,39,61,70,81],statement:[47,56,59],static_argnum:[78,79],statist:[1,9,100,102],statistical_model:[1,100,110],statisticalmodel:[100,102],step:[1,3,48,60,64,66,71,72,81,91,94,98],step_callback:[94,98],step_siz:[1,60,84,91],stochast:[1,9,48,100,102],stop:[29,44,47,48],store:[99,104,109],str:[3,4,11,16,17,30,31,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,51,52,60,62,65],straightforward:47,strict:59,string:[4,44,60,62],stringpattern:44,struct:[1,100,101],structur:[4,104,109],student:9,studenttnod:[6,9],subclass:[56,57,59],subgradi:72,submatch:44,submodul:[0,1,110],subpackag:[110,111],subpattern:44,subsampl:[94,98],subsample_factor:[94,97,98],subscript:3,subset:[48,60,62,104,109],succe:[44,47],succeed:47,success:[44,47],suggest:[1,60,66,81],sum:[18,72],sum_fix:18,sum_rightmost:57,sumnod:9,support:[1,2,6,9,11,33,56,57,58,59,60,61,62,90,93,94,95,104,106,107,109,110],suppos:11,supremum:11,surrog:97,switchnod:[6,9],symmetr:73,system:[9,11,27,31,48],t:[9,11,29,55,104,109],tail:[9,44],take:[4,6,9,11,22,29,31,33,44,47,61,104,109],taken:9,target:[1,3,11,48,60,64,66,71,81],target_accept_prob:[1,60,64,66,71,81],target_rv:[1,60,61,63,64,66,70,71,72,81,83,85,89,90,91],target_s:12,tb:87,tensor:[1,6,9,11,15,54,56,57,58,59,60,61,62,65,67,69,71,72,73,74,75,76,77,80,81,82,86,93,94,95,96,97,98,99,100,102,104,105,106,108,109],tensorizer_transform:[1,2,110],tensornod:[6,9],test:[3,44,47,48],than:[9,11,47],thei:[9,11,39],them:[1,11,27,33,47,60,64,66,94,95],thi:[1,6,9,11,16,18,19,20,22,23,24,25,26,27,31,32,33,39,44,47,48,56,57,59,60,61,62,64,65,66,70,72,74,76,81,90,91,92,99,104,107,109],thin:65,thing:47,third:48,thorw:87,those:9,though:9,three:48,through:[1,11,47,60,64,80],time:[1,11,47,60,61,66,104,109],time_in:46,timestamp:46,to_bm_python:[34,60,62],to_bmg_cpp:35,to_bmg_graph:36,to_bmg_python:37,to_cpp:[60,62],to_dict:86,to_dot:[39,60,62],to_graph:[60,62],to_graphviz:[60,62],to_inference_data:65,to_json:40,to_mini:40,to_pattern:44,to_python:[60,62],to_report:46,to_vec:86,to_xarrai:65,tobmpython:34,togeth:[1,47,60,63,64,66],tointnod:9,tomatrixnod:[6,9],tomini:40,tonegativerealmatrixnod:9,tonegativerealnod:9,tool:[4,7,49,65],top:[11,47],top_down:47,topo:6,topositiverealmatrixnod:9,topositiverealnod:[9,11],toprobabilitynod:9,torch:[1,6,9,11,12,16,51,52,56,57,58,59,60,61,62,65,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,93,94,95,96,97,98,99,100,102,104,105,106,107,108,109],torch_jit_backend:[71,81],torchinductor:[1,60,64,66],torchjitbackend:[71,81],torealmatrixnod:9,torealnod:9,total:11,total_tim:46,toward:[94,98],tqdm:[60,93],trace:47,tracebacktyp:87,track:[11,48],trajectori:[1,60,64,71,81],trajectory_length:[1,60,64,71],transform:[7,20,25,26,31,47,48,49,72,73,74,77,104,106,107],transform_nod:[13,14,15,54],transformassess:[13,14,15,54],transformed_node_v:73,transformed_v:72,transformer_cr:13,transpos:[9,32],transposenod:[6,9],travers:[31,47],treat:9,tree:[1,4,47,60,66,81],trick:97,trivial:[56,59],trivial_matmul_fix:24,truncat:9,try_mani:47,try_onc:47,trymani:47,tryonc:47,ts:11,tune:[72,84],tupl:[1,8,13,14,15,28,29,30,33,47,52,56,58,59,60,62,63,69,71,73,74,75,76,77,78,81,82,100,101,102],turn:[1,29,48,60,66,71,72,81],two:[9,11,24],typ:[44,87],type:[3,6,9,11,16,25,27,29,31,44,47,48,56,59,60,62,87,89,93,94,97,98,107],type_and_attribut:44,type_guard:29,type_of_valu:11,typepattern:44,typer:[10,18,19,21,22,24,29,31,32,33],typer_bas:[1,2,29,43,51,53,110],typerbas:[29,43,51,53,55],u:[1,60,66,71,72,81],unari:9,unaryop:3,unaryoperatornod:9,unarysub:3,unchang:31,unconstrain:[72,104,107],under:[60,62],underli:[9,44,78],unfair:9,unicod:4,uniform:[1,9,60,61,92,104,106],uniformli:[9,81],uniformnod:[6,9],union:[1,3,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,29,31,32,33,44,47,54,60,63,65,67,73,100,102,107],uniqu:[1,9,11,100,101,102],unit:[1,56,110],unknown:54,unless:29,unlik:81,unrestrict:9,unsizablenod:16,unsupport:[11,33],unsupported_node_fix:33,unsupported_node_report:33,unsupportednod:16,unsupportednodefix:33,until:[29,47,104,109],untransformed_v:72,untyp:11,untypable_node_report:33,untypablenod:16,untypedconstantnod:[6,9],up:[9,47,104,109],updat:[20,26,72,87,99,104,109],update_graph:[99,104,105,109],update_typ:55,upon:47,upper:[3,11,48],upper_bound:11,upperbound:11,us:[1,9,11,16,19,20,26,33,44,47,48,56,58,59,60,61,62,63,64,66,71,72,74,76,81,83,84,85,86,87,91,93,94,95,98,99,100,102,104,106,108,109],user:[9,81,100,102],usual:[104,106,108],util:[1,9,48,53,60,61,68,78,100,104,110],v:[11,56,57],v_1:9,v_2:9,v_n:9,val:[73,87],valid:[1,60,73,90,104,109],validate_arg:[56,57,59],valu:[1,3,6,9,11,15,31,44,47,48,54,56,57,58,59,60,61,64,65,66,70,72,73,74,75,76,77,80,83,84,85,87,90,93,94,98,99,103,104,105,107,108,109],valueerror:59,vanilla:81,vararg:3,variabl:[1,60,61,62,63,64,65,66,67,71,72,74,77,81,87,89,90,91,92,100,101,102,104,105,107,109,110],varianc:[56,57,72,84],variat:[94,95,98,99,100,102],variational_inf:[60,94,95],variational_world:[60,94,98],variationalinf:[94,95,98],variationalworld:[94,98,99],variaton:[94,98],variou:[60,62],ve:6,vec:73,vec_in:86,vector:[1,9,18,60,67,73,84],vectorindexnod:9,vectorized_graph_fix:15,verbos:61,verboselevel:[60,61,93],versa:44,vi:[1,60,100,102,110],via:[48,100,102],vice:44,view:[4,65],violat:[16,27,31],visual:39,viz:65,volum:[104,107],wa:[11,72,74,76,108],wai:[47,48,70,86],walk:[1,60,91],want:[11,44],warn:[78,100,103],we:[6,9,11,20,26,31,44,47,48,73,74,75,76,77],websit:[1,60,63],weight:81,welford:[72,81],welfordcovari:72,well:6,were:39,what:11,when:[1,9,11,16,42,44,47,56,57,59,60,63],where:[1,9,11,44,47,48,60,63,74,77,80,94,98,104,109],wherebi:44,whether:[1,47,59,60,61,64,65,66,71,73,74,76,81],which:[1,11,20,25,26,29,47,48,60,62,71,72,74,75,76,77,78,81,87,93,99,100,102,104,109],whose:[9,22],why:11,wiki:72,wikipedia:72,win:[20,25,26],window:72,windowschem:72,wise:107,wish:[11,47],with_dimens:11,with_siz:11,work:[4,11,107],world:[0,1,60,61,63,64,66,67,69,70,71,72,73,74,75,76,77,81,82,83,84,85,87,89,90,91,94,98,99,110],worri:47,would:[1,60,64,66,81,100,102],wrap:[100,102],wrapper:[1,60,62,100,101,102],x:[6,9,11,56,57,72,74,75,77,104,107,109],xarrai:65,y:[9,104,107,109],ye:15,yes_with_merg:15,you:[1,9,11,60,63],yurii:72,z:11,zero:[1,9,11,73,96,100,102],zero_grad:73,zeromatrix:11},titles:["beanmachine package","beanmachine.ppl package","beanmachine.ppl.compiler package","beanmachine.ppl.compiler.ast_patterns module","beanmachine.ppl.compiler.ast_tools module","beanmachine.ppl.compiler.beanstalk_common module","beanmachine.ppl.compiler.bm_graph_builder module","beanmachine.ppl.compiler.bm_to_bmg module","beanmachine.ppl.compiler.bmg_node_types module","beanmachine.ppl.compiler.bmg_nodes module","beanmachine.ppl.compiler.bmg_requirements module","beanmachine.ppl.compiler.bmg_types module","beanmachine.ppl.compiler.broadcaster module","beanmachine.ppl.compiler.copy_and_replace module","beanmachine.ppl.compiler.copy_transformer module","beanmachine.ppl.compiler.devectorizer_transformer module","beanmachine.ppl.compiler.error_report module","beanmachine.ppl.compiler.execution_context module","beanmachine.ppl.compiler.fix_additions module","beanmachine.ppl.compiler.fix_arithmetic module","beanmachine.ppl.compiler.fix_beta_conjugate_prior module","beanmachine.ppl.compiler.fix_bool_arithmetic module","beanmachine.ppl.compiler.fix_bool_comparisons module","beanmachine.ppl.compiler.fix_logsumexp module","beanmachine.ppl.compiler.fix_matrix_scale module","beanmachine.ppl.compiler.fix_multiary_ops module","beanmachine.ppl.compiler.fix_normal_conjugate_prior module","beanmachine.ppl.compiler.fix_observations module","beanmachine.ppl.compiler.fix_observe_true module","beanmachine.ppl.compiler.fix_problem module","beanmachine.ppl.compiler.fix_problems module","beanmachine.ppl.compiler.fix_requirements module","beanmachine.ppl.compiler.fix_transpose module","beanmachine.ppl.compiler.fix_unsupported module","beanmachine.ppl.compiler.gen_bm_python module","beanmachine.ppl.compiler.gen_bmg_cpp module","beanmachine.ppl.compiler.gen_bmg_graph module","beanmachine.ppl.compiler.gen_bmg_python module","beanmachine.ppl.compiler.gen_builder module","beanmachine.ppl.compiler.gen_dot module","beanmachine.ppl.compiler.gen_mini module","beanmachine.ppl.compiler.graph_labels module","beanmachine.ppl.compiler.internal_error module","beanmachine.ppl.compiler.lattice_typer module","beanmachine.ppl.compiler.patterns module","beanmachine.ppl.compiler.performance_report module","beanmachine.ppl.compiler.profiler module","beanmachine.ppl.compiler.rules module","beanmachine.ppl.compiler.runtime module","beanmachine.ppl.compiler.single_assignment module","beanmachine.ppl.compiler.size_assessment module","beanmachine.ppl.compiler.sizer module","beanmachine.ppl.compiler.special_function_caller module","beanmachine.ppl.compiler.support module","beanmachine.ppl.compiler.tensorizer_transformer module","beanmachine.ppl.compiler.typer_base module","beanmachine.ppl.distributions package","beanmachine.ppl.distributions.delta module","beanmachine.ppl.distributions.flat module","beanmachine.ppl.distributions.unit module","beanmachine.ppl.inference package","beanmachine.ppl.inference.base_inference module","beanmachine.ppl.inference.bmg_inference module","beanmachine.ppl.inference.compositional_infer module","beanmachine.ppl.inference.hmc_inference module","beanmachine.ppl.inference.monte_carlo_samples module","beanmachine.ppl.inference.nuts_inference module","beanmachine.ppl.inference.predictive module","beanmachine.ppl.inference.proposer package","beanmachine.ppl.inference.proposer.base_proposer module","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer module","beanmachine.ppl.inference.proposer.hmc_proposer module","beanmachine.ppl.inference.proposer.hmc_utils module","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils module","beanmachine.ppl.inference.proposer.nmc package","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nnc package","beanmachine.ppl.inference.proposer.nnc.utils module","beanmachine.ppl.inference.proposer.normal_eig module","beanmachine.ppl.inference.proposer.nuts_proposer module","beanmachine.ppl.inference.proposer.sequential_proposer module","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer module","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer module","beanmachine.ppl.inference.proposer.single_site_uniform_proposer module","beanmachine.ppl.inference.proposer.utils module","beanmachine.ppl.inference.sampler module","beanmachine.ppl.inference.single_site_ancestral_mh module","beanmachine.ppl.inference.single_site_inference module","beanmachine.ppl.inference.single_site_nmc module","beanmachine.ppl.inference.single_site_random_walk module","beanmachine.ppl.inference.single_site_uniform_mh module","beanmachine.ppl.inference.utils module","beanmachine.ppl.inference.vi package","beanmachine.ppl.inference.vi.autoguide module","beanmachine.ppl.inference.vi.discrepancy module","beanmachine.ppl.inference.vi.gradient_estimator module","beanmachine.ppl.inference.vi.variational_infer module","beanmachine.ppl.inference.vi.variational_world module","beanmachine.ppl.model package","beanmachine.ppl.model.rv_identifier module","beanmachine.ppl.model.statistical_model module","beanmachine.ppl.model.utils module","beanmachine.ppl.world package","beanmachine.ppl.world.base_world module","beanmachine.ppl.world.initialize_fn module","beanmachine.ppl.world.utils module","beanmachine.ppl.world.variable module","beanmachine.ppl.world.world module","beanmachine","beanmachine"],titleterms:{ast_pattern:3,ast_tool:4,autoguid:95,base_infer:61,base_propos:69,base_single_site_mh_propos:70,base_world:105,beanmachin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],beanstalk_common:5,bm_graph_build:6,bm_to_bmg:7,bmg_infer:62,bmg_node:9,bmg_node_typ:8,bmg_requir:10,bmg_type:11,broadcast:12,compil:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],compositional_inf:63,content:[0,1,2,56,60,68,74,78,94,100,104],copy_and_replac:13,copy_transform:14,delta:57,devectorizer_transform:15,discrep:96,distribut:[56,57,58,59],error_report:16,execution_context:17,fix_addit:18,fix_arithmet:19,fix_beta_conjugate_prior:20,fix_bool_arithmet:21,fix_bool_comparison:22,fix_logsumexp:23,fix_matrix_scal:24,fix_multiary_op:25,fix_normal_conjugate_prior:26,fix_observ:27,fix_observe_tru:28,fix_problem:[29,30],fix_requir:31,fix_transpos:32,fix_unsupport:33,flat:58,gen_bm_python:34,gen_bmg_cpp:35,gen_bmg_graph:36,gen_bmg_python:37,gen_build:38,gen_dot:39,gen_mini:40,gradient_estim:97,graph_label:41,hmc_infer:64,hmc_propos:71,hmc_util:72,infer:[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],initialize_fn:106,internal_error:42,lattice_typ:43,model:[100,101,102,103],modul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],monte_carlo_sampl:65,newtonian_monte_carlo_util:73,nmc:[74,75,76,77],nnc:[78,79],normal_eig:80,nuts_infer:66,nuts_propos:81,packag:[0,1,2,56,60,68,74,78,94,100,104],pattern:44,performance_report:45,ppl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],predict:67,profil:46,propos:[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],rule:47,runtim:48,rv_identifi:101,sampler:87,sequential_propos:82,single_assign:49,single_site_ancestral_mh:88,single_site_ancestral_propos:83,single_site_half_space_nmc_propos:75,single_site_infer:89,single_site_nmc:90,single_site_random_walk:91,single_site_random_walk_propos:84,single_site_real_space_nmc_propos:76,single_site_simplex_space_nmc_propos:77,single_site_uniform_mh:92,single_site_uniform_propos:85,size_assess:50,sizer:51,special_function_cal:52,statistical_model:102,submodul:[2,56,60,68,74,78,94,100,104],subpackag:[0,1,60,68],support:53,tensorizer_transform:54,typer_bas:55,unit:59,util:[79,86,93,103,107],variabl:108,variational_inf:98,variational_world:99,vi:[94,95,96,97,98,99],world:[104,105,106,107,108,109]}}) \ No newline at end of file +Search.setIndex({docnames:["beanmachine","beanmachine.ppl","beanmachine.ppl.compiler","beanmachine.ppl.compiler.ast_patterns","beanmachine.ppl.compiler.ast_tools","beanmachine.ppl.compiler.beanstalk_common","beanmachine.ppl.compiler.bm_graph_builder","beanmachine.ppl.compiler.bm_to_bmg","beanmachine.ppl.compiler.bmg_node_types","beanmachine.ppl.compiler.bmg_nodes","beanmachine.ppl.compiler.bmg_requirements","beanmachine.ppl.compiler.bmg_types","beanmachine.ppl.compiler.broadcaster","beanmachine.ppl.compiler.copy_and_replace","beanmachine.ppl.compiler.copy_transformer","beanmachine.ppl.compiler.devectorizer_transformer","beanmachine.ppl.compiler.error_report","beanmachine.ppl.compiler.execution_context","beanmachine.ppl.compiler.fix_additions","beanmachine.ppl.compiler.fix_arithmetic","beanmachine.ppl.compiler.fix_beta_conjugate_prior","beanmachine.ppl.compiler.fix_bool_arithmetic","beanmachine.ppl.compiler.fix_bool_comparisons","beanmachine.ppl.compiler.fix_logsumexp","beanmachine.ppl.compiler.fix_matrix_scale","beanmachine.ppl.compiler.fix_multiary_ops","beanmachine.ppl.compiler.fix_normal_conjugate_prior","beanmachine.ppl.compiler.fix_observations","beanmachine.ppl.compiler.fix_observe_true","beanmachine.ppl.compiler.fix_problem","beanmachine.ppl.compiler.fix_problems","beanmachine.ppl.compiler.fix_requirements","beanmachine.ppl.compiler.fix_transpose","beanmachine.ppl.compiler.fix_unsupported","beanmachine.ppl.compiler.gen_bm_python","beanmachine.ppl.compiler.gen_bmg_cpp","beanmachine.ppl.compiler.gen_bmg_graph","beanmachine.ppl.compiler.gen_bmg_python","beanmachine.ppl.compiler.gen_builder","beanmachine.ppl.compiler.gen_dot","beanmachine.ppl.compiler.gen_mini","beanmachine.ppl.compiler.graph_labels","beanmachine.ppl.compiler.internal_error","beanmachine.ppl.compiler.lattice_typer","beanmachine.ppl.compiler.patterns","beanmachine.ppl.compiler.performance_report","beanmachine.ppl.compiler.profiler","beanmachine.ppl.compiler.rules","beanmachine.ppl.compiler.runtime","beanmachine.ppl.compiler.single_assignment","beanmachine.ppl.compiler.size_assessment","beanmachine.ppl.compiler.sizer","beanmachine.ppl.compiler.special_function_caller","beanmachine.ppl.compiler.support","beanmachine.ppl.compiler.tensorizer_transformer","beanmachine.ppl.compiler.typer_base","beanmachine.ppl.distributions","beanmachine.ppl.distributions.delta","beanmachine.ppl.distributions.flat","beanmachine.ppl.distributions.unit","beanmachine.ppl.inference","beanmachine.ppl.inference.base_inference","beanmachine.ppl.inference.bmg_inference","beanmachine.ppl.inference.compositional_infer","beanmachine.ppl.inference.hmc_inference","beanmachine.ppl.inference.monte_carlo_samples","beanmachine.ppl.inference.nuts_inference","beanmachine.ppl.inference.predictive","beanmachine.ppl.inference.proposer","beanmachine.ppl.inference.proposer.base_proposer","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer","beanmachine.ppl.inference.proposer.hmc_proposer","beanmachine.ppl.inference.proposer.hmc_utils","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils","beanmachine.ppl.inference.proposer.nmc","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer","beanmachine.ppl.inference.proposer.nnc","beanmachine.ppl.inference.proposer.nnc.utils","beanmachine.ppl.inference.proposer.normal_eig","beanmachine.ppl.inference.proposer.nuts_proposer","beanmachine.ppl.inference.proposer.sequential_proposer","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer","beanmachine.ppl.inference.proposer.single_site_uniform_proposer","beanmachine.ppl.inference.proposer.utils","beanmachine.ppl.inference.sampler","beanmachine.ppl.inference.single_site_ancestral_mh","beanmachine.ppl.inference.single_site_inference","beanmachine.ppl.inference.single_site_nmc","beanmachine.ppl.inference.single_site_random_walk","beanmachine.ppl.inference.single_site_uniform_mh","beanmachine.ppl.inference.utils","beanmachine.ppl.inference.vi","beanmachine.ppl.inference.vi.autoguide","beanmachine.ppl.inference.vi.discrepancy","beanmachine.ppl.inference.vi.gradient_estimator","beanmachine.ppl.inference.vi.variational_infer","beanmachine.ppl.inference.vi.variational_world","beanmachine.ppl.model","beanmachine.ppl.model.rv_identifier","beanmachine.ppl.model.statistical_model","beanmachine.ppl.model.utils","beanmachine.ppl.world","beanmachine.ppl.world.base_world","beanmachine.ppl.world.initialize_fn","beanmachine.ppl.world.utils","beanmachine.ppl.world.variable","beanmachine.ppl.world.world","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["beanmachine.rst","beanmachine.ppl.rst","beanmachine.ppl.compiler.rst","beanmachine.ppl.compiler.ast_patterns.rst","beanmachine.ppl.compiler.ast_tools.rst","beanmachine.ppl.compiler.beanstalk_common.rst","beanmachine.ppl.compiler.bm_graph_builder.rst","beanmachine.ppl.compiler.bm_to_bmg.rst","beanmachine.ppl.compiler.bmg_node_types.rst","beanmachine.ppl.compiler.bmg_nodes.rst","beanmachine.ppl.compiler.bmg_requirements.rst","beanmachine.ppl.compiler.bmg_types.rst","beanmachine.ppl.compiler.broadcaster.rst","beanmachine.ppl.compiler.copy_and_replace.rst","beanmachine.ppl.compiler.copy_transformer.rst","beanmachine.ppl.compiler.devectorizer_transformer.rst","beanmachine.ppl.compiler.error_report.rst","beanmachine.ppl.compiler.execution_context.rst","beanmachine.ppl.compiler.fix_additions.rst","beanmachine.ppl.compiler.fix_arithmetic.rst","beanmachine.ppl.compiler.fix_beta_conjugate_prior.rst","beanmachine.ppl.compiler.fix_bool_arithmetic.rst","beanmachine.ppl.compiler.fix_bool_comparisons.rst","beanmachine.ppl.compiler.fix_logsumexp.rst","beanmachine.ppl.compiler.fix_matrix_scale.rst","beanmachine.ppl.compiler.fix_multiary_ops.rst","beanmachine.ppl.compiler.fix_normal_conjugate_prior.rst","beanmachine.ppl.compiler.fix_observations.rst","beanmachine.ppl.compiler.fix_observe_true.rst","beanmachine.ppl.compiler.fix_problem.rst","beanmachine.ppl.compiler.fix_problems.rst","beanmachine.ppl.compiler.fix_requirements.rst","beanmachine.ppl.compiler.fix_transpose.rst","beanmachine.ppl.compiler.fix_unsupported.rst","beanmachine.ppl.compiler.gen_bm_python.rst","beanmachine.ppl.compiler.gen_bmg_cpp.rst","beanmachine.ppl.compiler.gen_bmg_graph.rst","beanmachine.ppl.compiler.gen_bmg_python.rst","beanmachine.ppl.compiler.gen_builder.rst","beanmachine.ppl.compiler.gen_dot.rst","beanmachine.ppl.compiler.gen_mini.rst","beanmachine.ppl.compiler.graph_labels.rst","beanmachine.ppl.compiler.internal_error.rst","beanmachine.ppl.compiler.lattice_typer.rst","beanmachine.ppl.compiler.patterns.rst","beanmachine.ppl.compiler.performance_report.rst","beanmachine.ppl.compiler.profiler.rst","beanmachine.ppl.compiler.rules.rst","beanmachine.ppl.compiler.runtime.rst","beanmachine.ppl.compiler.single_assignment.rst","beanmachine.ppl.compiler.size_assessment.rst","beanmachine.ppl.compiler.sizer.rst","beanmachine.ppl.compiler.special_function_caller.rst","beanmachine.ppl.compiler.support.rst","beanmachine.ppl.compiler.tensorizer_transformer.rst","beanmachine.ppl.compiler.typer_base.rst","beanmachine.ppl.distributions.rst","beanmachine.ppl.distributions.delta.rst","beanmachine.ppl.distributions.flat.rst","beanmachine.ppl.distributions.unit.rst","beanmachine.ppl.inference.rst","beanmachine.ppl.inference.base_inference.rst","beanmachine.ppl.inference.bmg_inference.rst","beanmachine.ppl.inference.compositional_infer.rst","beanmachine.ppl.inference.hmc_inference.rst","beanmachine.ppl.inference.monte_carlo_samples.rst","beanmachine.ppl.inference.nuts_inference.rst","beanmachine.ppl.inference.predictive.rst","beanmachine.ppl.inference.proposer.rst","beanmachine.ppl.inference.proposer.base_proposer.rst","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer.rst","beanmachine.ppl.inference.proposer.hmc_proposer.rst","beanmachine.ppl.inference.proposer.hmc_utils.rst","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils.rst","beanmachine.ppl.inference.proposer.nmc.rst","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer.rst","beanmachine.ppl.inference.proposer.nnc.rst","beanmachine.ppl.inference.proposer.nnc.utils.rst","beanmachine.ppl.inference.proposer.normal_eig.rst","beanmachine.ppl.inference.proposer.nuts_proposer.rst","beanmachine.ppl.inference.proposer.sequential_proposer.rst","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer.rst","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer.rst","beanmachine.ppl.inference.proposer.single_site_uniform_proposer.rst","beanmachine.ppl.inference.proposer.utils.rst","beanmachine.ppl.inference.sampler.rst","beanmachine.ppl.inference.single_site_ancestral_mh.rst","beanmachine.ppl.inference.single_site_inference.rst","beanmachine.ppl.inference.single_site_nmc.rst","beanmachine.ppl.inference.single_site_random_walk.rst","beanmachine.ppl.inference.single_site_uniform_mh.rst","beanmachine.ppl.inference.utils.rst","beanmachine.ppl.inference.vi.rst","beanmachine.ppl.inference.vi.autoguide.rst","beanmachine.ppl.inference.vi.discrepancy.rst","beanmachine.ppl.inference.vi.gradient_estimator.rst","beanmachine.ppl.inference.vi.variational_infer.rst","beanmachine.ppl.inference.vi.variational_world.rst","beanmachine.ppl.model.rst","beanmachine.ppl.model.rv_identifier.rst","beanmachine.ppl.model.statistical_model.rst","beanmachine.ppl.model.utils.rst","beanmachine.ppl.world.rst","beanmachine.ppl.world.base_world.rst","beanmachine.ppl.world.initialize_fn.rst","beanmachine.ppl.world.utils.rst","beanmachine.ppl.world.variable.rst","beanmachine.ppl.world.world.rst","index.rst","modules.rst"],objects:{"":{beanmachine:[0,0,0,"-"]},"beanmachine.ppl":{CompositionalInference:[1,1,1,""],Diagnostics:[1,1,1,""],GlobalHamiltonianMonteCarlo:[1,1,1,""],GlobalNoUTurnSampler:[1,1,1,""],RVIdentifier:[1,1,1,""],SingleSiteAncestralMetropolisHastings:[1,1,1,""],SingleSiteHamiltonianMonteCarlo:[1,1,1,""],SingleSiteNewtonianMonteCarlo:[1,1,1,""],SingleSiteNoUTurnSampler:[1,1,1,""],SingleSiteRandomWalk:[1,1,1,""],SingleSiteUniformMetropolisHastings:[1,1,1,""],compiler:[2,0,0,"-"],distributions:[56,0,0,"-"],effective_sample_size:[1,5,1,""],empirical:[1,5,1,""],functional:[1,5,1,""],inference:[60,0,0,"-"],model:[100,0,0,"-"],param:[1,5,1,""],r_hat:[1,5,1,""],random_variable:[1,5,1,""],seed:[1,5,1,""],simulate:[1,5,1,""],split_r_hat:[1,5,1,""],world:[104,0,0,"-"]},"beanmachine.ppl.CompositionalInference":{get_proposers:[1,2,1,""]},"beanmachine.ppl.GlobalHamiltonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.GlobalNoUTurnSampler":{get_proposers:[1,2,1,""]},"beanmachine.ppl.RVIdentifier":{"function":[1,4,1,""],arguments:[1,3,1,""],is_functional:[1,4,1,""],is_random_variable:[1,4,1,""],wrapper:[1,3,1,""]},"beanmachine.ppl.SingleSiteHamiltonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteNewtonianMonteCarlo":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteNoUTurnSampler":{get_proposers:[1,2,1,""]},"beanmachine.ppl.SingleSiteRandomWalk":{get_proposers:[1,2,1,""]},"beanmachine.ppl.compiler":{ast_patterns:[3,0,0,"-"],ast_tools:[4,0,0,"-"],beanstalk_common:[5,0,0,"-"],bm_graph_builder:[6,0,0,"-"],bm_to_bmg:[7,0,0,"-"],bmg_node_types:[8,0,0,"-"],bmg_nodes:[9,0,0,"-"],bmg_requirements:[10,0,0,"-"],bmg_types:[11,0,0,"-"],broadcaster:[12,0,0,"-"],copy_and_replace:[13,0,0,"-"],copy_transformer:[14,0,0,"-"],devectorizer_transformer:[15,0,0,"-"],error_report:[16,0,0,"-"],execution_context:[17,0,0,"-"],fix_additions:[18,0,0,"-"],fix_arithmetic:[19,0,0,"-"],fix_beta_conjugate_prior:[20,0,0,"-"],fix_bool_arithmetic:[21,0,0,"-"],fix_bool_comparisons:[22,0,0,"-"],fix_logsumexp:[23,0,0,"-"],fix_matrix_scale:[24,0,0,"-"],fix_multiary_ops:[25,0,0,"-"],fix_normal_conjugate_prior:[26,0,0,"-"],fix_observations:[27,0,0,"-"],fix_observe_true:[28,0,0,"-"],fix_problem:[29,0,0,"-"],fix_problems:[30,0,0,"-"],fix_requirements:[31,0,0,"-"],fix_transpose:[32,0,0,"-"],fix_unsupported:[33,0,0,"-"],gen_bm_python:[34,0,0,"-"],gen_bmg_cpp:[35,0,0,"-"],gen_bmg_graph:[36,0,0,"-"],gen_bmg_python:[37,0,0,"-"],gen_builder:[38,0,0,"-"],gen_dot:[39,0,0,"-"],gen_mini:[40,0,0,"-"],graph_labels:[41,0,0,"-"],internal_error:[42,0,0,"-"],lattice_typer:[43,0,0,"-"],patterns:[44,0,0,"-"],performance_report:[45,0,0,"-"],profiler:[46,0,0,"-"],rules:[47,0,0,"-"],runtime:[48,0,0,"-"],single_assignment:[49,0,0,"-"],size_assessment:[50,0,0,"-"],sizer:[51,0,0,"-"],special_function_caller:[52,0,0,"-"],support:[53,0,0,"-"],tensorizer_transformer:[54,0,0,"-"],typer_base:[55,0,0,"-"]},"beanmachine.ppl.compiler.ast_patterns":{ann_assign:[3,5,1,""],arguments:[3,5,1,""],assign:[3,5,1,""],ast_assert:[3,5,1,""],ast_boolop:[3,5,1,""],ast_compare:[3,5,1,""],ast_dict:[3,5,1,""],ast_dictComp:[3,5,1,""],ast_for:[3,5,1,""],ast_generator:[3,5,1,""],ast_if:[3,5,1,""],ast_index:[3,5,1,""],ast_list:[3,5,1,""],ast_listComp:[3,5,1,""],ast_luple:[3,5,1,""],ast_return:[3,5,1,""],ast_setComp:[3,5,1,""],ast_str:[3,5,1,""],ast_while:[3,5,1,""],attribute:[3,5,1,""],aug_assign:[3,5,1,""],binary_compare:[3,5,1,""],binop:[3,5,1,""],boolop:[3,5,1,""],call:[3,5,1,""],call_to:[3,5,1,""],compare:[3,5,1,""],equal:[3,5,1,""],expr:[3,5,1,""],function_def:[3,5,1,""],get_value:[3,5,1,""],greater_than:[3,5,1,""],greater_than_equal:[3,5,1,""],id_from_call:[3,5,1,""],if_exp:[3,5,1,""],if_statement:[3,5,1,""],index:[3,5,1,""],keyword:[3,5,1,""],less_than:[3,5,1,""],less_than_equal:[3,5,1,""],module:[3,5,1,""],name:[3,5,1,""],name_constant:[3,5,1,""],not_equal:[3,5,1,""],num:[3,5,1,""],slice_pattern:[3,5,1,""],starred:[3,5,1,""],subscript:[3,5,1,""],unaryop:[3,5,1,""],unarysub:[3,5,1,""]},"beanmachine.ppl.compiler.ast_tools":{print_graph:[4,5,1,""],print_python:[4,5,1,""],print_tree:[4,5,1,""]},"beanmachine.ppl.compiler.bm_graph_builder":{BMGraphBuilder:[6,1,1,""],phi:[6,5,1,""],rv_to_query:[6,5,1,""]},"beanmachine.ppl.compiler.bm_graph_builder.BMGraphBuilder":{add_addition:[6,2,1,""],add_bernoulli:[6,2,1,""],add_bernoulli_logit:[6,2,1,""],add_beta:[6,2,1,""],add_binomial:[6,2,1,""],add_binomial_logit:[6,2,1,""],add_bitand:[6,2,1,""],add_bitor:[6,2,1,""],add_bitxor:[6,2,1,""],add_boolean:[6,2,1,""],add_boolean_matrix:[6,2,1,""],add_broadcast:[6,2,1,""],add_categorical:[6,2,1,""],add_categorical_logit:[6,2,1,""],add_chi2:[6,2,1,""],add_choice:[6,2,1,""],add_cholesky:[6,2,1,""],add_column_index:[6,2,1,""],add_complement:[6,2,1,""],add_constant:[6,2,1,""],add_constant_of_matrix_type:[6,2,1,""],add_constant_of_type:[6,2,1,""],add_constant_tensor:[6,2,1,""],add_dirichlet:[6,2,1,""],add_division:[6,2,1,""],add_elementwise_multiplication:[6,2,1,""],add_equal:[6,2,1,""],add_exp2:[6,2,1,""],add_exp:[6,2,1,""],add_exp_product:[6,2,1,""],add_expm1:[6,2,1,""],add_fill_matrix:[6,2,1,""],add_flat:[6,2,1,""],add_floordiv:[6,2,1,""],add_gamma:[6,2,1,""],add_greater_than:[6,2,1,""],add_greater_than_equal:[6,2,1,""],add_halfcauchy:[6,2,1,""],add_halfnormal:[6,2,1,""],add_if_then_else:[6,2,1,""],add_in:[6,2,1,""],add_index:[6,2,1,""],add_invert:[6,2,1,""],add_is:[6,2,1,""],add_is_not:[6,2,1,""],add_item:[6,2,1,""],add_less_than:[6,2,1,""],add_less_than_equal:[6,2,1,""],add_lkj_cholesky:[6,2,1,""],add_log10:[6,2,1,""],add_log1mexp:[6,2,1,""],add_log1p:[6,2,1,""],add_log2:[6,2,1,""],add_log:[6,2,1,""],add_log_prob:[6,2,1,""],add_logaddexp:[6,2,1,""],add_logistic:[6,2,1,""],add_logsumexp:[6,2,1,""],add_logsumexp_torch:[6,2,1,""],add_logsumexp_vector:[6,2,1,""],add_lshift:[6,2,1,""],add_matrix_addition:[6,2,1,""],add_matrix_complement:[6,2,1,""],add_matrix_exp:[6,2,1,""],add_matrix_log1mexp:[6,2,1,""],add_matrix_log:[6,2,1,""],add_matrix_multiplication:[6,2,1,""],add_matrix_negate:[6,2,1,""],add_matrix_phi:[6,2,1,""],add_matrix_scale:[6,2,1,""],add_matrix_sum:[6,2,1,""],add_mod:[6,2,1,""],add_multi_addition:[6,2,1,""],add_multi_multiplication:[6,2,1,""],add_multiplication:[6,2,1,""],add_natural:[6,2,1,""],add_natural_matrix:[6,2,1,""],add_neg_real:[6,2,1,""],add_neg_real_matrix:[6,2,1,""],add_negate:[6,2,1,""],add_node:[6,2,1,""],add_normal:[6,2,1,""],add_not:[6,2,1,""],add_not_equal:[6,2,1,""],add_not_in:[6,2,1,""],add_observation:[6,2,1,""],add_phi:[6,2,1,""],add_poisson:[6,2,1,""],add_pos_real:[6,2,1,""],add_pos_real_matrix:[6,2,1,""],add_power:[6,2,1,""],add_probability:[6,2,1,""],add_probability_matrix:[6,2,1,""],add_query:[6,2,1,""],add_real:[6,2,1,""],add_real_matrix:[6,2,1,""],add_rshift:[6,2,1,""],add_sample:[6,2,1,""],add_simplex:[6,2,1,""],add_squareroot:[6,2,1,""],add_studentt:[6,2,1,""],add_subtraction:[6,2,1,""],add_sum:[6,2,1,""],add_switch:[6,2,1,""],add_tensor:[6,2,1,""],add_to_int:[6,2,1,""],add_to_matrix:[6,2,1,""],add_to_negative_real:[6,2,1,""],add_to_negative_real_matrix:[6,2,1,""],add_to_positive_real:[6,2,1,""],add_to_positive_real_matrix:[6,2,1,""],add_to_probability:[6,2,1,""],add_to_real:[6,2,1,""],add_to_real_matrix:[6,2,1,""],add_transpose:[6,2,1,""],add_uniform:[6,2,1,""],add_vector_index:[6,2,1,""],all_ancestor_nodes:[6,2,1,""],all_nodes:[6,2,1,""],all_observations:[6,2,1,""],execution_context:[6,3,1,""],remove_leaf:[6,2,1,""],remove_node:[6,2,1,""]},"beanmachine.ppl.compiler.bmg_node_types":{dist_type:[8,5,1,""],factor_type:[8,5,1,""],is_supported_by_bmg:[8,5,1,""],operator_type:[8,5,1,""]},"beanmachine.ppl.compiler.bmg_nodes":{AdditionNode:[9,1,1,""],BMGNode:[9,1,1,""],BernoulliBase:[9,1,1,""],BernoulliLogitNode:[9,1,1,""],BernoulliNode:[9,1,1,""],BetaNode:[9,1,1,""],BinaryOperatorNode:[9,1,1,""],BinomialLogitNode:[9,1,1,""],BinomialNode:[9,1,1,""],BinomialNodeBase:[9,1,1,""],BitAndNode:[9,1,1,""],BitOrNode:[9,1,1,""],BitXorNode:[9,1,1,""],BooleanNode:[9,1,1,""],BroadcastNode:[9,1,1,""],CategoricalLogitNode:[9,1,1,""],CategoricalNode:[9,1,1,""],CategoricalNodeBase:[9,1,1,""],Chi2Node:[9,1,1,""],ChoiceNode:[9,1,1,""],CholeskyNode:[9,1,1,""],ColumnIndexNode:[9,1,1,""],ComparisonNode:[9,1,1,""],ComplementNode:[9,1,1,""],ConstantBooleanMatrixNode:[9,1,1,""],ConstantNaturalMatrixNode:[9,1,1,""],ConstantNegativeRealMatrixNode:[9,1,1,""],ConstantNode:[9,1,1,""],ConstantPositiveRealMatrixNode:[9,1,1,""],ConstantProbabilityMatrixNode:[9,1,1,""],ConstantRealMatrixNode:[9,1,1,""],ConstantSimplexMatrixNode:[9,1,1,""],ConstantTensorNode:[9,1,1,""],DirichletNode:[9,1,1,""],DistributionNode:[9,1,1,""],DivisionNode:[9,1,1,""],ElementwiseMultiplyNode:[9,1,1,""],EqualNode:[9,1,1,""],Exp2Node:[9,1,1,""],ExpM1Node:[9,1,1,""],ExpNode:[9,1,1,""],ExpProductFactorNode:[9,1,1,""],FactorNode:[9,1,1,""],FillMatrixNode:[9,1,1,""],FlatNode:[9,1,1,""],FloorDivNode:[9,1,1,""],GammaNode:[9,1,1,""],GreaterThanEqualNode:[9,1,1,""],GreaterThanNode:[9,1,1,""],HalfCauchyNode:[9,1,1,""],HalfNormalNode:[9,1,1,""],IfThenElseNode:[9,1,1,""],InNode:[9,1,1,""],IndexNode:[9,1,1,""],InputList:[9,1,1,""],InvertNode:[9,1,1,""],IsNode:[9,1,1,""],IsNotNode:[9,1,1,""],ItemNode:[9,1,1,""],LKJCholeskyNode:[9,1,1,""],LShiftNode:[9,1,1,""],LessThanEqualNode:[9,1,1,""],LessThanNode:[9,1,1,""],Log10Node:[9,1,1,""],Log1mexpNode:[9,1,1,""],Log1pNode:[9,1,1,""],Log2Node:[9,1,1,""],LogAddExpNode:[9,1,1,""],LogNode:[9,1,1,""],LogProbNode:[9,1,1,""],LogSumExpNode:[9,1,1,""],LogSumExpTorchNode:[9,1,1,""],LogSumExpVectorNode:[9,1,1,""],LogisticNode:[9,1,1,""],MatrixAddNode:[9,1,1,""],MatrixComplementNode:[9,1,1,""],MatrixExpNode:[9,1,1,""],MatrixLog1mexpNode:[9,1,1,""],MatrixLogNode:[9,1,1,""],MatrixMultiplicationNode:[9,1,1,""],MatrixNegateNode:[9,1,1,""],MatrixPhiNode:[9,1,1,""],MatrixScaleNode:[9,1,1,""],MatrixSumNode:[9,1,1,""],ModNode:[9,1,1,""],MultiplicationNode:[9,1,1,""],NaturalNode:[9,1,1,""],NegateNode:[9,1,1,""],NegativeRealNode:[9,1,1,""],NormalNode:[9,1,1,""],NotEqualNode:[9,1,1,""],NotInNode:[9,1,1,""],NotNode:[9,1,1,""],Observation:[9,1,1,""],OperatorNode:[9,1,1,""],PhiNode:[9,1,1,""],PoissonNode:[9,1,1,""],PositiveRealNode:[9,1,1,""],PowerNode:[9,1,1,""],ProbabilityNode:[9,1,1,""],Query:[9,1,1,""],RShiftNode:[9,1,1,""],RealNode:[9,1,1,""],SampleNode:[9,1,1,""],SquareRootNode:[9,1,1,""],StudentTNode:[9,1,1,""],SumNode:[9,1,1,""],SwitchNode:[9,1,1,""],TensorNode:[9,1,1,""],ToIntNode:[9,1,1,""],ToMatrixNode:[9,1,1,""],ToNegativeRealMatrixNode:[9,1,1,""],ToNegativeRealNode:[9,1,1,""],ToPositiveRealMatrixNode:[9,1,1,""],ToPositiveRealNode:[9,1,1,""],ToProbabilityNode:[9,1,1,""],ToRealMatrixNode:[9,1,1,""],ToRealNode:[9,1,1,""],TransposeNode:[9,1,1,""],UnaryOperatorNode:[9,1,1,""],UniformNode:[9,1,1,""],UntypedConstantNode:[9,1,1,""],VectorIndexNode:[9,1,1,""],is_one:[9,5,1,""],is_zero:[9,5,1,""]},"beanmachine.ppl.compiler.bmg_nodes.AdditionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BMGNode":{inputs:[9,3,1,""],is_leaf:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliBase":{inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BernoulliNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BetaNode":{alpha:[9,4,1,""],beta:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinaryOperatorNode":{inputs:[9,3,1,""],left:[9,4,1,""],outputs:[9,3,1,""],right:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BinomialNodeBase":{count:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""],support:[9,2,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitAndNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitOrNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BitXorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BooleanNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.BroadcastNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalLogitNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CategoricalNodeBase":{inputs:[9,3,1,""],outputs:[9,3,1,""],probability:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Chi2Node":{df:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ChoiceNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.CholeskyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ColumnIndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ComparisonNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ComplementNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantBooleanMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNaturalMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNegativeRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantPositiveRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantProbabilityMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantRealMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantSimplexMatrixNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ConstantTensorNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DirichletNode":{concentration:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DistributionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.DivisionNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ElementwiseMultiplyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.EqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Exp2Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpM1Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ExpProductFactorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FactorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FillMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FlatNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.FloorDivNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GammaNode":{concentration:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],rate:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GreaterThanEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.GreaterThanNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.HalfCauchyNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],scale:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.HalfNormalNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],sigma:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IfThenElseNode":{alternative:[9,4,1,""],condition:[9,4,1,""],consequence:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InputList":{inputs:[9,3,1,""],node:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.InvertNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IsNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.IsNotNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ItemNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LKJCholeskyNode":{dim:[9,4,1,""],eta:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LShiftNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LessThanEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LessThanNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log10Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log1mexpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log1pNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Log2Node":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogAddExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogProbNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpTorchNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogSumExpVectorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.LogisticNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixAddNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixComplementNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixExpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixLog1mexpNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixLogNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixMultiplicationNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixNegateNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixPhiNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixScaleNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MatrixSumNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ModNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.MultiplicationNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NaturalNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NegateNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NegativeRealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NormalNode":{inputs:[9,3,1,""],mu:[9,4,1,""],outputs:[9,3,1,""],sigma:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotEqualNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotInNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.NotNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Observation":{observed:[9,4,1,""],value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.OperatorNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PhiNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PoissonNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],rate:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PositiveRealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.PowerNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ProbabilityNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.Query":{inputs:[9,3,1,""],operator:[9,4,1,""],outputs:[9,3,1,""],rv_identifier:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.RShiftNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.RealNode":{value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SampleNode":{inputs:[9,3,1,""],operand:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SquareRootNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.StudentTNode":{df:[9,4,1,""],inputs:[9,3,1,""],loc:[9,4,1,""],outputs:[9,3,1,""],scale:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SumNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.SwitchNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToIntNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToMatrixNode":{columns:[9,4,1,""],inputs:[9,3,1,""],outputs:[9,3,1,""],rows:[9,4,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToNegativeRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToNegativeRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToPositiveRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToPositiveRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToProbabilityNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToRealMatrixNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.ToRealNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.TransposeNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UnaryOperatorNode":{inputs:[9,3,1,""],operand:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UniformNode":{high:[9,4,1,""],inputs:[9,3,1,""],low:[9,4,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.UntypedConstantNode":{inputs:[9,3,1,""],outputs:[9,3,1,""],value:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_nodes.VectorIndexNode":{inputs:[9,3,1,""],outputs:[9,3,1,""]},"beanmachine.ppl.compiler.bmg_requirements":{EdgeRequirements:[10,1,1,""]},"beanmachine.ppl.compiler.bmg_requirements.EdgeRequirements":{requirements:[10,2,1,""],typer:[10,3,1,""]},"beanmachine.ppl.compiler.bmg_types":{AlwaysMatrix:[11,1,1,""],AnyPosRealMatrix:[11,1,1,""],AnyRealMatrix:[11,1,1,""],AnyRequirement:[11,1,1,""],BMGElementType:[11,1,1,""],BMGLatticeType:[11,1,1,""],BMGMatrixType:[11,1,1,""],BaseRequirement:[11,1,1,""],BooleanMatrix:[11,1,1,""],BroadcastMatrixType:[11,1,1,""],NaturalMatrix:[11,1,1,""],NegativeRealMatrix:[11,1,1,""],OneHotMatrix:[11,1,1,""],PositiveRealMatrix:[11,1,1,""],ProbabilityMatrix:[11,1,1,""],RealMatrix:[11,1,1,""],SimplexMatrix:[11,1,1,""],Untypable:[11,6,1,""],UpperBound:[11,1,1,""],ZeroMatrix:[11,1,1,""],always_matrix:[11,5,1,""],is_atomic:[11,5,1,""],is_convertible_to:[11,5,1,""],is_one:[11,5,1,""],is_zero:[11,5,1,""],lattice_to_bmg:[11,5,1,""],must_be_matrix:[11,5,1,""],requirement_to_type:[11,5,1,""],supremum:[11,5,1,""],type_of_value:[11,5,1,""],upper_bound:[11,5,1,""]},"beanmachine.ppl.compiler.bmg_types.AlwaysMatrix":{bound:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyPosRealMatrix":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyRealMatrix":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.AnyRequirement":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGElementType":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGLatticeType":{is_singleton:[11,2,1,""],long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BMGMatrixType":{columns:[11,3,1,""],element_type:[11,3,1,""],is_singleton:[11,2,1,""],rows:[11,3,1,""],with_dimensions:[11,2,1,""],with_size:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.BaseRequirement":{long_name:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.BooleanMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.BroadcastMatrixType":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.NaturalMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.NegativeRealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.OneHotMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.PositiveRealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.ProbabilityMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.RealMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.SimplexMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.bmg_types.UpperBound":{bound:[11,3,1,""]},"beanmachine.ppl.compiler.bmg_types.ZeroMatrix":{columns:[11,3,1,""],element_type:[11,3,1,""],long_name:[11,3,1,""],rows:[11,3,1,""],short_name:[11,3,1,""],with_dimensions:[11,2,1,""]},"beanmachine.ppl.compiler.broadcaster":{broadcast_fnc:[12,5,1,""],identity_fnc:[12,5,1,""]},"beanmachine.ppl.compiler.copy_and_replace":{Cloner:[13,1,1,""],NodeTransformer:[13,1,1,""],TransformAssessment:[13,1,1,""],copy_and_replace:[13,5,1,""],flatten:[13,5,1,""]},"beanmachine.ppl.compiler.copy_and_replace.Cloner":{clone:[13,2,1,""]},"beanmachine.ppl.compiler.copy_and_replace.NodeTransformer":{assess_node:[13,2,1,""],transform_node:[13,2,1,""]},"beanmachine.ppl.compiler.copy_and_replace.TransformAssessment":{error_report:[13,3,1,""],node_needs_transform:[13,3,1,""]},"beanmachine.ppl.compiler.copy_transformer":{CopyGraph:[14,1,1,""],copy:[14,5,1,""]},"beanmachine.ppl.compiler.copy_transformer.CopyGraph":{assess_node:[14,2,1,""],transform_node:[14,2,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer":{CopyContext:[15,1,1,""],DevectorizeTransformation:[15,1,1,""],Devectorizer:[15,1,1,""],ElementType:[15,1,1,""],vectorized_graph_fixer:[15,5,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.DevectorizeTransformation":{NO:[15,3,1,""],YES:[15,3,1,""],YES_WITH_MERGE:[15,3,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.Devectorizer":{assess_node:[15,2,1,""],transform_node:[15,2,1,""]},"beanmachine.ppl.compiler.devectorizer_transformer.ElementType":{ANY:[15,3,1,""],SCALAR:[15,3,1,""],TENSOR:[15,3,1,""]},"beanmachine.ppl.compiler.error_report":{BMGError:[16,1,1,""],BadMatrixMultiplication:[16,1,1,""],ErrorReport:[16,1,1,""],ImpossibleObservation:[16,1,1,""],UnsizableNode:[16,1,1,""],UnsupportedNode:[16,1,1,""],UntypableNode:[16,1,1,""],Violation:[16,1,1,""]},"beanmachine.ppl.compiler.error_report.BadMatrixMultiplication":{left_type:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""],right_type:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.ErrorReport":{add_error:[16,2,1,""],any:[16,2,1,""],errors:[16,3,1,""],raise_errors:[16,2,1,""]},"beanmachine.ppl.compiler.error_report.ImpossibleObservation":{distribution_type:[16,3,1,""],node:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UnsizableNode":{node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UnsupportedNode":{consumer:[16,3,1,""],edge:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.UntypableNode":{node:[16,3,1,""],node_locations:[16,3,1,""]},"beanmachine.ppl.compiler.error_report.Violation":{consumer:[16,3,1,""],edge:[16,3,1,""],node:[16,3,1,""],node_locations:[16,3,1,""],node_type:[16,3,1,""],requirement:[16,3,1,""]},"beanmachine.ppl.compiler.execution_context":{CallStack:[17,1,1,""],ExecutionContext:[17,1,1,""],FunctionCall:[17,1,1,""]},"beanmachine.ppl.compiler.execution_context.CallStack":{peek:[17,2,1,""],pop:[17,2,1,""],push:[17,2,1,""]},"beanmachine.ppl.compiler.execution_context.ExecutionContext":{call:[17,2,1,""],current_site:[17,2,1,""],node_locations:[17,2,1,""],record_node_call:[17,2,1,""]},"beanmachine.ppl.compiler.execution_context.FunctionCall":{args:[17,3,1,""],func:[17,3,1,""],kwargs:[17,3,1,""]},"beanmachine.ppl.compiler.fix_additions":{addition_fixer:[18,5,1,""],sum_fixer:[18,5,1,""]},"beanmachine.ppl.compiler.fix_arithmetic":{log1mexp_fixer:[19,5,1,""],neg_neg_fixer:[19,5,1,""],negative_real_multiplication_fixer:[19,5,1,""],nested_if_same_cond_fixer:[19,5,1,""]},"beanmachine.ppl.compiler.fix_beta_conjugate_prior":{beta_bernoulli_conjugate_fixer:[20,5,1,""],beta_binomial_conjugate_fixer:[20,5,1,""]},"beanmachine.ppl.compiler.fix_bool_arithmetic":{BoolArithmeticFixer:[21,1,1,""],bool_arithmetic_fixer:[21,5,1,""]},"beanmachine.ppl.compiler.fix_bool_comparisons":{BoolComparisonFixer:[22,1,1,""],bool_comparison_fixer:[22,5,1,""]},"beanmachine.ppl.compiler.fix_logsumexp":{logsumexp_fixer:[23,5,1,""]},"beanmachine.ppl.compiler.fix_matrix_scale":{matrix_scale_fixer:[24,5,1,""],nested_matrix_scale_fixer:[24,5,1,""],trivial_matmul_fixer:[24,5,1,""]},"beanmachine.ppl.compiler.fix_multiary_ops":{MultiaryOperatorFixer:[25,1,1,""],multiary_addition_fixer:[25,5,1,""],multiary_multiplication_fixer:[25,5,1,""]},"beanmachine.ppl.compiler.fix_multiary_ops.MultiaryOperatorFixer":{accumulate_input_nodes:[25,2,1,""]},"beanmachine.ppl.compiler.fix_normal_conjugate_prior":{normal_normal_conjugate_fixer:[26,5,1,""]},"beanmachine.ppl.compiler.fix_observations":{observations_fixer:[27,5,1,""]},"beanmachine.ppl.compiler.fix_observe_true":{observe_true_fixer:[28,5,1,""]},"beanmachine.ppl.compiler.fix_problem":{NodeFixerError:[29,1,1,""],ancestors_first_graph_fixer:[29,5,1,""],conditional_graph_fixer:[29,5,1,""],edge_error_pass:[29,5,1,""],fixpoint_graph_fixer:[29,5,1,""],identity_graph_fixer:[29,5,1,""],node_error_pass:[29,5,1,""],node_fixer_first_match:[29,5,1,""],sequential_graph_fixer:[29,5,1,""],type_guard:[29,5,1,""]},"beanmachine.ppl.compiler.fix_problems":{arithmetic_graph_fixer:[30,5,1,""],conjugacy_graph_fixer:[30,5,1,""],fix_problems:[30,5,1,""]},"beanmachine.ppl.compiler.fix_requirements":{RequirementsFixer:[31,1,1,""],requirements_fixer:[31,5,1,""]},"beanmachine.ppl.compiler.fix_requirements.RequirementsFixer":{bmg:[31,3,1,""],errors:[31,3,1,""],fix_problems:[31,2,1,""],meet_requirement:[31,2,1,""]},"beanmachine.ppl.compiler.fix_transpose":{identity_transpose_fixer:[32,5,1,""]},"beanmachine.ppl.compiler.fix_unsupported":{UnsupportedNodeFixer:[33,1,1,""],bad_matmul_reporter:[33,5,1,""],unsupported_node_fixer:[33,5,1,""],unsupported_node_reporter:[33,5,1,""],untypable_node_reporter:[33,5,1,""]},"beanmachine.ppl.compiler.gen_bm_python":{ToBMPython:[34,1,1,""],to_bm_python:[34,5,1,""]},"beanmachine.ppl.compiler.gen_bm_python.ToBMPython":{bmg:[34,3,1,""],code:[34,3,1,""],dist_to_rv_id:[34,3,1,""],no_dist_samples:[34,3,1,""],node_to_func_id:[34,3,1,""],node_to_var_id:[34,3,1,""],observations:[34,3,1,""],queries:[34,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_cpp":{GeneratedGraphCPP:[35,1,1,""],to_bmg_cpp:[35,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_cpp.GeneratedGraphCPP":{bmg:[35,3,1,""],code:[35,3,1,""],node_to_graph_id:[35,3,1,""],query_to_query_id:[35,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_graph":{GeneratedGraph:[36,1,1,""],to_bmg_graph:[36,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_graph.GeneratedGraph":{bmg:[36,3,1,""],graph:[36,3,1,""],node_to_graph_id:[36,3,1,""],query_to_query_id:[36,3,1,""]},"beanmachine.ppl.compiler.gen_bmg_python":{GeneratedGraphPython:[37,1,1,""],to_bmg_python:[37,5,1,""]},"beanmachine.ppl.compiler.gen_bmg_python.GeneratedGraphPython":{bmg:[37,3,1,""],code:[37,3,1,""],node_to_graph_id:[37,3,1,""],query_to_query_id:[37,3,1,""]},"beanmachine.ppl.compiler.gen_builder":{GenerateBuilder:[38,1,1,""],generate_builder:[38,5,1,""]},"beanmachine.ppl.compiler.gen_builder.GenerateBuilder":{bmg:[38,3,1,""]},"beanmachine.ppl.compiler.gen_dot":{to_dot:[39,5,1,""]},"beanmachine.ppl.compiler.gen_mini":{ToMini:[40,1,1,""],to_mini:[40,5,1,""]},"beanmachine.ppl.compiler.gen_mini.ToMini":{to_json:[40,2,1,""]},"beanmachine.ppl.compiler.graph_labels":{get_edge_label:[41,5,1,""],get_edge_labels:[41,5,1,""],get_node_error_label:[41,5,1,""],get_node_label:[41,5,1,""]},"beanmachine.ppl.compiler.internal_error":{InternalError:[42,7,1,""],LiftedCompilationError:[42,7,1,""]},"beanmachine.ppl.compiler.internal_error.InternalError":{original_exception:[42,3,1,""]},"beanmachine.ppl.compiler.internal_error.LiftedCompilationError":{ast:[42,3,1,""],source:[42,3,1,""]},"beanmachine.ppl.compiler.lattice_typer":{LatticeTyper:[43,1,1,""]},"beanmachine.ppl.compiler.lattice_typer.LatticeTyper":{is_bool:[43,2,1,""],is_matrix:[43,2,1,""],is_natural:[43,2,1,""],is_neg_real:[43,2,1,""],is_pos_real:[43,2,1,""],is_prob_or_bool:[43,2,1,""],is_real:[43,2,1,""]},"beanmachine.ppl.compiler.patterns":{AnyPattern:[44,1,1,""],AtomicPattern:[44,1,1,""],AttributeSubpattern:[44,1,1,""],BoolPattern:[44,1,1,""],EmptyListPattern:[44,1,1,""],Fail:[44,1,1,""],FailPattern:[44,1,1,""],FloatPattern:[44,1,1,""],HeadTail:[44,1,1,""],IntPattern:[44,1,1,""],ListAll:[44,1,1,""],ListAny:[44,1,1,""],ListPattern:[44,1,1,""],MatchAny:[44,1,1,""],MatchEvery:[44,1,1,""],MatchResult:[44,1,1,""],Negate:[44,1,1,""],NonePattern:[44,1,1,""],PatternBase:[44,1,1,""],PredicatePattern:[44,1,1,""],StringPattern:[44,1,1,""],Subpattern:[44,1,1,""],Success:[44,1,1,""],TypePattern:[44,1,1,""],attribute:[44,5,1,""],is_any:[44,5,1,""],match:[44,5,1,""],match_any:[44,5,1,""],match_every:[44,5,1,""],negate:[44,5,1,""],to_pattern:[44,5,1,""],type_and_attributes:[44,5,1,""]},"beanmachine.ppl.compiler.patterns.AnyPattern":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.AtomicPattern":{match:[44,2,1,""],value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.AttributeSubpattern":{match:[44,2,1,""],name:[44,3,1,""],subpattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.BoolPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.EmptyListPattern":{match:[44,2,1,""],name:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Fail":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.FailPattern":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.FloatPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.HeadTail":{head:[44,3,1,""],match:[44,2,1,""],name:[44,3,1,""],tail:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.IntPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListAll":{match:[44,2,1,""],name:[44,3,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListAny":{match:[44,2,1,""],name:[44,3,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.ListPattern":{match:[44,2,1,""],name:[44,3,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchAny":{match:[44,2,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchEvery":{match:[44,2,1,""],patterns:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.MatchResult":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Negate":{match:[44,2,1,""],pattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.NonePattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.PatternBase":{match:[44,2,1,""]},"beanmachine.ppl.compiler.patterns.PredicatePattern":{match:[44,2,1,""],name:[44,3,1,""],predicate:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.StringPattern":{value:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Subpattern":{get_subtest:[44,3,1,""],match:[44,2,1,""],name:[44,3,1,""],subpattern:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.Success":{is_fail:[44,2,1,""],is_success:[44,2,1,""],submatches:[44,3,1,""],test:[44,3,1,""]},"beanmachine.ppl.compiler.patterns.TypePattern":{match:[44,2,1,""],typ:[44,3,1,""]},"beanmachine.ppl.compiler.performance_report":{PerformanceReport:[45,1,1,""],json_to_perf_report:[45,5,1,""]},"beanmachine.ppl.compiler.performance_report.PerformanceReport":{json:[45,3,1,""]},"beanmachine.ppl.compiler.profiler":{Event:[46,1,1,""],ProfileReport:[46,1,1,""],ProfilerData:[46,1,1,""],event_list_to_report:[46,5,1,""]},"beanmachine.ppl.compiler.profiler.Event":{begin:[46,3,1,""],kind:[46,3,1,""],timestamp:[46,3,1,""]},"beanmachine.ppl.compiler.profiler.ProfileReport":{calls:[46,3,1,""],children:[46,3,1,""],parent:[46,3,1,""],total_time:[46,3,1,""]},"beanmachine.ppl.compiler.profiler.ProfilerData":{begin:[46,2,1,""],events:[46,3,1,""],finish:[46,2,1,""],in_flight:[46,3,1,""],time_in:[46,2,1,""],to_report:[46,2,1,""]},"beanmachine.ppl.compiler.rules":{AllChildren:[47,1,1,""],AllListEditMembers:[47,1,1,""],AllListMembers:[47,1,1,""],AllOf:[47,1,1,""],AllTermChildren:[47,1,1,""],Check:[47,1,1,""],Choose:[47,1,1,""],Compose:[47,1,1,""],Fail:[47,1,1,""],FirstMatch:[47,1,1,""],IgnoreException:[47,1,1,""],ListEdit:[47,1,1,""],OneChild:[47,1,1,""],OneListMember:[47,1,1,""],OrElse:[47,1,1,""],PatternRule:[47,1,1,""],Recursive:[47,1,1,""],Rule:[47,1,1,""],RuleDomain:[47,1,1,""],RuleResult:[47,1,1,""],SomeChildren:[47,1,1,""],SomeListMembers:[47,1,1,""],SomeOf:[47,1,1,""],SpecificChild:[47,1,1,""],Success:[47,1,1,""],Trace:[47,1,1,""],TryMany:[47,1,1,""],TryOnce:[47,1,1,""],always_replace:[47,5,1,""],at_least_once:[47,5,1,""],either_or_both:[47,5,1,""],if_then:[47,5,1,""],ignore_div_zero:[47,5,1,""],ignore_runtime_error:[47,5,1,""],ignore_value_error:[47,5,1,""],list_member_children:[47,5,1,""],make_logger:[47,5,1,""],pattern_rules:[47,5,1,""],projection_rule:[47,5,1,""]},"beanmachine.ppl.compiler.rules.AllChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],combined_rule:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllListEditMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllListMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllOf":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.AllTermChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Check":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Choose":{alternative:[47,3,1,""],always_succeeds:[47,2,1,""],apply:[47,2,1,""],condition:[47,3,1,""],consequence:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Compose":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],first:[47,3,1,""],second:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Fail":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],test:[47,3,1,""]},"beanmachine.ppl.compiler.rules.FirstMatch":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.IgnoreException":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],expected:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.ListEdit":{edits:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OneChild":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OneListMember":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.OrElse":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],first:[47,3,1,""],second:[47,3,1,""]},"beanmachine.ppl.compiler.rules.PatternRule":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],pattern:[47,3,1,""],projection:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Recursive":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule_maker:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Rule":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],name:[47,3,1,""]},"beanmachine.ppl.compiler.rules.RuleDomain":{all_children:[47,2,1,""],bottom_up:[47,2,1,""],construct:[47,3,1,""],descend_until:[47,2,1,""],down_then_up:[47,2,1,""],get_children:[47,3,1,""],one_child:[47,2,1,""],some_bottom_up:[47,2,1,""],some_children:[47,2,1,""],some_top_down:[47,2,1,""],specific_child:[47,2,1,""],top_down:[47,2,1,""]},"beanmachine.ppl.compiler.rules.RuleResult":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],test:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeChildren":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeListMembers":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SomeOf":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rules:[47,3,1,""]},"beanmachine.ppl.compiler.rules.SpecificChild":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],child:[47,3,1,""],construct:[47,3,1,""],get_children:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Success":{expect_success:[47,2,1,""],is_fail:[47,2,1,""],is_success:[47,2,1,""],result:[47,3,1,""]},"beanmachine.ppl.compiler.rules.Trace":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],logger:[47,3,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.TryMany":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.rules.TryOnce":{always_succeeds:[47,2,1,""],apply:[47,2,1,""],rule:[47,3,1,""]},"beanmachine.ppl.compiler.runtime":{BMGRuntime:[48,1,1,""]},"beanmachine.ppl.compiler.runtime.BMGRuntime":{accumulate_graph:[48,2,1,""],handle_dot_get:[48,2,1,""],handle_dot_set:[48,2,1,""],handle_for:[48,2,1,""],handle_function:[48,2,1,""],handle_if:[48,2,1,""],handle_index:[48,2,1,""],handle_not_in:[48,2,1,""],handle_slice:[48,2,1,""],handle_subscript_assign:[48,2,1,""],in_flight:[48,3,1,""],lifted_map:[48,3,1,""],rv_map:[48,3,1,""]},"beanmachine.ppl.compiler.single_assignment":{SingleAssignment:[49,1,1,""],single_assignment:[49,5,1,""]},"beanmachine.ppl.compiler.single_assignment.SingleAssignment":{fresh_names:[49,2,1,""],single_assignment:[49,2,1,""]},"beanmachine.ppl.compiler.size_assessment":{SizeAssessment:[50,1,1,""]},"beanmachine.ppl.compiler.size_assessment.SizeAssessment":{size_error:[50,2,1,""]},"beanmachine.ppl.compiler.sizer":{Sizer:[51,1,1,""],is_scalar:[51,5,1,""],size_to_str:[51,5,1,""]},"beanmachine.ppl.compiler.special_function_caller":{KnownFunction:[52,1,1,""],SpecialFunctionCaller:[52,1,1,""],canonicalize_function:[52,5,1,""],only_ordinary_arguments:[52,5,1,""]},"beanmachine.ppl.compiler.special_function_caller.KnownFunction":{"function":[52,3,1,""],receiver:[52,3,1,""]},"beanmachine.ppl.compiler.special_function_caller.SpecialFunctionCaller":{bind_torch_instance_function:[52,2,1,""],distribution_to_node:[52,2,1,""],do_special_call_always_stochastic:[52,2,1,""],do_special_call_maybe_stochastic:[52,2,1,""],is_special_function:[52,2,1,""],is_special_tensor_bound_instance_method:[52,2,1,""]},"beanmachine.ppl.compiler.support":{ComputeSupport:[53,1,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer":{ElementType:[54,1,1,""],Tensorizer:[54,1,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer.ElementType":{MATRIX:[54,3,1,""],SCALAR:[54,3,1,""],TENSOR:[54,3,1,""],UNKNOWN:[54,3,1,""]},"beanmachine.ppl.compiler.tensorizer_transformer.Tensorizer":{assess_node:[54,2,1,""],can_be_tensorized:[54,2,1,""],div_can_be_tensorized:[54,2,1,""],mult_can_be_tensorized:[54,2,1,""],negate_can_be_tensorized:[54,2,1,""],transform_node:[54,2,1,""]},"beanmachine.ppl.compiler.typer_base":{TyperBase:[55,1,1,""]},"beanmachine.ppl.compiler.typer_base.TyperBase":{update_type:[55,2,1,""]},"beanmachine.ppl.distributions":{Delta:[56,1,1,""],Flat:[56,1,1,""],Unit:[56,1,1,""],delta:[57,0,0,"-"],flat:[58,0,0,"-"],unit:[59,0,0,"-"]},"beanmachine.ppl.distributions.Delta":{arg_constraints:[56,3,1,""],event_dim:[56,4,1,""],expand:[56,2,1,""],has_rsample:[56,3,1,""],log_prob:[56,2,1,""],mean:[56,4,1,""],rsample:[56,2,1,""],shape:[56,2,1,""],support:[56,3,1,""],variance:[56,4,1,""]},"beanmachine.ppl.distributions.Flat":{arg_constraints:[56,3,1,""],has_enumerate_support:[56,3,1,""],has_rsample:[56,3,1,""],log_prob:[56,2,1,""],rsample:[56,2,1,""],sample:[56,2,1,""],support:[56,3,1,""]},"beanmachine.ppl.distributions.Unit":{arg_constraints:[56,3,1,""],expand:[56,2,1,""],log_prob:[56,2,1,""],sample:[56,2,1,""],support:[56,3,1,""]},"beanmachine.ppl.distributions.delta":{Delta:[57,1,1,""],sum_rightmost:[57,5,1,""]},"beanmachine.ppl.distributions.delta.Delta":{arg_constraints:[57,3,1,""],event_dim:[57,4,1,""],expand:[57,2,1,""],has_rsample:[57,3,1,""],log_prob:[57,2,1,""],mean:[57,4,1,""],rsample:[57,2,1,""],shape:[57,2,1,""],support:[57,3,1,""],variance:[57,4,1,""]},"beanmachine.ppl.distributions.flat":{Flat:[58,1,1,""]},"beanmachine.ppl.distributions.flat.Flat":{arg_constraints:[58,3,1,""],has_enumerate_support:[58,3,1,""],has_rsample:[58,3,1,""],log_prob:[58,2,1,""],rsample:[58,2,1,""],sample:[58,2,1,""],support:[58,3,1,""]},"beanmachine.ppl.distributions.unit":{Unit:[59,1,1,""],broadcast_shape:[59,5,1,""]},"beanmachine.ppl.distributions.unit.Unit":{arg_constraints:[59,3,1,""],expand:[59,2,1,""],log_prob:[59,2,1,""],sample:[59,2,1,""],support:[59,3,1,""]},"beanmachine.ppl.inference":{BMGInference:[60,1,1,""],CompositionalInference:[60,1,1,""],GlobalHamiltonianMonteCarlo:[60,1,1,""],GlobalNoUTurnSampler:[60,1,1,""],SingleSiteAncestralMetropolisHastings:[60,1,1,""],SingleSiteHamiltonianMonteCarlo:[60,1,1,""],SingleSiteNewtonianMonteCarlo:[60,1,1,""],SingleSiteNoUTurnSampler:[60,1,1,""],SingleSiteRandomWalk:[60,1,1,""],SingleSiteUniformMetropolisHastings:[60,1,1,""],VerboseLevel:[60,1,1,""],base_inference:[61,0,0,"-"],bmg_inference:[62,0,0,"-"],compositional_infer:[63,0,0,"-"],empirical:[60,5,1,""],hmc_inference:[64,0,0,"-"],monte_carlo_samples:[65,0,0,"-"],nuts_inference:[66,0,0,"-"],predictive:[67,0,0,"-"],proposer:[68,0,0,"-"],sampler:[87,0,0,"-"],seed:[60,5,1,""],simulate:[60,5,1,""],single_site_ancestral_mh:[88,0,0,"-"],single_site_inference:[89,0,0,"-"],single_site_nmc:[90,0,0,"-"],single_site_random_walk:[91,0,0,"-"],single_site_uniform_mh:[92,0,0,"-"],utils:[93,0,0,"-"],vi:[94,0,0,"-"]},"beanmachine.ppl.inference.BMGInference":{infer:[60,2,1,""],to_bm_python:[60,2,1,""],to_cpp:[60,2,1,""],to_dot:[60,2,1,""],to_graph:[60,2,1,""],to_graphviz:[60,2,1,""],to_python:[60,2,1,""]},"beanmachine.ppl.inference.CompositionalInference":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.GlobalHamiltonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.GlobalNoUTurnSampler":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteHamiltonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteNewtonianMonteCarlo":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteNoUTurnSampler":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.SingleSiteRandomWalk":{get_proposers:[60,2,1,""]},"beanmachine.ppl.inference.VerboseLevel":{LOAD_BAR:[60,3,1,""],OFF:[60,3,1,""]},"beanmachine.ppl.inference.base_inference":{BaseInference:[61,1,1,""]},"beanmachine.ppl.inference.base_inference.BaseInference":{get_proposers:[61,2,1,""],infer:[61,2,1,""],sampler:[61,2,1,""]},"beanmachine.ppl.inference.bmg_inference":{BMGInference:[62,1,1,""]},"beanmachine.ppl.inference.bmg_inference.BMGInference":{infer:[62,2,1,""],to_bm_python:[62,2,1,""],to_cpp:[62,2,1,""],to_dot:[62,2,1,""],to_graph:[62,2,1,""],to_graphviz:[62,2,1,""],to_python:[62,2,1,""]},"beanmachine.ppl.inference.compositional_infer":{CompositionalInference:[63,1,1,""]},"beanmachine.ppl.inference.compositional_infer.CompositionalInference":{get_proposers:[63,2,1,""]},"beanmachine.ppl.inference.hmc_inference":{GlobalHamiltonianMonteCarlo:[64,1,1,""],SingleSiteHamiltonianMonteCarlo:[64,1,1,""]},"beanmachine.ppl.inference.hmc_inference.GlobalHamiltonianMonteCarlo":{get_proposers:[64,2,1,""]},"beanmachine.ppl.inference.hmc_inference.SingleSiteHamiltonianMonteCarlo":{get_proposers:[64,2,1,""]},"beanmachine.ppl.inference.monte_carlo_samples":{MonteCarloSamples:[65,1,1,""],Samples:[65,1,1,""]},"beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples":{adaptive_samples:[65,4,1,""],add_groups:[65,2,1,""],diagnostics:[65,3,1,""],get:[65,2,1,""],get_chain:[65,2,1,""],get_log_likelihoods:[65,2,1,""],get_num_samples:[65,2,1,""],get_variable:[65,2,1,""],samples:[65,4,1,""],to_inference_data:[65,2,1,""],to_xarray:[65,2,1,""]},"beanmachine.ppl.inference.monte_carlo_samples.Samples":{adaptive_samples:[65,3,1,""],samples:[65,3,1,""]},"beanmachine.ppl.inference.nuts_inference":{GlobalNoUTurnSampler:[66,1,1,""],SingleSiteNoUTurnSampler:[66,1,1,""]},"beanmachine.ppl.inference.nuts_inference.GlobalNoUTurnSampler":{get_proposers:[66,2,1,""]},"beanmachine.ppl.inference.nuts_inference.SingleSiteNoUTurnSampler":{get_proposers:[66,2,1,""]},"beanmachine.ppl.inference.predictive":{Predictive:[67,1,1,""],empirical:[67,5,1,""],simulate:[67,5,1,""]},"beanmachine.ppl.inference.predictive.Predictive":{empirical:[67,2,1,""],simulate:[67,2,1,""]},"beanmachine.ppl.inference.proposer":{base_proposer:[69,0,0,"-"],base_single_site_mh_proposer:[70,0,0,"-"],hmc_proposer:[71,0,0,"-"],hmc_utils:[72,0,0,"-"],newtonian_monte_carlo_utils:[73,0,0,"-"],nmc:[74,0,0,"-"],nnc:[78,0,0,"-"],normal_eig:[80,0,0,"-"],nuts_proposer:[81,0,0,"-"],sequential_proposer:[82,0,0,"-"],single_site_ancestral_proposer:[83,0,0,"-"],single_site_random_walk_proposer:[84,0,0,"-"],single_site_uniform_proposer:[85,0,0,"-"],utils:[86,0,0,"-"]},"beanmachine.ppl.inference.proposer.base_proposer":{BaseProposer:[69,1,1,""]},"beanmachine.ppl.inference.proposer.base_proposer.BaseProposer":{do_adaptation:[69,2,1,""],finish_adaptation:[69,2,1,""],propose:[69,2,1,""]},"beanmachine.ppl.inference.proposer.base_single_site_mh_proposer":{BaseSingleSiteMHProposer:[70,1,1,""]},"beanmachine.ppl.inference.proposer.base_single_site_mh_proposer.BaseSingleSiteMHProposer":{get_proposal_distribution:[70,2,1,""],propose:[70,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_proposer":{HMCProposer:[71,1,1,""]},"beanmachine.ppl.inference.proposer.hmc_proposer.HMCProposer":{do_adaptation:[71,2,1,""],finish_adaptation:[71,2,1,""],propose:[71,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils":{DictTransform:[72,1,1,""],DualAverageAdapter:[72,1,1,""],MassMatrixAdapter:[72,1,1,""],RealSpaceTransform:[72,1,1,""],WelfordCovariance:[72,1,1,""],WindowScheme:[72,1,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.DictTransform":{inv:[72,2,1,""],log_abs_det_jacobian:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.DualAverageAdapter":{finalize:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.MassMatrixAdapter":{finalize:[72,2,1,""],initialize_momentums:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.WelfordCovariance":{finalize:[72,2,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.hmc_utils.WindowScheme":{is_end_window:[72,4,1,""],is_in_window:[72,4,1,""],step:[72,2,1,""]},"beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils":{compute_eigvals_eigvecs:[73,5,1,""],compute_first_gradient:[73,5,1,""],compute_hessian:[73,5,1,""],hessian_of_log_prob:[73,5,1,""],is_scalar:[73,5,1,""],is_valid:[73,5,1,""],soft_abs_inverse:[73,5,1,""],zero_grad:[73,5,1,""]},"beanmachine.ppl.inference.proposer.nmc":{SingleSiteHalfSpaceNMCProposer:[74,1,1,""],SingleSiteRealSpaceNMCProposer:[74,1,1,""],SingleSiteSimplexSpaceNMCProposer:[74,1,1,""],single_site_half_space_nmc_proposer:[75,0,0,"-"],single_site_real_space_nmc_proposer:[76,0,0,"-"],single_site_simplex_space_nmc_proposer:[77,0,0,"-"]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteHalfSpaceNMCProposer":{compute_alpha_beta:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteRealSpaceNMCProposer":{compute_beta_priors_from_accepted_lr:[74,2,1,""],do_adaptation:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.SingleSiteSimplexSpaceNMCProposer":{compute_alpha:[74,2,1,""],get_proposal_distribution:[74,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer":{SingleSiteHalfSpaceNMCProposer:[75,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer.SingleSiteHalfSpaceNMCProposer":{compute_alpha_beta:[75,2,1,""],get_proposal_distribution:[75,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer":{SingleSiteRealSpaceNMCProposer:[76,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer.SingleSiteRealSpaceNMCProposer":{compute_beta_priors_from_accepted_lr:[76,2,1,""],do_adaptation:[76,2,1,""],get_proposal_distribution:[76,2,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer":{SingleSiteSimplexSpaceNMCProposer:[77,1,1,""]},"beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer.SingleSiteSimplexSpaceNMCProposer":{compute_alpha:[77,2,1,""],get_proposal_distribution:[77,2,1,""]},"beanmachine.ppl.inference.proposer.nnc":{nnc_jit:[78,5,1,""],utils:[79,0,0,"-"]},"beanmachine.ppl.inference.proposer.nnc.utils":{nnc_jit:[79,5,1,""]},"beanmachine.ppl.inference.proposer.normal_eig":{NormalEig:[80,1,1,""]},"beanmachine.ppl.inference.proposer.normal_eig.NormalEig":{log_prob:[80,2,1,""],sample:[80,2,1,""]},"beanmachine.ppl.inference.proposer.nuts_proposer":{NUTSProposer:[81,1,1,""]},"beanmachine.ppl.inference.proposer.nuts_proposer.NUTSProposer":{propose:[81,2,1,""]},"beanmachine.ppl.inference.proposer.sequential_proposer":{SequentialProposer:[82,1,1,""]},"beanmachine.ppl.inference.proposer.sequential_proposer.SequentialProposer":{do_adaptation:[82,2,1,""],finish_adaptation:[82,2,1,""],propose:[82,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_ancestral_proposer":{SingleSiteAncestralProposer:[83,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_ancestral_proposer.SingleSiteAncestralProposer":{get_proposal_distribution:[83,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_random_walk_proposer":{SingleSiteRandomWalkProposer:[84,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_random_walk_proposer.SingleSiteRandomWalkProposer":{beta_dist_from_moments:[84,2,1,""],dirichlet_dist_from_moments:[84,2,1,""],do_adaptation:[84,2,1,""],gamma_dist_from_moments:[84,2,1,""],get_proposal_distribution:[84,2,1,""]},"beanmachine.ppl.inference.proposer.single_site_uniform_proposer":{SingleSiteUniformProposer:[85,1,1,""]},"beanmachine.ppl.inference.proposer.single_site_uniform_proposer.SingleSiteUniformProposer":{get_proposal_distribution:[85,2,1,""]},"beanmachine.ppl.inference.proposer.utils":{DictToVecConverter:[86,1,1,""]},"beanmachine.ppl.inference.proposer.utils.DictToVecConverter":{to_dict:[86,2,1,""],to_vec:[86,2,1,""]},"beanmachine.ppl.inference.sampler":{Sampler:[87,1,1,""]},"beanmachine.ppl.inference.sampler.Sampler":{"throw":[87,2,1,""],send:[87,2,1,""]},"beanmachine.ppl.inference.single_site_ancestral_mh":{SingleSiteAncestralMetropolisHastings:[88,1,1,""]},"beanmachine.ppl.inference.single_site_inference":{SingleSiteInference:[89,1,1,""]},"beanmachine.ppl.inference.single_site_inference.SingleSiteInference":{get_proposers:[89,2,1,""]},"beanmachine.ppl.inference.single_site_nmc":{SingleSiteNewtonianMonteCarlo:[90,1,1,""]},"beanmachine.ppl.inference.single_site_nmc.SingleSiteNewtonianMonteCarlo":{get_proposers:[90,2,1,""]},"beanmachine.ppl.inference.single_site_random_walk":{SingleSiteRandomWalk:[91,1,1,""]},"beanmachine.ppl.inference.single_site_random_walk.SingleSiteRandomWalk":{get_proposers:[91,2,1,""]},"beanmachine.ppl.inference.single_site_uniform_mh":{SingleSiteUniformMetropolisHastings:[92,1,1,""]},"beanmachine.ppl.inference.utils":{VerboseLevel:[93,1,1,""],detach_samples:[93,5,1,""],merge_dicts:[93,5,1,""],safe_log_prob_sum:[93,5,1,""],seed:[93,5,1,""]},"beanmachine.ppl.inference.utils.VerboseLevel":{LOAD_BAR:[93,3,1,""],OFF:[93,3,1,""]},"beanmachine.ppl.inference.vi":{ADVI:[94,1,1,""],MAP:[94,1,1,""],VariationalInfer:[94,1,1,""],autoguide:[95,0,0,"-"],discrepancy:[96,0,0,"-"],gradient_estimator:[97,0,0,"-"],variational_infer:[98,0,0,"-"],variational_world:[99,0,0,"-"]},"beanmachine.ppl.inference.vi.ADVI":{get_guide:[94,2,1,""]},"beanmachine.ppl.inference.vi.MAP":{get_guide:[94,2,1,""]},"beanmachine.ppl.inference.vi.VariationalInfer":{infer:[94,2,1,""],initialize_world:[94,2,1,""],step:[94,2,1,""]},"beanmachine.ppl.inference.vi.autoguide":{ADVI:[95,1,1,""],AutoGuideVI:[95,1,1,""],MAP:[95,1,1,""]},"beanmachine.ppl.inference.vi.autoguide.ADVI":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.autoguide.AutoGuideVI":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.autoguide.MAP":{get_guide:[95,2,1,""]},"beanmachine.ppl.inference.vi.discrepancy":{kl_forward:[96,5,1,""],kl_reverse:[96,5,1,""]},"beanmachine.ppl.inference.vi.gradient_estimator":{monte_carlo_approximate_reparam:[97,5,1,""],monte_carlo_approximate_sf:[97,5,1,""]},"beanmachine.ppl.inference.vi.variational_infer":{VariationalInfer:[98,1,1,""]},"beanmachine.ppl.inference.vi.variational_infer.VariationalInfer":{infer:[98,2,1,""],initialize_world:[98,2,1,""],step:[98,2,1,""]},"beanmachine.ppl.inference.vi.variational_world":{VariationalWorld:[99,1,1,""]},"beanmachine.ppl.inference.vi.variational_world.VariationalWorld":{copy:[99,2,1,""],get_guide_distribution:[99,2,1,""],get_param:[99,2,1,""],set_params:[99,2,1,""],update_graph:[99,2,1,""]},"beanmachine.ppl.model":{RVIdentifier:[100,1,1,""],StatisticalModel:[100,1,1,""],functional:[100,5,1,""],get_beanmachine_logger:[100,5,1,""],param:[100,5,1,""],random_variable:[100,5,1,""],rv_identifier:[101,0,0,"-"],statistical_model:[102,0,0,"-"],utils:[103,0,0,"-"]},"beanmachine.ppl.model.RVIdentifier":{"function":[100,4,1,""],arguments:[100,3,1,""],is_functional:[100,4,1,""],is_random_variable:[100,4,1,""],wrapper:[100,3,1,""]},"beanmachine.ppl.model.StatisticalModel":{functional:[100,2,1,""],get_func_key:[100,2,1,""],param:[100,2,1,""],random_variable:[100,2,1,""]},"beanmachine.ppl.model.rv_identifier":{RVIdentifier:[101,1,1,""]},"beanmachine.ppl.model.rv_identifier.RVIdentifier":{"function":[101,4,1,""],arguments:[101,3,1,""],is_functional:[101,4,1,""],is_random_variable:[101,4,1,""],wrapper:[101,3,1,""]},"beanmachine.ppl.model.statistical_model":{StatisticalModel:[102,1,1,""],functional:[102,5,1,""],param:[102,5,1,""],random_variable:[102,5,1,""]},"beanmachine.ppl.model.statistical_model.StatisticalModel":{functional:[102,2,1,""],get_func_key:[102,2,1,""],param:[102,2,1,""],random_variable:[102,2,1,""]},"beanmachine.ppl.model.utils":{LogLevel:[103,1,1,""],get_beanmachine_logger:[103,5,1,""]},"beanmachine.ppl.model.utils.LogLevel":{DEBUG_GRAPH:[103,3,1,""],DEBUG_PROPOSER:[103,3,1,""],DEBUG_UPDATES:[103,3,1,""],ERROR:[103,3,1,""],INFO:[103,3,1,""],WARNING:[103,3,1,""]},"beanmachine.ppl.world":{BetaDimensionTransform:[104,1,1,""],World:[104,1,1,""],base_world:[105,0,0,"-"],get_default_transforms:[104,5,1,""],get_world_context:[104,5,1,""],init_from_prior:[104,5,1,""],init_to_uniform:[104,5,1,""],initialize_fn:[106,0,0,"-"],utils:[107,0,0,"-"],variable:[108,0,0,"-"],world:[109,0,0,"-"]},"beanmachine.ppl.world.BetaDimensionTransform":{bijective:[104,3,1,""],codomain:[104,3,1,""],domain:[104,3,1,""],forward_shape:[104,2,1,""],inverse_shape:[104,2,1,""],log_abs_det_jacobian:[104,2,1,""]},"beanmachine.ppl.world.World":{copy:[104,2,1,""],enumerate_node:[104,2,1,""],get_variable:[104,2,1,""],initialize_value:[104,2,1,""],initialize_world:[104,2,1,""],latent_nodes:[104,4,1,""],log_prob:[104,2,1,""],replace:[104,2,1,""],update_graph:[104,2,1,""]},"beanmachine.ppl.world.base_world":{BaseWorld:[105,1,1,""],get_world_context:[105,5,1,""]},"beanmachine.ppl.world.base_world.BaseWorld":{call:[105,2,1,""],update_graph:[105,2,1,""]},"beanmachine.ppl.world.initialize_fn":{init_from_prior:[106,5,1,""],init_to_uniform:[106,5,1,""]},"beanmachine.ppl.world.utils":{BetaDimensionTransform:[107,1,1,""],get_default_transforms:[107,5,1,""],initialize_value:[107,5,1,""],is_constraint_eq:[107,5,1,""]},"beanmachine.ppl.world.utils.BetaDimensionTransform":{bijective:[107,3,1,""],codomain:[107,3,1,""],domain:[107,3,1,""],forward_shape:[107,2,1,""],inverse_shape:[107,2,1,""],log_abs_det_jacobian:[107,2,1,""]},"beanmachine.ppl.world.variable":{Variable:[108,1,1,""]},"beanmachine.ppl.world.variable.Variable":{children:[108,3,1,""],distribution:[108,3,1,""],log_prob:[108,4,1,""],parents:[108,3,1,""],replace:[108,2,1,""],value:[108,3,1,""]},"beanmachine.ppl.world.world":{World:[109,1,1,""]},"beanmachine.ppl.world.world.World":{copy:[109,2,1,""],enumerate_node:[109,2,1,""],get_variable:[109,2,1,""],initialize_value:[109,2,1,""],initialize_world:[109,2,1,""],latent_nodes:[109,4,1,""],log_prob:[109,2,1,""],replace:[109,2,1,""],update_graph:[109,2,1,""]},beanmachine:{ppl:[1,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","property","Python property"],"5":["py","function","Python function"],"6":["py","data","Python data"],"7":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:property","5":"py:function","6":"py:data","7":"py:exception"},terms:{"0":[1,9,11,13,48,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,76,77,81,87,90,91,93,97,100,102,104,107,109],"001":[74,77],"007":72,"0149":72,"02434":81,"03431":[94,95],"05254":97,"1":[1,9,11,13,15,18,54,56,58,60,63,64,65,66,67,71,72,74,75,76,77,81,87,90,91,93,94,97,98,100,102,104,107,109],"10":[1,60,66,67,72,74,76,81,90],"100":[61,104,109],"1000":[1,60,66,67,81],"1000000":73,"1007":72,"1111":[71,72,81],"12":103,"1206":71,"1212":73,"1312":97,"14":[27,103],"1506":[94,95,97],"16":103,"1701":81,"1901":71,"1x1":32,"1x2":11,"2":[1,9,15,54,60,61,63,66,71,72,74,75,77,81,87,100,102],"20":103,"2009":72,"2011":71,"2014":[71,72,81],"2017":81,"2_26":72,"2x2":11,"3":[11,15,27,54,60,62,74,75,76,77,87],"30":103,"4":[54,60,61,62,87],"40":103,"4246":[71,72,81],"4693":73,"5":[48,74,76],"6":81,"6114":97,"8":[1,60,64,66,71,72,81],"abstract":[11,44,47,61,69,70,95,105],"boolean":[9,11,27,44],"case":[9,11,47,74,76,104,109],"class":[1,3,6,9,10,11,13,14,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,107,108,109],"default":[1,3,60,61,62,63,64,65,66,67,71,81,87,90,91,104,107,109],"do":[11,31,47,48,74,76],"enum":[15,54,60,93,103],"final":72,"float":[1,3,6,9,44,47,60,64,66,71,72,73,74,76,77,81,84,90,91,94,97,98],"function":[1,9,11,29,47,48,52,56,57,58,59,61,72,73,78,80,93,94,96,97,98,99,100,101,102,104,105,109],"import":78,"int":[1,3,6,9,11,12,29,34,35,36,37,41,44,46,47,60,61,62,63,64,65,66,67,71,72,74,76,78,81,87,89,90,91,93,94,97,98,104,109],"long":25,"new":[31,47,56,57,59,61,70,74,75,76,77,83,84,85,87,93,99,104,108,109],"return":[1,3,6,11,29,31,44,47,48,56,57,58,59,60,61,62,63,64,65,66,67,70,73,74,75,76,77,80,84,87,89,90,91,93,94,98,99,100,102,104,105,107,108,109],"static":[1,60,62,63,67,94,95,100,102],"throw":[11,47,61,87,104,109],"true":[1,4,9,11,39,47,56,57,58,60,61,62,63,64,65,66,67,71,72,81,93,104,107],"try":[44,47],"var":65,"while":[1,60,64],A:[1,9,11,44,47,48,60,61,66,72,78,80,81,86,93,94,95,98,99,104,105,106,107,109],And:11,As:[56,57,59],At:[47,87],But:[9,47],By:[1,60,63],For:[1,9,11,48,60,67,87],IF:22,If:[1,11,31,44,47,60,61,64,65,66,71,81,87,104,107,109],In:[11,104,109],It:[9,11,27,44,47,87],NO:15,NOT:9,No:[1,60,66,71,72,81],Not:[74,76],One:11,That:[11,47],The:[1,9,11,29,31,44,47,48,56,59,60,61,62,63,65,66,71,72,74,75,76,77,81,84,87,97,99,104,108,109],There:11,To:[1,47,60,63,67],__init__:[56,57,59],_ident:47,_instanc:[56,57,59],ab:[71,72,81,94,95,97],abc:[9,16,44,47,55],about:[1,60,63],abov:[1,60,63],absolut:9,acceler:[1,60,64,66,71,81],accept:[1,60,64,66,71,74,76,81,87],accept_log_prob:[69,74,76,84],access:65,accord:[9,87],accumul:[11,31,39,48],accumulate_graph:48,accumulate_input_nod:25,across:[65,93],activ:[60,62],actual:[11,48,60,62],ad:[6,31,47],adapt:[1,60,61,64,66,71,72,74,76,81,87],adapt_mass_matrix:[1,60,64,66,71,81],adapt_step_s:[1,60,64,66,71,81],adaptive_sampl:65,add:[6,9,11,18,104,109],add_addit:6,add_bernoulli:6,add_bernoulli_logit:6,add_beta:6,add_binomi:6,add_binomial_logit:6,add_bitand:6,add_bitor:6,add_bitxor:6,add_boolean:6,add_boolean_matrix:6,add_broadcast:6,add_categor:6,add_categorical_logit:6,add_chi2:6,add_choic:6,add_choleski:6,add_column_index:6,add_compl:6,add_const:6,add_constant_of_matrix_typ:6,add_constant_of_typ:6,add_constant_tensor:6,add_dirichlet:6,add_divis:6,add_elementwise_multipl:6,add_equ:6,add_error:16,add_exp2:6,add_exp:6,add_exp_product:6,add_expm1:6,add_fill_matrix:6,add_flat:6,add_floordiv:6,add_gamma:6,add_greater_than:6,add_greater_than_equ:6,add_group:65,add_halfcauchi:6,add_halfnorm:6,add_i:6,add_if_then_els:6,add_in:6,add_index:6,add_invert:6,add_is_not:6,add_item:6,add_less_than:6,add_less_than_equ:6,add_lkj_choleski:6,add_log10:6,add_log1mexp:6,add_log1p:6,add_log2:6,add_log:6,add_log_prob:6,add_logaddexp:6,add_logist:6,add_logsumexp:6,add_logsumexp_torch:6,add_logsumexp_vector:6,add_lshift:6,add_matrix_addit:6,add_matrix_compl:6,add_matrix_exp:6,add_matrix_log1mexp:6,add_matrix_log:6,add_matrix_multipl:6,add_matrix_neg:6,add_matrix_phi:6,add_matrix_scal:6,add_matrix_sum:6,add_mod:6,add_multi_addit:6,add_multi_multipl:6,add_multipl:6,add_natur:6,add_natural_matrix:6,add_neg:6,add_neg_r:6,add_neg_real_matrix:6,add_nod:6,add_norm:6,add_not:6,add_not_equ:6,add_not_in:6,add_observ:6,add_phi:6,add_poisson:6,add_pos_r:6,add_pos_real_matrix:6,add_pow:6,add_prob:6,add_probability_matrix:6,add_queri:6,add_real:6,add_real_matrix:6,add_rshift:6,add_sampl:6,add_simplex:6,add_squareroot:6,add_studentt:6,add_subtract:6,add_sum:6,add_switch:6,add_tensor:6,add_to_int:6,add_to_matrix:6,add_to_negative_r:6,add_to_negative_real_matrix:6,add_to_positive_r:6,add_to_positive_real_matrix:6,add_to_prob:6,add_to_r:6,add_to_real_matrix:6,add_transpos:6,add_uniform:6,add_vector_index:6,addit:[9,18,25],addition:[56,57,59],addition_fix:18,additionnod:9,adjust:71,advi:[94,95],after:[9,44],after_transform:[39,60,62],again:[11,47],against:[44,73,107],al:[1,60,74,75,76,77,90],algorithm:[1,60,61,62,63,64,66,70,71,72,81,89,90,91,92],algorithms_for_calculating_vari:72,alia:[13,65],all:[1,6,9,11,22,31,33,44,47,60,61,64,65,82,87,100,102,104,109],all_ancestor_nod:6,all_children:47,all_list_edit_memb:47,all_list_memb:47,all_nod:6,all_observ:6,all_of:47,allchildren:47,alllisteditmemb:47,alllistmemb:47,alloc:[56,57,59],allof:47,alltermchildren:47,alon:47,alpha:[1,6,9,20,60,72,73,74,75,76,77,90],alreadi:[104,109],also:[6,27,96,99,104,109],altern:[6,9,47],alwai:[44,47],always_matrix:11,always_replac:47,always_succe:47,alwaysmatrix:11,an:[1,4,9,11,15,24,27,29,31,42,44,47,54,56,57,58,59,60,61,62,63,65,72,104,106,107,109],analog:65,analysi:[9,11],analyt:[20,26],analyz:11,ancestor:[6,29],ancestors_first_graph_fix:29,andrew:[71,72,81],ani:[6,8,9,11,15,16,17,44,47,48,49,52,56,57,59,65],ann_assign:3,anoth:47,anypattern:[3,44],anyposrealmatrix:11,anyrealmatrix:11,anyrequir:11,anyth:[44,47],appear:9,appendix:81,appli:[29,47,72,104,107],applic:[47,87],ar:[1,6,9,11,22,27,31,33,39,44,47,48,56,57,58,59,80,84,87,100,102,104,109],arg:[3,11,17,52,56,57,58,59,69,71,74,76,82,84,104,106],arg_constraint:[56,57,58,59],argument:[1,3,11,48,52,100,101,102,104,109],arithmetic_graph_fix:30,arora:[1,60,74,75,76,77,90],around:[9,86],arrai:93,arviz:65,arxiv:[71,72,73,81,94,95,97],asid:47,assert:[104,109],assess_nod:[13,14,15,54],assign:[3,48],associ:[9,60,62],ast:[3,4,42,47,49],ast_assert:3,ast_boolop:3,ast_compar:3,ast_dict:3,ast_dictcomp:3,ast_for:3,ast_gener:3,ast_if:3,ast_index:3,ast_list:3,ast_listcomp:3,ast_lupl:3,ast_op:3,ast_pattern:[1,2,110],ast_return:3,ast_setcomp:3,ast_str:3,ast_tool:[1,2,110],ast_whil:3,at_least_onc:47,atom:44,atomicpattern:44,attach:11,attempt:[11,23,24,27,31,33,44,61,104,109],attr:3,attribut:[3,44],attributesubpattern:44,aug_assign:3,autoguid:[60,94],autoguidevi:[94,95],autom:[94,95],automat:[44,72,94,95],avail:[1,60,63,99],averag:[1,60,66,71,72,81],avoid:[47,94,96,98],az:65,b:[9,23,47],back:[47,61],bad_matmul_report:33,badmatrixmultipl:16,bar:[1,60,61,63,100,102],base:[1,6,9,10,11,13,14,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,107,108,109],base_constraint:107,base_infer:[1,60,63,64,66,89,90,91,110],base_propos:[1,60,61,63,64,66,68,70,71,82,89,90,91],base_single_site_mh_propos:[60,68,83,85,89],base_world:[1,99,104,109,110],basediagnost:1,baseexcept:87,baseinfer:[1,60,61,63,64,66,87,89,90,91],basepropos:[1,60,61,63,64,66,69,70,71,82,89,90,91],baserequir:[10,11,16,31],basesinglesitemhpropos:[70,83,85,89],baseworld:[99,104,105,109],basic:[31,71],batch:[56,57,58,59,80],batch_shap:[56,57,59],batch_siz:[56,57,59],bayesian:[20,26],bean:[7,16,22,31,33,49,60,62,100,102],beanstalk:48,beanstalk_common:[1,2,110],becaus:[9,11],befor:[47,61,94,98,104,109],begin:[46,65],behavior:[1,60,61,63,87,96],belief:9,bell:9,bernoulli:[9,11,20,48],bernoullibas:9,bernoullilogitnod:[6,9],bernoullinod:[6,9],best:31,beta:[1,6,9,11,20,60,74,75,76,84,90,104,107],beta_bernoulli_conjugate_fix:[20,30,36,39,60,62],beta_binomial_conjugate_fix:[20,30,36,39,60,62],beta_dist_from_mo:84,betadimensiontransform:[104,107],betancourt:[1,60,66,81],betanod:[6,9],between:[1,9,11,60,63,74,76],bigger:11,biject:[61,94,95,104,106,107],binari:[9,24,25],binary_compar:3,binaryoperatornod:9,bind_torch_instance_funct:52,binomi:[9,11,20],binomiallogitnod:[6,9],binomialnod:[6,9],binomialnodebas:9,binop:3,bit:9,bitandnod:9,bitornod:9,bitxornod:9,block:[1,60,63,64,66],bm:[1,60,61,62,63,100,101,102,104,109],bm_graph_build:[1,2,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,50,52,54,110],bm_to_bmg:[1,2,110],bmg:[6,9,11,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,40,48,52,60,62],bmg_infer:[1,60,110],bmg_node:[1,2,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,31,32,33,34,35,36,37,41,43,48,50,52,54,55,110],bmg_node_typ:[1,2,110],bmg_old:14,bmg_origin:13,bmg_raw:39,bmg_requir:[1,2,110],bmg_type:[1,2,6,10,16,31,43,110],bmgelementtyp:11,bmgerror:[16,29,50],bmginfer:[60,62],bmglatticetyp:[6,10,11,16,31,43],bmgmatrixtyp:[6,11,16],bmgnode:[6,8,9,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,31,32,33,34,35,36,37,41,43,48,50,52,54,55],bmgraphbuild:[6,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,50,52,54],bmgruntim:48,bodi:3,bool:[1,4,6,8,9,11,14,15,16,18,22,28,29,30,31,33,39,43,44,46,47,51,52,54,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,81,93,107],bool_arithmetic_fix:21,bool_comparison_fix:22,boolarithmeticfix:21,boolcomparisonfix:22,booleanmatrix:11,booleannod:[6,9],boolop:3,boolpattern:44,both:[9,11,25,44,47],bottom:[11,47],bottom_up:47,bound:11,broadcast:[1,2,56,57,59,110],broadcast_fnc:12,broadcast_shap:59,broadcastmatrixtyp:11,broadcastnod:[6,9],build:[4,29],builder:[6,22,31,33,38,39,48,49],burn:[60,62],c:[3,11,23,47,48,60,62,65],cache_s:[104,107],calcul:[70,72],call:[3,9,11,17,44,46,48,56,57,59,60,62,100,102,105],call_to:3,callabl:[1,12,13,15,17,18,19,20,21,22,23,24,25,26,29,30,32,33,44,47,48,49,52,60,61,63,73,78,94,97,98,99,100,101,102,104,109],callback:[94,98],callstack:17,can:[1,9,11,20,25,26,44,47,60,63,72,104,109],can_be_tensor:54,cannot:[1,31,60,63],canonicalize_funct:52,carlo:[1,60,62,64,66,67,71,72,74,75,76,77,81,87,90,94,98,104,109],categor:[1,9,60,92,104,106],categoricallogitnod:[6,9],categoricalnod:[6,9],categoricalnodebas:9,cauchi:9,caus:11,cdf:9,chain:[25,60,61,62,65],chain_result:65,chainto:65,chang:[1,60,62,63,108],character:9,check:[11,29,44,47,56,57,59,104,107],check_constraint:107,chi2:9,chi2nod:[6,9],child:47,children:[46,47,108],choic:9,choicenod:[6,9],choleski:9,choleskynod:9,choos:47,classmethod:[104,109],clear:11,clone:13,cloner:[13,14,15,54],cluster:9,co:72,code:[34,35,37,42,48,60,62],codomain:[104,107],coin:[9,48],collect:[104,109],column:[6,9,11],columnindexnod:9,combin:[1,44,47,60,63],combined_rul:47,come:9,common:9,compar:3,comparison:[9,22],comparisonnod:9,compil:[0,1,60,62,63,64,66,71,78,81,110],complement:[9,18],complementnod:9,complex:11,compos:47,composetransform:[73,74,77],composit:[1,60,63],compositional_inf:[1,60,110],compositionalinfer:[1,60,63],comput:[9,11,48,65,72,73,74,75,76,77,82,93,104,107],compute_alpha:[74,77],compute_alpha_beta:[74,75],compute_beta_priors_from_accepted_lr:[74,76],compute_eigvals_eigvec:73,compute_first_gradi:73,compute_hessian:73,computesupport:53,concaten:86,concentr:[6,9,84],concept:47,conceptu:[1,60,66,81],concis:11,condit:[6,9,11,29,47,70],conditional_graph_fix:29,configur:[1,60,63],conjug:[20,26],conjugacy_graph_fix:30,conjunct:108,consequ:[6,9,47],consid:47,consist:[60,62],console_level:[100,103],constant:[1,6,9,11,48,60,64],constantbooleanmatrixnod:[6,9],constantnaturalmatrixnod:[6,9],constantnegativerealmatrixnod:[6,9],constantnod:[6,9],constantpositiverealmatrixnod:[6,9],constantprobabilitymatrixnod:[6,9],constantrealmatrixnod:[6,9],constantsimplexmatrixnod:[6,9],constanttensornod:[6,9],constrain:[72,104,106,107],constraint:[104,107],construct:[47,60,62,94,95],consum:[16,31],contain:[1,4,9,47,60,62,67,72,99,104,107,108,109],content:[39,110,111],context:[11,50,61,104,109],continu:[1,60,63,104,106],control:9,conveni:11,convers:9,convert:[11,38,86,93],convex:72,copi:[14,99,104,109],copy_and_replac:[1,2,14,15,54,110],copy_transform:[1,2,110],copycontext:15,copygraph:14,core:65,correl:9,correspond:[1,60,61,62,63,64,66,67,72,89,90,91,94,98,100,101,104,106],could:[9,11],count:[6,9],covari:80,cover:96,cpu:[94,97,98],creat:[6,9,39,48,56,57,59,100,102],create_graph:73,csiszar:96,ctx:3,cumul:9,current:[60,62,70,71,74,76,81,87,94,98,99,104,109],current_sit:17,curv:9,d:[9,73],d_f:96,dag:11,data:[6,56,59,65],dataset:65,debug:[4,47],debug_graph:103,debug_propos:103,debug_upd:103,declar:[16,100,102],decomposit:80,decor:[1,100,102],decorator_list:3,decreas:[20,25,26],deduc:[60,62],dedupl:9,def:[1,48,100,102,104,109],default_namespac:65,defin:[1,11,70,100,102],delai:47,delet:[20,26,47],delta:[1,56,60,66,72,81,94,95,110],denot:72,densiti:[56,57,58,59,80],depend:[11,47],deprec:61,depth:[1,60,66,81],deriv:[44,56,57,59,97],descend:[29,47],descend_until:47,describ:[71,81],descript:39,desir:[56,57,59],det:[72,104,107],detach:93,detach_sampl:93,detect:16,determin:86,determinist:[100,102],devector:15,devectorizer_transform:[1,2,110],devectorizetransform:15,develop:[60,62],deviat:9,devic:[94,97,98],df:[6,9],diagnost:[1,65],diagnosticstool:65,diagon:[72,74,77],dict:[1,6,17,34,35,36,37,44,46,47,48,52,60,61,62,63,65,67,72,86,93,94,95,97,98,99,104,109],dict_in:86,dictionari:[65,72,86,93,104,109],dicttovecconvert:86,dicttransform:72,die:9,differ:[1,9,47,60,63,107],differenti:[94,95],dim:[6,9,57,93],dimens:[56,57,59,93],dimension:11,direct:[9,11],directli:48,dirichlet:[9,74,77,84],dirichlet_dist_from_mo:84,dirichletnod:[6,9],disabl:[60,62],discard:[60,62],discrep:[60,94,98],discrepancy_fn:[94,97,98],discret:[1,60,63,92,104,106],displai:[61,78],dist_to_rv_id:34,dist_typ:8,distanc:[74,76],distinct:9,distrib:[93,94,95],distribut:[0,1,9,48,52,60,61,62,67,70,72,73,74,75,76,77,80,81,83,84,85,91,92,94,95,98,99,100,102,104,106,107,108,109,110],distribution_to_nod:52,distribution_typ:16,distributionnod:[6,8,9,52],distributiontyp:8,div_can_be_tensor:54,diverg:[96,97],divis:9,divisionnod:[9,54],do_adapt:[69,71,74,76,82,84],do_special_call_always_stochast:52,do_special_call_maybe_stochast:52,doc:72,doe:[11,31,47,48,56,57,59,60,62,71,81],doi:72,domain:[104,107],dot:[4,39,60,62],down:47,down_then_up:47,draw:72,drawn:[9,65,81],dual:[1,60,66,71,72,81],dualaverageadapt:72,dump:39,dure:[1,11,20,25,26,48,60,62,64,65,72,87,93,100,102,108],dx:[72,104,107],dy:[72,104,107],dynam:[1,60,64,71],e:[1,56,59,60,63,94,98,100,102],each:[1,9,11,29,47,60,61,62,64,66,72,87,90,94,98],edg:[6,11,16,20,25,26,29,31],edge_error_pass:29,edge_requir:39,edgerequir:10,edit:47,effect:47,effective_sample_s:1,effort:31,eig_val:80,eig_vec:80,eigen:[73,80],either:[9,11,44,47,48,61],either_or_both:47,elbo:[94,96,98],element:[6,9,44,47,107],element_typ:11,elementtyp:[15,54],elementwisemultiplynod:9,elimin:32,ellipsi:[1,60,63],els:[47,65],elt:3,emit:48,empir:[1,60,67],empti:[44,47,59],empty_list:44,emptylistpattern:44,en:72,enabl:[1,60,63,93],encapsul:44,energi:[1,60,66,72,81],engin:[9,44,47,62],ensur:6,entir:[39,84],entri:86,enumer:[15,39,54,104,109],enumerate_nod:[104,109],equal:[3,11,107],equalnod:9,equival:[22,33,48,59,71],error:[11,16,27,29,31,42,61,87,103,104,109],error_report:[1,2,13,14,15,28,29,30,31,33,50,110],errorreport:[13,14,15,16,28,29,30,31,33],estim:[72,94,95,97,98],et:[1,60,74,75,76,77,90],eta:[6,9],euclidean:72,evalu:[56,57,58,59,80,94,96,98,104,109],event:46,event_dim:[56,57],event_list_to_report:46,everi:[1,9,29,31,44,47,48,60,61,63,64,66,89,90,91,100,102],evid:9,exact:11,exactli:11,exampl:[1,9,11,60,63,67,104,109],example_dict:86,except:[11,42,47,87,93],exclud:[74,77],exclus:96,execut:[29,47,48,87],execution_context:[1,2,6,16,110],executioncontext:[6,17],exist:[47,56,57,59],exp2nod:9,exp:[9,23],expand:[56,57,59],expect:[47,84],expect_success:47,expens:47,experiment:[60,62,71,78,81],experimental_inductor_compil:[1,60,64,66],expm1:9,expm1nod:9,expnod:9,exponenti:9,expproductfactornod:[6,9],expr:3,express:[4,11,23,47],extend:59,extens:9,f:[1,52,78,79,94,96,97,98,100,102],factor:[6,9,11,56,59,94,98],factor_typ:8,factori:108,factornod:[8,9],factortyp:8,fail:[29,44,47],failpattern:44,failur:44,fall:61,fals:[1,9,11,39,56,58,60,61,62,64,65,66,67,71,72,73,74,76,81,107],famili:[1,60,63],featur:48,field:[13,65,108],fifth:48,file_level:[100,103],fillmatrixnod:[6,9],find:[11,27,47,74,76],finish:46,finish_adapt:[69,71,82],first:[11,44,47,48,56,57,59,73],first_grad:[74,75],first_gradi:73,first_match:47,firstmatch:47,fit:11,five:48,fix:[1,11,26,27,31,33,60,64,104,109],fix_addit:[1,2,110],fix_arithmet:[1,2,110],fix_beta_conjugate_prior:[1,2,110],fix_bool_arithmet:[1,2,110],fix_bool_comparison:[1,2,110],fix_logsumexp:[1,2,110],fix_matrix_scal:[1,2,110],fix_multiary_op:[1,2,110],fix_normal_conjugate_prior:[1,2,110],fix_observ:[1,2,110],fix_observe_tru:[1,2,110],fix_problem:[1,2,18,19,20,21,22,23,24,25,26,31,32,33,110],fix_requir:[1,2,110],fix_transpos:[1,2,110],fix_unsupport:[1,2,110],fixer:[18,19,20,23,24,25,26,27,29,32],fixpoint_graph_fix:29,flag:71,flat:[1,9,56,71,110],flatnod:[6,9],flatten:[13,72,86],flip:[9,48],floatpattern:44,floordivnod:9,flow:9,follow:[11,72,81,87],foo:[1,60,63,100,102,104,109],forc:96,fork:61,forkserv:61,form:[23,48],forward:[96,104,107],forward_shap:[104,107],found:[11,99,104,109],four:48,fourth:48,fraction:[74,76],fragment:[60,62],framework:[60,62],fresh_nam:49,from:[1,6,9,11,20,26,44,47,60,61,62,65,67,71,72,81,87,92,94,96,98,104,106,107,108],full:[1,60,67,93],full_mass_matrix:[1,60,64,66,71,72,81],func:[3,17,52],function_def:3,functioncal:[16,17],g:[1,100,102],gamma:[9,74,75,84],gamma_dist_from_mo:84,gammanod:[6,9],gaussian:[9,94,95],gb:29,gelman:[1,60,66,71,72,81],gen_bm_python:[1,2,110],gen_bmg_cpp:[1,2,110],gen_bmg_graph:[1,2,110],gen_bmg_python:[1,2,110],gen_build:[1,2,110],gen_dot:[1,2,110],gen_mini:[1,2,110],gener:[1,3,9,11,55,56,57,58,59,60,61,62,67,72,80,86,87,95],generate_build:38,generatebuild:38,generatedgraph:36,generatedgraphcpp:35,generatedgraphpython:37,get:[9,20,26,65,87,99,104,107],get_beanmachine_logg:[100,103],get_chain:65,get_children:47,get_default_transform:[104,107],get_edge_label:41,get_error:29,get_func_kei:[100,102],get_guid:[94,95],get_guide_distribut:99,get_log_likelihood:65,get_node_error_label:41,get_node_label:41,get_num_sampl:65,get_param:99,get_propos:[1,60,61,63,64,66,89,90,91],get_proposal_distribut:[70,74,75,76,77,83,84,85],get_subtest:44,get_valu:3,get_vari:[65,104,109],get_world_context:[104,105],give:[56,58],given:[9,11,29,31,44,47,74,75,77,84,104,107,108],global:[1,60,64,66],globalhamiltonianmontecarlo:[1,60,64],globalnouturnpropos:[1,60,63],globalnouturnsampl:[1,60,63,66],go:[11,74,76],goal:11,good:11,gradient:[1,60,73,74,75,76,77,90,94,97,98],gradient_estim:[60,94],graph:[1,4,6,7,8,9,11,16,20,22,25,26,29,31,33,36,38,39,48,49,60,61,62,63,99,104,109],graph_label:[1,2,110],graphic:[104,109],graphviz:[60,62],greater:11,greater_than:3,greater_than_equ:3,greaterthanequalnod:9,greaterthannod:9,greatest:11,greatli:[20,25,26],guid:[94,95,98,99,100,102],ha:[9,11,31,44,47,48,56,59],had:9,half:[9,74,75],halfcauchynod:[6,9],halfnormalnod:[6,9],hamiltonian:[1,60,64,66,71,72,81],handl:[47,87],handle_dot_get:48,handle_dot_set:48,handle_for:48,handle_funct:48,handle_if:48,handle_index:48,handle_not_in:48,handle_slic:48,handle_subscript_assign:48,happen:47,hard:73,has_enumerate_support:[56,58],has_rsampl:[56,57,58],hast:[1,60,70,91,92],have:[9,11,48,94,98],head:[9,44],head_tail:44,headtail:44,healthi:65,heavier:9,help:[94,98],helper:[78,93,105],hessian:[73,74,77],hessian_diag:[74,75],hessian_fn:73,hessian_of_log_prob:73,hierarch:4,high:[6,9,48,60,62],highli:[60,62],hmc:[1,60,66,71,72,81],hmc_infer:[1,60,110],hmc_propos:[60,68,81],hmc_util:[60,68],hmcpropos:[71,81],hoffman:[1,60,66,71,72,81],hot:11,how:[11,47,60,93],howev:[11,47,84],html:72,http:[71,72,73,81,94,95,97],human:4,hyperparamet:[1,60,66],i:[1,41,56,59,60,63,67,71,74,77],id:3,id_from_cal:3,idea:31,ident:[9,72],identifi:[100,102],identity_fnc:12,identity_graph_fix:29,identity_transpose_fix:32,ie:[104,109],if_exp:3,if_stat:3,if_then:47,iff:47,ifthenelsenod:9,ignore_div_zero:47,ignore_runtime_error:47,ignore_value_error:47,ignoreexcept:47,implement:[1,11,47,48,60,61,62,63,64,66,71,72,81,89,90,91,100,102],imposs:27,impossibleobserv:16,improp:[56,58],in_flight:[46,48],includ:[1,39,60,62,65,90],include_adapt_step:65,inclus:96,incom:11,increas:[1,60,64,66,72,81],indent:40,independ:[1,60,63,90,107],independentconstraint:[104,107],index:[3,9,29,48],indexnod:9,indic:[9,11,60,62,65,71,81,107],indirectli:48,individu:84,inf:[73,87],infer:[0,1,9,20,25,26,100,102,104,107,108,109,110],inference_data:65,inference_dict:[1,60,63],inference_typ:[60,62],inferencedata:65,inferencetyp:[60,62],infimum:11,infin:93,infinit:61,info:[100,103],inform:48,inherit:[61,70],init_fn:[1,100,102],init_from_prior:[99,104,106,109],init_to_uniform:[61,104,106,109],initi:[61,71,72,78,81,87,89,94,95,98,99,104,106,107,109],initial_epsilon:72,initial_posit:72,initial_step_s:[1,60,64,66,71,81],initial_world:[71,81,87],initialize_fn:[1,61,99,104,109,110],initialize_from_prior:107,initialize_momentum:72,initialize_valu:[104,107,109],initialize_world:[94,98,104,109],innod:9,input:[6,9,11,13,31,48,104,107],input_s:[12,16],inputlist:9,insert:11,instanc:[11,44,48,56,57,59,107],instanti:[104,109],instead:[48,61,81],integ:[9,44],intend:47,interest:[9,72],interfac:[60,62],intern:[42,60,62,104,109],internal_error:[1,2,110],internalerror:42,interop:48,intpattern:44,introduc:[11,47,72,81],introduct:[1,60,66,81],inv:72,invari:6,invers:[9,72,73,84,104,107],inverse_shap:[104,107],invertnod:9,invok:[78,94,98,105],involv:[19,24,48],is_accept:[74,76],is_ani:44,is_atom:11,is_bool:43,is_constraint_eq:107,is_convertible_to:11,is_end_window:72,is_fail:[44,47],is_funct:[1,100,101],is_in_window:72,is_leaf:9,is_logit:9,is_matrix:43,is_natur:43,is_neg_r:43,is_on:[9,11],is_pos_r:43,is_prob_or_bool:43,is_random_vari:[1,100,101],is_real:43,is_scalar:[51,73],is_singleton:11,is_special_funct:52,is_special_tensor_bound_instance_method:52,is_success:[44,47],is_supported_by_bmg:8,is_valid:73,is_zero:[9,11],isnod:9,isnotnod:9,item:[9,47],item_count:9,itemcount:9,itemnod:9,iter:[1,3,9,47,48,60,61,63,72,87,94,95,104,107,109],ith:[74,77],its:[1,6,11,47,60,62,64,70,80,99,104,105,109],jacobian:[72,104,107],jargon:48,jit_backend:[71,81],joint:[82,87,104,109],jointli:[1,60,63,64,66],json:45,json_to_perf_report:45,just:[9,44],keep:[47,104,109],keepdim:[6,9],kei:[1,3,61,72,86,100,101,102],kernel:[1,60,66,87],keytyp:86,keyword:3,kind:[11,46],kl:96,kl_forward:96,kl_revers:[94,96,98],know:[9,11,47],known:96,knownfunct:52,kw_default:3,kwarg:[3,17,48,52,59,69,71,74,76,82,84,89,94,95,104,109],kwonlyarg:3,l:9,label_edg:[39,60,62],lambda:[94,98],languag:[39,48,60,62],larger:11,largest:11,last:47,latent:[1,60,63,67,104,109],latent_nod:[104,109],latter:11,lattic:11,lattice_to_bmg:11,lattice_typ:[1,2,10,18,19,21,22,24,31,32,33,110],latticetyp:[10,18,19,21,22,24,31,32,33,43],lazili:78,lead:[1,20,25,26,60,64,66,81],leaf:6,leapfrog:[1,60,64],learn:[1,60,63,72,74,76,100,102],least:47,leav:47,left:[3,6,9,11,48],left_typ:16,length:[1,60,64,66,71,72,81],less_than:3,less_than_equ:3,lessthanequalnod:9,lessthannod:9,let:[11,65],level:[48,103],lift:[42,48],lifted_map:48,liftedcompilationerror:42,like:[9,47,73,100,102],likelihood:[1,20,26,60,67],limit:[60,62],list:[1,3,6,9,10,12,13,14,15,16,25,29,34,41,44,46,47,48,49,52,54,60,61,62,63,64,65,66,67,82,89,90,91,93,104,107,109],list_al:44,list_ani:44,list_member_children:47,list_pattern:44,listal:44,listani:44,listedit:47,listpattern:44,liter:61,lkj:9,lkjcholeski:9,lkjcholeskynod:[6,9],ll:[47,48],load_bar:[60,93],loc:[6,9],log10nod:9,log1mexp:9,log1mexp_fix:19,log1mexpnod:9,log1pnod:9,log2nod:9,log:[9,23,47,56,57,58,59,72,74,76,80,82,96,97,100,103,104,107,109],log_abs_det_jacobian:[72,104,107],log_dens:[56,57],log_factor:[56,59],log_likelihood:65,log_prob:[9,56,57,58,59,80,93,96,104,108,109],logaddexp:9,logaddexpnod:[6,9],loger:9,logger:[47,100,103],logic:[9,44],logisticnod:9,loglevel:[100,103],logll_result:65,lognod:9,logp:[94,98],logprob:108,logprobnod:[6,9],logq:[94,98],logsumexp:[9,23],logsumexp_fix:23,logsumexpnod:[6,9],logsumexptorchnod:[6,9],logsumexpvectornod:[6,9],logu:96,long_nam:11,look:47,loop:[60,93],loss:[94,97,98],low:[6,9],lower:[3,11,48],lshiftnod:9,m:[71,72],machin:[7,16,22,31,33,49,60,62,100,102],made:31,magnitud:84,maintain:[6,108],make:[29,31,61,62,104,109],make_logg:47,manag:[104,109],mani:47,manipul:[104,109],manual:72,map:[59,60,62,65,73,94,95,97,99,103,104,109],margin:[1,60,67],marker:9,mass:[1,56,57,58,59,60,64,71,72,80,81,96],massmatrixadapt:72,match:[3,44,47,94,95,107],match_ani:44,match_everi:44,matchani:44,matcheveri:44,matchresult:44,math:9,matric:[9,11,72],matrix:[1,6,9,11,24,54,60,64,71,72,73,81],matrix_s:72,matrix_scal:24,matrix_scale_fix:24,matrixaddnod:9,matrixcomplementnod:9,matrixexpnod:9,matrixlog1mexpnod:9,matrixlognod:9,matrixmultiplicationnod:[9,16],matrixnegatenod:9,matrixphinod:9,matrixscalenod:9,matrixsumnod:9,matthew:[71,72,81],max:[74,77],max_delta_energi:[1,60,66,81],max_init_retri:61,max_lr_num:[74,76],max_retri:[104,109],max_tree_depth:[1,60,66,81],maximum:[1,60,66,74,77,81,94,95],mb:11,mc:[65,72],mc_approx:[94,98],mcmc:[1,60,64,71,74,75,76,77,87,90,104,109],mean:[9,56,57,60,62,74,76,80],mechan:[71,72],meet:[1,11,31,47,60,74,75,76,77,90],meet_requir:31,member:[9,47],memoiz:48,memoizationkei:48,memori:[48,56,57,59],merg:93,merge_dict:93,messag:42,met:11,metadata:[104,108,109],method:[1,56,57,59,60,61,62,63,65,72,74,75,76,77,87,90,104,109],metric:72,metropoli:[1,60,70,91,92],mh:87,michael:[1,60,66,81],might:[9,11,48],min_alpha_valu:[74,77],minim:[11,94,96,98],mint:9,minu:9,mn:11,mode:[94,95,96],model:[0,1,6,9,16,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,104,105,108,109,110],modifi:47,modnod:9,modul:[110,111],moment:[74,76],momentum:72,monoton:72,mont:[1,60,62,64,66,67,71,72,74,75,76,77,81,87,90,94,98,104,109],monte_carlo_approximate_reparam:[94,97,98],monte_carlo_approximate_sf:97,monte_carlo_sampl:[1,60,61,62,67,110],montecarlosampl:[1,60,61,62,65,67],more:[1,11,44,47,60,63],move:70,mp:11,mp_context:61,mr:11,msg:3,mu:[1,6,9,26,84,100,102],much:[60,93],mult_can_be_tensor:54,multi:[1,60,64],multiari:[18,25],multiary_addition_fix:25,multiary_multiplication_fix:25,multiaryoperatorfix:25,multinomi:[1,60,66,81],multinomial_sampl:[1,60,66,81],multipl:[1,9,11,19,24,25,60,61,63,66,93],multipli:11,multiplicationnod:[9,54],multiprocess:61,multivari:80,multivariatenorm:72,must:[1,9,11,31,44,47,60,63],must_be_matrix:11,mutablemap:99,mutat:[11,48],n:[3,9,25],name:[3,31,44,47,48,49,52],name_const:3,namedtupl:65,namespac:65,nan:73,nativ:48,natur:[9,11],naturalmatrix:11,naturalnod:[6,9],ndarrai:93,neal:[1,60,64,71],need:[11,47,56,57,59,100,102,104,107,109],neg:[9,11,19,73,94,96,98],neg_hessian:73,neg_neg_fix:19,negat:[9,18,44],negate_can_be_tensor:54,negatenod:[9,54],negative_real_multiplication_fix:19,negativerealmatrix:11,negativerealnod:[6,9],nested_if_same_cond_fix:19,nested_matrix_scale_fix:24,nesterov:72,net:47,new_input:[13,14,15,54],newtonian:[1,60,62,74,75,76,77,90],newtonian_monte_carlo_util:[60,68],next:[70,81,87],nim:[1,60,74,75,76,77,90],nmc:[60,62,68],nnc:[1,60,63,64,66,68,71,81],nnc_compil:[1,60,63,64,66,71,81],nnc_jit:[78,79],no_dist_sampl:34,node:[4,6,8,9,10,11,13,14,15,16,17,20,22,24,25,26,27,29,31,33,39,41,43,47,48,49,50,54,55,70,73,74,75,76,77,83,84,85,99,104,105,109],node_error_pass:29,node_fix:29,node_fixer_first_match:29,node_loc:[16,17],node_needs_transform:13,node_s:39,node_to_func_id:34,node_to_graph_id:[35,36,37],node_to_var_id:34,node_typ:[6,16,39],node_v:[72,73],node_var:[74,77],nodefixererror:[18,19,20,21,22,23,24,25,26,29,32,33],nodetransform:[13,14,15,54],non:[1,9,60,61,63,64,66,89,90,91],none:[1,6,16,17,18,19,20,21,22,23,24,25,26,29,32,33,40,42,44,45,46,47,48,55,56,57,59,60,61,63,65,67,69,71,72,73,74,76,78,79,82,84,87,93,94,98,99,104,109],nonepattern:44,nonnorm:[56,59],nor:71,noreturn:87,norm:84,normal:[1,9,26,48,60,80,91,100,102,104,109],normal_eig:[60,68],normal_normal_conjugate_fix:[26,30,36,39,60,62],normaleig:80,normalnod:[6,9],not_equ:3,notat:72,note:[9,11,47,48,60,62],notequalnod:9,noth:[44,47],notinnod:9,notnod:9,now:11,np:[59,93],num:3,num_adaptive_sampl:[1,60,61,62,63,64,65,66,71,72,81,87,89,90,91],num_chain:[60,61,62],num_sampl:[1,60,61,62,67,87,94,97,98],num_step:[94,98],number:[1,9,11,13,20,25,26,60,61,62,63,65,67,71,81,87,94,98,104,109],numel:[56,59],numer:[1,60,66,81,103],numpi:93,nut:[72,81],nuts_infer:[1,60,110],nuts_propos:[60,68],nutspropos:81,obei:48,object:[1,3,6,9,10,11,13,15,16,17,21,22,25,29,31,33,34,35,36,37,38,40,44,45,46,47,48,49,50,52,60,61,62,67,69,72,94,98,100,101,102,104,105,108,109],obs_queri:[1,60,67],observ:[1,6,9,16,20,26,27,29,34,48,60,61,62,63,64,65,66,67,89,90,91,94,95,97,98,99,104,109],observations_fix:27,observe_true_fix:28,off:[60,93],oh:11,onc:[11,20,26,29,47],one:[1,11,29,44,47,60,66,67,94,98],one_child:47,onechild:47,onehotmatrix:11,onelistmemb:47,onli:[11,19,47,48,60,62,65,84],onlin:72,only_ordinary_argu:52,op:3,oper:[6,9,22,25,33,74,76],operand:[3,6,9,22,48],operator_typ:8,operatornod:[8,9],operatortyp:8,optim:[1,9,60,62,94,98,100,102],option:[1,3,9,12,13,14,15,17,29,42,44,45,46,47,48,50,54,60,61,63,65,67,73,78,87,94,98,99,104,105,109],or_els:47,order:[1,11,39,47,60,74,75,76,77,86,90],ordinari:24,orels:[3,47],org:[71,72,73,81,94,95,97],origin:[13,14,15,47,48,54,93,99,104,109],original_except:42,original_nod:54,orphan:39,other:[3,11,48,86],otherwis:[44,47,65,99,104,106,107],our:[1,9,11,60,63,74,76],out:[86,93],outcom:9,output:[6,9,11,47,60,93,104,107],outsid:[104,109],overrid:[1,56,57,59,60,63,70],overshrink:[94,98],own:[1,60,64],p:[1,9,11,72,78,96,100,102],packag:[110,111],page:[1,60,63],pair:[20,26,47,72],parallel:61,param:[1,59,73,97,99,100,102],paramet:[1,9,20,26,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,80,81,82,84,86,87,89,90,91,93,94,96,98,99,100,102,104,106,107,109],parent:[13,29,46,47,100,102,108],partial:47,particular:[47,60,62,74,76,100,102],pass:[1,29,47,56,58,60,63],path:[1,60,66,71,72,81],pathwis:97,pattern:[1,2,3,47,110],pattern_rul:47,patternbas:[3,44,47],patternrul:47,pdf:[73,97],peek:17,per:[1,60,67,94,98],perform:[20,25,26,60,61,62,94,95,98],performance_report:[1,2,110],performancereport:45,phase:[11,48],phi:[6,9],phinod:9,pick:[74,76],pleas:[1,60,61,62,63],plu:71,point:[9,94,95],poisson:9,poissonnod:[6,9],pop:17,popul:[56,57,59],portion:48,posit:[1,9,11,19,60,72,90],positiver:11,positiverealmatrix:11,positiverealnod:[6,9],possibl:[9,11,31,47,94,95],post:47,post_rul:47,posterior:[1,20,26,60,61,65,67,94,95,104,109],posteriori:[94,95],potenti:47,powernod:9,ppl:[0,110,111],pre:47,pre_rul:47,predic:44,predicatepattern:44,predict:[1,60,110],prefix_list:49,preserv:[104,107],primal:72,primit:[60,62,108],print:[60,93],print_graph:4,print_python:4,print_tre:4,prior:[1,9,20,26,56,58,60,67,83,84,85,94,98,99,104,106,107],prob:[1,18,60,64,71,74,76,82,104,109],probabilitymatrix:11,probabilitynod:[6,9],probabl:[1,6,9,11,31,48,56,57,58,59,60,66,70,80,81],problem:[11,72],process:[9,61],produc:[4,9,29,38,44,47,60,62],profil:[1,2,110],profilerdata:46,profilereport:46,program:[7,9,38,48,49,60,62],progress:[29,61],progress_bar:[1,60,67],project:[44,47],projection_rul:47,properti:[1,9,56,57,65,72,100,101,104,108,109],proport:84,propos:[1,60,61,63,64,66,87,89,90,91,92,110],proposer_class:89,provid:[31,56,57,59,61,87,107],purpos:65,push:17,put:11,py:[56,57,59],pyro:[56,59],python:[4,9,11,48,60,62,65],pytorch:93,q:96,queri:[1,6,9,29,34,35,36,37,48,60,61,62,67,94,95,98,100,102,104,109],queries_to_guid:[94,97,98,99],query_sampl:1,query_to_query_id:[35,36,37],r:[11,72,78],r_hat:1,radford:[1,60,64,71],rais:59,raise_error:16,random:[1,48,60,62,63,64,65,66,67,72,87,90,91,100,101,102,104,105,108,109],random_vari:[1,60,64,67,100,102,104,109],randomli:72,rang:[1,60,67],rate:[6,9,74,76],rather:9,ratio:87,re:[11,74,75,76,77],readabl:4,real:[1,9,11,19,56,57,58,59,60,72,74,76,90,104,107],real_space_alpha:[1,60,90],real_space_beta:[1,60,90],realmatrix:11,realnod:[6,9],realspacetransform:72,receiv:52,recent:6,reconstruct:86,record_node_cal:17,recurs:47,recurses:47,reduc:[20,26],refer:[48,71,72,81,100,102],regular:72,reject:87,remov:[6,47],remove_leaf:6,remove_nod:6,reparameter:[56,57,58,97],repeat:[56,57,59],repeatedli:[29,47],replac:[1,22,33,47,60,67,94,98,104,108,109],report:[11,16,27,31,42],repres:[1,9,11,31,44,47,48,56,59,60,61,62,65,74,76,100,101,104,107,109],represent:4,request:[60,62],requir:[10,11,16,27,31,47,74,76,81],requirement_to_typ:11,requirements_fix:31,requirementsfix:31,resampl:[104,109],resiz:59,resolv:11,respect:73,rest:[1,60,64],restrict:[9,11,65],result:[11,44,47,60,62,65,96],retain_graph:73,revers:96,rewrit:[18,19,23,24,47],rewritten:47,right:[3,6,9,11,48],right_typ:16,roll:9,root:47,roughli:81,row:[6,9,11,74,77],rsampl:[56,57,58],rshiftnod:9,rtype:59,rule:[1,2,11,48,110],rule_mak:47,ruledomain:47,ruleresult:47,run:[44,47,61,65,71,81,82,87,104,109],run_in_parallel:61,runtim:[1,2,60,62,110],rv:[65,99,104,106],rv_identifi:[1,6,9,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,100,102,104,105,108,109,110],rv_map:48,rv_to_queri:6,rvdict:[1,60,61,67,104,109],rvidentifi:[1,6,9,48,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,81,83,85,89,90,91,93,94,95,97,98,99,100,101,102,104,105,108,109],s10107:72,s1:47,s2:47,s:[1,3,11,31,47,51,56,57,59,60,61,63,64,65,66,67,72,87,89,90,91,96],s_online_algorithm:72,sa:48,safe_log_prob_sum:93,sai:27,same:[1,9,11,31,44,60,65,67,72,104,109],sampl:[1,6,9,11,20,26,29,48,56,57,58,59,60,61,62,65,66,67,70,71,72,80,81,87,93,94,96,98,104,106,107,108,109],sample_shap:[1,56,57,58,59,60,67,80],samplenod:[6,9],sampler:[1,60,61,64,66,71,72,81,110],scalar:[6,9,15,24,32,54,73,84],scale:[6,9,94,98],scenario:[11,47],scheme:81,score:[73,97],sec:[74,75,76,77],second:[1,47,48,60,74,75,76,77,90],see:[1,11,44,47,60,63,65,73,74,75,76,77,94,95],seed:[1,60,93],seek:96,select:[1,60,90],self:[70,83,84,85,87],semant:[22,31,33,44,47,48],send:87,sequenc:47,sequential_graph_fix:29,sequential_propos:[60,68],sequentialpropos:82,seri:72,serv:65,set:[1,6,16,17,30,36,39,48,60,61,62,63,64,66,71,72,81,84,89,90,91,93,99,104,107,108,109],set_of_tensor:53,set_param:99,setoftensor:53,shallow:[99,104,109],shape:[1,56,57,58,59,60,65,67,80,104,107],short_nam:11,should:[1,9,47,60,61,62,63,64,65,66,67,70,72,89,90,91,100,102],show_progress_bar:61,shown:[1,60,63],shuffl:87,side:[9,47],sigma:[6,9,26,84],sigmoid:9,similar:59,similarli:11,simpl:48,simplex:[1,9,11,60,74,77,90],simplexmatrix:11,simul:[1,60,67],sinc:[20,26],singl:[1,9,11,44,48,56,59,60,64,66,71,74,75,76,77,86,89,90,91,92,93,104,107,109],single_assign:[1,2,110],single_site_ancestral_mh:[1,60,110],single_site_ancestral_propos:[60,68,74,75,76,77,84],single_site_half_space_nmc_propos:[68,74],single_site_infer:[1,60,88,92,110],single_site_nmc:[1,60,110],single_site_random_walk:[1,60,110],single_site_random_walk_propos:[60,68],single_site_real_space_nmc_propos:[68,74],single_site_simplex_space_nmc_propos:[68,74],single_site_uniform_mh:[1,60,110],single_site_uniform_propos:[60,68],singleassign:49,singlesiteancestralmetropolishast:[1,60,63,88],singlesiteancestralpropos:[74,75,76,77,83,84],singlesitehalfspacenmcpropos:[74,75],singlesitehamiltonianmontecarlo:[1,60,64,67],singlesiteinfer:[1,60,88,89,92],singlesitenewtonianmontecarlo:[1,60,63,90],singlesitenouturnsampl:[1,60,66],singlesiterandomwalk:[1,60,91],singlesiterandomwalkpropos:84,singlesiterealspacenmcpropos:[74,76],singlesitesimplexspacenmcpropos:[74,77],singlesiteuniformmetropolishast:[1,60,92],singlesiteuniformpropos:[1,60,63,85],site:[1,17,60,64,66,74,75,76,77,89,90,91,92],situat:[9,11],size:[1,6,9,11,12,16,51,56,57,59,60,64,66,71,72,80,81,86,91],size_assess:[1,2,110],size_error:50,size_to_str:51,sizeassess:50,sizer:[1,2,13,14,15,24,50,54,110],skip:30,skip_optim:[30,36,39,60,62],slice:3,slice_field:3,slice_pattern:3,small:[9,48,60,62],smaller:[1,11,60,64,66,81],smallest:11,so:[9,11,44,47,48,84,94,95],soft_abs_invers:73,softab:73,some:[11,44,47,48],some_bottom_up:47,some_children:47,some_list_memb:47,some_of:47,some_top_down:47,somechildren:47,somehow:48,somelistmemb:47,someof:47,sometim:44,sort:6,sourc:[11,42,60,62],space:[1,60,72,74,75,76,90,96,99,104,107,109],spawn:61,special:9,special_function_cal:[1,2,110],specialfunctioncal:52,specif:[1,11,44,47,60,61,63,64,65,66,70,89,90,91],specifi:[1,60,65,67,80,81,87,90,99,104,107,109],specific_child:47,specificchild:47,split_r_hat:1,splite:72,squarerootnod:9,stabil:[1,60,66,81],stack:93,stack_not_cat:[65,93],stan:72,standard:9,star:3,start:47,state:[6,39,61,70,81],statement:[47,56,59],static_argnum:[78,79],statist:[1,9,100,102],statistical_model:[1,100,110],statisticalmodel:[100,102],step:[1,3,48,60,64,66,71,72,81,91,94,98],step_callback:[94,98],step_siz:[1,60,84,91],stochast:[1,9,48,100,102],stop:[29,44,47,48],store:[99,104,109],str:[3,4,11,16,17,30,31,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,51,52,60,62,65],straightforward:47,strict:59,string:[4,44,60,62],stringpattern:44,struct:[1,100,101],structur:[4,104,109],student:9,studenttnod:[6,9],subclass:[56,57,59],subgradi:72,submatch:44,submodul:[0,1,110],subpackag:[110,111],subpattern:44,subsampl:[94,98],subsample_factor:[94,97,98],subscript:3,subset:[48,60,62,104,109],succe:[44,47],succeed:47,success:[44,47],suggest:[1,60,66,81],sum:[18,72],sum_fix:18,sum_rightmost:57,sumnod:9,support:[1,2,6,9,11,33,56,57,58,59,60,61,62,90,93,94,95,104,106,107,109,110],suppos:11,supremum:11,surrog:97,switchnod:[6,9],symmetr:73,system:[9,11,27,31,48],t:[9,11,29,55,104,109],tail:[9,44],take:[4,6,9,11,22,29,31,33,44,47,61,104,109],taken:9,target:[1,3,11,48,60,64,66,71,81],target_accept_prob:[1,60,64,66,71,81],target_rv:[1,60,61,63,64,66,70,71,72,81,83,85,89,90,91],target_s:12,tb:87,tensor:[1,6,9,11,15,54,56,57,58,59,60,61,62,65,67,69,71,72,73,74,75,76,77,80,81,82,86,93,94,95,96,97,98,99,100,102,104,105,106,108,109],tensorizer_transform:[1,2,110],tensornod:[6,9],test:[3,44,47,48],than:[9,11,47],thei:[9,11,39],them:[1,11,27,33,47,60,64,66,94,95],thi:[1,6,9,11,16,18,19,20,22,23,24,25,26,27,31,32,33,39,44,47,48,56,57,59,60,61,62,64,65,66,70,72,74,76,81,90,91,92,99,104,107,109],thin:65,thing:47,third:48,thorw:87,those:9,though:9,three:48,through:[1,11,47,60,64,80],time:[1,11,47,60,61,66,104,109],time_in:46,timestamp:46,to_bm_python:[34,60,62],to_bmg_cpp:35,to_bmg_graph:36,to_bmg_python:37,to_cpp:[60,62],to_dict:86,to_dot:[39,60,62],to_graph:[60,62],to_graphviz:[60,62],to_inference_data:65,to_json:40,to_mini:40,to_pattern:44,to_python:[60,62],to_report:46,to_vec:86,to_xarrai:65,tobmpython:34,togeth:[1,47,60,63,64,66],tointnod:9,tomatrixnod:[6,9],tomini:40,tonegativerealmatrixnod:9,tonegativerealnod:9,tool:[4,7,49,65],top:[11,47],top_down:47,topo:6,topositiverealmatrixnod:9,topositiverealnod:[9,11],toprobabilitynod:9,torch:[1,6,9,11,12,16,51,52,56,57,58,59,60,61,62,65,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,93,94,95,96,97,98,99,100,102,104,105,106,107,108,109],torch_jit_backend:[71,81],torchinductor:[1,60,64,66],torchjitbackend:[71,81],torealmatrixnod:9,torealnod:9,total:11,total_tim:46,toward:[94,98],tqdm:[60,93],trace:47,tracebacktyp:87,track:[11,48],trajectori:[1,60,64,71,81],trajectory_length:[1,60,64,71],transform:[7,20,25,26,31,47,48,49,72,73,74,77,104,106,107],transform_nod:[13,14,15,54],transformassess:[13,14,15,54],transformed_node_v:73,transformed_v:72,transformer_cr:13,transpos:[9,32],transposenod:[6,9],travers:[31,47],treat:9,tree:[1,4,47,60,66,81],trick:97,trivial:[56,59],trivial_matmul_fix:24,truncat:9,try_mani:47,try_onc:47,trymani:47,tryonc:47,ts:11,tune:[72,84],tupl:[1,8,13,14,15,28,29,30,33,47,52,56,58,59,60,62,63,69,71,73,74,75,76,77,78,81,82,100,101,102],turn:[1,29,48,60,66,71,72,81],two:[9,11,24],typ:[44,87],type:[3,6,9,11,16,25,27,29,31,44,47,48,56,59,60,62,87,89,93,94,97,98,107],type_and_attribut:44,type_guard:29,type_of_valu:11,typepattern:44,typer:[10,18,19,21,22,24,29,31,32,33],typer_bas:[1,2,29,43,51,53,110],typerbas:[29,43,51,53,55],typing_extens:61,u:[1,60,66,71,72,81],unari:9,unaryop:3,unaryoperatornod:9,unarysub:3,unchang:31,unconstrain:[72,104,107],under:[60,62],underli:[9,44,78],unfair:9,unicod:4,uniform:[1,9,60,61,92,104,106],uniformli:[9,81],uniformnod:[6,9],union:[1,3,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,29,31,32,33,44,47,54,60,63,65,67,73,100,102,107],uniqu:[1,9,11,100,101,102],unit:[1,56,110],unknown:54,unless:29,unlik:81,unrestrict:9,unsizablenod:16,unsupport:[11,33],unsupported_node_fix:33,unsupported_node_report:33,unsupportednod:16,unsupportednodefix:33,until:[29,47,104,109],untransformed_v:72,untyp:11,untypable_node_report:33,untypablenod:16,untypedconstantnod:[6,9],up:[9,47,104,109],updat:[20,26,72,87,99,104,109],update_graph:[99,104,105,109],update_typ:55,upon:47,upper:[3,11,48],upper_bound:11,upperbound:11,us:[1,9,11,16,19,20,26,33,44,47,48,56,58,59,60,61,62,63,64,66,71,72,74,76,81,83,84,85,86,87,91,93,94,95,98,99,100,102,104,106,108,109],user:[9,81,100,102],usual:[104,106,108],util:[1,9,48,53,60,61,68,78,100,104,110],v:[11,56,57],v_1:9,v_2:9,v_n:9,val:[73,87],valid:[1,60,73,90,104,109],validate_arg:[56,57,59],valu:[1,3,6,9,11,15,31,44,47,48,54,56,57,58,59,60,61,64,65,66,70,72,73,74,75,76,77,80,83,84,85,87,90,93,94,98,99,103,104,105,107,108,109],valueerror:59,vanilla:81,vararg:3,variabl:[1,60,61,62,63,64,65,66,67,71,72,74,77,81,87,89,90,91,92,100,101,102,104,105,107,109,110],varianc:[56,57,72,84],variat:[94,95,98,99,100,102],variational_inf:[60,94,95],variational_world:[60,94,98],variationalinf:[94,95,98],variationalworld:[94,98,99],variaton:[94,98],variou:[60,62],ve:6,vec:73,vec_in:86,vector:[1,9,18,60,67,73,84],vectorindexnod:9,vectorized_graph_fix:15,verbos:61,verboselevel:[60,61,93],versa:44,vi:[1,60,100,102,110],via:[48,100,102],vice:44,view:[4,65],violat:[16,27,31],visual:39,viz:65,volum:[104,107],wa:[11,72,74,76,108],wai:[47,48,70,86],walk:[1,60,91],want:[11,44],warn:[78,100,103],we:[6,9,11,20,26,31,44,47,48,73,74,75,76,77],websit:[1,60,63],weight:81,welford:[72,81],welfordcovari:72,well:6,were:39,what:11,when:[1,9,11,16,42,44,47,56,57,59,60,63],where:[1,9,11,44,47,48,60,63,74,77,80,94,98,104,109],wherebi:44,whether:[1,47,59,60,61,64,65,66,71,73,74,76,81],which:[1,11,20,25,26,29,47,48,60,62,71,72,74,75,76,77,78,81,87,93,99,100,102,104,109],whose:[9,22],why:11,wiki:72,wikipedia:72,win:[20,25,26],window:72,windowschem:72,wise:107,wish:[11,47],with_dimens:11,with_siz:11,work:[4,11,107],world:[0,1,60,61,63,64,66,67,69,70,71,72,73,74,75,76,77,81,82,83,84,85,87,89,90,91,94,98,99,110],worri:47,would:[1,60,64,66,81,100,102],wrap:[100,102],wrapper:[1,60,62,100,101,102],x:[6,9,11,56,57,72,74,75,77,104,107,109],xarrai:65,y:[9,104,107,109],ye:15,yes_with_merg:15,you:[1,9,11,60,63],yurii:72,z:11,zero:[1,9,11,73,96,100,102],zero_grad:73,zeromatrix:11},titles:["beanmachine package","beanmachine.ppl package","beanmachine.ppl.compiler package","beanmachine.ppl.compiler.ast_patterns module","beanmachine.ppl.compiler.ast_tools module","beanmachine.ppl.compiler.beanstalk_common module","beanmachine.ppl.compiler.bm_graph_builder module","beanmachine.ppl.compiler.bm_to_bmg module","beanmachine.ppl.compiler.bmg_node_types module","beanmachine.ppl.compiler.bmg_nodes module","beanmachine.ppl.compiler.bmg_requirements module","beanmachine.ppl.compiler.bmg_types module","beanmachine.ppl.compiler.broadcaster module","beanmachine.ppl.compiler.copy_and_replace module","beanmachine.ppl.compiler.copy_transformer module","beanmachine.ppl.compiler.devectorizer_transformer module","beanmachine.ppl.compiler.error_report module","beanmachine.ppl.compiler.execution_context module","beanmachine.ppl.compiler.fix_additions module","beanmachine.ppl.compiler.fix_arithmetic module","beanmachine.ppl.compiler.fix_beta_conjugate_prior module","beanmachine.ppl.compiler.fix_bool_arithmetic module","beanmachine.ppl.compiler.fix_bool_comparisons module","beanmachine.ppl.compiler.fix_logsumexp module","beanmachine.ppl.compiler.fix_matrix_scale module","beanmachine.ppl.compiler.fix_multiary_ops module","beanmachine.ppl.compiler.fix_normal_conjugate_prior module","beanmachine.ppl.compiler.fix_observations module","beanmachine.ppl.compiler.fix_observe_true module","beanmachine.ppl.compiler.fix_problem module","beanmachine.ppl.compiler.fix_problems module","beanmachine.ppl.compiler.fix_requirements module","beanmachine.ppl.compiler.fix_transpose module","beanmachine.ppl.compiler.fix_unsupported module","beanmachine.ppl.compiler.gen_bm_python module","beanmachine.ppl.compiler.gen_bmg_cpp module","beanmachine.ppl.compiler.gen_bmg_graph module","beanmachine.ppl.compiler.gen_bmg_python module","beanmachine.ppl.compiler.gen_builder module","beanmachine.ppl.compiler.gen_dot module","beanmachine.ppl.compiler.gen_mini module","beanmachine.ppl.compiler.graph_labels module","beanmachine.ppl.compiler.internal_error module","beanmachine.ppl.compiler.lattice_typer module","beanmachine.ppl.compiler.patterns module","beanmachine.ppl.compiler.performance_report module","beanmachine.ppl.compiler.profiler module","beanmachine.ppl.compiler.rules module","beanmachine.ppl.compiler.runtime module","beanmachine.ppl.compiler.single_assignment module","beanmachine.ppl.compiler.size_assessment module","beanmachine.ppl.compiler.sizer module","beanmachine.ppl.compiler.special_function_caller module","beanmachine.ppl.compiler.support module","beanmachine.ppl.compiler.tensorizer_transformer module","beanmachine.ppl.compiler.typer_base module","beanmachine.ppl.distributions package","beanmachine.ppl.distributions.delta module","beanmachine.ppl.distributions.flat module","beanmachine.ppl.distributions.unit module","beanmachine.ppl.inference package","beanmachine.ppl.inference.base_inference module","beanmachine.ppl.inference.bmg_inference module","beanmachine.ppl.inference.compositional_infer module","beanmachine.ppl.inference.hmc_inference module","beanmachine.ppl.inference.monte_carlo_samples module","beanmachine.ppl.inference.nuts_inference module","beanmachine.ppl.inference.predictive module","beanmachine.ppl.inference.proposer package","beanmachine.ppl.inference.proposer.base_proposer module","beanmachine.ppl.inference.proposer.base_single_site_mh_proposer module","beanmachine.ppl.inference.proposer.hmc_proposer module","beanmachine.ppl.inference.proposer.hmc_utils module","beanmachine.ppl.inference.proposer.newtonian_monte_carlo_utils module","beanmachine.ppl.inference.proposer.nmc package","beanmachine.ppl.inference.proposer.nmc.single_site_half_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nmc.single_site_real_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nmc.single_site_simplex_space_nmc_proposer module","beanmachine.ppl.inference.proposer.nnc package","beanmachine.ppl.inference.proposer.nnc.utils module","beanmachine.ppl.inference.proposer.normal_eig module","beanmachine.ppl.inference.proposer.nuts_proposer module","beanmachine.ppl.inference.proposer.sequential_proposer module","beanmachine.ppl.inference.proposer.single_site_ancestral_proposer module","beanmachine.ppl.inference.proposer.single_site_random_walk_proposer module","beanmachine.ppl.inference.proposer.single_site_uniform_proposer module","beanmachine.ppl.inference.proposer.utils module","beanmachine.ppl.inference.sampler module","beanmachine.ppl.inference.single_site_ancestral_mh module","beanmachine.ppl.inference.single_site_inference module","beanmachine.ppl.inference.single_site_nmc module","beanmachine.ppl.inference.single_site_random_walk module","beanmachine.ppl.inference.single_site_uniform_mh module","beanmachine.ppl.inference.utils module","beanmachine.ppl.inference.vi package","beanmachine.ppl.inference.vi.autoguide module","beanmachine.ppl.inference.vi.discrepancy module","beanmachine.ppl.inference.vi.gradient_estimator module","beanmachine.ppl.inference.vi.variational_infer module","beanmachine.ppl.inference.vi.variational_world module","beanmachine.ppl.model package","beanmachine.ppl.model.rv_identifier module","beanmachine.ppl.model.statistical_model module","beanmachine.ppl.model.utils module","beanmachine.ppl.world package","beanmachine.ppl.world.base_world module","beanmachine.ppl.world.initialize_fn module","beanmachine.ppl.world.utils module","beanmachine.ppl.world.variable module","beanmachine.ppl.world.world module","beanmachine","beanmachine"],titleterms:{ast_pattern:3,ast_tool:4,autoguid:95,base_infer:61,base_propos:69,base_single_site_mh_propos:70,base_world:105,beanmachin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],beanstalk_common:5,bm_graph_build:6,bm_to_bmg:7,bmg_infer:62,bmg_node:9,bmg_node_typ:8,bmg_requir:10,bmg_type:11,broadcast:12,compil:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],compositional_inf:63,content:[0,1,2,56,60,68,74,78,94,100,104],copy_and_replac:13,copy_transform:14,delta:57,devectorizer_transform:15,discrep:96,distribut:[56,57,58,59],error_report:16,execution_context:17,fix_addit:18,fix_arithmet:19,fix_beta_conjugate_prior:20,fix_bool_arithmet:21,fix_bool_comparison:22,fix_logsumexp:23,fix_matrix_scal:24,fix_multiary_op:25,fix_normal_conjugate_prior:26,fix_observ:27,fix_observe_tru:28,fix_problem:[29,30],fix_requir:31,fix_transpos:32,fix_unsupport:33,flat:58,gen_bm_python:34,gen_bmg_cpp:35,gen_bmg_graph:36,gen_bmg_python:37,gen_build:38,gen_dot:39,gen_mini:40,gradient_estim:97,graph_label:41,hmc_infer:64,hmc_propos:71,hmc_util:72,infer:[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],initialize_fn:106,internal_error:42,lattice_typ:43,model:[100,101,102,103],modul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],monte_carlo_sampl:65,newtonian_monte_carlo_util:73,nmc:[74,75,76,77],nnc:[78,79],normal_eig:80,nuts_infer:66,nuts_propos:81,packag:[0,1,2,56,60,68,74,78,94,100,104],pattern:44,performance_report:45,ppl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],predict:67,profil:46,propos:[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],rule:47,runtim:48,rv_identifi:101,sampler:87,sequential_propos:82,single_assign:49,single_site_ancestral_mh:88,single_site_ancestral_propos:83,single_site_half_space_nmc_propos:75,single_site_infer:89,single_site_nmc:90,single_site_random_walk:91,single_site_random_walk_propos:84,single_site_real_space_nmc_propos:76,single_site_simplex_space_nmc_propos:77,single_site_uniform_mh:92,single_site_uniform_propos:85,size_assess:50,sizer:51,special_function_cal:52,statistical_model:102,submodul:[2,56,60,68,74,78,94,100,104],subpackag:[0,1,60,68],support:53,tensorizer_transform:54,typer_bas:55,unit:59,util:[79,86,93,103,107],variabl:108,variational_inf:98,variational_world:99,vi:[94,95,96,97,98,99],world:[104,105,106,107,108,109]}}) \ No newline at end of file diff --git a/assets/js/24d1134d.92de9c6d.js b/assets/js/24d1134d.5a5502f2.js similarity index 75% rename from assets/js/24d1134d.92de9c6d.js rename to assets/js/24d1134d.5a5502f2.js index afaa3dfbea..28934e10d3 100644 --- a/assets/js/24d1134d.92de9c6d.js +++ b/assets/js/24d1134d.5a5502f2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9628],{3905:function(a,e,m){m.r(e),m.d(e,{MDXContext:function(){return l},MDXProvider:function(){return c},mdx:function(){return h},useMDXComponents:function(){return d},withMDXComponents:function(){return o}});var s=m(67294);function t(a,e,m){return e in a?Object.defineProperty(a,e,{value:m,enumerable:!0,configurable:!0,writable:!0}):a[e]=m,a}function n(){return n=Object.assign||function(a){for(var e=1;e=0||(t[m]=a[m]);return t}(a,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(a,m)&&(t[m]=a[m])}return t}var l=s.createContext({}),o=function(a){return function(e){var m=d(e.components);return s.createElement(a,n({},e,{components:m}))}},d=function(a){var e=s.useContext(l),m=e;return a&&(m="function"==typeof a?a(e):p(p({},e),a)),m},c=function(a){var e=d(a.components);return s.createElement(l.Provider,{value:e},a.children)},N={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},x=s.forwardRef((function(a,e){var m=a.components,t=a.mdxType,n=a.originalType,r=a.parentName,l=i(a,["components","mdxType","originalType","parentName"]),o=d(m),c=t,x=o["".concat(r,".").concat(c)]||o[c]||N[c]||n;return m?s.createElement(x,p(p({ref:e},l),{},{components:m})):s.createElement(x,p({ref:e},l))}));function h(a,e){var m=arguments,t=e&&e.mdxType;if("string"==typeof a||t){var n=m.length,r=new Array(n);r[0]=x;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=a,p.mdxType="string"==typeof a?a:t,r[1]=p;for(var l=2;l1&&void 0!==arguments[1]?arguments[1]:0,m=(l[a[e+0]]+l[a[e+1]]+l[a[e+2]]+l[a[e+3]]+"-"+l[a[e+4]]+l[a[e+5]]+"-"+l[a[e+6]]+l[a[e+7]]+"-"+l[a[e+8]]+l[a[e+9]]+"-"+l[a[e+10]]+l[a[e+11]]+l[a[e+12]]+l[a[e+13]]+l[a[e+14]]+l[a[e+15]]).toLowerCase();if(!i(m))throw TypeError("Stringified UUID is invalid");return m};var c=function(a,e,m){var s=(a=a||{}).random||(a.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e){m=m||0;for(var t=0;t<16;++t)e[m+t]=s[t];return e}return d(s)},N=function(a){return t.createElement("div",{style:{backgroundColor:"lightgray",marginBottom:"var(--ifm-leading)",borderRadius:"var(--ifm-global-radius)",boxShadow:"var(--ifm-global-shadow-lw)",overflow:"hidden",padding:"10px",font:"var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"}},t.createElement("span",{style:{color:"red"}},"Out: "),t.createElement("pre",{style:{margin:"0px",backgroundColor:"inherit"}},a.children.split("\n").map((function(a){return t.createElement("p",{key:c(),style:{marginBottom:"0px"}},a)}))))}},38196:function(a,e,m){var s=m(67294),t=m(39960);e.Z=function(a){var e=a.githubUrl,m=a.colabUrl;return s.createElement("div",{className:"link-buttons"},s.createElement(t.default,{to:e},"Open in GitHub"),s.createElement("div",null),s.createElement(t.default,{to:m},"Run in Google Colab"))}},83948:function(a,e,m){m.d(e,{i:function(){return i},g:function(){return o}});var s=m(67294),t=m(38726),n=m.n(t),r=m(72389);function p(a){var e=a.children,m=a.fallback;return(0,r.default)()?s.createElement(s.Fragment,null,null==e?void 0:e()):null!=m?m:null}var i=s.memo((function(a){var e=a.data,m=e.target_id;return s.createElement("div",{className:"bk-root thin-scrollbar",id:m,style:{overflow:"auto",width:"100%"}},s.createElement(p,{fallback:s.createElement("div",null,"loading...")},(function(){window.Bokeh.embed.embed_item(e,m)})))})),l=n()({loader:function(){return m.e(8660).then(m.bind(m,58660))},loading:function(a){return a.timedOut?s.createElement("blockquote",null,"Error: Loading Plotly timed out."):s.createElement("div",null,"loading...")},timeout:1e4}),o=s.memo((function(a){var e=a.data;return s.createElement("div",{className:"plotly-figure"},s.createElement(l,{data:e.data,layout:e.layout}))}))},3887:function(a,e,m){m.r(e),m.d(e,{assets:function(){return N},contentTitle:function(){return d},default:function(){return g},frontMatter:function(){return o},metadata:function(){return c},toc:function(){return x}});var s=m(83117),t=m(80102),n=(m(67294),m(3905)),r=m(38196),p=m(96435),i=m(83948),l=["components"],o={title:"Gaussian mixture model",sidebar_label:"Gaussian mixture model",path:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",nb_path:"tutorials/GMM_with_2_dimensions_and_4_components.ipynb",github:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",colab:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb"},d=void 0,c={unversionedId:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",id:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",title:"Gaussian mixture model",description:"Gaussian Mixture Model with 2 dimensions and 4 components",id:"tutorial-gaussian-mixture-model-with-2-dimensions-and-4-components",level:2},{value:"Problem",id:"problem",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Model",id:"model",level:2},{value:"Observed Sample",id:"observed-sample",level:2},{value:"Inference",id:"inference",level:2},{value:"Analysis",id:"analysis",level:2}],h={toc:x};function g(a){var e=a.components,o=(0,t.Z)(a,l);return(0,n.mdx)("wrapper",(0,s.Z)({},h,o,{components:e,mdxType:"MDXLayout"}),(0,n.mdx)(r.Z,{githubUrl:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",colabUrl:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",mdxType:"LinkButtons"}),(0,n.mdx)("h2",{id:"tutorial-gaussian-mixture-model-with-2-dimensions-and-4-components"},"Tutorial: ",(0,n.mdx)("strong",{parentName:"h2"},"Gaussian Mixture Model")," with 2 dimensions and 4 components"),(0,n.mdx)("p",null,"The purpose of this tutorial is to introduce some of Bean Machine's support for Gaussian\nMixture Processes (GMM) problems."),(0,n.mdx)("h2",{id:"problem"},"Problem"),(0,n.mdx)("p",null,"A simple example of an open universe model is a Gaussian Mixture Model (GMM) where the\nnumber of mixture components is unknown.\n",(0,n.mdx)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Mixture_model"},"Mixture models")," are useful in problems\nwhere individuals from multiple sub-populations are aggregated together. A common use\ncase for GMMs is unsupervised clustering, where one seeks to infer which sub-population\nan individual belongs without any labeled training data. Using the bean machine open\nuniverse probabilistic programming language, we are able to provide a Bayesian treatment\nof this problem and draw posterior samples representing a distribution over not only the\ncluster assignments but also the number of clusters itself."),(0,n.mdx)("p",null,'In this tutorial, we will cover (all mathematical symbols defined in "Model" section):'),(0,n.mdx)("ol",null,(0,n.mdx)("li",{parentName:"ol"},"How to generate data ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"}))))))))))," from the model, conditioned on the number of\nclusters ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K")))))," being fixed."),(0,n.mdx)("li",{parentName:"ol"},"Given ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),", how to draw posterior samples of the latent (unobserved)\nvariables ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mu_i")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),",",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msub"},"i"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma_i")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.58056em",verticalAlign:"-0.15em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),", and ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c_j")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.716668em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),".")),(0,n.mdx)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.mdx)("p",null,"The code presented in this tutorial can be executed in the order presented, as long as\ncertain packages are imported as follows:"),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},'# Install Bean Machine in Colab if using Colab.\nimport sys\n\n\nif "google.colab" in sys.modules and "beanmachine" not in sys.modules:\n !pip install beanmachine\n')),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"import logging\nimport os\n\nimport beanmachine.ppl as bm\nimport numpy as np\nimport pandas as pd\nimport plotly.express as px\nimport torch\nimport torch.distributions as dist\nfrom torch import tensor\n")),(0,n.mdx)("p",null,"The next cell includes convenient configuration settings to improve the notebook\npresentation as well as setting a manual seed for reproducibility."),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},'# Eliminate excess inference logging from Bean Machinen.\nlogging.getLogger("beanmachine").setLevel(50)\n\n# Manual seed\ntorch.manual_seed(42)\n\n# Other settings for the notebook.\nsmoke_test = "SANDCASTLE_NEXUS" in os.environ or "CI" in os.environ\n')),(0,n.mdx)("h2",{id:"model"},"Model"),(0,n.mdx)("p",null,"Concretely, we will consider a GMM where:"),(0,n.mdx)("ul",null,(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"Number of mixture components ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mn",{parentName:"mrow"},"4")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=4")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"4"))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"The mixing weights ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,n.mdx)("mtext",{parentName:"mrow"},"Dirichlet"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mn",{parentName:"mrow"},"5"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mo",{parentName:"mrow"},"\u2026"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"5"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha\\sim\\text{Dirichlet}([5,\\ldots,5])")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Dirichlet")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord"},"5"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"minner"},"\u2026"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"5"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"For ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"i"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"i\\in[K]")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69862em",verticalAlign:"-0.0391em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"))))),", each mixture component is a 2-dimensional isotropic Gaussian\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("msubsup",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msubsup"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msubsup"},"i"),(0,n.mdx)("mn",{parentName:"msubsup"},"2")),(0,n.mdx)("mi",{parentName:"mrow"},"I"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{N}(\\mu_i,\\sigma_i^2 I)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.072772em",verticalAlign:"-0.258664em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8141079999999999em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.441336em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.258664em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))," where"),(0,n.mdx)("ul",{parentName:"li"},(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mn",{parentName:"mrow"},"0"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"10"),(0,n.mdx)("mi",{parentName:"mrow"},"I"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mu_i\\overset{\\text{iid}}{\\sim}\\mathcal{N}(0,10I)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.347418em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mtext",{parentName:"mrow"},"Gamma"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mn",{parentName:"mrow"},"1"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"10"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma_i\\overset{\\text{iid}}{\\sim}\\text{Gamma}(1,10)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.302978em",verticalAlign:"-0.15em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Gamma")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"For ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"j \\in [n]")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.85396em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"))))),":"),(0,n.mdx)("ul",{parentName:"li"},(0,n.mdx)("li",{parentName:"ul"},"Conditioned on ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"))))),", the component membership\n",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"\u2223"),(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mtext",{parentName:"mrow"},"Cat"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c_j\\mid\\alpha\\overset{\\text{iid}}{\\sim}\\text{Cat}(\\alpha)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.036108em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.152978em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Cat")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,n.mdx)("li",{parentName:"ul"},"Conditioned on component membership, the data\n",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"\u2223"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mi",{parentName:"mrow"},"i"),(0,n.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("msubsup",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msubsup"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msubsup"},"i"),(0,n.mdx)("mn",{parentName:"msubsup"},"2")),(0,n.mdx)("mo",{parentName:"mrow"},"+"),(0,n.mdx)("mn",{parentName:"mrow"},"0.001"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y_j\\mid c_j=i\\sim\\mathcal{N}(\\mu_i,\\sigma_i^2+0.001)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.036108em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.716668em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.65952em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.072772em",verticalAlign:"-0.258664em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8141079999999999em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.441336em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.258664em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}}),(0,n.mdx)("span",{parentName:"span",className:"mbin"},"+"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"."),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")"))))),"; we add ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mn",{parentName:"mrow"},"0.001")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"0.001")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"."),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1")))))," here to\nensure the covariance matrix is positive definite")))),(0,n.mdx)("p",null,(0,n.mdx)("strong",{parentName:"p"},(0,n.mdx)("inlineCode",{parentName:"strong"},"NOTE"))," We can implement this model in Bean Machine by defining random variable\nobjects with the ",(0,n.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," and ",(0,n.mdx)("inlineCode",{parentName:"p"},"@bm.functional")," decorators. These functions\nbehave differently than ordinary Python functions."),(0,n.mdx)("div",{style:{background:"#daeaf3",border_left:"3px solid #2980b9",display:"block",margin:"16px 0",padding:"12px"}},"Semantics for ",(0,n.mdx)("code",null,"@bm.random_variable")," functions:",(0,n.mdx)("ul",null,(0,n.mdx)("li",null,"They must return PyTorch ",(0,n.mdx)("code",null,"Distribution")," objects."),(0,n.mdx)("li",null,"Though they return distributions, callees actually receive ",(0,n.mdx)("i",null,"samples")," from the distribution. The machinery for obtaining samples from distributions is handled internally by Bean Machine."),(0,n.mdx)("li",null,"Inference runs the model through many iterations. During a particular inference iteration, a distinct random variable will correspond to exactly one sampled value: ",(0,n.mdx)("b",null,"calls to the same random variable function with the same arguments will receive the same sampled value within one inference iteration"),". This makes it easy for multiple components of your model to refer to the same logical random variable."),(0,n.mdx)("li",null,'Consequently, to define distinct random variables that correspond to different sampled values during a particular inference iteration, an effective practice is to add a dummy "indexing" parameter to the function. Distinct random variables can be referred to with different values for this index.'),(0,n.mdx)("li",null,"Please see the documentation for more information about this decorator.")),"Semantics for ",(0,n.mdx)("code",null,"@bm.functional"),":",(0,n.mdx)("ul",null,(0,n.mdx)("li",null,"This decorator is used to deterministically transform the results of one or more random variables."),(0,n.mdx)("li",null,"This follows the same naming practice as ",(0,n.mdx)("code",null,"@bm.random_variable")," where variables are distinguished by their argument call values."))),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"# unittest\nclass GaussianMixtureModel(object):\n def __init__(self, K):\n self.K = k\n\n @bm.random_variable\n def alpha(self, k):\n return dist.Dirichlet(5 * torch.ones(k))\n\n @bm.random_variable\n def mu(self, c):\n return dist.MultivariateNormal(\n loc=torch.zeros(2), covariance_matrix=10.0 * torch.eye(2)\n )\n\n @bm.random_variable\n def sigma(self, c):\n return dist.Gamma(1, 10)\n\n @bm.random_variable\n def component(self, i):\n alpha = self.alpha(self.K)\n return dist.Categorical(alpha)\n\n @bm.random_variable\n def y(self, i):\n c = self.component(i).item()\n return dist.MultivariateNormal(\n loc=self.mu(c), covariance_matrix=self.sigma(c) ** 2 * torch.eye(2) + 1e-3\n )\n")),(0,n.mdx)("p",null,"Notice that ",(0,n.mdx)("inlineCode",{parentName:"p"},"alpha"),", which is of dimension ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," conditioned on ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),", is parameterized by\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),". This is a current limitation of Bean Machine: any instantiation of a\n",(0,n.mdx)("inlineCode",{parentName:"p"},"random_variable")," must always have fixed dimension (",(0,n.mdx)("em",{parentName:"p"},"e.g.")," ",(0,n.mdx)("inlineCode",{parentName:"p"},"gmm.alpha(3)")," is\n3-dimensional)."),(0,n.mdx)("h2",{id:"observed-sample"},"Observed Sample"),(0,n.mdx)("p",null,"Here we generate some observations by conditioning on some latents and running MCMC to\nsample the prior for the remaining latent variables as well as the data\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),"."),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"n = 32 # num observations\nk = 4 # true number of clusters\n\ngmm = GaussianMixtureModel(K=4)\n\n# fix the settings of latent variables\nground_truth = {\n **{\n gmm.alpha(k): torch.ones(k) * 1.0 / k,\n },\n **{gmm.mu(i): tensor([1.0 * int(i / 2), i % 2]) for i in range(k)},\n **{gmm.sigma(i): tensor(0.1) for i in range(k)},\n **{gmm.component(i): tensor(i % k) for i in range(n)},\n}\n\n# forward sampling under these latent variables' values\nqueries = (\n [gmm.y(i) for i in range(n)]\n + [gmm.component(i) for i in range(n)]\n + [gmm.mu(i) for i in range(k)]\n + [gmm.sigma(i) for i in range(k)]\n)\nprior_sample = bm.SingleSiteAncestralMetropolisHastings().infer(\n queries, ground_truth, num_samples=2, num_chains=1\n)\n")),(0,n.mdx)(p.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/2 [00:00y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,0.8959560990333557,0.9766848087310791,-0.005619242321699858,0.07329066842794418,0.8321502208709717,0.8998674750328064,0.039198972284793854,-0.1312853842973709,0.982588529586792,0.9451083540916443,-0.14176245033740997,1.0435446500778198,0.0671214759349823,0.04944397881627083,0.9373687505722046],"xaxis":"x","y":[0.016117846593260765,0.18457376956939697,-0.051586560904979706,0.01879209466278553,0.007290275767445564,0.07857473194599152,0.06261087954044342,-0.004789428785443306,-0.15168464183807373,-0.08971917629241943,-0.14384929835796356,0.09836331754922867,-0.09595693647861481,0.047318361699581146,-0.06050451844930649,0.1840871125459671],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.96434086561203,0.9083782434463501,1.0038725137710571,1.1610668897628784,0.8983645439147949,0.9941692352294922,1.0407627820968628],"xaxis":"x","y":[0.9972336888313293,0.8729135394096375,0.9154572486877441,0.8918484449386597,1.0099613666534424,0.9618858098983765,1.0874375104904175],"yaxis":"y"},{"hovertemplate":"component=2
y0=%{x}
y1=%{y}","legendgroup":"2","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"2","orientation":"v","showlegend":true,"type":"scatter","x":[1.1861436367034912],"xaxis":"x","y":[1.0424714088439941],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#109618","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.14498808979988098,0.11198924481868744,0.06420062482357025,-0.055139001458883286,-0.01619270257651806,0.026697419583797455,0.07985077053308487,-0.054175157099962234],"xaxis":"x","y":[0.9351388216018677,1.055330514907837,1.2498003244400024,1.0197211503982544,0.9687255024909973,1.0093392133712769,0.819366455078125,1.0046085119247437],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-0.2223430573940277,"x1":1.2016632556915283,"xref":"x","y0":-0.8655871748924255,"y1":0.5584191679954529,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":0.7659292221069336,"x1":1.0819262266159058,"xref":"x","y0":0.8331487774848938,"y1":1.1491458415985107,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":0.8363673686981201,"x1":1.3182401657104492,"xref":"x","y0":0.5890355110168457,"y1":1.0709083080291748,"yref":"y"},{"line":{"color":"#109618"},"type":"circle","x0":-0.14776313304901123,"x1":0.7056936025619507,"xref":"x","y0":0.5210435390472412,"y1":1.3745002746582031,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-0.2243714657413226,1.3196818588239556],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-0.8759440292343224,1.4025639259829807],"title":{"text":"y1"},"type":"linear"}}}')},14859:function(a){a.exports=JSON.parse('{"config":{"plotlyServerURL":"https://plot.ly"},"data":[{"hovertemplate":"component=0
y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,-0.005619242321699858,0.039198972284793854,-0.1312853842973709,0.0671214759349823,0.07329066842794418,0.04944397881627083,-0.14176245033740997],"xaxis":"x","y":[0.016117846593260765,0.01879209466278553,-0.004789428785443306,-0.15168464183807373,0.047318361699581146,0.007290275767445564,-0.06050451844930649,0.09836331754922867],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.07985077053308487,0.06420062482357025,0.11198924481868744,-0.055139001458883286,0.14498808979988098,0.026697419583797455,-0.01619270257651806,-0.054175157099962234],"xaxis":"x","y":[0.819366455078125,1.2498003244400024,1.055330514907837,1.0197211503982544,0.9351388216018677,1.0093392133712769,0.9687255024909973,1.0046085119247437],"yaxis":"y"},{"hovertemplate":"component=2
y0=%{x}
y1=%{y}","legendgroup":"2","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"2","orientation":"v","showlegend":true,"type":"scatter","x":[0.8321502208709717,0.9451083540916443,0.982588529586792,1.0435446500778198,0.9766848087310791,0.8998674750328064,0.9373687505722046,0.8959560990333557],"xaxis":"x","y":[0.07857473194599152,-0.14384929835796356,-0.08971917629241943,-0.09595693647861481,-0.051586560904979706,0.06261087954044342,0.1840871125459671,0.18457376956939697],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#109618","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.9083782434463501,1.0038725137710571,1.1861436367034912,1.1610668897628784,0.8983645439147949,0.9941692352294922,0.96434086561203,1.0407627820968628],"xaxis":"x","y":[0.8729135394096375,0.9154572486877441,1.0424714088439941,0.8918484449386597,1.0099613666534424,0.9618858098983765,0.9972336888313293,1.0874375104904175],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-0.20000000298023224,"x1":0.20000000298023224,"xref":"x","y0":-0.20000000298023224,"y1":0.20000000298023224,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":-0.20000000298023224,"x1":0.20000000298023224,"xref":"x","y0":0.800000011920929,"y1":1.2000000476837158,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":0.800000011920929,"x1":1.2000000476837158,"xref":"x","y0":-0.20000000298023224,"y1":0.20000000298023224,"yref":"y"},{"line":{"color":"#109618"},"type":"circle","x0":0.800000011920929,"x1":1.2000000476837158,"xref":"x","y0":0.800000011920929,"y1":1.2000000476837158,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-0.22132018641796586,1.2657013727840472],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-0.26019856967325283,1.3583142522751817],"title":{"text":"y1"},"type":"linear"}}}')},79966:function(a){a.exports=JSON.parse('{"config":{"plotlyServerURL":"https://plot.ly"},"data":[{"hovertemplate":"component=0
y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,0.9083782434463501,0.9451083540916443,0.04944397881627083,0.8321502208709717,-0.005619242321699858,1.1861436367034912,-0.054175157099962234,0.8959560990333557,0.9766848087310791,0.14498808979988098,0.07329066842794418,1.0038725137710571,0.8998674750328064,1.0435446500778198,0.9941692352294922,1.1610668897628784,-0.01619270257651806,-0.14176245033740997,0.06420062482357025,1.0407627820968628],"xaxis":"x","y":[0.016117846593260765,0.8729135394096375,-0.14384929835796356,-0.06050451844930649,0.07857473194599152,0.01879209466278553,1.0424714088439941,1.0046085119247437,0.18457376956939697,-0.051586560904979706,0.9351388216018677,0.007290275767445564,0.9154572486877441,0.06261087954044342,-0.09595693647861481,0.9618858098983765,0.8918484449386597,0.9687255024909973,0.09836331754922867,1.2498003244400024,1.0874375104904175],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.11198924481868744,0.039198972284793854,-0.055139001458883286,0.9373687505722046],"xaxis":"x","y":[1.055330514907837,-0.004789428785443306,1.0197211503982544,0.1840871125459671],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.982588529586792,0.8983645439147949,0.96434086561203,-0.1312853842973709,0.026697419583797455,0.0671214759349823,0.07985077053308487],"xaxis":"x","y":[-0.08971917629241943,1.0099613666534424,0.9972336888313293,-0.15168464183807373,1.0093392133712769,0.047318361699581146,0.819366455078125],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-4.234386920928955,"x1":1.8397126197814941,"xref":"x","y0":-3.0315072536468506,"y1":3.0425922870635986,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":-13.534224510192871,"x1":11.200617790222168,"xref":"x","y0":-13.052016258239746,"y1":11.682826042175293,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":-3.1069746017456055,"x1":1.0286121368408203,"xref":"x","y0":-1.5985394716262817,"y1":2.5370471477508545,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-13.557362809819077,11.223756089848374],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-13.165478837599448,11.796288621534995],"title":{"text":"y1"},"type":"linear"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9628],{3905:function(a,e,m){m.r(e),m.d(e,{MDXContext:function(){return l},MDXProvider:function(){return c},mdx:function(){return h},useMDXComponents:function(){return d},withMDXComponents:function(){return o}});var s=m(67294);function t(a,e,m){return e in a?Object.defineProperty(a,e,{value:m,enumerable:!0,configurable:!0,writable:!0}):a[e]=m,a}function n(){return n=Object.assign||function(a){for(var e=1;e=0||(t[m]=a[m]);return t}(a,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(a,m)&&(t[m]=a[m])}return t}var l=s.createContext({}),o=function(a){return function(e){var m=d(e.components);return s.createElement(a,n({},e,{components:m}))}},d=function(a){var e=s.useContext(l),m=e;return a&&(m="function"==typeof a?a(e):p(p({},e),a)),m},c=function(a){var e=d(a.components);return s.createElement(l.Provider,{value:e},a.children)},N={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},x=s.forwardRef((function(a,e){var m=a.components,t=a.mdxType,n=a.originalType,r=a.parentName,l=i(a,["components","mdxType","originalType","parentName"]),o=d(m),c=t,x=o["".concat(r,".").concat(c)]||o[c]||N[c]||n;return m?s.createElement(x,p(p({ref:e},l),{},{components:m})):s.createElement(x,p({ref:e},l))}));function h(a,e){var m=arguments,t=e&&e.mdxType;if("string"==typeof a||t){var n=m.length,r=new Array(n);r[0]=x;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=a,p.mdxType="string"==typeof a?a:t,r[1]=p;for(var l=2;l1&&void 0!==arguments[1]?arguments[1]:0,m=(l[a[e+0]]+l[a[e+1]]+l[a[e+2]]+l[a[e+3]]+"-"+l[a[e+4]]+l[a[e+5]]+"-"+l[a[e+6]]+l[a[e+7]]+"-"+l[a[e+8]]+l[a[e+9]]+"-"+l[a[e+10]]+l[a[e+11]]+l[a[e+12]]+l[a[e+13]]+l[a[e+14]]+l[a[e+15]]).toLowerCase();if(!i(m))throw TypeError("Stringified UUID is invalid");return m};var c=function(a,e,m){var s=(a=a||{}).random||(a.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e){m=m||0;for(var t=0;t<16;++t)e[m+t]=s[t];return e}return d(s)},N=function(a){return t.createElement("div",{style:{backgroundColor:"lightgray",marginBottom:"var(--ifm-leading)",borderRadius:"var(--ifm-global-radius)",boxShadow:"var(--ifm-global-shadow-lw)",overflow:"hidden",padding:"10px",font:"var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"}},t.createElement("span",{style:{color:"red"}},"Out: "),t.createElement("pre",{style:{margin:"0px",backgroundColor:"inherit"}},a.children.split("\n").map((function(a){return t.createElement("p",{key:c(),style:{marginBottom:"0px"}},a)}))))}},38196:function(a,e,m){var s=m(67294),t=m(39960);e.Z=function(a){var e=a.githubUrl,m=a.colabUrl;return s.createElement("div",{className:"link-buttons"},s.createElement(t.default,{to:e},"Open in GitHub"),s.createElement("div",null),s.createElement(t.default,{to:m},"Run in Google Colab"))}},83948:function(a,e,m){m.d(e,{i:function(){return i},g:function(){return o}});var s=m(67294),t=m(38726),n=m.n(t),r=m(72389);function p(a){var e=a.children,m=a.fallback;return(0,r.default)()?s.createElement(s.Fragment,null,null==e?void 0:e()):null!=m?m:null}var i=s.memo((function(a){var e=a.data,m=e.target_id;return s.createElement("div",{className:"bk-root thin-scrollbar",id:m,style:{overflow:"auto",width:"100%"}},s.createElement(p,{fallback:s.createElement("div",null,"loading...")},(function(){window.Bokeh.embed.embed_item(e,m)})))})),l=n()({loader:function(){return m.e(8660).then(m.bind(m,58660))},loading:function(a){return a.timedOut?s.createElement("blockquote",null,"Error: Loading Plotly timed out."):s.createElement("div",null,"loading...")},timeout:1e4}),o=s.memo((function(a){var e=a.data;return s.createElement("div",{className:"plotly-figure"},s.createElement(l,{data:e.data,layout:e.layout}))}))},3887:function(a,e,m){m.r(e),m.d(e,{assets:function(){return N},contentTitle:function(){return d},default:function(){return g},frontMatter:function(){return o},metadata:function(){return c},toc:function(){return x}});var s=m(83117),t=m(80102),n=(m(67294),m(3905)),r=m(38196),p=m(96435),i=m(83948),l=["components"],o={title:"Gaussian mixture model",sidebar_label:"Gaussian mixture model",path:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",nb_path:"tutorials/GMM_with_2_dimensions_and_4_components.ipynb",github:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",colab:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb"},d=void 0,c={unversionedId:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",id:"overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components",title:"Gaussian mixture model",description:"Gaussian Mixture Model with 2 dimensions and 4 components",id:"tutorial-gaussian-mixture-model-with-2-dimensions-and-4-components",level:2},{value:"Problem",id:"problem",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Model",id:"model",level:2},{value:"Observed Sample",id:"observed-sample",level:2},{value:"Inference",id:"inference",level:2},{value:"Analysis",id:"analysis",level:2}],h={toc:x};function g(a){var e=a.components,o=(0,t.Z)(a,l);return(0,n.mdx)("wrapper",(0,s.Z)({},h,o,{components:e,mdxType:"MDXLayout"}),(0,n.mdx)(r.Z,{githubUrl:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",colabUrl:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/GMM_with_2_dimensions_and_4_components.ipynb",mdxType:"LinkButtons"}),(0,n.mdx)("h2",{id:"tutorial-gaussian-mixture-model-with-2-dimensions-and-4-components"},"Tutorial: ",(0,n.mdx)("strong",{parentName:"h2"},"Gaussian Mixture Model")," with 2 dimensions and 4 components"),(0,n.mdx)("p",null,"The purpose of this tutorial is to introduce some of Bean Machine's support for Gaussian\nMixture Processes (GMM) problems."),(0,n.mdx)("h2",{id:"problem"},"Problem"),(0,n.mdx)("p",null,"A simple example of an open universe model is a Gaussian Mixture Model (GMM) where the\nnumber of mixture components is unknown.\n",(0,n.mdx)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Mixture_model"},"Mixture models")," are useful in problems\nwhere individuals from multiple sub-populations are aggregated together. A common use\ncase for GMMs is unsupervised clustering, where one seeks to infer which sub-population\nan individual belongs without any labeled training data. Using the bean machine open\nuniverse probabilistic programming language, we are able to provide a Bayesian treatment\nof this problem and draw posterior samples representing a distribution over not only the\ncluster assignments but also the number of clusters itself."),(0,n.mdx)("p",null,'In this tutorial, we will cover (all mathematical symbols defined in "Model" section):'),(0,n.mdx)("ol",null,(0,n.mdx)("li",{parentName:"ol"},"How to generate data ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"}))))))))))," from the model, conditioned on the number of\nclusters ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K")))))," being fixed."),(0,n.mdx)("li",{parentName:"ol"},"Given ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),", how to draw posterior samples of the latent (unobserved)\nvariables ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mu_i")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),",",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msub"},"i"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma_i")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.58056em",verticalAlign:"-0.15em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),", and ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j"))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c_j")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.716668em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),".")),(0,n.mdx)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.mdx)("p",null,"The code presented in this tutorial can be executed in the order presented, as long as\ncertain packages are imported as follows:"),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},'# Install Bean Machine in Colab if using Colab.\nimport sys\n\n\nif "google.colab" in sys.modules and "beanmachine" not in sys.modules:\n !pip install beanmachine\n')),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"import logging\nimport os\n\nimport beanmachine.ppl as bm\nimport numpy as np\nimport pandas as pd\nimport plotly.express as px\nimport torch\nimport torch.distributions as dist\nfrom torch import tensor\n")),(0,n.mdx)("p",null,"The next cell includes convenient configuration settings to improve the notebook\npresentation as well as setting a manual seed for reproducibility."),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},'# Eliminate excess inference logging from Bean Machinen.\nlogging.getLogger("beanmachine").setLevel(50)\n\n# Manual seed\ntorch.manual_seed(42)\n\n# Other settings for the notebook.\nsmoke_test = "SANDCASTLE_NEXUS" in os.environ or "CI" in os.environ\n')),(0,n.mdx)("h2",{id:"model"},"Model"),(0,n.mdx)("p",null,"Concretely, we will consider a GMM where:"),(0,n.mdx)("ul",null,(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"Number of mixture components ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mn",{parentName:"mrow"},"4")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=4")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"4"))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"The mixing weights ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,n.mdx)("mtext",{parentName:"mrow"},"Dirichlet"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mn",{parentName:"mrow"},"5"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mo",{parentName:"mrow"},"\u2026"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"5"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha\\sim\\text{Dirichlet}([5,\\ldots,5])")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Dirichlet")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord"},"5"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"minner"},"\u2026"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"5"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"For ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"i"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"i\\in[K]")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69862em",verticalAlign:"-0.0391em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"))))),", each mixture component is a 2-dimensional isotropic Gaussian\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("msubsup",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msubsup"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msubsup"},"i"),(0,n.mdx)("mn",{parentName:"msubsup"},"2")),(0,n.mdx)("mi",{parentName:"mrow"},"I"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{N}(\\mu_i,\\sigma_i^2 I)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.072772em",verticalAlign:"-0.258664em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8141079999999999em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.441336em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.258664em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))," where"),(0,n.mdx)("ul",{parentName:"li"},(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mn",{parentName:"mrow"},"0"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"10"),(0,n.mdx)("mi",{parentName:"mrow"},"I"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mu_i\\overset{\\text{iid}}{\\sim}\\mathcal{N}(0,10I)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.347418em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mtext",{parentName:"mrow"},"Gamma"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mn",{parentName:"mrow"},"1"),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("mn",{parentName:"mrow"},"10"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma_i\\overset{\\text{iid}}{\\sim}\\text{Gamma}(1,10)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.302978em",verticalAlign:"-0.15em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Gamma")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))))),(0,n.mdx)("li",{parentName:"ul"},(0,n.mdx)("p",{parentName:"li"},"For ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"j \\in [n]")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.85396em",verticalAlign:"-0.19444em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},"]"))))),":"),(0,n.mdx)("ul",{parentName:"li"},(0,n.mdx)("li",{parentName:"ul"},"Conditioned on ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"))))),", the component membership\n",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"\u2223"),(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow"},(0,n.mdx)("mover",{parentName:"mo"},(0,n.mdx)("mo",{parentName:"mover"},(0,n.mdx)("mo",{parentName:"mo"},"\u223c")),(0,n.mdx)("mtext",{parentName:"mover"},"iid"))),(0,n.mdx)("mtext",{parentName:"mrow"},"Cat"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("mi",{parentName:"mrow"},"\u03b1"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c_j\\mid\\alpha\\overset{\\text{iid}}{\\sim}\\text{Cat}(\\alpha)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.036108em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.152978em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},(0,n.mdx)("span",{parentName:"span",className:"mop op-limits"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"1.152978em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span"},(0,n.mdx)("span",{parentName:"span",className:"mop"},"\u223c"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.5668699999999998em",marginLeft:"0em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"iid")))))))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord text"},(0,n.mdx)("span",{parentName:"span",className:"mord"},"Cat")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,n.mdx)("li",{parentName:"ul"},"Conditioned on component membership, the data\n",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"\u2223"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"c"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mi",{parentName:"mrow"},"i"),(0,n.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,n.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"\u03bc"),(0,n.mdx)("mi",{parentName:"msub"},"i")),(0,n.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,n.mdx)("msubsup",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msubsup"},"\u03c3"),(0,n.mdx)("mi",{parentName:"msubsup"},"i"),(0,n.mdx)("mn",{parentName:"msubsup"},"2")),(0,n.mdx)("mo",{parentName:"mrow"},"+"),(0,n.mdx)("mn",{parentName:"mrow"},"0.001"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y_j\\mid c_j=i\\sim\\mathcal{N}(\\mu_i,\\sigma_i^2+0.001)")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.036108em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.716668em",verticalAlign:"-0.286108em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.65952em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.072772em",verticalAlign:"-0.258664em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal"},"\u03bc"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.31166399999999994em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8141079999999999em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.441336em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"i"))),(0,n.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.258664em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}}),(0,n.mdx)("span",{parentName:"span",className:"mbin"},"+"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"."),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,n.mdx)("span",{parentName:"span",className:"mclose"},")"))))),"; we add ",(0,n.mdx)("span",{parentName:"li",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mn",{parentName:"mrow"},"0.001")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"0.001")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"."),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,n.mdx)("span",{parentName:"span",className:"mord"},"1")))))," here to\nensure the covariance matrix is positive definite")))),(0,n.mdx)("p",null,(0,n.mdx)("strong",{parentName:"p"},(0,n.mdx)("inlineCode",{parentName:"strong"},"NOTE"))," We can implement this model in Bean Machine by defining random variable\nobjects with the ",(0,n.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," and ",(0,n.mdx)("inlineCode",{parentName:"p"},"@bm.functional")," decorators. These functions\nbehave differently than ordinary Python functions."),(0,n.mdx)("div",{style:{background:"#daeaf3",border_left:"3px solid #2980b9",display:"block",margin:"16px 0",padding:"12px"}},"Semantics for ",(0,n.mdx)("code",null,"@bm.random_variable")," functions:",(0,n.mdx)("ul",null,(0,n.mdx)("li",null,"They must return PyTorch ",(0,n.mdx)("code",null,"Distribution")," objects."),(0,n.mdx)("li",null,"Though they return distributions, callees actually receive ",(0,n.mdx)("i",null,"samples")," from the distribution. The machinery for obtaining samples from distributions is handled internally by Bean Machine."),(0,n.mdx)("li",null,"Inference runs the model through many iterations. During a particular inference iteration, a distinct random variable will correspond to exactly one sampled value: ",(0,n.mdx)("b",null,"calls to the same random variable function with the same arguments will receive the same sampled value within one inference iteration"),". This makes it easy for multiple components of your model to refer to the same logical random variable."),(0,n.mdx)("li",null,'Consequently, to define distinct random variables that correspond to different sampled values during a particular inference iteration, an effective practice is to add a dummy "indexing" parameter to the function. Distinct random variables can be referred to with different values for this index.'),(0,n.mdx)("li",null,"Please see the documentation for more information about this decorator.")),"Semantics for ",(0,n.mdx)("code",null,"@bm.functional"),":",(0,n.mdx)("ul",null,(0,n.mdx)("li",null,"This decorator is used to deterministically transform the results of one or more random variables."),(0,n.mdx)("li",null,"This follows the same naming practice as ",(0,n.mdx)("code",null,"@bm.random_variable")," where variables are distinguished by their argument call values."))),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"# unittest\nclass GaussianMixtureModel(object):\n def __init__(self, K):\n self.K = k\n\n @bm.random_variable\n def alpha(self, k):\n return dist.Dirichlet(5 * torch.ones(k))\n\n @bm.random_variable\n def mu(self, c):\n return dist.MultivariateNormal(\n loc=torch.zeros(2), covariance_matrix=10.0 * torch.eye(2)\n )\n\n @bm.random_variable\n def sigma(self, c):\n return dist.Gamma(1, 10)\n\n @bm.random_variable\n def component(self, i):\n alpha = self.alpha(self.K)\n return dist.Categorical(alpha)\n\n @bm.random_variable\n def y(self, i):\n c = self.component(i).item()\n return dist.MultivariateNormal(\n loc=self.mu(c), covariance_matrix=self.sigma(c) ** 2 * torch.eye(2) + 1e-3\n )\n")),(0,n.mdx)("p",null,"Notice that ",(0,n.mdx)("inlineCode",{parentName:"p"},"alpha"),", which is of dimension ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," conditioned on ",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"K"),(0,n.mdx)("mo",{parentName:"mrow"},"="),(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.68333em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,n.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,n.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),", is parameterized by\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mi",{parentName:"mrow"},"k")),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.69444em",verticalAlign:"0em"}}),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),". This is a current limitation of Bean Machine: any instantiation of a\n",(0,n.mdx)("inlineCode",{parentName:"p"},"random_variable")," must always have fixed dimension (",(0,n.mdx)("em",{parentName:"p"},"e.g.")," ",(0,n.mdx)("inlineCode",{parentName:"p"},"gmm.alpha(3)")," is\n3-dimensional)."),(0,n.mdx)("h2",{id:"observed-sample"},"Observed Sample"),(0,n.mdx)("p",null,"Here we generate some observations by conditioning on some latents and running MCMC to\nsample the prior for the remaining latent variables as well as the data\n",(0,n.mdx)("span",{parentName:"p",className:"math math-inline"},(0,n.mdx)("span",{parentName:"span",className:"katex"},(0,n.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,n.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.mdx)("semantics",{parentName:"math"},(0,n.mdx)("mrow",{parentName:"semantics"},(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mi",{parentName:"msub"},"y"),(0,n.mdx)("mi",{parentName:"msub"},"j")),(0,n.mdx)("msub",{parentName:"mrow"},(0,n.mdx)("mo",{parentName:"msub",stretchy:"false"},"}"),(0,n.mdx)("mrow",{parentName:"msub"},(0,n.mdx)("mi",{parentName:"mrow"},"j"),(0,n.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,n.mdx)("mi",{parentName:"mrow"},"n"),(0,n.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")))),(0,n.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\{y_j\\}_{j\\in[n]}")))),(0,n.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.mdx)("span",{parentName:"span",className:"base"},(0,n.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.1052em",verticalAlign:"-0.3551999999999999em"}}),(0,n.mdx)("span",{parentName:"span",className:"mopen"},"{"),(0,n.mdx)("span",{parentName:"span",className:"mord"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.311664em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.03588em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j")))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.286108em"}},(0,n.mdx)("span",{parentName:"span"})))))),(0,n.mdx)("span",{parentName:"span",className:"mclose"},(0,n.mdx)("span",{parentName:"span",className:"mclose"},"}"),(0,n.mdx)("span",{parentName:"span",className:"msupsub"},(0,n.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.34480000000000005em"}},(0,n.mdx)("span",{parentName:"span",style:{top:"-2.5198em",marginLeft:"0em",marginRight:"0.05em"}},(0,n.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mtight"},(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,n.mdx)("span",{parentName:"span",className:"mrel mtight"},"\u2208"),(0,n.mdx)("span",{parentName:"span",className:"mopen mtight"},"["),(0,n.mdx)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,n.mdx)("span",{parentName:"span",className:"mclose mtight"},"]"))))),(0,n.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.mdx)("span",{parentName:"span",className:"vlist-r"},(0,n.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.3551999999999999em"}},(0,n.mdx)("span",{parentName:"span"})))))))))),"."),(0,n.mdx)("pre",null,(0,n.mdx)("code",{parentName:"pre",className:"language-python"},"n = 32 # num observations\nk = 4 # true number of clusters\n\ngmm = GaussianMixtureModel(K=4)\n\n# fix the settings of latent variables\nground_truth = {\n **{\n gmm.alpha(k): torch.ones(k) * 1.0 / k,\n },\n **{gmm.mu(i): tensor([1.0 * int(i / 2), i % 2]) for i in range(k)},\n **{gmm.sigma(i): tensor(0.1) for i in range(k)},\n **{gmm.component(i): tensor(i % k) for i in range(n)},\n}\n\n# forward sampling under these latent variables' values\nqueries = (\n [gmm.y(i) for i in range(n)]\n + [gmm.component(i) for i in range(n)]\n + [gmm.mu(i) for i in range(k)]\n + [gmm.sigma(i) for i in range(k)]\n)\nprior_sample = bm.SingleSiteAncestralMetropolisHastings().infer(\n queries, ground_truth, num_samples=2, num_chains=1\n)\n")),(0,n.mdx)(p.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/2 [00:00y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,0.9083782434463501,0.9451083540916443,0.04944397881627083,0.8321502208709717,-0.005619242321699858,1.1861436367034912,-0.054175157099962234,0.8959560990333557,0.9766848087310791,0.14498808979988098,0.07329066842794418,1.0038725137710571,0.8998674750328064,1.0435446500778198,0.9941692352294922,1.1610668897628784,-0.01619270257651806,-0.14176245033740997,0.06420062482357025,1.0407627820968628],"xaxis":"x","y":[0.016117846593260765,0.8729135394096375,-0.14384929835796356,-0.06050451844930649,0.07857473194599152,0.01879209466278553,1.0424714088439941,1.0046085119247437,0.18457376956939697,-0.051586560904979706,0.9351388216018677,0.007290275767445564,0.9154572486877441,0.06261087954044342,-0.09595693647861481,0.9618858098983765,0.8918484449386597,0.9687255024909973,0.09836331754922867,1.2498003244400024,1.0874375104904175],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.11198924481868744,0.039198972284793854,-0.055139001458883286,0.9373687505722046],"xaxis":"x","y":[1.055330514907837,-0.004789428785443306,1.0197211503982544,0.1840871125459671],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.982588529586792,0.8983645439147949,0.96434086561203,-0.1312853842973709,0.026697419583797455,0.0671214759349823,0.07985077053308487],"xaxis":"x","y":[-0.08971917629241943,1.0099613666534424,0.9972336888313293,-0.15168464183807373,1.0093392133712769,0.047318361699581146,0.819366455078125],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-4.234386920928955,"x1":1.8397126197814941,"xref":"x","y0":-3.0315072536468506,"y1":3.0425922870635986,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":-13.534224510192871,"x1":11.200617790222168,"xref":"x","y0":-13.052016258239746,"y1":11.682826042175293,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":-3.1069746017456055,"x1":1.0286121368408203,"xref":"x","y0":-1.5985394716262817,"y1":2.5370471477508545,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-13.557362809819077,11.223756089848374],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-13.165478837599448,11.796288621534995],"title":{"text":"y1"},"type":"linear"}}}')},97516:function(a){a.exports=JSON.parse('{"config":{"plotlyServerURL":"https://plot.ly"},"data":[{"hovertemplate":"component=0
y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,-0.005619242321699858,0.039198972284793854,-0.1312853842973709,0.0671214759349823,0.07329066842794418,0.04944397881627083,-0.14176245033740997],"xaxis":"x","y":[0.016117846593260765,0.01879209466278553,-0.004789428785443306,-0.15168464183807373,0.047318361699581146,0.007290275767445564,-0.06050451844930649,0.09836331754922867],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.07985077053308487,0.06420062482357025,0.11198924481868744,-0.055139001458883286,0.14498808979988098,0.026697419583797455,-0.01619270257651806,-0.054175157099962234],"xaxis":"x","y":[0.819366455078125,1.2498003244400024,1.055330514907837,1.0197211503982544,0.9351388216018677,1.0093392133712769,0.9687255024909973,1.0046085119247437],"yaxis":"y"},{"hovertemplate":"component=2
y0=%{x}
y1=%{y}","legendgroup":"2","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"2","orientation":"v","showlegend":true,"type":"scatter","x":[0.8321502208709717,0.9451083540916443,0.982588529586792,1.0435446500778198,0.9766848087310791,0.8998674750328064,0.9373687505722046,0.8959560990333557],"xaxis":"x","y":[0.07857473194599152,-0.14384929835796356,-0.08971917629241943,-0.09595693647861481,-0.051586560904979706,0.06261087954044342,0.1840871125459671,0.18457376956939697],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#109618","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.9083782434463501,1.0038725137710571,1.1861436367034912,1.1610668897628784,0.8983645439147949,0.9941692352294922,0.96434086561203,1.0407627820968628],"xaxis":"x","y":[0.8729135394096375,0.9154572486877441,1.0424714088439941,0.8918484449386597,1.0099613666534424,0.9618858098983765,0.9972336888313293,1.0874375104904175],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-0.20000000298023224,"x1":0.20000000298023224,"xref":"x","y0":-0.20000000298023224,"y1":0.20000000298023224,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":-0.20000000298023224,"x1":0.20000000298023224,"xref":"x","y0":0.800000011920929,"y1":1.2000000476837158,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":0.800000011920929,"x1":1.2000000476837158,"xref":"x","y0":-0.20000000298023224,"y1":0.20000000298023224,"yref":"y"},{"line":{"color":"#109618"},"type":"circle","x0":0.800000011920929,"x1":1.2000000476837158,"xref":"x","y0":0.800000011920929,"y1":1.2000000476837158,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-0.22132018641796586,1.2657013727840472],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-0.26019856967325283,1.3583142522751817],"title":{"text":"y1"},"type":"linear"}}}')},8860:function(a){a.exports=JSON.parse('{"config":{"plotlyServerURL":"https://plot.ly"},"data":[{"hovertemplate":"component=0
y0=%{x}
y1=%{y}","legendgroup":"0","marker":{"color":"#3366CC","symbol":"circle"},"mode":"markers","name":"0","orientation":"v","showlegend":true,"type":"scatter","x":[-0.007774245459586382,0.8959560990333557,0.9766848087310791,-0.005619242321699858,0.07329066842794418,0.8321502208709717,0.8998674750328064,0.039198972284793854,-0.1312853842973709,0.982588529586792,0.9451083540916443,-0.14176245033740997,1.0435446500778198,0.0671214759349823,0.04944397881627083,0.9373687505722046],"xaxis":"x","y":[0.016117846593260765,0.18457376956939697,-0.051586560904979706,0.01879209466278553,0.007290275767445564,0.07857473194599152,0.06261087954044342,-0.004789428785443306,-0.15168464183807373,-0.08971917629241943,-0.14384929835796356,0.09836331754922867,-0.09595693647861481,0.047318361699581146,-0.06050451844930649,0.1840871125459671],"yaxis":"y"},{"hovertemplate":"component=1
y0=%{x}
y1=%{y}","legendgroup":"1","marker":{"color":"#DC3912","symbol":"circle"},"mode":"markers","name":"1","orientation":"v","showlegend":true,"type":"scatter","x":[0.96434086561203,0.9083782434463501,1.0038725137710571,1.1610668897628784,0.8983645439147949,0.9941692352294922,1.0407627820968628],"xaxis":"x","y":[0.9972336888313293,0.8729135394096375,0.9154572486877441,0.8918484449386597,1.0099613666534424,0.9618858098983765,1.0874375104904175],"yaxis":"y"},{"hovertemplate":"component=2
y0=%{x}
y1=%{y}","legendgroup":"2","marker":{"color":"#FF9900","symbol":"circle"},"mode":"markers","name":"2","orientation":"v","showlegend":true,"type":"scatter","x":[1.1861436367034912],"xaxis":"x","y":[1.0424714088439941],"yaxis":"y"},{"hovertemplate":"component=3
y0=%{x}
y1=%{y}","legendgroup":"3","marker":{"color":"#109618","symbol":"circle"},"mode":"markers","name":"3","orientation":"v","showlegend":true,"type":"scatter","x":[0.14498808979988098,0.11198924481868744,0.06420062482357025,-0.055139001458883286,-0.01619270257651806,0.026697419583797455,0.07985077053308487,-0.054175157099962234],"xaxis":"x","y":[0.9351388216018677,1.055330514907837,1.2498003244400024,1.0197211503982544,0.9687255024909973,1.0093392133712769,0.819366455078125,1.0046085119247437],"yaxis":"y"}],"layout":{"autosize":true,"legend":{"title":{"text":"component"},"tracegroupgap":0},"margin":{"t":60},"shapes":[{"line":{"color":"#3366CC"},"type":"circle","x0":-0.2223430573940277,"x1":1.2016632556915283,"xref":"x","y0":-0.8655871748924255,"y1":0.5584191679954529,"yref":"y"},{"line":{"color":"#DC3912"},"type":"circle","x0":0.7659292221069336,"x1":1.0819262266159058,"xref":"x","y0":0.8331487774848938,"y1":1.1491458415985107,"yref":"y"},{"line":{"color":"#FF9900"},"type":"circle","x0":0.8363673686981201,"x1":1.3182401657104492,"xref":"x","y0":0.5890355110168457,"y1":1.0709083080291748,"yref":"y"},{"line":{"color":"#109618"},"type":"circle","x0":-0.14776313304901123,"x1":0.7056936025619507,"xref":"x","y0":0.5210435390472412,"y1":1.3745002746582031,"yref":"y"}],"template":{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]],"sequentialminus":[[0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}},"xaxis":{"anchor":"y","autorange":true,"domain":[0,1],"range":[-0.2243714657413226,1.3196818588239556],"title":{"text":"y0"},"type":"linear"},"yaxis":{"anchor":"x","autorange":true,"domain":[0,1],"range":[-0.8759440292343224,1.4025639259829807],"title":{"text":"y1"},"type":"linear"}}}')}}]); \ No newline at end of file diff --git a/assets/js/2b917cd1.1d9969c5.js b/assets/js/2b917cd1.1d9969c5.js new file mode 100644 index 0000000000..4610920c25 --- /dev/null +++ b/assets/js/2b917cd1.1d9969c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8774],{3905:function(a,e,t){t.r(e),t.d(e,{MDXContext:function(){return o},MDXProvider:function(){return d},mdx:function(){return g},useMDXComponents:function(){return c},withMDXComponents:function(){return p}});var n=t(67294);function r(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(){return m=Object.assign||function(a){for(var e=1;e=0||(r[t]=a[t]);return r}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(r[t]=a[t])}return r}var o=n.createContext({}),p=function(a){return function(e){var t=c(e.components);return n.createElement(a,m({},e,{components:t}))}},c=function(a){var e=n.useContext(o),t=e;return a&&(t="function"==typeof a?a(e):i(i({},e),a)),t},d=function(a){var e=c(a.components);return n.createElement(o.Provider,{value:e},a.children)},h={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},x=n.forwardRef((function(a,e){var t=a.components,r=a.mdxType,m=a.originalType,s=a.parentName,o=l(a,["components","mdxType","originalType","parentName"]),p=c(t),d=r,x=p["".concat(s,".").concat(d)]||p[d]||h[d]||m;return t?n.createElement(x,i(i({ref:e},o),{},{components:t})):n.createElement(x,i({ref:e},o))}));function g(a,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof a||r){var m=t.length,s=new Array(m);s[0]=x;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=a,i.mdxType="string"==typeof a?a:r,s[1]=i;for(var o=2;o1&&void 0!==arguments[1]?arguments[1]:0,t=(o[a[e+0]]+o[a[e+1]]+o[a[e+2]]+o[a[e+3]]+"-"+o[a[e+4]]+o[a[e+5]]+"-"+o[a[e+6]]+o[a[e+7]]+"-"+o[a[e+8]]+o[a[e+9]]+"-"+o[a[e+10]]+o[a[e+11]]+o[a[e+12]]+o[a[e+13]]+o[a[e+14]]+o[a[e+15]]).toLowerCase();if(!l(t))throw TypeError("Stringified UUID is invalid");return t};var d=function(a,e,t){var n=(a=a||{}).random||(a.rng||s)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){t=t||0;for(var r=0;r<16;++r)e[t+r]=n[r];return e}return c(n)},h=function(a){return r.createElement("div",{style:{backgroundColor:"lightgray",marginBottom:"var(--ifm-leading)",borderRadius:"var(--ifm-global-radius)",boxShadow:"var(--ifm-global-shadow-lw)",overflow:"hidden",padding:"10px",font:"var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"}},r.createElement("span",{style:{color:"red"}},"Out: "),r.createElement("pre",{style:{margin:"0px",backgroundColor:"inherit"}},a.children.split("\n").map((function(a){return r.createElement("p",{key:d(),style:{marginBottom:"0px"}},a)}))))}},38196:function(a,e,t){var n=t(67294),r=t(39960);e.Z=function(a){var e=a.githubUrl,t=a.colabUrl;return n.createElement("div",{className:"link-buttons"},n.createElement(r.default,{to:e},"Open in GitHub"),n.createElement("div",null),n.createElement(r.default,{to:t},"Run in Google Colab"))}},83948:function(a,e,t){t.d(e,{i:function(){return l},g:function(){return p}});var n=t(67294),r=t(38726),m=t.n(r),s=t(72389);function i(a){var e=a.children,t=a.fallback;return(0,s.default)()?n.createElement(n.Fragment,null,null==e?void 0:e()):null!=t?t:null}var l=n.memo((function(a){var e=a.data,t=e.target_id;return n.createElement("div",{className:"bk-root thin-scrollbar",id:t,style:{overflow:"auto",width:"100%"}},n.createElement(i,{fallback:n.createElement("div",null,"loading...")},(function(){window.Bokeh.embed.embed_item(e,t)})))})),o=m()({loader:function(){return t.e(8660).then(t.bind(t,58660))},loading:function(a){return a.timedOut?n.createElement("blockquote",null,"Error: Loading Plotly timed out."):n.createElement("div",null,"loading...")},timeout:1e4}),p=n.memo((function(a){var e=a.data;return n.createElement("div",{className:"plotly-figure"},n.createElement(o,{data:e.data,layout:e.layout}))}))},89951:function(a,e,t){t.r(e),t.d(e,{assets:function(){return h},contentTitle:function(){return c},default:function(){return N},frontMatter:function(){return p},metadata:function(){return d},toc:function(){return x}});var n=t(83117),r=t(80102),m=(t(67294),t(3905)),s=t(38196),i=t(96435),l=t(83948),o=["components"],p={title:"Neal's funnel",sidebar_label:"Neal's funnel",path:"overview/tutorials/Neals_funnel/NealsFunnel",nb_path:"tutorials/Neals_funnel.ipynb",github:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",colab:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb"},c=void 0,d={unversionedId:"overview/tutorials/Neals_funnel/NealsFunnel",id:"overview/tutorials/Neals_funnel/NealsFunnel",title:"Neal's funnel",description:"Neal's funnel",id:"tutorial-neals-funnel",level:2},{value:"Problem",id:"problem",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Model",id:"model",level:2},{value:"Inference",id:"inference",level:2},{value:"Analysis",id:"analysis",level:2},{value:"Appendix: Adaptive Hamiltonian Monte Carlo",id:"appendix-adaptive-hamiltonian-monte-carlo",level:2},{value:"Appendix: Metropolis-Adjusted Langevin Algorithm",id:"appendix-metropolis-adjusted-langevin-algorithm",level:2},{value:"BMGInference",id:"bmginference",level:2}],g={toc:x};function N(a){var e=a.components,p=(0,r.Z)(a,o);return(0,m.mdx)("wrapper",(0,n.Z)({},g,p,{components:e,mdxType:"MDXLayout"}),(0,m.mdx)(s.Z,{githubUrl:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",colabUrl:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",mdxType:"LinkButtons"}),(0,m.mdx)("h2",{id:"tutorial-neals-funnel"},"Tutorial: ",(0,m.mdx)("strong",{parentName:"h2"},"Neal's funnel")),(0,m.mdx)("p",null,"This tutorial demonstrates modeling and running inference on the so-called Neal's funnel\nmodel in Bean Machine."),(0,m.mdx)("p",null,"Neal's funnel has proven difficult-to-handle for classical inference methods. This\ntutorial demonstrates how to overcome this by using second-order gradient methods in\nBean Machine. It also demonstrates how to implement models with factors in Bean Machine\nthrough custom distributions."),(0,m.mdx)("h2",{id:"problem"},"Problem"),(0,m.mdx)("p",null,'Neal\'s funnel is a synthetic model that is fairly simple, but has proven challenging for\nautomatic inference engines to handle due to its unusual geometry. This model has an\nunfavorable, exponential geometry in one direction, and a narrow "funnel" bending into\nthat direction.'),(0,m.mdx)("h2",{id:"prerequisites"},"Prerequisites"),(0,m.mdx)("p",null,"Let's model this in Bean Machine! Import the Bean Machine library and some fundamental\nPyTorch classes."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'# Install Bean Machine in Colab if using Colab.\nimport sys\n\n\nif "google.colab" in sys.modules and "beanmachine" not in sys.modules:\n !pip install beanmachine\n')),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"import math\nimport os\nimport warnings\n\nimport arviz as az\nimport beanmachine.ppl as bm\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport torch\nimport torch.distributions as dist\nfrom beanmachine.ppl.inference.bmg_inference import BMGInference\nfrom IPython.display import Markdown\n")),(0,m.mdx)("p",null,"The next cell includes convenient configuration settings to improve the notebook\npresentation as well as setting a manual seed for reproducibility."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'# Eliminate excess UserWarnings from Python.\nwarnings.filterwarnings("ignore")\n\n# Plotting settings\nplt.rc("figure", figsize=[8, 6])\nplt.rc("font", size=14)\nplt.rc("lines", linewidth=2.5)\n\n# Manual seed\ntorch.manual_seed(12)\n\n# Other settings for the notebook.\nsmoke_test = "SANDCASTLE_NEXUS" in os.environ or "CI" in os.environ\n')),(0,m.mdx)("h2",{id:"model"},"Model"),(0,m.mdx)("p",null,(0,m.mdx)("a",{parentName:"p",href:"https://projecteuclid.org/euclid.aos/1056562461"},"Neal's funnel")," is defined\nmathematically as follows:"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z\\sim\\mathcal{N}(0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x\\sim\\mathcal{N}(0,e^{z/2})")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.mdx)("p",null,"Let's visualize the model's density. To do this, we recognize that the joint density is\nfactored as follows:"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"P"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.mdx)("mo",{parentName:"mrow"},"="),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},";"),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.mdx)("mo",{parentName:"mrow"},"\u22c5"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},";"),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P(z,x)=\\mathcal{N}(x;0,e^{z/2})\\cdot\\mathcal{N}(z;0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},";"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}}),(0,m.mdx)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},";"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"xs, zs = torch.meshgrid(\n torch.arange(-50, 50, 0.1),\n torch.arange(-15.0, 15.0, 0.1),\n)\ndensity = (\n dist.Normal(0.0, (zs / 2.0).exp()).log_prob(xs).exp()\n * dist.Normal(0.0, 3.0).log_prob(zs).exp()\n)\n")),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'plt.contourf(xs, zs, density, levels=[0.0001] + torch.linspace(0.001, 0.1, 10).tolist())\nplt.xlabel("x")\nplt.ylabel("z")\nplt.colorbar();\n')),(0,m.mdx)("p",null,(0,m.mdx)("img",{parentName:"p",src:"data:image/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAggAAAGBCAYAAAADq0nuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnS0lEQVR4nO3df5wldX3n+9cbRiQIZNWBHYgho0YJoAnImAgrvxIna8jdPBLNDSYkK9mHEmQXNUQTFWIgixJ3I4FEWRzzuDteEswkunuvJhAgRtAIwcxs3AAB9CKgMAwwgAQUhBk+9486PRxOndO/TnefPqdfz8fjPLqr6nuqPl0z3fU+3/pWVaoKSZKkbruNugBJkrT8GBAkSVKLAUGSJLUYECRJUosBQZIktRgQJElSiwFBkiS1GBAkSRpSktOT3JHkiSRbkhwzTds9k2xM8k9JnkpyzYB2x3XW9USSryc5rU+bNyb55yTf7Xz9uWFq62ZAkCRpCElOAi4CPggcAVwHXJHkoAFv2R14AvgI8FcD1vli4PLOuo4Azgf+KMkbu9ocBWwC/hQ4vPP1L5L82BC1PVODd1KUJGn+ktwA/FNVvbVr3teAT1XVe2d470eAV1TV8T3zPwS8oape1jXvj4HDquqozvQm4AVVtb6rzd8AD1TVLw5bmz0IkiTNU5I9gCOBq3oWXQUcPcSqj+qzziuBdUmeM0OboxeiNgOCJEnzt5rmlMF9PfPvA9YMsd41A9a5qrPN6dpMbXeo2lbNodiJsnr16lq7du2oy5AkAVu2bNleVfst9HqPPX7Pevihp+f9/ptufOpmmvECUzZU1YY+TXvP16fPvLnqt87e+bPZ7rxqW7EBYe3atWzevHnUZUiSgCR3LcZ6H37oaf7H5atnbjjAy7//3ieqat00TbYDO2l/It+f9if3udg2YJ07gAdnaDO13aFq8xSDJEnzVFVPAluA9T2L1tNcMTBf1wOv67POzVX1VFebgdsdtrYV24MgSdICuQC4NMmXgS8BpwEHApcAJDkf+NGq+ompNyQ5FNiDZpzA3kkOB6iqr3SaXAL8pyQXAh8D/g1wCvCLXdu9CPhCkvcC/xP4OeAE4LWzrW06BgRJkoZQVZuSvBA4GzgAuAk4saqmTpscALy0522XAz/QNf2Pna/prPOOJCcCfwC8DdgKvL2qPt213euSvAk4DzgXuB04qapumENtAxkQJEkaUlVdDFw8YNkpfeatncU6rwVeNUObTwGfmm9t03EMgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkllWjLkCSpMXyyNN7cvljhw6xhnsXrJZxYw+CJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpJZlHRCSHJvkM0nuSVJJTulZniTnJNma5PEk1yQ5bETlSpI0MZZ1QAD2Bm4C3gE83mf5bwK/AZwBvBq4H7g6yT5LVqEkSRNoWQeEqrq8qt5XVZ8Cnu5eliTAO4Hfq6pPV9VNwJuBfYBfWvJiJUmaIMs6IMzgxcAa4KqpGVX1OPAF4OhRFSVJ0iQY54CwpvP1vp7593Ute5YkpybZnGTzAw88sKjFSZI0zsY5IEypnun0mdc0rNpQVeuqat1+++23+JVJkjSmxjkgbOt87e0t2J92r4IkSZqDcQ4Id9CEhPVTM5LsCRwDXDeqoiRJmgSrRl3AdJLsDfxgZ3I34KAkhwMPVdU3klwInJXkVuCrwNnAY8BlIyhXkqSJsawDArAO+HzX9Lmd1yeAU4D/AnwP8FHg+cANwE9W1aNLW6YkSZNlWQeEqrqGZtDhoOUFnNN5SZKkBTLOYxAkSVoWkpye5I4kTyTZkuSYGdq/Msm1nccE3JPk/Z0bAE4t39h5xEDv69s963lHkls767k7yUc7p+fnXdsUA4IkSUNIchJwEfBB4AiagfJXJDloQPt9gatprrh7NfB24N3AmV3N3gEc0PP6OvDnXev5JZpT7R8ADgH+PXBip5Z51dbNgCBJ0nDOBDZW1cer6paqOgO4F3jbgPYnA3sBb66qm6rq08CHgDOnehGq6pGq2jb1Al4KvAT4eNd6jgb+vqourao7q+pvgf8b+LEhatvFgCBJ0jwl2QM4kq7b/ndcxeDb/h8FfLHzeIApVwIHAmsHvOetwM1V1X0Z/98Bhyd5TaeWg4CfAS4forZdDAiSJM3famB35nDb/878fu2nlj1Lku8F/k+e3XtAVf0Z8D7gC0meAu4CbgR+a4jadlnWVzFIkjSMR3fsyTUPHjzEGj63OsnmrhkbqmpDn4azvu3/NO37zQf4ZZoD/aXPekNyHPDbwOk0l/n/IM14g3OB9w9RG2BAkCRpOturat10y4GdzO22/9sGtGfAe94KfLqqHuqZfx7wyar64870jUmeB/xxkt+dZ227eIpBkqR5qqongS103fa/Yz2Db/t/PXBM5/EA3e23And2N0zyo8CP0HN6oWMvmgDQbSed3oh51raLAUGSpOFcAJyS5C1JDklyEc2Aw0sAkpyf5HNd7S8DvgNsTPKKJG8A3gNc0LkBYLdTga8B1/bZ7meBU5O8KcmLk6wH/jPwl1W1Yza1TcdTDJIkDaGqNiV5Ic3zgA4AbgJOrKq7Ok0OoLlMcar9I52D+UeBzcDDwIdpDua7JNkHeBPwu32CAzSnGIomFLyI5pTCZ4Gz5lDbQAYESZKGVFUXAxcPWHZKn3k3AsfOsM5Hgb2nWb6DZ55RNK/apuMpBkmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLT7uWepYv/tJoy5hxbh656ZRlyBpBgYEjQ0P4JNjsf8tDSDS8AwIWlIe5LUUhvl/ZriQGgYELQgP/JoUs/2/bJDQpDMgaNYMAdIzpvt9MDxoEhgQ1JdhQJq/fr8/hgaNGwOCAAOBtNh6f8cMDFruDAgrnMFAGo2p3z2DgpYrA8IKZTCQlgeDgpYr76S4AhkOJEkzMSBI0jJgcNdyY0CQJEktjkFYga7euclPK9Iy4xiExfH4U8/h5m1rRl3GWLIHQZIktRgQVig/rUjLh7+PWo48xbCCTf1R8nSDNBoGAy1n9iDIP1LSErt65yZ/77TsGRAE+AdLWir+nmlcjPUphiTnAL/TM/u+qnLI6jx52kFaHAYDjZuxDggdtwHHd03vHFEdE8WgIA3PUKBxNgkBYUdVbRt1EZOq+w+cYUGaHYOBJsEkBISXJLkHeBK4AXhfVX19xDVNJHsVltaq/Vcv2Lp23L99wdalwQwGmiTjHhBuAE4BbgX2B84GrktyWFU9OMrCJplBYX4W8oC/2Ns2UMyNwUCTaKwDQlVd0T2d5O+BrwNvBi7obZ/kVOBUgIMOOmgpSpxonn7ob5RBYKEM+hkMDs8wFGjSjXVA6FVVjyW5GXjZgOUbgA0A69atq6WsbdKt5F6FSQgEs9X7s67EwGAw0EoxUQEhyZ7ADwGfH3UtK9VK6VVYSaFgOlP7YdKDgqFAK9FYB4Qkvw98FvgGzRiE3waeB3xilHWpMYm9CgaD/iY1KBgMtJKNdUAAXgR8ElgNPAD8PfCaqrprpFXpWSalV8FwMLNJCAqGAqkx1gGhqt406ho0N+Paq2A4mJtV+68eu5BgMJCebawDgsbXOPUqGA4ml6FAGsyAoJEb114FTW859yIYDKSZGRC0bBgUtNgMBtLsGRC07IzT6Qctf4YCaX4MCFrW7FXQfBkMpOEYEDQWDAqaLYOBtDAMCBorowgKO+7f7pUM87CUAxQNBdLCMyBoLDlOQWAwkBaTAUFjbyl6FexFmJvF7j0wGEiLz4CgieE4hclnMJCWjgFBE2exgoK9CLOzGL0HBgNp6RkQNLEWIygYEqa30OHAYCCNzm6jLkBabFfv3OSBZsz4b6Zxk+T0JHckeSLJliTHzND+lUmuTfJ4knuSvD9JupYfn6T6vH6oZz37JvnDJFuTfDfJ/5fkF4apbYo9CFoxFqpHwV6E/hai98BQoHGU5CTgIuB04O86X69IcmhVfaNP+32Bq4EvAK8GDgY2At8GPtzT/DDgoa7pB7rW8xzgKuBh4BeAu4EXAd+db23dDAhacRYiKBgSnm3YcGAw0Jg7E9hYVR/vTJ+R5PXA24D39ml/MrAX8Oaqehy4KckhwJlJLqiq6mp7f1UN+gX7VWB/4NiqerIz784ha9vFUwxasYY9KC3XJxUuNcOBVrIkewBH0nyS73YVcPSAtx0FfLETDqZcCRwIrO1puznJvUk+l+SEnmU/C3wJ+KMk25L8c5JzOj0L861tF3sQtKIN25uw0nsShgkHBgMthXpqN57autcwq1idZHPX9Iaq2tC9HNgduK/nffcBrxuwzjU0pwN6208tuwO4l+ZT/j8AewC/AnwuyfFV9YVO25cAPw5cBvw0Tbj4KLA38K551raLAUHCeyjMx3zDgcFAY2Z7Va2bRbvqmU6feTO13zW/qm4Dbutafn2StTQH/qmAsBtwP/DWqtoJbEnyQuAPkrx7iNp2rVxSx3wOXp5qmD3DgSbQdmAnzSf/bvvT/uQ+ZduA9kzzHoAbgJd1Td8LfLUTDqbcQjO+YfU8a9vFgCD1mM8ldistJMz15/WyRU2qzuDALcD6nkXrgesGvO164Jgke/a030p7kGG3w2lCwZQvAT+YpPtY/nLgOzQ9H/OpbRcDgjSAIaG/ufycBgOtEBcApyR5S5JDklxEM+DwEoAk5yf5XFf7y2gO4huTvCLJG4D3ALuuYEjyziQ/m+RlSQ5Lcj7NoMSPdK3nvwEvAC5KcnCSfwucC1zcdSXEtLVNxzEI0jTmOjZh0gctzjUcSCtBVW3qnPs/GzgAuAk4saru6jQ5AHhpV/tHkqynGVC4meY+Bh+mOZhP2QP4feD7gMeBm4GfrqrLu9bzzSQ/2XnfV2hOXfxfwHlzqG2gPPtyy5Vj3bp1tXnz5pkbSh1zGcC4mCFhx0sPHLzd27cu3nYNB1pESbbMcjDgnDz3oO+vA9/9znm//863v2tR6hoH9iBIszTqKx2mCwa9bRY6KMw2HBgMpMnhGARpjmZzEFzo8QizCQfDtF8IhgNpshgQpHlYypAw34P9QoWE2fwchgNp8niKQZqn2ZxyGPdBizOFA4OBNLnsQZCGNNNBcpiehGF7AYZ5v+FAWtkMCNICmLSDpeFAkgFBWiDTHTQn6SZKhgNpZTAgSAtoEkLCdHUaDqSVw4AgLbBxDgmGA0lTvIpBWgRX79y0qDdUenTt97Tm7XPn44u2PcOBtPLYgyAtkkEH1WF7EfqFg+nmz9agugwH0spkQJAW0UKHhJlCwHxDguFAUi8DgrTIxvUgO651S1oYBgRpCfQ72C6XAYv96jAcSDIgSEtk2IPusGMMZstwIAkMCNKS6j34LkYvwlyCRO/2DQeSpniZozRi83mg06Pfl2dN73NPzWu7kjSIPQjSEluMT+m9gWE+7D2Q1M2AII3AMKca5hIGVt2+te98Ty1ImokBQRqR2RyUBx3g+5lvL4LhQFI/BgRpmViqMQGOPZA0GxMREJKcnuSOJE8k2ZLkmFHXJM3GMJ/ev/Oip3e9RrF9SZNt7ANCkpOAi4APAkcA1wFXJDlopIVJ87DYn+671284kDSdWQeEJH+b5Lf7zH9+kr9d2LLm5ExgY1V9vKpuqaozgHuBt42wJmnW5nOg7u01GKYXQZL6mUsPwvHAryf5iyTdd2LZAzhuQauapSR7AEcCV/Usugo4eukrkuZnupAwl4GKs32fvQeSZjLXUwyvA14M/F2SAxahnrlaDewO3Ncz/z5gTW/jJKcm2Zxk8wMPPLAU9UlztlinGRycKGku5nonxbuB1wKfADYn+ZnOvFHrvY1c+syjqjYAGwDWrVs391vPSYvo6p2bWL/7SbNu/5wDv7Pr+6e27rXr+33ufHzG7UgrxW5Pwl53j/1wu5GYy14rgKp6oqpOojnQXgP8wiLUNVvbgZ20ewv2p92rII2Nhf60b++BpLmaS0B41l1Yqupc4FeB8xe0ojmoqieBLcD6nkXraa5mkMbKdJ/up3oGvKxR0lKYyymGE4CHumdU1aeS3AKsW9Cq5uYC4NIkXwa+BJwGHAhcMsKapEXVfXph1/Tde++anu/ARkmaMusehKq6tqp29Jl/c1V9YmHLmr2q2gS8Ezgb+ArNGIkTq+quUdUkDWPqU373aYF+B/zD1mzjsDXbZlzf1HrsPZA0FxMxcqOqLq6qtVX13Ko6sqq+MOqapKUym5AgSXM1EQFB0vTsPZA0VwYEaRnqd5phPrx6QdJ8GRCkMXb8C28bdQmSJpQBQVqmBp0WmLrpy1Q46A0JvQMaPb0gaT4MCNKY6D7wDxqY2H0XRU8vSBqGAUFa5roP9DPdRlmSFooBQVrGZjo9cOLe/zzU+yVpEAOCNKamwsFMIUGS5sOAIE0gxx9IGpYBQRoDszng73NPPWsgo6cXJA3DgCAtc90Heh/CJGmpGBCkMbPPPTXqEiStAAYESZLUYkCQxkDveIKbt60B4GUveuaUw9Q9Enbcv93xB5KGZkCQxoRXJkhaSgYEacx4N0VJS8GAIE2Ap7buNeoSJE0YA4I0YRx/IGkhGBCkMTHTgX/V7VsdpyBpwRgQpDGz6vatnlKQtOgMCNIYGdRDsNfd/ipLWlj+VZEkSS0GBGkM2WMgLS9JTk9yR5InkmxJcswM7V+Z5Nokjye5J8n7k6Rr+XFJrkvyYKfNrUneNc36fjFJJfnLYWub4l8ZaQJMPZ/BKxikpZfkJOAi4IPAEcB1wBVJDhrQfl/gauA+4NXA24F3A2d2NXsM+EPgWOBQ4Dzg3CSn91nfS4D/Cnxx2Nq6GRCkMWIAkJalM4GNVfXxqrqlqs4A7gXeNqD9ycBewJur6qaq+jTwIeDMqV6EqtpSVX9WVTdX1R1V9SfAlcCzPv0neQ7wSeAs4OsLUNsuBgRpDPlER2l5SLIHcCRwVc+iq4CjB7ztKOCLVdV9W9QrgQOBtQO2c0Rnfdf2LPoAcGdVfWKBattl1UwNJC1/+9z5uPdAkPrY/amhA/XqJJu7pjdU1Ybu5cDuNKcLut0HvG7AOtcAd/dpP7XsjqmZSe4G9qM5Xp9bVZd0LftJ4CTg8EG1z6O2XQwI0phpgsBLR12GtFJsr6p1s2jXm0LSZ95M7fvNPwbYG3gN8KEkd1TVpUlWAxuBX6qqhxe4NsCAII0lH9gkLRvbgZ00n/y77U/7k/uUbQPa0/ueqprqTbgxyb8GzgEuBV4BHAD8TdfFD7sBJNkBHEbTEzHX2nZxDIIkSfNUVU8CW4D1PYvW01wx0M/1wDFJ9uxpvxW4c5rN7QY8t/P9PwCvpDm9MPX6DM2VDIcDd8yztl3sQZAmwKrbt3KFVzhIo3IBcGmSLwNfAk6jGXB4CUCS84Efraqf6LS/DPgdYGOS84CXA++hGWNQnfecQdMDcFvnPccC7wIuBqiqbwM3dReR5FvAqqrqnj9tbdMxIEhjaNXtW0ddgqSOqtqU5IXA2TTd/jcBJ1bVXZ0mB9A1cKiqHkmyHvgosBl4GPgwzcF8yu40lz6uBXYAt9OEiBkP7HOsbSADgjRmrt65iZ864D8C8LW7DxxxNZIAqupiOp/u+yw7pc+8G2l6BQat70LgwjnW0NrOTLVNxzEIkiSpxYAgSZJaDAiSJKnFgCCNucsfO3TUJUiaQAYESZLUYkCQxtw1Dx7scxgkLTgDgjSGDASSFpsBQZIktRgQpDF387be57BI0vAMCNKY6r564WqfwyBpgY11QEhyTZLqef3ZqOuSFlt3IHhq614jrETSpJqEZzH8d+B9XdOPj6oQSZImxVj3IHR8p6q2db0eGXVB0lK45sGDR12CpAk2CQHhTUm2J7k5ye8n2WfUBUlLaa+7J+HXWNJyM+6nGC4D7gK2AocB5wM/AqwfZVHSUrh52xr4gVFXIWlSLbuAkOQ84KwZmp1QVddU1YaueTcm+TpwQ5JXVdX/6rPuU4FTAQ466KAFq1mSpEmz7AICcCHwJzO0+caA+ZuBncDLgFZA6ASKDQDr1q2r+Zcojd7U1Qv73ON/ZUkLb9kFhKraDsz3PrKvBHYH7l24iiRJWnmWXUCYrSQvBU4GLqcJFIcCHwb+EfjSCEuTJGnsjW1AAJ4EfgJ4B7A38E3gr4Bzq2rnKAuTlsLU1Qv73OmtPyQtvLENCFX1TeC4UdchSdIk8gJqaUw5OFHSYjIgSJKkFgOCJElqMSBIY2pqcOKq27eOuBJJk8iAIEmSWsb2KgZJkmay23ef9lLgebIHQRpTnlqQtJgMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCCNuR33bx91CZImkAFBkiS1GBCkMWXPgaTFZECQJEktBgRJktRiQJDG3NU7N426BEkTyIAgjSmDgaTFZECQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQxtjljx066hIkTSgDgiRJajEgSJKkFgOCJElqMSBIY+yaBw8edQmSJpQBQZIktRgQJElSiwFBGmM3b1sz6hIkTSgDgiRJQ0pyepI7kjyRZEuSY2Zo/8ok1yZ5PMk9Sd6fJF3LD0hyWZJbk+xMsrHPOt6a5ItJHkryrSSfT/LaYWubYkCQJGkISU4CLgI+CBwBXAdckeSgAe33Ba4G7gNeDbwdeDdwZlez5wLbgd8Dbhiw6eOBTcBPAD8G3AZcmeRl862tmwFBkqThnAlsrKqPV9UtVXUGcC/wtgHtTwb2At5cVTdV1aeBDwFnTvUiVNWdVfX2qtoIPNRvJVV1clV9pKr+sapu62zvUeD1Q9S2iwFBkqR5SrIHcCRwVc+iq4CjB7ztKOCLVfV417wrgQOBtUOUswewJ/DwELXtYkCQxthTW/cadQnSSrca2J3mdEG3+4BBo4jXDGg/tWy+zgMeAz4zRG27rBqiEEmSlrV89ylW3b51mFWsTrK5a3pDVW3o0656N91n3kzt+82flSTvAH4NeF1V/cuQtQEGBEmSprO9qtZNtxzYSfsT+f60P7lP2TagPdO8Z6BOODgP+Kmq+vKQte3iKQZJkuapqp4EtgDrexatp7lioJ/rgWOS7NnTfitw51y2n+RM4APAT1fV3y1AbbsYEKQxttfd/gpLy8AFwClJ3pLkkCQX0Qw4vAQgyflJPtfV/jLgO8DGJK9I8gbgPcAFVbWr6z/J4UkOB/YFXtCZPrRr+btpLoP8D8BXk6zpvL53trVNx1MMkiQNoao2JXkhcDZwAHATcGJV3dVpcgDw0q72jyRZD3wU2Exz1cGHaQ7m3f6xZ/rfAXfxzJUO/xF4Ds29ELp9AjhllrUNZECQJGlIVXUxcPGAZaf0mXcjcOwM68wMy9cOW9t0lm3/ZJJTO7eN/FaSSrK2T5vnJ7k0ySOd16VJ/tXSVytJ0mRZtgGB5i5TVwHnTNPmMuBVwE/R3DnqVcCli16ZJEkTbtmeYqiqCwGS9L28JMkhNKHgtVV1XWferwFfTHJw57aTkiRpHpZzD8JMjqK5Y1T3pRpfAr7NLG4hKU2Cfe6Z1z1VJGlG4xwQ1gAPdF8S0vn+fgbcQrIzrmFzks0PPPDAEpUpSdL4WdKAkOS8zoDD6V7Hz2GV/T4+DbyFZFVtqKp1VbVuv/32m8dPIEnSyrDUYxAuBP5khjbfmOW6tgH7J8lUL0LnMZn7MY9bVUqSpGcsaUCoqu0094ZeCNcDe9OMRZgah3AU8DxmcQtJSZI02LK9iiHJGpqxBC/vzDq0c4+Db1TVQ1V1S5K/Bj6W5K00pxY+BvylVzBIkjSc5TxI8TSa20z+aWf6rzrTP9PV5mTgf9PcL+HKzve/soQ1SpI0kZZtD0JVncP0N0miqh4Cfnkp6pGWo33ufHzUJUiaUMu5B0GSJI2IAUGSJLUYECRJUosBQZIktRgQJElSiwFBkiS1GBAkSVKLAUGSJLUYECRJUosBQRpjq27fOuoSJE0oA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqWTXqAiRJWiy1Ywc77t8+6jLGkj0IkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCNIY23H/9lGXIGlCGRAkSVKLAUGSJLUYECRJUosBQZIktSzbgJDk1CSfT/KtJJVkbZ82d3aWdb9+bwTlSpJWsCSnJ7kjyRNJtiQ5Zob2r0xybZLHk9yT5P1J0tPmuM66nkjy9SSn9VnPG5P8c5Lvdr7+XM/yY5N8prONSnLKbH+mZRsQgL2Aq4BzZmj3u8ABXa/zFrcsSZKekeQk4CLgg8ARwHXAFUkOGtB+X+Bq4D7g1cDbgXcDZ3a1eTFweWddRwDnA3+U5I1dbY4CNgF/Chze+foXSX6sa3N7AzcB7wAen8vPtWoujZdSVV0IkGTdDE0frapti1+RJEl9nQlsrKqPd6bPSPJ64G3Ae/u0P5nmQ/Cbq+px4KYkhwBnJrmgqgo4DdhaVWd03nNL58D/LuDTnXnvBD5fVR/oTH8gyQmd+b8IUFWX0wQNkmycyw+1nHsQZutdSR5M8pUkZyXZY9QFSZJWhs4x50iaHu9uVwFHD3jbUcAXO+FgypXAgcDarja967wSWJfkOTO0GbTdORn3gPCHNCnpBOAjwK8DF4+0IknSSrIa2J3mdEG3+4A1A96zZkD7qWXTtVnV2eZ0bQZtd06W9BRDkvOAs2ZodkJVXTOb9VXVBV2T/5TkX4BNSX6rqh7ss/1TgVM7k48luW0221kCqwFviTeY+2ew1cmfu28G8//OYMtt3/zAYqz0UR6+8m+e/vPVM7ccaM8km7umN1TVhj7tqmc6febN1L53/nzbTLfdWVvqMQgXAn8yQ5tvDLH+GzpffxBoBYTOP2q/f9iRSrK5qmYaa7FiuX8Gc99Mz/0z2ErZN1X1+kXexHZgJ+1P7fvT/nQ/ZduA9nS9Z1CbHTxzfBvUZtB252RJA0JVbWdxE+vhna/3LuI2JEkCoKqeTLIFWA/8Rdei9TwzmLDX9cCHkuxZVU90td8K3NnV5md73rce2FxVT3W1WQ/815421839J2lbtmMQkqxJcjjw8s6sQ5McnuQFneVHJfn1zrwXJ/kFmvEHn6mqYXohJEmaiwuAU5K8JckhSS6iGXB4CUCS85N8rqv9ZcB3gI1JXpHkDcB7gKkrGOi890VJLuys8y3AKcDvd63nIuDHk7w3yQ8leS/NmLwLpxok2btznDyc5ph/UGe67yWYz1JVy/JFc/+D6vM6pbP8VcDfA9+iubbz1s579hp17fP4WU8ddQ3L+eX+cd+4f9w3y/0FnE7z6f+7wBbg2K5lG4E7e9q/EvgC8ARNr/fvAOlpcxzwvzrrvAM4rc92f75z/HsSuAV4Q8/y4wccSzfO9DOlswJJkqRdlu0pBkmSNDoGBEmS1GJAWAbS+OvOgzR+vmfZ85NcmuSRzuvSJP9qRKUumSQvSPJHSW7tPMzkm0n+W5IX9rRbkfsH5v5wmEnUGZz1D0n+JckDST6b5BU9bZLknCRbO/+Xrkly2KhqHpUk7+v8jflI1zz3jQYyICwPv0FzHW0/l9EMyPwp4PWd7y9dorpG6UDg+4DfpBnM88vAscAne9qtyP0z14fDTLDjaa5eOhr4cZprxP9m6mqnjt+k+R07g+bBOPcDVyfZZ2lLHZ0krwHeCvxTz6IVv280jVGP/FzpL2Ad8E2am1sU8PNdyw7pzPs3XfNe25l38KhrH8G+OhF4Gth3pe8fmpuCfbxn3teA80dd24j3y940YfvfdaZDM0L8rK423wM8CvzaqOtdon3yvcDtNAHqGuAj7htfs3nZgzBCnZT+SZpfxvv7NDkKeIxn3/TiS8C3WaCHcYyZfWku9/lOZ3pF7p95PhxmpdiHpmf04c70i2nuNLdrX1XzgJwvsHL21QbgU1X1tz3z3TealgFhtC4B/rqax3H2swZ4oKp2XYva+f5+FuhhHOOiM67gP9N8at7Rmb1S9898Hg6zUlwEfIXmDnPwzP5YkfsqyVtpbj3/230Wr+h9o5kZEBZYkvM6A4Gmex2f5FeAHwHePcMq+92oYsEexrHUZrt/et7zPOCzwD0050y7TdT+maNFe0jLOEpyAc0ppjdWVe+YnhW3r5IcTDNG5eSqenKapitu32h2lvphTSvBhczugVSnAIfSPFWye9mmJNdX1WtpHsSxf5JMfUpO03g/FuhhHCNwIXN4YFeSvYGpHpb/o565bzlM5v6Zjfk8HGaiJfkD4E00T4P9eteibZ2va2jG+kxZCfvqKJreppu6/sbsDhyb5DRg6mqFlbhvNAsGhAVWs3wgVZKzePY9tQFuBN4F/L+d6etpBl0dxTPn2Y8CnscCPYxjqc12/8CuMRpX0HyieX1VPdbTZOL2z2zU/B4OM7HS3Pf+TcDxVXVrz+I7aELCeuAfOu33BI5h5t67cff/AJt75v13msGsHwS+ysrdN5oFA8KIVNU9NF3mu3RS/jenPgFV1S1J/hr4WOdcYoCPAX9ZVbctcclLqhMOrqIZmPizwPM6pxoAHqqqJ1fy/qF5OMylSb5MMzDzNLoeDrNSJPko8Cs0/0ceTjLVq/JYVT1WVZXkQuCsJLfSHBTPphncetkISl4yVfUtmmfV7JLk2zS/Pzd1pi9kBe4bzY4BYfk7GfhDnhlp/BngP42unCVzJPCazvdf7Vl2As3lWrBC909VbercNOps4ADgJuDEqrprtJUtudM7Xz/XM/9cmoe3AfwXmsv3Pgo8n+YS0Z+sqkeXosBlzn2jgXxYkyRJavEqBkmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQxkyS/ZLcm+T9XfN+OMkTSX5+lLVJmhzealkaQ0n+LfBZ4DjgKzRP7ftyVf3qKOuSNDkMCNKY6jyJ72eAa2ke0Xt4n0diS9K8GBCkMZXkucD/Bl4GHF1VN4y4JEkTxDEI0vhaC3w/UMBLRluKpEljD4I0hpI8B7ge+BpwA3AO8MNV9Y1R1iVpchgQpDGU5PeAXwJ+GHgEuAL4HuCEqnp6lLVJmgyeYpDGTJLjgN8A/n1VfaualH8KcAjwW6OsTdLksAdBkiS12IMgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJklr+f+aBLFPigyh8AAAAAElFTkSuQmCC",alt:null})),(0,m.mdx)("p",null,"Plotting the log density is usually easier to visualize and reason about."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'plt.contourf(xs, zs, density.log(), levels=range(-10, 0))\nplt.xlabel("x")\nplt.ylabel("z")\nplt.colorbar();\n')),(0,m.mdx)("p",null,(0,m.mdx)("img",{parentName:"p",src:"data:image/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfUAAAGBCAYAAAB/+yjGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAj7klEQVR4nO3de7hcdX3v8fc3pooh8XhJIIrlgHgDa7WSWrGoREtVntba2qotveA5FS9PfTw9trbH2BaPafWxXmJbi27P0xt4O7XtUZQotZhqRWlDEcWCF0QDgYRsESQSLoHv+WNm08mw956ZPWtmrfWb9+t55smeNWv/5rtX9p7PfNf6rTWRmUiSpPZbVXcBkiSpGoa6JEmFMNQlSSqEoS5JUiEMdUmSCmGoS5JUCENdkqRCGOqSJE1JRJwZEZ+OiJsiIiPimCrHN9QlSZqeNcAFwFmTGHz1JAaVJEn3lpnbACJi0yTGt1OXJKkQhrokSYWY2d3v69evz2OOOabuMiRJwCWXXDKfmRuqHvfppxyW373x7hV//+VfvvMrwG09i+Yyc653nYjYCmwZMNTmzNyx4kKGNLOhfswxx7Bz5866y5AkARHx7UmM+90b7+bvz1+/4u9/9A9ef1tmDjr+vQ04d8A6u1ZcxAhmNtQlSapCZs4D83XXAYa6JElTExEbgY3Ao7uLToiIBwK7MvPGccd3opwkSdPzcuBS4H3d+x/v3n9eFYMb6pIkTUlmnpWZscjtr6oY31CXJKkQhrokSYUw1CVJKoShLklSIQx1SZIKYahLklQIQ12SpEIY6pIkFcJQlySpEIa6JEmFMNQlSSqEoS5JUiEMdUmSCmGoS5JUCENdkqRCGOqSJBXCUJckqRCGuiRJhTDUJUkqhKEuSVIhDHVJkgphqEuSVAhDXZKkQhjqkiQVwlCXJKkQhrokSVMQEQ+OiD+NiCsj4kBEXBMRZ0fEQ6p6DkNdkqTpeBhwFPBa4PHALwNPBz5Q1ROsrmogSZK0tMy8HPi5nkXfiIjfBj4WEQ/IzO+N+xx26pIk1ecBwO3ArVUMZqhLklSDiHgg8EbgvZl5sIox3f0uSSrWzXcfxvn7TxhjhOvXR8TOngVzmTnXu0ZEbAW2DBhoc2bu6Pmew4HzgN10jrFXwlCXJGlp85m5acA624BzB6yza+GLiFgLnN+9+1OZedvKyzuUoS5J0hgycx6YH2bdiFgHbAcCeE5m7q+yFkNdkqQp6Ab6BXQmxz0fOLy7Gx7gxsy8Y9znMNQlSZqOE4GndL/+Wt9jm4Ed4z6BoS5J0hR0J8rFJJ/DU9okSSqEoS5JUiEMdUmSCmGoS5JUCENdkqRCGOqSJBXCUJckqRCNDvWIeHpEfDQidkdERsQZfY9HRJwVEddFxIGI2BERj6upXEmSatXoUAfWApcDrwYOLPL4a4HXAK8CfhS4AfjH7qX4JEmaKY0O9cw8PzNfl5kfBu7ufSwiAvgfwJsz8+8y83Lg14B1wC9NvVhJkmrW6FAf4FhgI52L4wOQmQeAzwBPrasoSZLq0uZQ39j9d2/f8r09jx0iIs6MiJ0RsXPfvn0TLU6SpGlrc6gvyL77sciyzoqZc5m5KTM3bdiwYfKVSZI0RW0O9T3df/u78iO4d/cuSVLx2hzqV9MJ9lMXFkTEYcDTgIvqKkqSpLo0+vPUI2It8Mju3VXA0RHxRODGzNwVEduALRFxJZ0PnH89sB94fw3lSpJUq0aHOrAJ+HTP/Td0b38NnAG8Bbg/8C7gQcDFwE9m5i3TLVOSpPo1OtQzcwediW9LPZ7AWd2bJEkzrc3H1CVJUg9DXZKkQhjqkiQVwlCXJKkQhrokSYUw1CVJKoShLklSIQx1SZIKYahLkjQlEfHeiLgqIg5ExL6I+EhEHF/V+Ia6JEnTs5POZc6PB55N56qpn4qIH6hi8EZfJlaSpJJk5nt67n4rIl4PXAY8AvjquOPbqUuSVIOIOBx4CbAL+FYVY9qpS5KK9b2Dh3Hh/GPHGOGf1kfEzp4Fc5k5N05NEfFKOp8yejid7vxZmXn7OGMusFOXJGlp85m5qed2r0CPiK0RkQNup/R8y/uAHwGeAXwN+NuIWFNFsXbqkiSNZxtw7oB1di18kZk3AzcDX4+ILwDfBV4AnDNuIYa6JEljyMx5YH6F3x7d2/2qqMVQlyRpCiLikXQ68k8B+4CHA78L3A58rIrn8Ji6JEnTcTtwCrAd+AbwIeAW4KTM3FPFE9ipSyv03CNfUXcJjbF979l1lyA1XmZeAzx3ks9hqGvqDMPylPJ/6psTtZ2hrkOU8uIsrcQ0fv9946BJMtQLYyhLzTbu36hvCrQcQ73hDGlJvUZ9TfBNwGwx1GtmaEuapEGvMYZ+WQz1KTG8JTXRUq9Nhn07GeoTYohLarP+1zBDvh0M9QoZ5JJK1fv6ZsA3l6FeAcO83Q4ed1TdJcys1VftrrsErcBzj3yFwd5QhrpaySAuQ5X/j75BmC6DvZkMddXOgFYVRv098k2ASmSoa+IMbTXRML+XBr/axlCvwPa9Z3tcHcNb5Vnqd9qwd7JcUxnqFZm1YDfANcsW+/2fpaA30JvLUK/Qwi96qeFukEtL6/37KDXgDfPmM9QnoLRwN8yl0Sz8zZQS7oZ5exjqE1RCuBvo0sodPO6o1ga7Qd5OhvoU9P5xtCngDfTh3HLs/esuoRbrrj5Qdwmt0LZgN8zbzVCfsrYG/CyZ1ZAe1Uq2k28EmskgL4ehXiMDvh6Gdn2W2/YG/nQZ5GUy1BvCgJ8MA7w9lvq/anvYN2nXu0FePkO9gZoS8Kuv2t264+qGeHn6/0/bHvLTZpDPFkO94fr/IKcd8m0IdoN8tiz8f7ch3Ovo0g3x2Waot0wdXfzCC1MTw91An11NDvdph7lBrgWtDvWIOAv4g77FezNzYw3lTN20A75JXbthrgVNC/dpBLohrqW0OtS7vgqc0nP/rprqqNW0dtM3oWs30NVEkw5zg7wsERHAduDZwC9k5oerGLeEUD+YmXvqLqJpJt3FNyHcZ8H+o1aNPcba3XdXUEnz3XLs/Wvp1icZ5gZ50V7DBJrQEkL9ERGxG7gDuBh4XWZ+s+aaGmWSXbzhPrwqAnpazzsrbwTGMYkwN8RnQ0RsAl4NnAjsrXLstof6xcAZwJXAEcDrgYsi4nGZ+Z06C2uySXTxhntHXcFdteV+jlkP/KrD3CCfLRGxDvgA8LLMvKGzF746rQ71zNzeez8ivgB8E/g14O3960fEmcCZAEcfffQ0Smy8qrv4WQv3UkJ8FP0/86yEfFVhbohP1213/gBX7DlynCHWR8TOnvtzmTk3xnjvBj6RmeePU9RSWh3q/TJzf0R8BXjUEo/PAXMAmzZtymnW1hZVdfGTDPd1Vx+odbLcLAb5cnq3R50BP6nj6VWEuUHeavOZuWm5FSJiK7BlwDibgR8EngAsO944igr1iDgMeCzw6bprKUEVAT+pcK8j2A3zwRa20bTDfRKBPm6YG+QzZRtw7oB1dtE5XHwCsL9vt/uHIuLzmXnyuIW0OtQj4q3AeXQ21hHA7wGHA39dZ10lGjfge18g27Zr3jAf3TTDvcpAN8i1Epk5D8wPWi8itgBv7Vv8ZeC3gI9UUUurQx14OJ0JB+uBfcAXgKdk5rdrrapwVQX8uOE+jW7dQB/P/qNWTTTYqwr0lYa5Ia5RZOZu4JBftm7Hfk1VZ221OtQz88V11zDrxploV0W4L7yoe0Ga2VNFoK8kzA1yNVmrQ13Ns5IuvqpwrzrY7dKrMYlufZxAN8jVJJlZ6TlthromZtSAH/e4e92z4jUdKw30UcPcIFcbGeqaipUG/KjhXlqw3/rw8TvcNdeWs8dhJYE+Spgb5Go7Q11Tt/DCOalwb+Nx9irCe9Sx2xT2kwxzg1wlMdRVm1G695WGe5ODfZJBPurzNzngRw10w1yzzFBXIwwb8KOG+zhd+9rdd09kslzdYb6YhZomEe4rnSQ3Spgb5FKHoa7GGSbgR51U14SuvYlh3m+S4T6KYQN9mDA3yDVLDHU12jDH34ft3lcS7FV1620I9F63PvzuSoJ91C7dMJfGY6irFUbp3pcL9zom0bUt0BdUFezDGibQB4W5Qa5ZZ6irdQZ178OG+7DBPqlj66UbpUsfFOiGuTQcQ12tNW64j9K1rzTY29qlj2vYQDfMpWoZ6mq9QbvmV1+1u5KufRY79pXsgq8i0JcLc4NcWpqhrqIs1b1X2bVracME+kq7c8NcGsxQV5HGCfflgn0Wu/UqraQ7N8yl4RnqKtpKwr3Jwb76YbcOXOfgdWumUMm9DerSlwp0w1yqjqGumTBquA/aHT/NYB8myJdaf9yAH/Z4+nKBbphL02Ooa6YsF+6jdu3DBPuaa1eteAb8qGG+3BiT7N6rCnTDXBqfoa6ZtFi4L9e1T7tjryLQ+8ebRLCPGuiGuTRZhrpm2lLhPsru+KqDvepA7x23ymBfKtANc6k+hrrEvcN91K59uWAfZRf8pAK9d/xhg3254+njBLphLk2O5+ZIPfoDZ7EOc9TP9y6NgS41l5261GeYrn2xjr2qbr0JRr2KXH+gG+ZSPezUpSUM6toX60xH/ajRQ8af8K73Kiz28y0X6Nv3nm2gS1NkqEvL6A+l1VftPiS0Rgn2aX6M6XIGvXlYqs7+n2vd1QcO+fn7t41hLk1fM15lpIZbrmvvDzcYr2NvosUCvZfdudQMhro0pMW69l7DBHtTuvWlLFbfqIEuqT7NfoWRGmiUYG87A12qVkTsiIjsu32wqvGd/S6tQO8M+f6L1fTOjF9sRnzdM+GXOk990F6E/uPnCwxzaWR/Cbyu535l3YCdujSGhUBbbgLdsMfXR73a2/Eb995zm4Teug10qVK3ZuaentvNVQ1sqEtjWmp3/HLBPs6x9cWCfNxw76/HQJcm6sURMR8RX4mIt0bEuqoGNtSlCix3nH1BFTPiBwV3FV27gS5N1PuB04HNwBuBFwB/X9XgHlOXKrJ979mHXIXu4HFHLfsJb6MeWx82sI/fuJcr9hw59LjD7DVYCHTDXG2Td64a94OM1kfEzp77c5k517tCRGwFtgwYZ3Nm7uj73i9HxDeBiyPiSZn57+MUCoa6VKnFJtANmjjXJIt16Qa6Ztx8Zm4asM424NwB6+xaYvlO4C7gUcDYod7cVxepxXon0MHSx9f7u+SlOoqqJsP1j9/7/Aa6tDKZOZ+ZVw64LXUpx8cD9wGur6IWQ12akOWCfdLGeRNgoEuTERHHRcTvR8SmiDgmIk4DPghcCnyuiucw1KUJ6g/EhcBcrluflsW6dANdmqg7gGcBnwS+CvwJcAHwE5l5VxVPYKhLE7Z979mLzohvyvXhl6rDQJeqlZnXZOYzMvMhmXm/zHxkZr46M2+s6jkMdWlKltsN39s1jzlTd0m94y62d6C3SzfQpXYy1KUpWOr4et3d+lK73SW1k6EuTUl/sPeb1rH1/ufxOLpUDkNdmqLewJxmt77YLv3e5zXQpTIY6tKU9U6cW+o0t0kdV1/o0vt3uy/UJandDHWpJr274RdCto7T25wYJ5XDUJdqsNhu+Gnp7dKdGCeVpYhQj4hXRsTVEXFbRFwSEU+ruyZpkP7z1/u79ap2wS+M07sXwN3uUplaH+oR8SLgncAfAT8CXARsj4ijay1MGsJCsE+7Wwd3u0slGjrUI+LCiPi9RZY/KCIurLaskfxP4K8y872ZeUVmvorOhfFfUWNN0sjWXX1gpJnwz1x/Jc9cf+Wijy310atrd99dyxsISdMxSqd+CvCbEfG3EdH7AdH3BZ5RaVVDioj7AifSuXZurwuAp06/Iml0i11Gtn/C3HKfj75UsMPiu97BLl0q1ai7338COBb4l4h46ATqGdV6Oh9Z1/+RVHuBjf0rR8SZEbEzInbu27dvGvVJI+vt1pc6rr5ckC837sLkOANdKtOooX4tcDLwDWBnRJxYfUkrkn33Y5FlZOZcZm7KzE0bNmyYTmXSEMY9tr6SkJdUnlFCPQEy87bMfBEwB+wAXjiBuoY1D9zFvbvyI7h39y41Wn/3XNU562uuXWWXLs2IUV41ovdOZr4BeAnwpkorGkFm3gFcApza99CpdGbBS62y0K3X/UEvktpplFDfDBzyma+Z+WHgx4D/VmVRI3o7cEZE/HpEHB8R7wQeBry7xpqkFVmsi17p+eqLfZ9dulS21cOumJn/vMTyrwBfqayiEWXmhyLiIcDrgYcClwOnZea366pJGsfqq3azjqOA+wOruPXhK+/a+3e9Sypb6y8+A5CZf56Zx2Tm/TLzxMz8TN01SVVb7rS2YdazS5fKV0SoSyVZ7Lz1cdilS7PDUJcaapwJcwevW3PPrndJs8NQlxqod1f5mmtXjfXhLp7GJs0OQ11qqCp2mXudd2m2GOpSQ23fe/ZYobyw690uXZodhrrUcCs5Lr5wNTonyEmzxVCXGmwhlIe9ZOwVe44c6/i7pHYz1KUG690Ff/C6NUOfqw6d4+nuepeaJyKeHBH/GBH7I+KWiLgoItZXMfbQV5ST1B6eyiY1U0T8GPBJ4I+B3wTuAH4IuLOK8Q11qeFWX7Wbtcc+klsfPvr3SWqcdwDvysw/7Fn2taoGd/e7VJiF4+/uepeaJSKOAE4Cro+If4mIvRHx2Yh4VlXPYahLDbdwXH2Uz1f3/HSpkR7R/fcNwF8AzwE+C3wyIp5QxRO4+10qyMHr1nBf3PUuLVh1x/BnjyxhfUTs7Lk/l5lzvStExFZgy4BxNtM5fg7wnsz8i+7Xl0bEKcDLgVeMUygY6lIrrL5qN5z86M7pahuXX9dJclKl5jNz04B1tgHnDlhnF7Bw+sp/9D12BXD06KXdm6EutcD2vWfzlNPfNvRkOY+nS9OTmfPA/KD1IuJbwHXAY/oeejTw5SpqMdSlQiycw+7xdKmZMjMj4o+BN0TEl4BLgRcCTwF+o4rncKKc1BILYb3cBWjGPHYoacIycxvwh8DbgMuA5wPPzczLqhjfTl1qkTXXruKOhy2/jpPkpGbLzLcAb5nE2L6tl1piubC+cP6x93zt8XRpdhnqUkts33v2wJntznyXZpuhLhXCT2eTZKhLLXPwujWH7G7v5cx3abYZ6lKL9If2aWsPvYaFk+Sk2WaoSy1iaEtajqEuFWLNtauc+S7NOENdapHte8/2AjOSluSrg1QIT2eTZKhLLbNYeC936VhJs8NQlwrh6WySDHWpZdZdfcDOXNKiDHWpEJ7uJslQl1pmqfD2dDZJhrrUMouFt9d9lwSGuiRJxTDUpRayM5e0GENdKoBXmZMEhrokScUw1KUW6u/MvUSsJDDUJUkqhqEutVB/Z+4lYiWBoS5JUjEMdamF+jtzLxErCQx1qfUunH+sl4iVBLQ81CNiR0Rk3+2DddclTZqduaTFtDrUu/4SeGjP7WX1liNNnp251D4RccwijejC7bereI7VVQxSs1szc0/dRUiSNMA1dJrPXj8LvAv4cBVPUEKn/uKImI+Ir0TEWyNiXd0FSZLULzPvysw9vTfg54BPZebVVTxH2zv19wPfBq4DHge8CXgCcGqdRUmSNEhEHAs8C3hhVWM2LtQjYiuwZcBqmzNzR2bO9Sz7ckR8E7g4Ip6Umf++yNhnAmcCHH300ZXVLNXhwvnHctra/6i7DKnR7nPn2JdRXh8RO3vuz/VlzzheCswDH6lovOaFOrANOHfAOruWWL4TuAt4FHCvUO/+R8wBbNq0KVdeotQcV+w5su4SpJLNZ+am5VYYpRnt+Z7VwBnAX2XmneMWuaBxoZ6Z83TeuazE44H7ANdXV5EkScvaxujN6E/TmTT3f6ospHGhPqyIOA44HTifzpuAE4C3AZcCn6uxNEnSDFlhM/pS4J8z82tV1tLaUAfuoDPB4NXAWjqnCnwceENm3lVnYZIkLSUijgaeDfxq1WO3NtQz8xrgGXXXIdXt4HVr6i5B0mj+O3Az8HdVD1zCeerSTHKCnNROmfkHmfngzLyt6rENdUmSCmGoSy235lr/jCV1+GogSVIhDHWppRYmyI15tSxJBTHUJUkqhKEutdy6qw/UXYKkhjDUpZZygpykfr4qSC12/v4TWH3V7rrLkNQQhrrUUgsT5LbvPbvmSiQ1haEuSVIhDHWppZwgJ6mfoS5JUiEMdamlnCAnqZ+hLrWUE+Qk9TPUJUkqhKEuSVIhDHVJkgphqEuSVAhDXZKkQhjqkiQVwlCXJKkQhrokSYUw1CVJKoShLklSIQx1SZIKYahLkjQlEbExIs6JiD0R8f2IuCwiTq9q/NVVDSRJkgb6G+DBwM8A+4CfBc6JiGsy8zPjDm6nLknS9DwVeFdmXpyZ38zMtwHXAE+uYnBDXZKk6fkX4IUR8ZCIWBURPwNsAD5VxeDufpckFWvV7Xez7uoD4wyxPiJ29tyfy8y5McZ7IfBBYB44CNwO/GJmfnGMMe9hqEuStLT5zNy03AoRsRXYMmCczZm5A9gKrAd+gk6wPx/4m4h4emZeNm6xhrokSePZBpw7YJ1dEXEc8CrgiT0BfllEPK27/NfHLcRQlyRpDJk5T6frXlZErOl+eVffQ3dR0Rw3J8pJkjQdVwLfAP48Ip4cEcdFxGuAU4F/qOIJDHVJkqYgM+8ETqNzfvp5wJeAXwVekpnnVfEc7n6XJGlKMvPrwAsmNb6dutRiF84/tu4SJDWIoS5JUiEMdUmSCmGoS5JUCENdkqRCGOqSJBXCUJckqRCNDfWIODMiPh0RN0VERsQxi6zzoIg4JyJu7t7OiYgHTr9aSZLq19hQB9YAFwBnLbPO+4EnAc8FntP9+pyJVyZJUgM19opymbkNICIW/ci7iDieTpCfnJkXdZe9DPhsRDwmM786rVolSWqCJnfqg5wE7Acu6ln2OeD7wFNrqUiSpBq1OdQ3AvsyMxcWdL++ofvYvXSP0++MiJ379u2bUpmSJE3HVEM9IrZ2J70tdztlhCFzkWWxxHIycy4zN2Xmpg0bNqzgJ5Ca5SMn/1ndJUhqkGkfU98GnDtgnV1DjrUHOCIiYqFbj4gANgB7V1yhJEktNdVQz8x5YL6i4T4PrKVzbH3huPpJwOEcepxdkqSZ0NjZ7xGxkc6x8Ud3F53QPQd9V2bemJlXRMQngPdExEvp7HZ/D/AxZ75LkmZRkyfKvRy4FHhf9/7Hu/ef17PO6cBldM5n/2T361+ZYo2SJDVGYzv1zDyL5S88Q2beCPzyNOqRJKnpmtypS5KkERjqkiQVwlCXJKkQhrokSYUw1CVJKoShLklSIQx1SZIKYahLkjQlEXFcRPxDROyLiO9FxP+NiCOrGt9QlyRpCiLicDpXQA3gWcCPA/cFzouISvK4sVeUkySpMD8OHAtsyszvAkTErwHfBZ4JfGrcJ7BTlyRpOu4HJHBbz7LbgLuBk6t4AkNdkqTp+AKwH/jjiDi8uzv+rcB9gIdW8QTufpckFStuv5PVV+0eZ4j1EbGz5/5cZs4d8hwRW4EtA8bZnJk7IuIXgLOBV9Lp0D8A/Dtw1zhFLjDUJUla2nxmbhqwzjbg3AHr7ALIzAuA4yJiPXAwM2+KiD3A1WNXiqEuSdJYMnMemF/B9xARzwSOAD5aRS2GuiRJUxIRLwGuBG4ATgLeCbwjM79axfiGuiRJ0/MY4E3Ag4FvAX8IvKOqwQ11SZKmJDN/F/jdSY3vKW2SJBXCUJckqRCGuiRJhTDUJUkqhKEuSVIhDHVJkgphqEuSVAhDXZKkQhjqkiQVwlCXJKkQhrokSYUw1CVJKoShLklSIQx1SZIKYahLklQIQ12SpEIY6pIkFcJQlySpEIa6JEmFMNQlSSqEoS5JUiEMdUmSCmGoS5JUCENdkqRCGOqSJBWisaEeEWdGxKcj4qaIyIg4ZpF1vtV9rPf25hrKlSRpoCGz7UERcU5E3Ny9nRMRDxxm/MaGOrAGuAA4a8B6/xt4aM9t62TLkiRpxYbJtvcDTwKeCzyn+/U5wwy+esziJiYztwFExKYBq96SmXsmX5EkSeMZlG0RcTydID85My/qLnsZ8NmIeExmfnW58ZvcqQ/rtyLiOxHxxYjYEhH3rbsgSZJW6CRgP3BRz7LPAd8HnjromxvbqQ/pT4BLge8ATwbeDBwL/HqdRUmStEIbgX2ZmQsLMjMj4obuY8uaaqhHxFZgy4DVNmfmjmHGy8y399z9UkR8D/hQRPxOZn5nkec/Ezize3d/RCy7G2OK1gPzdRfRYG6fpbltluf2WVrTts1/ncSg3zu475OfuOHd68cY4rCI2Nlzfy4z53pXqDrbgFxkWSyx/BDT7tS3AecOWGfXGONf3P33kXS690N0/yPm+pfXLSJ2ZuaguQMzy+2zNLfN8tw+S5uVbZOZz5nC02yjumzbAxwREbHQrUdEABuAvYO+eaqhnpnzTPad4RO7/14/weeQJOkeFWfb54G1dI6tLxxXPwk4nEOPsy+qscfUI2IjneMHj+4uOqF7nt6uzLwxIk4CngJ8GrgZ+FHgHcBHM3Ocbl+SpIkYlG2ZeUVEfAJ4T0S8lM5u9/cAHxs08x2aPfv95XQmwb2ve//j3fvP696/HXgRsAP4Dzrnq78X+MWpVlmNxh0SaBi3z9LcNstz+yzNbVOPQdkGcDpwGZ3z2T/Z/fpXhhk8eibYSZKkFmtypy5JkkZgqEuSVAhDvQGi4xPdi/v/fN9jK76wf5tFxIMj4k8j4sqIOBAR10TE2RHxkL71ZnL7AETEKyPi6oi4LSIuiYin1V3TtEXE/4qIf4uI70XEvog4LyJ+qG+diIizIuK67u/Sjoh4XF011yUiXtd9jfmznmVum8IY6s3wGuCuJR5b8YX9W+5hwFHAa4HHA78MPB34QN96M7l9IuJFwDuBPwJ+hM6pLtsj4uhaC5u+U4A/p3P5zGcCB4FPRcSDe9Z5LZ2/sVfROUvmBuAfI2LddEutT0Q8BXgp8KW+h2Z+2xQnM73VeAM2AdcAR9C5WtDP9zx2fHfZj/csO7m77DF1117DtjoNuBt4wKxvHzoXWnpv37KvA2+qu7aat8taOm+Qf7p7P+hct2JLzzr3B24BXlZ3vVPaJv8FuIrOm54dwJ+5bcq92anXqPtu+AN0/oBuWGSVsS7sX6AH0DmV8dbu/ZncPt0PLTqRzukuvS6g4J97SOvo7IH8bvf+sXTOCb5nW2XmAeAzzM62mgM+nJkX9i132xTIUK/Xu4FPZOb5Szy+6IX96ewiG3hh/5J0j5O/kU53erC7eFa3z3rgPtz7kpF7KfvnHsY7gS/SuSoX/Of2mMlt1b14ySOB31vk4ZneNqUy1CsWEVu7k1GWu50SEb8CPAH47QFDrvjC/k007Pbp+57DgfOA3XSOAfYqavuMqP9nnJWfe1ER8XY6h19ekJn9c1RmbltFxGPozLk4PTPvWGbVmds2JWvsZWJbbBvDXdj/DOAEOp8W1/vYhyLi85l5MmNe2L+htjHCBx9ExFpgYU/GT2XmbT3rlbh9hjFP57hxfzd1BGX/3EuKiHcAL6bzSVjf7HloT/ffjXTmriyYhW11Ep29Opf3vMbcB3h6RLwcWJjlPovbpliGesVyyAv7R8QW4K19i78M/Bbwke79sS7s30TDbh+4Z87Bdjqdw3Myc3/fKsVtn2Fk5h0RcQlwKvC3PQ+dCvxdPVXVJyLeSSfQT8nMK/sevppOsJ8K/Ft3/cOApzF4L1nb/T9gZ9+yv6QzofKPgK8xu9umWIZ6TTJzN53dyffovpu+ZqHTyDEv7N9m3UC/gM7kuOcDh3d3wwPcmJl3zPL2Ad4OnBMR/0pncuDL6ZwG+O5aq5qyiHgXnWtiPx/4bnQ+LANgf2buz8yMiG3Aloi4kk6QvZ7OBMv311Dy1GTmTcBNvcsi4vt0/n4u797fxgxum5IZ6s13OvAn/OcM1Y8Cv1FfOVNzIp1P4YPOi02vzXROzYEZ3T6Z+aHuhXheDzwUuBw4LTO/XW9lU/fK7r//1Lf8DcBZ3a/fQudUrXcBD6JzOuBPZuYt0yiw4dw2hfEDXSRJKoSz3yVJKoShLklSIQx1SZIKYahLklQIQ12SpEIY6pIkFcJQlySpEIa6JEmFMNQlSSqEoS61TERsiIjrI+L3e5b9cETcFhE/X2dtkurlZWKlFoqIZ9P5jPlnAF+k82lc/5qZL6mzLkn1MtSllup+wtbzgH+m83GZT1zk42klzRBDXWqpiLgfcBnwKOCpmXlxzSVJqpnH1KX2Ogb4QSCBR9RbiqQmsFOXWigifgD4PPB1Op+BfRbww5m5q866JNXLUJdaKCLeDPwS8MPAzcB24P7A5sy8u87aJNXH3e9Sy0TEM4DXAL+amTdl5535GcDxwO/UWZuketmpS5JUCDt1SZIKYahLklQIQ12SpEIY6pIkFcJQlySpEIa6JEmFMNQlSSqEoS5JUiEMdUmSCvH/AQI/pjfJX25XAAAAAElFTkSuQmCC",alt:null})),(0,m.mdx)("p",null,"As we can see, the funnel\u2019s neck is particularly sharp because of the exponential\nfunction applied to ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"))))),". The density decays exponentially the farther that ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," deviates\nfrom ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mn",{parentName:"mrow"},"0")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"0")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"))))),". This makes it challenging to learn a good scale for proposal updates. Let's go\nabout modeling this in Bean Machine!"),(0,m.mdx)("p",null,"Compared to many of the other tutorials, this one is more of a contrived model. In the\ntypical problem setup found in other tutorials, there are ground-truth values that we're\ntrying to infer distributions about based on observed data. In this case, however, we're\ntrying to exactly replicate a ground-truth ",(0,m.mdx)("em",{parentName:"p"},"distribution"),", by using the mechanics of the\nBean Machine inference engine to guide the sampling process."),(0,m.mdx)("p",null,"Since Neal's funnel describes a mathematical relationship instead of a generative\nprocess, we'll have to reframe it into a generative process in order to run inference on\nit. We'll do this as follows:"),(0,m.mdx)("ol",null,(0,m.mdx)("li",{parentName:"ol"},"Sample priors for ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),"."),(0,m.mdx)("li",{parentName:"ol"},"Imagine weighting the probabilities of ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," according to how likely they are\nunder the true Neal's funnel model. We can do this by imagining we're flipping a\ncoin, where the probability of it landing heads is the probability of drawing that\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," from the Neal's funnel model, but where we've actually ",(0,m.mdx)("em",{parentName:"li"},"observed")," it to\nbe heads."),(0,m.mdx)("li",{parentName:"ol"},"Later, we will inform the inference engine that we observed heads. This will cause\nthe engine to find values for ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),' that are consistent with samples from the\ntrue Neal\'s funnel posterior \u2014 since those are the samples that would have resulted\nin the observed "heads" from our coin flip!')),(0,m.mdx)("p",null,"A few notes for advanced readers (feel free to skip over these):"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},"In the above statistical model, we already ",(0,m.mdx)("em",{parentName:"li"},"had")," definitions for\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z\\sim\\mathcal{N}(0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x\\sim\\mathcal{N}(0,e^{z/2})")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))),". We are free to reuse these\ndefinitions as priors. However, that's giving inference an unfair advantage, since our\npriors exactly match our posterior. Instead, in this tutorial we will choose\nnon-informative priors."),(0,m.mdx)("li",{parentName:"ul"},'It is common to refer to this coin-flipping approach as a "factor". Traditionally,\nPPLs have been implemented by weighting a particular run of inference according to the\nlog probability of that run of inference. We\'re exactly doing that in this model \u2014\nbased on a particular draw of ',(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),", we're weighting that overall run by the\nprobability that those values would have been sampled from the true Neal's funnel\nposterior.")),(0,m.mdx)("p",null,"We can implement this model in Bean Machine by defining random variable objects with the\n",(0,m.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," decorator. These functions behave differently than ordinary Python\nfunctions."),(0,m.mdx)("div",{style:{background:"#daeaf3",border_left:"3px solid #2980b9",display:"block",margin:"16px 0",padding:"12px"}},"Semantics for ",(0,m.mdx)("code",null,"@bm.random_variable")," functions:",(0,m.mdx)("ul",null,(0,m.mdx)("li",null,"They must return PyTorch ",(0,m.mdx)("code",null,"Distribution")," objects."),(0,m.mdx)("li",null,"Though they return distributions, callees actually receive ",(0,m.mdx)("i",null,"samples")," from the distribution. The machinery for obtaining samples from distributions is handled internally by Bean Machine."),(0,m.mdx)("li",null,"Inference runs the model through many iterations. During a particular inference iteration, a distinct random variable will correspond to exactly one sampled value: ",(0,m.mdx)("b",null,"calls to the same random variable function with the same arguments will receive the same sampled value within one inference iteration"),". This makes it easy for multiple components of your model to refer to the same logical random variable."),(0,m.mdx)("li",null,'Consequently, to define distinct random variables that correspond to different sampled values during a particular inference iteration, an effective practice is to add a dummy "indexing" parameter to the function. Distinct random variables can be referred to with different values for this index.'),(0,m.mdx)("li",null,"Please see the documentation for more information about this decorator."))),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'@bm.random_variable\ndef z():\n """\n An uninformative (flat) prior for z.\n """\n # TODO(tingley): Replace with Flat once it\'s part of the framework.\n return dist.Normal(0, 10000)\n\n\n@bm.random_variable\ndef x():\n """\n An uninformative (flat) prior for x.\n """\n # TODO(tingley): Replace with Flat once it\'s part of the framework.\n return dist.Normal(0, 10000)\n\n\n@bm.random_variable\ndef neals_funnel_coin_flip():\n """\n Flip a "coin", which is heads with probability equal to the probability\n of drawing z and x from the true Neal\'s funnel posterior.\n """\n return dist.Bernoulli(\n (\n dist.Normal(0.0, (z() / 2.0).exp()).log_prob(x())\n + dist.Normal(0.0, 3.0).log_prob(z())\n ).exp()\n )\n')),(0,m.mdx)("h2",{id:"inference"},"Inference"),(0,m.mdx)("p",null,"Inference is the process of combining ",(0,m.mdx)("em",{parentName:"p"},"model")," with ",(0,m.mdx)("em",{parentName:"p"},"data")," to obtain ",(0,m.mdx)("em",{parentName:"p"},"insights"),", in the\nform of probability distributions over values of interest. Bean Machine offers a\npowerful and general inference framework to enable fitting arbitrary models to data."),(0,m.mdx)("p",null,"As discussed in the previous section, we'll pretend that we've observed heads when\nflipping a coin whose heads rate is weighted according to how likely the z and x values\nwere to be drawn from the true Neal's funnel posterior. Let's set that up right now."),(0,m.mdx)("p",null,"Our inference algorithms expect observations in the form of a dictionary. This\ndictionary should consist of ",(0,m.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," invocations as keys, and tensor data\nas values."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"observations = {neals_funnel_coin_flip(): torch.tensor(1.0)}\n")),(0,m.mdx)("p",null,"Next, we'll run inference on the model and observations."),(0,m.mdx)("p",null,"Since this model is comprised entirely of differentiable random variables, we'll make\nuse of the Newtonian Monte Carlo (NMC) inference method. NMC is a second-order method,\nwhich uses the Hessian to automatically scale the step size in each dimension. The hope\nis that this inference method will take the exponential growth rate of Neal's funnel\ninto account, and explore the entire posterior surface, including the neck of the\nfunnel. Check out the documentation for more information on NMC."),(0,m.mdx)("p",null,"Running inference consists of a few arguments:"),(0,m.mdx)("table",null,(0,m.mdx)("thead",{parentName:"table"},(0,m.mdx)("tr",{parentName:"thead"},(0,m.mdx)("th",{parentName:"tr",align:null},"Name"),(0,m.mdx)("th",{parentName:"tr",align:null},"Usage"))),(0,m.mdx)("tbody",{parentName:"table"},(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"queries")),(0,m.mdx)("td",{parentName:"tr",align:null},"A list of @bm.random_variable targets to fit posterior distributions for.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"observations")),(0,m.mdx)("td",{parentName:"tr",align:null},"The Dict of observations we built up, above.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"num_samples")),(0,m.mdx)("td",{parentName:"tr",align:null},"Number of samples to build up distributions for the values listed in queries.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"num_chains")),(0,m.mdx)("td",{parentName:"tr",align:null},"Number of separate inference runs to use. Multiple chains can verify inference ran correctly.")))),(0,m.mdx)("p",null,"Let's run inference:"),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"num_samples = 2 if smoke_test else 1000\nnum_chains = 1 if smoke_test else 4\n\nsingle_site_nmc_samples = bm.SingleSiteNewtonianMonteCarlo().infer(\n queries=[z(), x()],\n observations=observations,\n num_samples=num_samples,\n num_chains=num_chains,\n)\n")),(0,m.mdx)(i.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/1000 [00:00"),(0,m.mdx)("mn",{parentName:"mrow"},"1.1")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\hat{R}>1.1")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.9858699999999999em",verticalAlign:"-0.0391em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord accent"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.9467699999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"))),(0,m.mdx)("span",{parentName:"span",style:{top:"-3.25233em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"accent-body",style:{left:"-0.16666em"}},(0,m.mdx)("span",{parentName:"span",className:"mord"},"^"))))))),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},">"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,m.mdx)("span",{parentName:"span",className:"mord"},"."),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"))))),", as inference may not have converged. In that\ncase, you may want to run inference for more samples."),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff")),(0,m.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,m.mdx)("mn",{parentName:"mrow"},"1"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mtext",{parentName:"mrow",mathvariant:"monospace"},"num"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.mdx)("mtext",{parentName:"mrow",mathvariant:"monospace"},"samples"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}\\in[1,\\texttt{num}\\_\\texttt{samples}]")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"})))))),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.06em",verticalAlign:"-0.31em"}}),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord text"},(0,m.mdx)("span",{parentName:"span",className:"mord texttt"},"num")),(0,m.mdx)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.mdx)("span",{parentName:"span",className:"mord text"},(0,m.mdx)("span",{parentName:"span",className:"mord texttt"},"samples")),(0,m.mdx)("span",{parentName:"span",className:"mclose"},"]")))))," summarizes how independent\nposterior samples are from one another. Although inference was run for ",(0,m.mdx)("inlineCode",{parentName:"li"},"num_samples"),"\niterations, it's possible that those samples were very similar to each other (due to\nthe way inference is implemented), and may not each be representative of the full\nposterior space. Larger numbers are better here, and if your particular use case calls\nfor a certain number of samples to be considered, you should ensure that\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"}))))))))))," is at least that large.")),(0,m.mdx)("p",null,"In this case, ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mover",{parentName:"mrow",accent:"true"},(0,m.mdx)("mi",{parentName:"mover"},"R"),(0,m.mdx)("mo",{parentName:"mover"},"^"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\hat{R}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.9467699999999999em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord accent"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.9467699999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"))),(0,m.mdx)("span",{parentName:"span",style:{top:"-3.25233em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"accent-body",style:{left:"-0.16666em"}},(0,m.mdx)("span",{parentName:"span",className:"mord"},"^")))))))))))," and ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"}))))))))))," seem to have acceptable values."),(0,m.mdx)("p",null,"Bean Machine can also plot diagnostical information to assess model fit. Let's take a\nlook:"),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"bm.Diagnostics(single_site_nmc_samples).plot(display=True);\n")),(0,m.mdx)(l.g,{data:t(21555),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(81763),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(41179),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(10776),mdxType:"PlotlyFigure"}),(0,m.mdx)("p",null,"The diagnostics output shows two diagnostic plots for individual random variables: trace\nplots and autocorrelation plots."),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("p",{parentName:"li"},"Trace plots are simply a time series of values assigned to random variables over each\niteration of inference. The concrete values assigned are usually problem-specific.\nHowever, it's important that these values are \"mixing\" well over time. This means that\nthey don't tend to get stuck in one region for large periods of time, and that each of\nthe chains ends up exploring the same space as the other chains throughout the course\nof inference.")),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("p",{parentName:"li"},"Autocorrelation plots measure how predictive the last several samples are of the\ncurrent sample. Autocorrelation may vary between -1.0 (deterministically\nanticorrelated) and 1.0 (deterministically correlated). (We compute autocorrelation\napproximately, so it may sometimes exceed these bounds.) In an ideal world, the\ncurrent sample is chosen independently of the previous samples: an autocorrelation of\nzero. This is not possible in practice, due to stochastic noise and the mechanics of\nhow inference works."))),(0,m.mdx)("p",null,"From the autocorrelation plots, we see the absolute magnitude of autocorrelation tends\nto be quite small. The trace plots are a little more suspicious, especially for ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),".\nLet's take a deeper look at the spike in chain 3. Here, if we look at the corresponding\ntrace plot for ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," at this time, we see that it is exploring large outlier values for\n",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"))))),", around 6 or greater. We expect ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," to have high variance when ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," is large, so this\nis as expected."),(0,m.mdx)("p",null,"This concludes the main Neal's funnel tutorial! However, we'll also walk through the\nsame model using Hamiltonian Monte Carlo inference to compare relative performance."),(0,m.mdx)("h2",{id:"appendix-adaptive-hamiltonian-monte-carlo"},"Appendix: Adaptive Hamiltonian Monte Carlo"),(0,m.mdx)("p",null,"Hamiltonian Monte Carlo is a classic gradient-based inference method. HMC proceeds by\ntaking a sequence of steps towards the gradient, but with some injected noise, before\nproposing a candidate sample. Bean Machine provides an implementation of HMC that we can\nuse to fit Neal's funnel. Bean Machine uses an adaptive version of HMC by default to\nselect some parameter values. For an in-depth discussion of this inference method, check\nout our ",(0,m.mdx)("a",{parentName:"p",href:"https://beanmachine.org/docs/hamiltonian_monte_carlo/"},"documentation on HMC"),"."),(0,m.mdx)("p",null,"Compared to single-site inference methods, this version of HMC is a global infernece\nmethod. That means that it proposes new values for all random variables in the model at\nonce, and accepts or rejects them jointly. Bean Machine does also provide a single-site\nvariant of this method called ",(0,m.mdx)("inlineCode",{parentName:"p"},"SingleSiteHamiltonianMonteCarlo"),". Although we will not\ncover that method in this tutorial, it is a useful component for use within\n",(0,m.mdx)("inlineCode",{parentName:"p"},"CompositionalInference"),"."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"hmc_samples = bm.GlobalHamiltonianMonteCarlo(trajectory_length=0.1).infer(\n queries=[z(), x()],\n observations=observations,\n num_samples=num_samples,\n num_chains=num_chains,\n)\n")),(0,m.mdx)(i.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/1500 [00:00=0||(r[t]=a[t]);return r}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(r[t]=a[t])}return r}var o=n.createContext({}),p=function(a){return function(e){var t=c(e.components);return n.createElement(a,m({},e,{components:t}))}},c=function(a){var e=n.useContext(o),t=e;return a&&(t="function"==typeof a?a(e):i(i({},e),a)),t},d=function(a){var e=c(a.components);return n.createElement(o.Provider,{value:e},a.children)},h={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},x=n.forwardRef((function(a,e){var t=a.components,r=a.mdxType,m=a.originalType,s=a.parentName,o=l(a,["components","mdxType","originalType","parentName"]),p=c(t),d=r,x=p["".concat(s,".").concat(d)]||p[d]||h[d]||m;return t?n.createElement(x,i(i({ref:e},o),{},{components:t})):n.createElement(x,i({ref:e},o))}));function g(a,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof a||r){var m=t.length,s=new Array(m);s[0]=x;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=a,i.mdxType="string"==typeof a?a:r,s[1]=i;for(var o=2;o1&&void 0!==arguments[1]?arguments[1]:0,t=(o[a[e+0]]+o[a[e+1]]+o[a[e+2]]+o[a[e+3]]+"-"+o[a[e+4]]+o[a[e+5]]+"-"+o[a[e+6]]+o[a[e+7]]+"-"+o[a[e+8]]+o[a[e+9]]+"-"+o[a[e+10]]+o[a[e+11]]+o[a[e+12]]+o[a[e+13]]+o[a[e+14]]+o[a[e+15]]).toLowerCase();if(!l(t))throw TypeError("Stringified UUID is invalid");return t};var d=function(a,e,t){var n=(a=a||{}).random||(a.rng||s)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){t=t||0;for(var r=0;r<16;++r)e[t+r]=n[r];return e}return c(n)},h=function(a){return r.createElement("div",{style:{backgroundColor:"lightgray",marginBottom:"var(--ifm-leading)",borderRadius:"var(--ifm-global-radius)",boxShadow:"var(--ifm-global-shadow-lw)",overflow:"hidden",padding:"10px",font:"var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"}},r.createElement("span",{style:{color:"red"}},"Out: "),r.createElement("pre",{style:{margin:"0px",backgroundColor:"inherit"}},a.children.split("\n").map((function(a){return r.createElement("p",{key:d(),style:{marginBottom:"0px"}},a)}))))}},38196:function(a,e,t){var n=t(67294),r=t(39960);e.Z=function(a){var e=a.githubUrl,t=a.colabUrl;return n.createElement("div",{className:"link-buttons"},n.createElement(r.default,{to:e},"Open in GitHub"),n.createElement("div",null),n.createElement(r.default,{to:t},"Run in Google Colab"))}},83948:function(a,e,t){t.d(e,{i:function(){return l},g:function(){return p}});var n=t(67294),r=t(38726),m=t.n(r),s=t(72389);function i(a){var e=a.children,t=a.fallback;return(0,s.default)()?n.createElement(n.Fragment,null,null==e?void 0:e()):null!=t?t:null}var l=n.memo((function(a){var e=a.data,t=e.target_id;return n.createElement("div",{className:"bk-root thin-scrollbar",id:t,style:{overflow:"auto",width:"100%"}},n.createElement(i,{fallback:n.createElement("div",null,"loading...")},(function(){window.Bokeh.embed.embed_item(e,t)})))})),o=m()({loader:function(){return t.e(8660).then(t.bind(t,58660))},loading:function(a){return a.timedOut?n.createElement("blockquote",null,"Error: Loading Plotly timed out."):n.createElement("div",null,"loading...")},timeout:1e4}),p=n.memo((function(a){var e=a.data;return n.createElement("div",{className:"plotly-figure"},n.createElement(o,{data:e.data,layout:e.layout}))}))},89951:function(a,e,t){t.r(e),t.d(e,{assets:function(){return h},contentTitle:function(){return c},default:function(){return N},frontMatter:function(){return p},metadata:function(){return d},toc:function(){return x}});var n=t(83117),r=t(80102),m=(t(67294),t(3905)),s=t(38196),i=t(96435),l=t(83948),o=["components"],p={title:"Neal's funnel",sidebar_label:"Neal's funnel",path:"overview/tutorials/Neals_funnel/NealsFunnel",nb_path:"tutorials/Neals_funnel.ipynb",github:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",colab:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb"},c=void 0,d={unversionedId:"overview/tutorials/Neals_funnel/NealsFunnel",id:"overview/tutorials/Neals_funnel/NealsFunnel",title:"Neal's funnel",description:"Neal's funnel",id:"tutorial-neals-funnel",level:2},{value:"Problem",id:"problem",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Model",id:"model",level:2},{value:"Inference",id:"inference",level:2},{value:"Analysis",id:"analysis",level:2},{value:"Appendix: Adaptive Hamiltonian Monte Carlo",id:"appendix-adaptive-hamiltonian-monte-carlo",level:2},{value:"Appendix: Metropolis-Adjusted Langevin Algorithm",id:"appendix-metropolis-adjusted-langevin-algorithm",level:2},{value:"BMGInference",id:"bmginference",level:2}],g={toc:x};function N(a){var e=a.components,p=(0,r.Z)(a,o);return(0,m.mdx)("wrapper",(0,n.Z)({},g,p,{components:e,mdxType:"MDXLayout"}),(0,m.mdx)(s.Z,{githubUrl:"https://github.com/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",colabUrl:"https://colab.research.google.com/github/facebookresearch/beanmachine/blob/v0.2.0/tutorials/Neals_funnel.ipynb",mdxType:"LinkButtons"}),(0,m.mdx)("h2",{id:"tutorial-neals-funnel"},"Tutorial: ",(0,m.mdx)("strong",{parentName:"h2"},"Neal's funnel")),(0,m.mdx)("p",null,"This tutorial demonstrates modeling and running inference on the so-called Neal's funnel\nmodel in Bean Machine."),(0,m.mdx)("p",null,"Neal's funnel has proven difficult-to-handle for classical inference methods. This\ntutorial demonstrates how to overcome this by using second-order gradient methods in\nBean Machine. It also demonstrates how to implement models with factors in Bean Machine\nthrough custom distributions."),(0,m.mdx)("h2",{id:"problem"},"Problem"),(0,m.mdx)("p",null,'Neal\'s funnel is a synthetic model that is fairly simple, but has proven challenging for\nautomatic inference engines to handle due to its unusual geometry. This model has an\nunfavorable, exponential geometry in one direction, and a narrow "funnel" bending into\nthat direction.'),(0,m.mdx)("h2",{id:"prerequisites"},"Prerequisites"),(0,m.mdx)("p",null,"Let's model this in Bean Machine! Import the Bean Machine library and some fundamental\nPyTorch classes."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'# Install Bean Machine in Colab if using Colab.\nimport sys\n\n\nif "google.colab" in sys.modules and "beanmachine" not in sys.modules:\n !pip install beanmachine\n')),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"import math\nimport os\nimport warnings\n\nimport arviz as az\nimport beanmachine.ppl as bm\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport torch\nimport torch.distributions as dist\nfrom beanmachine.ppl.inference.bmg_inference import BMGInference\nfrom IPython.display import Markdown\n")),(0,m.mdx)("p",null,"The next cell includes convenient configuration settings to improve the notebook\npresentation as well as setting a manual seed for reproducibility."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'# Eliminate excess UserWarnings from Python.\nwarnings.filterwarnings("ignore")\n\n# Plotting settings\nplt.rc("figure", figsize=[8, 6])\nplt.rc("font", size=14)\nplt.rc("lines", linewidth=2.5)\n\n# Manual seed\ntorch.manual_seed(12)\n\n# Other settings for the notebook.\nsmoke_test = "SANDCASTLE_NEXUS" in os.environ or "CI" in os.environ\n')),(0,m.mdx)("h2",{id:"model"},"Model"),(0,m.mdx)("p",null,(0,m.mdx)("a",{parentName:"p",href:"https://projecteuclid.org/euclid.aos/1056562461"},"Neal's funnel")," is defined\nmathematically as follows:"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z\\sim\\mathcal{N}(0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x\\sim\\mathcal{N}(0,e^{z/2})")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.mdx)("p",null,"Let's visualize the model's density. To do this, we recognize that the joint density is\nfactored as follows:"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"P"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.mdx)("mo",{parentName:"mrow"},"="),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},";"),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.mdx)("mo",{parentName:"mrow"},"\u22c5"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},";"),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P(z,x)=\\mathcal{N}(x;0,e^{z/2})\\cdot\\mathcal{N}(z;0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"="),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},";"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}}),(0,m.mdx)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222222222222222em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},";"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"xs, zs = torch.meshgrid(\n torch.arange(-50, 50, 0.1),\n torch.arange(-15.0, 15.0, 0.1),\n)\ndensity = (\n dist.Normal(0.0, (zs / 2.0).exp()).log_prob(xs).exp()\n * dist.Normal(0.0, 3.0).log_prob(zs).exp()\n)\n")),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'plt.contourf(xs, zs, density, levels=[0.0001] + torch.linspace(0.001, 0.1, 10).tolist())\nplt.xlabel("x")\nplt.ylabel("z")\nplt.colorbar();\n')),(0,m.mdx)("p",null,(0,m.mdx)("img",{parentName:"p",src:"data:image/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAggAAAGBCAYAAAADq0nuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnS0lEQVR4nO3df5wldX3n+9cbRiQIZNWBHYgho0YJoAnImAgrvxIna8jdPBLNDSYkK9mHEmQXNUQTFWIgixJ3I4FEWRzzuDteEswkunuvJhAgRtAIwcxs3AAB9CKgMAwwgAQUhBk+9486PRxOndO/TnefPqdfz8fjPLqr6nuqPl0z3fU+3/pWVaoKSZKkbruNugBJkrT8GBAkSVKLAUGSJLUYECRJUosBQZIktRgQJElSiwFBkiS1GBAkSRpSktOT3JHkiSRbkhwzTds9k2xM8k9JnkpyzYB2x3XW9USSryc5rU+bNyb55yTf7Xz9uWFq62ZAkCRpCElOAi4CPggcAVwHXJHkoAFv2R14AvgI8FcD1vli4PLOuo4Azgf+KMkbu9ocBWwC/hQ4vPP1L5L82BC1PVODd1KUJGn+ktwA/FNVvbVr3teAT1XVe2d470eAV1TV8T3zPwS8oape1jXvj4HDquqozvQm4AVVtb6rzd8AD1TVLw5bmz0IkiTNU5I9gCOBq3oWXQUcPcSqj+qzziuBdUmeM0OboxeiNgOCJEnzt5rmlMF9PfPvA9YMsd41A9a5qrPN6dpMbXeo2lbNodiJsnr16lq7du2oy5AkAVu2bNleVfst9HqPPX7Pevihp+f9/ptufOpmmvECUzZU1YY+TXvP16fPvLnqt87e+bPZ7rxqW7EBYe3atWzevHnUZUiSgCR3LcZ6H37oaf7H5atnbjjAy7//3ieqat00TbYDO2l/It+f9if3udg2YJ07gAdnaDO13aFq8xSDJEnzVFVPAluA9T2L1tNcMTBf1wOv67POzVX1VFebgdsdtrYV24MgSdICuQC4NMmXgS8BpwEHApcAJDkf+NGq+ompNyQ5FNiDZpzA3kkOB6iqr3SaXAL8pyQXAh8D/g1wCvCLXdu9CPhCkvcC/xP4OeAE4LWzrW06BgRJkoZQVZuSvBA4GzgAuAk4saqmTpscALy0522XAz/QNf2Pna/prPOOJCcCfwC8DdgKvL2qPt213euSvAk4DzgXuB04qapumENtAxkQJEkaUlVdDFw8YNkpfeatncU6rwVeNUObTwGfmm9t03EMgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkllWjLkCSpMXyyNN7cvljhw6xhnsXrJZxYw+CJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqMSBIkqQWA4IkSWoxIEiSpJZlHRCSHJvkM0nuSVJJTulZniTnJNma5PEk1yQ5bETlSpI0MZZ1QAD2Bm4C3gE83mf5bwK/AZwBvBq4H7g6yT5LVqEkSRNoWQeEqrq8qt5XVZ8Cnu5eliTAO4Hfq6pPV9VNwJuBfYBfWvJiJUmaIMs6IMzgxcAa4KqpGVX1OPAF4OhRFSVJ0iQY54CwpvP1vp7593Ute5YkpybZnGTzAw88sKjFSZI0zsY5IEypnun0mdc0rNpQVeuqat1+++23+JVJkjSmxjkgbOt87e0t2J92r4IkSZqDcQ4Id9CEhPVTM5LsCRwDXDeqoiRJmgSrRl3AdJLsDfxgZ3I34KAkhwMPVdU3klwInJXkVuCrwNnAY8BlIyhXkqSJsawDArAO+HzX9Lmd1yeAU4D/AnwP8FHg+cANwE9W1aNLW6YkSZNlWQeEqrqGZtDhoOUFnNN5SZKkBTLOYxAkSVoWkpye5I4kTyTZkuSYGdq/Msm1nccE3JPk/Z0bAE4t39h5xEDv69s963lHkls767k7yUc7p+fnXdsUA4IkSUNIchJwEfBB4AiagfJXJDloQPt9gatprrh7NfB24N3AmV3N3gEc0PP6OvDnXev5JZpT7R8ADgH+PXBip5Z51dbNgCBJ0nDOBDZW1cer6paqOgO4F3jbgPYnA3sBb66qm6rq08CHgDOnehGq6pGq2jb1Al4KvAT4eNd6jgb+vqourao7q+pvgf8b+LEhatvFgCBJ0jwl2QM4kq7b/ndcxeDb/h8FfLHzeIApVwIHAmsHvOetwM1V1X0Z/98Bhyd5TaeWg4CfAS4forZdDAiSJM3famB35nDb/878fu2nlj1Lku8F/k+e3XtAVf0Z8D7gC0meAu4CbgR+a4jadlnWVzFIkjSMR3fsyTUPHjzEGj63OsnmrhkbqmpDn4azvu3/NO37zQf4ZZoD/aXPekNyHPDbwOk0l/n/IM14g3OB9w9RG2BAkCRpOturat10y4GdzO22/9sGtGfAe94KfLqqHuqZfx7wyar64870jUmeB/xxkt+dZ227eIpBkqR5qqongS103fa/Yz2Db/t/PXBM5/EA3e23And2N0zyo8CP0HN6oWMvmgDQbSed3oh51raLAUGSpOFcAJyS5C1JDklyEc2Aw0sAkpyf5HNd7S8DvgNsTPKKJG8A3gNc0LkBYLdTga8B1/bZ7meBU5O8KcmLk6wH/jPwl1W1Yza1TcdTDJIkDaGqNiV5Ic3zgA4AbgJOrKq7Ok0OoLlMcar9I52D+UeBzcDDwIdpDua7JNkHeBPwu32CAzSnGIomFLyI5pTCZ4Gz5lDbQAYESZKGVFUXAxcPWHZKn3k3AsfOsM5Hgb2nWb6DZ55RNK/apuMpBkmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLT7uWepYv/tJoy5hxbh656ZRlyBpBgYEjQ0P4JNjsf8tDSDS8AwIWlIe5LUUhvl/ZriQGgYELQgP/JoUs/2/bJDQpDMgaNYMAdIzpvt9MDxoEhgQ1JdhQJq/fr8/hgaNGwOCAAOBtNh6f8cMDFruDAgrnMFAGo2p3z2DgpYrA8IKZTCQlgeDgpYr76S4AhkOJEkzMSBI0jJgcNdyY0CQJEktjkFYga7euclPK9Iy4xiExfH4U8/h5m1rRl3GWLIHQZIktRgQVig/rUjLh7+PWo48xbCCTf1R8nSDNBoGAy1n9iDIP1LSErt65yZ/77TsGRAE+AdLWir+nmlcjPUphiTnAL/TM/u+qnLI6jx52kFaHAYDjZuxDggdtwHHd03vHFEdE8WgIA3PUKBxNgkBYUdVbRt1EZOq+w+cYUGaHYOBJsEkBISXJLkHeBK4AXhfVX19xDVNJHsVltaq/Vcv2Lp23L99wdalwQwGmiTjHhBuAE4BbgX2B84GrktyWFU9OMrCJplBYX4W8oC/2Ns2UMyNwUCTaKwDQlVd0T2d5O+BrwNvBi7obZ/kVOBUgIMOOmgpSpxonn7ob5RBYKEM+hkMDs8wFGjSjXVA6FVVjyW5GXjZgOUbgA0A69atq6WsbdKt5F6FSQgEs9X7s67EwGAw0EoxUQEhyZ7ADwGfH3UtK9VK6VVYSaFgOlP7YdKDgqFAK9FYB4Qkvw98FvgGzRiE3waeB3xilHWpMYm9CgaD/iY1KBgMtJKNdUAAXgR8ElgNPAD8PfCaqrprpFXpWSalV8FwMLNJCAqGAqkx1gGhqt406ho0N+Paq2A4mJtV+68eu5BgMJCebawDgsbXOPUqGA4ml6FAGsyAoJEb114FTW859yIYDKSZGRC0bBgUtNgMBtLsGRC07IzT6Qctf4YCaX4MCFrW7FXQfBkMpOEYEDQWDAqaLYOBtDAMCBorowgKO+7f7pUM87CUAxQNBdLCMyBoLDlOQWAwkBaTAUFjbyl6FexFmJvF7j0wGEiLz4CgieE4hclnMJCWjgFBE2exgoK9CLOzGL0HBgNp6RkQNLEWIygYEqa30OHAYCCNzm6jLkBabFfv3OSBZsz4b6Zxk+T0JHckeSLJliTHzND+lUmuTfJ4knuSvD9JupYfn6T6vH6oZz37JvnDJFuTfDfJ/5fkF4apbYo9CFoxFqpHwV6E/hai98BQoHGU5CTgIuB04O86X69IcmhVfaNP+32Bq4EvAK8GDgY2At8GPtzT/DDgoa7pB7rW8xzgKuBh4BeAu4EXAd+db23dDAhacRYiKBgSnm3YcGAw0Jg7E9hYVR/vTJ+R5PXA24D39ml/MrAX8Oaqehy4KckhwJlJLqiq6mp7f1UN+gX7VWB/4NiqerIz784ha9vFUwxasYY9KC3XJxUuNcOBVrIkewBH0nyS73YVcPSAtx0FfLETDqZcCRwIrO1puznJvUk+l+SEnmU/C3wJ+KMk25L8c5JzOj0L861tF3sQtKIN25uw0nsShgkHBgMthXpqN57autcwq1idZHPX9Iaq2tC9HNgduK/nffcBrxuwzjU0pwN6208tuwO4l+ZT/j8AewC/AnwuyfFV9YVO25cAPw5cBvw0Tbj4KLA38K551raLAUHCeyjMx3zDgcFAY2Z7Va2bRbvqmU6feTO13zW/qm4Dbutafn2StTQH/qmAsBtwP/DWqtoJbEnyQuAPkrx7iNp2rVxSx3wOXp5qmD3DgSbQdmAnzSf/bvvT/uQ+ZduA9kzzHoAbgJd1Td8LfLUTDqbcQjO+YfU8a9vFgCD1mM8ldistJMz15/WyRU2qzuDALcD6nkXrgesGvO164Jgke/a030p7kGG3w2lCwZQvAT+YpPtY/nLgOzQ9H/OpbRcDgjSAIaG/ufycBgOtEBcApyR5S5JDklxEM+DwEoAk5yf5XFf7y2gO4huTvCLJG4D3ALuuYEjyziQ/m+RlSQ5Lcj7NoMSPdK3nvwEvAC5KcnCSfwucC1zcdSXEtLVNxzEI0jTmOjZh0gctzjUcSCtBVW3qnPs/GzgAuAk4saru6jQ5AHhpV/tHkqynGVC4meY+Bh+mOZhP2QP4feD7gMeBm4GfrqrLu9bzzSQ/2XnfV2hOXfxfwHlzqG2gPPtyy5Vj3bp1tXnz5pkbSh1zGcC4mCFhx0sPHLzd27cu3nYNB1pESbbMcjDgnDz3oO+vA9/9znm//863v2tR6hoH9iBIszTqKx2mCwa9bRY6KMw2HBgMpMnhGARpjmZzEFzo8QizCQfDtF8IhgNpshgQpHlYypAw34P9QoWE2fwchgNp8niKQZqn2ZxyGPdBizOFA4OBNLnsQZCGNNNBcpiehGF7AYZ5v+FAWtkMCNICmLSDpeFAkgFBWiDTHTQn6SZKhgNpZTAgSAtoEkLCdHUaDqSVw4AgLbBxDgmGA0lTvIpBWgRX79y0qDdUenTt97Tm7XPn44u2PcOBtPLYgyAtkkEH1WF7EfqFg+nmz9agugwH0spkQJAW0UKHhJlCwHxDguFAUi8DgrTIxvUgO651S1oYBgRpCfQ72C6XAYv96jAcSDIgSEtk2IPusGMMZstwIAkMCNKS6j34LkYvwlyCRO/2DQeSpniZozRi83mg06Pfl2dN73NPzWu7kjSIPQjSEluMT+m9gWE+7D2Q1M2AII3AMKca5hIGVt2+te98Ty1ImokBQRqR2RyUBx3g+5lvL4LhQFI/BgRpmViqMQGOPZA0GxMREJKcnuSOJE8k2ZLkmFHXJM3GMJ/ev/Oip3e9RrF9SZNt7ANCkpOAi4APAkcA1wFXJDlopIVJ87DYn+671284kDSdWQeEJH+b5Lf7zH9+kr9d2LLm5ExgY1V9vKpuqaozgHuBt42wJmnW5nOg7u01GKYXQZL6mUsPwvHAryf5iyTdd2LZAzhuQauapSR7AEcCV/Usugo4eukrkuZnupAwl4GKs32fvQeSZjLXUwyvA14M/F2SAxahnrlaDewO3Ncz/z5gTW/jJKcm2Zxk8wMPPLAU9UlztlinGRycKGku5nonxbuB1wKfADYn+ZnOvFHrvY1c+syjqjYAGwDWrVs391vPSYvo6p2bWL/7SbNu/5wDv7Pr+6e27rXr+33ufHzG7UgrxW5Pwl53j/1wu5GYy14rgKp6oqpOojnQXgP8wiLUNVvbgZ20ewv2p92rII2Nhf60b++BpLmaS0B41l1Yqupc4FeB8xe0ojmoqieBLcD6nkXraa5mkMbKdJ/up3oGvKxR0lKYyymGE4CHumdU1aeS3AKsW9Cq5uYC4NIkXwa+BJwGHAhcMsKapEXVfXph1/Tde++anu/ARkmaMusehKq6tqp29Jl/c1V9YmHLmr2q2gS8Ezgb+ArNGIkTq+quUdUkDWPqU373aYF+B/zD1mzjsDXbZlzf1HrsPZA0FxMxcqOqLq6qtVX13Ko6sqq+MOqapKUym5AgSXM1EQFB0vTsPZA0VwYEaRnqd5phPrx6QdJ8GRCkMXb8C28bdQmSJpQBQVqmBp0WmLrpy1Q46A0JvQMaPb0gaT4MCNKY6D7wDxqY2H0XRU8vSBqGAUFa5roP9DPdRlmSFooBQVrGZjo9cOLe/zzU+yVpEAOCNKamwsFMIUGS5sOAIE0gxx9IGpYBQRoDszng73NPPWsgo6cXJA3DgCAtc90Heh/CJGmpGBCkMbPPPTXqEiStAAYESZLUYkCQxkDveIKbt60B4GUveuaUw9Q9Enbcv93xB5KGZkCQxoRXJkhaSgYEacx4N0VJS8GAIE2Ap7buNeoSJE0YA4I0YRx/IGkhGBCkMTHTgX/V7VsdpyBpwRgQpDGz6vatnlKQtOgMCNIYGdRDsNfd/ipLWlj+VZEkSS0GBGkM2WMgLS9JTk9yR5InkmxJcswM7V+Z5Nokjye5J8n7k6Rr+XFJrkvyYKfNrUneNc36fjFJJfnLYWub4l8ZaQJMPZ/BKxikpZfkJOAi4IPAEcB1wBVJDhrQfl/gauA+4NXA24F3A2d2NXsM+EPgWOBQ4Dzg3CSn91nfS4D/Cnxx2Nq6GRCkMWIAkJalM4GNVfXxqrqlqs4A7gXeNqD9ycBewJur6qaq+jTwIeDMqV6EqtpSVX9WVTdX1R1V9SfAlcCzPv0neQ7wSeAs4OsLUNsuBgRpDPlER2l5SLIHcCRwVc+iq4CjB7ztKOCLVdV9W9QrgQOBtQO2c0Rnfdf2LPoAcGdVfWKBattl1UwNJC1/+9z5uPdAkPrY/amhA/XqJJu7pjdU1Ybu5cDuNKcLut0HvG7AOtcAd/dpP7XsjqmZSe4G9qM5Xp9bVZd0LftJ4CTg8EG1z6O2XQwI0phpgsBLR12GtFJsr6p1s2jXm0LSZ95M7fvNPwbYG3gN8KEkd1TVpUlWAxuBX6qqhxe4NsCAII0lH9gkLRvbgZ00n/y77U/7k/uUbQPa0/ueqprqTbgxyb8GzgEuBV4BHAD8TdfFD7sBJNkBHEbTEzHX2nZxDIIkSfNUVU8CW4D1PYvW01wx0M/1wDFJ9uxpvxW4c5rN7QY8t/P9PwCvpDm9MPX6DM2VDIcDd8yztl3sQZAmwKrbt3KFVzhIo3IBcGmSLwNfAk6jGXB4CUCS84Efraqf6LS/DPgdYGOS84CXA++hGWNQnfecQdMDcFvnPccC7wIuBqiqbwM3dReR5FvAqqrqnj9tbdMxIEhjaNXtW0ddgqSOqtqU5IXA2TTd/jcBJ1bVXZ0mB9A1cKiqHkmyHvgosBl4GPgwzcF8yu40lz6uBXYAt9OEiBkP7HOsbSADgjRmrt65iZ864D8C8LW7DxxxNZIAqupiOp/u+yw7pc+8G2l6BQat70LgwjnW0NrOTLVNxzEIkiSpxYAgSZJaDAiSJKnFgCCNucsfO3TUJUiaQAYESZLUYkCQxtw1Dx7scxgkLTgDgjSGDASSFpsBQZIktRgQpDF387be57BI0vAMCNKY6r564WqfwyBpgY11QEhyTZLqef3ZqOuSFlt3IHhq614jrETSpJqEZzH8d+B9XdOPj6oQSZImxVj3IHR8p6q2db0eGXVB0lK45sGDR12CpAk2CQHhTUm2J7k5ye8n2WfUBUlLaa+7J+HXWNJyM+6nGC4D7gK2AocB5wM/AqwfZVHSUrh52xr4gVFXIWlSLbuAkOQ84KwZmp1QVddU1YaueTcm+TpwQ5JXVdX/6rPuU4FTAQ466KAFq1mSpEmz7AICcCHwJzO0+caA+ZuBncDLgFZA6ASKDQDr1q2r+Zcojd7U1Qv73ON/ZUkLb9kFhKraDsz3PrKvBHYH7l24iiRJWnmWXUCYrSQvBU4GLqcJFIcCHwb+EfjSCEuTJGnsjW1AAJ4EfgJ4B7A38E3gr4Bzq2rnKAuTlsLU1Qv73OmtPyQtvLENCFX1TeC4UdchSdIk8gJqaUw5OFHSYjIgSJKkFgOCJElqMSBIY2pqcOKq27eOuBJJk8iAIEmSWsb2KgZJkmay23ef9lLgebIHQRpTnlqQtJgMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCCNuR33bx91CZImkAFBkiS1GBCkMWXPgaTFZECQJEktBgRJktRiQJDG3NU7N426BEkTyIAgjSmDgaTFZECQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQxtjljx066hIkTSgDgiRJajEgSJKkFgOCJElqMSBIY+yaBw8edQmSJpQBQZIktRgQJElSiwFBGmM3b1sz6hIkTSgDgiRJQ0pyepI7kjyRZEuSY2Zo/8ok1yZ5PMk9Sd6fJF3LD0hyWZJbk+xMsrHPOt6a5ItJHkryrSSfT/LaYWubYkCQJGkISU4CLgI+CBwBXAdckeSgAe33Ba4G7gNeDbwdeDdwZlez5wLbgd8Dbhiw6eOBTcBPAD8G3AZcmeRl862tmwFBkqThnAlsrKqPV9UtVXUGcC/wtgHtTwb2At5cVTdV1aeBDwFnTvUiVNWdVfX2qtoIPNRvJVV1clV9pKr+sapu62zvUeD1Q9S2iwFBkqR5SrIHcCRwVc+iq4CjB7ztKOCLVfV417wrgQOBtUOUswewJ/DwELXtYkCQxthTW/cadQnSSrca2J3mdEG3+4BBo4jXDGg/tWy+zgMeAz4zRG27rBqiEEmSlrV89ylW3b51mFWsTrK5a3pDVW3o0656N91n3kzt+82flSTvAH4NeF1V/cuQtQEGBEmSprO9qtZNtxzYSfsT+f60P7lP2TagPdO8Z6BOODgP+Kmq+vKQte3iKQZJkuapqp4EtgDrexatp7lioJ/rgWOS7NnTfitw51y2n+RM4APAT1fV3y1AbbsYEKQxttfd/gpLy8AFwClJ3pLkkCQX0Qw4vAQgyflJPtfV/jLgO8DGJK9I8gbgPcAFVbWr6z/J4UkOB/YFXtCZPrRr+btpLoP8D8BXk6zpvL53trVNx1MMkiQNoao2JXkhcDZwAHATcGJV3dVpcgDw0q72jyRZD3wU2Exz1cGHaQ7m3f6xZ/rfAXfxzJUO/xF4Ds29ELp9AjhllrUNZECQJGlIVXUxcPGAZaf0mXcjcOwM68wMy9cOW9t0lm3/ZJJTO7eN/FaSSrK2T5vnJ7k0ySOd16VJ/tXSVytJ0mRZtgGB5i5TVwHnTNPmMuBVwE/R3DnqVcCli16ZJEkTbtmeYqiqCwGS9L28JMkhNKHgtVV1XWferwFfTHJw57aTkiRpHpZzD8JMjqK5Y1T3pRpfAr7NLG4hKU2Cfe6Z1z1VJGlG4xwQ1gAPdF8S0vn+fgbcQrIzrmFzks0PPPDAEpUpSdL4WdKAkOS8zoDD6V7Hz2GV/T4+DbyFZFVtqKp1VbVuv/32m8dPIEnSyrDUYxAuBP5khjbfmOW6tgH7J8lUL0LnMZn7MY9bVUqSpGcsaUCoqu0094ZeCNcDe9OMRZgah3AU8DxmcQtJSZI02LK9iiHJGpqxBC/vzDq0c4+Db1TVQ1V1S5K/Bj6W5K00pxY+BvylVzBIkjSc5TxI8TSa20z+aWf6rzrTP9PV5mTgf9PcL+HKzve/soQ1SpI0kZZtD0JVncP0N0miqh4Cfnkp6pGWo33ufHzUJUiaUMu5B0GSJI2IAUGSJLUYECRJUosBQZIktRgQJElSiwFBkiS1GBAkSVKLAUGSJLUYECRJUosBQRpjq27fOuoSJE0oA4IkSWoxIEiSpBYDgiRJajEgSJKkFgOCJElqWTXqAiRJWiy1Ywc77t8+6jLGkj0IkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJkloMCNIY23H/9lGXIGlCGRAkSVKLAUGSJLUYECRJUosBQZIktSzbgJDk1CSfT/KtJJVkbZ82d3aWdb9+bwTlSpJWsCSnJ7kjyRNJtiQ5Zob2r0xybZLHk9yT5P1J0tPmuM66nkjy9SSn9VnPG5P8c5Lvdr7+XM/yY5N8prONSnLKbH+mZRsQgL2Aq4BzZmj3u8ABXa/zFrcsSZKekeQk4CLgg8ARwHXAFUkOGtB+X+Bq4D7g1cDbgXcDZ3a1eTFweWddRwDnA3+U5I1dbY4CNgF/Chze+foXSX6sa3N7AzcB7wAen8vPtWoujZdSVV0IkGTdDE0frapti1+RJEl9nQlsrKqPd6bPSPJ64G3Ae/u0P5nmQ/Cbq+px4KYkhwBnJrmgqgo4DdhaVWd03nNL58D/LuDTnXnvBD5fVR/oTH8gyQmd+b8IUFWX0wQNkmycyw+1nHsQZutdSR5M8pUkZyXZY9QFSZJWhs4x50iaHu9uVwFHD3jbUcAXO+FgypXAgcDarja967wSWJfkOTO0GbTdORn3gPCHNCnpBOAjwK8DF4+0IknSSrIa2J3mdEG3+4A1A96zZkD7qWXTtVnV2eZ0bQZtd06W9BRDkvOAs2ZodkJVXTOb9VXVBV2T/5TkX4BNSX6rqh7ss/1TgVM7k48luW0221kCqwFviTeY+2ew1cmfu28G8//OYMtt3/zAYqz0UR6+8m+e/vPVM7ccaM8km7umN1TVhj7tqmc6febN1L53/nzbTLfdWVvqMQgXAn8yQ5tvDLH+GzpffxBoBYTOP2q/f9iRSrK5qmYaa7FiuX8Gc99Mz/0z2ErZN1X1+kXexHZgJ+1P7fvT/nQ/ZduA9nS9Z1CbHTxzfBvUZtB252RJA0JVbWdxE+vhna/3LuI2JEkCoKqeTLIFWA/8Rdei9TwzmLDX9cCHkuxZVU90td8K3NnV5md73rce2FxVT3W1WQ/815421839J2lbtmMQkqxJcjjw8s6sQ5McnuQFneVHJfn1zrwXJ/kFmvEHn6mqYXohJEmaiwuAU5K8JckhSS6iGXB4CUCS85N8rqv9ZcB3gI1JXpHkDcB7gKkrGOi890VJLuys8y3AKcDvd63nIuDHk7w3yQ8leS/NmLwLpxok2btznDyc5ph/UGe67yWYz1JVy/JFc/+D6vM6pbP8VcDfA9+iubbz1s579hp17fP4WU8ddQ3L+eX+cd+4f9w3y/0FnE7z6f+7wBbg2K5lG4E7e9q/EvgC8ARNr/fvAOlpcxzwvzrrvAM4rc92f75z/HsSuAV4Q8/y4wccSzfO9DOlswJJkqRdlu0pBkmSNDoGBEmS1GJAWAbS+OvOgzR+vmfZ85NcmuSRzuvSJP9qRKUumSQvSPJHSW7tPMzkm0n+W5IX9rRbkfsH5v5wmEnUGZz1D0n+JckDST6b5BU9bZLknCRbO/+Xrkly2KhqHpUk7+v8jflI1zz3jQYyICwPv0FzHW0/l9EMyPwp4PWd7y9dorpG6UDg+4DfpBnM88vAscAne9qtyP0z14fDTLDjaa5eOhr4cZprxP9m6mqnjt+k+R07g+bBOPcDVyfZZ2lLHZ0krwHeCvxTz6IVv280jVGP/FzpL2Ad8E2am1sU8PNdyw7pzPs3XfNe25l38KhrH8G+OhF4Gth3pe8fmpuCfbxn3teA80dd24j3y940YfvfdaZDM0L8rK423wM8CvzaqOtdon3yvcDtNAHqGuAj7htfs3nZgzBCnZT+SZpfxvv7NDkKeIxn3/TiS8C3WaCHcYyZfWku9/lOZ3pF7p95PhxmpdiHpmf04c70i2nuNLdrX1XzgJwvsHL21QbgU1X1tz3z3TealgFhtC4B/rqax3H2swZ4oKp2XYva+f5+FuhhHOOiM67gP9N8at7Rmb1S9898Hg6zUlwEfIXmDnPwzP5YkfsqyVtpbj3/230Wr+h9o5kZEBZYkvM6A4Gmex2f5FeAHwHePcMq+92oYsEexrHUZrt/et7zPOCzwD0050y7TdT+maNFe0jLOEpyAc0ppjdWVe+YnhW3r5IcTDNG5eSqenKapitu32h2lvphTSvBhczugVSnAIfSPFWye9mmJNdX1WtpHsSxf5JMfUpO03g/FuhhHCNwIXN4YFeSvYGpHpb/o565bzlM5v6Zjfk8HGaiJfkD4E00T4P9eteibZ2va2jG+kxZCfvqKJreppu6/sbsDhyb5DRg6mqFlbhvNAsGhAVWs3wgVZKzePY9tQFuBN4F/L+d6etpBl0dxTPn2Y8CnscCPYxjqc12/8CuMRpX0HyieX1VPdbTZOL2z2zU/B4OM7HS3Pf+TcDxVXVrz+I7aELCeuAfOu33BI5h5t67cff/AJt75v13msGsHwS+ysrdN5oFA8KIVNU9NF3mu3RS/jenPgFV1S1J/hr4WOdcYoCPAX9ZVbctcclLqhMOrqIZmPizwPM6pxoAHqqqJ1fy/qF5OMylSb5MMzDzNLoeDrNSJPko8Cs0/0ceTjLVq/JYVT1WVZXkQuCsJLfSHBTPphncetkISl4yVfUtmmfV7JLk2zS/Pzd1pi9kBe4bzY4BYfk7GfhDnhlp/BngP42unCVzJPCazvdf7Vl2As3lWrBC909VbercNOps4ADgJuDEqrprtJUtudM7Xz/XM/9cmoe3AfwXmsv3Pgo8n+YS0Z+sqkeXosBlzn2jgXxYkyRJavEqBkmS1GJAkCRJLQYESZLUYkCQJEktBgRJktRiQJAkSS0GBEmS1GJAkCRJLQYESZLUYkCQxkyS/ZLcm+T9XfN+OMkTSX5+lLVJmhzealkaQ0n+LfBZ4DjgKzRP7ftyVf3qKOuSNDkMCNKY6jyJ72eAa2ke0Xt4n0diS9K8GBCkMZXkucD/Bl4GHF1VN4y4JEkTxDEI0vhaC3w/UMBLRluKpEljD4I0hpI8B7ge+BpwA3AO8MNV9Y1R1iVpchgQpDGU5PeAXwJ+GHgEuAL4HuCEqnp6lLVJmgyeYpDGTJLjgN8A/n1VfaualH8KcAjwW6OsTdLksAdBkiS12IMgSZJaDAiSJKnFgCBJkloMCJIkqcWAIEmSWgwIkiSpxYAgSZJaDAiSJKnFgCBJklr+f+aBLFPigyh8AAAAAElFTkSuQmCC",alt:null})),(0,m.mdx)("p",null,"Plotting the log density is usually easier to visualize and reason about."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'plt.contourf(xs, zs, density.log(), levels=range(-10, 0))\nplt.xlabel("x")\nplt.ylabel("z")\nplt.colorbar();\n')),(0,m.mdx)("p",null,(0,m.mdx)("img",{parentName:"p",src:"data:image/image/png;base64,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",alt:null})),(0,m.mdx)("p",null,"As we can see, the funnel\u2019s neck is particularly sharp because of the exponential\nfunction applied to ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"))))),". The density decays exponentially the farther that ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," deviates\nfrom ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mn",{parentName:"mrow"},"0")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"0")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"))))),". This makes it challenging to learn a good scale for proposal updates. Let's go\nabout modeling this in Bean Machine!"),(0,m.mdx)("p",null,"Compared to many of the other tutorials, this one is more of a contrived model. In the\ntypical problem setup found in other tutorials, there are ground-truth values that we're\ntrying to infer distributions about based on observed data. In this case, however, we're\ntrying to exactly replicate a ground-truth ",(0,m.mdx)("em",{parentName:"p"},"distribution"),", by using the mechanics of the\nBean Machine inference engine to guide the sampling process."),(0,m.mdx)("p",null,"Since Neal's funnel describes a mathematical relationship instead of a generative\nprocess, we'll have to reframe it into a generative process in order to run inference on\nit. We'll do this as follows:"),(0,m.mdx)("ol",null,(0,m.mdx)("li",{parentName:"ol"},"Sample priors for ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),"."),(0,m.mdx)("li",{parentName:"ol"},"Imagine weighting the probabilities of ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," according to how likely they are\nunder the true Neal's funnel model. We can do this by imagining we're flipping a\ncoin, where the probability of it landing heads is the probability of drawing that\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," from the Neal's funnel model, but where we've actually ",(0,m.mdx)("em",{parentName:"li"},"observed")," it to\nbe heads."),(0,m.mdx)("li",{parentName:"ol"},"Later, we will inform the inference engine that we observed heads. This will cause\nthe engine to find values for ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),' that are consistent with samples from the\ntrue Neal\'s funnel posterior \u2014 since those are the samples that would have resulted\nin the observed "heads" from our coin flip!')),(0,m.mdx)("p",null,"A few notes for advanced readers (feel free to skip over these):"),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},"In the above statistical model, we already ",(0,m.mdx)("em",{parentName:"li"},"had")," definitions for\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mn",{parentName:"mrow"},"3"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z\\sim\\mathcal{N}(0,3)")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"3"),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x"),(0,m.mdx)("mo",{parentName:"mrow"},"\u223c"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"script"},"N"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.mdx)("mn",{parentName:"mrow"},"0"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("msup",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msup"},"e"),(0,m.mdx)("mrow",{parentName:"msup"},(0,m.mdx)("mi",{parentName:"mrow"},"z"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"/"),(0,m.mdx)("mn",{parentName:"mrow"},"2"))),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x\\sim\\mathcal{N}(0,e^{z/2})")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u223c"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.138em",verticalAlign:"-0.25em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.14736em"}},"N")),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"("),(0,m.mdx)("span",{parentName:"span",className:"mord"},"0"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.8879999999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.04398em"}},"z"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"/"),(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"2"))))))))),(0,m.mdx)("span",{parentName:"span",className:"mclose"},")"))))),". We are free to reuse these\ndefinitions as priors. However, that's giving inference an unfair advantage, since our\npriors exactly match our posterior. Instead, in this tutorial we will choose\nnon-informative priors."),(0,m.mdx)("li",{parentName:"ul"},'It is common to refer to this coin-flipping approach as a "factor". Traditionally,\nPPLs have been implemented by weighting a particular run of inference according to the\nlog probability of that run of inference. We\'re exactly doing that in this model \u2014\nbased on a particular draw of ',(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," and ",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),", we're weighting that overall run by the\nprobability that those values would have been sampled from the true Neal's funnel\nposterior.")),(0,m.mdx)("p",null,"We can implement this model in Bean Machine by defining random variable objects with the\n",(0,m.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," decorator. These functions behave differently than ordinary Python\nfunctions."),(0,m.mdx)("div",{style:{background:"#daeaf3",border_left:"3px solid #2980b9",display:"block",margin:"16px 0",padding:"12px"}},"Semantics for ",(0,m.mdx)("code",null,"@bm.random_variable")," functions:",(0,m.mdx)("ul",null,(0,m.mdx)("li",null,"They must return PyTorch ",(0,m.mdx)("code",null,"Distribution")," objects."),(0,m.mdx)("li",null,"Though they return distributions, callees actually receive ",(0,m.mdx)("i",null,"samples")," from the distribution. The machinery for obtaining samples from distributions is handled internally by Bean Machine."),(0,m.mdx)("li",null,"Inference runs the model through many iterations. During a particular inference iteration, a distinct random variable will correspond to exactly one sampled value: ",(0,m.mdx)("b",null,"calls to the same random variable function with the same arguments will receive the same sampled value within one inference iteration"),". This makes it easy for multiple components of your model to refer to the same logical random variable."),(0,m.mdx)("li",null,'Consequently, to define distinct random variables that correspond to different sampled values during a particular inference iteration, an effective practice is to add a dummy "indexing" parameter to the function. Distinct random variables can be referred to with different values for this index.'),(0,m.mdx)("li",null,"Please see the documentation for more information about this decorator."))),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},'@bm.random_variable\ndef z():\n """\n An uninformative (flat) prior for z.\n """\n # TODO(tingley): Replace with Flat once it\'s part of the framework.\n return dist.Normal(0, 10000)\n\n\n@bm.random_variable\ndef x():\n """\n An uninformative (flat) prior for x.\n """\n # TODO(tingley): Replace with Flat once it\'s part of the framework.\n return dist.Normal(0, 10000)\n\n\n@bm.random_variable\ndef neals_funnel_coin_flip():\n """\n Flip a "coin", which is heads with probability equal to the probability\n of drawing z and x from the true Neal\'s funnel posterior.\n """\n return dist.Bernoulli(\n (\n dist.Normal(0.0, (z() / 2.0).exp()).log_prob(x())\n + dist.Normal(0.0, 3.0).log_prob(z())\n ).exp()\n )\n')),(0,m.mdx)("h2",{id:"inference"},"Inference"),(0,m.mdx)("p",null,"Inference is the process of combining ",(0,m.mdx)("em",{parentName:"p"},"model")," with ",(0,m.mdx)("em",{parentName:"p"},"data")," to obtain ",(0,m.mdx)("em",{parentName:"p"},"insights"),", in the\nform of probability distributions over values of interest. Bean Machine offers a\npowerful and general inference framework to enable fitting arbitrary models to data."),(0,m.mdx)("p",null,"As discussed in the previous section, we'll pretend that we've observed heads when\nflipping a coin whose heads rate is weighted according to how likely the z and x values\nwere to be drawn from the true Neal's funnel posterior. Let's set that up right now."),(0,m.mdx)("p",null,"Our inference algorithms expect observations in the form of a dictionary. This\ndictionary should consist of ",(0,m.mdx)("inlineCode",{parentName:"p"},"@bm.random_variable")," invocations as keys, and tensor data\nas values."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"observations = {neals_funnel_coin_flip(): torch.tensor(1.0)}\n")),(0,m.mdx)("p",null,"Next, we'll run inference on the model and observations."),(0,m.mdx)("p",null,"Since this model is comprised entirely of differentiable random variables, we'll make\nuse of the Newtonian Monte Carlo (NMC) inference method. NMC is a second-order method,\nwhich uses the Hessian to automatically scale the step size in each dimension. The hope\nis that this inference method will take the exponential growth rate of Neal's funnel\ninto account, and explore the entire posterior surface, including the neck of the\nfunnel. Check out the documentation for more information on NMC."),(0,m.mdx)("p",null,"Running inference consists of a few arguments:"),(0,m.mdx)("table",null,(0,m.mdx)("thead",{parentName:"table"},(0,m.mdx)("tr",{parentName:"thead"},(0,m.mdx)("th",{parentName:"tr",align:null},"Name"),(0,m.mdx)("th",{parentName:"tr",align:null},"Usage"))),(0,m.mdx)("tbody",{parentName:"table"},(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"queries")),(0,m.mdx)("td",{parentName:"tr",align:null},"A list of @bm.random_variable targets to fit posterior distributions for.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"observations")),(0,m.mdx)("td",{parentName:"tr",align:null},"The Dict of observations we built up, above.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"num_samples")),(0,m.mdx)("td",{parentName:"tr",align:null},"Number of samples to build up distributions for the values listed in queries.")),(0,m.mdx)("tr",{parentName:"tbody"},(0,m.mdx)("td",{parentName:"tr",align:null},(0,m.mdx)("inlineCode",{parentName:"td"},"num_chains")),(0,m.mdx)("td",{parentName:"tr",align:null},"Number of separate inference runs to use. Multiple chains can verify inference ran correctly.")))),(0,m.mdx)("p",null,"Let's run inference:"),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"num_samples = 2 if smoke_test else 1000\nnum_chains = 1 if smoke_test else 4\n\nsingle_site_nmc_samples = bm.SingleSiteNewtonianMonteCarlo().infer(\n queries=[z(), x()],\n observations=observations,\n num_samples=num_samples,\n num_chains=num_chains,\n)\n")),(0,m.mdx)(i.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/1000 [00:00"),(0,m.mdx)("mn",{parentName:"mrow"},"1.1")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\hat{R}>1.1")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.9858699999999999em",verticalAlign:"-0.0391em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord accent"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.9467699999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"))),(0,m.mdx)("span",{parentName:"span",style:{top:"-3.25233em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"accent-body",style:{left:"-0.16666em"}},(0,m.mdx)("span",{parentName:"span",className:"mord"},"^"))))))),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},">"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.64444em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,m.mdx)("span",{parentName:"span",className:"mord"},"."),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"))))),", as inference may not have converged. In that\ncase, you may want to run inference for more samples."),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff")),(0,m.mdx)("mo",{parentName:"mrow"},"\u2208"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,m.mdx)("mn",{parentName:"mrow"},"1"),(0,m.mdx)("mo",{parentName:"mrow",separator:"true"},","),(0,m.mdx)("mtext",{parentName:"mrow",mathvariant:"monospace"},"num"),(0,m.mdx)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.mdx)("mtext",{parentName:"mrow",mathvariant:"monospace"},"samples"),(0,m.mdx)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}\\in[1,\\texttt{num}\\_\\texttt{samples}]")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"})))))),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}}),(0,m.mdx)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2777777777777778em"}})),(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"1.06em",verticalAlign:"-0.31em"}}),(0,m.mdx)("span",{parentName:"span",className:"mopen"},"["),(0,m.mdx)("span",{parentName:"span",className:"mord"},"1"),(0,m.mdx)("span",{parentName:"span",className:"mpunct"},","),(0,m.mdx)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.16666666666666666em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord text"},(0,m.mdx)("span",{parentName:"span",className:"mord texttt"},"num")),(0,m.mdx)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.mdx)("span",{parentName:"span",className:"mord text"},(0,m.mdx)("span",{parentName:"span",className:"mord texttt"},"samples")),(0,m.mdx)("span",{parentName:"span",className:"mclose"},"]")))))," summarizes how independent\nposterior samples are from one another. Although inference was run for ",(0,m.mdx)("inlineCode",{parentName:"li"},"num_samples"),"\niterations, it's possible that those samples were very similar to each other (due to\nthe way inference is implemented), and may not each be representative of the full\nposterior space. Larger numbers are better here, and if your particular use case calls\nfor a certain number of samples to be considered, you should ensure that\n",(0,m.mdx)("span",{parentName:"li",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"}))))))))))," is at least that large.")),(0,m.mdx)("p",null,"In this case, ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mover",{parentName:"mrow",accent:"true"},(0,m.mdx)("mi",{parentName:"mover"},"R"),(0,m.mdx)("mo",{parentName:"mover"},"^"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\hat{R}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.9467699999999999em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord accent"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.9467699999999999em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-3em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"))),(0,m.mdx)("span",{parentName:"span",style:{top:"-3.25233em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.mdx)("span",{parentName:"span",className:"accent-body",style:{left:"-0.16666em"}},(0,m.mdx)("span",{parentName:"span",className:"mord"},"^")))))))))))," and ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("msub",{parentName:"mrow"},(0,m.mdx)("mi",{parentName:"msub"},"N"),(0,m.mdx)("mtext",{parentName:"msub"},"eff"))),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_\\text{eff}")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.83333em",verticalAlign:"-0.15em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord"},(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.mdx)("span",{parentName:"span",className:"msupsub"},(0,m.mdx)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.33610799999999996em"}},(0,m.mdx)("span",{parentName:"span",style:{top:"-2.5500000000000003em",marginLeft:"-0.10903em",marginRight:"0.05em"}},(0,m.mdx)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.mdx)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord text mtight"},(0,m.mdx)("span",{parentName:"span",className:"mord mtight"},"eff"))))),(0,m.mdx)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.mdx)("span",{parentName:"span",className:"vlist-r"},(0,m.mdx)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.mdx)("span",{parentName:"span"}))))))))))," seem to have acceptable values."),(0,m.mdx)("p",null,"Bean Machine can also plot diagnostical information to assess model fit. Let's take a\nlook:"),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"bm.Diagnostics(single_site_nmc_samples).plot(display=True);\n")),(0,m.mdx)(l.g,{data:t(83976),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(11331),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(61063),mdxType:"PlotlyFigure"}),(0,m.mdx)(l.g,{data:t(31931),mdxType:"PlotlyFigure"}),(0,m.mdx)("p",null,"The diagnostics output shows two diagnostic plots for individual random variables: trace\nplots and autocorrelation plots."),(0,m.mdx)("ul",null,(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("p",{parentName:"li"},"Trace plots are simply a time series of values assigned to random variables over each\niteration of inference. The concrete values assigned are usually problem-specific.\nHowever, it's important that these values are \"mixing\" well over time. This means that\nthey don't tend to get stuck in one region for large periods of time, and that each of\nthe chains ends up exploring the same space as the other chains throughout the course\nof inference.")),(0,m.mdx)("li",{parentName:"ul"},(0,m.mdx)("p",{parentName:"li"},"Autocorrelation plots measure how predictive the last several samples are of the\ncurrent sample. Autocorrelation may vary between -1.0 (deterministically\nanticorrelated) and 1.0 (deterministically correlated). (We compute autocorrelation\napproximately, so it may sometimes exceed these bounds.) In an ideal world, the\ncurrent sample is chosen independently of the previous samples: an autocorrelation of\nzero. This is not possible in practice, due to stochastic noise and the mechanics of\nhow inference works."))),(0,m.mdx)("p",null,"From the autocorrelation plots, we see the absolute magnitude of autocorrelation tends\nto be quite small. The trace plots are a little more suspicious, especially for ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),".\nLet's take a deeper look at the spike in chain 3. Here, if we look at the corresponding\ntrace plot for ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," at this time, we see that it is exploring large outlier values for\n",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z"))))),", around 6 or greater. We expect ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"x")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," to have high variance when ",(0,m.mdx)("span",{parentName:"p",className:"math math-inline"},(0,m.mdx)("span",{parentName:"span",className:"katex"},(0,m.mdx)("span",{parentName:"span",className:"katex-mathml"},(0,m.mdx)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.mdx)("semantics",{parentName:"math"},(0,m.mdx)("mrow",{parentName:"semantics"},(0,m.mdx)("mi",{parentName:"mrow"},"z")),(0,m.mdx)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"z")))),(0,m.mdx)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.mdx)("span",{parentName:"span",className:"base"},(0,m.mdx)("span",{parentName:"span",className:"strut",style:{height:"0.43056em",verticalAlign:"0em"}}),(0,m.mdx)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.04398em"}},"z")))))," is large, so this\nis as expected."),(0,m.mdx)("p",null,"This concludes the main Neal's funnel tutorial! However, we'll also walk through the\nsame model using Hamiltonian Monte Carlo inference to compare relative performance."),(0,m.mdx)("h2",{id:"appendix-adaptive-hamiltonian-monte-carlo"},"Appendix: Adaptive Hamiltonian Monte Carlo"),(0,m.mdx)("p",null,"Hamiltonian Monte Carlo is a classic gradient-based inference method. HMC proceeds by\ntaking a sequence of steps towards the gradient, but with some injected noise, before\nproposing a candidate sample. Bean Machine provides an implementation of HMC that we can\nuse to fit Neal's funnel. Bean Machine uses an adaptive version of HMC by default to\nselect some parameter values. For an in-depth discussion of this inference method, check\nout our ",(0,m.mdx)("a",{parentName:"p",href:"https://beanmachine.org/docs/hamiltonian_monte_carlo/"},"documentation on HMC"),"."),(0,m.mdx)("p",null,"Compared to single-site inference methods, this version of HMC is a global infernece\nmethod. That means that it proposes new values for all random variables in the model at\nonce, and accepts or rejects them jointly. Bean Machine does also provide a single-site\nvariant of this method called ",(0,m.mdx)("inlineCode",{parentName:"p"},"SingleSiteHamiltonianMonteCarlo"),". Although we will not\ncover that method in this tutorial, it is a useful component for use within\n",(0,m.mdx)("inlineCode",{parentName:"p"},"CompositionalInference"),"."),(0,m.mdx)("pre",null,(0,m.mdx)("code",{parentName:"pre",className:"language-python"},"hmc_samples = bm.GlobalHamiltonianMonteCarlo(trajectory_length=0.1).infer(\n queries=[z(), x()],\n observations=observations,\n num_samples=num_samples,\n num_chains=num_chains,\n)\n")),(0,m.mdx)(i.Z,{mdxType:"CellOutput"},"Samples collected: 0%| | 0/1500 [00:00=f)&&Object.keys(d.O).every((function(e){return d.O[e](a[b])}))?a.splice(b--,1):(r=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,t,f]},d.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(c,{a:c}),c},a=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var n={};c=c||[null,a({}),a([]),a(a)];for(var r=2&t&&e;"object"==typeof r&&!~c.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((function(c){n[c]=function(){return e[c]}}));return n.default=function(){return e},d.d(f,n),f},d.d=function(e,c){for(var a in c)d.o(c,a)&&!d.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce((function(c,a){return d.f[a](e,c),c}),[]))},d.u=function(e){return"assets/js/"+({53:"935f2afb",110:"66406991",453:"30a24c52",533:"b2b675dd",782:"739790d6",953:"70f3e524",955:"e8d7a53f",1150:"d6947fe6",1191:"cb595ecd",1264:"c622ae20",1477:"b2f554cd",1632:"3d90b9a4",1713:"a7023ddc",1773:"fa6170fa",2058:"adf798a9",2316:"2db2efeb",2527:"f6275ebb",2535:"814f3328",2593:"32ffa516",2709:"158025e9",2880:"3c38075d",3042:"558f8fa6",3085:"1c93b979",3089:"a6aa9e1f",3176:"88426e91",3508:"e138ac32",3608:"9e4087bc",3692:"5e9b0eee",3707:"3570154c",3771:"a83e8c55",3795:"e1a612f1",4013:"01a85c17",4165:"0b5d74f0",4189:"cbdf8568",4195:"c4f5d8e4",4268:"877eef12",4273:"202fa1c3",4431:"974a1acc",4441:"db9cebee",4488:"f7576c39",4717:"76fae974",4775:"5e97b49b",5007:"55da2120",5371:"a6c9bd18",5373:"836147bd",5983:"cce0712a",6103:"ccc49370",6176:"d610846f",6180:"b0c33016",6590:"89aa825c",7162:"480fc3c2",7172:"bdd33ab0",7263:"b5bf8843",7428:"985b226d",7677:"feb8802b",7751:"0bda65b2",7824:"d0389dd0",7918:"17896441",8310:"2975d793",8341:"94d3183b",8382:"ecfe08ed",8610:"6875c492",8625:"4560b943",8774:"2b917cd1",8786:"222284b3",8858:"2590a498",9048:"a2906467",9089:"0bcd37b5",9514:"1be78505",9628:"24d1134d"}[e]||e)+"."+{53:"32b3e096",110:"e1f14647",453:"c068f5af",533:"92666b0a",782:"588b12f5",953:"a00b63bc",955:"fc3e1bb2",1150:"b3233e58",1191:"2894894c",1264:"84d4d460",1477:"91941f11",1632:"65e3e7d5",1713:"6d044df8",1773:"814f5a30",2058:"0cca132a",2316:"6c0d71d2",2527:"d8f7a1e2",2535:"42ac5796",2593:"089760b0",2709:"355134aa",2880:"dad7a322",3042:"7cd71902",3085:"5c0f5cf2",3089:"38d5b95a",3176:"ceca2225",3508:"de976c00",3608:"566ad03d",3692:"60e870cc",3707:"6eb55688",3771:"b45e72d0",3795:"f28bd65b",4013:"1b9bb356",4165:"58b692e9",4189:"7c9be2d7",4195:"1d9a1946",4268:"b87efee5",4273:"81e56995",4431:"908d781c",4441:"369662c6",4488:"ea849703",4717:"c91b8815",4775:"ff95b69d",4972:"fc78a6a2",5007:"5675cc66",5371:"314c424a",5373:"10ae9a9a",5983:"10ae2dcc",6103:"109bd6f3",6176:"b7049776",6180:"4a5f6a87",6590:"d625b2e7",6921:"d50e79d8",7162:"52a5613b",7172:"179125bc",7263:"f898a6da",7428:"38709e0c",7677:"518f02a4",7751:"0162e31d",7824:"35ea3232",7918:"efa4770d",7993:"76d254db",8310:"7d30bfae",8341:"97e45709",8382:"da7bb46e",8610:"733bbb53",8625:"92bf515c",8660:"d49663c8",8774:"cf50796a",8786:"31ae0e40",8858:"3bb53ef7",9048:"82992bde",9089:"f78f9528",9514:"12278689",9628:"92de9c6d"}[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},t={},f="website:",d.l=function(e,c,a,n){if(t[e])t[e].push(c);else{var r,b;if(void 0!==a)for(var o=document.getElementsByTagName("script"),i=0;i=f)&&Object.keys(d.O).every((function(e){return d.O[e](a[b])}))?a.splice(b--,1):(r=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,t,f]},d.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(c,{a:c}),c},a=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var n={};c=c||[null,a({}),a([]),a(a)];for(var r=2&t&&e;"object"==typeof r&&!~c.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((function(c){n[c]=function(){return e[c]}}));return n.default=function(){return e},d.d(f,n),f},d.d=function(e,c){for(var a in c)d.o(c,a)&&!d.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce((function(c,a){return d.f[a](e,c),c}),[]))},d.u=function(e){return"assets/js/"+({53:"935f2afb",110:"66406991",453:"30a24c52",533:"b2b675dd",782:"739790d6",953:"70f3e524",955:"e8d7a53f",1150:"d6947fe6",1191:"cb595ecd",1264:"c622ae20",1477:"b2f554cd",1632:"3d90b9a4",1713:"a7023ddc",1773:"fa6170fa",2058:"adf798a9",2316:"2db2efeb",2527:"f6275ebb",2535:"814f3328",2593:"32ffa516",2709:"158025e9",2880:"3c38075d",3042:"558f8fa6",3085:"1c93b979",3089:"a6aa9e1f",3176:"88426e91",3508:"e138ac32",3608:"9e4087bc",3692:"5e9b0eee",3707:"3570154c",3771:"a83e8c55",3795:"e1a612f1",4013:"01a85c17",4165:"0b5d74f0",4189:"cbdf8568",4195:"c4f5d8e4",4268:"877eef12",4273:"202fa1c3",4431:"974a1acc",4441:"db9cebee",4488:"f7576c39",4717:"76fae974",4775:"5e97b49b",5007:"55da2120",5371:"a6c9bd18",5373:"836147bd",5983:"cce0712a",6103:"ccc49370",6176:"d610846f",6180:"b0c33016",6590:"89aa825c",7162:"480fc3c2",7172:"bdd33ab0",7263:"b5bf8843",7428:"985b226d",7677:"feb8802b",7751:"0bda65b2",7824:"d0389dd0",7918:"17896441",8310:"2975d793",8341:"94d3183b",8382:"ecfe08ed",8610:"6875c492",8625:"4560b943",8774:"2b917cd1",8786:"222284b3",8858:"2590a498",9048:"a2906467",9089:"0bcd37b5",9514:"1be78505",9628:"24d1134d"}[e]||e)+"."+{53:"32b3e096",110:"e1f14647",453:"c068f5af",533:"92666b0a",782:"588b12f5",953:"a00b63bc",955:"fc3e1bb2",1150:"b3233e58",1191:"2894894c",1264:"84d4d460",1477:"91941f11",1632:"65e3e7d5",1713:"6d044df8",1773:"814f5a30",2058:"0cca132a",2316:"6c0d71d2",2527:"d8f7a1e2",2535:"42ac5796",2593:"089760b0",2709:"355134aa",2880:"dad7a322",3042:"7cd71902",3085:"5c0f5cf2",3089:"38d5b95a",3176:"ceca2225",3508:"de976c00",3608:"566ad03d",3692:"60e870cc",3707:"6eb55688",3771:"b45e72d0",3795:"f28bd65b",4013:"1b9bb356",4165:"58b692e9",4189:"7c9be2d7",4195:"1d9a1946",4268:"b87efee5",4273:"81e56995",4431:"908d781c",4441:"369662c6",4488:"ea849703",4717:"c91b8815",4775:"ff95b69d",4972:"fc78a6a2",5007:"5675cc66",5371:"314c424a",5373:"10ae9a9a",5983:"10ae2dcc",6103:"109bd6f3",6176:"b7049776",6180:"4a5f6a87",6590:"d625b2e7",6921:"d50e79d8",7162:"52a5613b",7172:"179125bc",7263:"f898a6da",7428:"38709e0c",7677:"518f02a4",7751:"0162e31d",7824:"35ea3232",7918:"efa4770d",7993:"76d254db",8310:"7d30bfae",8341:"97e45709",8382:"da7bb46e",8610:"733bbb53",8625:"92bf515c",8660:"d49663c8",8774:"1d9969c5",8786:"31ae0e40",8858:"3bb53ef7",9048:"82992bde",9089:"f78f9528",9514:"12278689",9628:"5a5502f2"}[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},t={},f="website:",d.l=function(e,c,a,n){if(t[e])t[e].push(c);else{var r,b;if(void 0!==a)for(var o=document.getElementsByTagName("script"),i=0;i - +

Archive

Archive

- + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index e4d0648100..95d5afd0e6 100644 --- a/blog/index.html +++ b/blog/index.html @@ -15,14 +15,14 @@ - +
- + \ No newline at end of file diff --git a/blog/tags/beanmachine/index.html b/blog/tags/beanmachine/index.html index 60e5821235..7bb197470d 100644 --- a/blog/tags/beanmachine/index.html +++ b/blog/tags/beanmachine/index.html @@ -15,14 +15,14 @@ - +

One post tagged with "beanmachine"

View All Tags
- + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index 2ffdc3135b..0140d05333 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -15,14 +15,14 @@ - +

One post tagged with "hello"

View All Tags
- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 0ecf752f19..9a81e0542f 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -15,14 +15,14 @@ - +

Tags

- + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index c72526b7d0..3fc02b7f9f 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -15,14 +15,14 @@ - +
- + \ No newline at end of file diff --git a/docs/ancestral_metropolis_hastings/index.html b/docs/ancestral_metropolis_hastings/index.html index d029068e3f..bbaf60fcef 100644 --- a/docs/ancestral_metropolis_hastings/index.html +++ b/docs/ancestral_metropolis_hastings/index.html @@ -15,7 +15,7 @@ - + @@ -38,7 +38,7 @@ end for\qquad\textbf{end for}\\ Emit sample σ\qquad\text{Emit sample }\sigma\\ until Desired number of samples\textbf{until }\text{Desired number of samples}

Or, in pseudo-code:

For each inference iteration:
For each unobserved random variable X:
Perform a Metropolis Hastings (MH) update, which involves:
1. Propose a new value x′ for X using proposal Q
2. Update the world σ to σ′
3. Accept / reject the new value x' using Metropolis acceptance probability

Usage

The following code snippet illustrates how to use the inference method.

samples = bm.SingleSiteAncestralMetropolisHastings().infer(
queries,
observations,
num_samples,
num_chains,
)

The parameters to infer are described below:

NameUsage
queriesA List of @bm.random_variable targets to fit posterior distributions for.
observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
num_samplesNumber of samples to build up distributions for the values listed in queries.
num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
- + \ No newline at end of file diff --git a/docs/beanstalk/index.html b/docs/beanstalk/index.html index 30134e37c1..6c666f0db5 100644 --- a/docs/beanstalk/index.html +++ b/docs/beanstalk/index.html @@ -15,7 +15,7 @@ - + @@ -32,7 +32,7 @@ existing tensors.
  • Conditions of while statements, if statements, and if expressions must not be stochastic.
  • Using BMG Inference

    To use Bean Machine Graph inference on a Bean Machine model, first import the inference engine with the following command: from beanmachine.ppl.inference.bmg_inference import BMGInference.

    The BMGInference class provides the following methods to perform inference and inspect the graph analysis:

    • BMGInference().infer(queries, observations, num_samples, num_chains) - Computes the static dependency graph and executes inference using Bean Machine Graph; returns a dictionary of samples for the queried variables. In the current release only Newtonian Monte Carlo (NMC) is supported when running inference with BMGInference.
    • BMGInference().to_graphviz(queries, observations) - Returns a graphviz figure representing the static graph of the model.
    • BMGInference().to_dot(queries, observations) - Returns the DOT source code of the graphviz static graph.

    We have a number of informative error messages that may be emitted that should help you to debug any issues with using BMG inference, but if you happen to (rarely, we hope) encounter any crashes or fails with an unclear error message, please file an issue at https://github.com/facebookresearch/beanmachine/issues.

    Model graphs (static and dynamic)

    The graph of a model is defined by nodes representing the mathematical objects in the model (constants, random variables, results of operations, and distributions), and edges representing dependencies in the model. If a quantity node N depends directly on nodes M1, M2, ..., Mk, then there is an edge from each Mi to N.

    For an example, consider the Bean Machine model specified in Python below and its corresponding graph.

    @random_variable
    def a():
    return Normal(0, 1.)

    @random_variable
    def b():
    return Normal(a() + 5, 1.)

    Typical DOT rendering of graph for model above

    This graph is static because the dependencies are the same regardless of the values involved (for example, a() is always a sample of the Normal(0,1) distribution regardless of its value).

    A graph is not static (that is, dynamic) if dependencies do change according to random variable values. Consider the following model:

    @random_variable
    def a(i):
    return Normal(i, 1.)

    @random_variable
    def index():
    return Poisson(0.3)

    @random_variable
    def b():
    return Normal(a(index()) + 5, 1.)

    This model does not have a static graph because the expression a(index()) + 5 in the last line will depend on different nodes a(index()), depending on the value of index().

    - + \ No newline at end of file diff --git a/docs/block_inference/index.html b/docs/block_inference/index.html index 5dd5b92446..b1f48dd9ce 100644 --- a/docs/block_inference/index.html +++ b/docs/block_inference/index.html @@ -15,14 +15,14 @@ - +

    Block Inference

    Single-site inference in Bean Machine is a powerful abstraction that allows the inference engine to separately sample values for random variables in your model. While efficient in sampling high-dimensional models, single-site inference may not be suitable for models with highly correlated random variables. This is where Bean Machine's CompositionalInference API becomes handy: it allows us to "block" multiple nodes together and make proposals for them jointly.

    Motivation

    To understand the issue better, let's walk through an example. Let's say we have two random variables XX, YY whose values are xx and yy, and we'd like to move these values to xx' and yy'. Using single site inference, we can move from (x,y)(x, y) to (x,y)(x', y') with either of these series of updates:

    1. (x,y)(x,y)(x,y)(x, y) \to (x', y) \to (x', y')
    2. (x,y)(x,y)(x,y)(x, y) \to (x, y') \to (x', y')

    If XX and YY are strongly correlated, e.g., if both p(x,y)p(x, y) and p(x,y)p(x', y') are high, but the intermediate stage p(x,y)p(x', y) and p(x,y)p(x, y') are low, then the single site inference methods can be stuck in (x,y)(x, y), because the acceptance probability for transitioning out of the initial state is going to be very low for either of these two paths. This can lead to under-exploration of (x,y)(x', y'), which will not happen if we block XX and YY together, which can move from (x,y)(x,y)(x, y) \to (x', y') in a single Metropolis-Hastings step.

    tip

    If you haven't already read the docs on Compositional Inference, please read those first.

    Configuring Block Inference

    To understand how to run block inference in Bean Machine, let's consider the discrete Hidden Markov Model (discrete HMM) example below:

    # alpha, beta, rho, nu, and init are externally-defined constants.

    @bm.random_variable
    def mu(k):
    return Normal(alpha, beta)

    @bm.random_variable
    def sigma(k):
    return Gamma(nu, rho)

    @bm.random_variable
    def theta(k):
    return Dirichlet(kappa)

    @bm.random_variable
    def x(i):
    return Categorical(theta(x(i - 1)) if i else init)

    @bm.random_variable
    def y(i):
    return Normal(mu(x(i)), sigma(x(i)))

    This HMM describes a process with categorical latent states x, transition probabilities theta, and observed states y with emission probabilities determined by mu and sigma. Depending on the value of theta, the hidden state at each time step, x(i), can be hightly correlated with the hidden state at the previous time step, x(i-1). Therefore, we might want to block all instances of xx into a single block and propose new values for them jointly. Let's say we also want the parameters for emission probabilities, mu and sigma, to be updated jointly as well.

    Defining a block

    You may recall that with Compositional Inference, we can mix-and-match inference methods by providing a mapping from random variable families to inference algorithms through the inference_dict argument. The syntax for "blocking" multiple nodes together is similar: instead of having a single random variable as a key, you can pass a tuple of random variable families instead. For example:

    bm.CompositionalInference({
    (x,): bm.SingleSiteAncestralMetropolisHastings(),
    (mu, sigma): bm.GlobalNoUTurnSampler(),
    })

    The code snippet above is going to create two blocks: one for all instances of x, which will be inferred with SingleSiteAncestralMetropolisHastings(), and another for all instances of mu and sigma, which will be inferred with GlobalNoUTurnSampler(). Random variable families that are not specified in the dictionary will fall back to the default inference methods and run without blocking.

    Note that even though single site inference algorithms only update one node at a time, they can still be used to update a block of nodes. What is going to happen internally is that instead of accepting or rejecting a single site proposal immediately after it is made, we condition on it to compute the next proposal, and repeat this process for the remaining nodes in a block. After we are done with all nodes in a block, we then compute the Metropolis-Hastings acceptance probability as if the proposals are made in a single step. (Be aware that many of the single site algorithm only works well when the number of nodes in a block is low, as they might have trouble updating the samples as dimension increases.) On the other hand, multi site inference algorithms, such as GlobalNoUTurnSampler that we are using here, can make proposal for a set of nodes in one go and can take advantage of correlation between multiple nodes. To learn more about the distinctions between the two types of inference methods and how to define your own algorithms, see Custom Proposers.

    Mixing multiple inference methods in a block

    Sometimes you might want to use different algorithms to update different random variable families, but stil have them group together in a single block. To do so, you can pass a tuple of inference methods as the value, one for each of the random variable families in the key, for example:

    bm.CompositionalInference({
    (mu, sigma): (bm.SingleSiteNewtonianMonteCarlo(), bm.SingleSiteAncestralMetropolisHastings()),
    })

    which is equivalent to the following, more verbosed syntax with nested CompositionalInference:

    bm.CompositionalInference({
    (mu, sigma): CompositionalInference({
    mu: bm.SingleSiteNewtonianMonteCarlo(),
    sigma: bm.SingleSiteAncestralMetropolisHastings(),
    }),
    })

    In both of these snippets, we will group all instances of mu and sigma into a single block, use SingleSiteNewtonianMonteCarlo() to update all instances of mu and SingleSiteAncestralMetropolisHastings() to update all instances of sigma. Since CompositionalInference itself is just another inference method, you can use it in any places where a inference method is expected.

    Use the default inference method for a block

    If you are not planning to change the default inference methods selected by CompositionalInference and only want to define a few blocks in your model, you can use Python's Ellipsis literal, or equivalently, ... (three dots), as the value. For example:

    bm.CompositionalInference({
    (x,): ...,
    (mu, sigma): ...,
    })

    Similar to the previous example, this is also going to create two blocks for our HMM model. However, since we didn't provide any inference method, CompositionalInference will use the default method to update each node in the block instead. Note that this is different from having Ellipsis on the left hand side of the dictionary, i.e.,

    bm.CompositionalInference({
    ...: bm.SingleSiteNoUTurnSampler(),
    })

    which is used to override the default inference method and does not block the nodes automatically (unless you're using a multi-site algorithm, such as bm.GlobalNoUTurnSampler(), which always propose values jointly).

    To see a live example of running block inference with CompositionalInference, check out our HMM tutorial.

    - + \ No newline at end of file diff --git a/docs/compositional_inference/index.html b/docs/compositional_inference/index.html index ea6c2d8b75..0d019e4ea2 100644 --- a/docs/compositional_inference/index.html +++ b/docs/compositional_inference/index.html @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@ In the following sections, assume that we're working with a toy model with three random variable families, foo, bar, and baz:

    @bm.random_variable
    def foo(i):
    return dist.Beta(2.0, 2.0)

    @bm.random_variable
    def bar(i):
    return dist.Bernoulli(foo(i))

    @bm.random_variable
    def baz(j):
    return dist.Normal(0.0, 1.0)

    Choosing different inference methods for different random variable families

    To select an inference algorithm for a particular random variable family, pass the random variable family as the key and an instance of the inference algorithm as value. For example, the following snippet tells CompositionalInference to use SingleSiteNoUTurnSampler() to update all instances of foo and SingleSiteHamiltonianMonteCarlo(1.0) to update all instance of baz. Nodes that are not specified, such as instances of bar, will fall back to the default inference methods mentioned above.

    bm.CompositionalInference({
    foo: bm.SingleSiteNoUTurnSampler(),
    baz: bm.SingleSiteHamiltonianMonteCarlo(trajectory_length=1.0),
    }).infer(**args) # same parameters as shown above

    You may notice that we are using what we referred to as "random variable families" like foo as keys, which are essentially functions that generates the random variables, instead of using instances of random variables such as foo(0) and foo(1). This is because often times the number of random variable is not known ahead of time until an inference starts with some data (you can even have unbounded number of nodes in some model). By using random variable family in the config, we no longer need to explicitly spell out all every instance in a huge dictionary.

    Overriding default inference method

    If your model has a large number of nodes and you want to override the default inference method for all of them without listing them all, you can use Python's Ellipsis literal, or equivalently, ... (three dots), as a key to specify the default inference method for nodes that are not specified in the dictionary. For example, the following code snippet tells CompositionalInference to use SingleSiteUniformMetropolisHastings() to update all instances of bar (which are discrete), and use SingleSiteNewtonianMonteCarlo() to update the rest of nodes (which are all continuous).

    bm.CompositionalInference({
    bar: bm.SingleSiteUniformMetropolisHastings(),
    ...: bm.SingleSiteNewtonianMonteCarlo(),
    }).infer(**args) # same parameters as shown above

    Bean Machine provides a great variety of inference methods under beanmachine.ppl.inference that can be used with the CompositionalInference API. To learn more about what else can be done with CompositionalInference, see Block Inference.

    - + \ No newline at end of file diff --git a/docs/contributing/index.html b/docs/contributing/index.html index 4685c4b44b..5746557f82 100644 --- a/docs/contributing/index.html +++ b/docs/contributing/index.html @@ -15,14 +15,14 @@ - +

    Contributing Docs

    This document describes how to add and update markdown content that is presented in this Docusaurus 2 project.

    The static documentation content displayed on this site can be found in the /docs folder within the project itself. The folder contains markdown files which are rendered in the Docusaurus 2 UI.

    The markdown files used in this project need to contain a header with additional information about the file. You can see an example header here:

    ---
    id: toc
    title: Table of Contents
    sidebar_label: TOC
    ---

    Links to other documents within the docs folder should contain the path to the document. For example the following links to the modeling.md file in the modeling folder under docs.

    [Modeling](_overview/modeling/modeling.md_)

    For a full list of formatting syntax supported by Docusarus, you can visit this site.

    Docusaurus 2 also supports MDX, a format that lets you seamlessly write JSX in your Markdown documents. You can find out more by visiting MDX, and you can see an example in this project here.

    Adding Your Page to the Left Navigation

    To add a new page to the left navigation, you can add it to the sidebars.js file in the /website folder in the project. Details for customizing this sidebar file can be found here.

    module.exports = {
    someSidebar: {
    Documentation: ['toc', 'overview/introduction/introduction',
    'overview/quick_start/quick_start', 'overview/modeling/modeling',
    'overview/inference/inference', 'overview/analysis/analysis']
    },
    };
    - + \ No newline at end of file diff --git a/docs/custom_proposers/index.html b/docs/custom_proposers/index.html index 03398852fe..685a844177 100644 --- a/docs/custom_proposers/index.html +++ b/docs/custom_proposers/index.html @@ -15,7 +15,7 @@ - + @@ -31,7 +31,7 @@ which proposers (and which order) to execute for which random variables. See blocking for more examples.

    That's it! Let's walk through an example to see how we'd do this in practice.

    Example Custom Proposer

    Here, we implement a custom proposer for locating seismic events on Earth as described in [1]. In particular, the simplified version of the model is used, where one seismic event, denoted in the model by event_attr(), occurs randomly on the surface of the Earth. This event sends seismic energy in a single wave. There are different seismic stations across the surface of the Earth, and each station will noisily record its attributes of time, azimuth, and slowness, denoted by det_attr(s). The inference problem is to find the event_attr() given the det_attr(s).

    @bm.random_variable
    def event_attr():
    return SeismicEventPrior()

    @bm.random_variable
    def det_attr(station):
    det_loc = calculate_detection(station, event_attr())
    return Laplace(det_loc, scale)

    There is domain knowledge within seismology to mathematically solve for the most likely attributes of an event given the detection attributes for a specific station. Due to the noisy nature of the data, these predicted locations can be inaccurate, but this can be mitigated by considering the detections in many stations.

    An ideal MH proposer for location values would propose locations according to the exact posterior probability of the location given all stations, but computing this posterior or sampling from it is intractable. A simpler but still effective proposer independently computes one predicted location per individual station, which is an easier problem, and then selects, according to a Gaussian mixture model, one of these predicted locations for being proposed. This is effective because, with enough stations, it is likely that one of the predictions will be close to the true location.

    With this intuition, we use Bean Machine’s easily implementable proposer interface to write a custom proposer for the event_attr variable, which inspects the det_attr(s) children variables and uses a Gaussian mixture model proposer around the predicted attributes for each of the detections:

    class SingleSiteSeismicProposer(BaseSingleSiteMHProposer):

    def get_proposal_distribution(world: World) -> dist.Distribution:
    # self.node is given at initialization of the proposer since
    # there is one proposer per node
    node_var = world.get_variable(self.node)

    # instead of computing the probability of the event given
    # the join detections (a computation exponential in the number of detections),
    # we compute the probability of the event
    # given each separate detection and propose to use one of them
    # by sampling from a Gaussian mixture model.
    inverse_distributions_of_event =
    [inverted_laplace(world[child_det_attr])
    for child_det_attr in node_var.children]
    return create_gaussian_mixture_model(inverse_distributions_of_event)

    Since this is a single site proposer, there is one proposer per node and each node is updated independently from all the others. In this case we can just use SingleSiteInference, and run inference with that.

    SeismicInference = SingleSiteInference(SingleSiteSeismicProposer)
    observations = {...}
    samples = SeismicInference([event_attr()], observations, num_samples)

    If we wanted more complex blocking logic, we would define our own inference class by overriding get_proposers. Note that the user is free to define the blocking logic however they want; this is one example where we block all the variables together.

    class MultiSiteSeismicInference(BaseInference):

    def get_proposers(self, world, target_rvs, num_adaptive_samples):
    proposers = []
    for rv in target_rvs:
    proposers.append(SingleSiteSeismicProposer(rv))
    # This is a list of all the proposers to use during inference.
    # In this case, we will block everything together with SequentialProposer
    # This means that all of the proposers will be shuffled and proposed
    # in a single MH step.
    return [SequentialProposer(proposers)]

    [1] Arora, Nimar & Russell, Stuart & Sudderth, Erik. (2013). NET-VISA: Network Processing Vertically Integrated Seismic Analysis. The Bulletin of the Seismological Society of America. 103. 709-729. 10.1785/0120120107.

    - + \ No newline at end of file diff --git a/docs/diagnostics/index.html b/docs/diagnostics/index.html index c65deeed6a..06c7b5bfc6 100644 --- a/docs/diagnostics/index.html +++ b/docs/diagnostics/index.html @@ -15,7 +15,7 @@ - + @@ -53,7 +53,7 @@ Rank-Normalization, Folding, and Localization: An Improved R^\hat{R} for Assessing Convergence of MCMC (with Discussion). Bayesian Analysis 16(2) 667–718. doi: 10.1214/20-BA1221.

    - + \ No newline at end of file diff --git a/docs/hamiltonian_monte_carlo/index.html b/docs/hamiltonian_monte_carlo/index.html index 9cd234760e..dfa54ea78a 100644 --- a/docs/hamiltonian_monte_carlo/index.html +++ b/docs/hamiltonian_monte_carlo/index.html @@ -15,7 +15,7 @@ - + @@ -24,7 +24,7 @@

    Hamiltonian Monte Carlo

    Hamiltonian Monte Carlo (HMC) is a sampling algorithm for differentiable random variables which uses Hamiltonian dynamics. By randomly drawing a momentum for the kinetic energy and treating the true posterior as the potential energy, HMC is able to simulate trajectories which explore the space. Intuitively, this can be viewed as starting with a marble at a point inside a bowl, flicking the marble in a random direction, and then following the marble as it rolls around. The position of the marble represents the sample, the flick represents the momentum, and the shape of the bowl in combination with the force of gravity represents our true posterior.

    Hamiltonian dynamics

    HMC applies Hamiltonian dynamics to explore the state space. This means that we think of the posterior surface as having some potential energy, proportional to the posterior's negative log likelihood at some particular set of parameter assignments. We use that potential energy, along with kinetic energy injected in the form of a random momentum "kick", to traverse the surface according to the laws of physics.

    Below, we'll use qq to represent the current set of parameter assignments, and pp to represent a random momentum factor injected into the system by the inference method. The Hamiltonian physics alluded to above can be written as

    H(q,p)=U(q)+K(p),H(q, p) = U(q) + K(p),

    where UU and KK represent the potential and kinetic energy respectively.

    The potential energy represents the shape of the posterior distribution, and is defined by

    U(q)=log[π(q)L(qD)].U(q) = -\log[\pi(q)L(q\mid D)].

    Here, L(qD)L(q\mid D) is the likelihood of the model evaluated at the parameter assignments qq, conditioned on the observed dataset DD.

    The potential energy can be evaluated directly in Bean Machine as a function of the model's posterior probability at the current parameter values.

    The kinetic energy is defined using the momentum variable pp as well as an inference-method-defined covariance matrix Σ\Sigma,

    K(p)=pTΣp/2.K(p) = p^T\Sigma p/2.

    The values for pp and Σ\Sigma are provided by the framework. Bean Machine samples from a Normal distribution scaled to the appropriate posterior size for pp. Bean Machine can optionally estimate an appropriate constant value for Σ\Sigma by measuring correlations between parameters during an adaptation phase of inference.

    We can then simulate the trajectory using the following forms of Hamilton's equations:

    dqidt=[Σp]idpidt=Uqi\begin{aligned} \frac{dq_i}{dt} &= [\Sigma p]_i\\ \frac{dp_i}{dt} &= -\frac{\partial U}{\partial q_i} \end{aligned}

    Bean Machine can compute Uqi\frac{\partial U}{\partial q_i} using autograd.

    The goal of these equations is to determine where the new sample will come to rest after a framework-specified path length λ\lambda. Both the potential energy (from the posterior's likelihood) and the kinetic energy (from the injected "kick") will interact with the sampled value to influence how it travels over the posterior surface.

    caution

    Since we are computing gradients, all of the latent (non-observed) variables must be continuous. For discrete variables, use CompositionalInference or marginalize them out as in the Zero inflated count data tutorial.

    Approximating Hamiltonian dynamics

    Unfortunately, this system of differential equations cannot be analytically computed. Instead, Bean Machine discretizes these equations based on a discrete time step tt, and simulates how they influence each other in this discrete setting for a framework-specified path length λ\lambda. This discrete simulation is referred to as the "leapfrog" algorithm. Each simulated time step is referred to as a "leapfrog step".

    At a high level, leapfrog works like this:

    1. Choose momentum (pp) and covariance (Σ\Sigma) values to use for the simulation.
    2. Simulate a small time step of the momentum's influence on the sample.
    3. Simulate a small time step of the potential energy's influence on the sample.
    4. Repeat for the framework-specified path length λ\lambda.

    We'll represent the above description mathematically. For leapfrog step at time tt of size ϵ\epsilon, we take a half-step for momentum and a full-step for potential energy using the updated momentum, and finally another half step for the momentum.

    pi(t+ϵ/2)=p(ϵ/2)Uqi(q(t))qi(t+ϵ)=qi(t)+ϵΣpi(t+ϵ/2)pi(t+ϵ)=pi(t+ϵ/2)(ϵ/2)Uqi(q(t+ϵ))\begin{aligned} p_i(t + \epsilon/2) &= p - (\epsilon/2)\frac{\partial U}{\partial q_i}(q(t))\\ q_i(t + \epsilon) &= q_i(t) + \epsilon \Sigma p_i(t + \epsilon/2)\\ p_i(t + \epsilon) &= p_i(t + \epsilon/2) - (\epsilon/2)\frac{\partial U}{\partial q_i}(q(t + \epsilon)) \end{aligned}

    This process is repeated until we have achieved the framework-specific distance λ\lambda. Thus, the number of leapfrog steps is calculated by λ/ϵ\lceil\lambda / \epsilon\rceil. The final sample for qq is chosen by the value of qq after the last leapfrog step.

    Due to the discretization, the resulting trajectory will contain numerical errors. To account for the error, a Metropolis acceptance probability will be used to determine whether to accept the proposed value for qq.

    HMC's performance is quite sensitive to the hyperparameters used. They are as follows:

    • Path length, λ\lambda. Because the samples should be minimally correlated, it is ideal to follow the trajectory for long path lengths. However, distributions may have periodic behavior, and long path lengths may waste computation. The ideal path length is the minimal path length where the starting and ending samples have low correlation.
    • Step size, ϵ\epsilon. If the Hamiltonian equations were followed exactly (not approximated), all samples would be accepted. However, error is introduced into the system during the discretization of Hamilton's equations. The larger the step size, the worse the final approximation will be; however, if the steps are too small, the number of steps needed as well as the overall runtime of the algorithm will increase.
    • Covariance (mass) matrix, Σ\Sigma. If there is significant correlations between the variables and the covariance matrix is not properly tuned, we will need to make smaller steps to get samples that are likely to be accepted.

    The optimal acceptance rate for HMC, as derived by Neal (2011), is 0.65. It is desirable to tune these parameters so that they acheive this acceptance rate on average.

    Adaptive Hamiltonian Monte Carlo

    Due to the challenge of selecting good hyperparameters, Bean Machine provides extensions to HMC to help choose appropriate values.

    One such extension is called Adaptive Hamiltonian Monte Carlo. Adaptive HMC Adaptive HMC requires an adaptive phase, where Bean Machine uses the HMC algorithm to generate samples while tuning HMC's step size and covariance matrix. Adaptive HMC provides two main improvements over HMC, outlined below.

    Users do not have to specify a step size. During the adaptive phase, the step size is adjusted in order to achieve the optimal acceptance rate of 0.65 on average. If the acceptance rate is above optimal, then Bean Machine is being too careful and discretizing in steps that are too small; therefore, the step size should be increased. If the acceptance rate is too low, then the step size should be decreased. We follow the Robbins-Monro stochastic approximation method, where earlier iterations within the adaptive phase have a larger influence over the step size than later iterations.

    HMC can take different step sizes in different dimensions. During the adaptive phase, the momentum in each dimension is tuned depending on the covariance of the previously-accepted samples. The amount of momentum used is controlled by the covariance matrix, which allows HMC to move adjust the dimensions at different rates. The estimated covariance matrix is adjusted based on the covariance of the samples. Since the ideal covariance matrix is the true covariance, we can approximate this during the adaptive phase by using the covariance of the samples.

    Once the adaptive phase ends, we no longer update our parameters, and the original HMC algorithm is used to generate new samples. Since the samples generated during the adaptive phase use untuned parameters, they may not be of the highest quality and are not returned by default.

    Tuning the path length

    While adaptive HMC can effectively tun the step size and covariance matrix, Bean Machine relies on a separate algorithm for tuning the path length λ\lambda. This algorithm is called the No-U-Turn Sampler, and has its own documentation page, No-U-Turn Samplers.

    Usage

    In Bean Machine, inference using HMC can be specified as an inference method for all variables in the model:

    bm.SingleSiteHamiltonianMonteCarlo(
    1.0, # trajectory length
    initial_step_size=0.1,
    adapt_step_size=True
    adapt_mass_matrix=True
    target_accept_prob=0.8
    ).infer(
    queries,
    observations,
    num_samples,
    num_chains,
    num_adaptive_samples=100,
    )
    caution

    Make sure to set num_adaptive_samples when using adaptive HMC! If you forget to set num_adaptive_samples, no adaptation will occur.

    The global variant for adaptive HMC, GlobalHamiltonianMonteCarlo, which proposes all of the variables in the model jointly, follows the same API:

    bm.GlobalHamiltonianMonteCarlo(
    1.0, # trajectory length
    initial_step_size=0.1,
    adapt_step_size=True,
    adapt_mass_matrix=True,
    target_accept_prob=0.8,
    nnc_compile=True,
    ).infer(
    queries,
    observations,
    num_samples,
    num_chains,
    num_adaptive_samples=100,
    )
    caution

    Functorch's ahead of time (AOT) autograd compiler is used by default. If working with a non-static model or unexpected errors are encountered, you may need to manually disable the nnc_compile flag.

    These arguments allow us to decide if we want to tune the step size adjust_step_size or covariance matrix adapt_mass_matrix. The target_accept_prob argument indicates the acceptance probability which should be targeted by the step size tuning algorithm. While the optimal value is 65.1%, higher values have been show to be more robust. As a result, Bean Machine targets an acceptance rate of 0.8 by default.

    The parameters to infer are described below:

    NameUsage
    queriesA List of @bm.random_variable targets to fit posterior distributions for.
    observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
    num_samplesNumber of samples to build up distributions for the values listed in queries.
    num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
    num_adaptive_samplesNumber of warmup samples to adapt the parameters.

    Neal, Radford M. "MCMC using Hamiltonian dynamics." Handbook of markov chain monte carlo 2.11 (2011): 2.

    Herbert Robbins. Sutton Monro. "A Stochastic Approximation Method." Ann. Math. Statist. 22 (3) 400 - 407, September, 1951. https://doi.org/10.1214/aoms/1177729586

    - + \ No newline at end of file diff --git a/docs/logging/index.html b/docs/logging/index.html index 35aa07b3fe..22fa9733e8 100644 --- a/docs/logging/index.html +++ b/docs/logging/index.html @@ -15,14 +15,14 @@ - +

    Logging

    Logging in Bean Machine is provided through the logging module in Python. It is recommended that users get familiar with the basics (logger, handler, levels, etc.) of this module before reading further.

    The Bean Machine Logger

    Upon importing the beanmachine module, the base logger "beanmachine" is initialized with two handlers such that it saves every message at or above the WARNING level to a local file and prints every message at or above the INFO level to the console. Users could control the information to be logged by replacing the default handlers with customized ones.

    Log Levels and Sub-Loggers

    To keep sufficient flexibility and ease of use, Bean Machine provides multiple sub-loggers under the base logger "beanmachine", such as "beanmachine.inference", "beanmachine.proposer", "beanmachine.world", etc. The name of the sub-logger indicates where the message is generated. Following the convention of Python logging, users could modify the logging levels of the base or sub-loggers as they need. Experienced users could also create customized filters based on the message itself.

    In Bean Machine, we also offer a LogLevel class that maps the level name to its numeric value. The mapping is consistent with the logging module with additional levels inserted between INFO and DEBUG to differentiate different priorities in debugging. The following table provides the level description in details.

    Level NameNumric ValueType of Information to Log
    ERROR40Exceptions that are caught and handled with alternative solutions.
    WARNING30Gradient calculation returns NaN or Inf.
    Falling back to other proposer.
    INFO20User-provided messages.
    DEBUG_UPDATES16Node name and value
    Proposed value
    Proposal log update
    Children log update
    Node log update
    Accept/Reject
    Proposer type
    Proposer properties
    Step size
    The dependency graph of random variables
    DEBUG10All logging messages

    The level INFO is reserved for users who would like to print any information from their model.

    For Developers

    Developers are welcome to add additional loggings following the above pattern. e.g. When a new proposer is added, its associated information should use the "beanmachine.proposer" logger. If a new logging level must be added, please set the level (LogLevel class) based on the type of information and the expected frequency of use (higher frequency -> higher level), and update the above table.

    - + \ No newline at end of file diff --git a/docs/mcmc_inference/index.html b/docs/mcmc_inference/index.html index 1cb8603e70..027e23d9bc 100644 --- a/docs/mcmc_inference/index.html +++ b/docs/mcmc_inference/index.html @@ -15,14 +15,14 @@ - +

    Inference Methods

    Posterior distributions can often only be estimated, as the solutions to such problems in general have no closed-form. Bean Machine's inference methods include sequential sampling techniques known as Markov chain Monte Carlo (MCMC) to generate samples representative of this distribution. These posterior distribution samples are the main output of Bean Machine: with enough samples, they will asymptotically converge to the true posterior.

    To support inference algorithms, Bean Machine represents the model as a probabilistic graphical model. A probabilistic graphical model is a directed acyclic graph where each node is a random variable and edges between nodes represent dependencies between random variables. During a single iteration of inference, MCMC assigns a specific, concrete value to each of the unobserved random variable functions in your model. We refer to this set of assignments as a World in Bean Machine.

    Each world corresponds to a potential sample for the posterior distribution. An MCMC method evaluates how well a particular world would explain the observed data (and prior beliefs). MCMC methods will tend to retain worlds that explain the observed data well and add them as samples to the computed posterior distribution. MCMC methods will tend to discard worlds that do a poor job of explaining the observed data.

    In an MCMC method, worlds are computed sequentially. A new world is "proposed" based on the random variable assignments from the current world. In each inference step, an MCMC method iterates over all unobserved random variables and proposes a new value. The world is updated to reflect this change; that is, likelihoods are updated and new variables may be added or removed. This updated world will either replace the existing world or be discarded as determined by the specific inference method. The value associated with each variable at the iith inference step is returned as the iith sample for the variable.

    As you can imagine, there are a variety of ways of proposing new worlds from the current world, and even for deciding whether to accept or reject a proposed world. Lots of research goes into designing inference methods that are both flexible and performant for a wide class of models. Bean Machine supports several inference methods out-of-the-box, which are described in the following sections, as well as ways to combine these methods in the same subroutine.

    - + \ No newline at end of file diff --git a/docs/mdx/index.html b/docs/mdx/index.html index 4a0debb8ad..daefe8c73b 100644 --- a/docs/mdx/index.html +++ b/docs/mdx/index.html @@ -15,14 +15,14 @@ - +

    Powered by MDX

    You can write JSX and use React components within your Markdown thanks to MDX.

    Docusaurus green and Facebook blue are my favorite colors.

    I can write Markdown alongside my JSX!

    - + \ No newline at end of file diff --git a/docs/model_comparison/index.html b/docs/model_comparison/index.html index cbf07a0be8..29f4fca09b 100644 --- a/docs/model_comparison/index.html +++ b/docs/model_comparison/index.html @@ -15,7 +15,7 @@ - + @@ -23,7 +23,7 @@

    Model Comparison

    Let's suppose we have a problem for which we have several candidate models. How do we determine which is best? We can run several diagnostics on the posterior samples, but those will only reveal how well inference has converged on each specific model, without testing whether that is indeed the best model. To compare different models, we can instead assess performance directly on held-out test data.

    To do this, we want to run inference on the model using the training data, but assess prediction accuracy on the test data. Specifically, we use something called "predictive log likelihood" as our measure of predictive accuracy. Predictive log likelihood asks how likely the test data was, using random variables inferred by running inference on the training data. We actually use a log probability by convention, so this takes on a value in (,0](-\infty, 0]. Predictive log likelihood (pred\ell_\text{pred}) is defined as

    pred=log(1ni=1nP(xtestzi)),\ell_\text{pred} = \log \left( \frac{1}{n} \sum_{i=1}^n \mathbb{P}(x_\text{test} \mid z_i) \right),

    where ziz_i represents the assignment of values to random variables in inference iteration i[1,N]i \in [1, N], and P(xtestzi)\mathbb{P}(x_\text{test} \mid z_i) is the probability of the test data being generated if ziz_i were the values of the random variables in the model.

    We can then generate predictive log likelihood plots (pred\ell_\text{pred} against samples) for several models using test data to compare models:

    1. We can compare the final value of the predictive log likelihood plots and the model with a higher predictive log likelihood explains the data better.
    2. Predictive log likelihood plots can also indicate a notion of speed of convergence. We can compare the rate at which log likelihood increases with number of samples.
    - + \ No newline at end of file diff --git a/docs/newtonian_monte_carlo/index.html b/docs/newtonian_monte_carlo/index.html index f2baf142e1..c453db1544 100644 --- a/docs/newtonian_monte_carlo/index.html +++ b/docs/newtonian_monte_carlo/index.html @@ -15,7 +15,7 @@ - + @@ -60,7 +60,7 @@ end for\quad\textbf{end for}\\ Output sample θ\quad\text{Output sample }\theta\\ until Desired number of samples\textbf{until }\text{Desired number of samples}

    Usage

    The following code snippet illustrates how to use the inference method. Here, real_space_alpha represents aa and real_space_beta represents bb from the algorithm above.

    samples = bm.SingleSiteNewtonianMonteCarlo(
    real_space_alpha=1.0,
    real_space_beta=5.0,
    ).infer(
    queries=...,
    observations=...,
    num_samples=...,
    num_chains=...,
    )

    To enable the adaptive phase in order to use a learning rate, we can set num_adaptive_samples during inference.

    samples = bm.SingleSiteNewtonianMonteCarlo(
    real_space_alpha=1.0,
    real_space_beta=5.0,
    ).infer(
    queries=...,
    observations=...,
    num_samples=...,
    num_chains=...,
    num_adaptive_samples=num_warmup_samples,
    )

    Remember, for random variables with half-space and simplex support, SingleSiteNewtonianMonteCarlo by default uses the half-space and simplex proposer respectively.

    The parameters to infer are described below:

    NameUsage
    queriesA List of @bm.random_variable targets to fit posterior distributions for.
    observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
    num_samplesNumber of samples to build up distributions for the values listed in queries.
    num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
    num_adaptive_samplesNumber of warmup samples to adapt the parameters.

    Arora, N. S., Tehrani, N. K., Shah, K. D., Tingley, M., Li, Y. L., Torabi, N., Noursi, D., Masouleh, S. A., Lippert, E., and Meijer, E. (2020). Newtonian monte carlo: single-site mcmc meets second-order gradient methods. arXiv:2001.05567.

    Metropolis, N., Rosenbluth, A., Rosenbluth, M., Teller, A., and Teller, E. (1953). “Equations of state calculations by fast computing machines.” J. Chem. Phys., 21(6): 1087–1092.

    Robert, G., and Tweedie, R. 1996. Exponential convergence of Langevin diffusions and their discrete approximation. Bernoulli 2:341–363.

    Girolami, M., and Calderhead, B. (2011). “Riemann Manifold Langevin and Hamiltonian Monte Carlo Methods: Riemann Manifold Langevin and Hamiltonian Monte Carlo Methods.” Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73, no. 2 (March 2011): 123–214. https://doi.org/10.1111/j.1467-9868.2010.00765.x.

    - + \ No newline at end of file diff --git a/docs/no_u_turn_sampler/index.html b/docs/no_u_turn_sampler/index.html index 5d223fe190..39b98d0da9 100644 --- a/docs/no_u_turn_sampler/index.html +++ b/docs/no_u_turn_sampler/index.html @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@ as well as a multi-site version of NUTS that updates all the variables in your model jointly at each step. Both follow the same API:

    bm.SingleSiteNoUTurnSampler(
    max_tree_depth=10,
    max_delta_energy=1000.0,
    initial_step_size=1.0,
    adapt_step_size=True,
    adapt_mass_matrix=True,
    multinomial_sampling=True,
    target_accept_prob=0.8,
    ).infer(
    queries,
    observations,
    num_samples,
    num_chains,
    num_adaptive_samples=1000,
    )

    bm.GlobalNoUTurnSampler(
    max_tree_depth=10,
    max_delta_energy=1000.0,
    initial_step_size=1.0,
    adapt_step_size=True,
    adapt_mass_matrix=True,
    multinomial_sampling=True,
    target_accept_prob=0.8,
    ).infer(
    queries,
    observations,
    num_samples,
    num_chains,
    num_adaptive_samples=1000,
    )
    caution

    Functorch's ahead of time (AOT) autograd compiler is used by default. If working with a non-static model or unexpected errors are encountered, you may need to manually disable the nnc_compile flag.

    The GlobalNoUTurnSampler has all the acceptance step size, covariance matrix, and acceptance probability tuning arguments of GlobalHamiltonianMonteCarlo as well as a few more parameters related to tuning the path length. While there are many optional parameters for this inference method, in practice, the parameters you are most likely to modify are target_accept_prob and max_tree_depth. When dealing with posteriors where the probability density has a more complicated shape, we benefit from taking smaller steps. Setting target_accept_prob to a higher value like 0.9 will lead to a more careful exploration of the space using smaller step sizes while still benefiting from some tuning of that step size. Since we will be taking smaller steps, we need to compensate by having a larger path length. This is accomplished by increasing max_tree_depth. Otherwise, using the defaults provided is highly recommended.

    A more complete explanation of parameters to GlobalNoUTurnSampler are provided below and in the docs:

    NameUsage
    max_tree_depthThe maximum depth of the binary tree used to simulate leapfrog steps forwards and backwards in time.
    max_delta_energyThis is the lowest probability moves that NUTS will consider. Once most new samples have a lower probability, NUTS will stop its leapfrog steps. This should be interpreted as a negative log probability and is designed to be fairly conservative.
    initial_step_sizeThe initial step size ϵ\epsilon used in adaptive HMC. This value is simply the step size if tuning is disabled.
    multinomial_samplingLets us decide between a faster multinomial sampler for the trajectory or the slice sampler described in the original paper. The option is useful for fairly comparing against other NUTS implementations.
    target_accept_probIndicates the acceptance probability which should be targeted by the step size tuning algorithm. While the optimal value is 65.1%, higher values have been show to be more robust leading to a default of 0.8.
    nnc_compileNNC (neural network compiler) is a Pytorch JIT compiler that that transforms Pytorch programs to LLVM-compiled binaries. The model support is currently limited, so if your model fails, consider filing an issue and turning this flag off.

    The parameters to infer are described below:

    NameUsage
    queriesA List of @bm.random_variable targets to fit posterior distributions for.
    observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
    num_samplesNumber of samples to build up distributions for the values listed in queries.
    num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
    num_adaptive_samplesNumber of warmup samples to adapt the parameters.

    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.

    - + \ No newline at end of file diff --git a/docs/overview/analysis/index.html b/docs/overview/analysis/index.html index 21917a6d16..cc1a959c28 100644 --- a/docs/overview/analysis/index.html +++ b/docs/overview/analysis/index.html @@ -15,14 +15,14 @@ - +

    Analysis

    Inference results are useful not only for learning posterior distributions, but for verifying that inference ran correctly. We'll cover common techniques for analyzing results in this section. As is the case for everything else in this Overview, the code for this section is available as a notebook on GitHub and Colab.

    Results of Inference

    Bean Machine stores the results of inference in an object of type MonteCarloSamples. Internally, this class uses a dictionary to map random variables to PyTorch tensors of posterior samples. The class can be accessed like a dictionary, and there are additional wrapper methods to make function calls more explicit.

    In the Inference section, we obtained results on the disease modeling example by running inference:

    samples = bm.CompositionalInference().infer(
    queries=[reproduction_rate()],
    observations=observations,
    num_samples=7000,
    num_adaptive_samples=3000,
    num_chains=4,
    )
    samples
    Out:

    <beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples>

    Extracting Samples for a Specific Variable

    In order to perform inference on the random variable reproduction_rate(), we added it to the queries list. We can see that it, and no other random variable, is available in samples:

    list(samples.keys())
    Out:

    [RVIdentifier(function=<function reproduction_rate>, arguments=())]

    To extract the inference results for reproduction_rate(), we can use get_variable():

    samples.get_variable(reproduction_rate())
    Out:

    tensor([[1.0000, 0.4386, 0.2751, ..., 0.2177, 0.2177, 0.2193],

    [0.2183, 0.2183, 0.2184, ..., 0.2177, 0.2177, 0.2177],

    [0.2170, 0.2180, 0.2183, ..., 0.2180, 0.2180, 0.2180],

    [0.2180, 0.2180, 0.2172, ..., 0.2180, 0.2180, 0.2176]])

    The result has shape 4×70004 \times 7000, representing the 70007000 samples that we drew in each of the four chains of inference from the posterior distribution.

    MonteCarloSamples supports convenient dictionary indexing syntax to obtain the same information:

    samples[reproduction_rate()]
    Out:

    tensor([[1.0000, 0.4386, 0.2751, ..., 0.2177, 0.2177, 0.2193],

    [0.2183, 0.2183, 0.2184, ..., 0.2177, 0.2177, 0.2177],

    [0.2170, 0.2180, 0.2183, ..., 0.2180, 0.2180, 0.2180],

    [0.2180, 0.2180, 0.2172, ..., 0.2180, 0.2180, 0.2176]])

    Please note that many inference methods require a small number of samples before they start drawing samples that correctly resemble the posterior distribution. The 3000 samples that we specified in num_adaptive_samples were already excluded for us, so nothing needs to be done here. However, if you use no adaptive samples, we recommend you discard at least a few hundred samples before using your inference results.

    Extracting Samples for a Specific Chain

    We'll see how to make use of chains in Diagnostics; for inspecting the samples themselves, it is often useful to examine each chain individually. The recommended way to access the results of a specific chain is with get_chain():

    chain = samples.get_chain(chain=0)
    chain
    Out:

    <beanmachine.ppl.inference.monte_carlo_samples.MonteCarloSamples>

    This returns a new MonteCarloSamples object which is limited to the specified chain. Tensors no longer have a dimension representing the chain:

    chain[reproduction_rate()]
    Out:

    tensor([1.0000, 0.4386, 0.2751, ..., 0.2177, 0.2177, 0.2193])

    Visualizing Distributions

    Visualizing the results of inference can be a great help in understanding them. Since you now know how to access posterior samples, you're free to use whatever visualization tools you prefer.

    reproduction_rate_samples = samples.get_chain(0)[reproduction_rate()]
    loading...

    Diagnostics

    After running inference it is useful to run diagnostic tools to assess reliability of the inference run. Bean Machine provides two standard types of such diagnostic tools, discussed below.

    Summary Statistics

    Bean Machine provides important summary statistics for individual, numerically-valued random variables. Let's take a look at the code to generate them, and then we'll break down the statistics themselves.

    Bean Machine's interface to the ArviZ libray makes it easy to generate a Pandas DataFrame presenting these statistics for all queried random variables:

    import arviz as az

    az.rcParams["stats.hdi_prob"] = 0.89
    az.summary(samples.to_xarray(), round_to=5)
    meansdhdi_5.5%hdi_94.5%mcse_meanmcse_sdess_bulkess_tailr_hat
    reproduction_rate()0.21960.00030.21920.22010.00.019252.37719175.78751.0002

    We recommend reading the official ArviZ documentation for a full explanation, but the statistics presented are:

    1. Mean and standard deviation (SD).
    2. 89% highest density interval (HDI).
    3. Markov chain standard error (MCSE).
    4. Effective sample size (ESS) NeffN_\text{eff}.
    5. Convergence diagnostic R^\hat{R}.

    We choose to display the 89% highest density interval (HDI), following recommendations in Statistical Rethinking: A Bayesian Course with Examples in R and Stan (McElreath, 2020). The statistics above provide different insights into the quality of the results of inference. For instance, we can use them in combination with synthetically generated data for which we know ground truth values for parameters and then check to make sure that these values fall within some HDI of our posterior samples. Of course, in doing so it is important to keep in mind that the prior distributions in our model (and not just the data) will have an influence on the posterior distribution. Similarly, we can use the size of the HDI to gain insights into the model: if it is large, this could indicate that either we have too few observations or that the prior is too weak.

    R^[1,)\hat{R} \in [1, \infty) summarizes how effective inference was at converging on the correct posterior distribution for a particular random variable. It uses information from all chains run in order to assess whether inference had a good understanding of the distribution or not. Values very close to 1.01.0 indicate that all chains discovered similar distributions for a particular random variable. We do not recommend using inference results where R^>1.01\hat{R} > 1.01, as inference may not have converged. In that case, you may want to run inference for more samples. However, there are situations in which increasing the number of samples will not improve convergence. In this case, it is possible that the prior is too far from the posterior, or that the particular inference method is unable to reliably explore the posterior distribution.

    Neff[1,N_\text{eff} \in [1, num_samples]] summarizes how independent posterior samples are from one another. Although inference was run for num_samples iterations, it's possible that those samples were very similar to each other (due to the way inference is implemented), and may not each be representative of the full posterior space. Larger numbers are better here, and if your particular use case calls for a certain number of samples to be considered, you should ensure that NeffN_\text{eff} is at least that large. For more information on R-hat and NeffN_\text{eff}, see the Diagnostics Section.

    In the case of our example model, we have a healthy R^\hat{R} value very close to 1.0, and a healthy relative number of effective samples.

    Diagnostic Plots

    Bean Machine can also plot diagnostic information to assess health of the inference run. Let's take a look:

    az.plot_trace(
    {"Reproduction rate": samples[reproduction_rate()]},
    compact=False,
    )
    loading...
    az.plot_autocorr({"Reproduction rate": samples[reproduction_rate()]})
    loading...

    The diagnostics output shows two diagnostic plots for individual random variables: trace plots and autocorrelation plots.

    • Trace plots are simply a time series of values assigned to random variables over each iteration of inference. The concrete values assigned are usually problem-specific. However, it's important that these values are "mixing" well over time. This means that they don't tend to get stuck in one region for large periods of time, and that each of the chains ends up exploring the same space as the other chains throughout the course of inference.
    • Autocorrelation plots measure how predictive the last several samples are of the current sample. Autocorrelation may vary between -1.0 (deterministically anticorrelated) and 1.0 (deterministically correlated). (We compute autocorrelation approximately, so it may sometimes exceed these bounds.) In an ideal world, the current sample is chosen independently of the previous samples: an autocorrelation of zero. This is not possible in practice, due to stochastic noise and the mechanics of how inference works. The autocorrelation plots here plot how correlated samples from the end of the chain are compared with samples taken from elsewhere within the chain, as indicated by the iteration index on the x axis.

    For our example model, we see from the trace plots that each of the chains are healthy: they don't get stuck, and do not explore a chain-specific subset of the space. From the autocorrelation plots, we see the absolute magnitude of autocorrelation to be very small, often well below 0.10.1, indicating a healthy exploration of the space.


    Congratulations, you've made it through the Overview! If you're looking to get an even deeper understanding of Bean Machine, check out the Framework topics next. Or, if you're looking to get to coding, check out our Tutorials. In either case, happy modeling!

    - + \ No newline at end of file diff --git a/docs/overview/api/index.html b/docs/overview/api/index.html index cf7fd16611..57a04dbb07 100644 --- a/docs/overview/api/index.html +++ b/docs/overview/api/index.html @@ -15,14 +15,14 @@ - +

    Application Programming Interface (API)

    Bean Machine

    ... [TODO[Brian]: Add instructions]

    Beanstalk

    ... [TODO[Brian]: Add instructions]

    - + \ No newline at end of file diff --git a/docs/overview/inference/index.html b/docs/overview/inference/index.html index 31501b1ee6..50999f1823 100644 --- a/docs/overview/inference/index.html +++ b/docs/overview/inference/index.html @@ -15,14 +15,14 @@ - +

    Inference

    Inference is the process of combining a model with data to obtain insights, in the form of probability distributions over values of interest.

    A little note on vocabulary: You've already seen in Modeling that the model in Bean Machine is comprised of random variable functions. In Bean Machine, the data is built up of a dictionary mapping random variable functions to their observed values, and insights take the form of discrete samples from a probability distribution. We refer to the random variables for which we're learning distributions as queried random variables.

    Let's make this concrete by returning to our disease modeling example. As a refresher, here's the full model:

    reproduction_rate_rate = 10.0
    num_init = 1087980
    time = [date(2021, 1, 1), date(2021, 1, 2), date(2021, 1, 3)]

    @bm.random_variable
    def reproduction_rate():
    return dist.Exponential(rate=reproduction_rate_rate)

    @bm.functional
    def num_total(today):
    if today <= time[0]:
    return num_init
    else:
    yesterday = today - timedelta(days=1)
    return num_new(today) + num_total(yesterday)

    @bm.random_variable
    def num_new(today):
    yesterday = today - timedelta(days=1)
    return dist.Poisson(reproduction_rate() * num_total(yesterday))

    Prior and Posterior Distributions

    The Exponential\text{Exponential} distribution used here represents our beliefs about the disease's reproduction rate before seeing any data, and is known as the prior distribution. We've visualized this distribution previously: it represents a reproduction rate that is around 10% on average, but could be as high as 50%, and is highly right-skewed (the right side has a long tail). Values associated with prior distributions (here reproduction_rate()) are known as latent variables.

    While the prior distribution encodes our prior beliefs, inference will perform the important task of adjusting latent variable values so that they balance both our prior belief and our knowledge from observed data. We refer to this distribution, after conditioning on observed data, as a posterior distribution. And the remaining parts of the generative model, which determine the notion of consistency used to match the latent variables with the observations, are collectively called the likelihood terms of the model (here consisting of num_total(today) and num_new(today)). The way inference is performed depends upon the specific numerical method used, but it does always mean that inferred distributions will blend smoothly from resembling your prior distribution, when there is little data observed, to more wholly representing your observed data, when there are many observations.

    Binding Data

    Inference requires us to bind data to the model in order to learn posterior distributions for our queried random variables. This is achieved by passing an observations dictionary to Bean Machine at inference time. Instead of sampling from random variables contained in that dictionary, Bean Machine will consider them to take on the constant values provided, and will try to find values for other random variables in your model that are consistent with the observations. For this example model, we can bind a few days of data as follows, taking care to match the Poisson\text{Poisson} distributions in num_new() with the corresponding increases in infection counts which they're modelling:

    case_history = tensor([num_init, 1381734., 1630446.])
    observations = {num_new(t): d for t, d in zip(time[1:], case_history.diff())}

    Though correct, that code is a bit difficult to read for pedagogical purposes. The following code is equivalent:

    observations = {
    num_new(date(2021, 1, 2)): tensor(293754.),
    num_new(date(2021, 1, 3)): tensor(248712.),
    }

    Recall that calls to random variable functions from ordinary functions (including the Python toplevel) return RVIdentifier objects. So, the keys of this dictionary are RVIdentifiers, and the values are values of observed data corresponding to each key that you provide. Note that the value for a particular observation must be of the same type as the support for the distribution that it's bound to. In this case, the support for the Poisson\text{Poisson} distribution is scalar and non-negative, so what we have bound here are bounded scalar tensors.

    Running Inference

    We're finally ready to run inference! Let's take a look first, and then we'll explain what's happening.

    samples = bm.CompositionalInference().infer(
    queries=[reproduction_rate()],
    observations=observations,
    num_samples=7000,
    num_adaptive_samples=3000,
    num_chains=4,
    )

    Let's break this down. There is an inference method (in this example, that's the CompositionalInference class), and there's a call to infer().

    Inference methods are simply classes that extend from AbstractInference. These classes define the engine that will be used in order to fit posterior distributions to queried random variables given observations. In this particular example, we've chosen to use the specific inference method CompositionalInference to run inference for our disease modeling problem.

    CompositionalInference is a powerful, flexible class for configuring inference in a variety of ways. By default, CompositionalInference will select an inference method for each random variable that is appropriate based on its support. For example, for differentiable random variables, this inference method will attempt to leverage gradient information when generating samples from the posterior; for discrete random variables, it will use a uniform sampler to get representative draws for each discrete value.

    A full discussion of the powerful CompositionalInference method, including extensive instructions on how to configure it to tailor specific inference methods for particular random variables, can be found in the Compositional Inference guide. Bean Machine offers a variety of other inference methods as well, which can perform differently based on the particular model you're working with. You can learn more about these inference methods under the MCMC Inference framework topic.

    Regardless of the inference method, infer() has a few important general parameters:

    NameUsage
    queriesA list of random variable functions to fit posterior distributions for.
    observationsThe Python dictionary of observations that we discussed in Binding Data.
    num_samplesThe integer number of samples with which to approximate the posterior distributions for the values listed in queries.
    num_adaptive_samplesThe integer number of samples to spend before num_samples on tuning the inference algorithm for the queries.
    num_chainsThe integer number of separate inference runs to use. Multiple chains can be used to verify that inference ran correctly.

    You've already seen queries and observations many times. num_adaptive_samples and num_samples are used to specify the number of iterations to respectively tune, and then run, inference. More iterations will allow inference to explore the posterior distribution more completely, resulting in more reliable posterior distributions. num_chains lets you specify the number of identical runs of the entire inference algorithm to perform, called "chains". Multiple chains of inference can be used to validate that inference ran correctly and was run for enough iterations to produce reliable results, and their behavior can also help detect whether the model was well specified. We'll revisit chains in MCMC Inference Methods.


    Now that we've run inference, it's time to explore our results in the Analysis section!

    - + \ No newline at end of file diff --git a/docs/overview/installation/index.html b/docs/overview/installation/index.html index ac6c30d421..b4281cbeed 100644 --- a/docs/overview/installation/index.html +++ b/docs/overview/installation/index.html @@ -15,14 +15,14 @@ - +

    Installation

    Did You Check Out Colab?

    The Google Colaboratory web service (Colab) is probably the quickest way to run Bean Machine. For example, here is what our Coin Flipping tutorial looks like on Colab. Similar links can be found for each of our tutorials in the Tutorials section.

    Requirements

    Python 3.7-3.10 and PyTorch 1.12.

    Latest Release

    Using pip you can get the latest release with the following command:

    pip install beanmachine

    Installing From Source

    To install from source, the first step is to clone the git repository:

    git clone https://github.com/facebookresearch/beanmachine.git
    cd beanmachine

    We recommend using conda to manage the virtual environment and install the necessary build dependencies.

    conda create -n {env name} python=3.8; conda activate {env name}
    conda install -c conda-forge boost-cpp eigen=3.4.0 # C++ dependencies
    pip install .

    If you are a developer and plan to experiment with modifying the code, we recommend replacing the last step above with:

    pip install -e ".[dev]"
    - + \ No newline at end of file diff --git a/docs/overview/modeling/index.html b/docs/overview/modeling/index.html index 918dee69eb..ccb6c363c4 100644 --- a/docs/overview/modeling/index.html +++ b/docs/overview/modeling/index.html @@ -15,14 +15,14 @@ - +

    Modeling

    Declarative Style

    Bean Machine allows you to express models declaratively, in a way that closely follows the notation that statisticians use in their everyday work. Consider our example from the Quick Start. We could express this mathematically as:

    • ninitn_\text{init}: known constant
    • reproduction_rateExponential(10.0)\texttt{reproduction\_rate} \sim \text{Exponential}(10.0)
    • nnewPoisson(reproduction_rateninit)n_\text{new} \sim \text{Poisson}(\texttt{reproduction\_rate} \cdot n_\text{init})

    Let's take a look at the model again:

    reproduction_rate_rate = 10.0
    num_init = 1087980

    @bm.random_variable
    def reproduction_rate():
    return dist.Exponential(rate=reproduction_rate_rate)

    @bm.random_variable
    def num_new(num_current):
    return dist.Poisson(reproduction_rate() * num_current)

    You can see how the Python code maps almost one-to-one to the mathematical definition. When building models in Bean Machine's declarative syntax, we encourage you to first think of the model mathematically, and then to evolve the code to fit to that definition.

    Importantly, note that there is no formal class delineating your model. This means you're maximally free to build models that feel organic with the rest of your codebase and compose seamlessly with models found elsewhere in your codebase. Of course, you're also free to consolidate related modeling functionality within a class, which can help keep your model appropriately scoped!

    Random Variable Functions

    Python functions annotated with @bm.random_variable, or random variable functions for short, are the building blocks of models in Bean Machine. This decorator denotes functions which should be treated by the framework as random variables to learn about.

    A random variable function must return a PyTorch distribution representing the probability distribution for that random variable, conditional on sample values for any other random variable functions that it depends on. For the most part, random variable functions can contain arbitrary Python code to model your problem! However, please do not depend on mutable external state (such as Python's random module), since Bean Machine will not be aware of it and your inference results may be invalid.

    As outlined in the next two sections, calling random variable functions has different behaviors depending upon the callee's context.

    Calling a Random Variable from Another Random Variable Function

    When calling a random variable function from within another random variable function, you should treat the return value as a sample from its underlying distribution. Bean Machine intercepts these calls, and will perform inference-specific operations in order to draw a sample from the underlying distribution that is consistent with the available observation data. Working with samples therefore decouples your model definition from the mechanics of inference going on under the hood.

    Calls to random variable functions are effectively memoized during a particular inference iteration. This is a common pitfall, so it bears repeating: calls to the same random variable function with the same arguments will receive the same sampled value within one iteration of inference. This makes it easy for multiple components of your model to refer to the same logical random variable. This means that the common statistical notation discussed previously in Declarative Style can easily map to your code: a programmatic definition like reproduction_rate() will always map to its corresponding singular statistical concept of nnewn_\text{new}, no matter how many times it is invoked within a single model. This can also be appreciated from a consistency point of view: if we define a new random variable tautology to be equal to reproduction_rate() <= 3.0 or reproduction_rate() > 3.0, the probability of tautology being True should be 11, but if each invocation of reproduction_rate produced a different value, this would not hold. In Defining Random Variable Families, we'll see how to control this memoization behavior with function parameters.

    Calling a Random Variable from an Ordinary Function

    It is valid to call random variable functions from ordinary Python functions. In fact, you've seen it a few times in the Quick Start already! We've used it to bind data, specify our queries, and access samples once inference has been completed. Under the hood, Bean Machine transforms random variable functions so that they act like function references. Here's an example, which we just call from the Python toplevel scope:

    num_new()
    RVIdentifier(function=<function num_new at 0x7ff00372d290>, arguments=())

    As you can see, the call to this random variable function didn't return a distribution, or a sample from a distribution. Rather, it resulted in an RVIdentifier object, which represents a reference to a random variable function. You as the user can't do much with this object on its own, but Bean Machine will use this reference to access and re-evaluate different parts of your model.

    Defining Random Variable Families

    As discussed in Calling a Random Variable from Another Random Variable Function, calls to a random variable function are memoized during a particular iteration of inference. How, then, can we create models with many random variables which have related but distinct distributions?

    Let's dive into this by extending our model. In the previous example, we were modeling the number of new cases on a given day as a function of the number of infected individuals on the previous day. What if we wanted to model the spread of disease over multiple days? This might correspond to the following mathematical model:

    • nini1Poisson(reproduction_rateni1)n_i-n_{i-1} \sim \text{Poisson}(\texttt{reproduction\_rate} \cdot n_{i-1}),
    • where nin_i represents the number of cases on day ii, and n0=ninitn_0=n_\text{init}.

    It is common for statistical models to group random variables together into a random variable family as you see here. In Bean Machine, the ability of indexing into random variable families is generalized to arbitrary serializable Python objects. As an example, we could use a discrete time domain, here represented as a list of datetime.date objects,

    from datetime import date, timedelta

    time = [date(2021, 1, 1), date(2021, 1, 2), date(2021, 1, 3)]

    in order to re-index the random varialble num_new() in our previous model:

    @bm.random_variable
    def num_new(today):
    yesterday = today - timedelta(days=1)
    return dist.Poisson(reproduction_rate() * num_total(yesterday))

    Note how this allows us to express a more complex dependency structure: where we previously relied on the argument num_current to describe the infections at some unspecified "current time", we can now use a more precise notion of (for example) "the day before today". This knowledge is in turn represented in another part of our probabilistic generative model, namely in the function num_total:

    # WARNING: INCORRECT COUNTER-EXAMPLE
    def num_total(today):
    if today <= time[0]:
    return num_init
    else:
    yesterday = today - timedelta(days=1)
    return num_new(today) + num_total(yesterday)

    Transforming Random Variables

    The problem in the above code is that we can't decorate num_total() with @bm.random_variable. The reason we cannot is that it doesn't return a PyTorch elementary probability distribution. But, without a @bm.random_variable decorator on this function, Bean Machine won't know that it should treat num_new() inside its body as a random variable function. As we discussed in Calling a Random Variable from an Ordinary Function, this call to num_new() would merely return an RVIdentifier, which is not what we want.

    What do we do then? What we need here, and what is also the last important construct in Bean Machine's modeling toolkit, is the @bm.functional decorator. This decorator behaves like @bm.random_variable, except that it does require the function it is decorating to return only elementary distributions. As such, it can be used to deterministically transform the results of one or more other @bm.random_variable or @bm.functional functions. With this construct we can now write this model as follows:

    @bm.functional
    def num_total(today):
    if today <= time[0]:
    return num_init
    else:
    yesterday = today - timedelta(days=1)
    return num_new(today) + num_total(yesterday)

    @bm.random_variable
    def num_new(today):
    yesterday = today - timedelta(days=1)
    return dist.Poisson(reproduction_rate() * num_total(yesterday))

    One last note: while a @bm.functional can be queried during inference, it can't have observations bound to it.


    Next, we'll look at how you can use Inference to fit data to your model.

    - + \ No newline at end of file diff --git a/docs/overview/packages/packages/index.html b/docs/overview/packages/packages/index.html index e4568e099d..63770c766a 100644 --- a/docs/overview/packages/packages/index.html +++ b/docs/overview/packages/packages/index.html @@ -15,7 +15,7 @@ - + @@ -23,7 +23,7 @@

    Hierarchical Mixed Effects

    Packages in Bean Machine let a user reuse tested, proven code for specific purposes, relieving a user from needing to write their own custom Bean Machine logic.

    Currently we have just one package, HME, but we encourage pull requests to add additional packages and we plan on adding additional packages as well, e.g., Gaussian Processes, in the future.

    Hierarchical Mixed Effects (HME)

    Hierarchical mixed effects (HME) models are frequently used in Bayesian Statistics.

    We created the HME Python package to make our current products’ code bases easier to maintain, make future statistical/ML work more efficient, and most importantly to ensure our HME methodology can be easily reused. The HME package will make hierarchical mixed effects methods widely accessible to the broader open-source community using Bean Machine.

    Fitting HME Models With Fixed+Random Effects and Flexible Priors

    This release is the first version of our HME Python package. The package is capable of fitting Bayesian hierarchical mixed effects models with:

    • any arbitrary fixed and random effects, and
    • it will allow users to flexibly specify priors as they wish.

    Bean Machine Graph For Faster Performance

    To fit hierarchical models, HME uses MCMC (Markov chain Monte Carlo) inference techniques powered by Bean Machine Graph (BMG), which runs critical pieces of code in C++ rather than Python, to speed up the inference process significantly.


    Facebook specific:

    These models are also frequently used at Facebook including Team Power and Metric Ranking products (https://fb.workplace.com/notes/418250526036381) as well as new pilot studies on https://fb.quip.com/GxwQAIscFRz8 and https://fb.quip.com/UMmcAr2zczbc. Additionally, the Probabilistic Programming Languages (https://www.internalfb.com/intern/bunny/?q=group%20pplxfn) (PPL) team has collected a list of https://fb.quip.com/rrMAAuk02Jqa who can benefit from our HME methodology.

    BMG: https://fb.quip.com/TDA7AIjRmScW

    Ignore--saved for formatting tips: Let's quickly translate the model we discussed in "Why Bean Machine?" into Bean Machine code! Although this will get you up-and-running, it's important that you read through all of the pages in the Overview to have a complete understanding of Bean Machine. Happy modeling!

    - + \ No newline at end of file diff --git a/docs/overview/quick_start/index.html b/docs/overview/quick_start/index.html index 25a0748f9a..32a1cccf24 100644 --- a/docs/overview/quick_start/index.html +++ b/docs/overview/quick_start/index.html @@ -15,7 +15,7 @@ - + @@ -23,7 +23,7 @@

    Quick Start

    Let's quickly translate the model we discussed in "Why Bean Machine?" into Bean Machine code! Although this will get you up-and-running, it's important that you read through all of the pages in the Overview to have a complete understanding of Bean Machine. If you're interested, the full source code for this Overview is available as a notebook on GitHub and Colab. Happy modeling!

    Modeling

    As a quick refresher, we're writing a model to understand a disease's reproduction rate, based on the number of new cases of that disease we've seen. Though we never observe the true reproduction rate, let's start off with a prior distribution that represents our beliefs about the reproduction rate before seeing any data.

    import beanmachine.ppl as bm
    import torch.distributions as dist

    reproduction_rate_rate = 10.0

    @bm.random_variable
    def reproduction_rate():
    # An Exponential distribution with rate 10 has mean 0.1.
    return dist.Exponential(rate=reproduction_rate_rate)

    There are a few things to notice here!

    • Most importantly, we've decorated this function with @bm.random_variable. This is how you tell Bean Machine to interpret this function probabilistically. @bm.random_variable functions are the building blocks of Bean Machine models, and let the framework explore different values that the function represents when fitting a good distribution for observed data that you'll provide later.
    • Next, notice that the function returns a PyTorch distribution. This distribution encodes your prior belief about a particular random variable. In the case of Exponential(10.0)\text{Exponential}(10.0), our prior has this shape:
    loading...
    • As you can see, the prior encourages smaller values for the reproduction rate, averaging at a rate of 10%10\%, but allows for the possibility of much larger spread rates.
    • Lastly, realize that although you've provided a prior distribution here, the framework will automatically "refine" this distribution, as it searches for values that represent observed data that you'll provide later. So, after we fit the model to observed data, the random variable will no longer look like the graph shown above!

    The last piece of the model describes how the reproduction rate relates to the new cases we observe the subsequent day. This number of new cases is related to the underlying reproduction rate -- how fast the virus tends to spread -- as well as the current number of cases. However, it's not a deterministic function of those two values. Instead, it depends on a lot of environmental factors like social behavior, stochasticity of transmission, and so on. It would be far too complicated to capture all of those factors in a single model. Instead, we'll aggregate all of these environmental factors in the form of a probability distribution, the Poisson\text{Poisson} distribution.

    Let's say, for this example, we observed a little over a million, 10879801087980, cases today. We use such a precise number here to remind you that this is a known value and not a random one. In this case, if the disease were to happen to have a reproduction rate of 0.10.1, this is what our Poisson\text{Poisson} distribution for new cases would look like:

    loading...

    Let's write this up in Bean Machine. Using the syntax we've already seen, it's pretty simple:

    @bm.random_variable
    def num_new(num_current):
    return dist.Poisson(reproduction_rate() * num_current)

    As you can see, this function relies on the reproduction_rate() that we defined before. Do notice: even though reproduction_rate() returns a distribution, here the return value from reproduction_rate() is treated like a sample from that distribution! Bean Machine works hard behind the scenes to sample efficiently from distributions, so that you can easily build sophisticated models that only have to reason about these samples.

    Data

    With the model fully defined, we should gather some data to learn about! In the real world, you might work with a government agency to determine the number of real, new cases observed on the next day. For the sake of our example, let's say that we observed 238154238154 new cases on the next day. Bean Machine's random variable syntax allows you to bind this information directly as an observation for the num_new() random variable within a simple Python dictionary. Here's how to do it:

    from torch import tensor

    num_init = 1087980

    observations = {
    # PyTorch distributions expect tensors
    num_new(num_init): tensor(238154.),
    }

    Using a random variable function and its arguments as keys in this dictionary may feel unusual at first, but it quickly becomes an intuitive way to reference these random variable functions by name! Note also that we're using num_init as an argument to the random variable function. This might seem unnecessary, since num_init could simply remain a global constant in this example, but a similar indexing scheme for num_new() will come in handy when we extend the model to time series with more than a single time step.

    Inference

    With model and observations in hand, we're ready for the fun part: inference! Inference is the process of combining a model with data to obtain insights, in the form of probability distributions over values of interest. Bean Machine offers a powerful and general inference framework to enable fitting arbitrary models to data.

    The call to inference involves first creating an appropriate inference engine object and then invoking the infer method:

    samples = bm.CompositionalInference().infer(
    queries=[reproduction_rate()],
    observations=observations,
    num_samples=7000,
    num_adaptive_samples=3000,
    )

    There's a lot going on here! First, let's take a look at the inference method that we used, CompositionalInference(). Bean Machine supports generic inference, which means that it can fit your model to the data without knowing the intricate and particular workings of the model that you defined. However, there are lots of ways of performing this, and Bean Machine supports a rich library of inference methods that can work for different kinds of models. For now, all you need to know is that CompositionalInference is a general inference strategy that will try to automatically determine the best inference method(s) to use for your model, based on the definitions of random variables you've provided. It should work well for this simple model. You can check out our guides on Inference to learn more!

    Let's take a look at the parameters to infer(). In queries, you provide a list of random variables that you're interested in learning about. Bean Machine will learn probability distributions for these, and will return them to you when inference completes! Note that this uses exactly the same pattern to reference random variables that we used when binding data.

    We bind our real-world observations with the observations parameter. This provides a set of probabilistic constraints that Bean Machine seeks to satisfy during inference. In particular, Bean Machine tries to fit probability distributions for unobserved random variables, so that those probability distributions explain the observed data -- and your prior beliefs -- well.

    Lastly, num_samples is the number of samples that you want to learn. Bean Machine doesn't learn smooth probability distributions for your queries, but instead accumulates a representative set of samples from those distributions. This parameter lets you specify how many samples should comprise these distributions.

    Analysis

    Our results are ready! Let's visualize them for the reproduction rate parameter.

    The samples object that we have now contains samples from the probability distributions that we've fit for our model and data. It supports dictionary-like indexing using -- you guessed it -- the same random variable referencing syntax we've seen before. A second index (here, [0]) selects one of the inference chains generated by the sampling algorithm; this will be explained in the Inference section, so let us just use 0 for now.

    reproduction_rate_samples = samples[reproduction_rate()][0]
    reproduction_rate_samples
    Out:

    tensor([0.0146, 0.1720, 0.1720, ..., 0.2187, 0.2187, 0.2187])

    Let's visualize that more intuitively.

    loading...

    This histogram represents our beliefs over the underlying reproduction rate, after observing the current day's worth of new cases. You'll note that it is balancing our prior beliefs with the rate that we would learn just from looking at the new data. It also captures the uncertainty inherent in our estimate!

    We're Not Done Yet!

    This is the tip of the iceberg. The rest of this Overview will cover critical concepts from the above sections. Read on to learn how to make the most of Bean Machine's powerful modeling and inference systems!

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference/index.html b/docs/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference/index.html index 8b13306ff0..cc7287d99a 100644 --- a/docs/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference/index.html +++ b/docs/overview/tutorials/Automatic_differentiation_variational_inference/AutomaticDifferentiationVariationalInference/index.html @@ -15,7 +15,7 @@ - + @@ -34,7 +34,7 @@ 1-dimensional latent random variable. It also uses a Gaussian variational approximation, but this is appropriate for this example since by conjugacy we know this assumption is valid. Hence, we expect ADVI to yield a good approximation:

    v_world = ADVI(queries=[mu()], observations=observations,).infer(
    num_steps=1000,
    )
    print(v_world.get_guide_distribution(mu()))
    Out:

    0%| | 0/1000 [00:00<?, ?it/s]

    Out:

    Normal(loc: tensor([1.0096], requires_grad=True), scale: tensor([0.3336], grad_fn=<SoftplusBackward0>))

    Below we visualize the density functions for the target and the ADVI approximation.

    with torch.no_grad():
    xs = torch.linspace(-4, 4, steps=100)
    sns.lineplot(
    data=pd.DataFrame({
    'mu': xs,
    'target': dist.Normal(expected_mean, expected_std).log_prob(xs),
    'ADVI approximation': v_world.get_guide_distribution(mu()).log_prob(xs),
    }).melt(id_vars=['mu'], value_name='log_prob'),
    x='mu',
    y='log_prob',
    hue='variable',
    )

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression/index.html b/docs/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression/index.html index da3fde4600..aa68484c4a 100644 --- a/docs/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression/index.html +++ b/docs/overview/tutorials/Bayesian_Logistic_Regression/BayesianLogisticRegression/index.html @@ -15,7 +15,7 @@ - + @@ -65,7 +65,7 @@ without knowing the true parameters ahead of time, we would deduce that the separating line had a slightly lower slope than 0.60.6 and an intercept around 3.0-3.0.

    To more clearly illustrate the accuracy of the inference, we can take a random selection of the inferred lines and plot them on the data set:

    # Required for visualizing in Colab.
    output_notebook(hide_banner=True)

    # Replicate the original data separating plot above.
    randomly_selected_lines_plot = plots.scatter_plot(
    plot_sources=[orange_cds, blue_cds],
    tooltips=[orange_tips, blue_tips],
    figure_kwargs={
    "title": "Synthetic data with categories",
    "x_axis_label": "x",
    "y_axis_label": "y",
    },
    legend_items=["Category orange", "Category blue"],
    plot_kwargs={"fill_color": "label"},
    )

    # Add randomly selected sampled separating lines.
    num_lines = 25
    sampled_indices = torch.randint(0, len(slopes), (num_lines,)).tolist()
    xs = []
    ys = []
    for sampled_index in sampled_indices:
    sampled_slope = slopes[sampled_index]
    sampled_intercept = intercepts[sampled_index]
    x, y = plot_line(sampled_slope, sampled_intercept)
    xs.append(x)
    ys.append(y)
    cds = ColumnDataSource({"xs": xs, "ys": ys})
    glyph = MultiLine(xs="xs", ys="ys", line_color="magenta", line_alpha=0.2)
    randomly_selected_lines_plot.add_glyph(cds, glyph)

    # Add the separating line.
    x, y = plot_line(true_slope, true_intercept)
    randomly_selected_lines_plot.line(
    x=x,
    y=y,
    legend_label="Separating line",
    line_color="black",
    line_width=3,
    line_alpha=1,
    )

    show(randomly_selected_lines_plot)
    loading...
    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi/index.html b/docs/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi/index.html index 310e08f051..30c95885c5 100644 --- a/docs/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi/index.html +++ b/docs/overview/tutorials/Bayesian_NNs_with_ADVI/BayesianNnsWithAdvi/index.html @@ -15,7 +15,7 @@ - + @@ -56,7 +56,7 @@ changes to enable batch sampling.

    def predictions(X, samples=100):
    il = d(nn.input_layer()).expand((samples,-1, -1)).sample()
    y1 = torch.tanh(torch.matmul(X, il))
    hl = d(nn.hidden_layer()).expand((samples, -1, -1)).sample()
    y2 = torch.tanh(torch.matmul(y1, hl))
    ol = d(nn.output_layer()).expand((samples, -1)).sample()
    y3 = torch.sigmoid(torch.einsum('bij,bj->bi', y2, ol))
    return dist.Bernoulli(y3).sample()

    We visualise our predictions to show that the confidence of the prediction decreases as we approach the boundary.

    import numpy as np

    x_points = 100
    y_points = 100

    x = np.linspace(-3, 3, x_points)
    y = np.linspace(-3, 3, y_points)
    xx, yy = np.meshgrid(x, y)
    grid_2d = torch.tensor([xx, yy], dtype=torch.float).reshape(2, -1).T
    preds = predictions(grid_2d).mean(axis=0).reshape(x_points, y_points)


    from bokeh.plotting import figure, output_file, show
    p = figure(width=400, height=400)
    p.x_range.range_padding = p.y_range.range_padding = 0

    p.image(image=[preds.numpy()], x=-2, y=-2, dw=5, dh=4, palette="PRGn11", level="image")
    p.grid.grid_line_width = 0

    p.circle(X[Y==0,0].numpy(), X[Y==0,1].numpy(), color="yellow")
    p.circle(X[Y==1,0].numpy(), X[Y==1,1].numpy(), color="cyan")

    show(p)
    Out:

    /home/zv/upstream/miniconda3/envs/bean-machine/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ../torch/csrc/utils/tensor_new.cpp:204.)

    import sys

    loading...

    As we can see, the posterior inference is effective and not just separating the classes, but also highlighting where we uncertainty within our model.

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries/index.html b/docs/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries/index.html index 692d9e6cad..c4fb896030 100644 --- a/docs/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries/index.html +++ b/docs/overview/tutorials/Bayesian_Structural_Time_Series/BayesianStructuralTimeSeries/index.html @@ -15,7 +15,7 @@ - + @@ -171,7 +171,7 @@ for the aleatoric uncertainty, the corresponding prediction intervals would be a great deal wider.

    In either case, by using Bean Machine we can handle epistemic and aleatoric uncertainty quite easily with only about 1-2 lines of extra code!

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Coin_flipping/CoinFlipping/index.html b/docs/overview/tutorials/Coin_flipping/CoinFlipping/index.html index 4210bd7f81..389683a582 100644 --- a/docs/overview/tutorials/Coin_flipping/CoinFlipping/index.html +++ b/docs/overview/tutorials/Coin_flipping/CoinFlipping/index.html @@ -15,7 +15,7 @@ - + @@ -115,7 +115,7 @@ the author's machine is about 40x. Generally speaking, larger speedups are expected with larger sample sizes. More information about BMGInference can be found on the website in "Advanced" section of the documentation.

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components/index.html b/docs/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components/index.html index 94c5d5b09d..c167174d21 100644 --- a/docs/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components/index.html +++ b/docs/overview/tutorials/GMM_with_2_dimensions_and_4_components/GmmWith2DimensionsAnd4Components/index.html @@ -15,7 +15,7 @@ - + @@ -53,7 +53,7 @@ (component) for each of the data points (y) at the start of MCMC. This likely won't be very good, since we haven't burned in the chain.

    t = 0
    components = np.array(
    [
    posterior_samples.get_variable(gmm.component(i)).squeeze()[t].item()
    for i in range(n)
    ]
    )
    _k = gmm.K
    fig = draw_points_and_components(
    np.vstack(
    [
    prior_sample.get_variable(gmm.y(i)).squeeze()[-1].detach().numpy()
    for i in range(n)
    ]
    ),
    components,
    np.vstack(
    [
    posterior_samples.get_variable(gmm.mu(i)).squeeze()[t, :].detach().numpy()
    for i in range(_k)
    if i in np.unique(components)
    ]
    ),
    np.array(
    [
    posterior_samples.get_variable(gmm.sigma(i)).squeeze()[t].item()
    for i in range(_k)
    if i in np.unique(components)
    ]
    ),
    )
    fig.show()
    loading...

    After running n_samples MCMC steps, the effects of initialization should be diminished.

    t = n_samples - 1
    components = np.array(
    [
    posterior_samples.get_variable(gmm.component(i)).squeeze()[t].item()
    for i in range(n)
    ]
    )
    _k = gmm.K
    fig = draw_points_and_components(
    np.vstack(
    [
    prior_sample.get_variable(gmm.y(i)).squeeze()[-1].detach().numpy()
    for i in range(n)
    ]
    ),
    components,
    np.vstack(
    [
    posterior_samples.get_variable(gmm.mu(i)).squeeze()[t, :].detach().numpy()
    for i in range(_k)
    if i in np.unique(components)
    ]
    ),
    np.array(
    [
    posterior_samples.get_variable(gmm.sigma(i)).squeeze()[t].item()
    for i in range(_k)
    if i in np.unique(components)
    ]
    ),
    )
    fig.show()
    loading...
    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch/index.html b/docs/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch/index.html index 58eabf0466..5b22e12066 100644 --- a/docs/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch/index.html +++ b/docs/overview/tutorials/Gaussian_Process_Gpytorch/GaussianProcessGpytorch/index.html @@ -15,7 +15,7 @@ - + @@ -49,7 +49,7 @@ broadcasting of the data dimension to the right.

    gp.eval()  # converts to Gpytorch model in eval mode
    gp.bm_load_samples(
    {
    "kernel.outputscale_prior": outputscale_samples,
    "kernel.base_kernel.lengthscale_prior": lengthscale_samples,
    "kernel.base_kernel.period_length_prior": period_length_samples,
    "likelihood.noise_covar.noise_prior": noise_samples,
    "mean.mean_prior": mean_samples,
    }
    )
    expanded_test_x = x_test.unsqueeze(0).repeat(num_samples, 1, 1)
    output = gp(expanded_test_x)

    Now we let's plot a few predictive samples from our GP. As you can see, we can draw different kernels, each of which paramaterizes a Multivariate Normal.

    if not smoke_test:
    with torch.no_grad():
    f, ax = plt.subplots(1, 1, figsize=(8, 5))
    ax.plot(x_train.numpy(), y_train.numpy(), "k*", zorder=10)
    ax.plot(
    x_test.numpy(),
    output.mean.median(0)[0].detach().numpy(),
    "b",
    linewidth=1.5,
    )
    for i in range(min(20, num_samples)):
    ax.plot(
    x_test.numpy(),
    output.mean[i].detach().numpy(),
    "gray",
    linewidth=0.3,
    alpha=0.8,
    )
    ax.legend(["Observed Data", "Median", "Sampled Means"])

    References

    [1] Rasmussen, Carl and Williams, Christopher. Gaussian Processes for Machine Learning. 2006.

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel/index.html b/docs/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel/index.html index 35b4788f96..808488944a 100644 --- a/docs/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel/index.html +++ b/docs/overview/tutorials/Hidden_Markov_model/HiddenMarkovModel/index.html @@ -15,7 +15,7 @@ - + @@ -90,7 +90,7 @@ the underlying synthetic data which was generated at the same time as the observations.

    def log_likelihood(xs, ys, thetas, mus, sigmas, N):
    """Returns the log likelihood of the HMM model conditioned on the data"""
    result = 0
    # transition probabilities
    for n in range(1, N):
    result += torch.log(thetas[xs[n - 1], xs[n]])
    # emission probabilities
    for n in range(N):
    result += dist.Normal(mus[xs[n]], sigmas[xs[n]]).log_prob(ys[n])
    return result


    # computes the log likelihood of the HMM model per iteration
    ppcs = [
    log_likelihood(x, y_obs, thetas_obs, mu, sigma, N)
    for x, mu, sigma in zip(x_samples.int(), mu_samples, sigma_samples)
    ]
    plt.figure(figsize=(12, 6))
    plt.plot(ppcs, label="Sample", c="g")
    # plotting the ground truth for reference
    plt.plot(
    [log_likelihood(x_obs, y_obs, thetas_obs, mus_obs, sigmas_obs, N)] * num_samples,
    label="Grond truth",
    c="r",
    )
    plt.ylabel("Log likelihood")
    plt.legend()
    plt.show()

    From the above plot, inference appears to be doing a good job of fitting the random variables given the observed data. Inference appears to converge with a log likelihood scores near to those generated by the ground truth parameters.

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Hierarchical_modeling/HierarchicalModeling/index.html b/docs/overview/tutorials/Hierarchical_modeling/HierarchicalModeling/index.html index 3530cfb66e..32cd457b2a 100644 --- a/docs/overview/tutorials/Hierarchical_modeling/HierarchicalModeling/index.html +++ b/docs/overview/tutorials/Hierarchical_modeling/HierarchicalModeling/index.html @@ -15,7 +15,7 @@ - + @@ -239,7 +239,7 @@ doi: 10.1201/9780429029608
  • NeffN_{\text{eff}} MCMC Handbook
  • R^\hat{R} Project Euclid
  • Tarone RE (1982) The use of historical control information in testing for a trend in proportions. Biometrics 38(1):215–220 doi: 10.2307/2530304doi: 10.1214/20-BA1221
  • Wikipedia (All-time-players)
  • Wikipedia (Bernoulli trials)
  • Wikipedia (Binomial)
  • Wikipedia (Major League Baseball)
  • - + \ No newline at end of file diff --git a/docs/overview/tutorials/Hierarchical_regression/HierarchicalRegression/index.html b/docs/overview/tutorials/Hierarchical_regression/HierarchicalRegression/index.html index 7e63a2c31b..107e9ba6b2 100644 --- a/docs/overview/tutorials/Hierarchical_regression/HierarchicalRegression/index.html +++ b/docs/overview/tutorials/Hierarchical_regression/HierarchicalRegression/index.html @@ -15,7 +15,7 @@ - + @@ -138,7 +138,7 @@ Folding, and Localization: An Improved R^\hat{R} for Assessing Convergence of MCMC (with Discussion). Bayesian Analysis 16(2) 667–718. doi: 10.1214/20-BA1221.
    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Item_Response_Theory/ItemResponseTheory/index.html b/docs/overview/tutorials/Item_Response_Theory/ItemResponseTheory/index.html index f668d371ab..74f0097061 100644 --- a/docs/overview/tutorials/Item_Response_Theory/ItemResponseTheory/index.html +++ b/docs/overview/tutorials/Item_Response_Theory/ItemResponseTheory/index.html @@ -15,7 +15,7 @@ - + @@ -152,7 +152,7 @@ Folding, and Localization: An Improved R^\hat{R} for Assessing Convergence of MCMC (with Discussion). Bayesian Analysis 16(2) 667–718. doi: 10.1214/20-BA1221.
    - + \ No newline at end of file diff --git a/docs/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation/index.html b/docs/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation/index.html index 1ebba59891..53bbc07a48 100644 --- a/docs/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation/index.html +++ b/docs/overview/tutorials/MLE_and_MAP_point_estimation/MleAndMapPointEstimation/index.html @@ -15,7 +15,7 @@ - + @@ -41,7 +41,7 @@ Tikhonov or L2L_2 regularization where the regularization parameters λ=σ2\lambda = \sigma^{-2} the prior variance: $β^L2,λ=(XX+σ2I)1Xy\hat{\beta}_{L_2,\lambda} = (X^\top X + \sigma^{-2} I)^{-1} X^\top y$

    X_full = torch.cat([data_X, torch.ones((N,1))], dim=1)
    beta_l2 = (torch.linalg.inv(X_full.T @ X_full + sigma**-2 * torch.eye(2)) @ X_full.T @ data_Y)
    print(beta_l2)
    Out:

    tensor([1.7862, 4.4998])

    ax.plot(xs, torch.cat([xs.unsqueeze(1), torch.ones((len(xs),1))], dim=1) @ beta_l2, color='magenta', label='L2')
    ax.legend()
    fig

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Neals_funnel/NealsFunnel/index.html b/docs/overview/tutorials/Neals_funnel/NealsFunnel/index.html index 9a34194f0d..4586ce9e4b 100644 --- a/docs/overview/tutorials/Neals_funnel/NealsFunnel/index.html +++ b/docs/overview/tutorials/Neals_funnel/NealsFunnel/index.html @@ -15,7 +15,7 @@ - + @@ -133,7 +133,7 @@ larger sample sizes. More information about BMGInference can be found on the website in "Advanced" section of the documentation.

    We can confirm that BMGInference provides good accuracy by examining R^\hat{R} values and examining the marginal plots in the next two code cells.

    single_site_bmg_summary_df = az.summary(single_site_bmg_samples.to_inference_data())
    Markdown(single_site_bmg_summary_df.to_markdown())
    meansdhdi_3%hdi_97%mcse_meanmcse_sdess_bulkess_tailr_hat
    x()-0.0585.746-8.3477.750.1020.17431548071
    z()-0.0853.047-5.2536.060.1820.1292742531.01
    z_marginal = single_site_bmg_samples[z()].flatten().detach()
    x_marginal = single_site_bmg_samples[x()].flatten().detach()

    print(f"z_marginal: {z_marginal}\n" f"x_marginal: {x_marginal}")

    grid = mpl.gridspec.GridSpec(4, 4)

    plt.subplot(grid[1:, :3])
    plt.contour(
    xs.numpy(),
    zs.numpy(),
    density.log().numpy(),
    levels=range(-10, 0),
    zorder=0,
    )
    plt.scatter(x_marginal.numpy(), z_marginal.numpy(), alpha=0.25)
    plt.xlabel("x")
    plt.ylabel("z")
    plt.xlim(-50, 50)
    plt.ylim(-15, 15)

    plt.subplot(grid[0, :3])
    plt.hist(x_marginal.numpy(), bins=60, density=True, range=(-50, 50))
    plt.ylabel("density")
    plt.xlim(-50, 50)
    plt.gca().axes.get_xaxis().set_ticklabels([])

    plt.subplot(grid[1:, 3])
    zs_marginal = torch.linspace(-10, 10, 100)
    plt.hist(
    z_marginal.numpy(),
    bins=60,
    density=True,
    range=(-15, 15),
    orientation="horizontal",
    )
    plt.plot(
    dist.Normal(0, 3).log_prob(zs_marginal).exp().numpy(),
    zs_marginal.numpy(),
    color="black",
    )
    plt.xlabel("density")
    plt.ylim(-15, 15)
    plt.gca().axes.get_yaxis().set_ticklabels([]);
    Out:

    z_marginal: tensor([-6.8999, -4.1096, -5.5291, ..., 1.4906, 1.4906, 1.3204])

    x_marginal: tensor([-0.0360, 0.0126, 0.1043, ..., -0.5560, -1.7656, -2.2602])

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Probabilistic_PCA/ProbabilisticPca/index.html b/docs/overview/tutorials/Probabilistic_PCA/ProbabilisticPca/index.html index 2ee9741604..d495429316 100644 --- a/docs/overview/tutorials/Probabilistic_PCA/ProbabilisticPca/index.html +++ b/docs/overview/tutorials/Probabilistic_PCA/ProbabilisticPca/index.html @@ -15,7 +15,7 @@ - + @@ -59,7 +59,7 @@ WR2W \in \mathbb{R}^2. It should be aligned (up to scaling) with the true principal component.

    fig, ax = plt.subplots()
    ax.scatter(train_data[x()][:,0], train_data[x()][:,1], color='blue', alpha=0.05)
    ax.arrow(0, 0, *train_data[w()].flatten(), linewidth=2, color='red', head_width=0.3, label='True PC1')
    for _ in range(100):
    ax.arrow(0, 0, *2*v_world.get_guide_distribution(w()).sample().flatten().detach(), linewidth=2, color='yellow', head_width=0.5, alpha=0.05, label='PCA ADVI' if _ == 0 else None)
    ax.axis([-10, 10, -10, 10])
    ax.legend()
    Out:

    <matplotlib.legend.Legend at 0x149e48a90>

    As another check, we verify whether the variational approximations generate data that is similar to the original generative model sample.

    fig, ax = plt.subplots()
    ax.scatter(train_data[x()][:,0], train_data[x()][:,1], color='blue', alpha=0.05, label='true data')
    with torch.no_grad():
    x_gen = dist.Normal(
    loc=v_world.get_guide_distribution(z()).sample() @ v_world.get_guide_distribution(w()).sample(),
    scale=sigma,
    ).sample()
    ax.scatter(x_gen[:,0], x_gen[:,1], color='red', alpha=0.05, label='generated')
    ax.axis([-10, 10, -10, 10])
    ax.legend()
    Out:

    <matplotlib.legend.Legend at 0x149f1de50>

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression/index.html b/docs/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression/index.html index 09548392fe..336f12822f 100644 --- a/docs/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression/index.html +++ b/docs/overview/tutorials/Robust_Linear_Regression/RobustLinearRegression/index.html @@ -15,7 +15,7 @@ - + @@ -107,7 +107,7 @@ Folding, and Localization: An Improved R^\hat{R} for Assessing Convergence of MCMC (with Discussion). Bayesian Analysis 16(2) 667–718. doi: 10.1214/20-BA1221.
    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression/index.html b/docs/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression/index.html index 157989af3e..3f9aa89309 100644 --- a/docs/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression/index.html +++ b/docs/overview/tutorials/Sparse_Logistic_Regression/SparseLogisticRegression/index.html @@ -15,7 +15,7 @@ - + @@ -156,7 +156,7 @@ http://proceedings.mlr.press/v5/carvalho09a/carvalho09a.pdf.
  • Piironen J, Vehtari A. Sparsity information and regularization in the horseshoe and other shrinkage priors. Electronic Journal of Statistics. 2017;11(2) 5018–5051. doi: 10.1214/17-EJS1337SI.
  • - + \ No newline at end of file diff --git a/docs/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel/index.html b/docs/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel/index.html index 666e5882c2..046d84ad5a 100644 --- a/docs/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel/index.html +++ b/docs/overview/tutorials/VI_generalized_linear_mixed_model/ViGeneralizedLinearMixedModel/index.html @@ -15,7 +15,7 @@ - + @@ -47,7 +47,7 @@ affects the VI objective through the data likelihood, and the plot below shows that an ELBO maximizing approximation in general assigns lower uncertainty to county random effects with more data.

    fig, ax = plt.subplots(figsize=(10, 7))
    ax.plot(np.log1p(county_counts['count']), stds[county_counts.county_index], 'o')
    ax.set(
    ylabel='Posterior std. deviation',
    xlabel='County log-count',
    title='Having more observations generally\nlowers estimation uncertainty'
    );

    - + \ No newline at end of file diff --git a/docs/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData/index.html b/docs/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData/index.html index ca2a279fda..3c43f50889 100644 --- a/docs/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData/index.html +++ b/docs/overview/tutorials/Zero_inflated_count_data/ZeroInflatedCountData/index.html @@ -15,7 +15,7 @@ - + @@ -265,7 +265,7 @@ https://en.wikipedia.org/wiki/Nuisance_parameter.
  • Wikipedia-Poisson distribution https://en.wikipedia.org/wiki/Poisson_distribution#General.
  • Wikipedia-PVC https://en.wikipedia.org/wiki/Premature_ventricular_contraction.
  • - + \ No newline at end of file diff --git a/docs/overview/why_bean_machine/index.html b/docs/overview/why_bean_machine/index.html index a3a6137800..00abe82e54 100644 --- a/docs/overview/why_bean_machine/index.html +++ b/docs/overview/why_bean_machine/index.html @@ -15,7 +15,7 @@ - + @@ -27,7 +27,7 @@ It also allows Bean machine to easily reorder model execution or perhaps update only a subgraph, saving significant amounts of compute in models with many latent variables.

    Programmable Inference

    Bean Machine allows the user to design and apply powerful inference methods. Because Bean Machine can propose updates for random variables or groups of random variables individually, the user is free to customize the method which it uses to propose those values. Different inference methods can be supplied for different families of random variables. For example, a particular model can leverage gradient information when proposing values for differentiable random variables, and at the same time might sample from discrete ones with a particle filter. This "compositional inference" pattern enables seamless interoperation among any MCMC-based inference strategies.

    At the same time, the user has control over which variables should be updated ("blocked") together versus independently, for instance for random variables that are tightly correlated. This "multi-site inference" may be able to further exploit multiple sites with inference-specific optimizations. BeanMachine's CompositionalInference API balances this flexibility with automation, automatically using proposers based on the support of the random variable, while allowing the user to specify how to build the best compositional MCMC proposer with virtually no additional effort.

    Advanced Methods

    Bean Machine supports a variety of classic inference methods such as ancestral sampling and the No-U-Turn sampler (NUTS). However, the framework also leverages single-site understanding of the model in order to provide efficient methods that take advantage of higher-order gradients and model structure.

    Bean Machine includes the first implementation of Newtonian Monte Carlo (NMC) in a more general platform. NMC utilizes second-order gradient information to construct a multivariate Gaussian proposer that takes local curvature into account. As such, it can produce sample very efficiently with no warmup period when the posterior is roughly Gaussian. Bean Machine's structural understanding of the model lets us keep computation relatively cheap by only modeling a subset of the space that is relevant to updating a particular random variable.

    For certain domains, prepackaged inference methods may not be the best tool for the job. For example, if dealing with a problem specified in spherical coordinates, it may be useful to incorporate a notion of spherical locality into the inference proposal. Or, you may want to incorporate some notion of ordering when dealing with certain discrete random variables. Bean Machine exposes a flexible abstraction called custom proposers for just this problem. Custom proposers let the user design powerful new inference methods from the building blocks of existing ones, while easily plugging into Bean Machine's multi-site paradigm.

    Bean Machine Graph Compilation

    PyTorch offers strong performance for models comprised of a small number of large tensors. However, many probabilistic models have a rich or sparse structure that is difficult to write in terms of just a handful of large tensor operations. Also, certain inference algorithms such as NUTS have dynamic control flow, which incurs a significant amount of Python and PyTorch overhead during execution.

    To address this, we are developing an experimental inference runtime called Bean Machine Graph (BMG) Inference. BMG Inference is a specialized combination of a compiler and a fast, independent C++ runtime that is optimized to run inference even for un-tensorized models. By design, BMG Inference has the same interface as other Bean Machine inference methods, relying on a custom behind-the-scenes compiler to interpret your model and translate it to a faster implementation with no Python dependencies.

    BMG Inference routinely achieves 1 to 2 orders-of-magnitude speedup for untensorized models. However, please note that this infrastructure is under development, and the supported feature set may be limited.

    - + \ No newline at end of file diff --git a/docs/posterior_predictive_checks/index.html b/docs/posterior_predictive_checks/index.html index 275bbd8957..5e961652be 100644 --- a/docs/posterior_predictive_checks/index.html +++ b/docs/posterior_predictive_checks/index.html @@ -15,7 +15,7 @@ - + @@ -26,7 +26,7 @@ to simulate is only the observations since those are the values we are querying. The samples for the other random variables have already been collected from inference.

    # run inference
    num_infer_samples = 30
    num_sim_samples = 50
    posterior = mcmc.infer(queries, obs, num_samples=30)

    # generate predictives from our posterior
    x_post_pred = simulate(observations.keys(),
    posterior=posterior,
    num_samples=100)
    assert x_post_pred[queries[0]].shape == (1, num_infer_samples, num_sim_samples)

    Note the shape here; since simulate is an inference subroutine under the hood (one in which we just forward sample the model), in theory, it can be run with multiple chains. For this example, we only have one chain. Then for each Monte Carlo sample of our posterior, we sample num_sim_samples many coin flips. We can then use Empirical to sample from this resulting bag of samples. From here, one can compute various statistics on the posterior predictive data and compare with the ground truth data to assess model fitness.


    1. Gelman, A., et al. Understanding predictive information criteria for Bayesian models. https://arxiv.org/abs/1307.5928.
    - + \ No newline at end of file diff --git a/docs/programmable_inference/index.html b/docs/programmable_inference/index.html index 11ce7f533c..740fb4871b 100644 --- a/docs/programmable_inference/index.html +++ b/docs/programmable_inference/index.html @@ -15,14 +15,14 @@ - +

    Programmable Inference

    Programmable inference is a key feature of Bean Machine, and is achieved through three key techniques:

    • Compositional inference allows you to utilize distinct inference methods for different random variables when fitting a model. Bean Machines's single-site paradigm makes composeability possible as it allows you to modularly mix-and-match inference components to get the most out of your model.
    • Block inference allows you to propose updates for several random variables jointly, which can be necessary when dealing with highly-correlated variables.
    • Custom proposers allow you to leverage domain-specific transformations or custom proposers on a per-variable basis, which can be especially powerful to avoid worse edge-case performance when running inference over constrained random variables.

    These techniques together, which we call programmable inference, give the inference engine sufficient configurability for users to achieve efficient performance without writing a complete model-specific inference algorithm, and help close the performance gap between general-purpose and model-specific handwritten inference. In the rest of this section we expand on each of these concepts.

    It is worth noting that supporting these techniques is facilitiated by Bean Machine's choice of declarative syntax, which explicates the statistical models' dependency structure, namely, the directed acyclic graph (DAG). Random variables are specified independently of the order in which they are sampled during inference and the inference engine has direct access to the code block defining each variable, and can execute these blocks in the order required by the inference algorithm.

    - + \ No newline at end of file diff --git a/docs/random_walk/index.html b/docs/random_walk/index.html index cac4a8b8be..41732f3e7a 100644 --- a/docs/random_walk/index.html +++ b/docs/random_walk/index.html @@ -15,14 +15,14 @@ - +

    Single-Site Random Walk Metropolis-Hastings

    Random Walk Metropolis-Hastings is a simple, minimal MCMC inference method. Random Walk Metropolis-Hastings is single-site by default, following the philosophy of most inference methods in Bean Machine, and accordingly multi-site inference patterns are well supported. Random Walk Metropolis-Hastings follows the standard Metropolis-Hastings algorithm of sampling a value from a proposal distribution, and then running accept-reject according to the computed ratio of the proposed value. This is further detailed in the docs for Ancestral Metropolis-Hastings. This tutorial describes the proposal mechanism, describes adaptive Random Walk Metropolis-Hastings, and documents the API for the Random Walk Metropolis-Hastings algorithm.

    Algorithm

    Random Walk Metropolis-Hastings works on a single-site basis by proposing new values for a random variable that are close to the current value according to some sense of distance. As such, it is only defined for continuous random variables. The exact distance that a proposed value is from the current value is defined by the proposal distribution, and is a parameter that can be provided when configuring the inference method. For discrete random variables, a similar effect may be achieved, but custom proposers must be used instead.

    The Random Walk Metropolis-Hastings algorithm has multiple proposers defined on different spaces such as all real numbers, positive real numbers, or intervals of the real numbers. These proposers all have common properties used to propose a new value xx^\prime from a current value xx. The proposal distribution q(x,x)q(x,x^\prime) is constructed to satisfy the following properties:

    E[q(x,)]=xV[q(x,)]=σ2\begin{aligned} \mathbb{E}[q(x, \cdot)] &= x \\ \mathbb{V} [q(x, \cdot)] &= \sigma^2 \end{aligned}

    σ\sigma is the parameter that may be provided as a parameter when configuring the inference method, and it must be a fixed positive number. Larger values of σ\sigma will cause the inference method to explore more non-local values for XX. This may be good for faster exploration of the posterior, but it may cause lower probability values to get proposed (and therefore rejected) as a result.

    Adaptive Random Walk Metropolis-Hastings

    Selecting a good σ\sigma value is important for efficient posterior exploration. However, it is often challenging for a user to select a good σ\sigma value, as it requires a nuanced understanding of the posterior space. Consequently, Bean Machine provides an adaptive version of Random Walk Metropolis-Hastings, in which the inference engine automatically tunes the value of σ\sigma during the first few samples of inference (known as the adaptation period).

    The Random Walk Metropolis-Hastings algorithm is an exemplar use of the Bean Machine pattern for Adaptive inference, and this is enabled by using the argument num_adaptive_samples in the call to infer(). This causes Bean Machine to run an adaptation phase at the beginning of inference for the provided number of samples. During this phase, Bean Machine will internally tweak values of σ\sigma in order to find the largest value that still results in a relatively low number of rejected proposals. Technically speaking, Random Walk adaptation will attempt to achieve an amortized acceptance rate of 0.234. How this value is chosen as the optimal acceptance rate is detailed in Optional Scaling and Adaptive Markov Chain Monte Carlo.

    Please note that samples taken during adaptation are not valid posterior samples, and so will not be shown by default when using the MonteCarloSamples object returned from inference.

    Usage

    The following code snippet illustrates how to use the inference method. Here, step_size represents σ\sigma from the algorithm above.

    samples = bm.SingleSiteRandomWalk(
    step_size = 2.0,
    ).infer(
    queries,
    observations,
    num_samples,
    num_adaptive_samples = 500,
    )

    The parameters to infer are described below:

    NameUsage
    queriesA List of @bm.random_variable targets to fit posterior distributions for.
    observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
    num_samplesNumber of samples to build up distributions for the values listed in queries.
    num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
    - + \ No newline at end of file diff --git a/docs/transforms/index.html b/docs/transforms/index.html index a357d3d43f..c0c1616cb3 100644 --- a/docs/transforms/index.html +++ b/docs/transforms/index.html @@ -15,14 +15,14 @@ - +

    Transforms

    Bean Machine provides flexibility for users to specify transformations on a per-variable basis. This gives Bean Machine powerful functionality.

    Proposal algorithms will behave differently depending on the shape and constraints of the posterior, and often have specific requirements. It is useful to transform the posterior into an ideal shape and space for inference to be its most efficient. For example, the Hamiltonian Monte Carlo algorithm provided by Bean Machine requires the proposal distribution to be continuous and differentiable at all points in the real space. Therefore, for all variables with distributions constrained to subsets of the real numbers (such as non-negative ones, for example), HMC will require a transform to change the proposal distribution into the unconstrained space (for example, the transform log(x) will map points in the constrained space of all non-positive real numbers x into the unconstrained set of real numbers).

    Bean Machine allows users to use default transformations for transforming constrained spaces into unconstrained spaces, or to specify custom transforms. Additionally, transforms can also be used in other ways such as specifying kernels for Gaussian processes.

    Transforms are supported within the Variable class by the following attributes: value, transformed_value and jacobian (a generalization of derivatives for multi-variable functions). These will be populated accordingly depending on the transforms specified. If there are no transforms, then transformed_value will be equivalent to value, and jacobian will be zero. The attribute transformed_value will be used throughout inference since it is in the unconstrained space required by the algorithm. See World and Variable API for more details.

    Specifying Transforms

    Each proposer and inference method has the following optional parameters for initialization

    transform_type: TransformType
    transforms: Optional[List[Transform]]

    There are three TransformTypes which can be specified

    • TransformType.NONE: no transform will be applied
    • TransformType.DEFAULT: transforms will convert the distribution to the unconstrained space
    • TransformType.CUSTOM: user-provided transforms, set through the transforms parameter, will be applied

    Default Transforms

    The transform applied to each variable depends on the constraints of its distribution:

    • No constraints or discrete variables: no transform
    • Lower bound aa: f(X)=log(Xa)f(X) = \log(X - a)
    • Upper bound bb: f(X)=log((Xb))f(X) = \log(-(X - b))
    • Simplex ([0,1][0,1] interval): f(X)=stick breaking(X)f(X) = \text{stick breaking}(X)
    • Lower bound aa and upper bound bb: f(X)=stick breaking((Xa)/(ba))f(X) = \text{stick breaking}((X - a) / (b - a))

    Default transforms are implemented using the biject_to() registry from PyTorch.

    Custom Transforms

    If TransformType.CUSTOM is specified, the user must also provide a list of transforms to the transforms parameter of initialization.

    mh = CompositionalInference(
    variable: SingleSiteNewtonianMonteCarloProposer(
    transform_type=TransformType.CUSTOM, transforms=[AffineTransform(2.0, 1.0)]
    )
    )

    For each transform, the user must provide the transform function, the inverse function, as well as the Jacobian calculation as described below. These transforms will be applied in order. For example, the list of transforms [f,g][f, g] applied to xx will result in the value g(f(x))g(f(x)). It is recommended to implement the Transform class from PyTorch.

    def __call__(self, x):
    """
    Computes the forward transformation
    """
    def inv(self, y):
    """
    Computes the inverse transformation
    """
    def log_abs_det_jacobian(self, x, y):
    """
    Computes the log of the absolute value of determinant of the Jacobian `log |dy/dx|`
    """
    - + \ No newline at end of file diff --git a/docs/tutorials/listing/index.html b/docs/tutorials/listing/index.html index a168415a5e..426e05d9bb 100644 --- a/docs/tutorials/listing/index.html +++ b/docs/tutorials/listing/index.html @@ -15,14 +15,14 @@ - +

    listing

    Bean Machine tutorials are contained in these Notebooks. The page you are currently viewing should not be displayed on the website; it exists to point you to our internal Bento Notebooks, which should be used instead. Please find the tutorial links listed in the "Tutorials" section of our table of contents, included below.

    @import "../toc.md"

    - + \ No newline at end of file diff --git a/docs/uniform_metropolis_hastings/index.html b/docs/uniform_metropolis_hastings/index.html index f36d9f60d5..fd606c9684 100644 --- a/docs/uniform_metropolis_hastings/index.html +++ b/docs/uniform_metropolis_hastings/index.html @@ -15,14 +15,14 @@ - +

    Single-Site Uniform Metropolis-Hastings

    Single-Site Uniform Metropolis-Hastings is used to infer over variables that have discrete support, for example random variables with Bernoulli and Categorical distributions. It is overall very similar to Ancestral Metropolis-Hastings. However, it is designed so that it will even explore discrete samples that are unlikely under the prior distribution.

    Algorithm

    The Single-Site Uniform Sampler works very similarly to Single-Site Ancestral Metropolis-Hastings. In fact, the only difference arises in Step 1 of that inference method's Algorithm; i.e, in the way that this sampler proposes a new value. The remaining steps are unchanged.

    In Single-Site Uniform Metropolis-Hastings, for random variables with discrete support, instead of sampling from the prior, the proposer samples from a distribution which assigns equal probability across all values in support (hence the name, uniform). However, the likelihood of this sample is accounted for when computing the Metropolis acceptance probability. Thus, even though improbable values may be proposed more than indicated by the prior, they will not be accepted more often than they should according to the posterior.

    At first appearance, this sounds undesirable -- why sample an unlikely value in the first place? This arises from the fact that the prior distribution may not be a good reflection of the posterior distribution for a given discrete random variable. A particular value that is unlikely under the prior may, in fact, be quite likely under the posterior. Uniform Metropolis-Hastings ensures that those values have the opportunity to be sampled, and thus can increase sampling efficiency for many problems where the posterior is distant from the prior.

    Please note that, if you use this inference method for continuous random variables, it will fall back to Single-Site Ancestral Metropolis-Hastings.

    Usage

    The following code snippet illustrates how to use the inference method.

    samples = bm.SingleSiteUniformMetropolisHastings().infer(
    queries,
    observations,
    num_samples,
    num_chains,
    )

    The parameters to infer are described below:

    NameUsage
    queriesA List of @bm.random_variable targets to fit posterior distributions for.
    observationsThe Dict of observations. Each key is a random variable, and its value is the observed value for that random variable.
    num_samplesNumber of samples to build up distributions for the values listed in queries.
    num_chainsNumber of separate inference runs to use. Multiple chains can be used by diagnostics to verify inference ran correctly.
    - + \ No newline at end of file diff --git a/docs/variational_inference/index.html b/docs/variational_inference/index.html index d6ac50afed..646ab8c935 100644 --- a/docs/variational_inference/index.html +++ b/docs/variational_inference/index.html @@ -15,7 +15,7 @@ - + @@ -49,7 +49,7 @@ a Delta point estimate is used as the guide for each site: qiDelta(μi)q_i \sim \text{Delta}(\mu_i)

    - + \ No newline at end of file diff --git a/docs/world/index.html b/docs/world/index.html index b02ee2a39f..bd68e9aca0 100644 --- a/docs/world/index.html +++ b/docs/world/index.html @@ -15,7 +15,7 @@ - + @@ -30,7 +30,7 @@ Ordinarily, a random_variable returns a function pointer to the variable, but under the world context, the actual variable is sampled since we are instantiating it inside a world:

    @bm.random_variable
    def foo():
    return Bernoulli(0.5)

    pointer = foo()
    assert isinstance(pointer, RVIdentifier)

    world = World()
    # everything run inside the world context manager
    # is recorded in the world
    with world:
    x = foo()

    x == torch.tensor(1.)
    x_var = world.get_variable(foo())
    x_var.value == x

    Since worlds are independent instantiations of the model, you can compose them interchangeably. This allows us to inspect and manipulate our model as we see fit. During MCMC inference, Bean Machine is constantly proposing new worlds in accordance with the proposal distribution, the collection of which form the posterior.

    Variables

    Variables are primitives that contain metadata about a given random variable defined by @bm.random_variable, such as the distribution it was sampled from, its parents and children, the sampled value of the variable, and its log density. They can represent latent or observed variables. Only latent variables are inferred during inference and the values of the Variables can change between inference iterations.

    RVIdentifiers

    Each random variable is associated with a unique key RVidentifier. This is a pointer to the random variable and is implemented as a dataclass containing the random variable's Python function and arguments. Since the function argument is a component of generating an RVIdentifier, the same callable can generate independent random variables by using different arguments:

    @bm.random_variable
    def foo(i):
    return Normal(0., 1.)

    foo(0) # this is one variable with an RVIdentifier
    foo(1) # this is another variable with a different RVIdentifier
    - + \ No newline at end of file diff --git a/doctrees/beanmachine.ppl.inference.base_inference.doctree b/doctrees/beanmachine.ppl.inference.base_inference.doctree index e4c3520d86335cb44ac51eb73b1dffcb6364bdfe..9bd257887a05629cb08f71635dd0ca8a64de387d 100644 GIT binary patch delta 302 zcmaFynQ_J!M%D(_sk~JiS>=>jRxmLzOl~v~-fX3Op3$(RvLG`rJwCOfBsH%%Ge56b z&nL4awJ0$sIxW8_TSuX|AhA48M*+ksPAw`+E!wQ7dV-N92xQ3Wpv9Z-D(jG8$mDk# jsVo5?Gu8wxBG(K()j*yp8SJrBGQ=XNVAkf>x_`X^EnIPp delta 237 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

    pxu7ZUO#A`AM~{k!mO2Jed7Ze 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 - +

    Bean Machine Logo.

    Bean Machine

    A universal probabilistic programming language to enable fast and accurate Bayesian analysis

    Watch Introductory Video

    Declarative modeling

    Clear, intuitive syntax that lets you focus on the model and leave performance to the framework.

    Programmable inference

    Mix-and-match inference methods, proposers, and inference strategies to achieve maximum efficiency.

    Powered by PyTorch

    Leverage native GPU and autograd support and integrate seamlessly with the PyTorch ecosystem.

    Status: Beta. APIs are likely to change. Functionalities are constantly being improved. Bug reports are welcome, but bandwidth is very limited for feature requests.

    - + \ No newline at end of file