|
579 | 579 | },
|
580 | 580 | {
|
581 | 581 | "cell_type": "code",
|
582 |
| - "execution_count": 20, |
| 582 | + "execution_count": 11, |
583 | 583 | "id": "e344b7d0-f76e-4a28-9be9-884a2ba1f2c4",
|
584 | 584 | "metadata": {},
|
585 | 585 | "outputs": [
|
|
607 | 607 | },
|
608 | 608 | {
|
609 | 609 | "cell_type": "code",
|
610 |
| - "execution_count": 6, |
| 610 | + "execution_count": 17, |
611 | 611 | "id": "f1eb9a04-15dd-437d-bcf0-ce369feec912",
|
612 | 612 | "metadata": {},
|
613 | 613 | "outputs": [
|
|
624 | 624 | "collected 3 items \u001b[0m\u001b[1m\n",
|
625 | 625 | "\n",
|
626 | 626 | "../tests/test_inla.py::test_non_gaussian_latent \u001b[32mPASSED\u001b[0m\u001b[32m [ 33%]\u001b[0m\n",
|
627 |
| - "../tests/test_inla.py::test_non_precision_MvNormal \u001b[32mPASSED\u001b[0m\u001b[32m [ 66%]\u001b[0m\n", |
628 |
| - "../tests/test_inla.py::test_3_layer_normal \u001b[32mPASSED\u001b[0m\u001b[32m [100%]\u001b[0m\n", |
| 627 | + "../tests/test_inla.py::test_non_precision_MvNormal \u001b[31mFAILED\u001b[0m\u001b[31m [ 66%]\u001b[0m\n", |
| 628 | + "../tests/test_inla.py::test_3_layer_normal \u001b[31mFAILED\u001b[0m\u001b[31m [100%]\u001b[0m\n", |
629 | 629 | "\n",
|
630 |
| - "\u001b[32m============================== \u001b[32m\u001b[1m3 passed\u001b[0m\u001b[32m in 19.44s\u001b[0m\u001b[32m ==============================\u001b[0m\n" |
| 630 | + "=================================== FAILURES ===================================\n", |
| 631 | + "\u001b[31m\u001b[1m_________________________ test_non_precision_MvNormal __________________________\u001b[0m\n", |
| 632 | + "\n", |
| 633 | + "rng = Generator(PCG64) at 0x7F6BDC40DC40\n", |
| 634 | + "\n", |
| 635 | + " \u001b[0m\u001b[94mdef\u001b[39;49;00m\u001b[90m \u001b[39;49;00m\u001b[92mtest_non_precision_MvNormal\u001b[39;49;00m(rng):\u001b[90m\u001b[39;49;00m\n", |
| 636 | + " \u001b[90m \u001b[39;49;00m\u001b[33m\"\"\"\u001b[39;49;00m\n", |
| 637 | + " \u001b[33m INLA should raise an error if trying to use a latent not in precision form\u001b[39;49;00m\n", |
| 638 | + " \u001b[33m \"\"\"\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 639 | + " n = \u001b[94m10000\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 640 | + " d = \u001b[94m3\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 641 | + " \u001b[90m\u001b[39;49;00m\n", |
| 642 | + " mu_mu = np.zeros((d,))\u001b[90m\u001b[39;49;00m\n", |
| 643 | + " mu_true = rng.random(d)\u001b[90m\u001b[39;49;00m\n", |
| 644 | + " tau = np.identity(d)\u001b[90m\u001b[39;49;00m\n", |
| 645 | + " cov = np.linalg.inv(tau)\u001b[90m\u001b[39;49;00m\n", |
| 646 | + " y_obs = rng.multivariate_normal(mean=mu_true, cov=cov, size=n)\u001b[90m\u001b[39;49;00m\n", |
| 647 | + " \u001b[90m\u001b[39;49;00m\n", |
| 648 | + " \u001b[94mwith\u001b[39;49;00m pm.Model() \u001b[94mas\u001b[39;49;00m model:\u001b[90m\u001b[39;49;00m\n", |
| 649 | + " mu = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33mmu\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=mu_mu, tau=tau)\u001b[90m\u001b[39;49;00m\n", |
| 650 | + " x = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33mx\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=mu, cov=cov)\u001b[90m\u001b[39;49;00m\n", |
| 651 | + " y = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33my\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=x, tau=tau, observed=y_obs)\u001b[90m\u001b[39;49;00m\n", |
| 652 | + " \u001b[90m\u001b[39;49;00m\n", |
| 653 | + " \u001b[94mwith\u001b[39;49;00m pytest.raises(\u001b[96mValueError\u001b[39;49;00m):\u001b[90m\u001b[39;49;00m\n", |
| 654 | + "> pmx.fit(method=\u001b[33m\"\u001b[39;49;00m\u001b[33mINLA\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, x=x)\u001b[90m\u001b[39;49;00m\n", |
| 655 | + "\n", |
| 656 | + "\u001b[1m\u001b[31m../tests/test_inla.py\u001b[0m:67: \n", |
| 657 | + "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n", |
| 658 | + "\u001b[1m\u001b[31m../pymc_extras/inference/fit.py\u001b[0m:47: in fit\n", |
| 659 | + " \u001b[0m\u001b[94mreturn\u001b[39;49;00m fit_INLA(**kwargs)\u001b[90m\u001b[39;49;00m\n", |
| 660 | + " ^^^^^^^^^^^^^^^^^^\u001b[90m\u001b[39;49;00m\n", |
| 661 | + "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n", |
| 662 | + "\n", |
| 663 | + "x = x, temp_kwargs = None, model = None, minimizer_kwargs = None\n", |
| 664 | + "return_latent_posteriors = True, sampler_kwargs = {}\n", |
| 665 | + "\n", |
| 666 | + " \u001b[0m\u001b[94mdef\u001b[39;49;00m\u001b[90m \u001b[39;49;00m\u001b[92mfit_INLA\u001b[39;49;00m(\u001b[90m\u001b[39;49;00m\n", |
| 667 | + " x: TensorVariable,\u001b[90m\u001b[39;49;00m\n", |
| 668 | + " temp_kwargs=\u001b[94mNone\u001b[39;49;00m, \u001b[90m# TODO REMOVE. DEBUGGING TOOL\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 669 | + " model: pm.Model | \u001b[94mNone\u001b[39;49;00m = \u001b[94mNone\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 670 | + " minimizer_kwargs: \u001b[96mdict\u001b[39;49;00m | \u001b[94mNone\u001b[39;49;00m = \u001b[94mNone\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 671 | + " return_latent_posteriors: \u001b[96mbool\u001b[39;49;00m = \u001b[94mTrue\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 672 | + " **sampler_kwargs,\u001b[90m\u001b[39;49;00m\n", |
| 673 | + " ) -> az.InferenceData:\u001b[90m\u001b[39;49;00m\n", |
| 674 | + "> warnings.warn(\u001b[33m'\u001b[39;49;00m\u001b[33mCurrently only valid for a nested normal model. WIP.\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m, \u001b[96mUserWarning\u001b[39;49;00m)\u001b[90m\u001b[39;49;00m\n", |
| 675 | + "\u001b[1m\u001b[31mE UserWarning: Currently only valid for a nested normal model. WIP.\u001b[0m\n", |
| 676 | + "\n", |
| 677 | + "\u001b[1m\u001b[31m../pymc_extras/inference/inla.py\u001b[0m:151: UserWarning\n", |
| 678 | + "\u001b[31m\u001b[1m_____________________________ test_3_layer_normal ______________________________\u001b[0m\n", |
| 679 | + "\n", |
| 680 | + "rng = Generator(PCG64) at 0x7F6BDC40DC40\n", |
| 681 | + "\n", |
| 682 | + " \u001b[0m\u001b[94mdef\u001b[39;49;00m\u001b[90m \u001b[39;49;00m\u001b[92mtest_3_layer_normal\u001b[39;49;00m(rng):\u001b[90m\u001b[39;49;00m\n", |
| 683 | + " \u001b[90m \u001b[39;49;00m\u001b[33m\"\"\"\u001b[39;49;00m\n", |
| 684 | + " \u001b[33m Test INLA against a simple toy problem:\u001b[39;49;00m\n", |
| 685 | + " \u001b[33m\u001b[39;49;00m\n", |
| 686 | + " \u001b[33m mu ~ N(mu_mu, I)\u001b[39;49;00m\n", |
| 687 | + " \u001b[33m x ~ N(mu, I)\u001b[39;49;00m\n", |
| 688 | + " \u001b[33m y ~ N(x, I)\u001b[39;49;00m\n", |
| 689 | + " \u001b[33m\u001b[39;49;00m\n", |
| 690 | + " \u001b[33m The mean of the posterior should be the midpoint between mu_mu and mu_true\u001b[39;49;00m\n", |
| 691 | + " \u001b[33m \"\"\"\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 692 | + " n = \u001b[94m10000\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 693 | + " d = \u001b[94m3\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 694 | + " \u001b[90m\u001b[39;49;00m\n", |
| 695 | + " mu_mu = \u001b[94m10\u001b[39;49;00m * rng.random(d)\u001b[90m\u001b[39;49;00m\n", |
| 696 | + " mu_true = rng.random(d)\u001b[90m\u001b[39;49;00m\n", |
| 697 | + " tau = np.identity(d)\u001b[90m\u001b[39;49;00m\n", |
| 698 | + " cov = np.linalg.inv(tau)\u001b[90m\u001b[39;49;00m\n", |
| 699 | + " y_obs = rng.multivariate_normal(mean=mu_true, cov=cov, size=n)\u001b[90m\u001b[39;49;00m\n", |
| 700 | + " \u001b[90m\u001b[39;49;00m\n", |
| 701 | + " \u001b[94mwith\u001b[39;49;00m pm.Model() \u001b[94mas\u001b[39;49;00m model:\u001b[90m\u001b[39;49;00m\n", |
| 702 | + " mu = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33mmu\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=mu_mu, tau=tau)\u001b[90m\u001b[39;49;00m\n", |
| 703 | + " x = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33mx\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=mu, tau=tau)\u001b[90m\u001b[39;49;00m\n", |
| 704 | + " y = pm.MvNormal(\u001b[33m\"\u001b[39;49;00m\u001b[33my\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m, mu=x, tau=tau, observed=y_obs)\u001b[90m\u001b[39;49;00m\n", |
| 705 | + " \u001b[90m\u001b[39;49;00m\n", |
| 706 | + "> idata = pmx.fit(\u001b[90m\u001b[39;49;00m\n", |
| 707 | + " method=\u001b[33m\"\u001b[39;49;00m\u001b[33mINLA\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 708 | + " x=x,\u001b[90m\u001b[39;49;00m\n", |
| 709 | + " temp_kwargs=[n, y_obs], \u001b[90m# TODO REMOVE LATER - DEBUGGING TOOL\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 710 | + " return_latent_posteriors=\u001b[94mFalse\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 711 | + " )\u001b[90m\u001b[39;49;00m\n", |
| 712 | + "\n", |
| 713 | + "\u001b[1m\u001b[31m../tests/test_inla.py\u001b[0m:94: \n", |
| 714 | + "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n", |
| 715 | + "\u001b[1m\u001b[31m../pymc_extras/inference/fit.py\u001b[0m:47: in fit\n", |
| 716 | + " \u001b[0m\u001b[94mreturn\u001b[39;49;00m fit_INLA(**kwargs)\u001b[90m\u001b[39;49;00m\n", |
| 717 | + " ^^^^^^^^^^^^^^^^^^\u001b[90m\u001b[39;49;00m\n", |
| 718 | + "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n", |
| 719 | + "\n", |
| 720 | + "x = x\n", |
| 721 | + "temp_kwargs = [10000, array([[-0.92256686, 0.34251042, -1.07012389],\n", |
| 722 | + " [ 1.54076702, -0.55042364, 1.023203 ],\n", |
| 723 | + " [ 2.251...37462 , 0.78161016],\n", |
| 724 | + " [ 2.21600752, -0.66114102, -0.10427736],\n", |
| 725 | + " [ 1.37171357, -0.27766388, -0.73127505]])]\n", |
| 726 | + "model = None, minimizer_kwargs = None, return_latent_posteriors = False\n", |
| 727 | + "sampler_kwargs = {}\n", |
| 728 | + "\n", |
| 729 | + " \u001b[0m\u001b[94mdef\u001b[39;49;00m\u001b[90m \u001b[39;49;00m\u001b[92mfit_INLA\u001b[39;49;00m(\u001b[90m\u001b[39;49;00m\n", |
| 730 | + " x: TensorVariable,\u001b[90m\u001b[39;49;00m\n", |
| 731 | + " temp_kwargs=\u001b[94mNone\u001b[39;49;00m, \u001b[90m# TODO REMOVE. DEBUGGING TOOL\u001b[39;49;00m\u001b[90m\u001b[39;49;00m\n", |
| 732 | + " model: pm.Model | \u001b[94mNone\u001b[39;49;00m = \u001b[94mNone\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 733 | + " minimizer_kwargs: \u001b[96mdict\u001b[39;49;00m | \u001b[94mNone\u001b[39;49;00m = \u001b[94mNone\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 734 | + " return_latent_posteriors: \u001b[96mbool\u001b[39;49;00m = \u001b[94mTrue\u001b[39;49;00m,\u001b[90m\u001b[39;49;00m\n", |
| 735 | + " **sampler_kwargs,\u001b[90m\u001b[39;49;00m\n", |
| 736 | + " ) -> az.InferenceData:\u001b[90m\u001b[39;49;00m\n", |
| 737 | + "> warnings.warn(\u001b[33m'\u001b[39;49;00m\u001b[33mCurrently only valid for a nested normal model. WIP.\u001b[39;49;00m\u001b[33m'\u001b[39;49;00m, \u001b[96mUserWarning\u001b[39;49;00m)\u001b[90m\u001b[39;49;00m\n", |
| 738 | + "\u001b[1m\u001b[31mE UserWarning: Currently only valid for a nested normal model. WIP.\u001b[0m\n", |
| 739 | + "\n", |
| 740 | + "\u001b[1m\u001b[31m../pymc_extras/inference/inla.py\u001b[0m:151: UserWarning\n", |
| 741 | + "\u001b[36m\u001b[1m=========================== short test summary info ============================\u001b[0m\n", |
| 742 | + "\u001b[31mFAILED\u001b[0m ../tests/test_inla.py::\u001b[1mtest_non_precision_MvNormal\u001b[0m - UserWarning: Currently only valid for a nested normal model. WIP.\n", |
| 743 | + "\u001b[31mFAILED\u001b[0m ../tests/test_inla.py::\u001b[1mtest_3_layer_normal\u001b[0m - UserWarning: Currently only valid for a nested normal model. WIP.\n", |
| 744 | + "\u001b[31m========================= \u001b[31m\u001b[1m2 failed\u001b[0m, \u001b[32m1 passed\u001b[0m\u001b[31m in 2.37s\u001b[0m\u001b[31m ==========================\u001b[0m\n" |
631 | 745 | ]
|
632 | 746 | }
|
633 | 747 | ],
|
|
0 commit comments