Skip to content

Commit b3c3866

Browse files
committed
Refactor testset wrapping
1 parent d94fecc commit b3c3866

File tree

5 files changed

+128
-115
lines changed

5 files changed

+128
-115
lines changed

test/python/runtests.jl

+25-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
11
using Test
2+
using Tenet
23
using SafeTestsets
34

4-
@safetestset "Python" verbose = true begin
5-
run(`cp $(joinpath(@__DIR__, CondaPkg.toml)) $(joinpath(@__DIR__, "..", "..", CondaPkg.toml))`)
6-
using Test
7-
using Tenet
8-
using CondaPkg
9-
CondaPkg.update()
10-
using PythonCall
5+
# add python test dependencies
6+
run(`cp $(joinpath(@__DIR__, "CondaPkg.toml")) $(joinpath(@__DIR__, "..", "..", "CondaPkg.toml"))`)
7+
using CondaPkg
8+
CondaPkg.update()
9+
using PythonCall
1110

12-
include("test_cirq.jl")
13-
include("test_quimb.jl")
14-
include("test_qiskit.jl")
15-
include("test_qibo.jl")
16-
run(`rm ../CondaPkg.toml`)
11+
@testset "Python" verbose = true begin
12+
@safetestset "Cirq" begin
13+
include("test_cirq.jl")
14+
end
15+
16+
@safetestset "Quimb" begin
17+
include("test_quimb.jl")
18+
end
19+
20+
@safetestset "Qiskit" begin
21+
include("test_qiskit.jl")
22+
end
23+
24+
@safetestset "Qibo" begin
25+
include("test_qibo.jl")
26+
end
1727
end
28+
29+
# cleaning
30+
run(`rm ../CondaPkg.toml`)

test/python/test_cirq.jl

+45-48
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,50 @@
1-
@testset "cirq" begin
2-
cirq = pyimport("cirq")
1+
using Test
2+
using Tenet
3+
using PythonCall
4+
cirq = pyimport("cirq")
35

4-
@testset "LineQubit" begin
5-
circuit = cirq.Circuit()
6-
qubits = cirq.LineQubit.range(3)
7-
circuit.append(cirq.H(qubits[0]))
8-
circuit.append(cirq.H(qubits[1]))
9-
circuit.append(cirq.CNOT(qubits[1], qubits[2]))
10-
circuit.append(cirq.CNOT(qubits[0], qubits[2]))
11-
circuit.append(cirq.H(qubits[0]))
12-
circuit.append(cirq.H(qubits[1]))
13-
circuit.append(cirq.H(qubits[2]))
6+
@testset "LineQubit" begin
7+
circuit = cirq.Circuit()
8+
qubits = cirq.LineQubit.range(3)
9+
circuit.append(cirq.H(qubits[0]))
10+
circuit.append(cirq.H(qubits[1]))
11+
circuit.append(cirq.CNOT(qubits[1], qubits[2]))
12+
circuit.append(cirq.CNOT(qubits[0], qubits[2]))
13+
circuit.append(cirq.H(qubits[0]))
14+
circuit.append(cirq.H(qubits[1]))
15+
circuit.append(cirq.H(qubits[2]))
1416

15-
circ = convert(Circuit, circuit)
16-
@test issetequal(sites(circ; set=:inputs), Site.([0, 1, 2]; dual=true))
17-
@test issetequal(sites(circ; set=:outputs), Site.([0, 1, 2]))
18-
@test Tenet.ntensors(circ) == 7
19-
@test issetequal(
20-
moments(circ),
21-
[
22-
Tenet.Moment.(Ref(Lane(0)), 1:4)...,
23-
Tenet.Moment.(Ref(Lane(1)), 1:4)...,
24-
Tenet.Moment.(Ref(Lane(2)), 1:4)...,
25-
],
26-
)
27-
end
17+
circ = convert(Circuit, circuit)
18+
@test issetequal(sites(circ; set=:inputs), Site.([0, 1, 2]; dual=true))
19+
@test issetequal(sites(circ; set=:outputs), Site.([0, 1, 2]))
20+
@test Tenet.ntensors(circ) == 7
21+
@test issetequal(
22+
moments(circ),
23+
[Tenet.Moment.(Ref(Lane(0)), 1:4)..., Tenet.Moment.(Ref(Lane(1)), 1:4)..., Tenet.Moment.(Ref(Lane(2)), 1:4)...],
24+
)
25+
end
2826

29-
@testset "GridQubit" begin
30-
circuit = cirq.Circuit()
31-
qubits = cirq.GridQubit.rect(3, 1)
32-
circuit.append(cirq.H(qubits[0]))
33-
circuit.append(cirq.H(qubits[1]))
34-
circuit.append(cirq.CNOT(qubits[1], qubits[2]))
35-
circuit.append(cirq.CNOT(qubits[0], qubits[2]))
36-
circuit.append(cirq.H(qubits[0]))
37-
circuit.append(cirq.H(qubits[1]))
38-
circuit.append(cirq.H(qubits[2]))
27+
@testset "GridQubit" begin
28+
circuit = cirq.Circuit()
29+
qubits = cirq.GridQubit.rect(3, 1)
30+
circuit.append(cirq.H(qubits[0]))
31+
circuit.append(cirq.H(qubits[1]))
32+
circuit.append(cirq.CNOT(qubits[1], qubits[2]))
33+
circuit.append(cirq.CNOT(qubits[0], qubits[2]))
34+
circuit.append(cirq.H(qubits[0]))
35+
circuit.append(cirq.H(qubits[1]))
36+
circuit.append(cirq.H(qubits[2]))
3937

40-
circ = convert(Circuit, circuit)
41-
@test issetequal(sites(circ; set=:inputs), Site.([(0, 0), (1, 0), (2, 0)]; dual=true))
42-
@test issetequal(sites(circ; set=:outputs), Site.([(0, 0), (1, 0), (2, 0)]))
43-
@test Tenet.ntensors(circ) == 7
44-
@test issetequal(
45-
moments(circ),
46-
[
47-
Tenet.Moment.(Ref(Lane(0, 0)), 1:4)...,
48-
Tenet.Moment.(Ref(Lane(1, 0)), 1:4)...,
49-
Tenet.Moment.(Ref(Lane(2, 0)), 1:4)...,
50-
],
51-
)
52-
end
38+
circ = convert(Circuit, circuit)
39+
@test issetequal(sites(circ; set=:inputs), Site.([(0, 0), (1, 0), (2, 0)]; dual=true))
40+
@test issetequal(sites(circ; set=:outputs), Site.([(0, 0), (1, 0), (2, 0)]))
41+
@test Tenet.ntensors(circ) == 7
42+
@test issetequal(
43+
moments(circ),
44+
[
45+
Tenet.Moment.(Ref(Lane(0, 0)), 1:4)...,
46+
Tenet.Moment.(Ref(Lane(1, 0)), 1:4)...,
47+
Tenet.Moment.(Ref(Lane(2, 0)), 1:4)...,
48+
],
49+
)
5350
end

test/python/test_qibo.jl

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
@testset "qibo" begin
2-
qibo = pyimport("qibo")
1+
using Test
2+
using Tenet
3+
using PythonCall
4+
qibo = pyimport("qibo")
35

4-
circuit = qibo.Circuit(3)
5-
circuit.add(qibo.gates.H(0))
6-
circuit.add(qibo.gates.H(1))
7-
circuit.add(qibo.gates.CNOT(1, 2))
8-
circuit.add(qibo.gates.CNOT(0, 2))
9-
circuit.add(qibo.gates.H(0))
10-
circuit.add(qibo.gates.H(1))
11-
circuit.add(qibo.gates.H(2))
6+
circuit = qibo.Circuit(3)
7+
circuit.add(qibo.gates.H(0))
8+
circuit.add(qibo.gates.H(1))
9+
circuit.add(qibo.gates.CNOT(1, 2))
10+
circuit.add(qibo.gates.CNOT(0, 2))
11+
circuit.add(qibo.gates.H(0))
12+
circuit.add(qibo.gates.H(1))
13+
circuit.add(qibo.gates.H(2))
1214

13-
circ = convert(Circuit, circuit)
14-
@test circ isa Circuit
15-
@test issetequal(sites(circ; set=:inputs), Site.([0, 1, 2]; dual=true))
16-
@test issetequal(sites(circ; set=:outputs), Site.([0, 1, 2]))
17-
@test Tenet.ntensors(circ) == 7
18-
@test issetequal(
19-
moments(circ),
20-
[Tenet.Moment.(Ref(Lane(0)), 1:4)..., Tenet.Moment.(Ref(Lane(1)), 1:4)..., Tenet.Moment.(Ref(Lane(2)), 1:4)...],
21-
)
22-
end
15+
circ = convert(Circuit, circuit)
16+
@test circ isa Circuit
17+
@test issetequal(sites(circ; set=:inputs), Site.([0, 1, 2]; dual=true))
18+
@test issetequal(sites(circ; set=:outputs), Site.([0, 1, 2]))
19+
@test Tenet.ntensors(circ) == 7
20+
@test issetequal(
21+
moments(circ),
22+
[Tenet.Moment.(Ref(Lane(0)), 1:4)..., Tenet.Moment.(Ref(Lane(1)), 1:4)..., Tenet.Moment.(Ref(Lane(2)), 1:4)...],
23+
)

test/python/test_qiskit.jl

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
@testset "qiskit" begin
2-
qiskit = pyimport("qiskit")
1+
using Test
2+
using Tenet
3+
using PythonCall
4+
qiskit = pyimport("qiskit")
35

4-
circuit = qiskit.QuantumCircuit(3)
5-
circuit.h(0)
6-
circuit.h(1)
7-
circuit.cx(1, 2)
8-
circuit.cx(0, 2)
9-
circuit.h(0)
10-
circuit.h(1)
11-
circuit.h(2)
6+
circuit = qiskit.QuantumCircuit(3)
7+
circuit.h(0)
8+
circuit.h(1)
9+
circuit.cx(1, 2)
10+
circuit.cx(0, 2)
11+
circuit.h(0)
12+
circuit.h(1)
13+
circuit.h(2)
1214

13-
tn = convert(Circuit, circuit)
14-
@test tn isa Circuit
15-
@test issetequal(sites(tn; set=:inputs), Site.([1, 2, 3]; dual=true))
16-
@test issetequal(sites(tn; set=:outputs), Site.([1, 2, 3]))
17-
@test Tenet.ntensors(tn) == 7
18-
@test issetequal(
19-
moments(tn),
20-
[Tenet.Moment.(Ref(Lane(1)), 1:4)..., Tenet.Moment.(Ref(Lane(2)), 1:4)..., Tenet.Moment.(Ref(Lane(3)), 1:4)...],
21-
)
22-
end
15+
tn = convert(Circuit, circuit)
16+
@test tn isa Circuit
17+
@test issetequal(sites(tn; set=:inputs), Site.([1, 2, 3]; dual=true))
18+
@test issetequal(sites(tn; set=:outputs), Site.([1, 2, 3]))
19+
@test Tenet.ntensors(tn) == 7
20+
@test issetequal(
21+
moments(tn),
22+
[Tenet.Moment.(Ref(Lane(1)), 1:4)..., Tenet.Moment.(Ref(Lane(2)), 1:4)..., Tenet.Moment.(Ref(Lane(3)), 1:4)...],
23+
)

test/python/test_quimb.jl

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
@testset "quimb" begin
2-
qtn = pyimport("quimb.tensor")
1+
using Test
2+
using Tenet
3+
using PythonCall
4+
qtn = pyimport("quimb.tensor")
35

4-
# NOTE quimb.circuit.Circuit splits gates by default
5-
qc = qtn.Circuit(3; gate_opts=Dict(["contract" => false]))
6-
gates = [("H", 0), ("H", 1), ("CNOT", 1, 2), ("CNOT", 0, 2), ("H", 0), ("H", 1), ("H", 2)]
7-
qc.apply_gates(gates)
6+
# NOTE quimb.circuit.Circuit splits gates by default
7+
qc = qtn.Circuit(3; gate_opts=Dict(["contract" => false]))
8+
gates = [("H", 0), ("H", 1), ("CNOT", 1, 2), ("CNOT", 0, 2), ("H", 0), ("H", 1), ("H", 2)]
9+
qc.apply_gates(gates)
810

9-
tn = convert(Quantum, qc)
10-
@test issetequal(sites(tn; set=:inputs), adjoint.(Site.([0, 1, 2])))
11-
@test issetequal(sites(tn; set=:outputs), Site.([0, 1, 2]))
12-
@test Tenet.ntensors(tn) == 7
11+
tn = convert(Quantum, qc)
12+
@test issetequal(sites(tn; set=:inputs), adjoint.(Site.([0, 1, 2])))
13+
@test issetequal(sites(tn; set=:outputs), Site.([0, 1, 2]))
14+
@test Tenet.ntensors(tn) == 7
1315

14-
tn = convert(Quantum, qc.psi)
15-
@test isempty(sites(tn; set=:inputs))
16-
@test issetequal(sites(tn; set=:outputs), Site.([0, 1, 2]))
17-
@test Tenet.ntensors(tn) == 10
18-
end
16+
tn = convert(Quantum, qc.psi)
17+
@test isempty(sites(tn; set=:inputs))
18+
@test issetequal(sites(tn; set=:outputs), Site.([0, 1, 2]))
19+
@test Tenet.ntensors(tn) == 10

0 commit comments

Comments
 (0)