/// <summary>
 /// Execute this naive transformation algorithm.
 /// </summary>
 protected override void Execute()
 {
     // TODO naive transformation
     foreach (Gate g in LogicalCircuit.Gates)
     {
         if (!g.CanBeExecutedOn(Architecture, Mapping))
         {
             List <int> path = Architecture.GetShortestPath(g.GetQubits()[0], g.GetQubits()[1]); // Is always a cnot gate normally
             for (int i = path.Count - 1; i >= 1; i--)
             {
                 AddSwapToCircuit(Mapping.Map[path[i]], Mapping.Map[path[i - 1]]);
             }
         }
         PhysicalCircuit.AddGate(g.Map(Mapping));
     }
 }
Пример #2
0
 /// <summary>
 /// See <see cref="Architecture.AddSwapGates(PhysicalCircuit, Swap)"/>.
 /// </summary>
 public override void AddSwapGates(PhysicalCircuit circuit, Swap swap)
 {
     circuit.AddGate(new CNOT(swap.Qubit1, swap.Qubit2));
     circuit.AddGate(new CNOT(swap.Qubit2, swap.Qubit1));
     circuit.AddGate(new CNOT(swap.Qubit1, swap.Qubit2));
 }
 /// <summary>
 /// See <see cref="Architecture.AddSwapGates(PhysicalCircuit, Swap)"/>.
 /// </summary>
 public override void AddSwapGates(PhysicalCircuit circuit, Swap swap)
 {
     if (HasConnection(swap.Qubit1, swap.Qubit2))
     {
         circuit.AddGate(new CNOT(swap.Qubit1, swap.Qubit2));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit2));
         circuit.AddGate(new CNOT(swap.Qubit1, swap.Qubit2));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit2));
         circuit.AddGate(new CNOT(swap.Qubit1, swap.Qubit2));
     }
     else
     {
         circuit.AddGate(new CNOT(swap.Qubit2, swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit2));
         circuit.AddGate(new CNOT(swap.Qubit2, swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit1));
         circuit.AddGate(U3.GetHadamardGate(swap.Qubit2));
         circuit.AddGate(new CNOT(swap.Qubit2, swap.Qubit1));
     }
 }