From 5a216401c4cedd2c922cb3e121757abfbd6a87a5 Mon Sep 17 00:00:00 2001 From: shudson Date: Mon, 6 Apr 2020 14:27:40 -0500 Subject: [PATCH 01/17] Fix rc initialisation error --- libensemble/gen_funcs/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libensemble/gen_funcs/__init__.py b/libensemble/gen_funcs/__init__.py index 6da29f130..b68946b21 100644 --- a/libensemble/gen_funcs/__init__.py +++ b/libensemble/gen_funcs/__init__.py @@ -15,5 +15,5 @@ def rc(**kargs): setattr(rc, key, value) -rc.aposmm_optimizer = True +rc.aposmm_optimizer = None __import__('sys').modules[__name__ + '.rc'] = rc From 86fcfc5187ae5a357e9e367f31b56bb062e2b4cf Mon Sep 17 00:00:00 2001 From: shudson Date: Mon, 6 Apr 2020 16:55:57 -0500 Subject: [PATCH 02/17] Update optimizer rc options --- libensemble/gen_funcs/aposmm.py | 23 +++++++++++++++------- libensemble/gen_funcs/persistent_aposmm.py | 9 +++++---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/libensemble/gen_funcs/aposmm.py b/libensemble/gen_funcs/aposmm.py index a19dc1e1e..2549fc080 100644 --- a/libensemble/gen_funcs/aposmm.py +++ b/libensemble/gen_funcs/aposmm.py @@ -11,16 +11,25 @@ import traceback import numpy as np from scipy.spatial.distance import cdist, pdist, squareform -from scipy import optimize as scipy_optimize - -from mpi4py import MPI -from petsc4py import PETSc - from numpy.lib.recfunctions import merge_arrays - from math import log, gamma, pi, sqrt -import nlopt +import libensemble.gen_funcs +optimizer = libensemble.gen_funcs.rc.aposmm_optimizer +if optimizer == 'petsc': + from mpi4py import MPI + from petsc4py import PETSc +elif optimizer == 'nlopt': + import nlopt +elif optimizer == 'scipy': + from scipy import optimize as scipy_optimize +else: + if optimizer is not None: + print('APOSMM Warning: {} optimizer not recognized. Loading all') + from mpi4py import MPI + from petsc4py import PETSc + import nlopt + from scipy import optimize as scipy_optimize class APOSMMException(Exception): diff --git a/libensemble/gen_funcs/persistent_aposmm.py b/libensemble/gen_funcs/persistent_aposmm.py index d3af8c07b..421bfe9fb 100644 --- a/libensemble/gen_funcs/persistent_aposmm.py +++ b/libensemble/gen_funcs/persistent_aposmm.py @@ -11,18 +11,20 @@ import numpy as np from scipy.spatial.distance import cdist -from scipy import optimize as sp_opt from math import log, gamma, pi, sqrt import libensemble.gen_funcs optimizer = libensemble.gen_funcs.rc.aposmm_optimizer if optimizer == 'petsc': + from mpi4py import MPI from petsc4py import PETSc elif optimizer == 'nlopt': import nlopt elif optimizer == 'dfols': import dfols -elif optimizer in ['scipy', 'external']: +elif optimizer == 'scipy': + from scipy import optimize as sp_opt +elif optimizer == 'external': pass else: if optimizer is not None: @@ -31,13 +33,12 @@ from petsc4py import PETSc import nlopt import dfols - + from scipy import optimize as sp_opt from libensemble.message_numbers import STOP_TAG, PERSIS_STOP from libensemble.tools.gen_support import send_mgr_worker_msg from libensemble.tools.gen_support import get_mgr_worker_msg - from multiprocessing import Event, Process, Queue From 46c53367845d422e736234e101349401e2869eb7 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Tue, 14 Apr 2020 21:13:23 -0500 Subject: [PATCH 03/17] Syntax error --- libensemble/tests/scaling_tests/warpx/Summit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libensemble/tests/scaling_tests/warpx/Summit.py b/libensemble/tests/scaling_tests/warpx/Summit.py index 9ef31dad8..8f6c33283 100644 --- a/libensemble/tests/scaling_tests/warpx/Summit.py +++ b/libensemble/tests/scaling_tests/warpx/Summit.py @@ -4,6 +4,6 @@ 'sim_app': '$HOME/warpx/Bin/main2d.gnu.TPROF.MPI.CUDA.ex', 'nodes': 1, 'ranks_per_node': 6, - 'extra_args': '-n 1 -a 2 -g 2 -c 2 --bind=packed:1 --smpiargs="-gpu"' + 'extra_args': '-n 1 -a 2 -g 2 -c 2 --bind=packed:1 --smpiargs="-gpu"', 'OMP_NUM_THREADS': '1', } From 54b00b17f904ff6973922528e6daef35061a3986 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Tue, 14 Apr 2020 21:13:36 -0500 Subject: [PATCH 04/17] flake8 --- .../tests/scaling_tests/warpx/plot_npy.py | 4 ++-- .../tests/scaling_tests/warpx/read_sim_output.py | 16 +++++++++------- .../tests/scaling_tests/warpx/warpX_simf.py | 16 ++++++++-------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/libensemble/tests/scaling_tests/warpx/plot_npy.py b/libensemble/tests/scaling_tests/warpx/plot_npy.py index 6d97fc296..62cc0bd5d 100755 --- a/libensemble/tests/scaling_tests/warpx/plot_npy.py +++ b/libensemble/tests/scaling_tests/warpx/plot_npy.py @@ -9,14 +9,14 @@ else: print('You need to supply an .npy file - aborting') sys.exit() - + names = results.dtype.names print(names) results_dict = {} for i in range(len(names)): results_dict[names[i]] = np.array([task[i] for task in results]) -plt.figure(figsize=(12,4)) +plt.figure(figsize=(12, 4)) plt.subplot(131) plt.plot(-results_dict['x'], results_dict['energy_std'], '.') plt.grid() diff --git a/libensemble/tests/scaling_tests/warpx/read_sim_output.py b/libensemble/tests/scaling_tests/warpx/read_sim_output.py index 73c4fcd9d..f4473e7f3 100644 --- a/libensemble/tests/scaling_tests/warpx/read_sim_output.py +++ b/libensemble/tests/scaling_tests/warpx/read_sim_output.py @@ -1,13 +1,15 @@ import os import numpy as np -import yt ; yt.funcs.mylog.setLevel(50) import scipy.constants as scc +import yt +yt.funcs.mylog.setLevel(50) -def read_sim_output( workdir ): + +def read_sim_output(workdir): # Get initial charge datafile = 'diags/plotfiles/plt00000/' filepath = os.path.join(workdir, datafile) - ds = yt.load( filepath ) + ds = yt.load(filepath) ad = ds.all_data() w = ad['beam', 'particle_weight'].v charge_i = np.sum(w) @@ -15,16 +17,16 @@ def read_sim_output( workdir ): # Get properties of beam at the end datafile = 'diags/plotfiles/plt01830/' filepath = os.path.join(workdir, datafile) - ds = yt.load( filepath ) + ds = yt.load(filepath) ad = ds.all_data() w = ad['beam', 'particle_weight'].v ux = ad['beam', 'particle_momentum_x'].v/scc.m_e/scc.c uy = ad['beam', 'particle_momentum_y'].v/scc.m_e/scc.c uz = ad['beam', 'particle_momentum_z'].v/scc.m_e/scc.c - gamma = np.sqrt( 1. + ux**2 + uy**2 + uz**2 ) + gamma = np.sqrt(1. + ux**2 + uy**2 + uz**2) energy_MeV = .511 * (gamma - 1.) - energy_avg = np.mean( energy_MeV ) - energy_std = np.std( energy_MeV ) / energy_avg + energy_avg = np.mean(energy_MeV) + energy_std = np.std(energy_MeV) / energy_avg charge = np.sum(w) / charge_i warpX_out = np.array([energy_std, energy_avg, charge]) return warpX_out diff --git a/libensemble/tests/scaling_tests/warpx/warpX_simf.py b/libensemble/tests/scaling_tests/warpx/warpX_simf.py index c9d84b342..a79b626e5 100644 --- a/libensemble/tests/scaling_tests/warpx/warpX_simf.py +++ b/libensemble/tests/scaling_tests/warpx/warpX_simf.py @@ -7,6 +7,7 @@ from MaxenceLocalIMac import machine_specs from read_sim_output import read_sim_output + def run_warpX(H, persis_info, sim_specs, libE_info): # Setting up variables needed for input and output @@ -16,13 +17,13 @@ def run_warpX(H, persis_info, sim_specs, libE_info): calc_status = 0 # Returns to worker - x = H['x'] # Input + x = H['x'] # Input - nodes = sim_specs['user'].get('nodes', 1) - ranks_per_node = sim_specs['user'].get('ranks_per_node', 1) + # nodes = sim_specs['user'].get('nodes', 1) + # ranks_per_node = sim_specs['user'].get('ranks_per_node', 1) input_file = sim_specs['user']['input_filename'] time_limit = sim_specs['user']['sim_kill_minutes'] * 60.0 - + exctr = Executor.executor # Get Executor app_args = input_file + ' beam.q_tot=' + str(x[0][0]) @@ -57,13 +58,12 @@ def run_warpX(H, persis_info, sim_specs, libE_info): print("Warning: Task {} in unknown state {}. Error code {}".format(task.name, task.state, task.errcode)) # Extract and calculate what you need to send back - datafile = 'diags/plotfiles/plt01830/' - filepath = os.path.join(task.workdir, datafile) - filepath = os.path.join(task.workdir, datafile) + # datafile = 'diags/plotfiles/plt01830/' + # filepath = os.path.join(task.workdir, datafile) time.sleep(0.2) try: - warpX_out = read_sim_output( task.workdir ) + warpX_out = read_sim_output(task.workdir) except Exception: warpX_out = np.nan print('Warning - output is Nan') From 073b3b208ede6666468df482b6d03dcccb91608d Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Tue, 14 Apr 2020 21:14:17 -0500 Subject: [PATCH 05/17] Allowing imports after commands for persistent_aposmm files --- .flake8 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.flake8 b/.flake8 index cc6327380..2d659330d 100644 --- a/.flake8 +++ b/.flake8 @@ -30,3 +30,8 @@ per-file-ignores = postproc_scripts/*:E402 libensemble/gen_funcs/*aposmm.py:E501 examples/gen_funcs/*aposmm.py:E501 + + # Need to set something before the APOSMM import + libensemble/tests/scaling_tests/warpx/run_libE_on_warpX_aposmm.py:E402 + libensemble/gen_funcs/persistent_aposmm.py:E402, E501 + libensemble/tests/regression_tests/test_persistent_aposmm*:E402 From a8d5d1045904edc2cf1894190d664823023cb002 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Tue, 14 Apr 2020 21:19:20 -0500 Subject: [PATCH 06/17] Using new functionality in all-but-one test --- .../tests/regression_tests/test_persistent_aposmm_dfols.py | 4 ++++ .../regression_tests/test_persistent_aposmm_exception.py | 4 ++++ .../test_persistent_aposmm_external_localopt.py | 4 ++++ .../tests/regression_tests/test_persistent_aposmm_nlopt.py | 4 ++++ .../tests/regression_tests/test_persistent_aposmm_pounders.py | 4 ++++ .../tests/regression_tests/test_persistent_aposmm_scipy.py | 4 ++++ .../regression_tests/test_persistent_aposmm_tao_blmvm.py | 4 ++++ .../tests/regression_tests/test_persistent_aposmm_tao_nm.py | 4 ++++ .../regression_tests/test_persistent_aposmm_with_grad.py | 4 ++++ 9 files changed, 36 insertions(+) diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py b/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py index 109f6f5ae..7482edb6c 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py @@ -19,6 +19,10 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'dfols' + from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py b/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py index 5343e7dac..c77b8ec44 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py @@ -20,7 +20,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.periodic_func import func_wrapper as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py b/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py index 75c10e772..77a7025f3 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py @@ -28,7 +28,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py b/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py index 7fb5cee91..c7b19b42d 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py @@ -21,7 +21,11 @@ from libensemble.libE import libE from math import gamma, pi, sqrt from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py b/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py index 3d61f61a5..603a889e8 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py @@ -20,7 +20,11 @@ from libensemble.libE import libE from math import gamma, pi, sqrt, ceil from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.gen_funcs.sampling import lhs_sample from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py b/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py index 940c3b5b2..6ffd40f67 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py @@ -20,7 +20,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'scipy' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py index 43506911d..5395d8f69 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py @@ -21,7 +21,11 @@ from libensemble.libE import libE from math import gamma, pi, sqrt from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py index 87d147782..b2d1e185c 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py @@ -20,7 +20,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py b/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py index ab86f1717..84869ffec 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py @@ -21,7 +21,11 @@ from libensemble.libE import libE from math import gamma, pi, sqrt from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f, six_hump_camel_func, six_hump_camel_grad + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima From e8293ed78e2776fa909efe517c632c199ecaf4ed Mon Sep 17 00:00:00 2001 From: shudson Date: Wed, 15 Apr 2020 15:00:45 -0500 Subject: [PATCH 07/17] Make aposmm_optimizer take a list --- libensemble/gen_funcs/aposmm.py | 25 +++++++++----- libensemble/gen_funcs/persistent_aposmm.py | 34 ++++++++++++------- .../test_persistent_aposmm_periodic.py | 5 ++- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/libensemble/gen_funcs/aposmm.py b/libensemble/gen_funcs/aposmm.py index 2549fc080..52b6884e1 100644 --- a/libensemble/gen_funcs/aposmm.py +++ b/libensemble/gen_funcs/aposmm.py @@ -15,21 +15,28 @@ from math import log, gamma, pi, sqrt import libensemble.gen_funcs +optimizer_list = ['petsc', 'nlopt', 'scipy'] optimizer = libensemble.gen_funcs.rc.aposmm_optimizer -if optimizer == 'petsc': + +if optimizer is None: from mpi4py import MPI from petsc4py import PETSc -elif optimizer == 'nlopt': import nlopt -elif optimizer == 'scipy': from scipy import optimize as scipy_optimize else: - if optimizer is not None: - print('APOSMM Warning: {} optimizer not recognized. Loading all') - from mpi4py import MPI - from petsc4py import PETSc - import nlopt - from scipy import optimize as scipy_optimize + if not isinstance(optimizer, list): + optimizer = [optimizer] + unrec = set(optimizer) - set(optimizer_list) + if unrec: + print('APOSMM Warning: unrecognized optimizers {}'.format(unrec)) + + if 'petsc' in optimizer: + from mpi4py import MPI + from petsc4py import PETSc + if 'nlopt' in optimizer: + import nlopt + if 'scipy' in optimizer: + from scipy import optimize as scipy_optimize class APOSMMException(Exception): diff --git a/libensemble/gen_funcs/persistent_aposmm.py b/libensemble/gen_funcs/persistent_aposmm.py index 421bfe9fb..5260e5dc3 100644 --- a/libensemble/gen_funcs/persistent_aposmm.py +++ b/libensemble/gen_funcs/persistent_aposmm.py @@ -14,26 +14,34 @@ from math import log, gamma, pi, sqrt import libensemble.gen_funcs +optimizer_list = ['petsc', 'nlopt', 'dfols', 'scipy', 'external'] optimizer = libensemble.gen_funcs.rc.aposmm_optimizer -if optimizer == 'petsc': + +if optimizer is None: from mpi4py import MPI from petsc4py import PETSc -elif optimizer == 'nlopt': import nlopt -elif optimizer == 'dfols': import dfols -elif optimizer == 'scipy': from scipy import optimize as sp_opt -elif optimizer == 'external': - pass else: - if optimizer is not None: - print('APOSMM Warning: {} optimizer not recognized. Loading all') - from mpi4py import MPI - from petsc4py import PETSc - import nlopt - import dfols - from scipy import optimize as sp_opt + if not isinstance(optimizer, list): + optimizer = [optimizer] + unrec = set(optimizer) - set(optimizer_list) + if unrec: + print('APOSMM Warning: unrecognized optimizers {}'.format(unrec)) + + if 'petsc' in optimizer: + from mpi4py import MPI + from petsc4py import PETSc + if 'nlopt' in optimizer: + import nlopt + if 'dfols' in optimizer: + import dfols + if 'scipy' in optimizer: + from scipy import optimize as sp_opt + if 'external' in optimizer: + pass + from libensemble.message_numbers import STOP_TAG, PERSIS_STOP from libensemble.tools.gen_support import send_mgr_worker_msg diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py index edb42d84b..1442b3b6e 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py @@ -17,10 +17,13 @@ import sys import numpy as np +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = ['nlopt','scipy'] +from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f + # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.periodic_func import func_wrapper as sim_f -from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f from libensemble.tools import parse_args, add_unique_random_streams From d3d96e1538c190ed1d369fd1b6219eb926ed9f50 Mon Sep 17 00:00:00 2001 From: shudson Date: Wed, 15 Apr 2020 15:07:56 -0500 Subject: [PATCH 08/17] flake8 fix to periodic test --- .../tests/regression_tests/test_persistent_aposmm_periodic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py index 1442b3b6e..0228782d2 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py @@ -18,7 +18,7 @@ import numpy as np import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = ['nlopt','scipy'] +libensemble.gen_funcs.rc.aposmm_optimizer = ['nlopt', 'scipy'] from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f # Import libEnsemble items for this test From 51037fb05dcd58363ba5cc13ba34d2fbca2d9109 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Wed, 15 Apr 2020 15:40:44 -0500 Subject: [PATCH 09/17] Fixing nonpersistent aposmm calls to use new imports --- .../regression_tests/test_aposmm_one_residual_at_a_time.py | 4 ++++ libensemble/tests/regression_tests/test_aposmm_pounders.py | 4 ++++ .../tests/regression_tests/test_aposmm_with_gradients.py | 4 ++++ libensemble/tests/regression_tests/test_pounders_splitcomm.py | 4 ++++ libensemble/tests/regression_tests/test_pounders_subcomm.py | 4 ++++ libensemble/tests/regression_tests/test_sim_dirs.py | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py b/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py index 6cbc75af6..d6c9ed7a4 100644 --- a/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py +++ b/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py @@ -18,7 +18,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.alloc_funcs.fast_alloc_and_pausing import give_sim_work_first as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import persis_info_3 as persis_info, aposmm_gen_out as gen_out diff --git a/libensemble/tests/regression_tests/test_aposmm_pounders.py b/libensemble/tests/regression_tests/test_aposmm_pounders.py index a790b1336..2caccaf98 100644 --- a/libensemble/tests/regression_tests/test_aposmm_pounders.py +++ b/libensemble/tests/regression_tests/test_aposmm_pounders.py @@ -18,7 +18,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py index af7dd4680..618d3cc11 100644 --- a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py +++ b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py @@ -20,7 +20,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE, libE_tcp_worker from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.alloc_funcs.fast_alloc_to_aposmm import give_sim_work_first as alloc_f from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams from libensemble.tests.regression_tests.support import (persis_info_1 as persis_info, diff --git a/libensemble/tests/regression_tests/test_pounders_splitcomm.py b/libensemble/tests/regression_tests/test_pounders_splitcomm.py index 3bb60d214..a539c2235 100644 --- a/libensemble/tests/regression_tests/test_pounders_splitcomm.py +++ b/libensemble/tests/regression_tests/test_pounders_splitcomm.py @@ -19,7 +19,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out from libensemble.tests.regression_tests.common import mpi_comm_split from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_pounders_subcomm.py b/libensemble/tests/regression_tests/test_pounders_subcomm.py index 2ed7e83da..d85e8e10a 100644 --- a/libensemble/tests/regression_tests/test_pounders_subcomm.py +++ b/libensemble/tests/regression_tests/test_pounders_subcomm.py @@ -18,7 +18,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out from libensemble.tests.regression_tests.common import mpi_comm_excl from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams diff --git a/libensemble/tests/regression_tests/test_sim_dirs.py b/libensemble/tests/regression_tests/test_sim_dirs.py index c488bf6a4..5d9057b5a 100644 --- a/libensemble/tests/regression_tests/test_sim_dirs.py +++ b/libensemble/tests/regression_tests/test_sim_dirs.py @@ -19,7 +19,11 @@ # Import libEnsemble items for this test from libensemble.libE import libE from libensemble.sim_funcs.branin.branin_obj import call_branin as sim_f + +import libensemble.gen_funcs +libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f + from libensemble.tests.regression_tests.support import (persis_info_2 as persis_info, aposmm_gen_out as gen_out, branin_vals_and_minima as M) From b11ffdb13266294ad74404a267ade552ad1eb53d Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Wed, 15 Apr 2020 15:43:04 -0500 Subject: [PATCH 10/17] Renaming files using aposmm --- .flake8 | 1 + ...t_pounders_splitcomm.py => test_aposmm_pounders_splitcomm.py} | 0 ...{test_pounders_subcomm.py => test_aposmm_pounders_subcomm.py} | 0 .../{test_sim_dirs.py => test_aposmm_sim_dirs.py} | 0 4 files changed, 1 insertion(+) rename libensemble/tests/regression_tests/{test_pounders_splitcomm.py => test_aposmm_pounders_splitcomm.py} (100%) rename libensemble/tests/regression_tests/{test_pounders_subcomm.py => test_aposmm_pounders_subcomm.py} (100%) rename libensemble/tests/regression_tests/{test_sim_dirs.py => test_aposmm_sim_dirs.py} (100%) diff --git a/.flake8 b/.flake8 index 2d659330d..783e6d397 100644 --- a/.flake8 +++ b/.flake8 @@ -35,3 +35,4 @@ per-file-ignores = libensemble/tests/scaling_tests/warpx/run_libE_on_warpX_aposmm.py:E402 libensemble/gen_funcs/persistent_aposmm.py:E402, E501 libensemble/tests/regression_tests/test_persistent_aposmm*:E402 + libensemble/tests/regression_tests/test_aposmm*:E402 diff --git a/libensemble/tests/regression_tests/test_pounders_splitcomm.py b/libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py similarity index 100% rename from libensemble/tests/regression_tests/test_pounders_splitcomm.py rename to libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py diff --git a/libensemble/tests/regression_tests/test_pounders_subcomm.py b/libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py similarity index 100% rename from libensemble/tests/regression_tests/test_pounders_subcomm.py rename to libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py diff --git a/libensemble/tests/regression_tests/test_sim_dirs.py b/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py similarity index 100% rename from libensemble/tests/regression_tests/test_sim_dirs.py rename to libensemble/tests/regression_tests/test_aposmm_sim_dirs.py From 397dab589ffd0e34aa5c24863fb6ae5a71d17a55 Mon Sep 17 00:00:00 2001 From: shudson Date: Wed, 15 Apr 2020 19:04:49 -0500 Subject: [PATCH 11/17] Remove old files --- .../tests/scaling_tests/warpx/Summit.py | 9 --- .../tests/scaling_tests/warpx/plot_npy.py | 39 ---------- .../tests/scaling_tests/warpx/warpX_simf.py | 77 ------------------- 3 files changed, 125 deletions(-) delete mode 100644 libensemble/tests/scaling_tests/warpx/Summit.py delete mode 100755 libensemble/tests/scaling_tests/warpx/plot_npy.py delete mode 100644 libensemble/tests/scaling_tests/warpx/warpX_simf.py diff --git a/libensemble/tests/scaling_tests/warpx/Summit.py b/libensemble/tests/scaling_tests/warpx/Summit.py deleted file mode 100644 index 8f6c33283..000000000 --- a/libensemble/tests/scaling_tests/warpx/Summit.py +++ /dev/null @@ -1,9 +0,0 @@ -machine_specs = \ - { - 'name': 'summit', - 'sim_app': '$HOME/warpx/Bin/main2d.gnu.TPROF.MPI.CUDA.ex', - 'nodes': 1, - 'ranks_per_node': 6, - 'extra_args': '-n 1 -a 2 -g 2 -c 2 --bind=packed:1 --smpiargs="-gpu"', - 'OMP_NUM_THREADS': '1', - } diff --git a/libensemble/tests/scaling_tests/warpx/plot_npy.py b/libensemble/tests/scaling_tests/warpx/plot_npy.py deleted file mode 100755 index 62cc0bd5d..000000000 --- a/libensemble/tests/scaling_tests/warpx/plot_npy.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python - -import sys -import numpy as np -import matplotlib.pyplot as plt - -if len(sys.argv) > 1: - results = np.load(sys.argv[1]) -else: - print('You need to supply an .npy file - aborting') - sys.exit() - -names = results.dtype.names -print(names) -results_dict = {} -for i in range(len(names)): - results_dict[names[i]] = np.array([task[i] for task in results]) - -plt.figure(figsize=(12, 4)) -plt.subplot(131) -plt.plot(-results_dict['x'], results_dict['energy_std'], '.') -plt.grid() -plt.xlabel('Initial charge (C)') -plt.title('Energy spread') -plt.title('Energy spread (%)') -plt.subplot(132) -plt.plot(-results_dict['x'], results_dict['energy_avg'], '.') -plt.grid() -plt.xlabel('Initial charge (C)') -plt.ylabel('Energy (MeV)') -plt.title('Average energy') -plt.subplot(133) -plt.plot(-results_dict['x'], results_dict['charge'], '.') -plt.grid() -plt.xlabel('Initial charge (C)') -plt.ylabel('final charge / initial charge') -plt.title('charge ratio') -plt.tight_layout() -plt.savefig('results.pdf', bbox_inches='tight') diff --git a/libensemble/tests/scaling_tests/warpx/warpX_simf.py b/libensemble/tests/scaling_tests/warpx/warpX_simf.py deleted file mode 100644 index a79b626e5..000000000 --- a/libensemble/tests/scaling_tests/warpx/warpX_simf.py +++ /dev/null @@ -1,77 +0,0 @@ -import os -import time -import numpy as np - -from libensemble.executors.executor import Executor -from libensemble.message_numbers import WORKER_DONE, TASK_FAILED -from MaxenceLocalIMac import machine_specs -from read_sim_output import read_sim_output - - -def run_warpX(H, persis_info, sim_specs, libE_info): - - # Setting up variables needed for input and output - # keys = variable names - # x = variable values - # libE_output = what will be returned to libE - - calc_status = 0 # Returns to worker - - x = H['x'] # Input - - # nodes = sim_specs['user'].get('nodes', 1) - # ranks_per_node = sim_specs['user'].get('ranks_per_node', 1) - input_file = sim_specs['user']['input_filename'] - time_limit = sim_specs['user']['sim_kill_minutes'] * 60.0 - - exctr = Executor.executor # Get Executor - - app_args = input_file + ' beam.q_tot=' + str(x[0][0]) - print(app_args) - os.environ["OMP_NUM_THREADS"] = machine_specs['OMP_NUM_THREADS'] - - # testing use of extra_args - if machine_specs['name'] == 'summit': - task = exctr.submit(calc_type='sim', extra_args=machine_specs['extra_args'], app_args=app_args, - stdout='out.txt', stderr='err.txt', wait_on_run=True) - else: - task = exctr.submit(calc_type='sim', num_procs=machine_specs['cores'], app_args=app_args, - stdout='out.txt', stderr='err.txt', wait_on_run=True) - - poll_interval = 1 # secs - while(not task.finished): - time.sleep(poll_interval) - task.poll() - if task.runtime > time_limit: - task.kill() # Timeout - - # Set calc_status with optional prints. - if task.finished: - if task.state == 'FINISHED': - calc_status = WORKER_DONE - elif task.state == 'FAILED': - print("Warning: Task {} failed: Error code {}".format(task.name, task.errcode)) - calc_status = TASK_FAILED - elif task.state == 'USER_KILLED': - print("Warning: Task {} has been killed".format(task.name)) - else: - print("Warning: Task {} in unknown state {}. Error code {}".format(task.name, task.state, task.errcode)) - - # Extract and calculate what you need to send back - # datafile = 'diags/plotfiles/plt01830/' - # filepath = os.path.join(task.workdir, datafile) - time.sleep(0.2) - - try: - warpX_out = read_sim_output(task.workdir) - except Exception: - warpX_out = np.nan - print('Warning - output is Nan') - - libE_output = np.zeros(1, dtype=sim_specs['out']) - - libE_output['energy_std'] = warpX_out[0] - libE_output['energy_avg'] = warpX_out[1] - libE_output['charge'] = warpX_out[2] - - return libE_output, persis_info, calc_status From cd4146c7b7d235e97b3cda30275383b8cd7864d2 Mon Sep 17 00:00:00 2001 From: shudson Date: Wed, 15 Apr 2020 20:47:47 -0500 Subject: [PATCH 12/17] Document aposmm_optimizer configuration options --- docs/examples/gen_funcs.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/examples/gen_funcs.rst b/docs/examples/gen_funcs.rst index dd8630d49..f0b79fb93 100644 --- a/docs/examples/gen_funcs.rst +++ b/docs/examples/gen_funcs.rst @@ -14,6 +14,26 @@ sampling APOSMM ------ + +Configuring APOSMM +^^^^^^^^^^^^^^^^^^ + +By default, APOSMM will import several optmizers which require +external packages and MPI. To import only the optmizers you are using +you can add the following lines in your calling script, before importing APOSMM:: + + import libensemble.gen_funcs + libensemble.gen_funcs.rc.aposmm_optimizer = + +Where ``optimizer`` can be a string of list of strings. + +The options are: + + - ``'petsc'``, ``'nlopt'``, ``'dfols'``, ``'scipy'``, ``'external'`` + +APOSMM +^^^^^^ + .. automodule:: aposmm :members: :undoc-members: From a6dbe98f5f0ca7fae5152859f0ab32ac5931259c Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Thu, 16 Apr 2020 12:37:15 -0500 Subject: [PATCH 13/17] Fixing persistent_aposmm autodoc --- docs/conf.py | 2 +- docs/data_structures/exit_criteria.rst | 2 +- docs/examples/gen_funcs.rst | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 71c1d98b6..1a1a5e72f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -30,7 +30,7 @@ class Mock(MagicMock): def __getattr__(cls, name): return MagicMock() -MOCK_MODULES = ['argparse', 'numpy', 'mpi4py' , 'scipy', 'numpy.lib', 'numpy.lib.recfunctions', 'math', 'petsc4py', 'PETSc', 'nlopt', 'scipy.spatial', 'scipy.spatial.distance'] +MOCK_MODULES = ['argparse', 'numpy', 'mpi4py' , 'dfols', 'scipy', 'numpy.lib', 'numpy.lib.recfunctions', 'math', 'petsc4py', 'PETSc', 'nlopt', 'scipy.spatial', 'scipy.spatial.distance'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) #from libensemble import * diff --git a/docs/data_structures/exit_criteria.rst b/docs/data_structures/exit_criteria.rst index 87251c1e3..e96dc2661 100644 --- a/docs/data_structures/exit_criteria.rst +++ b/docs/data_structures/exit_criteria.rst @@ -21,7 +21,7 @@ Exit criteria for libEnsemble:: .. seealso:: From `test_branin_aposmm_nlopt_and_then_scipy.py`_. - .. literalinclude:: ../../libensemble/tests/regression_tests/test_sim_dirs.py + .. literalinclude:: ../../libensemble/tests/regression_tests/test_aposmm_sim_dirs.py :start-at: exit_criteria :end-before: end_exit_criteria_rst_tag diff --git a/docs/examples/gen_funcs.rst b/docs/examples/gen_funcs.rst index f0b79fb93..517f5bcf4 100644 --- a/docs/examples/gen_funcs.rst +++ b/docs/examples/gen_funcs.rst @@ -12,13 +12,13 @@ sampling :members: :undoc-members: -APOSMM ------- +Persistent APOSMM +----------------- Configuring APOSMM ^^^^^^^^^^^^^^^^^^ -By default, APOSMM will import several optmizers which require +By default, persistent APOSMM will import several optmizers which require external packages and MPI. To import only the optmizers you are using you can add the following lines in your calling script, before importing APOSMM:: @@ -31,10 +31,10 @@ The options are: - ``'petsc'``, ``'nlopt'``, ``'dfols'``, ``'scipy'``, ``'external'`` -APOSMM -^^^^^^ +Persistent APOSMM +^^^^^^^^^^^^^^^^^ -.. automodule:: aposmm +.. automodule:: persistent_aposmm :members: :undoc-members: From 0bd20b64fd60630f4da7abf45b1e7f275bb176f8 Mon Sep 17 00:00:00 2001 From: shudson Date: Thu, 16 Apr 2020 14:05:24 -0500 Subject: [PATCH 14/17] Minor fixes --- .flake8 | 2 +- docs/examples/gen_funcs.rst | 2 +- libensemble/tests/scaling_tests/warpx/all_machine_specs.py | 4 ++-- .../tests/scaling_tests/warpx/run_libensemble_on_warpx.py | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.flake8 b/.flake8 index 788d5b58f..3f917d9bd 100644 --- a/.flake8 +++ b/.flake8 @@ -36,7 +36,7 @@ per-file-ignores = examples/gen_funcs/*aposmm.py:E501 # Need to set something before the APOSMM import - libensemble/tests/scaling_tests/warpx/run_libE_on_warpX_aposmm.py:E402 + libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py:E402 libensemble/gen_funcs/persistent_aposmm.py:E402, E501 libensemble/tests/regression_tests/test_persistent_aposmm*:E402 libensemble/tests/regression_tests/test_aposmm*:E402 diff --git a/docs/examples/gen_funcs.rst b/docs/examples/gen_funcs.rst index f0b79fb93..23ef0b45a 100644 --- a/docs/examples/gen_funcs.rst +++ b/docs/examples/gen_funcs.rst @@ -25,7 +25,7 @@ you can add the following lines in your calling script, before importing APOSMM: import libensemble.gen_funcs libensemble.gen_funcs.rc.aposmm_optimizer = -Where ``optimizer`` can be a string of list of strings. +Where ``optimizer`` can be a string or list of strings. The options are: diff --git a/libensemble/tests/scaling_tests/warpx/all_machine_specs.py b/libensemble/tests/scaling_tests/warpx/all_machine_specs.py index 8dbc2879f..bef0ed4d9 100644 --- a/libensemble/tests/scaling_tests/warpx/all_machine_specs.py +++ b/libensemble/tests/scaling_tests/warpx/all_machine_specs.py @@ -12,7 +12,7 @@ 'sim_app': os.environ['HOME'] + '/warpx/Bin/main2d.gnu.TPROF.MPI.OMP.ex', 'extra_args': '', # extra arguments passed to mpirun/mpiexec at execution 'OMP_NUM_THREADS': '2', - 'sim_max': 3 # Maximum number of simulations + 'sim_max': 3 # Maximum number of simulations } @@ -22,5 +22,5 @@ # extra arguments passed to jsrun at execution 'extra_args': '-n 1 -a 1 -g 1 -c 1 --bind=packed:1 --smpiargs="-gpu"', 'OMP_NUM_THREADS': '1', - 'sim_max': 400 # Maximum number of simulations + 'sim_max': 400 # Maximum number of simulations } diff --git a/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py b/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py index fe5d13eca..0c2d34944 100644 --- a/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py +++ b/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py @@ -19,6 +19,7 @@ # Either 'local' or 'summit' machine = 'local' +import sys import numpy as np from warpx_simf import run_warpx # Sim function from current directory From 756eab1207b7a33a5a049007d09efd18d9b4fc47 Mon Sep 17 00:00:00 2001 From: shudson Date: Thu, 16 Apr 2020 14:39:59 -0500 Subject: [PATCH 15/17] Rename aposmm_optimizer to aposmm_optimizers --- docs/examples/gen_funcs.rst | 4 ++-- libensemble/gen_funcs/__init__.py | 6 +++--- libensemble/gen_funcs/aposmm.py | 16 +++++++-------- libensemble/gen_funcs/persistent_aposmm.py | 20 +++++++++---------- .../test_aposmm_one_residual_at_a_time.py | 2 +- .../regression_tests/test_aposmm_pounders.py | 2 +- .../test_aposmm_pounders_splitcomm.py | 2 +- .../test_aposmm_pounders_subcomm.py | 2 +- .../regression_tests/test_aposmm_sim_dirs.py | 2 +- .../test_aposmm_with_gradients.py | 2 +- .../test_persistent_aposmm_dfols.py | 2 +- .../test_persistent_aposmm_exception.py | 2 +- ...est_persistent_aposmm_external_localopt.py | 2 +- .../test_persistent_aposmm_nlopt.py | 2 +- .../test_persistent_aposmm_periodic.py | 2 +- .../test_persistent_aposmm_pounders.py | 2 +- .../test_persistent_aposmm_scipy.py | 2 +- .../test_persistent_aposmm_tao_blmvm.py | 2 +- .../test_persistent_aposmm_tao_nm.py | 2 +- .../test_persistent_aposmm_with_grad.py | 2 +- .../warpx/run_libensemble_on_warpx.py | 2 +- 21 files changed, 40 insertions(+), 40 deletions(-) diff --git a/docs/examples/gen_funcs.rst b/docs/examples/gen_funcs.rst index 23ef0b45a..6752d30e4 100644 --- a/docs/examples/gen_funcs.rst +++ b/docs/examples/gen_funcs.rst @@ -23,9 +23,9 @@ external packages and MPI. To import only the optmizers you are using you can add the following lines in your calling script, before importing APOSMM:: import libensemble.gen_funcs - libensemble.gen_funcs.rc.aposmm_optimizer = + libensemble.gen_funcs.rc.aposmm_optimizers = -Where ``optimizer`` can be a string or list of strings. +Where ``optimizers`` can be a string or list of strings. The options are: diff --git a/libensemble/gen_funcs/__init__.py b/libensemble/gen_funcs/__init__.py index b68946b21..1b10df51d 100644 --- a/libensemble/gen_funcs/__init__.py +++ b/libensemble/gen_funcs/__init__.py @@ -3,8 +3,8 @@ def rc(**kargs): Parameters ---------- - aposmm_optimizer : string - Set the aposmm optimizer (to prevent all options being imported). + aposmm_optimizers : string or list of strings + Select the aposmm optimizer/s (to prevent all options being imported). """ @@ -15,5 +15,5 @@ def rc(**kargs): setattr(rc, key, value) -rc.aposmm_optimizer = None +rc.aposmm_optimizers = None __import__('sys').modules[__name__ + '.rc'] = rc diff --git a/libensemble/gen_funcs/aposmm.py b/libensemble/gen_funcs/aposmm.py index 52b6884e1..d44732cfe 100644 --- a/libensemble/gen_funcs/aposmm.py +++ b/libensemble/gen_funcs/aposmm.py @@ -16,26 +16,26 @@ import libensemble.gen_funcs optimizer_list = ['petsc', 'nlopt', 'scipy'] -optimizer = libensemble.gen_funcs.rc.aposmm_optimizer +optimizers = libensemble.gen_funcs.rc.aposmm_optimizers -if optimizer is None: +if optimizers is None: from mpi4py import MPI from petsc4py import PETSc import nlopt from scipy import optimize as scipy_optimize else: - if not isinstance(optimizer, list): - optimizer = [optimizer] - unrec = set(optimizer) - set(optimizer_list) + if not isinstance(optimizers, list): + optimizers = [optimizers] + unrec = set(optimizers) - set(optimizer_list) if unrec: print('APOSMM Warning: unrecognized optimizers {}'.format(unrec)) - if 'petsc' in optimizer: + if 'petsc' in optimizers: from mpi4py import MPI from petsc4py import PETSc - if 'nlopt' in optimizer: + if 'nlopt' in optimizers: import nlopt - if 'scipy' in optimizer: + if 'scipy' in optimizers: from scipy import optimize as scipy_optimize diff --git a/libensemble/gen_funcs/persistent_aposmm.py b/libensemble/gen_funcs/persistent_aposmm.py index 1ac123963..6adaae803 100644 --- a/libensemble/gen_funcs/persistent_aposmm.py +++ b/libensemble/gen_funcs/persistent_aposmm.py @@ -15,31 +15,31 @@ import libensemble.gen_funcs optimizer_list = ['petsc', 'nlopt', 'dfols', 'scipy', 'external'] -optimizer = libensemble.gen_funcs.rc.aposmm_optimizer +optimizers = libensemble.gen_funcs.rc.aposmm_optimizers -if optimizer is None: +if optimizers is None: from mpi4py import MPI from petsc4py import PETSc import nlopt import dfols from scipy import optimize as sp_opt else: - if not isinstance(optimizer, list): - optimizer = [optimizer] - unrec = set(optimizer) - set(optimizer_list) + if not isinstance(optimizers, list): + optimizers = [optimizers] + unrec = set(optimizers) - set(optimizer_list) if unrec: print('APOSMM Warning: unrecognized optimizers {}'.format(unrec)) - if 'petsc' in optimizer: + if 'petsc' in optimizers: from mpi4py import MPI from petsc4py import PETSc - if 'nlopt' in optimizer: + if 'nlopt' in optimizers: import nlopt - if 'dfols' in optimizer: + if 'dfols' in optimizers: import dfols - if 'scipy' in optimizer: + if 'scipy' in optimizers: from scipy import optimize as sp_opt - if 'external' in optimizer: + if 'external' in optimizers: pass diff --git a/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py b/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py index d6c9ed7a4..dd1bb4bc3 100644 --- a/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py +++ b/libensemble/tests/regression_tests/test_aposmm_one_residual_at_a_time.py @@ -20,7 +20,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.alloc_funcs.fast_alloc_and_pausing import give_sim_work_first as alloc_f diff --git a/libensemble/tests/regression_tests/test_aposmm_pounders.py b/libensemble/tests/regression_tests/test_aposmm_pounders.py index 2caccaf98..23d82eafa 100644 --- a/libensemble/tests/regression_tests/test_aposmm_pounders.py +++ b/libensemble/tests/regression_tests/test_aposmm_pounders.py @@ -20,7 +20,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out diff --git a/libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py b/libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py index a539c2235..caf1e69de 100644 --- a/libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py +++ b/libensemble/tests/regression_tests/test_aposmm_pounders_splitcomm.py @@ -21,7 +21,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out diff --git a/libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py b/libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py index d85e8e10a..0d597eaae 100644 --- a/libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py +++ b/libensemble/tests/regression_tests/test_aposmm_pounders_subcomm.py @@ -20,7 +20,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out diff --git a/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py b/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py index 5d9057b5a..924de963c 100644 --- a/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py +++ b/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py @@ -21,7 +21,7 @@ from libensemble.sim_funcs.branin.branin_obj import call_branin as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.tests.regression_tests.support import (persis_info_2 as persis_info, diff --git a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py index 618d3cc11..885d4bdee 100644 --- a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py +++ b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.alloc_funcs.fast_alloc_to_aposmm import give_sim_work_first as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py b/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py index 5f3c991c8..26379b6f8 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_dfols.py @@ -21,7 +21,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'dfols' +libensemble.gen_funcs.rc.aposmm_optimizers = 'dfols' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py b/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py index c77b8ec44..45828eed4 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_exception.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.periodic_func import func_wrapper as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py b/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py index 77a7025f3..b98828a39 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_external_localopt.py @@ -30,7 +30,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py b/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py index c7b19b42d..2ab389ff7 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_nlopt.py @@ -23,7 +23,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py index 93292102a..78cd71d80 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_periodic.py @@ -18,7 +18,7 @@ import numpy as np import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = ['nlopt', 'scipy'] +libensemble.gen_funcs.rc.aposmm_optimizers = ['nlopt', 'scipy'] from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f # Import libEnsemble items for this test diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py b/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py index 603a889e8..ced8835c2 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_pounders.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.gen_funcs.sampling import lhs_sample diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py b/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py index 6ffd40f67..44f745b10 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_scipy.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'scipy' +libensemble.gen_funcs.rc.aposmm_optimizers = 'scipy' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py index 5395d8f69..1da0c270a 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_blmvm.py @@ -23,7 +23,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py index b2d1e185c..cb7bf08b6 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_tao_nm.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'petsc' +libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py b/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py index 84869ffec..e8d177324 100644 --- a/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py +++ b/libensemble/tests/regression_tests/test_persistent_aposmm_with_grad.py @@ -23,7 +23,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f, six_hump_camel_func, six_hump_camel_grad import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f diff --git a/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py b/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py index 0c2d34944..d7f33c9b8 100644 --- a/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py +++ b/libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py @@ -32,7 +32,7 @@ import give_sim_work_first as alloc_f elif generator_type == 'aposmm': import libensemble.gen_funcs - libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' + libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f from libensemble.alloc_funcs.persistent_aposmm_alloc \ import persistent_aposmm_alloc as alloc_f From 5bbddf0aab2df0d49a909e41b33e2435206fd405 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Thu, 16 Apr 2020 15:28:42 -0500 Subject: [PATCH 16/17] Fixing broken regression test --- libensemble/tests/regression_tests/test_aposmm_sim_dirs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py b/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py index 5d9057b5a..ed9673388 100644 --- a/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py +++ b/libensemble/tests/regression_tests/test_aposmm_sim_dirs.py @@ -21,7 +21,7 @@ from libensemble.sim_funcs.branin.branin_obj import call_branin as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizer = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizer = ['nlopt', 'scipy'] from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.tests.regression_tests.support import (persis_info_2 as persis_info, From 1fbd6f602b055de2a04f7a35e6ea6b576566bc30 Mon Sep 17 00:00:00 2001 From: Jeffrey Larson Date: Thu, 16 Apr 2020 18:47:28 -0500 Subject: [PATCH 17/17] Fixing regression test calling petsc for the second run --- .../tests/regression_tests/test_aposmm_with_gradients.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py index 885d4bdee..c78d9a9b2 100644 --- a/libensemble/tests/regression_tests/test_aposmm_with_gradients.py +++ b/libensemble/tests/regression_tests/test_aposmm_with_gradients.py @@ -22,7 +22,7 @@ from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f import libensemble.gen_funcs -libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt' +libensemble.gen_funcs.rc.aposmm_optimizers = ['nlopt', 'petsc'] from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f from libensemble.alloc_funcs.fast_alloc_to_aposmm import give_sim_work_first as alloc_f