Skip to content

Commit

Permalink
⬆️🪝 update pre-commit hooks (#448)
Browse files Browse the repository at this point in the history
<!--pre-commit.ci start-->
updates:
- [github.com/sirosen/texthooks: 0.6.6 →
0.6.7](sirosen/texthooks@0.6.6...0.6.7)
- [github.com/astral-sh/ruff-pre-commit: v0.5.7 →
v0.6.1](astral-sh/ruff-pre-commit@v0.5.7...v0.6.1)
<!--pre-commit.ci end-->

---------

Signed-off-by: burgholzer <burgholzer@me.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: burgholzer <burgholzer@me.com>
  • Loading branch information
pre-commit-ci[bot] and burgholzer committed Aug 30, 2024
1 parent 3d75d0a commit a0a61e2
Show file tree
Hide file tree
Showing 17 changed files with 9,892 additions and 9,458 deletions.
14 changes: 7 additions & 7 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ repos:

# Handling unwanted unicode characters
- repo: https://github.com/sirosen/texthooks
rev: 0.6.6
rev: 0.6.7
hooks:
- id: fix-ligatures
- id: fix-smartquotes
Expand All @@ -56,7 +56,7 @@ repos:

# Python linting and formatting using ruff
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.7
rev: v0.6.3
hooks:
- id: ruff
args: ["--fix", "--show-fixes"]
Expand Down Expand Up @@ -96,7 +96,7 @@ repos:

# Check static types with mypy
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.1
rev: v1.11.2
hooks:
- id: mypy
files: ^(src/mqt|test/python)
Expand All @@ -108,7 +108,7 @@ repos:

# Check for spelling
- repo: https://github.com/crate-ci/typos
rev: v1.23.6
rev: v1.24.1
hooks:
- id: typos

Expand All @@ -123,21 +123,21 @@ repos:

# Check best practices for scientific Python code
- repo: https://github.com/scientific-python/cookie
rev: 2024.04.23
rev: 2024.08.19
hooks:
- id: sp-repo-review
additional_dependencies: ["repo-review[cli]"]

# Check JSON schemata
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.29.1
rev: 0.29.2
hooks:
- id: check-dependabot
- id: check-github-workflows
- id: check-readthedocs

# Check the pyproject.toml file
- repo: https://github.com/henryiii/validate-pyproject-schema-store
rev: 2024.08.08
rev: 2024.08.26
hooks:
- id: validate-pyproject
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
8 changes: 0 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ ignore = ["W002"] # Triggers on __init__.py's

[tool.ruff]
line-length = 120
src = ["src"]
namespace-packages = ["mqt"]
preview = true
unsafe-fixes = true
Expand Down Expand Up @@ -269,13 +268,6 @@ anc = "anc"
aer = "aer"


[tool.repo-review]
ignore = [
"PC160", # "Uses codespell" -> switched to https://github.com/crate-ci/typos
"PC180", # "Uses prettier" -> switched to different prettier-mirror that is not recognized by the check
]


[tool.cibuildwheel]
build = "cp3*"
skip = "*-musllinux_*"
Expand Down
17 changes: 9 additions & 8 deletions src/mqt/qcec/compilation_flow_profiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@

from enum import Enum, unique
from pathlib import Path
from typing import Any
from typing import TYPE_CHECKING, Any

import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit import __version__ as qiskit_version

if TYPE_CHECKING:
from numpy.typing import NDArray


@unique
class AncillaMode(Enum):
Expand Down Expand Up @@ -307,22 +310,20 @@ def check_recurrence(seq: list[int], order: int = 2) -> list[int] | None:
if len(seq) < (2 * order + 1):
return None

mat, f = [], []
for i in range(order):
mat.append(seq[i : i + order])
f.append(seq[i + order])
mat = np.array([seq[i : i + order] for i in range(order)], dtype=int)
f = np.array([seq[i + order] for i in range(order)], dtype=int)

if np.linalg.det(mat) == 0:
return None

coeffs = np.linalg.inv(mat).dot(f)
coefficients: NDArray[np.float64] = np.linalg.inv(mat).dot(f)

for i in range(2 * order, len(seq)):
predict = np.sum(coeffs * np.array(seq[i - order : i]))
predict: float = np.sum(coefficients * np.array(seq[i - order : i], dtype=float))
if abs(predict - seq[i]) > 10 ** (-2):
return None

return list(coeffs)
return list(coefficients)


def find_continuation(
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
Loading

0 comments on commit a0a61e2

Please sign in to comment.