Program Listing for File gate_factory.hpp

Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/latest/src/cppsim/gate_factory.hpp)

#pragma once

#include <string>
#include <vector>

#include "gate.hpp"
#include "gate_general.hpp"
#include "gate_matrix_diagonal.hpp"
#include "gate_matrix_sparse.hpp"
#include "gate_named_npair.hpp"
#include "gate_named_one.hpp"
#include "gate_named_two.hpp"
#include "gate_noisy_evolution.hpp"
#include "gate_reflect.hpp"
#include "gate_reversible.hpp"
#include "observable.hpp"
#include "type.hpp"
namespace gate {
DllExport QuantumGateBase* create_quantum_gate_from_string(
    std::string gate_string);

DllExport ClsOneQubitGate* Identity(UINT qubit_index);

DllExport ClsOneQubitGate* X(UINT qubit_index);

DllExport ClsOneQubitGate* Y(UINT qubit_index);

DllExport ClsOneQubitGate* Z(UINT qubit_index);

DllExport ClsOneQubitGate* H(UINT qubit_index);

DllExport ClsOneQubitGate* S(UINT qubit_index);

DllExport ClsOneQubitGate* Sdag(UINT qubit_index);

DllExport ClsOneQubitGate* T(UINT qubit_index);

DllExport ClsOneQubitGate* Tdag(UINT qubit_index);

DllExport ClsOneQubitGate* sqrtX(UINT qubit_index);

DllExport ClsOneQubitGate* sqrtXdag(UINT qubit_index);

DllExport ClsOneQubitGate* sqrtY(UINT qubit_index);

DllExport ClsOneQubitGate* sqrtYdag(UINT qubit_index);

DllExport ClsOneQubitGate* P0(UINT qubit_index);

DllExport ClsOneQubitGate* P1(UINT qubit_index);

DllExport QuantumGateMatrix* U1(UINT qubit_index, double lambda);

DllExport QuantumGateMatrix* U2(UINT qubit_index, double phi, double lambda);

DllExport QuantumGateMatrix* U3(
    UINT qubit_index, double theta, double phi, double lambda);

DllExport ClsOneQubitRotationGate* RX(UINT qubit_index, double angle);

DllExport ClsOneQubitRotationGate* RY(UINT qubit_index, double angle);

DllExport ClsOneQubitRotationGate* RZ(UINT qubit_index, double angle);

DllExport ClsOneQubitRotationGate* RotInvX(UINT qubit_index, double angle);
DllExport ClsOneQubitRotationGate* RotInvY(UINT qubit_index, double angle);
DllExport ClsOneQubitRotationGate* RotInvZ(UINT qubit_index, double angle);
DllExport ClsOneQubitRotationGate* RotX(UINT qubit_index, double angle);
DllExport ClsOneQubitRotationGate* RotY(UINT qubit_index, double angle);
DllExport ClsOneQubitRotationGate* RotZ(UINT qubit_index, double angle);
DllExport ClsOneControlOneTargetGate* CNOT(
    UINT control_qubit_index, UINT target_qubit_index);

DllExport ClsOneControlOneTargetGate* CZ(
    UINT control_qubit_index, UINT target_qubit_index);

DllExport ClsTwoQubitGate* SWAP(UINT qubit_index1, UINT qubit_index2);

DllExport ClsNpairQubitGate* FusedSWAP(
    UINT qubit_index1, UINT qubit_index2, UINT block_size);

DllExport ClsPauliGate* Pauli(
    std::vector<UINT> target_qubit_index_list, std::vector<UINT> pauli_id_list);

DllExport ClsPauliRotationGate* PauliRotation(
    std::vector<UINT> target_qubit_index_list, std::vector<UINT> pauli_id_list,
    double angle);

DllExport QuantumGateMatrix* DenseMatrix(
    UINT target_qubit_index, ComplexMatrix matrix);

DllExport QuantumGateMatrix* DenseMatrix(
    std::vector<UINT> target_qubit_index_list, ComplexMatrix matrix);

DllExport QuantumGateSparseMatrix* SparseMatrix(
    std::vector<UINT> target_qubit_index_list, SparseComplexMatrix matrix);

DllExport QuantumGateDiagonalMatrix* DiagonalMatrix(
    std::vector<UINT> target_qubit_index_list, ComplexVector diagonal_element);

DllExport QuantumGateMatrix* RandomUnitary(
    std::vector<UINT> target_qubit_index_list);
DllExport QuantumGateMatrix* RandomUnitary(
    std::vector<UINT> target_qubit_index_list, UINT seed);

DllExport ClsReversibleBooleanGate* ReversibleBoolean(
    std::vector<UINT> target_qubit_index_list,
    std::function<ITYPE(ITYPE, ITYPE)>);

DllExport ClsStateReflectionGate* StateReflection(
    const QuantumState* reflection_state);

DllExport QuantumGate_Probabilistic* BitFlipNoise(
    UINT target_index, double prob);

DllExport QuantumGate_Probabilistic* DephasingNoise(
    UINT target_index, double prob);

DllExport QuantumGate_Probabilistic* IndependentXZNoise(
    UINT target_index, double prob);

DllExport QuantumGate_Probabilistic* DepolarizingNoise(
    UINT target_index, double prob);

DllExport QuantumGate_Probabilistic* TwoQubitDepolarizingNoise(
    UINT target_index1, UINT target_index2, double prob);

DllExport QuantumGate_CPTP* AmplitudeDampingNoise(
    UINT target_index, double prob);

DllExport QuantumGate_Instrument* Measurement(
    UINT target_index, UINT classical_register_address);

DllExport ClsNoisyEvolution* NoisyEvolution(Observable* hamiltonian,
    std::vector<GeneralQuantumOperator*> c_ops, double time, double dt = 1e-6);

DllExport ClsNoisyEvolution_fast* NoisyEvolution_fast(Observable* hamiltonian,
    std::vector<GeneralQuantumOperator*> c_ops, double time);

DllExport ClsNoisyEvolution_auto* NoisyEvolution_auto(Observable* hamiltonian,
    std::vector<GeneralQuantumOperator*> c_ops, double time);

DllExport QuantumGateBase* from_ptree(const boost::property_tree::ptree& pt);
}  // namespace gate