manual module
Introduction of PItBE
ある正方行列がパウリ行列「X,Y,Z,I」の積による線型結合で記述できる場合、 その正方行列を線型結合をなす各成分を作用させることで量子回路上で再現する 手法として「ブロックエンコーディング」という手法が存在する。
本プログラム「PItBE」は正方行列を線型結合で表現した際の情報を 入力することで当該行列をブロックエンコーディングした量子回路を 出力するものである。
本プログラムの一部はXANADU社の開発した「PennyLane」というライブラリの 実行結果を分析して作成した。ただあくまでも出力結果を参考にして作成した のであってコードをそのまま書き写したものではないことは留意して欲しい。
- manual.circ_make(gate_inf, zero_one, circ, qubit, ancilla)[source]
この関数は与えられた情報からブロックエンコーディングの 回路を自動的に組み上げる
- Parameters:
gate_inf(list) – パウリ行列積の情報が入ったlist 格納されている各要素はstr型
zero_one(list) – 制御ビットの状態に関する情報が記載されているlist 例えば補助ビット数が5個の回路において 3番目のゲートへの制御ビットは[1, 1, 0, 0, 0]となる 格納されている各要素はstr型 なおこの値は本パッケージ内に含まれている関数 「cont_order」の出力結果を代入することを想定している
circ(qulacs_core.QuantumCircuit) – 組み上げ先の回路 回路のクラスは「qulacs」に含まれるクラスを利用している
qubit(str) – 量子回路に必要な総ビット数(補助ビット+メインビット)
ancilla(str) – 量子回路に必要な補助ビット数
Note
前述の通りこの関数には「qulacs」のクラスを一部用いているので 必ず関数のimport部分で「qulacs」をimportすること また引数「zero_list」の値に説明時に触れたもの以外を 代入した場合想定外の挙動をとる場合もある
- manual.coeff_make(vec)[source]
この関数では本パッケージ内の関数「mat_make」で用いる引数を作成する
- Parameters:
vec(list) – 引数を計算したい要素を格納したlist 格納されている各要素はfloat型
- Returns:
計算結果を格納したlist 格納されている各要素はfloat型
- Return type:
coeff_list(list)
- manual.cont_order(order, rank)[source]
この関数は入力値を任意の桁数の2進数表記に変換する
- Parameters:
order(str) – 2進数に変換したい値
rank(str) – 2進数表記の際の桁数
- Returns:
2進数変換後のそれぞれの桁での値を格納したlist 格納されている値の型はstr
- Return type:
cont_list(list)
Examples
>>> cont_order(5, 4) [1, 0, 1, 0]
- manual.mat_make(elelist, coeff_lst)[source]
mat_male
この関数では線型結合の係数を補助ビット部分にセットする行列を作成する 量子回路でもちいる行列はユニタリ性を満たす必要があるので 複雑な過程が必要だが第一列目の要素と係数さえ入力すれば自動的に作成する
- Parameters:
elelist(list) – 作成する行列の第一列目に格納される成分をベクトル要素とするlist 格納されている要素はfloat型
coeff_lst(list) – 関数「vec_nake」でもちいる係数が格納されているlist 格納されている要素はfloat型
- Returns:
作成したユニタリ行列が格納されたnp.array 格納されている要素はfloat型
- Return type:
mat_ele_list(np.array)
- manual.normlize(non_normal, num_anci, num_main)[source]
ブロックエンコーディングによる出力結果は再現した行列を任意の初期状態に 作用させた結果だけでなく関係のないものも含まれている この関数ではその出力結果を入力情報として 作用結果のみをピックアップし出力させる
- Parameters:
non_normal(list) – ブロックエンコーディングによる初期状態への作用結果 格納されている各要素はfloat型である
num_anci(str) – ブロックエンコーディングで用いる補助ビットの数
num_main(str) – ブロックエンコーディングで用いる初期状態を記述するビットの数
- Returns:
正しい作用結果のみを格納したlist 格納されている各要素はfloat型である なおlistのsizeはnum_mainのそれである
- Return type:
nor_list(list)
Examples
>>> result = [0.5, 0.5, 0.5, 0.5] >>> norm_res = normlize(result, 1, 1) >>> print(norm_res) [0.5, 0.5]
Note
本パッケージに含まれている関数「main_research」を用いることで 引数num_mainは簡単に入力することができる ぜひ活用してほしい
- manual.read_jw(jw_inf)[source]
この関数は正方行列のパウリ行列積の線型結合による表現を 入力情報とし、係数部分と行列積部分に分解し出力するものである
- Parameters:
jw_inf(str) – 正方行列のパウリ行列の線形結合による表現 表現については「openfermion」を通じて 得ることを想定している
- Returns:
- 線型結合で用いる係数を格納したlist
各要素はfloat型をとる
- ope_list(list):
線型結合で用いるパウリ行列積を格納したlist 各要素はstr型をとる
- Return type:
num_list(list)
Note
前述の通り入力するデータはライブラリ「openfermion」の関数 「jordan_wigner」による出力結果を想定している この手法の出力結果以外を代入した場合、 正しく実行されないこともあることに注意されたし
- manual.total_search(ope_list)[source]
main_research
この関数では線形結合を構成するパウリ行列積の一覧から 量子回路上で必要なビット数を算出する
- Parameters:
ope_list(list) – パウリ行列積の一覧を記述したlist 格納されている各要素はstr型 本パッケージ内にある関数「read_jw」による出力結果を用いる
- Returns:
作用先のビット番号のうち最大のものに1を足して出力する 1を足しているのは作用先のビット番号が0から始まるためである
- Return type:
np.array(bit_list).max()+1(str)
Examples
>>> main = total_search(ope) >>> print(main) 6
Note
前述の通り入力情報は本パッケージ内の出力結果の利用を 想定しているので異なる様式を用いた場合望んだ出力結果に ならないこともあるので注意してほしい
- manual.vec_make(ele, coflst)[source]
この関数は関数「mat_make」内で行列要素を計算するのに用いる
- Parameters:
ele(list) – 「mat_make」で扱う行列の要素が格納されたlist 格納されている各要素の型はfloat
coflst(list) – 「mat_make」の行列要素に作用させる係数を格納したlist 格納されている各要素の型はfloat
- Returns:
計算結果を格納するlist 格納されている要素はfloat型
- Return type:
app_lst(list)
Note
この関数は「mat_maker」内のみで用いることを想定している