-
Notifications
You must be signed in to change notification settings - Fork 0
/
hacking_for_the_upgrayde.py
61 lines (43 loc) · 1.5 KB
/
hacking_for_the_upgrayde.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import json
import pennylane as qml
import pennylane.numpy as np
def binary_to_grey(num_wires):
"""
A function mapping binary encoded qubits to gray code.
Args:
num_wires (int): The number of qubits.
"""
for i in reversed(range(num_wires - 1)):
qml.CNOT([i, i + 1])
def run(test_case_input: str) -> str:
binary_string = json.loads(test_case_input)
n_wires = int(len(binary_string))
dev = qml.device("default.qubit", wires=n_wires)
@qml.qnode(dev)
def circuit():
qml.BasisEmbedding(binary_string, range(n_wires))
binary_to_grey(n_wires)
return qml.probs()
output = circuit().tolist()
return str(output)
def check(solution_output: str, expected_output: str) -> None:
solution_output = json.loads(solution_output)
expected_output = json.loads(expected_output)
assert np.allclose(solution_output, expected_output, rtol=1e-4)
# These are the public test cases
test_cases = [
('[0,1,0]', '[0, 0, 0, 1, 0, 0, 0, 0]'),
('[0,1,1]', '[0, 0, 1, 0, 0, 0, 0, 0]')
]
# This will run the public test cases locally
for i, (input_, expected_output) in enumerate(test_cases):
print(f"Running test case {i} with input '{input_}'...")
try:
output = run(input_)
except Exception as exc:
print(f"Runtime Error. {exc}")
else:
if message := check(output, expected_output):
print(f"Wrong Answer. Have: '{output}'. Want: '{expected_output}'.")
else:
print("Correct!")