4 Created on Tue Jun 30 15:44:26 2020 5 Copyright 2020 Peter Rakyta, Ph.D. 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 11 http://www.apache.org/licenses/LICENSE-2.0 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 19 You should have received a copy of the GNU General Public License 20 along with this program. If not, see http://www.gnu.org/licenses/. 22 @author: Peter Rakyta, Ph.D. 31 from squander.gates.qgd_Circuit_Wrapper
import qgd_Circuit_Wrapper
34 from squander.gates.gates_Wrapper
import (
74 def __getstate__(self): 75 # Return a dictionary of the object's state 77 return super().__getstate__() 79 def __setstate__(self, state): 82 super().__setstate__( state ) 85 def __new__(cls, *args, **kwargs): 87 print( "NEEEEEEEEEEEEEW", args) 88 return super().__new__(cls, *args, **kwargs) 98 super().
add_U1(target_qbit)
107 super().
add_U2(target_qbit)
116 super().
add_U3(target_qbit)
125 super().
add_RX(target_qbit)
133 super().
add_R(target_qbit)
142 super().
add_RY(target_qbit)
151 super().
add_RZ(target_qbit)
160 super().
add_CNOT(target_qbit, control_qbit)
166 def add_CZ( self, target_qbit, control_qbit):
169 super().
add_CZ(target_qbit, control_qbit)
175 def add_CH( self, target_qbit, control_qbit):
178 super().
add_CH(target_qbit, control_qbit)
184 def add_SYC( self, target_qbit, control_qbit):
187 super().
add_SYC(target_qbit, control_qbit)
197 super().
add_H(target_qbit)
206 super().
add_X(target_qbit)
215 super().
add_Y(target_qbit)
224 super().
add_Z(target_qbit)
233 super().
add_SX(target_qbit)
242 super().
add_T(target_qbit)
269 super(qgd_Circuit, self).
add_CROT(target_qbit, control_qbit)
275 def add_CR( self, target_qbit, control_qbit):
278 super(qgd_Circuit, self).
add_CR(target_qbit, control_qbit)
311 def apply_to( self, parameters_mtx, unitary_mtx, parallel=1):
314 super().
apply_to( parameters_mtx, unitary_mtx, parallel=parallel )
328 qbit_num = self.get_Qbit_Num()
330 qubit_list_validated = list()
331 if isinstance(qubit_list, list)
or isinstance(qubit_list, tuple):
332 for item
in qubit_list:
333 if isinstance(item, int):
334 qubit_list_validated.append(item)
335 qubit_list_validated = list(set(qubit_list_validated))
337 print(
"Elements of qbit_list should be integers")
339 elif qubit_list ==
None:
340 qubit_list_validated = [ x
for x
in range(qbit_num) ]
343 print(
"Elements of qbit_list should be integers")
347 if parameters
is None:
348 print(
"get_Second_Renyi_entropy: array of input parameters is None")
352 if input_state
is None:
353 matrix_size = 1 << qbit_num
354 input_state = np.zeros( (matrix_size,1), dtype=np.complex128 )
405 qbit_num = self.get_Qbit_Num()
438 if isinstance(qgd_gate,H):
439 self.add_H(qgd_gate.get_Target_Qbit())
440 elif isinstance(qgd_gate,X):
441 self.add_X(qgd_gate.get_Target_Qbit())
442 elif isinstance(qgd_gate,Y):
443 self.add_Y(qgd_gate.get_Target_Qbit())
444 elif isinstance(qgd_gate,Z):
445 self.add_Z(qgd_gate.get_Target_Qbit())
446 elif isinstance(qgd_gate,CH):
447 self.add_CH(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
448 elif isinstance(qgd_gate,CZ):
449 self.add_CZ(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
450 elif isinstance(qgd_gate,RX):
451 self.add_RX(qgd_gate.get_Target_Qbit())
452 elif isinstance(qgd_gate,RY):
453 self.add_RY(qgd_gate.get_Target_Qbit())
454 elif isinstance(qgd_gate,RZ):
455 self.add_RZ(qgd_gate.get_Target_Qbit())
456 elif isinstance(qgd_gate,SX):
457 self.add_SX(qgd_gate.get_Target_Qbit())
458 elif isinstance(qgd_gate,U1):
459 self.add_U1(qgd_gate.get_Target_Qbit())
460 elif isinstance(qgd_gate,U2):
461 self.add_U2(qgd_gate.get_Target_Qbit())
462 elif isinstance(qgd_gate,U3):
463 self.add_U3(qgd_gate.get_Target_Qbit())
464 elif isinstance(qgd_gate,CRY):
465 self.add_CRY(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
466 elif isinstance(qgd_gate,CNOT):
467 self.add_CNOT(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
468 elif isinstance(qgd_gate,T):
469 self.add_T(qgd_gate.get_Target_Qbit())
470 elif isinstance(qgd_gate,Tdg):
471 self.add_Tdg(qgd_gate.get_Target_Qbit())
472 elif isinstance(qgd_gate,R):
473 self.add_R(qgd_gate.get_Target_Qbit())
474 elif isinstance(qgd_gate,CROT):
475 self.add_CROT(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
476 elif isinstance(qgd_gate,CR):
477 self.add_CR(qgd_gate.get_Target_Qbit(),qgd_gate.get_Control_Qbit())
479 raise Exception(
"Cannot add gate: unimplemented gate type")
def add_Y(self, target_qbit)
def get_Parameter_Start_Index(self)
def add_CNOT(self, target_qbit, control_qbit)
def get_Qbit_Num(self)
Call to get the number of qubits in the circuit.
def add_SX(self, target_qbit)
A QGD Python interface class for the Gates_Block.
def add_SYC(self, target_qbit, control_qbit)
def add_T(self, target_qbit)
def get_Second_Renyi_Entropy(self, parameters=None, input_state=None, qubit_list=None)
Call to get the second Rényi entropy.
def add_CH(self, target_qbit, control_qbit)
def add_X(self, target_qbit)
def get_Gates(self)
Call to get the list of gates (or subcircuits) in the circuit.
def get_Gate_Nums(self)
Call to get statisctics on the gate counts in the circuit.
def add_RY(self, target_qbit)
def add_R(self, target_qbit)
def add_RZ(self, target_qbit)
def add_CROT(self, target_qbit, control_qbit)
def Remap_Qbits(self, qbit_map, qbit_num=None)
Call to remap the qubits in the circuit.
def get_Matrix(self, parameters_mtx)
def add_CZ(self, target_qbit, control_qbit)
def add_H(self, target_qbit)
def add_RX(self, target_qbit)
def add_adaptive(self, target_qbit, control_qbit)
def add_CR(self, target_qbit, control_qbit)
def apply_to(self, parameters_mtx, unitary_mtx, parallel=1)
def get_Parameter_Num(self)
def add_Tdg(self, target_qbit)
def get_Parents(self, gate)
def __init__(self, qbit_num)
Constructor of the class.
def get_Qbits(self)
Call to get the list of qubits involved in the circuit.
def get_Children(self, gate)
def add_U1(self, target_qbit)
def add_U3(self, target_qbit)
def add_Circuit(self, gate)
def add_U2(self, target_qbit)
def add_Z(self, target_qbit)
def add_Gate(self, qgd_gate)