def test_mean_var_interface_returns_same_as_cpp(self): """Test that the /gp/mean_var endpoint does the same thing as the C++ interface.""" tolerance = 1.0e-11 for test_case in self.gp_test_environments: python_domain, python_gp = test_case python_cov, historical_data = python_gp.get_core_data_copy() cpp_cov = SquareExponential(python_cov.hyperparameters) cpp_gp = GaussianProcess(cpp_cov, historical_data) points_to_evaluate = python_domain.generate_uniform_random_points_in_domain( 10) # mean and var from C++ cpp_mean = cpp_gp.compute_mean_of_points(points_to_evaluate) cpp_var = cpp_gp.compute_variance_of_points(points_to_evaluate) # mean and var from REST json_payload = self._build_json_payload( python_domain, python_cov, historical_data, points_to_evaluate.tolist()) resp = self.testapp.post(self.endpoint, json_payload) resp_schema = GpMeanVarResponse() resp_dict = resp_schema.deserialize(json.loads(resp.body)) rest_mean = numpy.asarray(resp_dict.get('mean')) rest_var = numpy.asarray(resp_dict.get('var')) self.assert_vector_within_relative(rest_mean, cpp_mean, tolerance) self.assert_vector_within_relative(rest_var, cpp_var, tolerance)
def test_mean_var_interface_returns_same_as_cpp(self): """Test that the /gp/mean_var endpoint does the same thing as the C++ interface.""" tolerance = 1.0e-11 for test_case in self.gp_test_environments: python_domain, python_gp = test_case python_cov, historical_data = python_gp.get_core_data_copy() cpp_cov = SquareExponential(python_cov.hyperparameters) cpp_gp = GaussianProcess(cpp_cov, historical_data) points_to_evaluate = python_domain.generate_uniform_random_points_in_domain(10) # mean and var from C++ cpp_mean = cpp_gp.compute_mean_of_points(points_to_evaluate) cpp_var = cpp_gp.compute_variance_of_points(points_to_evaluate) # mean and var from REST json_payload = self._build_json_payload(python_domain, python_cov, historical_data, points_to_evaluate.tolist()) resp = self.testapp.post(self.endpoint, json_payload) resp_schema = GpMeanVarResponse() resp_dict = resp_schema.deserialize(json.loads(resp.body)) rest_mean = numpy.asarray(resp_dict.get('mean')) rest_var = numpy.asarray(resp_dict.get('var')) self.assert_vector_within_relative(rest_mean, cpp_mean, tolerance) self.assert_vector_within_relative(rest_var, cpp_var, tolerance)
def gp_mean_var( points_sampled, points_to_evaluate, rest_host=DEFAULT_HOST, rest_port=DEFAULT_PORT, testapp=None, **kwargs ): """Hit the rest endpoint for calculating the posterior mean and variance of a gaussian process, given points already sampled.""" endpoint = ALL_REST_ROUTES_ROUTE_NAME_TO_ENDPOINT[GP_MEAN_VAR_ROUTE_NAME] raw_payload = kwargs.copy() # Any options can be set via the kwargs ('covariance_info' etc.) raw_payload['points_to_evaluate'] = points_to_evaluate # Sanitize input points points_sampled_clean = [SamplePoint._make(point) for point in points_sampled] historical_data = HistoricalData( len(points_to_evaluate[0]), # The dim of the space sample_points=points_sampled_clean, ) if 'gp_historical_info' not in raw_payload: raw_payload['gp_historical_info'] = historical_data.json_payload() if 'domain_info' not in raw_payload: raw_payload['domain_info'] = {'dim': len(points_to_evaluate[0])} json_payload = json.dumps(raw_payload) json_response = call_endpoint_with_payload(rest_host, rest_port, endpoint, json_payload, testapp) output = GpMeanVarResponse().deserialize(json_response) return output.get('mean'), output.get('var')
def test_interfaces_equivalent(self): """Test that the /gp/mean, var, mean_var, etc. endpoints are consistent.""" tolerance = numpy.finfo(numpy.float64).eps for test_case in self.gp_test_environments: python_domain, python_gp = test_case python_cov, historical_data = python_gp.get_core_data_copy() points_to_evaluate = python_domain.generate_uniform_random_points_in_domain( 10) # mean and var from REST json_payload = self._build_json_payload( python_domain, python_cov, historical_data, points_to_evaluate.tolist()) resp = self.testapp.post(self.endpoint, json_payload) resp_schema = GpMeanVarResponse() resp_dict = resp_schema.deserialize(json.loads(resp.body)) truth_mean = numpy.asarray(resp_dict.get('mean')) truth_var = numpy.asarray(resp_dict.get('var')) self._compare_endpoint_mean_var_results( json_payload, GP_MEAN_ENDPOINT, GpMeanResponse(), tolerance, truth_mean=truth_mean, ) self._compare_endpoint_mean_var_results( json_payload, GP_VAR_ENDPOINT, GpVarResponse(), tolerance, truth_var=truth_var, ) self._compare_endpoint_mean_var_results( json_payload, GP_VAR_DIAG_ENDPOINT, GpVarDiagResponse(), tolerance, truth_var=numpy.diag(truth_var), ) self._compare_endpoint_mean_var_results( json_payload, GP_MEAN_VAR_DIAG_ENDPOINT, GpMeanVarDiagResponse(), tolerance, truth_mean=truth_mean, truth_var=numpy.diag(truth_var), )
def test_interfaces_equivalent(self): """Test that the /gp/mean, var, mean_var, etc. endpoints are consistent.""" tolerance = numpy.finfo(numpy.float64).eps for test_case in self.gp_test_environments: python_domain, python_gp = test_case python_cov, historical_data = python_gp.get_core_data_copy() points_to_evaluate = python_domain.generate_uniform_random_points_in_domain(10) # mean and var from REST json_payload = self._build_json_payload(python_domain, python_cov, historical_data, points_to_evaluate.tolist()) resp = self.testapp.post(self.endpoint, json_payload) resp_schema = GpMeanVarResponse() resp_dict = resp_schema.deserialize(json.loads(resp.body)) truth_mean = numpy.asarray(resp_dict.get('mean')) truth_var = numpy.asarray(resp_dict.get('var')) self._compare_endpoint_mean_var_results( json_payload, GP_MEAN_ENDPOINT, GpMeanResponse(), tolerance, truth_mean=truth_mean, ) self._compare_endpoint_mean_var_results( json_payload, GP_VAR_ENDPOINT, GpVarResponse(), tolerance, truth_var=truth_var, ) self._compare_endpoint_mean_var_results( json_payload, GP_VAR_DIAG_ENDPOINT, GpVarDiagResponse(), tolerance, truth_var=numpy.diag(truth_var), ) self._compare_endpoint_mean_var_results( json_payload, GP_MEAN_VAR_DIAG_ENDPOINT, GpMeanVarDiagResponse(), tolerance, truth_mean=truth_mean, truth_var=numpy.diag(truth_var), )
class GpMeanVarView(GpMeanVarBaseView): """Views for gp_mean_var endpoints.""" _route_name = GP_MEAN_VAR_ROUTE_NAME _pretty_route_name = GP_MEAN_VAR_PRETTY_ROUTE_NAME response_schema = GpMeanVarResponse() @view_config(route_name=_pretty_route_name, renderer=PRETTY_RENDERER) def pretty_view(self): """A pretty, browser interactive view for the interface. Includes form request and response. .. http:get:: /gp/mean_var/pretty """ return self.pretty_response() @view_config(route_name=_route_name, renderer='json', request_method='POST') def gp_mean_var_view(self): """Endpoint for gp_mean_var POST requests. .. http:post:: /gp/mean_var Calculates the GP mean and covariance of a set of points, given historical data. :input: :class:`moe.views.schemas.rest.gp_mean_var.GpMeanVarRequest` :output: :class:`moe.views.schemas.rest.gp_mean_var.GpMeanVarResponse` :status 200: returns a response :status 500: server error """ return self.form_response( self.gp_mean_var_response_dict(compute_mean=True, compute_var=True, var_diag=False))