This repository was archived by the owner on Jan 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathCircuits.qs
More file actions
97 lines (78 loc) · 2.3 KB
/
Circuits.qs
File metadata and controls
97 lines (78 loc) · 2.3 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
namespace Tests.ExecutionPathTracer {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Simulation.QuantumProcessor.Extensions;
// Custom operation
operation Foo(theta : Double, (qubit : Qubit, bar : String)) : Unit
is Adj + Ctl { }
operation FooCirc() : Unit {
using (q = Qubit()) {
Foo(2.1, (q, "bar"));
}
}
operation ControlledFooCirc() : Unit {
using (qs = Qubit[2]) {
Controlled Foo([qs[0]], (2.1, (qs[1], "bar")));
}
}
operation UnusedQubitCirc() : Unit {
using (qs = Qubit[3]) {
CNOT(qs[2], qs[0]);
Reset(qs[0]);
Reset(qs[2]);
}
}
operation EmptyCirc() : Unit {
using (qs = Qubit[3]) {
}
}
operation NoQubitCirc(n : Int) : Unit { }
operation NoQubitArgsCirc() : Unit {
NoQubitCirc(2);
}
operation WithQArrayArgs(bits: Bool[]): Unit { }
operation WithQArrayArgsCirc(): Unit {
WithQArrayArgs([false, true]);
}
operation OperationCirc(op : (Qubit => Unit), n : Int) : Unit { }
operation OperationArgsCirc() : Unit {
OperationCirc(H, 5);
}
operation NestedCirc() : Unit {
using (q = Qubit()) {
H(q);
HCirc();
Reset(q);
}
}
operation PartialOpCirc() : Unit {
using (qs = Qubit[3]) {
(Controlled H(qs[0..1], _))(qs[2]);
((Ry(_, _))(2.5, _))(qs[0]);
ResetAll(qs);
}
}
operation Bar((alpha : Double, beta : Double), (q : Qubit, name : String)) : Unit
is Adj + Ctl { }
operation BigCirc() : Unit {
using (qs = Qubit[3]) {
H(qs[0]);
Ry(2.5, qs[1]);
Bar((1.0, 2.1), (qs[0], "foo"));
X(qs[0]);
CCNOT(qs[0], qs[1], qs[2]);
Controlled CNOT([qs[0]], (qs[1], qs[2]));
Controlled Adjoint Bar([qs[2]], ((1.0, 2.1), (qs[0], "foo")));
let res = M(qs[0]);
ResetAll(qs);
}
}
operation IfCirc() : Unit {
using (q = Qubit()) {
let res = M(q);
ApplyIfElseR(res, (X, q), (Z, q));
Reset(q);
}
}
}