コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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());
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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());
        }
コード例 #12
0
        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());
        }
コード例 #13
0
        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());
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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());
        }
コード例 #17
0
        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());
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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());
        }
コード例 #20
0
        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);
        }