Skip to content

Commit

Permalink
🚨 fix deprecation warnings and update mqt-core
Browse files Browse the repository at this point in the history
Signed-off-by: burgholzer <[email protected]>
  • Loading branch information
burgholzer committed Aug 30, 2024
1 parent 591d76f commit cbc0700
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 27 deletions.
2 changes: 1 addition & 1 deletion cmake/ExternalDependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ endif()
# cmake-format: off
set(MQT_CORE_VERSION 2.6.1
CACHE STRING "MQT Core version")
set(MQT_CORE_REV "89f18fb322ff2ce86e33558e3a2b42a08e655174"
set(MQT_CORE_REV "41eea72cdbefbd86ba06f76dc41a911950dd3081"
CACHE STRING "MQT Core identifier (tag, branch or commit hash)")
set(MQT_CORE_REPO_OWNER "cda-tum"
CACHE STRING "MQT Core repository owner (change when using a fork)")
Expand Down
53 changes: 27 additions & 26 deletions src/mqt/qcec/parameterized.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def extract_params(
p = p1.union(p2)

n_params = len(p)
exprs = list(chain(*[instr[0].params for instr in circ1.data + circ2.data if instr[0].params != []]))
exprs = list(chain(*[instr.operation.params for instr in circ1.data + circ2.data if instr.operation.params != []]))

def is_expr(x: float | Parameter | ParameterExpression) -> bool:
return isinstance(x, (Parameter, ParameterExpression))
Expand Down Expand Up @@ -115,14 +115,14 @@ def check_parameterized(
total_simulations_started = 0
total_simulations_finished = 0

def update_stats(res: EquivalenceCheckingManager.Results) -> None:
def _update_stats(res: EquivalenceCheckingManager.Results) -> None:
nonlocal total_preprocessing_time, total_runtime, total_simulations_started, total_simulations_finished
total_preprocessing_time += res.preprocessing_time
total_runtime += res.check_time
total_simulations_started += res.started_simulations
total_simulations_finished += res.performed_simulations

def write_stats(i: int, res: EquivalenceCheckingManager.Results) -> None:
def _write_stats(i: int, res: EquivalenceCheckingManager.Results) -> None:
nonlocal total_preprocessing_time, total_runtime, total_simulations_started, total_simulations_finished
res.check_time = total_runtime
res.preprocessing_time = total_preprocessing_time
Expand All @@ -135,15 +135,15 @@ def write_stats(i: int, res: EquivalenceCheckingManager.Results) -> None:
if res.considered_equivalent():
return res

update_stats(res)
_update_stats(res)

timeout = __adjust_timeout(configuration.execution.timeout, res)
n_checks = configuration.parameterized.additional_instantiations
tol = configuration.parameterized.parameterized_tolerance

parameters, mat, offsets = extract_params(circ1, circ2)

def instantiate_params(
def _instantiate_params(
qc1: QuantumCircuit, qc2: QuantumCircuit, b: NDArray[np.float64]
) -> tuple[QuantumCircuit, QuantumCircuit, float]:
start_time = time.time()
Expand All @@ -153,67 +153,68 @@ def instantiate_params(
qc1_bound = qc1.assign_parameters(param_map)
qc2_bound = qc2.assign_parameters(param_map)

def round_zero_params(qc: QuantumCircuit) -> QuantumCircuit:
def _round_zero_params(qc: QuantumCircuit) -> QuantumCircuit:
for instr in qc.data:
if not hasattr(instr[0], "mutable") or instr[0].mutable:
params = instr[0].params
instr[0].params = [float(x) for x in params]
instr[0].params = [0 if np.abs(x) < tol else x for x in instr[0].params]
operation = instr.operation
if not hasattr(operation, "mutable") or operation.mutable:
params = operation.params
operation.params = [float(x) for x in params]
operation.params = [0 if np.abs(x) < tol else x for x in operation.params]
return qc

qc1_bound = round_zero_params(qc1_bound)
qc2_bound = round_zero_params(qc2_bound)
qc1_bound = _round_zero_params(qc1_bound)
qc2_bound = _round_zero_params(qc2_bound)
return qc1_bound, qc2_bound, time.time() - start_time

def instantiate_params_zero(
def _instantiate_params_zero(
qc1: QuantumCircuit, qc2: QuantumCircuit
) -> tuple[QuantumCircuit, QuantumCircuit, float]:
return instantiate_params(qc1, qc2, offsets)
return _instantiate_params(qc1, qc2, offsets)

def instantiate_params_phases(
def _instantiate_params_phases(
qc1: QuantumCircuit, qc2: QuantumCircuit
) -> tuple[QuantumCircuit, QuantumCircuit, float]:
phases = [0, np.pi, np.pi / 2, -np.pi / 2, np.pi / 4, -np.pi / 4]
rng = np.random.default_rng()
b = rng.choice(phases, size=len(offsets)) + offsets
return instantiate_params(qc1, qc2, b)
return _instantiate_params(qc1, qc2, b)

circ1_inst, circ2_inst, runtime = instantiate_params_zero(circ1, circ2)
circ1_inst, circ2_inst, runtime = _instantiate_params_zero(circ1, circ2)
timeout = __adjust_timeout(timeout, runtime)

if timeout < 0:
write_stats(1, res)
_write_stats(1, res)
res.equivalence = EquivalenceCriterion.no_information
return res

res = check_instantiated(circ1_inst, circ2_inst, configuration)
update_stats(res)
_update_stats(res)
if res.equivalence == EquivalenceCriterion.not_equivalent:
write_stats(1, res)
_write_stats(1, res)
return res

for i in range(n_checks):
circ1_inst, circ2_inst, runtime = instantiate_params_phases(circ1, circ2)
circ1_inst, circ2_inst, runtime = _instantiate_params_phases(circ1, circ2)
timeout = __adjust_timeout(timeout, runtime)
res = check_instantiated(circ1_inst, circ2_inst, configuration)
timeout = __adjust_timeout(timeout, res)

if timeout < 0:
write_stats(i + 2, res)
_write_stats(i + 2, res)
res.equivalence = EquivalenceCriterion.no_information
return res

update_stats(res)
_update_stats(res)

if res.equivalence == EquivalenceCriterion.not_equivalent:
write_stats(i + 2, res)
_write_stats(i + 2, res)
return res

res = check_instantiated_random(circ1, circ2, parameters, configuration)
timeout = __adjust_timeout(timeout, runtime)
if timeout < 0:
res.equivalence = EquivalenceCriterion.no_information

update_stats(res)
write_stats(n_checks + 2, res)
_update_stats(res)
_write_stats(n_checks + 2, res)
return res

0 comments on commit cbc0700

Please sign in to comment.