Sequential Quantum Gate Decomposer
v1.9.3
Powerful decomposition of general unitarias into one- and two-qubit gates gates
|
A class representing a U3 gate. More...
#include <X.h>
Public Member Functions | |
void | add_child (Gate *child) |
Call to add a child gate to the current gate. More... | |
void | add_parent (Gate *parent) |
Call to add a parent gate to the current gate. More... | |
virtual std::vector< Matrix > | apply_derivate_to (Matrix_real ¶meters, Matrix &input, int parallel) |
Call to evaluate the derivate of the circuit on an inout with respect to all of the free parameters. More... | |
void | apply_from_right (Matrix &input) |
Call to apply the gate on the input array/matrix by input*U3. More... | |
virtual void | apply_from_right (Matrix_real ¶meters, Matrix &input) |
Call to apply the gate on the input array/matrix by input*U3. More... | |
void | apply_to (Matrix &input, int parallel) |
Call to apply the gate on the input array/matrix by U3*input. More... | |
virtual void | apply_to (Matrix_real ¶meters, Matrix &input, int parallel) |
Call to apply the gate on the input array/matrix by U3*input. 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... | |
Matrix | calc_one_qubit_u3 () |
Set static values for matrix of the gates. 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... | |
void | clear_children () |
Call to erase data on children. More... | |
void | clear_parents () |
Call to erase data on parents. More... | |
X * | clone () |
Call to create a clone of the present 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... | |
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... | |
virtual std::vector< int > | get_involved_qubits () |
Call to get the qubits involved in the gate operation. More... | |
Matrix | get_matrix (Matrix_real ¶meters) |
Call to retrieve the gate matrix. More... | |
Matrix | get_matrix () |
Call to retrieve the gate matrix. More... | |
Matrix | get_matrix (Matrix_real ¶meters, int parallel) |
Call to retrieve the gate matrix. More... | |
Matrix | get_matrix (int parallel) |
Call to retrieve the gate matrix. More... | |
std::string | get_name () |
Call to get the name label of the gate. More... | |
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... | |
int | get_qbit_num () |
Call to get the number of qubits composing the unitary. 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... | |
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 | reorder_qubits (std::vector< int > qbit_list) |
Call to reorder the qubits in the matrix of the gate. 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_debugfile (std::string debugfile) |
Call to set the debugfile name. More... | |
void | set_matrix (Matrix input) |
Call to set the stored matrix in the operation. 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_qbit_num (int qbit_num_in) |
Call to set the number of qubits spanning the matrix of the gate. 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... | |
X () | |
NullaRX constructor of the class. More... | |
X (int qbit_num_in, int target_qbit_in) | |
Constructor of the class. More... | |
~X () | |
Destructor of the class. More... | |
Public Attributes | |
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... | |
int | verbose |
Set the verbosity level of the output messages. 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< 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... | |
int | matrix_size |
The size N of the NxN matrix associated with the operations. More... | |
std::string | name |
A string labeling the gate operation. 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... | |
X::X | ( | ) |
Constructor of the class.
qbit_num_in | The number of qubits spanning the gate. |
target_qbit_in | The 0<=ID<qbit_num of the target qubit. |
theta_in | logical value indicating whether the matrix creation takes an argument theta. |
phi_in | logical value indicating whether the matrix creation takes an argument phi |
lambda_in | logical value indicating whether the matrix creation takes an argument lambda |
Definition at line 64 of file X.cpp.
|
inherited |
|
inherited |
|
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 and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Reimplemented in RY, Adaptive, R, RX, RZ_P, RZ, U1, U2, and CRY.
Definition at line 220 of file U3.cpp.
|
virtual |
Call to apply the gate on the input array/matrix by input*U3.
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 172 of file X.cpp.
|
virtualinherited |
Call to apply the gate on the input array/matrix by input*U3.
parameters | An array of parameters to calculate the matrix of the U3 gate. |
input | The input array on which the gate is applied |
Reimplemented in Adaptive, RY, R, RX, RZ, RZ_P, custom_kernel_1qubit_gate, CRY, U1, and U2.
Definition at line 196 of file U3.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.
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 |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Definition at line 148 of file X.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. |
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 Adaptive, RY, R, RX, RZ, RZ_P, CRY, U1, and U2.
Definition at line 173 of file U3.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. |
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.
Definition at line 141 of file U3.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.
|
virtual |
|
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.
|
inherited |
|
inherited |
|
virtual |
|
virtualinherited |
Call to extract parameters from the parameter array corresponding to the circuit, in which the gate is embedded.
parameters | The parameter array corresponding to the circuit in which the gate is embedded |
Reimplemented from Gate.
Reimplemented in Adaptive, RY, RZ, U1, U2, RX, R, and CRY.
Definition at line 297 of file U3.cpp.
|
inherited |
|
inherited |
|
virtualinherited |
Call to get the qubits involved in the gate operation.
Reimplemented in Gates_block.
Definition at line 386 of file Gate.cpp.
|
virtualinherited |
Call to retrieve the gate matrix.
parameters | An array of parameters to calculate the matrix of the U3 gate. |
Reimplemented from Gate.
Definition at line 102 of file U3.cpp.
|
virtual |
|
virtualinherited |
Call to retrieve the gate matrix.
parameters | An array of parameters to calculate the matrix of the U3 gate. |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Definition at line 115 of file U3.cpp.
Call to retrieve the gate matrix.
parameters | An array of parameters to calculate the matrix of the X gate. |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
parallel | Set 0 for sequential execution, 1 for parallel execution with OpenMP and 2 for parallel with TBB (optional) |
Reimplemented from Gate.
Definition at line 122 of file X.cpp.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
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. |
|
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.
|
virtual |
|
inherited |
|
inherited |
|
inherited |
Call to set the debugfile name.
debugfile | String variable. Set the debugfile name. |
Definition at line 95 of file logging.cpp.
|
inherited |
|
inherited |
|
inherited |
|
virtual |
|
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.
|
protectedinherited |
|
protectedinherited |
|
inherited |
|
inherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
inherited |