Skip to content

Commit 42bade6

Browse files
authored
Merge pull request #1688 from Libensemble/release/v_1.6.0
Updating develop after release 1.6
2 parents 79b5c91 + afe97f9 commit 42bade6

12 files changed

Lines changed: 110 additions & 59 deletions

File tree

.wci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ description: |
1616
language: Python
1717

1818
release:
19-
version: 1.5.0
20-
date: 2025-04-10
19+
version: 1.6.0
20+
date: 2026-03-04
2121

2222
documentation:
2323
general: https://libensemble.readthedocs.io

CHANGELOG.rst

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,45 @@ GitHub issues are referenced, and can be viewed with hyperlinks on the `github r
88

99
.. _`github releases page`: https://github.com/Libensemble/libensemble/releases
1010

11+
Release 1.6.0
12+
--------------
13+
14+
:Date: March 04, 2026
15+
16+
General Updates:
17+
18+
* Support for ``gest-api`` generators (https://gest-api.readthedocs.io). #1307
19+
20+
* Support for any Xopt (v3.0+) and Optimas generators.
21+
* libEnsemble's APOSMM, gpCAM, and random sampling generators are supplied in ``gest-api`` format.
22+
* Support dictionary (Xopt-style) simulator functions.
23+
24+
* Simulation container support - Executor precedent accepts ``%LIBENSEMBLE_SIM_DIR%`` placeholder. #1672
25+
26+
Examples:
27+
28+
* Adding test for ibcdfo with jax. #1591
29+
* Optimas/Xopt examples. #1620 / #1635
30+
* Bayesian Optimization with Xopt tutorial / notebook.
31+
* Tasmanian generators moved to community examples.
32+
33+
Dependencies:
34+
35+
* ``gest-api`` is now a required dependency. #1666
36+
* Remove Pydantic v1 support and Balsam. #1573
37+
* Python 3.14 supported. #1609
38+
39+
40+
:Note:
41+
42+
* Tests were run on Linux and MacOS with Python versions 3.10, 3.11, 3.12, 3.13, 3.14
43+
* Heterogeneous workflows tested on Aurora (ALCF) and Perlmutter (NERSC).
44+
45+
:Known Issues:
46+
47+
* See known issues section in the documentation.
48+
49+
1150
Release 1.5.0
1251
--------------
1352

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
BSD 3-Clause License
22

3-
Copyright (c) 2018-2025, UChicago Argonne, LLC and the libEnsemble Development Team
3+
Copyright (c) 2018-2026, UChicago Argonne, LLC and the libEnsemble Development Team
44
All Rights Reserved.
55

66
Redistribution and use in source and binary forms, with or without

README.rst

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ and inference problems on the world's leading supercomputers such as Frontier, A
2222

2323
`Quickstart`_
2424

25-
**New:** Try out the |ScriptCreator| to generate customized scripts for running
26-
ensembles with your MPI applications.
25+
**New:** libEnsemble nows supports the `gest-api`_ generator standard, and can run with
26+
Optimas and Xopt generators.
27+
28+
The |ScriptCreator| to generate customized scripts for running ensembles with your
29+
MPI applications.
2730

2831
Installation
2932
============
@@ -44,52 +47,46 @@ and an exit condition. Run the following four-worker example via ``python this_f
4447
4548
import numpy as np
4649
47-
from gest_api.vocs import VOCS
48-
4950
from libensemble import Ensemble
50-
from libensemble.gen_classes.sampling import UniformSample
51+
from libensemble.gen_funcs.sampling import uniform_random_sample
5152
from libensemble.sim_funcs.six_hump_camel import six_hump_camel
5253
from libensemble.specs import ExitCriteria, GenSpecs, LibeSpecs, SimSpecs
5354
5455
if __name__ == "__main__":
5556
5657
libE_specs = LibeSpecs(nworkers=4)
5758
58-
variables_objectives = VOCS(
59-
variables={
60-
"x0": [-3, 3],
61-
"x1": [-2, 2],
62-
},
63-
objectives={"f": "EXPLORE"},
64-
)
65-
66-
generator = UniformSample(vocs=variables_objectives)
67-
6859
sim_specs = SimSpecs(
6960
sim_f=six_hump_camel,
70-
vocs=variables_objectives,
61+
inputs=["x"],
62+
outputs=[("f", float)],
7163
)
7264
7365
gen_specs = GenSpecs(
74-
generator=generator,
75-
vocs=variables_objectives,
66+
gen_f=uniform_random_sample,
67+
outputs=[("x", float, 2)],
68+
user={
69+
"gen_batch_size": 50,
70+
"lb": np.array([-3, -2]),
71+
"ub": np.array([3, 2]),
72+
},
7673
)
7774
7875
exit_criteria = ExitCriteria(sim_max=100)
7976
80-
ensemble = Ensemble(
77+
sampling = Ensemble(
8178
libE_specs=libE_specs,
8279
sim_specs=sim_specs,
8380
gen_specs=gen_specs,
8481
exit_criteria=exit_criteria,
8582
)
8683
87-
ensemble.add_random_streams()
88-
ensemble.run()
84+
sampling.add_random_streams()
85+
sampling.run()
8986
90-
if ensemble.is_manager:
91-
ensemble.save_output(__file__)
92-
print("Some output data:\n", ensemble.H[["x", "f"]][:10])
87+
if sampling.is_manager:
88+
sampling.save_output(__file__)
89+
print("Some output data:\n", sampling.H[["x", "f"]][:10])
9390
9491
|Inline Example|
9592

@@ -106,6 +103,8 @@ Try some other examples live in Colab.
106103
+---------------------------------------------------------------+-------------------------------------+
107104
| Surrogate model generation with gpCAM. | |Surrogate Modeling| |
108105
+---------------------------------------------------------------+-------------------------------------+
106+
| Bayesian Optimization with Xopt. | |Bayesian Optimization with Xopt| |
107+
+---------------------------------------------------------------+-------------------------------------+
109108

110109
There are many more examples in the `regression tests`_ and `Community Examples repository`_.
111110

@@ -167,6 +166,7 @@ Resources
167166
.. _conda-forge: https://conda-forge.org/
168167
.. _Contributions: https://github.com/Libensemble/libensemble/blob/main/CONTRIBUTING.rst
169168
.. _docs: https://libensemble.readthedocs.io/en/main/advanced_installation.html
169+
.. _gest-api: https://gest-api.readthedocs.io
170170
.. _GitHub: https://github.com/Libensemble/libensemble
171171
.. _libEnsemble mailing list: https://lists.mcs.anl.gov/mailman/listinfo/libensemble
172172
.. _libEnsemble Slack page: https://libensemble.slack.com
@@ -192,6 +192,9 @@ Resources
192192
.. |Surrogate Modeling| image:: https://colab.research.google.com/assets/colab-badge.svg
193193
:target: https://colab.research.google.com/github/Libensemble/libensemble/blob/develop/examples/tutorials/gpcam_surrogate_model/gpcam.ipynb
194194

195+
.. |Bayesian Optimization with Xopt| image:: https://colab.research.google.com/assets/colab-badge.svg
196+
:target: https://colab.research.google.com/github/Libensemble/libensemble/blob/develop/examples/tutorials/xopt_bayesian_gen/xopt_EI_example.ipynb
197+
195198
.. |ScriptCreator| image:: https://img.shields.io/badge/Script_Creator-purple?logo=magic
196199
:target: https://libensemble.github.io/script-creator/
197200
:alt: Script Creator

docs/examples/gest_api.rst

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
(New) Standardized Generators
33
=============================
44

5-
libEnsemble now also supports all generators that implement the gest_api_ interface.
5+
libEnsemble also supports all generators that use the gest_api_ interface.
66

77
.. code-block:: python
88
:linenos:
@@ -78,26 +78,36 @@ Modeling and Approximation
7878
Verified Third Party Examples
7979
=============================
8080

81-
Generators that implement the gest_api_ interface and are verified to work with libEnsemble.
81+
Generators that use the gest_api_ interface and are verified to work with libEnsemble.
8282

8383
The standardized interface was developed in partnership with their authors.
8484

8585
Xopt - https://github.com/xopt-org/Xopt
8686
---------------------------------------
8787

88+
Examples:
89+
8890
`Expected Improvement`_
8991

9092
`Nelder Mead`_
9193

9294
Optimas - https://github.com/optimas-org/optimas
9395
------------------------------------------------
9496

97+
Examples:
98+
9599
`Grid Sampling`_
96100

101+
`Ax Multi-fidelity`_
102+
97103
.. _gest_api: https://github.com/campa-consortium/gest-api
98104
.. _gpcam: https://gpcam.lbl.gov/
99105
.. _paper: https://link.springer.com/article/10.1007/s12532-017-0131-4
100106

101-
.. _Expected Improvement: https://github.com/xopt-org/Xopt/blob/main/xopt/generators/bayesian/expected_improvement.py
102-
.. _Nelder Mead: https://github.com/xopt-org/Xopt/blob/main/xopt/generators/sequential/neldermead.py
103-
.. _Grid Sampling: https://github.com/optimas-org/optimas/blob/main/optimas/generators/grid_sampling.py
107+
.. _Expected Improvement: https://github.com/Libensemble/libensemble/blob/develop/libensemble/tests/regression_tests/test_xopt_EI.py
108+
109+
.. _Nelder Mead: https://github.com/Libensemble/libensemble/blob/develop/libensemble/tests/regression_tests/test_xopt_nelder_mead.py
110+
111+
.. _Grid Sampling: https://github.com/Libensemble/libensemble/blob/develop/libensemble/tests/regression_tests/test_optimas_grid_sample.py
112+
113+
.. _Ax Multi-fidelity: https://github.com/Libensemble/libensemble/blob/develop/libensemble/tests/regression_tests/test_optimas_ax_mf.py

docs/function_guides/ask_tell_generator.rst

Lines changed: 0 additions & 21 deletions
This file was deleted.

docs/function_guides/function_guide_index.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ These guides describe common development patterns and optional components:
1313
:caption: Writing User Functions
1414

1515
generator
16-
ask_tell_generator
1716
simulator
1817
allocator
1918
sim_gen_alloc_api

docs/tutorials/xopt_bayesian_gen.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,4 @@ Reset generator and change to libEnsemble-style simulator:
168168
assert np.array_equal(H["c1"], H["x1"])
169169
170170
.. |Open in Colab| image:: https://colab.research.google.com/assets/colab-badge.svg
171-
:target: http://colab.research.google.com/github/Libensemble/libensemble/blob/examples/xopt_generators/examples/tutorials/xopt_bayesian_gen/xopt_EI_example.ipynb
171+
:target: https://colab.research.google.com/github/Libensemble/libensemble/blob/develop/examples/tutorials/xopt_bayesian_gen/xopt_EI_example.ipynb

examples/tutorials/xopt_bayesian_gen/xopt_EI_example.ipynb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,26 @@
1414
"2. Using a libEnsemble-style simulator function\n"
1515
]
1616
},
17+
{
18+
"cell_type": "markdown",
19+
"metadata": {},
20+
"source": [
21+
"# Check installed packages"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": null,
27+
"metadata": {},
28+
"outputs": [],
29+
"source": [
30+
"import sys\n",
31+
"if 'google.colab' in sys.modules:\n",
32+
" !pip install gest-api\n",
33+
" !pip install xopt\n",
34+
" !pip install libensemble"
35+
]
36+
},
1737
{
1838
"cell_type": "markdown",
1939
"metadata": {},

libensemble/gen_funcs/aposmm_localopt_support.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class APOSMMException(Exception):
4545
if "dfols" in optimizers:
4646
import dfols # noqa: F401
4747
if "ibcdfo_pounders" in optimizers:
48-
from ibcdfo import run_pounders
48+
from ibcdfo import run_pounders # noqa: F401
4949
if "ibcdfo_manifold_sampling" in optimizers:
5050
from ibcdfo import run_MSP # noqa: F401
5151
if "scipy" in optimizers:
@@ -434,7 +434,7 @@ def run_local_ibcdfo_manifold_sampling(user_specs, comm_queue, x0, f0, child_can
434434
not be sent back to the manager).
435435
"""
436436
from ibcdfo import run_MSP # noqa: F811
437-
437+
438438
n = len(x0)
439439
# Define bound constraints (lower <= x <= upper)
440440
lb = np.zeros(n)
@@ -490,7 +490,7 @@ def run_local_ibcdfo_pounders(user_specs, comm_queue, x0, f0, child_can_read, pa
490490
not be sent back to the manager).
491491
"""
492492
from ibcdfo import run_pounders # noqa: F811
493-
493+
494494
n = len(x0)
495495
# Define bound constraints (lower <= x <= upper)
496496
lb = np.zeros(n)

0 commit comments

Comments
 (0)