예제 #1
0
    def test_build_uniform_param_grid_number_of_params_per_layer(
            self, number_of_params_per_layer, number_of_layers, min_value,
            max_value, step):
        # Given
        expected_parameter_grid_filename = "parameter-grid.json"
        expected_parameter_grid = _build_uniform_param_grid(
            number_of_params_per_layer,
            number_of_layers,
            min_value=min_value,
            max_value=max_value,
            step=step,
        )

        # When
        build_uniform_param_grid(
            number_of_params_per_layer=number_of_params_per_layer,
            number_of_layers=number_of_layers,
            min_value=min_value,
            max_value=max_value,
            step=step,
        )

        # Then
        try:
            parameter_grid = load_parameter_grid(
                expected_parameter_grid_filename)
            assert [tuple(param) for param in parameter_grid.param_ranges
                    ] == expected_parameter_grid.param_ranges
        finally:
            remove_file_if_exists(expected_parameter_grid_filename)
예제 #2
0
def build_uniform_param_grid(
    ansatz_specs: Dict,
    number_of_params_per_layer: Union[str, int] = "None",
    number_of_layers: int = 1,
    min_value: float = 0,
    max_value: float = 2 * np.pi,
    step: float = np.pi / 5,
):
    if ansatz_specs != "None":  # TODO None issue in workflow v1
        ansatz = create_object(json.loads(ansatz_specs))
        number_of_params = ansatz.number_of_params
    elif number_of_params_per_layer != "None":
        number_of_params = number_of_params_per_layer

    grid = _build_uniform_param_grid(number_of_params, number_of_layers,
                                     min_value, max_value, step)
    save_parameter_grid(grid, "parameter-grid.json")
예제 #3
0
def build_uniform_param_grid(
    ansatz_specs: Optional[Specs] = None,
    number_of_params_per_layer: Optional[int] = None,
    number_of_layers: int = 1,
    min_value: float = 0,
    max_value: float = 2 * np.pi,
    step: float = np.pi / 5,
):
    assert (ansatz_specs is None) != (number_of_params_per_layer is None)

    if ansatz_specs is not None:
        ansatz = load_from_specs(ansatz_specs)
        number_of_params = ansatz.number_of_params
    else:
        number_of_params = number_of_params_per_layer

    grid = _build_uniform_param_grid(number_of_params, number_of_layers,
                                     min_value, max_value, step)
    save_parameter_grid(grid, "parameter-grid.json")
예제 #4
0
    def test_build_uniform_param_grid_ansatz_specs_as_string(
        self,
        number_of_ansatz_layers,
        problem_size,
        number_of_layers,
        min_value,
        max_value,
        step,
    ):
        # Given
        expected_parameter_grid_filename = "parameter-grid.json"
        ansatz_specs = {
            "module_name": "zquantum.core.interfaces.mock_objects",
            "function_name": "MockAnsatz",
            "number_of_layers": number_of_ansatz_layers,
            "problem_size": problem_size,
        }
        ansatz = create_object(copy.deepcopy(ansatz_specs))
        expected_parameter_grid = _build_uniform_param_grid(
            ansatz.number_of_params,
            number_of_layers,
            min_value=min_value,
            max_value=max_value,
            step=step,
        )

        # When
        build_uniform_param_grid(
            ansatz_specs=json.dumps(ansatz_specs),
            number_of_layers=number_of_layers,
            min_value=min_value,
            max_value=max_value,
            step=step,
        )

        # Then
        try:
            parameter_grid = load_parameter_grid(
                expected_parameter_grid_filename)
            assert [tuple(param) for param in parameter_grid.param_ranges
                    ] == expected_parameter_grid.param_ranges
        finally:
            remove_file_if_exists(expected_parameter_grid_filename)