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.VQA.qgd_Generative_Quantum_Machine_Learning_Base_Wrapper
import qgd_Generative_Quantum_Machine_Learning_Base_Wrapper
48 def __init__( self, x_bitstrings, p_stars, sigma, qbit_num, use_lookup_table, cliques, use_exact, config):
51 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
__init__(x_bitstrings.data, p_stars.data, sigma, qbit_num, use_lookup_table, cliques, use_exact, config)
52 self.qbit_num = qbit_num
60 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
set_Optimizer(alg)
97 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
set_Project_Name(project_name)
104 super(qgd_Generative_Quantum_Machine_Learning_Base, self).set_Gate_Structure_From_Binary(filename)
112 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
set_Ansatz(ansatz_new)
120 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
Generate_Circuit( layers, inner_blocks )
127 return super(qgd_Generative_Quantum_Machine_Learning_Base, self).
Optimization_Problem(parameters)
138 qbit_num = self.get_Qbit_Num()
140 qubit_list_validated = list()
141 if isinstance(qubit_list, list)
or isinstance(qubit_list, tuple):
142 for item
in qubit_list:
143 if isinstance(item, int):
144 qubit_list_validated.append(item)
145 qubit_list_validated = list(set(qubit_list_validated))
147 print(
"Elements of qbit_list should be integers")
149 elif qubit_list ==
None:
150 qubit_list_validated = [ x
for x
in range(qbit_num) ]
153 print(
"Elements of qbit_list should be integers")
157 if parameters
is None:
158 print(
"get_Second_Renyi_entropy: array of input parameters is None")
162 if input_state
is None:
163 matrix_size = 1 << qbit_num
164 input_state = np.zeros( (matrix_size,1) )
168 entropy = super(qgd_Generative_Quantum_Machine_Learning_Base, self).
get_Second_Renyi_Entropy( parameters, input_state, qubit_list_validated)
179 return super(qgd_Generative_Quantum_Machine_Learning_Base, self).
get_Qbit_Num()
186 return super(qgd_Generative_Quantum_Machine_Learning_Base, self).
get_Parameter_Num()
193 def apply_to( self, parameters_mtx, state_to_be_transformed):
196 super().
apply_to( parameters_mtx, state_to_be_transformed )
214 from squander
import Qiskit_IO
216 squander_circuit = self.get_Circuit()
217 parameters = self.get_Optimized_Parameters()
219 return Qiskit_IO.get_Qiskit_Circuit( squander_circuit, parameters )
226 super(qgd_Generative_Quantum_Machine_Learning_Base, self).
set_Initial_State( initial_state )
234 if not isinstance(Gate_structure, qgd_Circuit) :
235 raise Exception(
"Input parameter Gate_structure should be a an instance of Circuit")
def Generate_Circuit(self, layers, inner_blocks=1)
Call to generate the circuit ansatz.
def Start_Optimization(self)
Call to start solving the GQML problem.
def apply_to(self, parameters_mtx, state_to_be_transformed)
def get_Optimized_Parameters(self)
Call to get the optimized parameters set in numpy array.
A QGD Python interface class for solvin generative quantum machine learning problems.
def get_Circuit(self)
Call to retrieve the incorporated quantum circuit (Squander format)
def get_Second_Renyi_Entropy(self, parameters=None, input_state=None, qubit_list=None)
Call to get the second Rényi entropy.
def get_Qiskit_Circuit(self)
Export the unitary decomposition into Qiskit format.
def __init__(self, x_bitstrings, p_stars, sigma, qbit_num, use_lookup_table, cliques, use_exact, config)
Constructor of the class.
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 MMD between our and the goal distribution.
def get_Qbit_Num(self)
Call to get the number of qubits in the circuit.
def set_Initial_State(self, initial_state)
Call to get the number of free parameters in the gate structure used for the decomposition.
def set_Gate_Structure(self, Gate_structure)
Call to set custom gate structure to used in the decomposition.
def get_Parameter_Num(self)
Call to get the number of free parameters in the gate structure used for the decomposition.
def set_Optimization_Tolerance(self, tolerance)
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_Project_Name(self, project_name)
Call to set the name of the SQUANDER project.
def set_Optimizer(self, alg)
Call to set the optimizer used in the GQML process.
def set_Ansatz(self, ansatz_new)
Call to set the ansatz type.