From c19f8f3d188033d38fd5d558e5afc9b8f264f7a3 Mon Sep 17 00:00:00 2001 From: Jason McEwen Date: Thu, 20 Mar 2025 17:48:56 +0000 Subject: [PATCH 1/3] Add old plot_realisations that works with legacy examples This is taken from commit dd38bcd6a2d09ed15dc8d2c4cd403001c6b71e04, before commit 4aef1b2a157da77d9f377e295bdf5446ebdfab13 broke this for legacy examples. --- examples/plot_realisations_old.py | 72 +++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 examples/plot_realisations_old.py diff --git a/examples/plot_realisations_old.py b/examples/plot_realisations_old.py new file mode 100644 index 00000000..d237fdee --- /dev/null +++ b/examples/plot_realisations_old.py @@ -0,0 +1,72 @@ +import numpy as np +import matplotlib.pyplot as plt +import argparse +import os +import ex_utils + +savefigs = True + +# Parse arguments. +parser = argparse.ArgumentParser( + "Create violin plot of inverse evidences" + "from many realisations" +) +parser.add_argument( + "filename_realisations", + metavar="filename_realisations", + type=str, + help="Name of file containing realisations", +) +parser.add_argument( + "filename_analytic", + metavar="filename_analytic", + type=str, + help="Name of file containing analytic inverse variance", +) +args = parser.parse_args() + +# Load data. +evidence_inv_summary = np.loadtxt(args.filename_realisations) +evidence_inv_realisations = evidence_inv_summary[:, 0] +evidence_inv_var_realisations = evidence_inv_summary[:, 1] +evidence_inv_var_var_realisations = evidence_inv_summary[:, 2] + +evidence_inv_analytic = np.loadtxt(args.filename_analytic) + +# Plot inverse evidence. +plt.rcParams.update({"font.size": 20}) +ax = ex_utils.plot_realisations( + mc_estimates=evidence_inv_realisations, + std_estimated=np.sqrt(np.mean(evidence_inv_var_realisations)), + analytic_val=evidence_inv_analytic, + analytic_text=r"Truth", +) +plt.ticklabel_format(style="sci", axis="y", scilimits=(0, 0)) +ax.set_ylabel(r"Inverse evidence ($\rho$)") +# ax.set_ylim([0.0, 0.01]) + +filename_base = os.path.basename(args.filename_realisations) +filename_base_noext = os.path.splitext(filename_base)[0] +if savefigs: + plt.savefig( + "./examples/plots/" + filename_base_noext + "_evidence_inv.png", + bbox_inches="tight", + ) + +# Plot variance of inverse evidence. +ax = ex_utils.plot_realisations( + mc_estimates=evidence_inv_var_realisations, + std_estimated=np.sqrt(np.mean(evidence_inv_var_var_realisations)), +) +plt.ticklabel_format(style="sci", axis="y", scilimits=(0, 0)) +ax.set_ylabel(r"Inverse evidence variance ($\sigma^2$)") +# ax.set_ylim([-0.1, 1]) + +if savefigs: + plt.savefig( + "./examples/plots/" + filename_base_noext + "_evidence_inv_var.png", + bbox_inches="tight", + ) + +plt.show(block=False) + +input("\nPress Enter to continue...") From 9fb4b10cfeec1dc6947813def3a1b9c0dd58e941 Mon Sep 17 00:00:00 2001 From: Jason McEwen Date: Thu, 20 Mar 2025 17:51:21 +0000 Subject: [PATCH 2/3] Fix bug in cross_validation This broke when removing non-log evidence values (PR290), which were previously used for logging only. Updated to work with log values only. --- harmonic/utils.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/harmonic/utils.py b/harmonic/utils.py index b3528285..6bc98c56 100644 --- a/harmonic/utils.py +++ b/harmonic/utils.py @@ -334,20 +334,22 @@ def cross_validation( ) ) hm.logs.debug_log( - "cross_validation: evidence_inv = {}".format(ev.evidence_inv) + "cross_validation: ln_evidence_inv = {}".format(ev.ln_evidence_inv) ) hm.logs.debug_log( - "cross_validation: evidence_inv_var = {}".format(ev.evidence_inv_var) + "cross_validation: ln_evidence_inv_var = {}".format( + ev.ln_evidence_inv_var + ) ) hm.logs.debug_log( "cross_validation:" - + " evidence_inv_var**0.5/evidence_inv = {}".format( - ev.evidence_inv_var**0.5 / ev.evidence_inv + + " np.exp(ev.ln_evidence_inv_var)**0.5 / np.exp(ev.ln_evidence_inv) = {}".format( + np.exp(ev.ln_evidence_inv_var) ** 0.5 / np.exp(ev.ln_evidence_inv) ) ) hm.logs.debug_log( - "cross_validation: evidence_inv_var_var = {}".format( - ev.evidence_inv_var_var + "cross_validation: ln_evidence_inv_var_var = {}".format( + ev.ln_evidence_inv_var_var ) ) From a53d226c0825bce9387149ad68872b2ec46996e5 Mon Sep 17 00:00:00 2001 From: Jason McEwen Date: Thu, 20 Mar 2025 17:54:42 +0000 Subject: [PATCH 3/3] Pin version of dm-tree to 0.1.8 Since no mac wheels for latest version 0.1.9. --- requirements/requirements-core.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements/requirements-core.txt b/requirements/requirements-core.txt index 8a8ceb9a..10874ad0 100644 --- a/requirements/requirements-core.txt +++ b/requirements/requirements-core.txt @@ -1,4 +1,5 @@ numpy <= 1.26.4 +dm-tree==0.1.8 # No mac wheels for latest version 0.1.9 (as of 20/03/2025) setuptools==68.0.0 wheel==0.41.0 cython>=0.29.30 @@ -15,4 +16,4 @@ flax #chex==0.1.6 distrax cloudpickle -getdist \ No newline at end of file +getdist