2 Copyright 2020 Peter Rakyta, Ph.D. 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 8 http://www.apache.org/licenses/LICENSE-2.0 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see http://www.gnu.org/licenses/. 23 from qiskit
import QuantumCircuit
24 from squander
import utils
25 from squander
import Qiskit_IO
28 from mpi4py
import MPI
30 except ModuleNotFoundError:
35 """This is a test class of the python iterface to the decompsition classes of the QGD package""" 40 Add layers to disentangle the 3rd qubit from the others 41 linear chain with IBM native operations 45 from squander
import Circuit
49 Circuit_ret = Circuit( qbit_num )
52 for idx
in range(0,layer_num,2):
55 for qbit_idx
in range(qbit_num-1):
58 Circuit_ret.add_RZ( qbit_idx+1 )
59 Circuit_ret.add_SX( qbit_idx+1 )
60 Circuit_ret.add_RZ( qbit_idx+1 )
61 Circuit_ret.add_X( qbit_idx+1 )
62 Circuit_ret.add_SX( qbit_idx+1 )
63 Circuit_ret.add_RZ( qbit_idx+1 )
66 Circuit_ret.add_RZ( qbit_idx )
68 Circuit_ret.add_SX( qbit_idx )
69 Circuit_ret.add_RZ( qbit_idx )
70 Circuit_ret.add_X( qbit_idx )
71 Circuit_ret.add_SX( qbit_idx )
72 Circuit_ret.add_RZ( qbit_idx )
75 Circuit_ret.add_CNOT( qbit_idx, qbit_idx+1)
86 Add layers to disentangle the 3rd qubit from the others 87 linear chain with IBM native operations 91 from squander
import Circuit
95 Circuit_ret = Circuit( qbit_num )
98 for idx
in range(0,layer_num,2):
101 for qbit_idx
in range(qbit_num-1):
103 Layer = Circuit( qbit_num )
105 Layer.add_RZ( qbit_idx+1 )
106 Layer.add_SX( qbit_idx+1 )
107 Layer.add_RZ( qbit_idx+1 )
108 Layer.add_X( qbit_idx+1 )
109 Layer.add_SX( qbit_idx+1 )
110 Layer.add_RZ( qbit_idx+1 )
113 Layer.add_RZ( qbit_idx )
115 Layer.add_SX( qbit_idx )
116 Layer.add_RZ( qbit_idx )
117 Layer.add_X( qbit_idx )
118 Layer.add_SX( qbit_idx )
119 Layer.add_RZ( qbit_idx )
122 Layer.add_CNOT( qbit_idx, qbit_idx+1)
124 Circuit_ret.add_Circuit( Layer )
149 parameter_num = squander_circuit.get_Parameter_Num()
150 parameters = np.random.randn( parameter_num ) *2*np.pi
152 Qiskit_circuit = Qiskit_IO.get_Qiskit_Circuit( squander_circuit, parameters )
155 print( Qiskit_circuit )
157 flat_circuit = squander_circuit.get_Flat_Circuit()
174 flat_circuit = squander_circuit.get_Flat_Circuit()
178 parameter_num = flat_circuit.get_Parameter_Num()
179 parameters = np.random.randn( parameter_num ) *2*np.pi
182 Qiskit_circuit = Qiskit_IO.get_Qiskit_Circuit( flat_circuit, parameters )
185 print( Qiskit_circuit )
203 gates = squander_circuit.get_Gates()
207 chosen_gate = gates[ chosen_gate_idx ]
210 print(
"The chosen gate is: " + str(chosen_gate) )
212 parents_indices = squander_circuit.get_Parents( chosen_gate )
213 parent_gate = gates[ parents_indices[0] ]
216 print(
"The parents gate is: " + str( parent_gate ) )
230 gates = squander_circuit.get_Gates()
234 chosen_gate = gates[ chosen_gate_idx ]
237 print(
"The chosen gate is: " + str(chosen_gate) )
239 children_indices = squander_circuit.get_Children( chosen_gate )
240 child_gate = gates[ children_indices[0] ]
243 print(
"The child gate is: " + str( child_gate ) )
def create_circuit(self, qbit_num, layer_num=2)
def test_flat_conversion(self)
def create_flat_circuit(self, qbit_num, layer_num=2)
def test_dependency_graph(self)