Program Listing for File gate_matrix_diagonal.hpp¶
↰ Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/v0.6.7/src/cppsim/gate_matrix_diagonal.hpp
)
#pragma once
#include "gate.hpp"
#include "type.hpp"
class DllExport QuantumGateDiagonalMatrix : public QuantumGateBase {
private:
// list of elements of unitary matrix as 1D array with length dim
ComplexVector _diagonal_element;
public:
QuantumGateDiagonalMatrix(const std::vector<UINT>& target_qubit_index_list,
const ComplexVector& matrix_element,
const std::vector<UINT>& control_qubit_index_list = {});
QuantumGateDiagonalMatrix(const std::vector<UINT>& target_qubit_index_list,
ComplexVector* matrix_element,
const std::vector<UINT>& control_qubit_index_list = {});
QuantumGateDiagonalMatrix(
const std::vector<TargetQubitInfo>& target_qubit_index_list,
const ComplexVector& matrix_element,
const std::vector<ControlQubitInfo>& control_qubit_index_list = {});
QuantumGateDiagonalMatrix(
const std::vector<TargetQubitInfo>& target_qubit_index_list,
ComplexVector* matrix_element,
const std::vector<ControlQubitInfo>& control_qubit_index_list = {});
virtual ~QuantumGateDiagonalMatrix(){};
virtual void add_control_qubit(UINT qubit_index, UINT control_value);
virtual void multiply_scalar(CPPCTYPE value) { _diagonal_element *= value; }
virtual void set_gate_property(UINT gate_property_) {
_gate_property = gate_property_;
}
virtual void update_quantum_state(QuantumStateBase* state) override;
virtual QuantumGateDiagonalMatrix* copy() const override {
return new QuantumGateDiagonalMatrix(*this);
};
virtual QuantumGateDiagonalMatrix* get_inverse(void) const override {
return new QuantumGateDiagonalMatrix(this->target_qubit_list,
this->_diagonal_element.conjugate(), this->control_qubit_list);
}
virtual void set_matrix(ComplexMatrix& matrix) const override {
ITYPE dim = this->_diagonal_element.size();
matrix = ComplexMatrix::Zero(dim, dim);
for (ITYPE i = 0; i < dim; ++i) {
matrix(i, i) = this->_diagonal_element[i];
}
}
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 QuantumGateDiagonalMatrix& gate);
friend DllExport std::ostream& operator<<(
std::ostream& os, QuantumGateDiagonalMatrix* gate);
};