Sequential Quantum Gate Decomposer
v1.8.8
Powerful decomposition of general unitarias into one- and two-qubit gates gates
|
A class containing basic methods for the decomposition process. More...
#include <Decomposition_Base.h>
Public Member Functions | |
void | add_adaptive (int target_qbit, int control_qbit) |
Add a Adaptive gate to the front of the list of gates. More... | |
void | add_adaptive_to_end (int target_qbit, int control_qbit) |
Append a Adaptive gate to the list of gates. More... | |
void | add_ch (int target_qbit, int control_qbit) |
Add a CH gate (i.e. More... | |
void | add_ch_to_end (int target_qbit, int control_qbit) |
Append a CH gate (i.e. More... | |
void | add_cnot (int target_qbit, int control_qbit) |
Add a C_NOT gate gate to the front of the list of gates. More... | |
void | add_cnot_to_end (int target_qbit, int control_qbit) |
Append a CNOT gate gate to the list of gates. More... | |
void | add_composite () |
Add a Composite gate to the front of the list of gates. More... | |
void | add_composite_to_end () |
Append a Composite gate to the list of gates. More... | |
void | add_cry (int target_qbit, int control_qbit) |
Add a CRY gate to the front of the list of gates. More... | |
void | add_cry_to_end (int target_qbit, int control_qbit) |
Append a CRY gate to the list of gates. More... | |
void | add_cz (int target_qbit, int control_qbit) |
Add a CZ gate gate to the front of the list of gates. More... | |
void | add_cz_to_end (int target_qbit, int control_qbit) |
Append a CZ gate gate to the list of gates. More... | |
void | add_gate (Gate *gate) |
Add an gate to the front of the list of gates. More... | |
void | add_gate_to_end (Gate *gate) |
Append a general gate to the list of gates. More... | |
void | add_gates (std::vector< Gate *> gates_in) |
Add an array of gates to the front of the list of gates. More... | |
void | add_gates_to_end (std::vector< Gate *> gates_in) |
Append a list of gates to the list of gates. More... | |
void | add_on () |
Add a OUN gate to the front of the list of gates. More... | |
void | add_on_to_end () |
Append a ON gate to the list of gates. More... | |
void | add_rx (int target_qbit) |
Add a RX gate to the front of the list of gates. More... | |
void | add_rx_to_end (int target_qbit) |
Append a RX gate to the list of gates. More... | |
void | add_ry (int target_qbit) |
Add a RY gate to the front of the list of gates. More... | |
void | add_ry_to_end (int target_qbit) |
Append a RY gate to the list of gates. More... | |
void | add_rz (int target_qbit) |
Add a RZ gate to the front of the list of gates. More... | |
void | add_rz_p (int target_qbit) |
Add a RZ_P gate to the front of the list of gates. More... | |
void | add_rz_p_to_end (int target_qbit) |
Append a RZ_P gate to the list of gates. More... | |
void | add_rz_to_end (int target_qbit) |
Append a RZ gate to the list of gates. More... | |
void | add_sx (int target_qbit) |
Add a SX gate to the front of the list of gates. More... | |
void | add_sx_to_end (int target_qbit) |
Append a SX gate to the list of gates. More... | |
void | add_syc (int target_qbit, int control_qbit) |
Add a Sycamore gate (i.e. More... | |
void | add_syc_to_end (int target_qbit, int control_qbit) |
Append a Sycamore gate (i.e. More... | |
void | add_u3 (int target_qbit, bool Theta, bool Phi, bool Lambda) |
Add a U3 gate to the front of the list of gates. More... | |
void | add_u3_to_end (int target_qbit, bool Theta, bool Phi, bool Lambda) |
Append a U3 gate to the list of gates. More... | |
void | add_un () |
Add a UN gate to the front of the list of gates. More... | |
void | add_un_to_end () |
Append a UN gate to the list of gates. More... | |
void | add_x (int target_qbit) |
Add a X gate to the front of the list of gates. More... | |
void | add_x_to_end (int target_qbit) |
Append a X gate to the list of gates. More... | |
void | add_y (int target_qbit) |
Add a Y gate to the front of the list of gates. More... | |
void | add_y_to_end (int target_qbit) |
Append a Y gate to the list of gates. More... | |
void | add_z (int target_qbit) |
Add a Z gate to the front of the list of gates. More... | |
void | add_z_to_end (int target_qbit) |
Append a Z gate to the list of gates. More... | |
virtual std::vector< Matrix > | apply_derivate_to (Matrix_real ¶meters_mtx, Matrix &input) |
Call to evaluate the derivate of the circuit on an inout with respect to all of the free parameters. More... | |
virtual void | apply_from_right (Matrix &input) |
Call to apply the gate on the input array/matrix by input*Gate. More... | |
virtual void | apply_from_right (Matrix_real ¶meters_mtx, Matrix &input) |
Call to apply the gate on the input array/matrix by input*CNOT. More... | |
Matrix | apply_gate (Matrix &gate_mtx, Matrix &input_matrix) |
Apply an gates on the input matrix. More... | |
void | apply_global_phase_factor (QGD_Complex16 global_phase_factor, Matrix &u3_gate) |
Call to apply the global phase to a matrix. More... | |
void | apply_global_phase_factor () |
Call to apply the current global phase to the unitary matrix. More... | |
virtual void | apply_to (Matrix &input, bool parallel=false) |
Call to apply the gate on the input array/matrix. More... | |
virtual void | apply_to (Matrix_real ¶meters_mtx, Matrix &input, bool parallel=false) |
Call to apply the gate on the input array/matrix Gates_block*input. More... | |
void | apply_to_list (std::vector< Matrix > &input) |
Call to apply the gate on the input array/matrix by U3*input. More... | |
void | apply_to_list (Matrix_real ¶meters, std::vector< Matrix > input) |
Call to apply the gate on the input array/matrix by U3*input. More... | |
Matrix | calc_one_qubit_u3 (double Theta, double Phi, double Lambda) |
Calculate the matrix of a U3 gate gate corresponding to the given parameters acting on a single qbit space. More... | |
virtual Matrix | calc_one_qubit_u3 () |
Calculate the matrix of the constans gates. More... | |
void | calculate_new_global_phase_factor (QGD_Complex16 global_phase_factor_new) |
Calculate the new global phase of the Unitary matrix after removing a trivial U3 matrix. More... | |
bool | check_optimization_solution () |
check_optimization_solution More... | |
virtual Gates_block * | clone () |
Create a clone of the present class. More... | |
void | combine (Gates_block *op_block) |
Call to append the gates of an gate block to the current block. More... | |
bool | contains_adaptive_gate () |
Call to determine, whether the circuit contains daptive gate or not. More... | |
bool | contains_adaptive_gate (int idx) |
Call to determine, whether the sub-circuit at a given position in the circuit contains daptive gate or not. More... | |
Decomposition_Base () | |
Nullary constructor of the class. More... | |
Decomposition_Base (Matrix Umtx_in, int qbit_num_in, std::map< std::string, Config_Element > &config_in, guess_type initial_guess_in) | |
Contructor of the class. More... | |
void | export_unitary (std::string &filename) |
exports unitary matrix to binary file More... | |
int | extract_gates (Gates_block *op_block) |
Call to extract the gates stored in the class. More... | |
void | finalize_decomposition () |
After the main optimization problem is solved, the indepent qubits can be rotated into state |0> by this def. More... | |
void | fragment_circuit () |
int | get_control_qbit () |
Call to get the index of the control qubit. More... | |
double | get_current_minimum () |
Call to get the obtained minimum of the cost function. More... | |
Matrix | get_decomposed_matrix () |
Calculate the decomposed matrix resulted by the effect of the optimized gates on the unitary Umtx. More... | |
double | get_decomposition_error () |
Call to get the error of the decomposition. More... | |
Matrix | get_finalizing_gates (Matrix &mtx, Gates_block *finalizing_gates, double *finalizing_parameters) |
This method determine the gates needed to rotate the indepent qubits into the state |0> More... | |
Gate * | get_gate (int n) |
Call to prepare the optimized gates to export. More... | |
int | get_gate_num () |
Call to get the number of gates grouped in the class. More... | |
gates_num | get_gate_nums () |
Call to get the number of the individual gate types in the list of gates. More... | |
std::vector< Matrix, tbb::cache_aligned_allocator< Matrix > > | get_gate_products (double *parameters, std::vector< Gate *>::iterator gates_it, int num_of_gates) |
Calculate the list of gate gate matrices such that the i>0-th element in the result list is the product of the gates of all 0<=n<i gates from the input list and the 0th element in the result list is the identity. More... | |
std::vector< Gate * > | get_gates () |
Call to get the gates stored in the class. More... | |
QGD_Complex16 | get_global_phase_factor () |
Get the global phase of the Unitary matrix. More... | |
std::vector< int > | get_involved_qubits () |
Call to get the qubits involved in the gates stored in the block of gates. More... | |
Matrix | get_matrix () |
Call to retrieve the operation matrix. More... | |
Matrix | get_matrix (Matrix_real ¶meters) |
Call to retrieve the gate matrix (Which is the product of all the gate matrices stored in the gate block) More... | |
Matrix | get_matrix (Matrix_real ¶meters, bool parallel) |
Call to retrieve the gate matrix (Which is the product of all the gate matrices stored in the gate block) More... | |
Matrix_real | get_optimized_parameters () |
Call to get the optimized parameters. More... | |
void | get_optimized_parameters (double *ret) |
Call to get the optimized parameters. More... | |
void | get_parameter_max (Matrix_real &range_max) |
int | get_parameter_num () |
Call to get the number of free parameters. More... | |
std::string | get_project_name () |
Call to get the current name of the project. More... | |
int | get_qbit_num () |
Call to get the number of qubits composing the unitary. More... | |
Matrix | get_reduced_density_matrix (Matrix_real ¶meters_mtx, Matrix &input_state, matrix_base< int > &qbit_list_subset) |
Call to evaluate the reduced densiy matrix. More... | |
double | get_second_Renyi_entropy (Matrix_real ¶meters_mtx, Matrix &input_state, matrix_base< int > &qbit_list) |
Call to evaluate the seconf Rényi entropy. More... | |
int | get_target_qbit () |
Call to get the index of the target qubit. More... | |
Matrix | get_transformed_matrix (Matrix_real ¶meters, std::vector< Gate *>::iterator gates_it, int num_of_gates) |
Calculate the transformed matrix resulting by an array of gates on the matrix Umtx. More... | |
Matrix | get_transformed_matrix (Matrix_real ¶meters, std::vector< Gate *>::iterator gates_it, int num_of_gates, Matrix &initial_matrix) |
Calculate the transformed matrix resulting by an array of gates on a given initial matrix. More... | |
gate_type | get_type () |
Call to get the type of the operation. More... | |
Matrix | get_Umtx () |
Call to retrive a pointer to the unitary to be transformed. More... | |
int | get_Umtx_size () |
Call to get the size of the unitary to be transformed. More... | |
Matrix | import_unitary_from_binary (std::string &filename) |
Import a Unitary matrix from a file. More... | |
void | insert_gate (Gate *gate, int idx) |
Call to insert a gate at a given position. More... | |
void | list_gates (int start_index) |
Call to print the gates decomposing the initial unitary. More... | |
void | list_gates (const Matrix_real ¶meters, int start_index) |
Call to print the list of gates stored in the block of gates for a specific set of parameters. More... | |
virtual double | optimization_problem (const double *parameters) |
This is an abstact definition of function giving the cost functions measuring the entaglement of the qubits. More... | |
virtual void | parameters_for_calc_one_qubit (double &ThetaOver2, double &Phi, double &Lambda) |
Calculate the matrix of a U3 gate gate corresponding to the given parameters acting on a single qbit space. More... | |
void | prepare_gates_to_export () |
Call to prepare the optimized gates to export. More... | |
std::vector< Gate * > | prepare_gates_to_export (std::vector< Gate *> ops, double *parameters) |
Call to prepare the optimized gates to export. More... | |
std::vector< Gate * > | prepare_gates_to_export (Gates_block *block_op, double *parameters) |
Call to prepare the gates of an gate block to export. More... | |
void | print (const std::stringstream &sstream, int verbose_level=1) const |
Call to print output messages in the function of the verbosity level. More... | |
void | release_gate (int idx) |
Call to release one gate in the list. More... | |
void | release_gates () |
Call to release the stored gates. More... | |
void | reorder_qubits (std::vector< int > qbit_list) |
Call to reorder the qubits in the matrix of the gate. More... | |
void | set_control_qbit (int control_qbit_in) |
Call to set the control qubit for the gate operation. More... | |
void | set_convergence_threshold (double convergence_threshold_in) |
Call to set the threshold of convergence in the optimization processes. More... | |
void | set_debugfile (std::string debugfile) |
Call to set the debugfile name. More... | |
void | set_global_phase (double new_global_phase) |
Call to set global phase. More... | |
int | set_iteration_loops (int n, int iteration_loops_in) |
Set the number of iteration loops during the subdecomposition of the n-th qubit. More... | |
int | set_iteration_loops (std::map< int, int > iteration_loops_in) |
Set the number of iteration loops during the subdecomposition of the qbit-th qubit. More... | |
void | set_matrix (Matrix input) |
Call to set the stored matrix in the operation. More... | |
void | set_max_iteration (int max_outer_iterations_in) |
Call to set the maximal number of the iterations in the optimization process. More... | |
int | set_max_layer_num (int n, int max_layer_num_in) |
Set the maximal number of layers used in the subdecomposition of the n-th qubit. More... | |
int | set_max_layer_num (std::map< int, int > max_layer_num_in) |
Set the maximal number of layers used in the subdecomposition of the n-th qubit. More... | |
void | set_optimization_blocks (int optimization_block_in) |
Call to set the number of gate blocks to be optimized in one shot. More... | |
void | set_optimization_tolerance (double tolerance_in) |
Call to set the tolerance of the optimization processes. More... | |
void | set_optimized_parameters (double *parameters, int num_of_parameters) |
Call to set the optimized parameters for initial optimization. More... | |
void | set_project_name (std::string &project_name_new) |
Call to set the name of the project. More... | |
void | set_qbit_num (int qbit_num_in) |
Set the number of qubits spanning the matrix of the gates stored in the block of gates. More... | |
void | set_target_qbit (int target_qbit_in) |
Call to set the target qubit for the gate operation. More... | |
void | set_verbose (int verbose_in) |
Call to set the verbose attribute. More... | |
virtual void | solve_layer_optimization_problem (int num_of_parameters, Matrix_real solution_guess_gsl) |
Abstarct function to be used to solve a single sub-layer optimization problem. More... | |
void | solve_optimization_problem (double *solution_guess, int solution_guess_num) |
This method can be used to solve the main optimization problem which is devidid into sub-layer optimization processes. More... | |
virtual | ~Decomposition_Base () |
Destructor of the class. More... | |
Static Public Member Functions | |
static void | Init_max_layer_num () |
Initializes default layer numbers. More... | |
Public Attributes | |
std::map< std::string, Config_Element > | config |
config metadata utilized during the optimization More... | |
bool | debug |
Logical variable. Set true to write output messages to the 'debug.txt' file. More... | |
std::string | debugfile_name |
String variable. Set the debug file name. More... | |
QGD_Complex16 | global_phase_factor |
The global phase. More... | |
int | optimization_block |
number of gate blocks used in one shot of the optimization process More... | |
double | optimization_tolerance |
The maximal allowed error of the optimization problem (The error of the decomposition would scale with the square root of this value) More... | |
std::string | project_name |
the name of the project More... | |
int | verbose |
Set the verbosity level of the output messages. More... | |
Static Public Attributes | |
static std::map< int, int > | max_layer_num_def |
A map of <int n: int num> indicating that how many layers should be used in the subdecomposition process by default for the subdecomposing of the nth qubits. More... | |
Protected Member Functions | |
void | apply_kernel_from_right (Matrix &u3_1qbit, Matrix &input) |
Call to apply the gate kernel on the input state or unitary from right (no AVX support) More... | |
void | apply_kernel_to (Matrix &u3_1qbit, Matrix &input, bool deriv=false, bool parallel=false) |
Call to apply the gate kernel on the input state or unitary with optional AVX support. More... | |
Protected Attributes | |
std::vector< int > | block_end |
std::vector< int > | block_type |
int | control_qbit |
The index of the qubit which acts as a control qubit (control_qbit >= 0) in controlled operations. More... | |
double | convergence_threshold |
The convergence threshold in the optimization process. More... | |
double | current_minimum |
The current minimum of the optimization problem. More... | |
double | decomposition_error |
error of the final decomposition More... | |
bool | decomposition_finalized |
The optimized parameters for the gates. More... | |
int | finalizing_gates_num |
number of finalizing (deterministic) opertaions rotating the disentangled qubits into state |0>. More... | |
int | finalizing_parameter_num |
the number of the finalizing (deterministic) parameters of gates rotating the disentangled qubits into state |0>. More... | |
int | fragmentation_type |
bool | fragmented |
boolean variable indicating whether the circuit was already partitioned or not More... | |
std::vector< Gate * > | gates |
The list of stored gates. More... | |
std::mt19937 | gen |
Standard mersenne_twister_engine seeded with rd() More... | |
double | global_target_minimum |
The global target minimum of the optimization problem. More... | |
guess_type | initial_guess |
type to guess the initial values for the optimization. Possible values: ZEROS=0, RANDOM=1, CLOSE_TO_ZERO=2 More... | |
std::vector< std::vector< int > > | involved_qbits |
std::map< int, int > | iteration_loops |
A map of <int n: int num> indicating the number of iteration in each step of the decomposition. More... | |
int | layer_num |
number of gate layers More... | |
int | matrix_size |
The size N of the NxN matrix associated with the operations. More... | |
int | max_fusion |
maximal number of qubits in partitions More... | |
std::map< int, int > | max_layer_num |
A map of <int n: int num> indicating that how many layers should be used in the subdecomposition process for the subdecomposing of the nth qubits. More... | |
int | max_outer_iterations |
Maximal number of iterations allowed in the optimization process. More... | |
int | num_threads |
Store the number of OpenMP threads. (During the calculations OpenMP multithreading is turned off.) More... | |
bool | optimization_problem_solved |
logical value describing whether the optimization problem was solved or not More... | |
Matrix_real | optimized_parameters_mtx |
The optimized parameters for the gates. More... | |
int | parameter_num |
the number of free parameters of the operation More... | |
int | qbit_num |
number of qubits spanning the matrix of the operation More... | |
int | target_qbit |
The index of the qubit on which the operation acts (target_qbit >= 0) More... | |
gate_type | type |
The type of the operation (see enumeration gate_type) More... | |
Matrix | Umtx |
The unitary to be decomposed. More... | |
A class containing basic methods for the decomposition process.
Definition at line 83 of file Decomposition_Base.h.
Decomposition_Base::Decomposition_Base | ( | ) |
Nullary constructor of the class.
Definition at line 32 of file Decomposition_Base.cpp.
Decomposition_Base::Decomposition_Base | ( | Matrix | Umtx_in, |
int | qbit_num_in, | ||
std::map< std::string, Config_Element > & | config_in, | ||
guess_type | initial_guess_in = CLOSE_TO_ZERO |
||
) |
Contructor of the class.
Constructor of the class.
Umtx_in | The unitary matrix to be decomposed |
qbit_num_in | The number of qubits spanning the unitary to be decomposed. |
initial_guess_in | Type to guess the initial values for the optimization. Possible values: ZEROS=0, RANDOM=1, CLOSE_TO_ZERO=2 |
Definition at line 114 of file Decomposition_Base.cpp.
|
virtual |
Destructor of the class.
Definition at line 202 of file Decomposition_Base.cpp.
Add a Adaptive gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1531 of file Gates_block.cpp.
Append a Adaptive gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1516 of file Gates_block.cpp.
Add a CH gate (i.e.
controlled Hadamard gate) gate to the front of the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
controlled Hadamard gate) operation to the front of the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1394 of file Gates_block.cpp.
Append a CH gate (i.e.
controlled Hadamard gate) gate to the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
controlled Hadamard gate) operation to the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1377 of file Gates_block.cpp.
Add a C_NOT gate gate to the front of the list of gates.
Add a C_NOT gate operation to the front of the list of gates.
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1172 of file Gates_block.cpp.
Append a CNOT gate gate to the list of gates.
Append a C_NOT gate operation to the list of gates.
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1155 of file Gates_block.cpp.
|
inherited |
Add a Composite gate to the front of the list of gates.
Definition at line 1499 of file Gates_block.cpp.
|
inherited |
Append a Composite gate to the list of gates.
Definition at line 1487 of file Gates_block.cpp.
Add a CRY gate to the front of the list of gates.
Add a RY gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1080 of file Gates_block.cpp.
Append a CRY gate to the list of gates.
Append a RY gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1064 of file Gates_block.cpp.
Add a CZ gate gate to the front of the list of gates.
Add a CZ gate operation to the front of the list of gates.
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1207 of file Gates_block.cpp.
Append a CZ gate gate to the list of gates.
Append a CZ gate operation to the list of gates.
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1190 of file Gates_block.cpp.
|
inherited |
Add an gate to the front of the list of gates.
Add a gate to the front of the list of gates.
gate | A pointer to a class Gate describing an gate. |
gate | A pointer to a class Gate describing a gate. |
Definition at line 1569 of file Gates_block.cpp.
|
inherited |
Append a general gate to the list of gates.
gate | A pointer to a class Gate describing an gate. |
gate | A pointer to a class Gate describing a gate operation. |
Definition at line 1547 of file Gates_block.cpp.
|
inherited |
Add an array of gates to the front of the list of gates.
gates_in | A list of gate class instances. |
gates_in | A list of operation class instances. |
Definition at line 1421 of file Gates_block.cpp.
|
inherited |
Append a list of gates to the list of gates.
gates_in | A list of gate class instances. |
gates_in | A list of operation class instances. |
Definition at line 1408 of file Gates_block.cpp.
|
inherited |
Add a OUN gate to the front of the list of gates.
Add a ON gate to the front of the list of gates.
Definition at line 1473 of file Gates_block.cpp.
|
inherited |
Append a ON gate to the list of gates.
Definition at line 1461 of file Gates_block.cpp.
|
inherited |
Add a RX gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1016 of file Gates_block.cpp.
|
inherited |
Append a RX gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1003 of file Gates_block.cpp.
|
inherited |
Add a RY gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1046 of file Gates_block.cpp.
|
inherited |
Append a RY gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1032 of file Gates_block.cpp.
|
inherited |
Add a RZ gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1109 of file Gates_block.cpp.
|
inherited |
Add a RZ_P gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1138 of file Gates_block.cpp.
|
inherited |
Append a RZ_P gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1125 of file Gates_block.cpp.
|
inherited |
Append a RZ gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1096 of file Gates_block.cpp.
|
inherited |
Add a SX gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1323 of file Gates_block.cpp.
|
inherited |
Append a SX gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1310 of file Gates_block.cpp.
Add a Sycamore gate (i.e.
Add a Sycamore gate operation to the front of the list of gates.
controlled Hadamard gate) gate to the front of the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1359 of file Gates_block.cpp.
Append a Sycamore gate (i.e.
Append a Sycamore gate operation to the list of gates.
controlled Hadamard gate) gate to the list of gates
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
control_qbit | The identification number of the control qubit. (0 <= target_qbit <= qbit_num-1) |
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1342 of file Gates_block.cpp.
Add a U3 gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Theta | The Theta parameter of the U3 gate |
Phi | The Phi parameter of the U3 gate |
Lambda | The Lambda parameter of the U3 gate |
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Theta | The Theta parameter of the U3 operation |
Phi | The Phi parameter of the U3 operation |
Lambda | The Lambda parameter of the U3 operation |
Definition at line 987 of file Gates_block.cpp.
Append a U3 gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Theta | The Theta parameter of the U3 gate |
Phi | The Phi parameter of the U3 gate |
Lambda | The Lambda parameter of the U3 gate |
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Theta | The Theta parameter of the U3 operation |
Phi | The Phi parameter of the U3 operation |
Lambda | The Lambda parameter of the U3 operation |
Definition at line 971 of file Gates_block.cpp.
|
inherited |
Add a UN gate to the front of the list of gates.
Definition at line 1447 of file Gates_block.cpp.
|
inherited |
Append a UN gate to the list of gates.
Definition at line 1435 of file Gates_block.cpp.
|
inherited |
Add a X gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1235 of file Gates_block.cpp.
|
inherited |
Append a X gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1222 of file Gates_block.cpp.
|
inherited |
Add a Y gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1264 of file Gates_block.cpp.
|
inherited |
Append a Y gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1251 of file Gates_block.cpp.
|
inherited |
Add a Z gate to the front of the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1293 of file Gates_block.cpp.
|
inherited |
Append a Z gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1280 of file Gates_block.cpp.
|
virtualinherited |
Call to evaluate the derivate of the circuit on an inout with respect to all of the free parameters.
parameters | An array of the input parameters. |
input | The input array on which the gate is applied |
Definition at line 695 of file Gates_block.cpp.
|
virtualinherited |
Call to apply the gate on the input array/matrix by input*Gate.
input | The input array on which the gate is applied |
Reimplemented in SX, X, Y, Z, SYC, CH, CNOT, and CZ.
Definition at line 156 of file Gate.cpp.
|
virtualinherited |
Call to apply the gate on the input array/matrix by input*CNOT.
Call to apply the gate on the input array/matrix by input*Gate_block.
input | The input array on which the gate is applied |
Reimplemented in Composite.
Definition at line 590 of file Gates_block.cpp.
Apply an gates on the input matrix.
gate_mtx | The matrix of the gate. |
input_matrix | The input matrix to be transformed. |
Definition at line 1053 of file Decomposition_Base.cpp.
void Decomposition_Base::apply_global_phase_factor | ( | QGD_Complex16 | global_phase_factor, |
Matrix & | u3_gate | ||
) |
Call to apply the global phase to a matrix.
Call to apply global phase of U3 matrices to matrix.
global_phase_factor | The value of the phase |
Definition at line 1636 of file Decomposition_Base.cpp.
void Decomposition_Base::apply_global_phase_factor | ( | ) |
Call to apply the current global phase to the unitary matrix.
global_phase_factor | The value of the phase |
Definition at line 1645 of file Decomposition_Base.cpp.
Call to apply the gate kernel on the input state or unitary from right (no AVX support)
u3_1qbit | The 2x2 kernel of the gate operation |
input | The input matrix on which the transformation is applied |
deriv | Set true to apply derivate transformation, false otherwise |
Definition at line 359 of file Gate.cpp.
|
protectedinherited |
Call to apply the gate kernel on the input state or unitary with optional AVX support.
u3_1qbit | The 2x2 kernel of the gate operation |
input | The input matrix on which the transformation is applied |
deriv | Set true to apply derivate transformation, false otherwise (optional) |
parallel | Set true to apply parallel kernels, false otherwise (optional) |
u3_1qbit | The 2x2 kernel of the gate operation |
input | The input matrix on which the transformation is applied |
deriv | Set true to apply derivate transformation, false otherwise (optional) |
deriv | Set true to apply parallel kernels, false otherwise (optional) |
Definition at line 292 of file Gate.cpp.
Call to apply the gate on the input array/matrix.
input | The input array on which the gate is applied |
parallel | Set true to apply parallel kernels, false otherwise (optional) |
Reimplemented in SX, X, Y, Z, CH, CZ, SYC, and CNOT.
Definition at line 143 of file Gate.cpp.
|
virtualinherited |
Call to apply the gate on the input array/matrix Gates_block*input.
parameters | An array of the input parameters. |
input | The input array on which the gate is applied |
parallel | Set true to apply parallel kernels, false otherwise (optional) |
parameters | An array of parameters to calculate the matrix of the U3 gate. |
input | The input array on which the gate is applied |
parallel | Set true to apply parallel kernels, false otherwise (optional) |
Reimplemented in Composite.
Definition at line 215 of file Gates_block.cpp.
|
inherited |
Call to apply the gate on the input array/matrix by U3*input.
parameters | An array of parameters to calculate the matrix of the U3 gate. |
input | The input array on which the gate is applied |
Definition at line 127 of file Gate.cpp.
|
inherited |
Call to apply the gate on the input array/matrix by U3*input.
parameters | An array of parameters to calculate the matrix of the U3 gate. |
input | The input array on which the gate is applied |
Definition at line 198 of file Gates_block.cpp.
|
inherited |
Calculate the matrix of a U3 gate gate corresponding to the given parameters acting on a single qbit space.
Theta | Real parameter standing for the parameter theta. |
Phi | Real parameter standing for the parameter phi. |
Lambda | Real parameter standing for the parameter lambda. |
ThetaOver2 | Real parameter standing for the parameter theta. |
Phi | Real parameter standing for the parameter phi. |
Lambda | Real parameter standing for the parameter lambda. |
Definition at line 439 of file Gate.cpp.
|
virtualinherited |
void Decomposition_Base::calculate_new_global_phase_factor | ( | QGD_Complex16 | global_phase_factor_new | ) |
Calculate the new global phase of the Unitary matrix after removing a trivial U3 matrix.
Call to calculate new global phase.
global_phase_factor_new | global phase calculated from the product of two U3 matrices |
global_phase_factor | The value of the phase |
Definition at line 1609 of file Decomposition_Base.cpp.
bool Decomposition_Base::check_optimization_solution | ( | ) |
check_optimization_solution
Checks the convergence of the optimization problem.
Definition at line 689 of file Decomposition_Base.cpp.
|
virtualinherited |
Create a clone of the present class.
Reimplemented from Gate.
Reimplemented in Sub_Matrix_Decomposition, and Composite.
Definition at line 2289 of file Gates_block.cpp.
|
inherited |
Call to append the gates of an gate block to the current block.
Call to append the gates of a gate block to the current block.
op_block | A pointer to an instance of class Gate_block |
op_block | A pointer to an instance of class Gates_block |
Definition at line 2200 of file Gates_block.cpp.
|
inherited |
Call to determine, whether the circuit contains daptive gate or not.
Definition at line 2347 of file Gates_block.cpp.
Call to determine, whether the sub-circuit at a given position in the circuit contains daptive gate or not.
idx | The position of the gate to be checked. |
Definition at line 2374 of file Gates_block.cpp.
void Decomposition_Base::export_unitary | ( | std::string & | filename | ) |
exports unitary matrix to binary file
Call to export the unitary (with possible phase shift) into a binary file.
filename | file to be exported to |
filename | The path to the file where the unitary is expored |
Definition at line 1656 of file Decomposition_Base.cpp.
|
inherited |
Call to extract the gates stored in the class.
op_block | An instance of Gates_block class in which the gates will be stored. (The current gates will be erased) |
Definition at line 2310 of file Gates_block.cpp.
void Decomposition_Base::finalize_decomposition | ( | ) |
After the main optimization problem is solved, the indepent qubits can be rotated into state |0> by this def.
The constructed gates are added to the array of gates needed to the decomposition of the input unitary.
Definition at line 232 of file Decomposition_Base.cpp.
|
inherited |
Definition at line 432 of file Gates_block.cpp.
|
inherited |
double Decomposition_Base::get_current_minimum | ( | ) |
Call to get the obtained minimum of the cost function.
Definition at line 1581 of file Decomposition_Base.cpp.
Matrix Decomposition_Base::get_decomposed_matrix | ( | ) |
Calculate the decomposed matrix resulted by the effect of the optimized gates on the unitary Umtx.
Definition at line 913 of file Decomposition_Base.cpp.
double Decomposition_Base::get_decomposition_error | ( | ) |
Call to get the error of the decomposition.
Definition at line 1568 of file Decomposition_Base.cpp.
Matrix Decomposition_Base::get_finalizing_gates | ( | Matrix & | mtx, |
Gates_block * | finalizing_gates, | ||
double * | finalizing_parameters | ||
) |
This method determine the gates needed to rotate the indepent qubits into the state |0>
mtx | The unitary describing indepent qubits. The resulting matrix is returned by this pointer |
finalizing_gates | Pointer pointig to a block of gates containing the final gates. |
finalizing_parameters | Parameters corresponding to the finalizing gates. |
Definition at line 304 of file Decomposition_Base.cpp.
Call to prepare the optimized gates to export.
n | Integer labeling the n-th oepration (n>=0). |
Definition at line 1527 of file Decomposition_Base.cpp.
|
inherited |
Call to get the number of gates grouped in the class.
Definition at line 1770 of file Gates_block.cpp.
|
inherited |
Call to get the number of the individual gate types in the list of gates.
Definition at line 1620 of file Gates_block.cpp.
std::vector< Matrix, tbb::cache_aligned_allocator< Matrix > > Decomposition_Base::get_gate_products | ( | double * | parameters, |
std::vector< Gate *>::iterator | gates_it, | ||
int | num_of_gates | ||
) |
Calculate the list of gate gate matrices such that the i>0-th element in the result list is the product of the gates of all 0<=n<i gates from the input list and the 0th element in the result list is the identity.
parameters | An array containing the parameters of the U3 gates. |
gates_it | An iterator pointing to the forst gate. |
num_of_gates | The number of gates involved in the calculations |
parameters | An array containing the parameters of the gates. |
gates_it | An iterator pointing to the first gate. |
num_of_gates | The number of gates involved in the calculations |
Definition at line 928 of file Decomposition_Base.cpp.
|
inherited |
Call to get the gates stored in the class.
Definition at line 2177 of file Gates_block.cpp.
QGD_Complex16 Decomposition_Base::get_global_phase_factor | ( | ) |
Get the global phase of the Unitary matrix.
Call to get global phase.
global_phase_factor | The value of the phase |
Definition at line 1618 of file Decomposition_Base.cpp.
|
inherited |
Call to get the qubits involved in the gates stored in the block of gates.
Definition at line 2145 of file Gates_block.cpp.
|
inherited |
|
inherited |
Call to retrieve the gate matrix (Which is the product of all the gate matrices stored in the gate block)
Call to retrieve the operation matrix (Which is the product of all the operation matrices stored in the operation block)
parameters | An array pointing to the parameters of the gates |
parameters | An array pointing to the parameters of the gates |
Definition at line 152 of file Gates_block.cpp.
|
inherited |
Call to retrieve the gate matrix (Which is the product of all the gate matrices stored in the gate block)
Call to retrieve the operation matrix (Which is the product of all the operation matrices stored in the operation block)
parameters | An array pointing to the parameters of the gates |
parallel | Set true to apply parallel kernels, false otherwise |
parameters | An array pointing to the parameters of the gates |
parallel | Set true to apply parallel kernels, false otherwise |
Definition at line 168 of file Gates_block.cpp.
Matrix_real Decomposition_Base::get_optimized_parameters | ( | ) |
Call to get the optimized parameters.
Definition at line 725 of file Decomposition_Base.cpp.
void Decomposition_Base::get_optimized_parameters | ( | double * | ret | ) |
Call to get the optimized parameters.
ret | Preallocated array to store the optimized parameters. |
Definition at line 735 of file Decomposition_Base.cpp.
|
inherited |
Definition at line 525 of file Gates_block.cpp.
|
inherited |
Call to get the number of free parameters.
Definition at line 1759 of file Gates_block.cpp.
std::string Decomposition_Base::get_project_name | ( | ) |
Call to get the current name of the project.
Definition at line 1591 of file Decomposition_Base.cpp.
|
inherited |
|
inherited |
Call to evaluate the reduced densiy matrix.
parameters | An array of parameters to calculate the entropy |
input_state | The input state on which the gate structure is applied |
qbit_list | Subset of qubits for which the entropy should be calculated. (Should conatin unique elements) Returns with the reduced density matrix. |
Definition at line 2401 of file Gates_block.cpp.
|
inherited |
Call to evaluate the seconf Rényi entropy.
The quantum circuit is applied on an input state input. The entropy is evaluated for the transformed state.
parameters | An array of parameters to calculate the entropy |
input_state | The input state on which the gate structure is applied |
qbit_list | Subset of qubits for which the entropy should be calculated. (Should conatin unique elements) Returns with the calculated entropy |
Definition at line 2577 of file Gates_block.cpp.
|
inherited |
Matrix Decomposition_Base::get_transformed_matrix | ( | Matrix_real & | parameters, |
std::vector< Gate *>::iterator | gates_it, | ||
int | num_of_gates | ||
) |
Calculate the transformed matrix resulting by an array of gates on the matrix Umtx.
parameters | An array containing the parameters of the U3 gates. |
gates_it | An iterator pointing to the first gate to be applied on the initial matrix. |
num_of_gates | The number of gates to be applied on the initial matrix |
Definition at line 771 of file Decomposition_Base.cpp.
Matrix Decomposition_Base::get_transformed_matrix | ( | Matrix_real & | parameters, |
std::vector< Gate *>::iterator | gates_it, | ||
int | num_of_gates, | ||
Matrix & | initial_matrix | ||
) |
Calculate the transformed matrix resulting by an array of gates on a given initial matrix.
parameters | An array containing the parameters of the U3 gates. |
gates_it | An iterator pointing to the first gate to be applied on the initial matrix. |
num_of_gates | The number of gates to be applied on the initial matrix |
initial_matrix | The initial matrix wich is transformed by the given gates. |
parameters | An array containing the parameters of the U3 gates. |
gates_it | An iterator pointing to the first gate to be applied on the initial matrix. |
num_of_gates | The number of gates to be applied on the initial matrix |
initial_matrix | The initial matrix wich is transformed by the given gates. (by deafult it is set to the attribute Umtx) |
Definition at line 786 of file Decomposition_Base.cpp.
|
inherited |
Matrix Decomposition_Base::get_Umtx | ( | ) |
Call to retrive a pointer to the unitary to be transformed.
Definition at line 708 of file Decomposition_Base.cpp.
int Decomposition_Base::get_Umtx_size | ( | ) |
Call to get the size of the unitary to be transformed.
Definition at line 717 of file Decomposition_Base.cpp.
Matrix Decomposition_Base::import_unitary_from_binary | ( | std::string & | filename | ) |
Import a Unitary matrix from a file.
Call to import the unitary (with possible phase shift) into a binary file.
filename | .binary file to read |
filename | The path to the file from which the unitary is imported. |
Definition at line 1682 of file Decomposition_Base.cpp.
|
static |
Initializes default layer numbers.
Definition at line 1196 of file Decomposition_Base.cpp.
Call to insert a gate at a given position.
gate | A pointer to a class Gate describing a gate. |
idx | The position where to insert the gate. |
Definition at line 1595 of file Gates_block.cpp.
void Decomposition_Base::list_gates | ( | int | start_index | ) |
Call to print the gates decomposing the initial unitary.
These gates brings the intial matrix into unity.
start_index | The index of the first gate |
Definition at line 289 of file Decomposition_Base.cpp.
|
inherited |
Call to print the list of gates stored in the block of gates for a specific set of parameters.
parameters | The parameters of the gates that should be printed. |
start_index | The ordinal number of the first gate. |
Definition at line 1780 of file Gates_block.cpp.
|
virtual |
This is an abstact definition of function giving the cost functions measuring the entaglement of the qubits.
When the qubits are indepent, teh cost function should be zero.
parameters | An array of the free parameters to be optimized. (The number of the free paramaters should be equal to the number of parameters in one sub-layer) |
Definition at line 677 of file Decomposition_Base.cpp.
|
virtualinherited |
Calculate the matrix of a U3 gate gate corresponding to the given parameters acting on a single qbit space.
Set static values for the angles and constans parameters for calculating the matrix of the gates.
Theta | Real parameter standing for the parameter theta. |
Phi | Real parameter standing for the parameter phi. |
Lambda | Real parameter standing for the parameter lambda. |
ThetaOver2 | Real parameter standing for the parameter theta. |
Phi | Real parameter standing for the parameter phi. |
Lambda | Real parameter standing for the parameter lambda. |
void Decomposition_Base::prepare_gates_to_export | ( | ) |
Call to prepare the optimized gates to export.
The gates are stored in the attribute gates
Definition at line 1213 of file Decomposition_Base.cpp.
std::vector< Gate * > Decomposition_Base::prepare_gates_to_export | ( | std::vector< Gate *> | ops, |
double * | parameters | ||
) |
Call to prepare the optimized gates to export.
ops | A list of gates |
parameters | The parameters of the gates |
Definition at line 1231 of file Decomposition_Base.cpp.
std::vector< Gate * > Decomposition_Base::prepare_gates_to_export | ( | Gates_block * | block_op, |
double * | parameters | ||
) |
Call to prepare the gates of an gate block to export.
block_op | A pointer to a block of gates |
parameters | The parameters of the gates |
Definition at line 1509 of file Decomposition_Base.cpp.
|
inherited |
Call to print output messages in the function of the verbosity level.
sstream | The stringstream input to store the output messages. |
verbose_level | Integer input. High level means write more to the standart output, 0 means write nothing. The default value is set to 1. |
Definition at line 55 of file logging.cpp.
|
inherited |
Call to release one gate in the list.
Definition at line 134 of file Gates_block.cpp.
|
inherited |
Call to release the stored gates.
Definition at line 98 of file Gates_block.cpp.
|
virtual |
Call to reorder the qubits in the matrix of the gate.
qbit_list | The reordered list of qubits spanning the matrix |
Reimplemented from Gates_block.
Definition at line 1102 of file Decomposition_Base.cpp.
|
inherited |
void Decomposition_Base::set_convergence_threshold | ( | double | convergence_threshold_in | ) |
Call to set the threshold of convergence in the optimization processes.
convergence_threshold_in | The value of the threshold. |
Definition at line 1558 of file Decomposition_Base.cpp.
|
inherited |
Call to set the debugfile name.
debugfile | String variable. Set the debugfile name. |
Definition at line 95 of file logging.cpp.
void Decomposition_Base::set_global_phase | ( | double | new_global_phase | ) |
Call to set global phase.
global_phase_factor_new | The value of the new phase |
Definition at line 1626 of file Decomposition_Base.cpp.
Set the number of iteration loops during the subdecomposition of the n-th qubit.
n | The number of qubits for which number of iteration loops should be used in the subdecomposition., |
iteration_loops_in | The number of iteration loops in each sted of the subdecomposition. |
Definition at line 1161 of file Decomposition_Base.cpp.
Set the number of iteration loops during the subdecomposition of the qbit-th qubit.
iteration_loops_in | An <int,int> map containing the number of iteration loops for the individual subdecomposition processes |
Definition at line 1181 of file Decomposition_Base.cpp.
|
inherited |
void Decomposition_Base::set_max_iteration | ( | int | max_outer_iterations_in | ) |
Call to set the maximal number of the iterations in the optimization process.
max_outer_iterations_in | maximal number of iteartions in the optimization process |
Definition at line 224 of file Decomposition_Base.cpp.
Set the maximal number of layers used in the subdecomposition of the n-th qubit.
n | The number of qubits for which the maximal number of layers should be used in the subdecomposition. |
max_layer_num_in | The maximal number of the gate layers used in the subdecomposition. |
Definition at line 1066 of file Decomposition_Base.cpp.
Set the maximal number of layers used in the subdecomposition of the n-th qubit.
max_layer_num_in | An <int,int> map containing the maximal number of the gate layers used in the subdecomposition. |
Definition at line 1086 of file Decomposition_Base.cpp.
void Decomposition_Base::set_optimization_blocks | ( | int | optimization_block_in | ) |
Call to set the number of gate blocks to be optimized in one shot.
optimization_block_in | The number of gate blocks to be optimized in one shot |
Definition at line 216 of file Decomposition_Base.cpp.
void Decomposition_Base::set_optimization_tolerance | ( | double | tolerance_in | ) |
Call to set the tolerance of the optimization processes.
tolerance_in | The value of the tolerance. |
tolerance_in | The value of the tolerance. The error of the decomposition would scale with the square root of this value. |
Definition at line 1546 of file Decomposition_Base.cpp.
void Decomposition_Base::set_optimized_parameters | ( | double * | parameters, |
int | num_of_parameters | ||
) |
Call to set the optimized parameters for initial optimization.
ret | Preallocated array to store the optimized parameters. |
Definition at line 745 of file Decomposition_Base.cpp.
void Decomposition_Base::set_project_name | ( | std::string & | project_name_new | ) |
Call to set the name of the project.
project_name_new | pointer to the new project name |
Definition at line 1599 of file Decomposition_Base.cpp.
|
virtual |
Set the number of qubits spanning the matrix of the gates stored in the block of gates.
qbit_num_in | The number of qubits spanning the matrices. |
Reimplemented from Gates_block.
Definition at line 1715 of file Decomposition_Base.cpp.
|
inherited |
|
inherited |
Call to set the verbose attribute.
verbose_in | Integer variable. Set the number to specify the verbosity level for output messages. |
Definition at line 85 of file logging.cpp.
|
virtual |
Abstarct function to be used to solve a single sub-layer optimization problem.
The optimalized parameters are stored in attribute optimized_parameters.
'num_of_parameters' | The number of free parameters to be optimized |
solution_guess_gsl | Array containing the free parameters to be optimized. |
The optimalized parameters are stored in attribute optimized_parameters.
'num_of_parameters' | The number of free parameters to be optimized |
solution_guess | Array containing the free parameters to be optimized. |
Reimplemented in Optimization_Interface, and Sub_Matrix_Decomposition.
Definition at line 666 of file Decomposition_Base.cpp.
void Decomposition_Base::solve_optimization_problem | ( | double * | solution_guess, |
int | solution_guess_num | ||
) |
This method can be used to solve the main optimization problem which is devidid into sub-layer optimization processes.
This method can be used to solve the main optimization problem which is divided into sub-layer optimization processes.
(The aim of the optimization problem is to disentangle one or more qubits) The optimalized parameters are stored in attribute optimized_parameters.
solution_guess | An array of the guessed parameters |
solution_guess_num | The number of guessed parameters. (not necessarily equal to the number of free parameters) |
Definition at line 384 of file Decomposition_Base.cpp.
|
protectedinherited |
Definition at line 57 of file Gates_block.h.
|
protectedinherited |
Definition at line 58 of file Gates_block.h.
std::map<std::string, Config_Element> Decomposition_Base::config |
config metadata utilized during the optimization
Definition at line 104 of file Decomposition_Base.h.
|
protectedinherited |
|
protected |
The convergence threshold in the optimization process.
Definition at line 155 of file Decomposition_Base.h.
|
protected |
The current minimum of the optimization problem.
Definition at line 137 of file Decomposition_Base.h.
|
inherited |
|
inherited |
|
protected |
error of the final decomposition
Definition at line 128 of file Decomposition_Base.h.
|
protected |
The optimized parameters for the gates.
logical value describing whether the decomposition was finalized or not (i.e. whether the decomposed qubits were rotated into the state |0> or not)
Definition at line 125 of file Decomposition_Base.h.
|
protected |
number of finalizing (deterministic) opertaions rotating the disentangled qubits into state |0>.
Definition at line 131 of file Decomposition_Base.h.
|
protected |
the number of the finalizing (deterministic) parameters of gates rotating the disentangled qubits into state |0>.
Definition at line 134 of file Decomposition_Base.h.
|
protectedinherited |
Definition at line 53 of file Gates_block.h.
|
protectedinherited |
boolean variable indicating whether the circuit was already partitioned or not
Definition at line 52 of file Gates_block.h.
|
protectedinherited |
The list of stored gates.
Definition at line 44 of file Gates_block.h.
|
protected |
Standard mersenne_twister_engine seeded with rd()
Definition at line 159 of file Decomposition_Base.h.
QGD_Complex16 Decomposition_Base::global_phase_factor |
The global phase.
Definition at line 98 of file Decomposition_Base.h.
|
protected |
The global target minimum of the optimization problem.
Definition at line 140 of file Decomposition_Base.h.
|
protected |
type to guess the initial values for the optimization. Possible values: ZEROS=0, RANDOM=1, CLOSE_TO_ZERO=2
Definition at line 149 of file Decomposition_Base.h.
|
protectedinherited |
Definition at line 56 of file Gates_block.h.
A map of <int n: int num> indicating the number of iteration in each step of the decomposition.
Definition at line 113 of file Decomposition_Base.h.
|
protectedinherited |
number of gate layers
Definition at line 46 of file Gates_block.h.
|
protectedinherited |
|
protectedinherited |
maximal number of qubits in partitions
Definition at line 55 of file Gates_block.h.
A map of <int n: int num> indicating that how many layers should be used in the subdecomposition process for the subdecomposing of the nth qubits.
Definition at line 110 of file Decomposition_Base.h.
A map of <int n: int num> indicating that how many layers should be used in the subdecomposition process by default for the subdecomposing of the nth qubits.
Definition at line 92 of file Decomposition_Base.h.
|
protected |
Maximal number of iterations allowed in the optimization process.
Definition at line 146 of file Decomposition_Base.h.
|
protected |
Store the number of OpenMP threads. (During the calculations OpenMP multithreading is turned off.)
Definition at line 152 of file Decomposition_Base.h.
int Decomposition_Base::optimization_block |
number of gate blocks used in one shot of the optimization process
Definition at line 89 of file Decomposition_Base.h.
|
protected |
logical value describing whether the optimization problem was solved or not
Definition at line 143 of file Decomposition_Base.h.
double Decomposition_Base::optimization_tolerance |
The maximal allowed error of the optimization problem (The error of the decomposition would scale with the square root of this value)
Definition at line 95 of file Decomposition_Base.h.
|
protected |
The optimized parameters for the gates.
Definition at line 119 of file Decomposition_Base.h.
|
protectedinherited |
std::string Decomposition_Base::project_name |
the name of the project
Definition at line 101 of file Decomposition_Base.h.
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protected |
The unitary to be decomposed.
Definition at line 116 of file Decomposition_Base.h.
|
inherited |