From 91fde44a03a42c801fb790be6ca6e30803b197a3 Mon Sep 17 00:00:00 2001 From: Joris Snellenburg Date: Sat, 27 Jan 2024 18:08:55 +0100 Subject: [PATCH 1/5] Fix for when the backsweep is a parameter rather than constant The optimizer would crash When setting the values in the model scheme from a constant to a parameter, the optimizer would crash with "Cannot determine Numba type of " as it tried to use the parameter as a numeric value. Ultimately numba would complain as that's where the value would be first used. Specifically: `"glotaran\builtin\elements\kinetic\matrix.py", line 27` --- glotaran/builtin/items/activation/gaussian.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/glotaran/builtin/items/activation/gaussian.py b/glotaran/builtin/items/activation/gaussian.py index 44bc238ab..d7ceee4d8 100644 --- a/glotaran/builtin/items/activation/gaussian.py +++ b/glotaran/builtin/items/activation/gaussian.py @@ -12,6 +12,7 @@ from glotaran.model.errors import ItemIssue from glotaran.model.item import Attribute from glotaran.model.item import ParameterType +from glotaran.parameter.parameter import Parameter if TYPE_CHECKING: from glotaran.parameter import Parameters @@ -172,6 +173,8 @@ def parameters( scales = self.scale or [1.0] * nr_gaussians backsweep = self.backsweep is not None backsweep_period = self.backsweep if backsweep else 0 + if isinstance(backsweep_period, Parameter): + backsweep_period = backsweep_period.value parameters: list[GaussianActivationParameters] = [ GaussianActivationParameters( From 3490e5202ca78615d7babfd575789afb1ab739cf Mon Sep 17 00:00:00 2001 From: Joris Snellenburg Date: Sat, 27 Jan 2024 18:24:55 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=91=8CSimplify=20the=20fix=20as=20per?= =?UTF-8?q?=20reviewer=20suggestions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is possible since Parameter implements __float__ --- glotaran/builtin/items/activation/gaussian.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/glotaran/builtin/items/activation/gaussian.py b/glotaran/builtin/items/activation/gaussian.py index d7ceee4d8..b3689d639 100644 --- a/glotaran/builtin/items/activation/gaussian.py +++ b/glotaran/builtin/items/activation/gaussian.py @@ -12,7 +12,6 @@ from glotaran.model.errors import ItemIssue from glotaran.model.item import Attribute from glotaran.model.item import ParameterType -from glotaran.parameter.parameter import Parameter if TYPE_CHECKING: from glotaran.parameter import Parameters @@ -172,9 +171,7 @@ def parameters( scales = self.scale or [1.0] * nr_gaussians backsweep = self.backsweep is not None - backsweep_period = self.backsweep if backsweep else 0 - if isinstance(backsweep_period, Parameter): - backsweep_period = backsweep_period.value + backsweep_period = float(self.backsweep) if backsweep else 0 parameters: list[GaussianActivationParameters] = [ GaussianActivationParameters( From b7880924544bc2a115fb9bc6f5fdda12354d877c Mon Sep 17 00:00:00 2001 From: Joris Snellenburg Date: Sat, 27 Jan 2024 18:28:32 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Revert=20"=F0=9F=91=8CSimplify=20the=20fix?= =?UTF-8?q?=20as=20per=20reviewer=20suggestions"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 3490e5202ca78615d7babfd575789afb1ab739cf. --- glotaran/builtin/items/activation/gaussian.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/glotaran/builtin/items/activation/gaussian.py b/glotaran/builtin/items/activation/gaussian.py index b3689d639..d7ceee4d8 100644 --- a/glotaran/builtin/items/activation/gaussian.py +++ b/glotaran/builtin/items/activation/gaussian.py @@ -12,6 +12,7 @@ from glotaran.model.errors import ItemIssue from glotaran.model.item import Attribute from glotaran.model.item import ParameterType +from glotaran.parameter.parameter import Parameter if TYPE_CHECKING: from glotaran.parameter import Parameters @@ -171,7 +172,9 @@ def parameters( scales = self.scale or [1.0] * nr_gaussians backsweep = self.backsweep is not None - backsweep_period = float(self.backsweep) if backsweep else 0 + backsweep_period = self.backsweep if backsweep else 0 + if isinstance(backsweep_period, Parameter): + backsweep_period = backsweep_period.value parameters: list[GaussianActivationParameters] = [ GaussianActivationParameters( From b2df4f7c82e58ea8c726c8d26fc13a7707f966e7 Mon Sep 17 00:00:00 2001 From: s-weigand Date: Sat, 27 Jan 2024 18:51:22 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Reapply=20"=F0=9F=91=8CSimplify=20the=20fix?= =?UTF-8?q?=20as=20per=20reviewer=20suggestions"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit b7880924544bc2a115fb9bc6f5fdda12354d877c. --- glotaran/builtin/items/activation/gaussian.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/glotaran/builtin/items/activation/gaussian.py b/glotaran/builtin/items/activation/gaussian.py index d7ceee4d8..b3689d639 100644 --- a/glotaran/builtin/items/activation/gaussian.py +++ b/glotaran/builtin/items/activation/gaussian.py @@ -12,7 +12,6 @@ from glotaran.model.errors import ItemIssue from glotaran.model.item import Attribute from glotaran.model.item import ParameterType -from glotaran.parameter.parameter import Parameter if TYPE_CHECKING: from glotaran.parameter import Parameters @@ -172,9 +171,7 @@ def parameters( scales = self.scale or [1.0] * nr_gaussians backsweep = self.backsweep is not None - backsweep_period = self.backsweep if backsweep else 0 - if isinstance(backsweep_period, Parameter): - backsweep_period = backsweep_period.value + backsweep_period = float(self.backsweep) if backsweep else 0 parameters: list[GaussianActivationParameters] = [ GaussianActivationParameters( From 3c4b3d2ed51fa217ba0f7eb9a711742c33f9512f Mon Sep 17 00:00:00 2001 From: s-weigand Date: Sat, 27 Jan 2024 18:56:55 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A7=B9=20Use=20`self.backsweep`=20ins?= =?UTF-8?q?tead=20of=20`backsweep`=20for=20condition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- glotaran/builtin/items/activation/gaussian.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glotaran/builtin/items/activation/gaussian.py b/glotaran/builtin/items/activation/gaussian.py index b3689d639..ceae90df0 100644 --- a/glotaran/builtin/items/activation/gaussian.py +++ b/glotaran/builtin/items/activation/gaussian.py @@ -171,7 +171,7 @@ def parameters( scales = self.scale or [1.0] * nr_gaussians backsweep = self.backsweep is not None - backsweep_period = float(self.backsweep) if backsweep else 0 + backsweep_period = float(self.backsweep) if self.backsweep is not None else 0 parameters: list[GaussianActivationParameters] = [ GaussianActivationParameters( @@ -179,7 +179,7 @@ def parameters( float(width), float(scale), backsweep, - backsweep_period, # type:ignore[arg-type] + backsweep_period, ) for center, width, scale in zip(centers, widths, scales) ]