def testFitAndUpdate(self, mock_init): sq_feat = ObservationFeatures({}) sq_data = self.observation_data[2] sq_obs = Observation( features=ObservationFeatures({}), data=self.observation_data[2], arm_name="status_quo", ) ma = NumpyModelBridge() ma._training_data = self.observations + [sq_obs] model = mock.create_autospec(NumpyModel, instance=True) # No out of design points allowed in direct calls to fit. with self.assertRaises(ValueError): ma._fit( model, self.search_space, self.observation_features + [sq_feat], self.observation_data + [sq_data], ) ma._fit(model, self.search_space, self.observation_features, self.observation_data) self.assertEqual(ma.parameters, ["x", "z", "y"]) self.assertEqual(sorted(ma.outcomes), ["a", "b"]) Xs = { "a": np.array([[0.2, 3.0, 1.2], [0.4, 3.0, 1.4], [0.6, 3.0, 1.6]]), "b": np.array([[0.2, 3.0, 1.2], [0.4, 3.0, 1.4]]), } Ys = { "a": np.array([[1.0], [2.0], [3.0]]), "b": np.array([[-1.0], [-2.0]]) } Yvars = { "a": np.array([[1.0], [2.0], [3.0]]), "b": np.array([[6.0], [7.0]]) } # put fidelity parameter to the last column bounds = [(0.0, 1.0), (0.0, 5.0), (1.0, 2.0)] model_fit_args = model.fit.mock_calls[0][2] for i, x in enumerate(model_fit_args["Xs"]): self.assertTrue(np.array_equal(x, Xs[ma.outcomes[i]])) for i, y in enumerate(model_fit_args["Ys"]): self.assertTrue(np.array_equal(y, Ys[ma.outcomes[i]])) for i, v in enumerate(model_fit_args["Yvars"]): self.assertTrue(np.array_equal(v, Yvars[ma.outcomes[i]])) self.assertEqual(model_fit_args["bounds"], bounds) self.assertEqual(model_fit_args["feature_names"], ["x", "z", "y"]) # And update ma._update( observation_features=self.observation_features, observation_data=self.observation_data, ) # Calling _update requires passing ALL data. model_update_args = model.update.mock_calls[0][2] for i, x in enumerate(model_update_args["Xs"]): self.assertTrue(np.array_equal(x, Xs[ma.outcomes[i]])) for i, y in enumerate(model_update_args["Ys"]): self.assertTrue(np.array_equal(y, Ys[ma.outcomes[i]])) for i, v in enumerate(model_update_args["Yvars"]): self.assertTrue(np.array_equal(v, Yvars[ma.outcomes[i]]))
def testFitAndUpdate(self, mock_init): sq_feat = ObservationFeatures({}) sq_data = self.observation_data[2] sq_obs = Observation( features=ObservationFeatures({}), data=self.observation_data[2], arm_name="status_quo", ) ma = NumpyModelBridge() ma._training_data = self.observations + [sq_obs] model = mock.create_autospec(NumpyModel, instance=True) ma._fit( model, self.search_space, self.observation_features + [sq_feat], self.observation_data + [sq_data], ) self.assertEqual(ma.parameters, ["x", "y", "z"]) self.assertEqual(sorted(ma.outcomes), ["a", "b"]) self.assertEqual(ma.training_in_design, [True, True, True, False]) Xs = { "a": np.array([[0.2, 1.2, 3.0], [0.4, 1.4, 3.0], [0.6, 1.6, 3]]), "b": np.array([[0.2, 1.2, 3.0], [0.4, 1.4, 3.0]]), } Ys = { "a": np.array([[1.0], [2.0], [3.0]]), "b": np.array([[-1.0], [-2.0]]) } Yvars = { "a": np.array([[1.0], [2.0], [3.0]]), "b": np.array([[6.0], [7.0]]) } bounds = [(0.0, 1.0), (1.0, 2.0), (0.0, 5.0)] model_fit_args = model.fit.mock_calls[0][2] for i, x in enumerate(model_fit_args["Xs"]): self.assertTrue(np.array_equal(x, Xs[ma.outcomes[i]])) for i, y in enumerate(model_fit_args["Ys"]): self.assertTrue(np.array_equal(y, Ys[ma.outcomes[i]])) for i, v in enumerate(model_fit_args["Yvars"]): self.assertTrue(np.array_equal(v, Yvars[ma.outcomes[i]])) self.assertEqual(model_fit_args["bounds"], bounds) self.assertEqual(model_fit_args["feature_names"], ["x", "y", "z"]) # And update ma.training_in_design.extend([True, True, True, True]) ma._update( observation_features=self.observation_features + [sq_feat], observation_data=self.observation_data + [sq_data], ) self.assertEqual(ma.training_in_design, [True, True, True, False] * 2) model_update_args = model.update.mock_calls[0][2] for i, x in enumerate(model_update_args["Xs"]): self.assertTrue(np.array_equal(x, Xs[ma.outcomes[i]])) for i, y in enumerate(model_update_args["Ys"]): self.assertTrue(np.array_equal(y, Ys[ma.outcomes[i]])) for i, v in enumerate(model_update_args["Yvars"]): self.assertTrue(np.array_equal(v, Yvars[ma.outcomes[i]]))