diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 226855fa..25d42601 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -1,13 +1,18 @@
name: Unix
-on: [push, pull_request]
+on:
+ push:
+ pull_request:
+ # Run daily at midnight (UTC).
+ schedule:
+ - cron: '0 0 * * *'
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: [3.8]
+ python-version: [3.8, 3.9, '3.10', 3.11]
steps:
- uses: actions/checkout@v2
diff --git a/Analyze_optimization_results.ipynb b/Analyze_optimization_results.ipynb
deleted file mode 100644
index ddc3f964..00000000
--- a/Analyze_optimization_results.ipynb
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Overview\n",
- "\n",
- "This notebook analyses and visualizes the results of a `optimas` optimization."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "import matplotlib.pyplot as plt\n",
- "from optimas.post_processing import PostProcOptimization\n",
- "%matplotlib notebook"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Modify the path below, to point to your optimization\n",
- "pp = PostProcOptimization('./optimization_folder/test_mf_disc/')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "pp.get_df() "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "pp.plot_optimization()\n",
- "t0 = np.linspace(0, pp.get_df()['returned_time'].max(), 200 )\n",
- "pp.get_trace(plot=True, t_array=t0);"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "plt.figure()\n",
- "pp.plot_worker_timeline( fidelity_parameter='resolution' )"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "libe_env",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.15"
- },
- "vscode": {
- "interpreter": {
- "hash": "bfb1269c5d150bb39b3cc7af346375a5d6d04845d8cc3a7072c5122e27bb644e"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/README.md b/README.md
index e9c47cd2..93ab285c 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,81 @@
-
-
-
-
-
-# Optimization at scale, powered by [libEnsemble](https://libensemble.readthedocs.io/)
[![PyPI](https://img.shields.io/pypi/v/optimas)](https://pypi.org/project/optimas/)
[![tests badge](https://github.com/optimas-org/optimas/actions/workflows/unix.yml/badge.svg)](https://github.com/optimas-org/optimas/actions)
[![Documentation Status](https://readthedocs.org/projects/optimas/badge/?version=latest)](https://optimas.readthedocs.io/en/latest/?badge=latest)
[![DOI](https://zenodo.org/badge/287560975.svg)](https://zenodo.org/badge/latestdoi/287560975)
[![License](https://img.shields.io/pypi/l/optimas.svg)](license.txt)
+
+
+
+
Optimas is a Python library for scalable optimization on massively-parallel supercomputers. See the [documentation](https://optimas.readthedocs.io/) for installation instructions, tutorials, and more information.
+
+## Installation
+From PyPI
+```sh
+pip install optimas
+```
+From GitHub
+```sh
+pip install git+https://github.com/optimas-org/optimas.git
+```
+Make sure `mpi4py` is available in your environment prior to installing optimas (see [here](https://optimas.readthedocs.io/en/latest/user_guide/installation_local.html) for more details).
+
+Optimas is regularly used and tested in large distributed HPC systems.
+We have prepared installation instructions for
+[JUWELS (JSC)](https://optimas.readthedocs.io/en/latest/user_guide/installation_juwels.html),
+[Maxwell (DESY)](https://optimas.readthedocs.io/en/latest/user_guide/installation_maxwell.html) and
+[Perlmutter (NERSC)](https://optimas.readthedocs.io/en/latest/user_guide/installation_perlmutter.html).
+
+## Citing optimas
+If your usage of `optimas` leads to a scientific publication, please consider citing the original [paper](https://link.aps.org/doi/10.1103/PhysRevAccelBeams.26.084601):
+```bibtex
+@article{PhysRevAccelBeams.26.084601,
+ title = {Bayesian optimization of laser-plasma accelerators assisted by reduced physical models},
+ author = {Ferran Pousa, A. and Jalas, S. and Kirchen, M. and Martinez de la Ossa, A. and Th\'evenet, M. and Hudson, S. and Larson, J. and Huebl, A. and Vay, J.-L. and Lehe, R.},
+ journal = {Phys. Rev. Accel. Beams},
+ volume = {26},
+ issue = {8},
+ pages = {084601},
+ numpages = {9},
+ year = {2023},
+ month = {Aug},
+ publisher = {American Physical Society},
+ doi = {10.1103/PhysRevAccelBeams.26.084601},
+ url = {https://link.aps.org/doi/10.1103/PhysRevAccelBeams.26.084601}
+}
+```
+and libEnsemble:
+```bibtex
+@article{Hudson2022,
+ title = {{libEnsemble}: A Library to Coordinate the Concurrent
+ Evaluation of Dynamic Ensembles of Calculations},
+ author = {Stephen Hudson and Jeffrey Larson and John-Luke Navarro and Stefan M. Wild},
+ journal = {{IEEE} Transactions on Parallel and Distributed Systems},
+ volume = {33},
+ number = {4},
+ pages = {977--988},
+ year = {2022},
+ doi = {10.1109/tpds.2021.3082815}
+}
+```
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 06fbf8cd..b3da5f51 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -80,7 +80,7 @@
},
{
"name": "Slack",
- "url": "https://optimas.slack.com/",
+ "url": "https://optimas-group.slack.com/",
"icon": "fa-brands fa-slack",
},
],
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 7e3c6ee2..dd7b73b9 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -12,7 +12,7 @@ parallel optimization, from a typical laptop to exascale HPC systems. It is
built on top of
`libEnsemble `_.
-.. grid:: 3
+.. grid:: 1 1 3 3
:gutter: 2
.. grid-item-card:: User guide
diff --git a/doc/source/user_guide/basic_usage/analyze_output.rst b/doc/source/user_guide/basic_usage/analyze_output.rst
index d2a9d331..bd43d11e 100644
--- a/doc/source/user_guide/basic_usage/analyze_output.rst
+++ b/doc/source/user_guide/basic_usage/analyze_output.rst
@@ -14,7 +14,7 @@ In every run, the following log files are generated:
- ``libE-stats.txt``: log indicating the worker, start time, end time, etc. of
each evaluation.
-- ``ensemble.log``: log of ``libEnsemble`` containg the main events of
+- ``ensemble.log``: log of ``libEnsemble`` containing the main events of
the run. This includes the commands with each evaluation is launched.
- ``libE_history_for_run_starting__after_sim_.npy``:
numpy file that contains the
@@ -57,7 +57,7 @@ generated. This is the case, for example, of the
``AxClient`` with the surrogate model used for Bayesian optimization.
Generators that have this capability can also save the internal model
-model to file with a certain periodicity (set by the ``model_save_period``
+to file with a certain periodicity (set by the ``model_save_period``
attribute). By default, these models will be saved in a
``exploration/model_history`` directory.
diff --git a/doc/source/user_guide/citation.rst b/doc/source/user_guide/citation.rst
new file mode 100644
index 00000000..682ab91b
--- /dev/null
+++ b/doc/source/user_guide/citation.rst
@@ -0,0 +1,38 @@
+Citing optimas
+==============
+
+If your usage of ``optimas`` leads to a scientific publication, please consider
+citing the original `paper `_:
+
+.. code-block:: bibtex
+
+ @article{PhysRevAccelBeams.26.084601,
+ title = {Bayesian optimization of laser-plasma accelerators assisted by reduced physical models},
+ author = {Ferran Pousa, A. and Jalas, S. and Kirchen, M. and Martinez de la Ossa, A. and Th\'evenet, M. and Hudson, S. and Larson, J. and Huebl, A. and Vay, J.-L. and Lehe, R.},
+ journal = {Phys. Rev. Accel. Beams},
+ volume = {26},
+ issue = {8},
+ pages = {084601},
+ numpages = {9},
+ year = {2023},
+ month = {Aug},
+ publisher = {American Physical Society},
+ doi = {10.1103/PhysRevAccelBeams.26.084601},
+ url = {https://link.aps.org/doi/10.1103/PhysRevAccelBeams.26.084601}
+ }
+
+and libEnsemble:
+
+.. code-block:: bibtex
+
+ @article{Hudson2022,
+ title = {{libEnsemble}: A Library to Coordinate the Concurrent
+ Evaluation of Dynamic Ensembles of Calculations},
+ author = {Stephen Hudson and Jeffrey Larson and John-Luke Navarro and Stefan M. Wild},
+ journal = {{IEEE} Transactions on Parallel and Distributed Systems},
+ volume = {33},
+ number = {4},
+ pages = {977--988},
+ year = {2022},
+ doi = {10.1109/tpds.2021.3082815}
+ }
\ No newline at end of file
diff --git a/doc/source/user_guide/dependencies.rst b/doc/source/user_guide/dependencies.rst
new file mode 100644
index 00000000..d7eeddc5
--- /dev/null
+++ b/doc/source/user_guide/dependencies.rst
@@ -0,0 +1,9 @@
+Dependencies
+============
+
+Optimas relies on the following packages:
+
+* `mpi4py `_ - Python bindings for MPI. Required for launching parallel simulations.
+* `libEnsemble `_ - The backbone of optimas, orchestrates the concurrent evaluation of simulations, the resource detection and allocation, and the communication between simulations and manager.
+* `jinja2 `_ - Needed to generate simulation scripts from templates.
+* `Ax `_ - Algorithms for Bayesian optimization.
diff --git a/doc/source/user_guide/index.rst b/doc/source/user_guide/index.rst
index 8d508e84..1ebbc0d5 100644
--- a/doc/source/user_guide/index.rst
+++ b/doc/source/user_guide/index.rst
@@ -4,10 +4,14 @@ User guide
==========
.. toctree::
- :maxdepth: 2
+ :maxdepth: 1
:caption: Installation
- installation
+ dependencies
+ installation_local
+ installation_maxwell
+ installation_juwels
+ installation_perlmutter
.. toctree::
:maxdepth: 2
@@ -15,4 +19,10 @@ User guide
basic_usage/basic_setup
basic_usage/running_with_simulations
- basic_usage/analyze_output
\ No newline at end of file
+ basic_usage/analyze_output
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Citation
+
+ citation
diff --git a/doc/source/user_guide/installation.rst b/doc/source/user_guide/installation.rst
deleted file mode 100644
index fb078224..00000000
--- a/doc/source/user_guide/installation.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-Installing optimas
-==================
-Optimas is supported on Python 3.8 and above. The package can be installed from
-PyPI using ``pip`` or directly from GitHub.
-
-
-Dependencies
-------------
-Optimas relies on the following packages:
-
-* `NumPy `_ - Basic dependency for array operations.
-* `Pandas `_ - Data analysis library required for post-processing and other dependencies.
-* `mpi4py `_ - Python bindings for MPI. Required for launching parallel simulations.
-* `libEnsemble `_ - The backbone of optimas, orchestrates the concurrent evaluation of simulations, the resource detection and allocation, and the communication between simulations and manager.
-* `jinja2 `_ - Needed to generate simulation scripts from templates.
-* `Pytorch `_ - Required by the Bayesian optimization generators.
-* `Ax `_ - Algorithms for Bayesian optimization.
-
-Instructions
-------------
-Step-by-step instructions for installing optimas on a local computer and on
-different HPC clusters:
-
-.. toctree::
- :maxdepth: 1
-
- installation_local
- installation_maxwell
- installation_juwels
- installation_perlmutter
diff --git a/doc/source/user_guide/installation_local.rst b/doc/source/user_guide/installation_local.rst
index 191d875c..e9f738d3 100644
--- a/doc/source/user_guide/installation_local.rst
+++ b/doc/source/user_guide/installation_local.rst
@@ -3,30 +3,6 @@ Installation on a local computer
The recommended approach is to install optimas in a ``conda`` environment.
-Install basic dependencies
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. code::
-
- conda install numpy pandas
-
-Install PyTorch
-~~~~~~~~~~~~~~~
-
-If your computer does not feature a CUDA-capable GPU, install PyTorch for CPU:
-
-.. code::
-
- conda install pytorch cpuonly -c pytorch
-
-
-If you have a CUDA-capable GPU and want to take make it available to optimas,
-install PyTorch with:
-
-.. code::
-
- conda install pytorch pytorch-cuda=11.7 -c pytorch -c nvidia
-
Install ``mpi4py``
~~~~~~~~~~~~~~~~~~
If your system has already an MPI implementation installed, install ``mpi4py``
diff --git a/examples/multitask_lpa_fbpic_waket/custom_fld_diags.py b/examples/multitask_lpa_fbpic_waket/custom_fld_diags.py
index eb71731b..628d30af 100644
--- a/examples/multitask_lpa_fbpic_waket/custom_fld_diags.py
+++ b/examples/multitask_lpa_fbpic_waket/custom_fld_diags.py
@@ -326,10 +326,10 @@ def write_slices( self, field_array, iz_min, iz_max, snapshot, f2i ):
The indices between which the slices will be written
iz_min is inclusice and iz_max is exclusive
- snapshot: a LabSnaphot object
+ snapshot: a LabSnapshot object
f2i: dict
- Dictionary of correspondance between the field names
+ Dictionary of correspondence between the field names
and the integer index in the field_array
"""
# Open the file without parallel I/O in this implementation
@@ -457,10 +457,10 @@ def register_slice( self, inv_dz_lab ):
"""
# Find the index of the slice in the lab frame
if self.buffer_z_indices == []:
- # No previous index: caculate it from the absolute z_lab
+ # No previous index: calculate it from the absolute z_lab
iz_lab = int( (self.current_z_lab - self.zmin_lab)*inv_dz_lab )
else:
- # By construction, this index shoud be the previous index - 1
+ # By construction, this index should be the previous index - 1
# Handling integers avoids unstable roundoff errors, when
# self.current_z_lab is very close to zmin_lab + iz_lab*dz_lab
iz_lab = self.buffer_z_indices[-1] - 1
@@ -543,7 +543,7 @@ def __init__( self, gamma_boost, beta_boost, Nr_output ):
self.beta_boost = beta_boost
self.Nr_output = Nr_output
- # Create a dictionary that contains the correspondance
+ # Create a dictionary that contains the correspondence
# between the field names and array index
self.field_to_index = {'Er':0, 'Et':1, 'Ez':2, 'Br':3,
'Bt':4, 'Bz':5, 'Jr':6, 'Jt':7, 'Jz':8, 'rho':9}
@@ -561,7 +561,7 @@ def extract_slice( self, fld, comm, z_boost, zmin_boost, slice_array ):
The object from which to extract the fields
comm: a BoundaryCommunicator object
- Contains information about the gard cells in particular
+ Contains information about the guard cells in particular
z_boost: float (meters)
Position of the slice in the boosted frame
@@ -574,7 +574,7 @@ def extract_slice( self, fld, comm, z_boost, zmin_boost, slice_array ):
An array of reals that packs together the slices of the
different fields (always on array on the CPU).
The first index of this array corresponds to the field type
- (10 different field types), and the correspondance
+ (10 different field types), and the correspondence
between the field type and integer index is given field_to_index
The shape of this arrays is (10, 2*Nm-1, Nr_output)
"""
@@ -631,7 +631,7 @@ def extract_slice_cpu( self, fld, iz, Sz, slice_array ):
slice_array: np.ndarray
Array of shape (10, 2*Nm-1, Nr_output )
"""
- # Shortcut for the correspondance between field and integer index
+ # Shortcut for the correspondence between field and integer index
f2i = self.field_to_index
# Loop through the fields, and extract the proper slice for each field
@@ -708,7 +708,7 @@ def transform_fields_to_lab_frame( self, fields ):
gamma = self.gamma_boost
cbeta = c*self.beta_boost
beta_c = self.beta_boost/c
- # Shortcut to give the correspondance between field name
+ # Shortcut to give the correspondence between field name
# (e.g. 'Ex', 'rho') and integer index in the array
f2i = self.field_to_index
@@ -757,7 +757,7 @@ def extract_slice_cuda( Nr, iz, Sz, slice_arr,
Array of floats of shape (10, 2*Nm-1, Nr)
Er, Et, etc...: cupy.empty
- Array of complexs of shape (Nz, Nr), for the azimuthal mode m
+ Array of complexes of shape (Nz, Nr), for the azimuthal mode m
m: int
Index of the azimuthal mode involved
diff --git a/examples/multitask_lpa_fbpic_waket/custom_ptcl_diags.py b/examples/multitask_lpa_fbpic_waket/custom_ptcl_diags.py
index 84d352f4..6f6c8ff3 100644
--- a/examples/multitask_lpa_fbpic_waket/custom_ptcl_diags.py
+++ b/examples/multitask_lpa_fbpic_waket/custom_ptcl_diags.py
@@ -265,7 +265,7 @@ def write_slices( self, particle_dict, species_name, snapshot ):
species_name: String
A String that acts as the key for the buffered_slices dictionary
- snapshot: a LabSnaphot object
+ snapshot: a LabSnapshot object
"""
# Open the file without parallel I/O in this implementation
f = self.open_file(snapshot.filename)
@@ -465,7 +465,7 @@ def update_current_output_positions( self, t_boost, inv_gamma, inv_beta ):
Inverse of the Lorentz factor of the boost, and inverse
of the corresponding beta
"""
- # Some shorcuts for further calculation's purposes
+ # Some shortcuts for further calculation's purposes
t_lab = self.t_lab
t_boost_prev = t_boost - self.dt
@@ -585,7 +585,7 @@ def extract_slice( self, species, current_z_boost, previous_z_boost,
-------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
"""
# Get a dictionary containing the particle data
@@ -644,7 +644,7 @@ def get_particle_data( self, species, current_z_boost,
-------
particle_data : A dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
"""
# CPU
@@ -724,7 +724,7 @@ def get_particle_slice( self, particle_data, current_z_boost,
----------
particle_data : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
current_z_boost, previous_z_boost : float (m)
@@ -777,7 +777,7 @@ def interpolate_particles_to_lab_frame( self, slice_data_dict,
----------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
current_z_boost : float (m)
@@ -790,7 +790,7 @@ def interpolate_particles_to_lab_frame( self, slice_data_dict,
------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
"""
# Shortcuts for particle attributes
@@ -845,7 +845,7 @@ def apply_opmd_standard( self, slice_data_dict, species ):
----------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
species : A ParticleObject
@@ -856,7 +856,7 @@ def apply_opmd_standard( self, slice_data_dict, species ):
-------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id")
"""
# Normalize momenta
@@ -883,14 +883,14 @@ def apply_selection( self, select, slice_data_dict ) :
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
Returns
-------
slice_data_dict : dictionary of 1D float and integer arrays
A dictionary that contains the particle data of
- the simulation (with normalized weigths), including optional
+ the simulation (with normalized weights), including optional
integer arrays (e.g. "id", "charge")
"""
# Initialize an array filled with True
diff --git a/examples/multitask_lpa_fbpic_waket/template_simulation_script.py b/examples/multitask_lpa_fbpic_waket/template_simulation_script.py
index ac13a24d..34783ea7 100644
--- a/examples/multitask_lpa_fbpic_waket/template_simulation_script.py
+++ b/examples/multitask_lpa_fbpic_waket/template_simulation_script.py
@@ -68,13 +68,13 @@ def run_simulation():
w = np.abs(q / ct.e)
bunch = ParticleBunch(w, x, y, z, ux, uy, uz, name="bunch")
- # Distance between right bounday and laser centroid.
+ # Distance between right boundary and laser centroid.
dz_lb = 4.0 * ct.c * tau_laser
# Maximum radial extension of the plasma.
p_rmax = 2.5 * w0_laser
- # Box lenght.
+ # Box length.
l_box = dz_lb + 90e-6
# Number of diagnostics
diff --git a/examples/wake_t_fbpic_mt/run_example.py b/examples/wake_t_fbpic_mt/run_example.py
index 0c5cfa46..0c27bc20 100644
--- a/examples/wake_t_fbpic_mt/run_example.py
+++ b/examples/wake_t_fbpic_mt/run_example.py
@@ -1,6 +1,6 @@
"""
This example optimizes the focusing strength of an active plasma lens using
-Wake-T and FBPIC simulations by emplying a multitask generator.
+Wake-T and FBPIC simulations by employing a multitask generator.
The simulations are performed using the template defined in the
`template_simulation_script.py` file, which executes Wake-T or FBPIC
diff --git a/optimas/generators/ax/developer/multitask.py b/optimas/generators/ax/developer/multitask.py
index c06e3a1c..18a7adb7 100644
--- a/optimas/generators/ax/developer/multitask.py
+++ b/optimas/generators/ax/developer/multitask.py
@@ -15,12 +15,17 @@
from ax.core.optimization_config import OptimizationConfig
from ax.core.objective import Objective as AxObjective
from ax.runners import SyntheticRunner
-from ax.modelbridge.factory import get_sobol, get_MTGP
+from ax.modelbridge.factory import get_sobol
from ax.modelbridge.torch import TorchModelBridge
from ax.core.observation import ObservationFeatures
from ax.core.generator_run import GeneratorRun
from ax.storage.json_store.save import save_experiment
from ax.storage.metric_registry import register_metric
+try:
+ from ax.modelbridge.factory import get_MTGP
+except ImportError:
+ # For Ax >= 0.3.4
+ from ax.modelbridge.factory import get_MTGP_LEGACY as get_MTGP
from optimas.generators.ax.base import AxGenerator
from optimas.core import (TrialParameter, VaryingParameter, Objective,
diff --git a/submission_scripts/juwels b/submission_scripts/juwels
deleted file mode 100644
index 9e8d9d06..00000000
--- a/submission_scripts/juwels
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash -x
-#SBATCH -J {name}
-#SBATCH --nodes={n_nodes}
-#SBATCH --ntasks-per-node=4
-#SBATCH --output=mpi-out.%j
-#SBATCH --error=mpi-err.%j
-#SBATCH --time={max_time}
-#SBATCH --partition=booster
-#SBATCH --account=plasmabbq
-#SBATCH --gres=gpu:4
-
-source activate optimization
-
-export NUMBA_NUM_THREADS=1
-export OMP_NUM_THREADS=1
-export FBPIC_ENABLE_GPUDIRECT=0
-export CUDA_VISIBLE_DEVICES=""
-
-# Script to run libEnsemble using multiprocessing on launch nodes.
-# Assumes Conda environment is set up.
-
-export LIBE_SIM_EXTRA_ARGS="--gres=gpu:1"
-
-python run_example.py --comms local --nworkers {n_workers}
-
-
diff --git a/submission_scripts/lawrencium b/submission_scripts/lawrencium
deleted file mode 100644
index 4a3379d9..00000000
--- a/submission_scripts/lawrencium
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#SBATCH -J {name}
-#SBATCH --partition es1
-#SBATCH --qos es_normal
-#SBATCH --constraint es1_v100
-#SBATCH --time {max_time}
-#SBATCH --nodes {n_nodes}
-#SBATCH --gres=gpu:2 --cpus-per-task=4
-
-module load python/3.6
-source activate $SCRATCH/fbpic_env
-
-export NUMBA_NUM_THREADS=1
-export OMP_NUM_THREADS=1
-
-# Script to run libEnsemble using multiprocessing on launch nodes.
-# Assumes Conda environment is set up.
-
-python run_example.py --comms local --nworkers {n_workers}
diff --git a/submission_scripts/lawrencium_1080ti b/submission_scripts/lawrencium_1080ti
deleted file mode 100644
index 38e18ac0..00000000
--- a/submission_scripts/lawrencium_1080ti
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#SBATCH -J {name}
-#SBATCH --partition es1
-#SBATCH --qos es_normal
-#SBATCH --constraint es1_1080ti
-#SBATCH --time {max_time}
-#SBATCH --nodes {n_nodes}
-#SBATCH --gres=gpu:4 --cpus-per-task=8
-
-module load python/3.6
-source activate $SCRATCH/fbpic_env
-
-export NUMBA_NUM_THREADS=1
-export OMP_NUM_THREADS=1
-
-# Script to run libEnsemble using multiprocessing on launch nodes.
-# Assumes Conda environment is set up.
-
-python run_example.py --comms local --nworkers {n_workers}
diff --git a/submission_scripts/perlmutter b/submission_scripts/perlmutter
deleted file mode 100644
index 6f631c4a..00000000
--- a/submission_scripts/perlmutter
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash -x
-#SBATCH -J {name}
-#SBATCH -A m3906_g
-#SBATCH -C gpu
-#SBATCH --time {max_time}
-#SBATCH --nodes {n_nodes}
-#SBATCH --ntasks-per-node=4
-#SBATCH --gpus-per-task=1
-
-module load python
-source activate optimas
-
-export MPICH_GPU_SUPPORT_ENABLED=0
-export FBPIC_ENABLE_GPUDIRECT=0
-
-export LIBE_SIM_EXTRA_ARGS="--exact -u -n 1 --gpus-per-task 1 -c 32 --mem-per-gpu=60G"
-
-python run_example.py --comms local --nworkers {n_workers}
diff --git a/submission_scripts/summit b/submission_scripts/summit
deleted file mode 100644
index 06dfe9bc..00000000
--- a/submission_scripts/summit
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash -x
-#BSUB -P APH114
-#BSUB -J {name}
-#BSUB -W {max_time}
-#BSUB -nnodes {n_nodes}
-#BSUB -alloc_flags "smt1"
-
-module purge
-module load gcc/4.8.5
-module load cuda/9.1.85
-module load spectrum-mpi/10.3.1.2-20200121
-module load fftw/3.3.8
-module load python/3.7.0-anaconda3-5.3.0
-source activate fbpic
-export CUPY_CACHE_DIR=/gpfs/alpine/scratch/rlehe/aph114/.cupy/kernel_cache
-
-export NUMBA_NUM_THREADS=1
-export OMP_NUM_THREADS=1
-export FBPIC_ENABLE_GPUDIRECT=0
-export FBPIC_DISABLE_CACHING=1
-
-# Script to run libEnsemble using multiprocessing on launch nodes.
-# Assumes Conda environment is set up.
-
-export LIBE_SIM_EXTRA_ARGS="-n 1 -a 1 -g 1 -c 1 --bind=packed:1"
-
-python run_example.py --comms local --nworkers {n_workers}