gate Namespace Reference

Functions

ComplexMatrix get_IBMQ_matrix (double theta, double phi, double lambda)
 
QuantumGateBaseIdentity (UINT qubit_index)
 
QuantumGateBaseX (UINT qubit_index)
 
QuantumGateBaseY (UINT qubit_index)
 
QuantumGateBaseZ (UINT qubit_index)
 
QuantumGateBaseH (UINT qubit_index)
 
QuantumGateBaseS (UINT qubit_index)
 
QuantumGateBaseSdag (UINT qubit_index)
 
QuantumGateBaseT (UINT qubit_index)
 
QuantumGateBaseTdag (UINT qubit_index)
 
QuantumGateBasesqrtX (UINT qubit_index)
 
QuantumGateBasesqrtXdag (UINT qubit_index)
 
QuantumGateBasesqrtY (UINT qubit_index)
 
QuantumGateBasesqrtYdag (UINT qubit_index)
 
QuantumGateBaseP0 (UINT qubit_index)
 
QuantumGateBaseP1 (UINT qubit_index)
 
QuantumGateBaseRX (UINT qubit_index, double angle)
 
QuantumGateBaseRY (UINT qubit_index, double angle)
 
QuantumGateBaseRZ (UINT qubit_index, double angle)
 
QuantumGateBaseU1 (UINT qubit_index, double lambda)
 
QuantumGateBaseU2 (UINT qubit_index, double phi, double lambda)
 
QuantumGateBaseU3 (UINT qubit_index, double theta, double phi, double lambda)
 
QuantumGateBaseCNOT (UINT control_qubit_index, UINT target_qubit_index)
 
QuantumGateBaseCZ (UINT control_qubit_index, UINT target_qubit_index)
 
QuantumGateBaseSWAP (UINT qubit_index1, UINT qubit_index2)
 
QuantumGateBasePauli (std::vector< UINT > target, std::vector< UINT > pauli_id)
 
QuantumGateBasePauliRotation (std::vector< UINT > target, std::vector< UINT > pauli_id, double angle)
 
QuantumGateMatrixDenseMatrix (UINT target_index, ComplexMatrix matrix)
 
QuantumGateMatrixDenseMatrix (std::vector< UINT > target_list, ComplexMatrix matrix)
 
QuantumGateBaseBitFlipNoise (UINT target_index, double prob)
 
QuantumGateBaseDephasingNoise (UINT target_index, double prob)
 
QuantumGateBaseIndependentXZNoise (UINT target_index, double prob)
 
QuantumGateBaseDepolarizingNoise (UINT target_index, double prob)
 
QuantumGateBaseMeasurement (UINT target_index, UINT classical_register_address)
 
QuantumGateBasecreate_quantum_gate_from_string (std::string gate_string)
 
QuantumGateMatrixmerge (const QuantumGateBase *gate_first, const QuantumGateBase *gate_second)
 
DllExport QuantumGateMatrixmerge (std::vector< const QuantumGateBase *> gate_list)
 
DllExport QuantumGateMatrixadd (std::vector< const QuantumGateBase *> gate_list)
 
QuantumGateMatrixadd (const QuantumGateBase *gate_first, const QuantumGateBase *gate_second)
 
QuantumGateMatrixto_matrix_gate (const QuantumGateBase *gate)
 
QuantumGateBaseProbabilistic (std::vector< double > distribution, std::vector< QuantumGateBase *> gate_list)
 
QuantumGateBaseCPTP (std::vector< QuantumGateBase *> gate_list)
 
QuantumGateBaseInstrument (std::vector< QuantumGateBase *> gate_list, UINT classical_register_address)
 
QuantumGateBaseAdaptive (QuantumGateBase *gate, std::function< bool(const std::vector< UINT > &)> func)
 

Detailed Description

This function generate merged quantum gate with two given gates.

Currently, this is lazy two-step implementation.

Function Documentation

◆ Adaptive()

DllExport QuantumGateBase * gate::Adaptive ( QuantumGateBase gate,
std::function< bool(const std::vector< UINT > &)>  func 
)

適応操作のゲートを作成する

functrueを返すときのみgateを作用する量子ゲートを作成する。

Parameters
gateゲート
funcstd::vector<unsigned int>&を受け取り、boolを返す関数
Returns
Adaptive gate

◆ add() [1/2]

DllExport QuantumGateMatrix * gate::add ( std::vector< const QuantumGateBase * >  gate_list)

複数のゲートを足して新たなゲートを作成する。

TODO: control-qubitがあるときの挙動が未定義

Parameters
gate_list足すゲート列
Returns
足したゲート

◆ add() [2/2]

DllExport QuantumGateMatrix * gate::add ( const QuantumGateBase gate1,
const QuantumGateBase gate2 
)

二つのゲートのゲート行列を足して新たなゲートを作成する。

TODO: control-qubitがあるときの挙動が未定義

Parameters
gate1先に状態に作用するゲート
gate2後に状態に作用するゲート
Returns
二つのゲートを足したゲート

◆ BitFlipNoise()

DllExport QuantumGateBase * gate::BitFlipNoise ( UINT  target_index,
double  prob 
)

bit-flipノイズを発生させるゲート

Parameters
[in]target_indexターゲットとなる量子ビットの添え字
[in]probエラーが生じる確率
Returns
作成されたゲートのインスタンス

◆ CNOT()

DllExport QuantumGateBase * gate::CNOT ( UINT  control_qubit_index,
UINT  target_qubit_index 
)

CNOTゲートを作成する

Parameters
[in]control_qubit_indexコントロールとなる量子ビットの添え字
[in]target_qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ CPTP()

DllExport QuantumGateBase * gate::CPTP ( std::vector< QuantumGateBase * >  gate_list)

CPTP-mapを作成する

\(p_i = {\rm Tr}[K_i \rho K_i^{\dagger}]\)を計算し、 \(\{p_i\}\)の確率分布でクラウス演算子を採用して、 \(\sqrt{p_i}^{-1}\)で正規化する。

Parameters
gate_listクラウス演算を行うゲートのリスト
Returns
CPTP-map

◆ create_quantum_gate_from_string()

DllExport QuantumGateBase * gate::create_quantum_gate_from_string ( std::string  gate_string)

量子ゲートを文字列から生成する。

ゲートを生成するための文字列は以下の通り Identity : I <index> X : X <index> Y : Y <index> Z : Z <index> H : H <index> S : S <index> Sdag : Sdag <index> T : T <index> Tdag : Tdag <index> CNOT,CX : CNOT <control> <target>, or CX <control> <target> CZ : CZ <control> <target> SWAP : SWAP <target1> <target2> U1 : U1 <index> <angle1> U2 : U2 <index> <angle1> <angle2> U3 : U3 <index> <angle1> <angle2> <angle3> Rot X : RX <index> <angle1> Rot Y : RY <index> <angle1> Rot Z : RZ <index> <angle1> DifRot X : RDX <index> DifRot Y : RDY <index> DifRot Z : RDZ <index> MultiRot : RM <paulistr> <index1> <index2> ... <theta> (for example: "RM XYZ 2 3 1 0.123") DifMultiRot : RDM <paulistr> <index1> <index2> ... (for example: "RDM XYZ 2 3 1") general U : U <index_count> <index1> <index2> ... <element1_real> <element1_imag> <element2_real> ...

Parameters
[in]gate_stringゲートを生成する文字列
Returns
作成されたゲートのインスタンス

◆ CZ()

DllExport QuantumGateBase * gate::CZ ( UINT  control_qubit_index,
UINT  target_qubit_index 
)

CZゲートを作成する

Parameters
[in]control_qubit_indexコントロールとなる量子ビットの添え字
[in]target_qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ DenseMatrix() [1/2]

DllExport QuantumGateMatrix * gate::DenseMatrix ( UINT  target_qubit_index,
ComplexMatrix  matrix 
)

\(n\)-qubit 行列を用いて1-qubitゲートを生成する。

Parameters
[in]target_qubit_indexターゲットとなる量子ビットの添え字
[in]matrix作用するゲートの \(2\times 2\)の複素行列
Returns
作成されたゲートのインスタンス

◆ DenseMatrix() [2/2]

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

\(n\)-qubit 行列を用いてn-qubitゲートを生成する。

target_qubit_index_listの要素数を \(m\)としたとき、matrixは \(2^m \times 2^m \)の複素行列でなくてはいけない。

Parameters
[in]target_qubit_index_listターゲットとなる量子ビットの添え字
[in]matrix作用するゲートの複素行列。
Returns
作成されたゲートのインスタンス

◆ DephasingNoise()

DllExport QuantumGateBase * gate::DephasingNoise ( UINT  target_index,
double  prob 
)

phase-flipノイズを発生させるゲート

Parameters
[in]target_indexターゲットとなる量子ビットの添え字
[in]probエラーが生じる確率
Returns
作成されたゲートのインスタンス

◆ DepolarizingNoise()

DllExport QuantumGateBase * gate::DepolarizingNoise ( UINT  target_index,
double  prob 
)

Depolarizin noiseを発生させるゲート

X,Y,Zがそれぞれprob/3の確率で生じる。

Parameters
[in]target_indexターゲットとなる量子ビットの添え字
[in]probエラーが生じる確率
Returns
作成されたゲートのインスタンス

◆ get_IBMQ_matrix()

ComplexMatrix gate::get_IBMQ_matrix ( double  theta,
double  phi,
double  lambda 
)

◆ H()

DllExport QuantumGateBase * gate::H ( UINT  qubit_index)

Hadamardゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Identity()

DllExport QuantumGateBase * gate::Identity ( UINT  qubit_index)

Identityゲートを作成する。

作用しても状態は変わらないが、ノイズなどが付与された際の挙動が異なる。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ IndependentXZNoise()

DllExport QuantumGateBase * gate::IndependentXZNoise ( UINT  target_index,
double  prob 
)

bit-flipとphase-flipを同じ確率でノイズを発生させるゲート

Parameters
[in]target_indexターゲットとなる量子ビットの添え字
[in]probエラーが生じる確率
Returns
作成されたゲートのインスタンス

◆ Instrument()

DllExport QuantumGateBase * gate::Instrument ( std::vector< QuantumGateBase * >  gate_list,
UINT  classical_register_address 
)

Instrumentを作成する

InstrumentではCPTP-mapを作用させ、かつ作用されたクラウス演算子の添え字をclassical_register_addressに書き込む。

Parameters
gate_listクラウス演算を行うゲートのリスト
classical_register_address添え字を書きこむclassical registerの添え字
Returns
Instrument

◆ Measurement()

DllExport QuantumGateBase * gate::Measurement ( UINT  target_index,
UINT  classical_register_address 
)

測定を行う

Parameters
[in]target_indexターゲットとなる量子ビットの添え字
[in]classical_register_address測定値を格納する古典レジスタの場所
Returns
作成されたゲートのインスタンス

◆ merge() [1/2]

DllExport QuantumGateMatrix * gate::merge ( const QuantumGateBase gate_applied_first,
const QuantumGateBase gate_applied_later 
)

二つのゲートが連続して作用する新たなゲートを作成する。

Parameters
gate_applied_first先に状態に作用するゲート
gate_applied_later後に状態に作用するゲート
Returns
二つのゲートを合成したゲート

◆ merge() [2/2]

DllExport QuantumGateMatrix * gate::merge ( std::vector< const QuantumGateBase * >  gate_list)

複数のゲートが連続して作用する新たなゲートを作成する。

Parameters
gate_list作用するゲート列。先頭要素から順番に状態に作用する。
Returns
合成したゲート

◆ P0()

DllExport QuantumGateBase * gate::P0 ( UINT  qubit_index)

qubit_indexを0へ射影するゲートを作成する

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ P1()

DllExport QuantumGateBase * gate::P1 ( UINT  qubit_index)

qubit_indexを1へ射影するゲートを作成する

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Pauli()

DllExport QuantumGateBase * gate::Pauli ( std::vector< UINT >  target_qubit_index_list,
std::vector< UINT >  pauli_id_list 
)

\(n\)-qubit パウリ演算子のゲートを作成する

例えば \(Y_1 X_3\)であれば、target_qubit_index_list = {1,3}, pauli_id_list = {2,1};である。

Parameters
[in]target_qubit_index_listターゲットとなる量子ビットの添え字のリスト
[in]pauli_id_listその量子ビットに作用するパウリ演算子。 \({I,X,Y,Z}\)が \({0,1,2,3}\)に対応する。
Returns
作成されたゲートのインスタンス

◆ PauliRotation()

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

\(n\)-qubit パウリ演算子の回転ゲートを作成する

例えば \(Y_1 X_3\)であれば、target_qubit_index_list = {1,3}, pauli_id_list = {2,1};である。

Parameters
[in]target_qubit_index_listターゲットとなる量子ビットの添え字のリスト
[in]pauli_id_listその量子ビットに作用するパウリ演算子。 \({I,X,Y,Z}\)が \({0,1,2,3}\)に対応する。
[in]angle回転角
Returns
作成されたゲートのインスタンス

◆ Probabilistic()

DllExport QuantumGateBase * gate::Probabilistic ( std::vector< double >  distribution,
std::vector< QuantumGateBase * >  gate_list 
)

確率的に作用する量子ゲートを作成する。

確率分布の総和が1でない場合、残った確率が採用されたときには何も作用しない。

Parameters
distribution確率分布
gate_list作用する量子ゲート
Returns
確率的に作用するゲート

◆ RX()

DllExport QuantumGateBase * gate::RX ( UINT  qubit_index,
double  angle 
)

\(X\)回転ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]angle回転角
Returns
作成されたゲートのインスタンス

◆ RY()

DllExport QuantumGateBase * gate::RY ( UINT  qubit_index,
double  angle 
)

\(Y\)回転ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]angle回転角
Returns
作成されたゲートのインスタンス

◆ RZ()

DllExport QuantumGateBase * gate::RZ ( UINT  qubit_index,
double  angle 
)

\(Z\)回転ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]angle回転角
Returns
作成されたゲートのインスタンス

◆ S()

DllExport QuantumGateBase * gate::S ( UINT  qubit_index)

\(S\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Sdag()

DllExport QuantumGateBase * gate::Sdag ( UINT  qubit_index)

\(S^{\dagger}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ sqrtX()

DllExport QuantumGateBase * gate::sqrtX ( UINT  qubit_index)

\(\sqrt{X}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ sqrtXdag()

DllExport QuantumGateBase * gate::sqrtXdag ( UINT  qubit_index)

\(\sqrt{X}^{\dagger}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ sqrtY()

DllExport QuantumGateBase * gate::sqrtY ( UINT  qubit_index)

\(\sqrt{Y}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ sqrtYdag()

DllExport QuantumGateBase * gate::sqrtYdag ( UINT  qubit_index)

\(\sqrt{Y}^{\dagger}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ SWAP()

DllExport QuantumGateBase * gate::SWAP ( UINT  qubit_index1,
UINT  qubit_index2 
)

SWAPゲートを作成する

Parameters
[in]qubit_index1ターゲットとなる量子ビットの添え字
[in]qubit_index2ターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ T()

DllExport QuantumGateBase * gate::T ( UINT  qubit_index)

\(T\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Tdag()

DllExport QuantumGateBase * gate::Tdag ( UINT  qubit_index)

\(T^{\dagger}\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ to_matrix_gate()

DllExport QuantumGateMatrix * gate::to_matrix_gate ( const QuantumGateBase gate)

QuantumGateBaseの任意のサブクラスを、QuantumGateMatrixのクラスの変換する。

\(n\)-qubitゲートで \(n\)が非常に大きいとき、 \(d^2\)の大量のメモリを使用する点に注意。

Parameters
gate変換するゲート
Returns
変換されたQuantumGateMatrixクラスのインスタンス

◆ U1()

DllExport QuantumGateBase * gate::U1 ( UINT  qubit_index,
double  lambda 
)

OpenQASMのU1ゲートを作成する。

具体的なゲートについてはOpenQASMのマニュアルを参照

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]lambda回転角の第一引数
Returns
作成されたゲートのインスタンス

◆ U2()

DllExport QuantumGateBase * gate::U2 ( UINT  qubit_index,
double  phi,
double  lambda 
)

OpenQASMのU2ゲートを作成する。

具体的なゲートについてはOpenQASMのマニュアルを参照

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]lambda回転角の第一引数
[in]phi回転角の第二引数
Returns
作成されたゲートのインスタンス

◆ U3()

DllExport QuantumGateBase * gate::U3 ( UINT  qubit_index,
double  theta,
double  phi,
double  lambda 
)

OpenQASMのU3ゲートを作成する。

具体的なゲートについてはOpenQASMのマニュアルを参照

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
[in]lambda回転角の第一引数
[in]phi回転角の第二引数
[in]theta回転角の第三引数
Returns
作成されたゲートのインスタンス

◆ X()

DllExport QuantumGateBase * gate::X ( UINT  qubit_index)

\(X\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Y()

DllExport QuantumGateBase * gate::Y ( UINT  qubit_index)

\(Y\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス

◆ Z()

DllExport QuantumGateBase * gate::Z ( UINT  qubit_index)

\(Z\)ゲートを作成する。

Parameters
[in]qubit_indexターゲットとなる量子ビットの添え字
Returns
作成されたゲートのインスタンス