Sequential Quantum Gate Decomposer
v1.9.3
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) |
Append a Adaptive gate to the list of gates. More... | |
void | add_adaptive_to_front (int target_qbit, int control_qbit) |
Add a Adaptive gate to the front of the list of gates. More... | |
void | add_ch (int target_qbit, int control_qbit) |
Append a CH gate (i.e. More... | |
void | add_ch_to_front (int target_qbit, int control_qbit) |
Add a CH gate (i.e. More... | |
void | add_child (Gate *child) |
Call to add a child gate to the current gate. More... | |
void | add_cnot (int target_qbit, int control_qbit) |
Append a CNOT gate gate to the list of gates. More... | |
void | add_cnot_to_front (int target_qbit, int control_qbit) |
Add a C_NOT gate gate to the front of the list of gates. More... | |
void | add_composite () |
Append a Composite gate to the list of gates. More... | |
void | add_composite_to_front () |
Add a Composite gate to the front of the list of gates. More... | |
void | add_cr (int target_qbit, int control_qbit) |
Append a CR gate to the list of gates. More... | |
void | add_cr_to_front (int target_qbit, int control_qbit) |
Add a CR gate to the front of the list of gates. More... | |
void | add_crot (int target_qbit, int control_qbit) |
Append a CROT gate gate to the list of gates. More... | |
void | add_crot_to_front (int target_qbit, int control_qbit) |
Add a CROT gate gate to the front of the list of gates. More... | |
void | add_cry (int target_qbit, int control_qbit) |
Append a CRY gate to the list of gates. More... | |
void | add_cry_to_front (int target_qbit, int control_qbit) |
Add a CRY gate to the front of the list of gates. More... | |
void | add_cz (int target_qbit, int control_qbit) |
Append a CZ gate gate to the list of gates. More... | |
void | add_cz_nu (int target_qbit, int control_qbit) |
Append a CZ_NU gate to the list of gates. More... | |
void | add_cz_nu_to_front (int target_qbit, int control_qbit) |
Add a CZ_NU gate to the front of the list of gates. More... | |
void | add_cz_to_front (int target_qbit, int control_qbit) |
Add a CZ gate gate to the front of the list of gates. More... | |
void | add_gate (Gate *gate) |
Append a general gate to the list of gates. More... | |
void | add_gate_nums (std::map< std::string, int > &gate_nums) |
Call to add the number of the individual gate types in the circuit to the map given in the argument. More... | |
void | add_gate_to_front (Gate *gate) |
Add an gate to the front of the list of gates. More... | |
void | add_gates (std::vector< Gate *> gates_in) |
Append a list of gates to the list of gates. More... | |
void | add_gates_to_front (std::vector< Gate *> gates_in) |
Add an array of gates to the front of the list of gates. More... | |
void | add_h (int target_qbit) |
Append a Hadamard gate to the list of gates. More... | |
void | add_h_to_front (int target_qbit) |
Add a Hadamard gate to the front of the list of gates. More... | |
void | add_on () |
Append a ON gate to the list of gates. More... | |
void | add_on_to_front () |
Add a OUN gate to the front of the list of gates. More... | |
void | add_parent (Gate *parent) |
Call to add a parent gate to the current gate. More... | |
void | add_r (int target_qbit) |
Append a R gate to the list of gates. More... | |
void | add_r_to_front (int target_qbit) |
Add a R gate to the front of the list of gates. More... | |
void | add_rx (int target_qbit) |
Append a RX gate to the list of gates. More... | |
void | add_rx_to_front (int target_qbit) |
Add a RX gate to the front of the list of gates. More... | |
void | add_ry (int target_qbit) |
Append a RY gate to the list of gates. More... | |
void | add_ry_to_front (int target_qbit) |
Add a RY gate to the front of the list of gates. More... | |
void | add_rz (int target_qbit) |
Append a RZ gate to the list of gates. More... | |
void | add_rz_to_front (int target_qbit) |
Add a RZ gate to the front of the list of gates. More... | |
void | add_sx (int target_qbit) |
Append a SX gate to the list of gates. More... | |
void | add_sx_to_front (int target_qbit) |
Add a SX gate to the front of the list of gates. More... | |
void | add_syc (int target_qbit, int control_qbit) |
Append a Sycamore gate (i.e. More... | |
void | add_syc_to_front (int target_qbit, int control_qbit) |
Add a Sycamore gate (i.e. More... | |
void | add_t (int target_qbit) |
Append a T gate to the list of gates. More... | |
void | add_t_to_front (int target_qbit) |
Add a T gate to the front of the list of gates. More... | |
void | add_tdg (int target_qbit) |
Append a Tdg gate to the list of gates. More... | |
void | add_tdg_to_front (int target_qbit) |
Add a Tdg gate to the front of the list of gates. More... | |
void | add_u1 (int target_qbit) |
Append a U1 gate to the list of gates. More... | |
void | add_u1_to_front (int target_qbit) |
Add a U1 gate to the front of the list of gates. More... | |
void | add_u2 (int target_qbit) |
Append a U2 gate to the list of gates. More... | |
void | add_u2_to_front (int target_qbit) |
Add a U2 gate to the front of the list of gates. More... | |
void | add_u3 (int target_qbit) |
Append a U3 gate to the list of gates. More... | |
void | add_u3_to_front (int target_qbit) |
Add a U3 gate to the front of the list of gates. More... | |
void | add_un () |
Append a UN gate to the list of gates. More... | |
void | add_un_to_front () |
Add a UN gate to the front of the list of gates. More... | |
void | add_x (int target_qbit) |
Append a X gate to the list of gates. More... | |
void | add_x_to_front (int target_qbit) |
Add a X gate to the front of the list of gates. More... | |
void | add_y (int target_qbit) |
Append a Y gate to the list of gates. More... | |
void | add_y_to_front (int target_qbit) |
Add a Y gate to the front of the list of gates. More... | |
void | add_z (int target_qbit) |
Append a Z gate to the list of gates. More... | |
void | add_z_to_front (int target_qbit) |
Add a Z gate to the front of the list of gates. More... | |
virtual std::vector< Matrix > | apply_derivate_to (Matrix_real ¶meters_mtx, Matrix &input, int parallel) |
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_real ¶meters_mtx, Matrix &input) |
Call to apply the gate on the input array/matrix by input*CNOT. More... | |
virtual void | apply_from_right (Matrix &input) |
Call to apply the gate on the input array/matrix by input*Gate. 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_real ¶meters_mtx, Matrix &input, int parallel=0) |
Call to apply the gate on the input array/matrix Gates_block*input. More... | |
virtual void | apply_to (Matrix &input, int parallel) |
Call to apply the gate on the input array/matrix. More... | |
void | apply_to_list (Matrix_real ¶meters, std::vector< Matrix > &inputs, int parallel) |
Call to apply the gate on the input array/matrix by U3*input. More... | |
virtual void | apply_to_list (std::vector< Matrix > &inputs, int parallel) |
Call to apply the gate on a list of inputs. More... | |
virtual 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... | |
void | clear_children () |
Call to erase data on children. More... | |
void | clear_parents () |
Call to erase data on parents. 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... | |
Gates_block * | create_remapped_circuit (const std::map< int, int > &qbit_map) |
Call to create a new circuit with remapped qubits. More... | |
Gates_block * | create_remapped_circuit (const std::map< int, int > &qbit_map, const int qbit_num_) |
Call to create a new circuit with remapped qubits. 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 | determine_children (Gate *gate) |
Call to obtain the child gates in the circuit. More... | |
void | determine_parents (Gate *gate) |
Call to obtain the parent gates in the circuit. 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... | |
virtual Matrix_real | extract_parameters (Matrix_real ¶meters) |
Call to extract parameters from the parameter array corresponding to the circuit, in which the gate is embedded. More... | |
void | fragment_circuit () |
std::vector< Gate * > | get_children () |
Call to get the children of the current gate. More... | |
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... | |
Gates_block * | get_flat_circuit () |
Method to generate a flat circuit. More... | |
Gate * | get_gate (int idx) |
Call to get the gates stored in the class. More... | |
int | get_gate_num () |
Call to get the number of gates grouped in the class. More... | |
std::map< std::string, int > | get_gate_nums () |
Call to get the number of the individual gate types in the list of gates. 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 (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, int parallel) |
Call to retrieve the gate matrix (Which is the product of all the gate matrices stored in the gate block) More... | |
virtual Matrix | get_matrix () |
Call to retrieve the operation matrix. More... | |
virtual Matrix | get_matrix (int parallel) |
Call to retrieve the operation matrix. More... | |
std::string | get_name () |
Call to get the name label of the gate. 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... | |
int | get_parallel_configuration () |
Get the parallel configuration from the config. More... | |
void | get_parameter_max (Matrix_real &range_max) |
int | get_parameter_num () |
Call to get the number of free parameters. More... | |
int | get_parameter_start_idx () |
Call to get the starting index of the parameters in the parameter array corresponding to the circuit in which the current gate is incorporated. More... | |
std::vector< Gate * > | get_parents () |
Call to get the parents of the current gate. 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... | |
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 | 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 | reset_dependency_graph () |
Method to reset the dependency graph of the gates in the circuit. More... | |
void | reset_parameter_start_indices () |
Method to reset the parameter start indices of gate operations incorporated in the circuit. More... | |
void | set_children (std::vector< Gate *> &children_) |
Call to set the children of the current 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_parameter_start_idx (int start_idx) |
Call to set the starting index of the parameters in the parameter array corresponding to the circuit in which the current gate is incorporated. More... | |
void | set_parents (std::vector< Gate *> &parents_) |
Call to set the parents of the current gate. 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, int parallel=0) |
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 |
std::vector< Gate * > | children |
list of child gates to be applied after this current gate More... | |
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... | |
std::string | name |
A string labeling the gate operation. 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 | parameter_start_idx |
the index in the parameter array (corrensponding to the encapsulated circuit) where the gate parameters begin (if gates are placed into a circuit a single parameter array is used to execute the whole circuit) More... | |
std::vector< Gate * > | parents |
list of parent gates to be applied in the circuit prior to this current gate 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 87 of file Decomposition_Base.h.
Decomposition_Base::Decomposition_Base | ( | ) |
Nullary constructor of the class.
Definition at line 34 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 117 of file Decomposition_Base.cpp.
|
virtual |
Destructor of the class.
Definition at line 208 of file Decomposition_Base.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 1577 of file Gates_block.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 1592 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 1438 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 1455 of file Gates_block.cpp.
|
inherited |
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 1124 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 1141 of file Gates_block.cpp.
|
inherited |
Append a Composite gate to the list of gates.
Definition at line 1548 of file Gates_block.cpp.
|
inherited |
Add a Composite gate to the front of the list of gates.
Definition at line 1560 of file Gates_block.cpp.
Append a CR 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 998 of file Gates_block.cpp.
Add a CR 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 1014 of file Gates_block.cpp.
Append a CROT gate gate to the list of gates.
Append a CROT 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) |
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 1030 of file Gates_block.cpp.
Add a CROT gate gate to the front of the list of gates.
Add a CROT 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) |
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 1046 of file Gates_block.cpp.
Append a CRY 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 967 of file Gates_block.cpp.
Add a CRY 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 983 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 1159 of file Gates_block.cpp.
Append a CZ_NU 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 1061 of file Gates_block.cpp.
Add a CZ_NU 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 1077 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 1176 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 1608 of file Gates_block.cpp.
|
inherited |
Call to add the number of the individual gate types in the circuit to the map given in the argument.
A | map<gate_name, gate_count> describing the number of the individual gate types |
Definition at line 1699 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 1638 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 1469 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 1482 of file Gates_block.cpp.
|
inherited |
Append a Hadamard gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1190 of file Gates_block.cpp.
|
inherited |
Add a Hadamard 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 1203 of file Gates_block.cpp.
|
inherited |
Append a ON gate to the list of gates.
Definition at line 1522 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 1534 of file Gates_block.cpp.
|
inherited |
|
inherited |
Append a R gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 907 of file Gates_block.cpp.
|
inherited |
Add a R 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 920 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 880 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 893 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 935 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 949 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 1093 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 1106 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 1371 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 1384 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 1403 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 1420 of file Gates_block.cpp.
|
inherited |
Append a T gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1309 of file Gates_block.cpp.
|
inherited |
Add a T 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 1322 of file Gates_block.cpp.
|
inherited |
Append a Tdg gate to the list of gates.
target_qbit | The identification number of the targt qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 1339 of file Gates_block.cpp.
|
inherited |
Add a Tdg 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 1352 of file Gates_block.cpp.
|
inherited |
Append a U1 gate to the list of gates.
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 801 of file Gates_block.cpp.
|
inherited |
Add a U1 gate to the front of the list of gates.
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 814 of file Gates_block.cpp.
|
inherited |
Append a U2 gate to the list of gates.
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 827 of file Gates_block.cpp.
|
inherited |
Add a U2 gate to the front of the list of gates.
target_qbit | The identification number of the target qubit. (0 <= target_qbit <= qbit_num-1) |
Definition at line 840 of file Gates_block.cpp.
|
inherited |
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) |
Definition at line 853 of file Gates_block.cpp.
|
inherited |
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) |
Definition at line 866 of file Gates_block.cpp.
|
inherited |
Append a UN gate to the list of gates.
Definition at line 1496 of file Gates_block.cpp.
|
inherited |
Add a UN gate to the front of the list of gates.
Definition at line 1508 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 1221 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 1234 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 1250 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 1263 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 1279 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 1292 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 |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP (NOT IMPLEMENTED YET) and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Definition at line 698 of file Gates_block.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 557 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, H, X, Y, Z, T, Tdg, SYC, CH, CNOT, and CZ.
Definition at line 285 of file Gate.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 683 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 939 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 948 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 613 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) |
parallel | Set 0 for sequential execution (default), 1 for parallel execution with OpenMP and 2 for parallel with TBB (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) |
parallel | Set 0 for sequential execution (default), 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Definition at line 537 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 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (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 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Reimplemented in Composite.
Definition at line 236 of file Gates_block.cpp.
Call to apply the gate on the input array/matrix.
input | The input array on which the gate is applied |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Reimplemented in SX, H, X, Y, Z, T, Tdg, CH, CZ, SYC, and CNOT.
Definition at line 237 of file Gate.cpp.
|
virtualinherited |
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. |
inputs | The input array on which the gate is applied |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
parameters | An array of parameters to calculate the matrix of the U3 gate. |
input | The input array on which the gate is applied |
Reimplemented from Gate.
Definition at line 203 of file Gates_block.cpp.
Call to apply the gate on a list of inputs.
inputs | The input array on which the gate is applied |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Definition at line 187 of file Gate.cpp.
|
virtualinherited |
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 695 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 912 of file Decomposition_Base.cpp.
bool Decomposition_Base::check_optimization_solution | ( | ) |
check_optimization_solution
Checks the convergence of the optimization problem.
Definition at line 587 of file Decomposition_Base.cpp.
|
inherited |
|
inherited |
|
virtualinherited |
Create a clone of the present class.
Reimplemented from Gate.
Reimplemented in Sub_Matrix_Decomposition, and Composite.
Definition at line 2379 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 circuit.
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 2314 of file Gates_block.cpp.
|
inherited |
Call to determine, whether the circuit contains daptive gate or not.
Definition at line 2445 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 2472 of file Gates_block.cpp.
|
inherited |
Call to create a new circuit with remapped qubits.
qbit_map | The map to reorder the qbits in a form of map: {int(initial_qbit): int(remapped_qbit)}. |
Definition at line 2048 of file Gates_block.cpp.
|
inherited |
Call to create a new circuit with remapped qubits.
qbit_map | The map to reorder the qbits in a form of map: {int(initial_qbit): int(remapped_qbit)}. . |
qbit_num | The number of qubits in the remapped circuit |
Definition at line 2062 of file Gates_block.cpp.
|
inherited |
|
protected |
The unitary to be decomposed.
Definition at line 120 of file Decomposition_Base.h.
|
inherited |