|
Sequential Quantum Gate Decomposer
v1.9.3
Powerful decomposition of general unitarias into one- and two-qubit gates gates
|
Base class for the representation of general gate operations. More...
#include <Composite.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... | |
| void | apply_from_right (Matrix_real ¶meters, Matrix &input) |
| Call to apply the gate on the input array/matrix by input*Gate. More... | |
| virtual void | apply_from_right (Matrix &input) |
| Call to apply the gate on the input array/matrix by input*Gate. More... | |
| void | apply_to (Matrix_real ¶meters, Matrix &input, int parallel) |
| Call to apply the gate on the input array/matrix. 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 | clear_children () |
| Call to erase data on children. More... | |
| void | clear_parents () |
| Call to erase data on parents. More... | |
| Composite * | clone () |
| Call to 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... | |
| Composite () | |
| Default constructor of the class. More... | |
| Composite (int qbit_num_in) | |
| Constructor of the class. 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... | |
| 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... | |
| 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... | |
| 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... | |
| 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 operation matrix. More... | |
| Matrix | get_matrix (Matrix_real ¶meters, int parallel) |
| Call to retrieve the operation matrix. 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... | |
| 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... | |
| 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... | |
| void | insert_gate (Gate *gate, int idx) |
| Call to insert a gate at a given position. 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 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... | |
| virtual void | reorder_qubits (std::vector< int > qbit_list) |
| Call to reorder the qubits in the matrix of the operation. 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_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... | |
| virtual void | set_qbit_num (int qbit_num_in) |
| Set the number of qubits spanning the matrix of the operation. 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 | ~Composite () |
| 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< 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... | |
| 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::vector< std::vector< int > > | involved_qbits |
| 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::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... | |
| Matrix_real | parameters |
| Parameters theta, phi, lambda of the U3 gate after the decomposition of the unitary is done. 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... | |
Base class for the representation of general gate operations.
Definition at line 47 of file Composite.h.
| Composite::Composite | ( | ) |
Default constructor of the class.
Deafult constructor of the class.
Definition at line 35 of file Composite.cpp.

|
virtual |
Destructor of the class.
Definition at line 84 of file Composite.cpp.
| Composite::Composite | ( | int | qbit_num_in | ) |
Constructor of the class.
| qbit_num_in | The number of qubits spanning the unitaries |
Definition at line 61 of file Composite.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.

|
protectedinherited |
|
inherited |
1.8.13