概要
- Qiskit について, サンプルプログラムを動かしてみた.
- 動作環境は, Google Colaboratory で行った
- 実行プログラム, 解説は, 下記の参照サイトをご覧ください
感想
- 本家のサイトにあるように, 量子ゲートの解説が, 非常に豊富だと驚いた.
- 時間を見つけて, 今後も, ドキュメントの残りの部分を進めていこうと思う.
Algebraic operations and predicates
- StateFns
- eval etc
- to_circuit_op etc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[編集内容(StateFns)] from qiskit.aqua.operators import (StateFn, Zero, One, Plus, Minus, X, H, DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn) import math # Check the output by changing the comment out for each. # (1.2 + 3.4i)|0> # (1.2 + 3.4i) * Zero # SyntaxError: invalid syntax (1.2 + 3.4j) * Zero # (4.3 + 2.1i)|1> (4.3 + 2.1j) * One # (1.2 + 3.4i)|0> + (5.6 + 7.8i)|1> (1.2 + 3.4j) * Zero + (5.6 + 7.8j) * One # (|0> + |1>) / (1/√2) cPlus = (Zero + One) / math.sqrt(2) print(cPlus) # (|0> - |1>) / (1/√2) cMinus = (Zero - One) / math.sqrt(2) print(cMinus) # |+> + |-> print(Plus + Minus) # cPlus + cMinus print(cPlus + cMinus) # display contents are different from (|+> + |->). # |+> - |-> print(Plus - Minus) # cPlus - cMinus print(cPlus - cMinus) # display contents are different from (|+> - |->). # <0|0> print(~Zero @ Zero) # <1|1> print(~One @ One) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[出力結果] DictStateFn({'0': 1}, coeff=(1.2+3.4j), is_measurement=False) DictStateFn({'1': 1}, coeff=(4.3+2.1j), is_measurement=False) DictStateFn({'0': (1.2+3.4j), '1': (5.6+7.8j)}, coeff=1.0, is_measurement=False) DictStateFn({'0': 1.0, '1': 1.0}) * 0.7071067811865475 DictStateFn({'0': 1.0, '1': -1.0}) * 0.7071067811865475 SummedOp([ CircuitStateFn( ┌───┐ q_0: ┤ H ├ └───┘ ), CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ └───┘└───┘ ) ]) DictStateFn({'0': 1.414213562373095, '1': 0.0}) SummedOp([ CircuitStateFn( ┌───┐ q_0: ┤ H ├ └───┘ ), CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ └───┘└───┘ ) * -1.0 ]) DictStateFn({'0': 0.0, '1': 1.414213562373095}) ComposedOp([ DictMeasurement({'0': 1}), DictStateFn({'0': 1}) ]) ComposedOp([ DictMeasurement({'1': 1}), DictStateFn({'1': 1}) ]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[編集内容(eval etc)] from qiskit.aqua.operators import (StateFn, Zero, One, Plus, Minus, X, H, DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn) import math # (|0> + |1>) / (1/√2) cPlus = (Zero + One) / math.sqrt(2) print((~cPlus @ cPlus).eval()) # (|0> - |1>) / (1/√2) cMinus = (Zero - One) / math.sqrt(2) print((~cMinus @ cMinus).eval()) # <0|0> print((~Zero @ Zero).eval()) # <1|1> print((~One @ One).eval()) # @ is equivalent to compose. print(~One @ One) print((~One).compose(One)) # |0> tensor |+> print(Zero ^ Plus) # |0> tensor |-> print(Zero ^ Minus) # |1> tensor |+> print(One ^ Plus) # |1> tensor |-> print(One ^ Minus) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
[出力結果] 0.9999999999999998 0.9999999999999998 1.0 1.0 ComposedOp([ DictMeasurement({'1': 1}), DictStateFn({'1': 1}) ]) ComposedOp([ DictMeasurement({'1': 1}), DictStateFn({'1': 1}) ]) TensoredOp([ DictStateFn({'0': 1}), CircuitStateFn( ┌───┐ q_0: ┤ H ├ └───┘ ) ]) TensoredOp([ DictStateFn({'0': 1}), CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ └───┘└───┘ ) ]) TensoredOp([ DictStateFn({'1': 1}), CircuitStateFn( ┌───┐ q_0: ┤ H ├ └───┘ ) ]) TensoredOp([ DictStateFn({'1': 1}), CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ └───┘└───┘ ) ]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(to_circuit_op etc)] from qiskit.aqua.operators import (StateFn, Zero, One, Plus, Minus, X, H, DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn) import math # to_circuit_op print((Zero ^ Zero).to_circuit_op()) print((One ^ One).to_circuit_op()) print((Plus ^ Plus).to_circuit_op()) print((Minus ^ Minus).to_circuit_op()) # to_circuit_op print((Zero ^ One).to_circuit_op()) print((Zero ^ Plus).to_circuit_op()) print((Zero ^ Minus).to_circuit_op()) # tensor powers # ValueError: Sum over statefns with different numbers of qubits, 2 and 3, is not well defined # print(1.2 * ((One ^ 2) + (Zero ^ 3))) # error. print((One ^ 3) + (Zero ^ 3)) print((Zero ^ Zero ^ One) + (Zero ^ One ^ Zero) + (One ^ Zero ^ Zero)) print(2 * ((Plus ^ 3) + (Minus ^ 3))) print((One ^ Zero) ^ 5) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
[出力結果] CircuitStateFn( q_0: q_1: ) CircuitStateFn( ┌───┐ q_0: ┤ X ├ ├───┤ q_1: ┤ X ├ └───┘ ) CircuitStateFn( ┌───┐ q_0: ┤ H ├ ├───┤ q_1: ┤ H ├ └───┘ ) CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ ├───┤├───┤ q_1: ┤ X ├┤ H ├ └───┘└───┘ ) CircuitStateFn( ┌───┐ q_0: ┤ X ├ └───┘ q_1: ───── ) CircuitStateFn( ┌───┐ q_0: ┤ H ├ └───┘ q_1: ───── ) CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ └───┘└───┘ q_1: ────────── ) DictStateFn({'111': 1.0, '000': 1.0}) DictStateFn({'001': 1.0, '010': 1.0, '100': 1.0}) 2.0 * SummedOp([ CircuitStateFn( ┌───┐ q_0: ┤ H ├ ├───┤ q_1: ┤ H ├ ├───┤ q_2: ┤ H ├ └───┘ ), CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ ├───┤├───┤ q_1: ┤ X ├┤ H ├ ├───┤├───┤ q_2: ┤ X ├┤ H ├ └───┘└───┘ ) ]) DictStateFn({'1010101010': 1}) |