This is a pure refactoring
Joseph Weston authored on 15/11/2019 18:26:27... | ... |
@@ -7,22 +7,32 @@ import pytest |
7 | 7 |
import qsim.gate |
8 | 8 |
|
9 | 9 |
|
10 |
-def unitary(n): |
|
11 |
- valid_complex = st.complex_numbers(allow_infinity=False, allow_nan=False) |
|
12 |
- return ( |
|
13 |
- hnp.arrays(complex, (n, n), valid_complex) |
|
14 |
- .map(lambda a: np.linalg.qr(a)[0]) |
|
15 |
- .filter(lambda u: np.all(np.isfinite(u))) |
|
16 |
- ) |
|
10 |
+# -- Strategies for generating values -- |
|
17 | 11 |
|
18 | 12 |
|
19 | 13 |
n_qubits = st.shared(st.integers(min_value=1, max_value=6)) |
14 |
+ |
|
15 |
+ |
|
16 |
+valid_complex = st.complex_numbers(allow_infinity=False, allow_nan=False) |
|
20 | 17 |
phases = st.floats( |
21 | 18 |
min_value=0, max_value=2 * np.pi, allow_nan=False, allow_infinity=False |
22 | 19 |
) |
23 |
-single_qubit_gates = unitary(2) |
|
24 |
-two_qubit_gates = unitary(4) |
|
25 |
-n_qubit_gates = n_qubits.map(lambda n: 2 ** n).flatmap(unitary) |
|
20 |
+ |
|
21 |
+ |
|
22 |
+def unitary(n_qubits): |
|
23 |
+ size = 1 << n_qubits |
|
24 |
+ return ( |
|
25 |
+ hnp.arrays(complex, (size, size), valid_complex) |
|
26 |
+ .map(lambda a: np.linalg.qr(a)[0]) |
|
27 |
+ .filter(lambda u: np.all(np.isfinite(u))) |
|
28 |
+ ) |
|
29 |
+ |
|
30 |
+ |
|
31 |
+single_qubit_gates = unitary(1) |
|
32 |
+two_qubit_gates = unitary(2) |
|
33 |
+n_qubit_gates = n_qubits.flatmap(unitary) |
|
34 |
+ |
|
35 |
+# -- Tests -- |
|
26 | 36 |
|
27 | 37 |
|
28 | 38 |
@given(n_qubits, n_qubit_gates) |