Program Listing for File gate_matrix.hpp¶
↰ Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/latest/src/cppsim/gate_matrix.hpp
)
#pragma once
#include "gate.hpp"
#include "type.hpp"
class DllExport QuantumGateMatrix : public QuantumGateBase {
private:
// list of elements of unitary matrix as 1D array with length dim*dim (only
// for dense gate))
ComplexMatrix _matrix_element;
public:
QuantumGateMatrix(const std::vector<UINT>& target_qubit_index_list,
const ComplexMatrix& matrix_element,
const std::vector<UINT>& control_qubit_index_list = {});
QuantumGateMatrix(const std::vector<UINT>& target_qubit_index_list,
ComplexMatrix* matrix_element,
const std::vector<UINT>& control_qubit_index_list = {});
QuantumGateMatrix(
const std::vector<TargetQubitInfo>& target_qubit_index_list,
const ComplexMatrix& matrix_element,
const std::vector<ControlQubitInfo>& control_qubit_index_list = {});
QuantumGateMatrix(
const std::vector<TargetQubitInfo>& target_qubit_index_list,
ComplexMatrix* matrix_element,
const std::vector<ControlQubitInfo>& control_qubit_index_list = {});
virtual ~QuantumGateMatrix(){};
virtual void add_control_qubit(UINT qubit_index, UINT control_value);
virtual void multiply_scalar(CPPCTYPE value) { _matrix_element *= value; }
virtual void set_gate_property(UINT gate_property_) {
_gate_property = gate_property_;
}
virtual void update_quantum_state(QuantumStateBase* state) override;
virtual QuantumGateMatrix* copy() const override {
return new QuantumGateMatrix(*this);
};
virtual void set_matrix(ComplexMatrix& matrix) const override {
matrix = this->_matrix_element;
}
virtual std::string to_string() const override;
virtual boost::property_tree::ptree to_ptree() const override;
friend DllExport std::ostream& operator<<(
std::ostream& os, const QuantumGateMatrix& gate);
friend DllExport std::ostream& operator<<(
std::ostream& os, QuantumGateMatrix* gate);
virtual QuantumGateMatrix* get_inverse(void) const override;
};