ket-lang 0.10.4.2.dev0__tar.gz → 0.10.4.3.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ket_lang-0.10.4.2.dev0/src/ket_lang.egg-info → ket_lang-0.10.4.3.dev0}/PKG-INFO +1 -1
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/__init__.py +1 -1
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/amazon.py +4 -4
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/base/__init__.py +15 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/.gitlab-ci.yml +37 -6
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/Cargo.toml +8 -3
- ket_lang-0.10.4.3.dev0/src/ket/clib/libs/kbw/build.rs +26 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/kbw.h +1 -1
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/c_api.rs +9 -2
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/dense_gpu/kernel.rs +38 -36
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/dense_gpu/mod.rs +190 -63
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/dense_v2.rs +2 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/lib.rs +36 -14
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/.gitlab-ci.yml +3 -3
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/c_api/process.rs +1 -1
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/ir/block.rs +16 -2
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/process/mod.rs +26 -1
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/tests.rs +159 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/expv.py +262 -28
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/gates.py +44 -4
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/ibm.py +6 -5
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/measurement.py +4 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/operations.py +17 -2
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/quantumstate.py +1 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qulib/__init__.py +4 -2
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0/src/ket_lang.egg-info}/PKG-INFO +1 -1
- ket_lang-0.10.4.2.dev0/src/ket/clib/libs/kbw/build.rs +0 -7
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/LICENSE +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/MANIFEST.in +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/README.md +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/pyproject.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/setup.cfg +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/setup.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/base/qasm.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/base/quant.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/__init__.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/kbw.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libket/__init__.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libket/execution.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/__init__.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/.git +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/.gitignore +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/.pre-commit-config.yaml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/CHANGELOG.md +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/LICENSE +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/LICENSES/Apache-2.0.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/README.md +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/REUSE.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/cbindgen.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/examples/grover_batch.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/examples/grover_live.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/examples/grover_live_dv2.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/bitwise.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/block.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/convert.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/dense.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/quantum_execution.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/sparse.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/sparse_v2.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/.git +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/.gitignore +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/.pre-commit-config.yaml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/CHANGELOG.md +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/Cargo.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/LICENSE +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/LICENSES/Apache-2.0.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/README.md +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/REUSE.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/build.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/cbindgen.toml +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/examples/grover.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/examples/qft.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/libket.h +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/c_api/block.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/c_api/execute.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/c_api/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/network.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/su2.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/u2.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/util.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/x/c2to4x.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/x/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/x/single_aux.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/decompose/x/v_chain.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/error.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/execution.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/ir/gate.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/ir/hamiltonian.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/ir/macros.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/ir/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/lib.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/mapping/allocation.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/mapping/dynamic_look_ahead.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/mapping/graph.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/mapping/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/matrix.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/process/classical_shadow.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/process/qwc.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/qasm/ast.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/qasm/executor.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/qasm/gates.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/qasm/mod.rs +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/libket/src/qasm/openqasm.lalrpop +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/wrapper.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/fermion.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/gateset.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/mps.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/npsim.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qint.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qulib/gates.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qulib/ham.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qulib/oracle.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/qulib/prepare.py +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket_lang.egg-info/SOURCES.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket_lang.egg-info/dependency_links.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket_lang.egg-info/not-zip-safe +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket_lang.egg-info/requires.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket_lang.egg-info/top_level.txt +0 -0
- {ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/tests/test_fermion.py +0 -0
|
@@ -62,6 +62,7 @@ from __future__ import annotations
|
|
|
62
62
|
#
|
|
63
63
|
# SPDX-License-Identifier: Apache-2.0
|
|
64
64
|
|
|
65
|
+
from collections import Counter
|
|
65
66
|
from functools import reduce
|
|
66
67
|
from json import loads
|
|
67
68
|
from operator import add
|
|
@@ -256,10 +257,9 @@ class AmazonBraket(BatchExecution): # pylint: disable=too-many-instance-attribu
|
|
|
256
257
|
result = self.device.run(circuit, shots=shots).result()
|
|
257
258
|
aws_map = {q: i for i, q in enumerate(result.measured_qubits)}
|
|
258
259
|
|
|
259
|
-
counts =
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
260
|
+
counts = Counter()
|
|
261
|
+
for k, v in result.measurement_counts.items():
|
|
262
|
+
counts[self._from_braket_to_ket(k, qubits_to_sample, aws_map)] += v
|
|
263
263
|
|
|
264
264
|
mask_64bit = (1 << 64) - 1
|
|
265
265
|
num_chunks = (len(qubits_to_sample) + 63) // 64
|
|
@@ -185,6 +185,21 @@ class Process(LibketProcess): # pylint: disable=too-many-instance-attributes
|
|
|
185
185
|
if self._blocked_qubits[q] == 0:
|
|
186
186
|
del self._blocked_qubits[q]
|
|
187
187
|
|
|
188
|
+
def _check_not_in_block(self, operation: str):
|
|
189
|
+
"""Raise if ``operation`` is called inside a gate-building block.
|
|
190
|
+
|
|
191
|
+
Blocks (``with around``, ``with control``, ``with inverse``, gate
|
|
192
|
+
functions) are only added to the circuit when they close. Measuring
|
|
193
|
+
or inspecting the state inside one would run before the block's
|
|
194
|
+
gates, giving silently wrong results.
|
|
195
|
+
"""
|
|
196
|
+
if self._blocks:
|
|
197
|
+
raise RuntimeError(
|
|
198
|
+
f"Cannot call {operation} inside a gate-building block "
|
|
199
|
+
"(e.g., 'with around', 'with control', 'with inverse', or a "
|
|
200
|
+
"function used as a gate). Call it outside the block."
|
|
201
|
+
)
|
|
202
|
+
|
|
188
203
|
def _get_exp_value_index(self) -> int:
|
|
189
204
|
index = self._exp_value_count
|
|
190
205
|
self._exp_value_count += 1
|
|
@@ -18,7 +18,7 @@ variables:
|
|
|
18
18
|
# ---------------------------------------------------------------------------
|
|
19
19
|
|
|
20
20
|
cargo-clippy:
|
|
21
|
-
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-1.97
|
|
21
|
+
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-2.34-1.97
|
|
22
22
|
stage: lint
|
|
23
23
|
cache:
|
|
24
24
|
- key: cargo-registry-v1
|
|
@@ -46,7 +46,7 @@ reuse:
|
|
|
46
46
|
# ---------------------------------------------------------------------------
|
|
47
47
|
|
|
48
48
|
cargo-test:
|
|
49
|
-
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-1.97
|
|
49
|
+
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-2.34-1.97
|
|
50
50
|
stage: test
|
|
51
51
|
cache:
|
|
52
52
|
- key: cargo-registry-v1
|
|
@@ -67,8 +67,9 @@ cargo-test:
|
|
|
67
67
|
# Build stage
|
|
68
68
|
# ---------------------------------------------------------------------------
|
|
69
69
|
|
|
70
|
+
# glibc >= 2.28, default features (dense + sparse).
|
|
70
71
|
linux-build:
|
|
71
|
-
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-1.97
|
|
72
|
+
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-2.28-1.97
|
|
72
73
|
stage: build
|
|
73
74
|
cache:
|
|
74
75
|
- key: cargo-registry-v1
|
|
@@ -76,7 +77,7 @@ linux-build:
|
|
|
76
77
|
- .cargo/registry/index/
|
|
77
78
|
- .cargo/registry/cache/
|
|
78
79
|
policy: pull
|
|
79
|
-
- key: cargo-release-linux-$CI_COMMIT_REF_SLUG
|
|
80
|
+
- key: cargo-release-linux-2.28-$CI_COMMIT_REF_SLUG
|
|
80
81
|
paths:
|
|
81
82
|
- target/release/
|
|
82
83
|
- target/.rustc_info.json
|
|
@@ -84,9 +85,35 @@ linux-build:
|
|
|
84
85
|
policy: pull-push
|
|
85
86
|
script:
|
|
86
87
|
- cargo build --release
|
|
88
|
+
- cp target/release/libkbw.so libkbw.so
|
|
87
89
|
artifacts:
|
|
88
90
|
paths:
|
|
89
|
-
-
|
|
91
|
+
- libkbw.so
|
|
92
|
+
rules:
|
|
93
|
+
- if: '$CI_COMMIT_BRANCH == "main"'
|
|
94
|
+
|
|
95
|
+
# glibc >= 2.34, default features + GPU (wgpu) and CUDA.
|
|
96
|
+
linux-gpu-build:
|
|
97
|
+
image: registry.gitlab.com/quantum-ket/ket-building-images:linux-2.34-1.97
|
|
98
|
+
stage: build
|
|
99
|
+
cache:
|
|
100
|
+
- key: cargo-registry-v1
|
|
101
|
+
paths:
|
|
102
|
+
- .cargo/registry/index/
|
|
103
|
+
- .cargo/registry/cache/
|
|
104
|
+
policy: pull
|
|
105
|
+
- key: cargo-release-linux-2.34-gpu-$CI_COMMIT_REF_SLUG
|
|
106
|
+
paths:
|
|
107
|
+
- target/release/
|
|
108
|
+
- target/.rustc_info.json
|
|
109
|
+
- target/CACHEDIR.TAG
|
|
110
|
+
policy: pull-push
|
|
111
|
+
script:
|
|
112
|
+
- cargo build --release -F gpu,cuda
|
|
113
|
+
- cp target/release/libkbw.so libkbw.gpu.so
|
|
114
|
+
artifacts:
|
|
115
|
+
paths:
|
|
116
|
+
- libkbw.gpu.so
|
|
90
117
|
rules:
|
|
91
118
|
- if: '$CI_COMMIT_BRANCH == "main"'
|
|
92
119
|
|
|
@@ -151,8 +178,12 @@ publish:
|
|
|
151
178
|
script:
|
|
152
179
|
- |
|
|
153
180
|
curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
|
|
154
|
-
--upload-file
|
|
181
|
+
--upload-file libkbw.so \
|
|
155
182
|
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/kbw/${CI_COMMIT_SHORT_SHA}/libkbw.so"
|
|
183
|
+
- |
|
|
184
|
+
curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
|
|
185
|
+
--upload-file libkbw.gpu.so \
|
|
186
|
+
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/kbw/${CI_COMMIT_SHORT_SHA}/libkbw.gpu.so"
|
|
156
187
|
- |
|
|
157
188
|
curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
|
|
158
189
|
--upload-file target/x86_64-pc-windows-gnu/release/kbw.dll \
|
|
@@ -28,7 +28,11 @@ build-info = { version = "0.0.45", default-features = false, features = [] }
|
|
|
28
28
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
29
29
|
serde_json = "1.0.150"
|
|
30
30
|
num-traits = "0.2"
|
|
31
|
-
cubecl = { version = "0.
|
|
31
|
+
cubecl = { version = "0.11.1", optional = true }
|
|
32
|
+
cudarc = { version = "0.19.10", default-features = false, features = [
|
|
33
|
+
"cuda-13040",
|
|
34
|
+
"dynamic-loading",
|
|
35
|
+
], optional = true }
|
|
32
36
|
bimap = { version = "0.6.3", optional = true }
|
|
33
37
|
pollster = { version = "1.0.1", optional = true }
|
|
34
38
|
smallvec = "1.15.2"
|
|
@@ -44,8 +48,9 @@ crate-type = ["cdylib", "rlib"]
|
|
|
44
48
|
strip = true
|
|
45
49
|
|
|
46
50
|
[features]
|
|
47
|
-
default = ["dense", "sparse"
|
|
48
|
-
gpu = ["block", "cubecl", "pollster"]
|
|
51
|
+
default = ["dense", "sparse"]
|
|
52
|
+
gpu = ["block", "cubecl/wgpu", "pollster"]
|
|
53
|
+
cuda = ["block", "cubecl/cuda", "dep:cudarc", "pollster"]
|
|
49
54
|
dense = []
|
|
50
55
|
sparse = ["rustc-hash"]
|
|
51
56
|
block = ["bimap"]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2024 Evandro Chagas Ribeiro da Rosa <evandro@quantuloop.com>
|
|
2
|
+
//
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
fn main() {
|
|
6
|
+
build_info_build::build_script();
|
|
7
|
+
|
|
8
|
+
let mut accelerators = Vec::new();
|
|
9
|
+
|
|
10
|
+
if std::env::var("CARGO_FEATURE_GPU").is_ok() {
|
|
11
|
+
accelerators.push("GPU");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if std::env::var("CARGO_FEATURE_CUDA").is_ok() {
|
|
15
|
+
accelerators.push("CUDA");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if accelerators.is_empty() {
|
|
19
|
+
println!("cargo:rustc-env=KBW_ACCELERATORS=", );
|
|
20
|
+
} else {
|
|
21
|
+
println!(
|
|
22
|
+
"cargo:rustc-env=KBW_ACCELERATORS=[{}]",
|
|
23
|
+
accelerators.join(", ")
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -25,7 +25,7 @@ extern "C" {
|
|
|
25
25
|
* * `num_qubits`: number of qubits to allocate.
|
|
26
26
|
* * `simulator`: NUL-terminated C string naming the backend. Recognised
|
|
27
27
|
* values (case-insensitive, whitespace ignored): `"dense"`, `"densev2"`,
|
|
28
|
-
* `"densegpu"`, `"sparse"`, `"sparsev2"`.
|
|
28
|
+
* `"densegpu"`, `"densecuda"`, `"sparse"`, `"sparsev2"`.
|
|
29
29
|
* * `use_live`: `true` for live (gate-by-gate) mode; `false` for batch mode.
|
|
30
30
|
* * `gradient`: enable the parameter-shift-rule gradient strategy (batch
|
|
31
31
|
* mode only).
|
|
@@ -23,6 +23,9 @@ use crate::{Dense, DenseV2};
|
|
|
23
23
|
#[cfg(feature = "gpu")]
|
|
24
24
|
use crate::{DenseGPU, DenseGPUBlock};
|
|
25
25
|
|
|
26
|
+
#[cfg(feature = "cuda")]
|
|
27
|
+
use crate::DenseCUDA;
|
|
28
|
+
|
|
26
29
|
#[cfg(feature = "sparse")]
|
|
27
30
|
use crate::{Sparse, SparseV2};
|
|
28
31
|
use ket::{error::KetError, process::QPUConfig};
|
|
@@ -37,7 +40,7 @@ use crate::quantum_execution::QubitManager;
|
|
|
37
40
|
/// * `num_qubits`: number of qubits to allocate.
|
|
38
41
|
/// * `simulator`: NUL-terminated C string naming the backend. Recognised
|
|
39
42
|
/// values (case-insensitive, whitespace ignored): `"dense"`, `"densev2"`,
|
|
40
|
-
/// `"densegpu"`, `"sparse"`, `"sparsev2"`.
|
|
43
|
+
/// `"densegpu"`, `"densecuda"`, `"sparse"`, `"sparsev2"`.
|
|
41
44
|
/// * `use_live`: `true` for live (gate-by-gate) mode; `false` for batch mode.
|
|
42
45
|
/// * `gradient`: enable the parameter-shift-rule gradient strategy (batch
|
|
43
46
|
/// mode only).
|
|
@@ -108,6 +111,10 @@ pub unsafe extern "C" fn kbw_make_configuration(
|
|
|
108
111
|
)
|
|
109
112
|
}
|
|
110
113
|
}
|
|
114
|
+
#[cfg(feature = "cuda")]
|
|
115
|
+
"densecuda" => {
|
|
116
|
+
make_config::<DenseCUDA>(num_qubits, use_live, decompose, coupling_graph, gradient)
|
|
117
|
+
}
|
|
111
118
|
#[cfg(feature = "sparse")]
|
|
112
119
|
"sparse" => {
|
|
113
120
|
make_config::<Sparse>(num_qubits, use_live, decompose, coupling_graph, gradient)
|
|
@@ -146,7 +153,7 @@ where
|
|
|
146
153
|
}
|
|
147
154
|
}
|
|
148
155
|
|
|
149
|
-
const BUILD_INFO: &str = build_info::format!("{} v{} [{} {}]", $.crate_info.name, $.crate_info.version, $.compiler, $.target);
|
|
156
|
+
const BUILD_INFO: &str = build_info::format!("{} v{} {} [{} {}]", $.crate_info.name, $.crate_info.version, env!("KBW_ACCELERATORS"), $.compiler, $.target);
|
|
150
157
|
|
|
151
158
|
/// Return a static string describing the KBW build.
|
|
152
159
|
///
|
{ket_lang-0.10.4.2.dev0 → ket_lang-0.10.4.3.dev0}/src/ket/clib/libs/kbw/src/dense_gpu/kernel.rs
RENAMED
|
@@ -84,8 +84,8 @@ pub(super) const fn compute_ket(
|
|
|
84
84
|
|
|
85
85
|
#[cube(launch_unchecked)]
|
|
86
86
|
pub(super) fn gate_x<F: Float>(
|
|
87
|
-
state_real: &mut
|
|
88
|
-
state_imag: &mut
|
|
87
|
+
state_real: &mut [F],
|
|
88
|
+
state_imag: &mut [F],
|
|
89
89
|
offset: usize,
|
|
90
90
|
control_mask: u32,
|
|
91
91
|
half_block_size: u32,
|
|
@@ -103,20 +103,22 @@ pub(super) fn gate_x<F: Float>(
|
|
|
103
103
|
);
|
|
104
104
|
|
|
105
105
|
if ket.2 {
|
|
106
|
-
let
|
|
107
|
-
|
|
108
|
-
state_real[ket.1]
|
|
106
|
+
let r0 = state_real[ket.0];
|
|
107
|
+
let i0 = state_imag[ket.0];
|
|
108
|
+
let r1 = state_real[ket.1];
|
|
109
|
+
let i1 = state_imag[ket.1];
|
|
109
110
|
|
|
110
|
-
|
|
111
|
-
state_imag[ket.0] =
|
|
112
|
-
|
|
111
|
+
state_real[ket.0] = r1;
|
|
112
|
+
state_imag[ket.0] = i1;
|
|
113
|
+
state_real[ket.1] = r0;
|
|
114
|
+
state_imag[ket.1] = i0;
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
#[cube(launch_unchecked)]
|
|
117
119
|
pub(super) fn gate_y<F: Float>(
|
|
118
|
-
state_real: &mut
|
|
119
|
-
state_imag: &mut
|
|
120
|
+
state_real: &mut [F],
|
|
121
|
+
state_imag: &mut [F],
|
|
120
122
|
offset: usize,
|
|
121
123
|
control_mask: u32,
|
|
122
124
|
half_block_size: u32,
|
|
@@ -150,8 +152,8 @@ pub(super) fn gate_y<F: Float>(
|
|
|
150
152
|
|
|
151
153
|
#[cube(launch_unchecked)]
|
|
152
154
|
pub(super) fn gate_z<F: Float>(
|
|
153
|
-
state_real: &mut
|
|
154
|
-
state_imag: &mut
|
|
155
|
+
state_real: &mut [F],
|
|
156
|
+
state_imag: &mut [F],
|
|
155
157
|
offset: usize,
|
|
156
158
|
control_mask: u32,
|
|
157
159
|
half_block_size: u32,
|
|
@@ -176,8 +178,8 @@ pub(super) fn gate_z<F: Float>(
|
|
|
176
178
|
|
|
177
179
|
#[cube(launch_unchecked)]
|
|
178
180
|
pub(super) fn gate_h<F: Float + LaunchArg + ConstantFloat>(
|
|
179
|
-
state_real: &mut
|
|
180
|
-
state_imag: &mut
|
|
181
|
+
state_real: &mut [F],
|
|
182
|
+
state_imag: &mut [F],
|
|
181
183
|
offset: usize,
|
|
182
184
|
control_mask: u32,
|
|
183
185
|
half_block_size: u32,
|
|
@@ -226,8 +228,8 @@ fn complex_mul<F: Float>(a_r: F, a_i: F, b_r: F, b_i: F) -> (F, F) {
|
|
|
226
228
|
|
|
227
229
|
#[cube(launch_unchecked)]
|
|
228
230
|
pub(super) fn gate_p<F: Float + LaunchArg>(
|
|
229
|
-
state_real: &mut
|
|
230
|
-
state_imag: &mut
|
|
231
|
+
state_real: &mut [F],
|
|
232
|
+
state_imag: &mut [F],
|
|
231
233
|
offset: usize,
|
|
232
234
|
control_mask: u32,
|
|
233
235
|
half_block_size: u32,
|
|
@@ -255,8 +257,8 @@ pub(super) fn gate_p<F: Float + LaunchArg>(
|
|
|
255
257
|
|
|
256
258
|
#[cube(launch_unchecked)]
|
|
257
259
|
pub(super) fn gate_rx<F: Float + LaunchArg + ConstantFloat>(
|
|
258
|
-
state_real: &mut
|
|
259
|
-
state_imag: &mut
|
|
260
|
+
state_real: &mut [F],
|
|
261
|
+
state_imag: &mut [F],
|
|
260
262
|
offset: usize,
|
|
261
263
|
control_mask: u32,
|
|
262
264
|
half_block_size: u32,
|
|
@@ -291,8 +293,8 @@ pub(super) fn gate_rx<F: Float + LaunchArg + ConstantFloat>(
|
|
|
291
293
|
|
|
292
294
|
#[cube(launch_unchecked)]
|
|
293
295
|
pub(super) fn gate_ry<F: Float + LaunchArg + ConstantFloat>(
|
|
294
|
-
state_real: &mut
|
|
295
|
-
state_imag: &mut
|
|
296
|
+
state_real: &mut [F],
|
|
297
|
+
state_imag: &mut [F],
|
|
296
298
|
offset: usize,
|
|
297
299
|
control_mask: u32,
|
|
298
300
|
half_block_size: u32,
|
|
@@ -327,8 +329,8 @@ pub(super) fn gate_ry<F: Float + LaunchArg + ConstantFloat>(
|
|
|
327
329
|
|
|
328
330
|
#[cube(launch_unchecked)]
|
|
329
331
|
pub(super) fn gate_rz<F: Float + LaunchArg>(
|
|
330
|
-
state_real: &mut
|
|
331
|
-
state_imag: &mut
|
|
332
|
+
state_real: &mut [F],
|
|
333
|
+
state_imag: &mut [F],
|
|
332
334
|
offset: usize,
|
|
333
335
|
control_mask: u32,
|
|
334
336
|
half_block_size: u32,
|
|
@@ -365,11 +367,11 @@ pub(super) fn gate_rz<F: Float + LaunchArg>(
|
|
|
365
367
|
|
|
366
368
|
#[cube(launch_unchecked)]
|
|
367
369
|
pub(super) fn measure_p1<F: Float>(
|
|
368
|
-
state_real: &
|
|
369
|
-
state_imag: &
|
|
370
|
+
state_real: &[F],
|
|
371
|
+
state_imag: &[F],
|
|
370
372
|
iter_offset: usize,
|
|
371
373
|
block_offset: usize,
|
|
372
|
-
prob: &mut
|
|
374
|
+
prob: &mut [F],
|
|
373
375
|
target: u32,
|
|
374
376
|
mask: u32,
|
|
375
377
|
) {
|
|
@@ -387,8 +389,8 @@ pub(super) fn measure_p1<F: Float>(
|
|
|
387
389
|
|
|
388
390
|
#[cube(launch_unchecked)]
|
|
389
391
|
pub(super) fn measure_collapse<F: Float + LaunchArg + ConstantFloat>(
|
|
390
|
-
state_real: &mut
|
|
391
|
-
state_imag: &mut
|
|
392
|
+
state_real: &mut [F],
|
|
393
|
+
state_imag: &mut [F],
|
|
392
394
|
offset: usize,
|
|
393
395
|
target_mask: u32,
|
|
394
396
|
result: u32,
|
|
@@ -398,8 +400,8 @@ pub(super) fn measure_collapse<F: Float + LaunchArg + ConstantFloat>(
|
|
|
398
400
|
let state_index = state as usize;
|
|
399
401
|
|
|
400
402
|
if (state & target_mask) == result {
|
|
401
|
-
state_real[state_index]
|
|
402
|
-
state_imag[state_index]
|
|
403
|
+
state_real[state_index] *= p;
|
|
404
|
+
state_imag[state_index] *= p;
|
|
403
405
|
} else {
|
|
404
406
|
state_real[state_index] = F::ZERO;
|
|
405
407
|
state_imag[state_index] = F::ZERO;
|
|
@@ -419,10 +421,10 @@ pub(super) const fn parity_u32(x: u32) -> u32 {
|
|
|
419
421
|
|
|
420
422
|
#[cube(launch_unchecked)]
|
|
421
423
|
pub(super) fn exp_value<F: Float + ConstantFloat>(
|
|
422
|
-
state_real: &
|
|
423
|
-
state_imag: &
|
|
424
|
+
state_real: &[F],
|
|
425
|
+
state_imag: &[F],
|
|
424
426
|
offset: usize,
|
|
425
|
-
prob: &mut
|
|
427
|
+
prob: &mut [F],
|
|
426
428
|
target_mask: u32,
|
|
427
429
|
) {
|
|
428
430
|
let state = ABSOLUTE_POS_X + offset as u32;
|
|
@@ -436,8 +438,8 @@ pub(super) fn exp_value<F: Float + ConstantFloat>(
|
|
|
436
438
|
|
|
437
439
|
#[cube(launch_unchecked)]
|
|
438
440
|
pub(super) fn in_place_swap<F: Float>(
|
|
439
|
-
state_real: &mut
|
|
440
|
-
state_imag: &mut
|
|
441
|
+
state_real: &mut [F],
|
|
442
|
+
state_imag: &mut [F],
|
|
441
443
|
offset: u32,
|
|
442
444
|
global_index: u32,
|
|
443
445
|
local_index: u32,
|
|
@@ -467,8 +469,8 @@ pub(super) fn in_place_swap<F: Float>(
|
|
|
467
469
|
|
|
468
470
|
#[cube(launch_unchecked)]
|
|
469
471
|
pub(super) fn init_state<F: Float + ConstantFloat>(
|
|
470
|
-
state_real: &mut
|
|
471
|
-
state_imag: &mut
|
|
472
|
+
state_real: &mut [F],
|
|
473
|
+
state_imag: &mut [F],
|
|
472
474
|
offset: u32,
|
|
473
475
|
) {
|
|
474
476
|
let state = (offset + ABSOLUTE_POS_X) as usize;
|