|
6 | 6 | # Solutions of Sandia, LLC, the U.S. Government retains certain rights in this |
7 | 7 | # software. This software is distributed under the 3-clause BSD License. |
8 | 8 | # ____________________________________________________________________________________ |
| 9 | +import json |
9 | 10 | import warnings |
10 | 11 | from pyomo.common.dependencies import ( |
11 | 12 | numpy as np, |
|
24 | 25 |
|
25 | 26 | if scipy_available: |
26 | 27 | from pyomo.contrib.doe import DesignOfExperiments |
27 | | - from pyomo.contrib.doe.doe import InitializationMethod |
| 28 | + from pyomo.contrib.doe.doe import ( |
| 29 | + InitializationMethod, |
| 30 | + _DoEResultsJSONEncoder, |
| 31 | + ) |
28 | 32 | from pyomo.contrib.doe.tests.experiment_class_example_flags import ( |
29 | 33 | BadExperiment, |
30 | 34 | RooneyBieglerExperimentFlag, |
@@ -109,6 +113,16 @@ def test_experiment_none_error(self): |
109 | 113 |
|
110 | 114 | doe_obj = DesignOfExperiments(**DoE_args) |
111 | 115 |
|
| 116 | + def test_experiment_list_empty_error(self): |
| 117 | + with self.assertRaisesRegex( |
| 118 | + ValueError, "The 'experiment_list' cannot be empty" |
| 119 | + ): |
| 120 | + DesignOfExperiments(experiment_list=[], objective_option="pseudo_trace") |
| 121 | + |
| 122 | + def test_doe_results_json_encoder_unsupported_object_raises(self): |
| 123 | + with self.assertRaises(TypeError): |
| 124 | + json.dumps({"x": object()}, cls=_DoEResultsJSONEncoder) |
| 125 | + |
112 | 126 | def test_reactor_check_no_get_labeled_model(self): |
113 | 127 | fd_method = "central" |
114 | 128 | obj_used = "pseudo_trace" |
@@ -844,6 +858,102 @@ def test_optimize_experiments_invalid_init_n_samples_float(self): |
844 | 858 | init_n_samples=2.5, |
845 | 859 | ) |
846 | 860 |
|
| 861 | + def test_optimize_experiments_lhs_requires_template_mode(self): |
| 862 | + doe_obj = DesignOfExperiments( |
| 863 | + experiment_list=[ |
| 864 | + RooneyBieglerMultiExperiment(hour=2.0), |
| 865 | + RooneyBieglerMultiExperiment(hour=3.0), |
| 866 | + ], |
| 867 | + objective_option="pseudo_trace", |
| 868 | + ) |
| 869 | + with self.assertRaisesRegex( |
| 870 | + ValueError, |
| 871 | + r"``initialization_method='lhs'`` is currently supported only in template mode", |
| 872 | + ): |
| 873 | + doe_obj.optimize_experiments(initialization_method="lhs") |
| 874 | + |
| 875 | + def test_optimize_experiments_lhs_requires_scipy(self): |
| 876 | + doe_obj = DesignOfExperiments( |
| 877 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 878 | + objective_option="pseudo_trace", |
| 879 | + ) |
| 880 | + with patch("pyomo.contrib.doe.doe.scipy_available", False): |
| 881 | + with self.assertRaisesRegex( |
| 882 | + ImportError, r"LHS initialization requires scipy" |
| 883 | + ): |
| 884 | + doe_obj.optimize_experiments(initialization_method="lhs") |
| 885 | + |
| 886 | + def test_optimize_experiments_init_parallel_requires_bool(self): |
| 887 | + doe_obj = DesignOfExperiments( |
| 888 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 889 | + objective_option="pseudo_trace", |
| 890 | + ) |
| 891 | + with self.assertRaisesRegex( |
| 892 | + ValueError, r"``init_parallel`` must be a bool, got 1." |
| 893 | + ): |
| 894 | + doe_obj.optimize_experiments(initialization_method="lhs", init_parallel=1) |
| 895 | + |
| 896 | + def test_optimize_experiments_init_combo_parallel_requires_bool(self): |
| 897 | + doe_obj = DesignOfExperiments( |
| 898 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 899 | + objective_option="pseudo_trace", |
| 900 | + ) |
| 901 | + with self.assertRaisesRegex( |
| 902 | + ValueError, r"``init_combo_parallel`` must be a bool" |
| 903 | + ): |
| 904 | + doe_obj.optimize_experiments( |
| 905 | + initialization_method="lhs", init_combo_parallel="yes" |
| 906 | + ) |
| 907 | + |
| 908 | + def test_optimize_experiments_init_n_workers_must_be_positive_integer(self): |
| 909 | + doe_obj = DesignOfExperiments( |
| 910 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 911 | + objective_option="pseudo_trace", |
| 912 | + ) |
| 913 | + with self.assertRaisesRegex( |
| 914 | + ValueError, r"``init_n_workers`` must be None or a positive integer" |
| 915 | + ): |
| 916 | + doe_obj.optimize_experiments(initialization_method="lhs", init_n_workers=0) |
| 917 | + |
| 918 | + def test_optimize_experiments_init_combo_chunk_size_must_be_positive_integer(self): |
| 919 | + doe_obj = DesignOfExperiments( |
| 920 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 921 | + objective_option="pseudo_trace", |
| 922 | + ) |
| 923 | + with self.assertRaisesRegex( |
| 924 | + ValueError, |
| 925 | + r"``init_combo_chunk_size`` must be a positive integer", |
| 926 | + ): |
| 927 | + doe_obj.optimize_experiments( |
| 928 | + initialization_method="lhs", init_combo_chunk_size=0 |
| 929 | + ) |
| 930 | + |
| 931 | + def test_optimize_experiments_init_combo_parallel_threshold_positive_integer(self): |
| 932 | + doe_obj = DesignOfExperiments( |
| 933 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 934 | + objective_option="pseudo_trace", |
| 935 | + ) |
| 936 | + with self.assertRaisesRegex( |
| 937 | + ValueError, |
| 938 | + r"``init_combo_parallel_threshold`` must be a positive integer", |
| 939 | + ): |
| 940 | + doe_obj.optimize_experiments( |
| 941 | + initialization_method="lhs", init_combo_parallel_threshold=0 |
| 942 | + ) |
| 943 | + |
| 944 | + def test_optimize_experiments_init_max_wall_clock_time_must_be_positive(self): |
| 945 | + doe_obj = DesignOfExperiments( |
| 946 | + experiment_list=[RooneyBieglerMultiExperiment(hour=2.0)], |
| 947 | + objective_option="pseudo_trace", |
| 948 | + ) |
| 949 | + with self.assertRaisesRegex( |
| 950 | + ValueError, |
| 951 | + r"``init_max_wall_clock_time`` must be None or a positive number", |
| 952 | + ): |
| 953 | + doe_obj.optimize_experiments( |
| 954 | + initialization_method="lhs", init_max_wall_clock_time=0 |
| 955 | + ) |
| 956 | + |
847 | 957 | def test_optimize_experiments_n_exp_with_multi_list(self): |
848 | 958 | doe_obj = DesignOfExperiments( |
849 | 959 | experiment_list=[ |
|
0 commit comments