Source code for braket.analog_hamiltonian_simulator.rydberg.rydberg_simulator_result_converter

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

import numpy as np
from braket.task_result.analog_hamiltonian_simulation_task_result_v1 import (
    AnalogHamiltonianSimulationShotMeasurement,
    AnalogHamiltonianSimulationShotMetadata,
    AnalogHamiltonianSimulationShotResult,
    AnalogHamiltonianSimulationTaskResult,
)
from braket.task_result.task_metadata_v1 import TaskMetadata


[docs] def convert_result( dist: np.ndarray, pre_sequence: list[int], configurations: list[str], task_Metadata: TaskMetadata, ) -> AnalogHamiltonianSimulationTaskResult: """Convert a given sampled distribution to the analog simulation result schema Args: dist (ndarray): The sample results to convert pre_sequence (list[int]): the same pre-sequence measurement results used for all shots configurations (list[str]): The list of configurations that comply with the blockade approximation. task_Metadata (TaskMetadata): The metadata for the task Returns: AnalogHamiltonianSimulationTaskResult: Results from sampling a distribution """ measurements = [] pre_sequence_arr = np.array(pre_sequence) non_empty_sites = np.where(pre_sequence_arr == 1)[0] for configuration, count in zip(configurations, dist): post_sequence = [0] * len(pre_sequence) for site, state in zip(non_empty_sites, list(configuration)): if state == "g": post_sequence[site] = 1 else: # state == "r": post_sequence[site] = 0 shot_measurement = AnalogHamiltonianSimulationShotMeasurement( shotMetadata=AnalogHamiltonianSimulationShotMetadata(shotStatus="Success"), shotResult=AnalogHamiltonianSimulationShotResult( preSequence=pre_sequence, postSequence=post_sequence ), ) measurements += [shot_measurement for _ in range(count)] return AnalogHamiltonianSimulationTaskResult( taskMetadata=task_Metadata, measurements=measurements )