From 684ebb42077c59088660f1d2bdc42edd778191a8 Mon Sep 17 00:00:00 2001 From: Cliff Kerr Date: Mon, 25 May 2026 08:55:01 -0400 Subject: [PATCH 1/6] Update pyswarm syntax and version --- atomica/optimization.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/atomica/optimization.py b/atomica/optimization.py index 556e597e..a31aa34d 100644 --- a/atomica/optimization.py +++ b/atomica/optimization.py @@ -1452,7 +1452,7 @@ def optimize(project, optimization, parset: ParameterSet, progset: ProgramSet, i errormsg = "PSO optimization requires finite upper and lower bounds to specify the search domain (i.e. every Adjustable needs to have finite bounds)" raise Exception(errormsg) - x_opt, _ = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args) + x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args) elif optimization.method == "hyperopt": diff --git a/pyproject.toml b/pyproject.toml index af0cf1e5..9a444bc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "pandas", "xlsxwriter", "openpyxl", - "pyswarm", + "pyswarm>=1.0", "hyperopt", "sciris", "tqdm", From 22aef7353c282c1cf35e7aa87088191e04c8dacf Mon Sep 17 00:00:00 2001 From: Romesh Abeysuriya Date: Tue, 26 May 2026 09:44:10 +1000 Subject: [PATCH 2/6] Fix pyswarm.pso() call and update pyproject.toml --- atomica/optimization.py | 2 +- pyproject.toml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/atomica/optimization.py b/atomica/optimization.py index a31aa34d..0c6235f8 100644 --- a/atomica/optimization.py +++ b/atomica/optimization.py @@ -1452,7 +1452,7 @@ def optimize(project, optimization, parset: ParameterSet, progset: ProgramSet, i errormsg = "PSO optimization requires finite upper and lower bounds to specify the search domain (i.e. every Adjustable needs to have finite bounds)" raise Exception(errormsg) - x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args) + x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args).x elif optimization.method == "hyperopt": diff --git a/pyproject.toml b/pyproject.toml index 9a444bc0..e70c3c0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13" ] -requires-python = ">=3.7" +requires-python = ">=3.10" dependencies = [ "matplotlib", @@ -37,7 +37,7 @@ dependencies = [ "pandas", "xlsxwriter", "openpyxl", - "pyswarm>=1.0", + "pyswarm", "hyperopt", "sciris", "tqdm", @@ -53,4 +53,4 @@ include-package-data = true where = ["."] [tool.setuptools.dynamic] -version = {attr = "atomica.version.version"} \ No newline at end of file +version = {attr = "atomica.version.version"} From 836f4815d888fe12b3957737517f7404f5da4c5b Mon Sep 17 00:00:00 2001 From: Romesh Abeysuriya Date: Tue, 26 May 2026 09:44:18 +1000 Subject: [PATCH 3/6] Increment version --- CHANGELOG.md | 5 +++++ atomica/version.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfec4729..44ecf4d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ This file records changes to the codebase grouped by version release. Unreleased changes are generally only present during development (relevant parts of the changelog can be written and saved in that section before a version number has been assigned) +## [1.31.5] - 2026-05-26 + +- Update optimization function for compatibility with latest `pyswarm` release +- Update minimum Python version to 3.10 as previous versions are deprecated + ## [1.31.4] - 2026-01-28 - Updated internal functions for Python 3.14 and Pandas 3.0.0 diff --git a/atomica/version.py b/atomica/version.py index 3277ea6b..fa7668d7 100644 --- a/atomica/version.py +++ b/atomica/version.py @@ -3,5 +3,5 @@ Standard location for module version number and date. """ -version = "1.31.4" -versiondate = "2026-01-28" +version = "1.31.5" +versiondate = "2026-05-26" From 4ce4337077111057f3f1dc64b74ff17473a9acb3 Mon Sep 17 00:00:00 2001 From: Romesh Abeysuriya Date: Tue, 26 May 2026 09:56:07 +1000 Subject: [PATCH 4/6] Force pyswarm 1.0.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e70c3c0f..723895bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "pandas", "xlsxwriter", "openpyxl", - "pyswarm", + "pyswarm>=1.0.0", "hyperopt", "sciris", "tqdm", From e02a0546c73189ad7d3337c4d39dfd36f04caf3b Mon Sep 17 00:00:00 2001 From: Romesh Abeysuriya Date: Tue, 26 May 2026 10:10:56 +1000 Subject: [PATCH 5/6] Maintain compatibility as Mac OS is installing a different version --- atomica/optimization.py | 7 ++++++- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/atomica/optimization.py b/atomica/optimization.py index 0c6235f8..f872612c 100644 --- a/atomica/optimization.py +++ b/atomica/optimization.py @@ -1452,7 +1452,12 @@ def optimize(project, optimization, parset: ParameterSet, progset: ProgramSet, i errormsg = "PSO optimization requires finite upper and lower bounds to specify the search domain (i.e. every Adjustable needs to have finite bounds)" raise Exception(errormsg) - x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args).x + if sc.compareversions(pyswarm, ">1.0.0"): + x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args).x + else: + # On Mac OS, Pyswarm 1.0.0 is not installing yet. This can be revisited and hopefully + # removed once the incompatibility is resolved (possibly by switching to more recent UV pipeline) + x_opt, _ = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args) elif optimization.method == "hyperopt": diff --git a/pyproject.toml b/pyproject.toml index 723895bb..e70c3c0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "pandas", "xlsxwriter", "openpyxl", - "pyswarm>=1.0.0", + "pyswarm", "hyperopt", "sciris", "tqdm", From b365b318f770f1cc0f58b2f4b7413a029b6db877 Mon Sep 17 00:00:00 2001 From: Romesh Abeysuriya Date: Tue, 26 May 2026 10:23:29 +1000 Subject: [PATCH 6/6] Fix typo --- atomica/optimization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomica/optimization.py b/atomica/optimization.py index f872612c..7620a87f 100644 --- a/atomica/optimization.py +++ b/atomica/optimization.py @@ -1452,7 +1452,7 @@ def optimize(project, optimization, parset: ParameterSet, progset: ProgramSet, i errormsg = "PSO optimization requires finite upper and lower bounds to specify the search domain (i.e. every Adjustable needs to have finite bounds)" raise Exception(errormsg) - if sc.compareversions(pyswarm, ">1.0.0"): + if sc.compareversions(pyswarm, ">=1.0.0"): x_opt = pyswarm.pso(_objective_fcn, kwargs=args, **optim_args).x else: # On Mac OS, Pyswarm 1.0.0 is not installing yet. This can be revisited and hopefully