def run_scenario_ideal(config, circuit, observables):
"""
Scenario 1: Ideal - Results with no noise.
"""
results = load_json_data(
f"{config['experiment']['cached_folder']}/ideal.json"
)
return {
"scenario_name": "Ideal",
"scenario_description": "Results with no noise",
"magnetization": results[0][0],
"runtime_minutes": None,
"runtime_bill": None,
}
def run_scenario_noisy(config, circuit, observables):
"""
Scenario 2: Noisy - Raw results from quantum processor without error mitigation.
"""
if device_execution:
results = haiqu.run(
circuit,
parameters=config["circuit"]["transverse_field_params"],
observables=observables,
shots=config["circuit"]["shots"],
device_id=config["processor"]["name"],
options=config["device_credentials"],
).result()
else:
results = load_json_data(f"{config['experiment']['cached_folder']}/noisy.json")["results"]
runtime_minutes = 38 / 60 # For cached job.
return {
"scenario_name": "Noisy",
"scenario_description": "Raw results from quantum processor without error mitigation",
"magnetization": results[0][0],
"runtime_minutes": runtime_minutes,
"runtime_bill": runtime_minutes * config["processor"]["usd_per_minute"],
}
def run_scenario_mitigated_ibm(config, circuit, observables):
"""
Scenario 3: Error Mitigated IBM - Results using IBM's error mitigation methods.
"""
# Results and runtime from IBM Nature Article: https://www.nature.com/articles/s41586-023-06096-3
results = load_json_data(f"{config['experiment']['cached_folder']}/ibm.json")
runtime_minutes = 4 * 60 # See IBM paper.
return {
"scenario_name": "IBM",
"scenario_description": (
"Results using IBM's error mitigation methods "
"(Sparse Pauli-Lindblad Noise Learning + ZNE)"
),
"magnetization": results[0][0],
"runtime_minutes": runtime_minutes,
"runtime_bill": runtime_minutes * config["processor"]["usd_per_minute"],
}
def run_scenario_mitigated_haiqu(config, circuit, observables):
"""
Scenario 4: Error Mitigated Haiqu - Results using Haiqu's error mitigation.
"""
if device_execution:
results = haiqu.run(
circuit,
parameters=config["circuit"]["transverse_field_params"],
observables=observables,
shots=config["circuit"]["shots"],
device_id=config["processor"]["name"],
options=config["device_credentials"],
use_mitigation=True,
).result()
else:
results = load_json_data(f"{config['experiment']['cached_folder']}/haiqu.json")["results"]
runtime_minutes = 41 / 60 # For cached job.
return {
"scenario_name": "Haiqu",
"scenario_description": "Results using Haiqu's error mitigation",
"magnetization": results[0][0],
"runtime_minutes": runtime_minutes,
"runtime_bill": runtime_minutes * config["processor"]["usd_per_minute"],
}