From 85f0cd498f033753b5224c9b81ee9a98d7ef0be7 Mon Sep 17 00:00:00 2001 From: Phillip Weinberg Date: Thu, 1 May 2025 09:37:42 -0400 Subject: [PATCH 1/3] updating default arguments to only pick one state --- src/bloqade/pyqrack/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bloqade/pyqrack/base.py b/src/bloqade/pyqrack/base.py index fdd903a1..dd751b89 100644 --- a/src/bloqade/pyqrack/base.py +++ b/src/bloqade/pyqrack/base.py @@ -32,7 +32,7 @@ def _default_pyqrack_args() -> PyQrackOptions: isTensorNetwork=False, isSchmidtDecomposeMulti=True, isSchmidtDecompose=True, - isStabilizerHybrid=True, + isStabilizerHybrid=False, isBinaryDecisionTree=True, isPaged=True, isCpuGpuHybrid=True, From 12b88fe8a79a3625ac91b93122bebb6fc9478713 Mon Sep 17 00:00:00 2001 From: Phillip Weinberg Date: Thu, 1 May 2025 09:40:53 -0400 Subject: [PATCH 2/3] adding validation to options. --- src/bloqade/pyqrack/base.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/bloqade/pyqrack/base.py b/src/bloqade/pyqrack/base.py index dd751b89..07f078fc 100644 --- a/src/bloqade/pyqrack/base.py +++ b/src/bloqade/pyqrack/base.py @@ -26,6 +26,21 @@ class PyQrackOptions(typing.TypedDict): isOpenCL: bool +def _validate_pyqrack_options(options: PyQrackOptions) -> None: + if options["isBinaryDecisionTree"] and options["isStabilizerHybrid"]: + raise ValueError( + "Cannot use both isBinaryDecisionTree and isStabilizerHybrid at the same time." + ) + elif options["isTensorNetwork"] and options["isBinaryDecisionTree"]: + raise ValueError( + "Cannot use both isTensorNetwork and isBinaryDecisionTree at the same time." + ) + elif options["isTensorNetwork"] and options["isStabilizerHybrid"]: + raise ValueError( + "Cannot use both isTensorNetwork and isStabilizerHybrid at the same time." + ) + + def _default_pyqrack_args() -> PyQrackOptions: return PyQrackOptions( qubitCount=-1, @@ -45,6 +60,9 @@ class MemoryABC(abc.ABC): pyqrack_options: PyQrackOptions = field(default_factory=_default_pyqrack_args) sim_reg: "QrackSimulator" = field(init=False) + def __post_init__(self): + _validate_pyqrack_options(self.pyqrack_options) + @abc.abstractmethod def allocate(self, n_qubits: int) -> tuple[int, ...]: """Allocate `n_qubits` qubits and return their ids.""" From d3d5bad5bcc4a0fc8fad8a746e13d10c6deefde4 Mon Sep 17 00:00:00 2001 From: Phillip Weinberg Date: Thu, 1 May 2025 09:51:02 -0400 Subject: [PATCH 3/3] Fixing test --- test/pyqrack/test_target.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/pyqrack/test_target.py b/test/pyqrack/test_target.py index b1f23729..a7339781 100644 --- a/test/pyqrack/test_target.py +++ b/test/pyqrack/test_target.py @@ -103,7 +103,9 @@ def multiple_registers(): return q1 - target = PyQrack(6) + target = PyQrack( + 6, pyqrack_options={"isBinaryDecisionTree": False, "isStabilizerHybrid": True} + ) q1 = target.run(multiple_registers) assert isinstance(q1, ilist.IList)