Skip to content

Commit 88a6f99

Browse files
committed
permit ClassicalControl with no quantum gate
1 parent 64b437a commit 88a6f99

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Quantikz"
22
uuid = "b0d11df0-eea3-4d79-b4a5-421488cbf74b"
33
authors = ["Stefan Krastanov <[email protected]>"]
4-
version = "1.3"
4+
version = "1.3.1"
55

66
[deps]
77
EndpointRanges = "340492b5-2a47-5f55-813d-aca7ddf97656"

src/Quantikz.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,17 +304,22 @@ ClassicalDecision(t::Integer, c::Integer) = ClassicalDecision("\\;\\;", [t], [c]
304304
ClassicalDecision(t::ArrayOrRange, c::Integer) = ClassicalDecision("\\;\\;", t, [c])
305305
ClassicalDecision(t::Integer, c::ArrayOrRange) = ClassicalDecision("\\;\\;", [t], c)
306306
ClassicalDecision(t::ArrayOrRange, c::ArrayOrRange) = ClassicalDecision("\\;\\;", t, c)
307+
ClassicalDecision(c::ArrayOrRange) = ClassicalDecision("", [], c)
307308

308309
affectedqubits(g::ClassicalDecision) = g.targets
309310
affectedbits(g::ClassicalDecision) = g.bits
310311
function update_table!(qtable,step,g::ClassicalDecision)
311312
qvtable = qubitsview(qtable)
312313
bvtable = bitsview(qtable)
313-
m, M = explicit_extrema(qvtable, g.targets)
314-
draw_rectangle!(qvtable,step,g.targets,g.str)
315314
bits = explicit_targets(bvtable, g.bits)
316315
startpoint = minimum(bits)
317-
bvtable[startpoint,step] = "\\cwbend{$(-(qtable.qubits-M)-qtable.ancillaries-startpoint)}"
316+
if !isa(g.targets,AbstractVector) || length(g.targets)>0
317+
m, M = explicit_extrema(qvtable, g.targets)
318+
draw_rectangle!(qvtable,step,g.targets,g.str)
319+
bvtable[startpoint,step] = "\\cwbend{$(-(qtable.qubits-M)-qtable.ancillaries-startpoint)}"
320+
else
321+
bvtable[startpoint,step] = "\\cwbend{0}"
322+
end
318323
for b in sort(bits)[2:end]
319324
bvtable[b,step] = "\\cwbend{$(startpoint-b)}"
320325
startpoint = b
@@ -410,7 +415,11 @@ function circuit2table_compressed(circuit, qubits)
410415
for op in circuit
411416
qubits = extrema2range(explicit_extrema(qvtable, affectedqubits(op)))
412417
if circuitwidthbits(op)!=0 || neededancillaries(op)!=0
413-
qubits = minimum(qubits):iend
418+
qubits = if length(qubits)==0
419+
ibegin:iend # TODO this branch is too pessimistic
420+
else
421+
minimum(qubits):iend
422+
end
414423
end
415424
bits = extrema2range(explicit_extrema(bvtable, affectedbits(op)))
416425
ancillaries = neededancillaries(op)

test/runtests.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,19 @@ end
108108
@testset "EndpointRanges in ClassicalDecision" begin
109109
circuit = [U(5),ClassicalDecision(ibegin:iend,2),ClassicalDecision(1,ibegin:iend)]
110110
@test circuit2string(circuit) == circuit2string(circuit,mode=:expanded) == "\\begin{quantikz}[transparent, row sep={0.8cm,between origins}]\n\\qw & \\qw & \\gate[5,disable auto height]{\\;\\;} & \\gate[1]{\\;\\;} & \\qw\\\\\n\\qw & \\qw & \\qw & \\qw & \\qw\\\\\n\\qw & \\qw & \\qw & \\qw & \\qw\\\\\n\\qw & \\qw & \\qw & \\qw & \\qw\\\\\n\\qw & \\gate{\\;\\;} & \\qw & \\qw & \\qw\\\\\n\\cw & \\cw & \\cw & \\cwbend{-5} & \\cw\\\\\n\\cw & \\cw & \\cwbend{-2} & \\cwbend{-1} & \\cw\n\\end{quantikz}"
111+
circuit2string(circuit,mode=:compressed)
111112
circuit = [ClassicalDecision(ibegin:iend,ibegin:iend)]
112113
@test circuit2string(circuit) == circuit2string(circuit,mode=:expanded) == "\\begin{quantikz}[transparent, row sep={0.8cm,between origins}]\n\\qw & \\gate[1]{\\;\\;} & \\qw\\\\\n\\cw & \\cwbend{-1} & \\cw\n\\end{quantikz}"
114+
circuit2string(circuit,mode=:compressed)
113115
end
114116

117+
@testset "no quantum component in ClassicalDecision" begin
118+
circuit = [U(5),ClassicalDecision([2]),ClassicalDecision(ibegin:iend)]
119+
@test circuit2string(circuit) == circuit2string(circuit,mode=:expanded)
120+
circuit2string(circuit,mode=:compressed)
121+
end
122+
123+
115124
@testset "Consecutive gates should not confuse the `deleted` count in `draw_rectangle`" begin
116125
circuit = [MultiControlU("XYZ", [1], [2], [3,4,5]), MultiControlU("U_a", [1], [2], [3,5])]
117126
@test circuit2string(circuit) == circuit2string(circuit,mode=:expanded) == "\\begin{quantikz}[transparent, row sep={0.8cm,between origins}]\n\\qw & \\ctrl{0} & \\ctrl{0} & \\qw\\\\\n\\qw & \\octrl{-1} & \\octrl{-1} & \\qw\\\\\n\\qw & \\gate[3,disable auto height]{XYZ}\\vqw{-1} & \\gate[3,label style={yshift=0.2cm},disable auto height]{U_a}\\vqw{-1} & \\qw\\\\\n\\qw & \\qw & \\linethrough & \\qw\\\\\n\\qw & \\qw & \\qw & \\qw\n\\end{quantikz}"

0 commit comments

Comments
 (0)