示例#1
0
    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)
示例#2
0
    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)
示例#3
0
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')
示例#4
0
    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),
            )
示例#5
0
    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),
            )
示例#6
0
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))