@@ -30,9 +30,7 @@ struct PauliEigenvalues{N}
30
30
end
31
31
PauliEigenvalues (:: Val{N} , coeff:: Float64 = 1.0 ) where {N} = PauliEigenvalues {N} (coeff)
32
32
Base. length (p:: PauliEigenvalues{N} ) where {N} = 2 ^ N
33
- function Base. iterate (p:: PauliEigenvalues{N} , ix:: Int = 1 ) where {N}
34
- return ix <= length (p) ? (p[ix], ix+ 1 ) : nothing
35
- end
33
+ Base. iterate (p:: PauliEigenvalues{N} , ix:: Int = 1 ) where {N} = ix <= length (p) ? (p[ix], ix+ 1 ) : nothing
36
34
37
35
Base. getindex (p:: PauliEigenvalues{1} , i:: Int ):: Float64 = getindex ((p. coeff, - p. coeff), i)
38
36
function Base. getindex (p:: PauliEigenvalues{N} , i:: Int ):: Float64 where N
71
69
Measure () = Measure (- 1 )
72
70
Parametrizable (m:: Measure ) = NonParametrized ()
73
71
chars (:: Type{Measure} ) = (" M" ,)
74
- chars (m :: Measure ) = ( " M " , )
72
+ chars (:: Measure ) = chars (Measure )
75
73
qubit_count (:: Type{Measure} ) = 1
74
+ qubit_count (:: Measure ) = qubit_count (Measure)
76
75
ir (m:: Measure , target:: QubitSet , :: Val{:JAQCD} ; kwargs... ) = error (" measure instructions are not supported with JAQCD." )
77
76
function ir (m:: Measure , target:: QubitSet , :: Val{:OpenQASM} ; serialization_properties= OpenQASMSerializationProperties ())
78
77
instructions = Vector {String} (undef, length (target))
@@ -83,3 +82,52 @@ function ir(m::Measure, target::QubitSet, ::Val{:OpenQASM}; serialization_proper
83
82
end
84
83
return join (instructions, " \n " )
85
84
end
85
+
86
+ """
87
+ Reset() <: QuantumOperator
88
+
89
+ Represents an active reset operation on targeted qubit.
90
+ """
91
+ struct Reset <: QuantumOperator end
92
+ Parametrizable (m:: Reset ) = NonParametrized ()
93
+ chars (:: Type{Reset} ) = (" Reset" ,)
94
+ chars (:: Reset ) = chars (Reset)
95
+ label (:: Reset ) = " reset"
96
+ qubit_count (:: Type{Reset} ) = 1
97
+ qubit_count (r:: Reset ) = qubit_count (Reset)
98
+
99
+ """
100
+ Barrier() <: QuantumOperator
101
+
102
+ Represents a barrier operation on targeted qubit.
103
+ """
104
+ struct Barrier <: QuantumOperator end
105
+ Parametrizable (b:: Barrier ) = NonParametrized ()
106
+ chars (:: Type{Barrier} ) = (" Barrier" ,)
107
+ chars (r:: Barrier ) = chars (Barrier)
108
+ label (:: Barrier ) = " barrier"
109
+ qubit_count (:: Type{Barrier} ) = 1
110
+ qubit_count (b:: Barrier ) = qubit_count (Barrier)
111
+
112
+ """
113
+ Delay(duration::Period) <: QuantumOperator
114
+
115
+ Represents a delay operation for `duration` on targeted qubit.
116
+ """
117
+ struct Delay <: QuantumOperator
118
+ duration:: Dates.Period
119
+ end
120
+ Parametrizable (m:: Delay ) = NonParametrized ()
121
+ chars (d:: Delay ) = (" Delay($(label (d. duration)) )" ,)
122
+ label (d:: Delay ) = " delay[$(label (d. duration)) ]"
123
+ qubit_count (:: Type{Delay} ) = 1
124
+ qubit_count (d:: Delay ) = qubit_count (Delay)
125
+ Base.:(== )(d1:: Delay , d2:: Delay ) = d1. duration == d2. duration
126
+ label (d:: Microsecond ) = " $(d. value) ms"
127
+ label (d:: Nanosecond ) = " $(d. value) ns"
128
+ label (d:: Second ) = " $(d. value) s"
129
+
130
+ ir (ix:: Union{Reset, Barrier, Delay} , target:: QubitSet , :: Val{:JAQCD} ; kwargs... ) = error (" $(label (ix)) instructions are not supported with JAQCD." )
131
+ function ir (ix:: Union{Reset, Barrier, Delay} , target:: QubitSet , v:: Val{:OpenQASM} ; serialization_properties= OpenQASMSerializationProperties ())
132
+ return join ((" $(label (ix)) $(format_qubits (qubit, serialization_properties)) ;" for qubit in target), " \n " )
133
+ end
0 commit comments