From bc72f239920d127725450a4d0c853d6be26ac417 Mon Sep 17 00:00:00 2001 From: Guilherme Marques Date: Tue, 10 Oct 2023 07:51:09 -0300 Subject: [PATCH 1/2] Added Controlled Hadamard Gate --- .../org/redfx/strange/gate/Chadamard.java | 39 ++++++++++++++ .../redfx/strange/test/TwoQubitGateTests.java | 51 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/redfx/strange/gate/Chadamard.java diff --git a/src/main/java/org/redfx/strange/gate/Chadamard.java b/src/main/java/org/redfx/strange/gate/Chadamard.java new file mode 100644 index 0000000..701c789 --- /dev/null +++ b/src/main/java/org/redfx/strange/gate/Chadamard.java @@ -0,0 +1,39 @@ +package org.redfx.strange.gate; + +import org.redfx.strange.Complex; + +public class Chadamard extends TwoQubitGate { + Complex[][] matrix = new Complex[][]{ + {Complex.ONE,Complex.ZERO,Complex.ZERO,Complex.ZERO}, + {Complex.ZERO,Complex.ONE,Complex.ZERO,Complex.ZERO}, + {Complex.ZERO,Complex.ZERO,Complex.HC,Complex.HC}, + {Complex.ZERO,Complex.ZERO,Complex.HC,Complex.HCN} + }; + + /** + *

Constructor for Chadamard.

+ */ + public Chadamard() { + } + + /** + *

Constructor for Chadamard.

+ * + * @param a a int + * @param b a int + */ + public Chadamard(int a, int b) { + super(a,b); + } + + /** {@inheritDoc} */ + @Override + public Complex[][] getMatrix() { + return matrix; + } + + /** {@inheritDoc} */ + @Override public String getCaption() { + return "Chadamard"; + } +} diff --git a/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java b/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java index 60426a4..6fc8195 100644 --- a/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java +++ b/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java @@ -34,8 +34,6 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; import org.redfx.strange.Program; import org.redfx.strange.Qubit; import org.redfx.strange.Result; @@ -46,6 +44,10 @@ import org.redfx.strange.gate.Measurement; import org.redfx.strange.gate.Swap; import org.redfx.strange.gate.X; +import org.redfx.strange.gate.Hadamard; +import org.redfx.strange.gate.Chadamard; + +import static org.junit.jupiter.api.Assertions.*; /** * @@ -309,4 +311,49 @@ public void IMcnot10() { IllegalArgumentException.class, () -> p.addStep(new Step(new Cnot(1,0)))); } + + @Test + public void chadamardGate() { + int[] results = new int[2]; + for (int i = 0; i < 100; i++) { + Program p = new Program(2, + new Step(new Hadamard(0)), + new Step(new Chadamard(0,1))); + Result res = runProgram(p); + Qubit[] qubits = res.getQubits(); + results[qubits[1].measure()]++; + } + assertTrue(results[0] > 10); + assertTrue(results[1] > 10); + } + + @Test + public void chadamardXGate() { + int[] results = new int[2]; + for (int i = 0; i < 100; i++) { + Program p = new Program(2, + new Step(new X(0)), + new Step(new Chadamard(0,1))); + Result res = runProgram(p); + Qubit[] qubits = res.getQubits(); + results[qubits[1].measure()]++; + } + assertTrue(results[0] > 10); + assertTrue(results[1] > 10); + } + + @Test + public void chadamardNotApplied() { + int[] results = new int[2]; + for (int i = 0; i < 100; i++) { + Program p = new Program(2, + new Step(new Chadamard(0,1))); + Result res = runProgram(p); + Qubit[] qubits = res.getQubits(); + results[qubits[1].measure()]++; + } + assertEquals(100, results[0]); + assertEquals(0, results[1]); + } + } From cd97335321ef04c6e5f1ca545d71a844c780144b Mon Sep 17 00:00:00 2001 From: Guilherme Marques Date: Tue, 10 Oct 2023 07:52:57 -0300 Subject: [PATCH 2/2] Added Controlled Hadamard Gate --- src/test/java/org/redfx/strange/test/TwoQubitGateTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java b/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java index 6fc8195..c2e2a5d 100644 --- a/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java +++ b/src/test/java/org/redfx/strange/test/TwoQubitGateTests.java @@ -34,6 +34,8 @@ import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.redfx.strange.Program; import org.redfx.strange.Qubit; import org.redfx.strange.Result; @@ -47,8 +49,6 @@ import org.redfx.strange.gate.Hadamard; import org.redfx.strange.gate.Chadamard; -import static org.junit.jupiter.api.Assertions.*; - /** * * @author johan