From 866561b5e649a2a972dd1acc06e7406be0c9e8b1 Mon Sep 17 00:00:00 2001 From: jennmald Date: Thu, 2 Jan 2025 13:07:49 -0500 Subject: [PATCH 01/13] fix fitness plots --- src/blop/plotting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 241d0dd..605f3a1 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -157,6 +157,8 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL model_inputs = agent.dofs(active=True).transform(test_inputs) + print(agent.objectives) + for obj_index, obj in enumerate(agent.objectives): targets = agent.train_targets()[obj.name].numpy() @@ -192,7 +194,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL # cmap=cmap, # norm=val_norm, # ) - if obj.constraint is not None: + if obj.constraint is None: fitness_ax = agent.obj_axes[obj_index, 1].pcolormesh( test_x, test_y, From 84621fd8d1f2341f327ea9f708eb2b2c15d02082 Mon Sep 17 00:00:00 2001 From: jennmald Date: Thu, 2 Jan 2025 15:51:37 -0500 Subject: [PATCH 02/13] add the constraint plots and fix the color bars --- src/blop/plotting.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 605f3a1..3170cef 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -157,8 +157,6 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL model_inputs = agent.dofs(active=True).transform(test_inputs) - print(agent.objectives) - for obj_index, obj in enumerate(agent.objectives): targets = agent.train_targets()[obj.name].numpy() @@ -182,8 +180,9 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL # test_values = obj.fitness_inverse(test_mean) if obj.kind == "fitness" else test_mean test_constraint = None - if obj.constraint is not None: - test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() + if obj.constraint is None: + #test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() + test_constraint = agent.constraint(model_inputs).squeeze().numpy() if gridded: # _ = agent.obj_axes[obj_index, 1].pcolormesh( @@ -200,16 +199,16 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL test_y, test_mean, shading=shading, - cmap=cmap, norm=obj_norm, + cmap=cmap, ) fit_err_ax = agent.obj_axes[obj_index, 2].pcolormesh( test_x, test_y, test_sigma, shading=shading, - cmap=cmap, norm=mpl.colors.LogNorm(), + cmap=cmap, ) if test_constraint is not None: @@ -219,7 +218,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL test_constraint, shading=shading, cmap=cmap, - # norm=mpl.colors.LogNorm(), + #norm=mpl.colors.LogNorm(), ) else: @@ -262,7 +261,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL val_cbar = agent.obj_fig.colorbar(val_ax, ax=agent.obj_axes[obj_index, 0], location="bottom", aspect=32, shrink=0.8) val_cbar.set_label(f"{obj.units or ''}") - if obj.constraint is not None: + if obj.constraint is None: _ = agent.obj_fig.colorbar(fitness_ax, ax=agent.obj_axes[obj_index, 1], location="bottom", aspect=32, shrink=0.8) _ = agent.obj_fig.colorbar(fit_err_ax, ax=agent.obj_axes[obj_index, 2], location="bottom", aspect=32, shrink=0.8) From 67cd741d45b833f49def8c6b4d794309d965e76c Mon Sep 17 00:00:00 2001 From: jennmald Date: Thu, 2 Jan 2025 15:54:29 -0500 Subject: [PATCH 03/13] fix pre commit failure with black --- src/blop/plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 3170cef..d027b6a 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -181,7 +181,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL test_constraint = None if obj.constraint is None: - #test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() + # test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() test_constraint = agent.constraint(model_inputs).squeeze().numpy() if gridded: @@ -218,7 +218,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL test_constraint, shading=shading, cmap=cmap, - #norm=mpl.colors.LogNorm(), + # norm=mpl.colors.LogNorm(), ) else: From b53582025f21bb2d00e0338bb8587da3d72f125c Mon Sep 17 00:00:00 2001 From: jennmald Date: Thu, 2 Jan 2025 16:17:12 -0500 Subject: [PATCH 04/13] fix fitness_ax not found error --- src/blop/plotting.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index d027b6a..6518efb 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -184,6 +184,9 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL # test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() test_constraint = agent.constraint(model_inputs).squeeze().numpy() + fitness_ax = None + fit_err_ax = None + if gridded: # _ = agent.obj_axes[obj_index, 1].pcolormesh( # test_x, From 30794f15b2bcebf1c7351bbd17c5bbf59c3c6f1f Mon Sep 17 00:00:00 2001 From: jennmald Date: Thu, 2 Jan 2025 16:21:26 -0500 Subject: [PATCH 05/13] fix with precommit --- src/blop/plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 6518efb..3e42c33 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -186,7 +186,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL fitness_ax = None fit_err_ax = None - + if gridded: # _ = agent.obj_axes[obj_index, 1].pcolormesh( # test_x, From d903c685a13129657d687d79052d0bb4a4db969e Mon Sep 17 00:00:00 2001 From: jennmald Date: Fri, 3 Jan 2025 09:54:21 -0500 Subject: [PATCH 06/13] add constraint plots using log_total_constraint --- src/blop/plotting.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 3e42c33..374d099 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -183,6 +183,8 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL if obj.constraint is None: # test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() test_constraint = agent.constraint(model_inputs).squeeze().numpy() + else: + test_constraint = obj.constraint_probability(model_inputs).detach().squeeze().numpy() fitness_ax = None fit_err_ax = None From b396df4aff2d6b1e0cac5d6085bdc7cedb50ad69 Mon Sep 17 00:00:00 2001 From: Thomas Morris Date: Thu, 23 Jan 2025 22:27:03 -0500 Subject: [PATCH 07/13] change pypi name --- README.rst | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 68b680d..d4ad14c 100644 --- a/README.rst +++ b/README.rst @@ -6,11 +6,11 @@ blop :target: https://github.com/NSLS-II/blop/actions/workflows/testing.yml -.. image:: https://img.shields.io/pypi/v/bloptools.svg - :target: https://pypi.python.org/pypi/bloptools +.. image:: https://img.shields.io/pypi/v/blop.svg + :target: https://pypi.python.org/pypi/blop -.. image:: https://img.shields.io/conda/vn/conda-forge/bloptools.svg - :target: https://anaconda.org/conda-forge/bloptools +.. image:: https://img.shields.io/conda/vn/conda-forge/blop.svg + :target: https://anaconda.org/conda-forge/blop Beamline Optimization Tools diff --git a/pyproject.toml b/pyproject.toml index 0106599..a745ee6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling", "hatch-vcs", "setuptools_scm"] build-backend = "hatchling.build" [project] -name = "bloptools" +name = "blop" description = "Beamline optimization with machine learning" readme = { file = "README.rst", content-type = "text/x-rst" } authors = [ From b2ce710a21d8ec2e4010fed24641d906d0dce469 Mon Sep 17 00:00:00 2001 From: Thomas Morris Date: Thu, 23 Jan 2025 22:27:18 -0500 Subject: [PATCH 08/13] update to numpy 2 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a745ee6..97afece 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "gpytorch", "h5py", "matplotlib", - "numpy<2", + "numpy", "ophyd", "ortools", "scipy", From c417611d5347dd8de04d11cb000c415fb70706cd Mon Sep 17 00:00:00 2001 From: jennmald Date: Fri, 31 Jan 2025 16:07:43 -0500 Subject: [PATCH 09/13] add x markers for nan values --- src/blop/plotting.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 374d099..1041f4c 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -170,7 +170,10 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL obj_vmin, obj_vmax = np.nanquantile(targets, q=[0.01, 0.99]) obj_norm = mpl.colors.Normalize(obj_vmin, obj_vmax) - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values, y_values, c=values, s=size, norm=val_norm, cmap=cmap) + # mask for nan values, uses x marker + mask = np.isnan(values) + val_ax = agent.obj_axes[obj_index, 0].scatter(x_values, y_values, c=values, s=size, norm=val_norm, cmap=cmap, label="bad point") + val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], c="k", marker="x", linewidths=4, s=75, label="good point") # mean and sigma will have shape (*input_shape,) test_posterior = obj.model.posterior(model_inputs) From 7fc4151ccab9f5d063e773cee540a216d50d3afb Mon Sep 17 00:00:00 2001 From: jennmald Date: Fri, 31 Jan 2025 16:18:44 -0500 Subject: [PATCH 10/13] remove labels --- src/blop/plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 1041f4c..514d584 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -172,8 +172,8 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL # mask for nan values, uses x marker mask = np.isnan(values) - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values, y_values, c=values, s=size, norm=val_norm, cmap=cmap, label="bad point") - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], c="k", marker="x", linewidths=4, s=75, label="good point") + val_ax = agent.obj_axes[obj_index, 0].scatter(x_values, y_values, c=values, s=size, norm=val_norm, cmap=cmap) + val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], c="k", marker="x", linewidths=4, s=75) # mean and sigma will have shape (*input_shape,) test_posterior = obj.model.posterior(model_inputs) From df2819e0253e8ed1e3aa270e107259a8cac68c65 Mon Sep 17 00:00:00 2001 From: jennmald Date: Mon, 3 Feb 2025 13:26:42 -0500 Subject: [PATCH 11/13] change marker for bad points and fix colorbar --- src/blop/plotting.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index 514d584..e281757 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -161,6 +161,8 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL targets = agent.train_targets()[obj.name].numpy() values = obj._untransform(targets) + # mask does not generate properly when values is a tensor (returns values of 0 instead of booleans) + values = np.array(values) val_vmin, val_vmax = np.nanquantile(values, q=[0.01, 0.99]) val_norm = ( @@ -170,10 +172,11 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL obj_vmin, obj_vmax = np.nanquantile(targets, q=[0.01, 0.99]) obj_norm = mpl.colors.Normalize(obj_vmin, obj_vmax) - # mask for nan values, uses x marker + # mask for nan values, uses unfilled o marker mask = np.isnan(values) - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values, y_values, c=values, s=size, norm=val_norm, cmap=cmap) - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], c="k", marker="x", linewidths=4, s=75) + + val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[~mask], y_values[~mask], c=values[~mask], s=size, norm=val_norm, cmap=cmap) + agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], marker="o", ec='k', fc='w', s=size) # mean and sigma will have shape (*input_shape,) test_posterior = obj.model.posterior(model_inputs) @@ -266,7 +269,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL norm=mpl.colors.LogNorm(), ) - val_cbar = agent.obj_fig.colorbar(val_ax, ax=agent.obj_axes[obj_index, 0], location="bottom", aspect=32, shrink=0.8) + val_cbar = agent.obj_fig.colorbar(val_ax, ax=agent.obj_axes[obj_index,0], location="bottom", aspect=32, shrink=0.8) val_cbar.set_label(f"{obj.units or ''}") if obj.constraint is None: From 3fa319252f8f538a23020779cec4d7af25510d96 Mon Sep 17 00:00:00 2001 From: jennmald Date: Fri, 31 Jan 2025 16:26:28 -0500 Subject: [PATCH 12/13] fix docs CI error - v3 is deprecated --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 13f1e6c..3c54762 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -83,7 +83,7 @@ jobs: - name: Build Docs run: make -C docs/ html - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: ${{ env.REPOSITORY_NAME }}-docs path: docs/build/html/ From 49752b5d14b00e8ed7afbb277cf06ef1f3563e41 Mon Sep 17 00:00:00 2001 From: jennmald Date: Mon, 3 Feb 2025 13:55:10 -0500 Subject: [PATCH 13/13] forgot to run precommit --- src/blop/plotting.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/blop/plotting.py b/src/blop/plotting.py index e281757..2ac15ce 100644 --- a/src/blop/plotting.py +++ b/src/blop/plotting.py @@ -175,8 +175,10 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL # mask for nan values, uses unfilled o marker mask = np.isnan(values) - val_ax = agent.obj_axes[obj_index, 0].scatter(x_values[~mask], y_values[~mask], c=values[~mask], s=size, norm=val_norm, cmap=cmap) - agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], marker="o", ec='k', fc='w', s=size) + val_ax = agent.obj_axes[obj_index, 0].scatter( + x_values[~mask], y_values[~mask], c=values[~mask], s=size, norm=val_norm, cmap=cmap + ) + agent.obj_axes[obj_index, 0].scatter(x_values[mask], y_values[mask], marker="o", ec="k", fc="w", s=size) # mean and sigma will have shape (*input_shape,) test_posterior = obj.model.posterior(model_inputs) @@ -269,7 +271,7 @@ def _plot_objs_many_dofs(agent, axes=(0, 1), shading="nearest", cmap=DEFAULT_COL norm=mpl.colors.LogNorm(), ) - val_cbar = agent.obj_fig.colorbar(val_ax, ax=agent.obj_axes[obj_index,0], location="bottom", aspect=32, shrink=0.8) + val_cbar = agent.obj_fig.colorbar(val_ax, ax=agent.obj_axes[obj_index, 0], location="bottom", aspect=32, shrink=0.8) val_cbar.set_label(f"{obj.units or ''}") if obj.constraint is None: