5 Created on Fri Jun 26 14:13:26 2020 6 Copyright 2020 Peter Rakyta, Ph.D. 8 Licensed under the Apache License, Version 2.0 (the "License"); 9 you may not use this file except in compliance with the License. 10 You may obtain a copy of the License at 12 http://www.apache.org/licenses/LICENSE-2.0 14 Unless required by applicable law or agreed to in writing, software 15 distributed under the License is distributed on an "AS IS" BASIS, 16 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 See the License for the specific language governing permissions and 18 limitations under the License. 20 @author: Peter Rakyta, Ph.D. 30 from squander.variational_quantum_eigensolver.qgd_Variational_Quantum_Eigensolver_Base_Wrapper
import qgd_Variational_Quantum_Eigensolver_Base_Wrapper
46 def __init__( self, Hamiltonian, qbit_num, config={}, accelerator_num=0):
50 if not(
type(config)
is dict):
51 print(
"Input parameter config should be a dictionary describing the following hyperparameters:")
56 super(qgd_Variational_Quantum_Eigensolver_Base, self).
__init__(Hamiltonian.data, Hamiltonian.indices, Hamiltonian.indptr, qbit_num, config=config, accelerator_num=accelerator_num)
57 self.qbit_num = qbit_num
65 super(qgd_Variational_Quantum_Eigensolver_Base, self).
set_Optimizer(alg)
102 super(qgd_Variational_Quantum_Eigensolver_Base, self).
set_Project_Name(project_name)
117 super(qgd_Variational_Quantum_Eigensolver_Base, self).
set_Ansatz(ansatz_new)
125 super(qgd_Variational_Quantum_Eigensolver_Base, self).
Generate_Circuit( layers, inner_blocks )
149 qbit_num = self.get_Qbit_Num()
151 qubit_list_validated = list()
152 if isinstance(qubit_list, list)
or isinstance(qubit_list, tuple):
153 for item
in qubit_list:
154 if isinstance(item, int):
155 qubit_list_validated.append(item)
156 qubit_list_validated = list(set(qubit_list_validated))
158 print(
"Elements of qbit_list should be integers")
160 elif qubit_list ==
None:
161 qubit_list_validated = [ x
for x
in range(qbit_num) ]
164 print(
"Elements of qbit_list should be integers")
168 if parameters
is None:
169 print(
"get_Second_Renyi_entropy: array of input parameters is None")
173 if input_state
is None:
174 matrix_size = 1 << qbit_num
175 input_state = np.zeros( (matrix_size,1) )
179 entropy = super(qgd_Variational_Quantum_Eigensolver_Base, self).
get_Second_Renyi_Entropy( parameters, input_state, qubit_list_validated)
190 return super(qgd_Variational_Quantum_Eigensolver_Base, self).
get_Qbit_Num()
204 def apply_to( self, parameters_mtx, state_to_be_transformed):
207 super().
apply_to( parameters_mtx, state_to_be_transformed )
225 from squander
import Qiskit_IO
227 squander_circuit = self.get_Circuit()
228 parameters = self.get_Optimized_Parameters()
230 return Qiskit_IO.get_Qiskit_Circuit( squander_circuit, parameters )
237 super(qgd_Variational_Quantum_Eigensolver_Base, self).
set_Initial_State( initial_state )
245 if not isinstance(Gate_structure, qgd_Circuit) :
246 raise Exception(
"Input parameter Gate_structure should be a an instance of Circuit")
def get_Optimized_Parameters(self)
Call to get the optimized parameters set in numpy array.
def get_Parameter_Num(self)
Call to get the number of free parameters in the gate structure used for the decomposition.
def set_Gate_Structure_from_Binary(self, filename)
Call to set custom layers to the gate structure that are intended to be used in the decomposition fro...
def set_Ansatz(self, ansatz_new)
Call to set the ansatz type.
def set_Optimization_Tolerance(self, tolerance)
def set_Initial_State(self, initial_state)
Call to get the number of free parameters in the gate structure used for the decomposition.
def Optimization_Problem_Grad(self, parameters)
Call to evaluate the VQE energy.
def __init__(self, Hamiltonian, qbit_num, config={}, accelerator_num=0)
Constructor of the class.
def get_Circuit(self)
Call to retrieve the incorporated quantum circuit (Squander format)
def set_Gate_Structure(self, Gate_structure)
Call to set custom gate structure to used in the decomposition.
A QGD Python interface class for the decomposition of N-qubit unitaries into U3 and CNOT gates...
def set_Optimizer(self, alg)
Call to set the optimizer used in the VQE process.
def apply_to(self, parameters_mtx, state_to_be_transformed)
def set_Optimized_Parameters(self, new_params)
Call to set the parameters which are used as a starting point in the optimization.
def Optimization_Problem(self, parameters)
Call to evaluate the VQE energy.
def Start_Optimization(self)
Call to start solving the VQE problem to get the approximation for the ground state.
def get_Second_Renyi_Entropy(self, parameters=None, input_state=None, qubit_list=None)
Call to get the second Rényi entropy.
def set_Project_Name(self, project_name)
Call to set the name of the SQUANDER project.
def set_Gate_Structure_From_Binary(self, filename)
Call to set custom layers to the gate structure that are intended to be used in the decomposition fro...
def get_Qiskit_Circuit(self)
Export the unitary decomposition into Qiskit format.
def Generate_Circuit(self, layers, inner_blocks=1)
Call to generate the circuit ansatz.
def get_Qbit_Num(self)
Call to get the number of qubits in the circuit.