public void PartialOpTest() { var path = GetExecutionPath("PartialOpCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1, 1), new QubitDeclaration(2, 1), }; var operations = new Operation[] { new Operation() { Gate = "H", IsControlled = true, Controls = new List <Register>() { new QubitRegister(0), new QubitRegister(1) }, Targets = new List <Register>() { new QubitRegister(2) }, }, new Operation() { Gate = "Ry", DisplayArgs = "(2.5)", Targets = new List <Register>() { new QubitRegister(0) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "R", DisplayArgs = "(PauliY, 2.5)", Targets = new List <Register>() { new QubitRegister(0) }, } } ) }, ResetAll(new int[] { 0, 1, 2 }), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void EmptyTest() { var path = GetExecutionPath("EmptyCirc"); var qubits = new QubitDeclaration[] { }; var operations = new Operation[] { new Operation() { Gate = "EmptyCirc", }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void ControlledXTest() { var path = GetExecutionPath("ControlledXCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), new QubitDeclaration(1), }; var operations = new Operation[] { new Operation() { Gate = "X", IsControlled = true, Controls = new List <Register>() { new QubitRegister(0) }, Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(1) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); // JSON should be the same as CNOT's var path2 = GetExecutionPath("CnotCirc"); Assert.AreEqual(path.ToJson(), path2.ToJson()); }
public void WithQArrayArgsTest() { var path = GetExecutionPath("WithQArrayArgsCirc"); var qubits = new QubitDeclaration[] { }; var operations = new Operation[] { new Operation() { Gate = "WithQArrayArgs", DisplayArgs = "([False, True])", }, }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void NoQubitArgsTest() { var path = GetExecutionPath("NoQubitArgsCirc"); var qubits = new QubitDeclaration[] { }; var operations = new Operation[] { new Operation() { Gate = "NoQubitCirc", DisplayArgs = "(2)", }, }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void OperationArgsTest() { var path = GetExecutionPath("OperationArgsCirc"); var qubits = new QubitDeclaration[] { }; var operations = new Operation[] { new Operation() { Gate = "OperationCirc", DisplayArgs = "(H, 5)", }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void CnotTest() { var path = GetExecutionPath("CnotCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1, 1), }; var operations = new Operation[] { ControlledX(new int[] { 0 }, 1), ResetAll(new int[] { 0, 1 }), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void ControlledAdjointSTest() { var path = GetExecutionPath("ControlledAdjointSCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), new QubitDeclaration(1), }; var operations = new Operation[] { new Operation() { Gate = "S", IsControlled = true, IsAdjoint = true, Controls = new List <Register>() { new QubitRegister(0) }, Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(1) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void UnusedQubitTest() { var path = GetExecutionPath("UnusedQubitCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(2, 1), }; var operations = new Operation[] { ControlledX(new int[] { 2 }, 0), Reset(0), Reset(2), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void NestedTest() { var path = GetExecutionPath("NestedCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1, 1), }; var operations = new Operation[] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "HCirc", Targets = new List <Register>() { new QubitRegister(1) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(1) }, }, Reset(1), } ) }, Reset(0), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void ForEachMeasureCirc() { var path = GetExecutionPath("ForEachMeasureCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1, 1), }; var operations = new Operation[] { new Operation() { Gate = "MResetZ", IsMeasurement = true, Controls = new List <Register>() { new QubitRegister(0) }, Targets = new List <Register>() { new ClassicalRegister(0, 0) }, }, new Operation() { Gate = "MResetZ", IsMeasurement = true, Controls = new List <Register>() { new QubitRegister(1) }, Targets = new List <Register>() { new ClassicalRegister(1, 0) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void FooTest() { var path = GetExecutionPath("FooCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), }; var operations = new Operation[] { new Operation() { Gate = "Foo", DisplayArgs = "(2.1, (\"bar\"))", Targets = new List <Register>() { new QubitRegister(0) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void SwapTest() { var path = GetExecutionPath("SwapCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), new QubitDeclaration(1), }; var operations = new Operation[] { new Operation() { Gate = "SWAP", Targets = new List <Register>() { new QubitRegister(0), new QubitRegister(1) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void HTest() { var path = GetExecutionPath("HCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), }; var operations = new Operation[] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(0) }, }, Reset(0), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void RxTest() { var path = GetExecutionPath("RxCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), }; var operations = new Operation[] { new Operation() { Gate = "Rx", DisplayArgs = "(2)", Targets = new List <Register>() { new QubitRegister(0) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "R", DisplayArgs = "(PauliX, 2)", Targets = new List <Register>() { new QubitRegister(0) }, } } ) }, Reset(0), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void ApplyToEachTest() { var path = GetExecutionPath("ApplyToEachCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), new QubitDeclaration(1), new QubitDeclaration(2), }; var operations = new Operation[] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(2) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(2) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void BigTest() { var path = GetExecutionPath("BigCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1), new QubitDeclaration(2), }; var operations = new Operation[] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Ry", DisplayArgs = "(2.5)", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Bar", DisplayArgs = "((1, 2.1), (\"foo\"))", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "X", IsControlled = true, Controls = new List <Register>() { new QubitRegister(0), new QubitRegister(1) }, Targets = new List <Register>() { new QubitRegister(2) }, }, new Operation() { Gate = "X", IsControlled = true, Controls = new List <Register>() { new QubitRegister(0), new QubitRegister(1) }, Targets = new List <Register>() { new QubitRegister(2) }, }, new Operation() { Gate = "Bar", DisplayArgs = "((1, 2.1), (\"foo\"))", IsControlled = true, IsAdjoint = true, Controls = new List <Register>() { new QubitRegister(2) }, Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "M", IsMeasurement = true, Controls = new List <Register>() { new QubitRegister(0) }, Targets = new List <Register>() { new ClassicalRegister(0, 0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(2) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void BigTest() { var path = GetExecutionPath("BigCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 2), new QubitDeclaration(1, 1), new QubitDeclaration(2, 1), }; var operations = new Operation[] { new Operation() { Gate = "H", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Ry", DisplayArgs = "(2.5)", Targets = new List <Register>() { new QubitRegister(1) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "R", DisplayArgs = "(PauliY, 2.5)", Targets = new List <Register>() { new QubitRegister(1) }, }, } ) }, new Operation() { Gate = "Bar", DisplayArgs = "((1, 2.1), (\"foo\"))", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(0) }, }, ControlledX(new int[] { 0, 1 }, 2), ControlledX(new int[] { 0, 1 }, 2), new Operation() { Gate = "Bar", DisplayArgs = "((1, 2.1), (\"foo\"))", IsControlled = true, IsAdjoint = true, Controls = new List <Register>() { new QubitRegister(2) }, Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "M", IsMeasurement = true, Controls = new List <Register>() { new QubitRegister(0) }, Targets = new List <Register>() { new ClassicalRegister(0, 0) }, }, ResetAll(new int[] { 0, 1, 2 }), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }
public void PartialOpTest() { var path = GetExecutionPath("PartialOpCirc"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0), new QubitDeclaration(1), new QubitDeclaration(2), }; var operations = new Operation[] { new Operation() { Gate = "H", IsControlled = true, Controls = new List <Register>() { new QubitRegister(0), new QubitRegister(1) }, Targets = new List <Register>() { new QubitRegister(2) }, }, new Operation() { Gate = "Ry", DisplayArgs = "(2.5)", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "Reset", Targets = new List <Register>() { new QubitRegister(2) }, }, }; var expected = new ExecutionPath(qubits, operations); Assert.AreEqual(expected.ToJson(), path.ToJson()); }
public void ApplyToEachDepth2Test() { // Test depth 1 var path = GetExecutionPath("ApplyToEachDepth2Circ"); var qubits = new QubitDeclaration[] { new QubitDeclaration(0, 1), new QubitDeclaration(1, 1), }; var operations = new Operation[] { new Operation() { Gate = "ApplyToEach", DisplayArgs = "(ApplyDoubleX)", Targets = new List <Register>() { new QubitRegister(0), new QubitRegister(1), }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "ApplyDoubleX", Targets = new List <Register>() { new QubitRegister(0) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(0) }, }, new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(0) }, }, } ) }, new Operation() { Gate = "ApplyDoubleX", Targets = new List <Register>() { new QubitRegister(1) }, Children = ImmutableList <Operation> .Empty.AddRange( new [] { new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(1) }, }, new Operation() { Gate = "X", Targets = new List <Register>() { new QubitRegister(1) }, }, } ) }, }) }, ResetAll(new int[] { 0, 1 }), }; var expected = new ExecutionPath(qubits, operations); AssertExecutionPathsEqual(expected, path); }