Class QuantumStateBase

Inheritance Relationships

Derived Types

Class Documentation

class QuantumStateBase

量子状態の基底クラス

Subclassed by DensityMatrixCpu, QuantumStateCpu

Public Functions

inline QuantumStateBase(UINT qubit_count_, bool is_state_vector)

コンストラクタ

パラメータ

qubit_count_ -- 量子ビット数

inline QuantumStateBase(UINT qubit_count_, bool is_state_vector, UINT device_number_)
inline virtual ~QuantumStateBase()

デストラクタ

inline virtual bool is_state_vector() const

量子状態が状態ベクトルか密度行列かを判定する

virtual void set_zero_state() = 0

量子状態を計算基底の0状態に初期化する

virtual void set_zero_norm_state() = 0

ノルム0の状態 (要素がすべて0のベクトル) にする

virtual void set_computational_basis(ITYPE comp_basis) = 0

量子状態をcomp_basisの基底状態に初期化する

パラメータ

comp_basis -- 初期化する基底を表す整数

virtual void set_Haar_random_state() = 0

量子状態をHaar randomにサンプリングされた量子状態に初期化する

virtual void set_Haar_random_state(UINT seed) = 0

量子状態をシードを用いてHaar randomにサンプリングされた量子状態に初期化する

virtual double get_zero_probability(UINT target_qubit_index) const = 0

target_qubit_indexの添え字の量子ビットを測定した時、0が観測される確率を計算する。

量子状態は変更しない。

パラメータ

target_qubit_index --

戻り値

double

virtual double get_marginal_probability(std::vector<UINT> measured_values) const = 0

複数の量子ビットを測定した時の周辺確率を計算する

パラメータ

measured_values -- 量子ビット数と同じ長さの0,1,2の配列。0,1はその値が観測され、2は測定をしないことを表す。

戻り値

計算された周辺確率

virtual double get_entropy() const = 0

計算基底で測定した時得られる確率分布のエントロピーを計算する。

戻り値

エントロピー

virtual double get_squared_norm() const = 0

量子状態のノルムを計算する

量子状態のノルムは非ユニタリなゲートを作用した時に小さくなる。

戻り値

ノルム

virtual double get_squared_norm_single_thread() const = 0

量子状態のノルムを計算する

量子状態のノルムは非ユニタリなゲートを作用した時に小さくなる。

戻り値

ノルム

virtual void normalize(double squared_norm) = 0

量子状態を正規化する

パラメータ

norm -- 自身のノルム

virtual void normalize_single_thread(double squared_norm) = 0

量子状態を正規化する

パラメータ

norm -- 自身のノルム

virtual QuantumStateBase *allocate_buffer() const = 0

バッファとして同じサイズの量子状態を作成する。

戻り値

生成された量子状態

virtual QuantumStateBase *copy() const = 0

自身の状態のディープコピーを生成する

戻り値

自身のディープコピー

virtual void load(const QuantumStateBase *state) = 0

stateの量子状態を自身へコピーする。

virtual void load(const std::vector<CPPCTYPE> &state) = 0

stateの量子状態を自身へコピーする。

virtual void load(const CPPCTYPE *state) = 0

stateの量子状態を自身へコピーする。

virtual const std::string get_device_name() const = 0

量子状態が配置されているメモリを保持するデバイス名を取得する。

virtual void *data() const = 0
virtual CPPCTYPE *data_cpp() const = 0

量子状態をC++のstd::complex<double>の配列として取得する

戻り値

複素ベクトルのポインタ

virtual CTYPE *data_c() const = 0

量子状態をcsimのComplex型の配列として取得する

戻り値

複素ベクトルのポインタ

virtual CPPCTYPE *duplicate_data_cpp() const = 0

量子状態をC++のstd::complex<double>の配列として新たに確保する

戻り値

複素ベクトルのポインタ

virtual CTYPE *duplicate_data_c() const = 0

量子状態をcsimのComplex型の配列として新たに確保する。

戻り値

複素ベクトルのポインタ

virtual void add_state(const QuantumStateBase *state) = 0

量子状態を足しこむ

virtual void add_state_with_coef(CPPCTYPE coef, const QuantumStateBase *state) = 0

量子状態を係数付きで足しこむ

virtual void add_state_with_coef_single_thread(CPPCTYPE coef, const QuantumStateBase *state) = 0

量子状態を係数付きで足しこむ

virtual void multiply_coef(CPPCTYPE coef) = 0

複素数をかける

virtual void multiply_elementwise_function(const std::function<CPPCTYPE(ITYPE)> &func) = 0
inline virtual UINT get_classical_value(UINT index)

指定した添え字の古典レジスタの値を取得する。

パラメータ

index -- セットするレジスタの添え字

戻り値

古典レジスタの値

inline virtual void set_classical_value(UINT index, UINT val)

指定した添え字の古典レジスタに値をセットする

パラメータ
  • index -- セットするレジスタの添え字

  • val -- セットする値

inline virtual const std::vector<UINT> get_classical_register() const

古典レジスタのベクトルを返す

戻り値

古典レジスタ

virtual std::vector<ITYPE> sampling(UINT sampling_count) = 0

量子状態を測定した際の計算基底のサンプリングを行う

パラメータ
  • sampling_count -- [in] サンプリングを行う回数

  • random_seed -- [in] サンプリングで乱数を振るシード値

戻り値

サンプルされた値のリスト

virtual std::vector<ITYPE> sampling(UINT sampling_count, UINT random_seed) = 0
inline virtual std::string to_string() const

量子回路のデバッグ情報の文字列を生成する

戻り値

生成した文字列

inline virtual void *get_cuda_stream() const

Public Members

const UINT &qubit_count

量子ビット数

const ITYPE &dim

量子状態の次元

const std::vector<UINT> &classical_register

古典ビットのレジスタ

const UINT &device_number

Protected Attributes

ITYPE _dim
UINT _qubit_count
bool _is_state_vector
std::vector<UINT> _classical_register
UINT _device_number
void *_cuda_stream

Friends

inline friend std::ostream &operator<<(std::ostream &os, const QuantumStateBase &state)

量子状態のデバッグ情報を出力する。

戻り値

受け取ったストリーム

inline friend std::ostream &operator<<(std::ostream &os, const QuantumStateBase *state)

量子状態のデバッグ情報を出力する。

戻り値

受け取ったストリーム