Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 24 additions & 9 deletions effect/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,22 @@ def split_path_from_clicks(path,clicks):

return split_paths

def run_estimator(circuits, operators, backend=None, options = None):
def run_estimator(circuits, operators, backend=None, options = None, timeout=30):
'''Runs the estimator on the provided circuits and operators.
It can receive a single circuit or a list of circuits.
It can receive a single operator or a list of operators or a list of list of operators (one for each circuit).

Args:
timeout (int): Maximum time in seconds to wait for quantum simulation results
'''
import signal

def timeout_handler(signum, frame):
raise TimeoutError(f"Quantum simulation timed out after {timeout} seconds. Try reducing the radius or simplifying the effect.")

# Set up timeout signal
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(timeout)

#iqm_server_url = "https://cocos.resonance.meetiqm.com/garnet:mock" # Replace this with the correct URL
#provider = IQMProvider(iqm_server_url)
Expand Down Expand Up @@ -180,16 +191,20 @@ def run_estimator(circuits, operators, backend=None, options = None):
else:
isa_observables = [[operators.apply_layout(isa_circuits[0].layout)]] * n_circuits

isa_inputs = list(zip(isa_circuits, isa_observables))
job = estimator.run(isa_inputs)
try:
isa_inputs = list(zip(isa_circuits, isa_observables))
job = estimator.run(isa_inputs)

pub_result = job.result()
obs = [pub_result[i].data.evs for i in range(n_circuits)]
pub_result = job.result()
obs = [pub_result[i].data.evs for i in range(n_circuits)]

if n_circuits == 1:
return obs[0]

return obs
if n_circuits == 1:
return obs[0]

return obs
finally:
# Always cancel the timeout alarm
signal.alarm(0)

def bresenham_line(x1, y1, x2, y2):
points = []
Expand Down