diff --git a/notebooks/1. Basic Usage/1.1 PauliwordOp usage.ipynb b/notebooks/1. Basic Usage/1.1 PauliwordOp usage.ipynb index 50e66066..94e4aa8d 100644 --- a/notebooks/1. Basic Usage/1.1 PauliwordOp usage.ipynb +++ b/notebooks/1. Basic Usage/1.1 PauliwordOp usage.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 1, "id": "ffd75c10", "metadata": {}, "outputs": [], @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 2, "id": "88499054", "metadata": {}, "outputs": [ @@ -48,7 +48,7 @@ " 6.000+0.000j XY" ] }, - "execution_count": 20, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 3, "id": "eff541ba", "metadata": {}, "outputs": [ @@ -77,7 +77,7 @@ " 6.000+0.000j XY" ] }, - "execution_count": 21, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 4, "id": "61cb78d0", "metadata": { "scrolled": true @@ -104,7 +104,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f577ad75758485989e3b7571b5cdda7", + "model_id": "a1dc01d0749c4e1cb4dded12dfbc4f86", "version_major": 2, "version_minor": 0 }, @@ -126,7 +126,7 @@ " 6.000+0.000j XY" ] }, - "execution_count": 22, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 5, "id": "b3df6183", "metadata": {}, "outputs": [ @@ -224,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 6, "id": "f63fd38e", "metadata": {}, "outputs": [], @@ -235,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 7, "id": "d6ccb539", "metadata": {}, "outputs": [ @@ -247,7 +247,7 @@ " 1.000+0.000j XY" ] }, - "execution_count": 25, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -284,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 8, "id": "17c2b067", "metadata": {}, "outputs": [ @@ -297,7 +297,7 @@ "-1.000+0.000j YZ" ] }, - "execution_count": 26, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -338,7 +338,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 9, "id": "84c31e79", "metadata": {}, "outputs": [ @@ -360,7 +360,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 10, "id": "4668c8be", "metadata": {}, "outputs": [ @@ -385,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 11, "id": "32ba5676", "metadata": {}, "outputs": [ @@ -418,7 +418,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 12, "id": "46de4925", "metadata": {}, "outputs": [ @@ -447,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 13, "id": "8a1f206f", "metadata": {}, "outputs": [ @@ -479,7 +479,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 14, "id": "5065cdeb", "metadata": {}, "outputs": [ @@ -514,7 +514,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 15, "id": "cb6eb284", "metadata": { "scrolled": true @@ -549,7 +549,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 16, "id": "b484f197", "metadata": {}, "outputs": [ @@ -605,7 +605,7 @@ "2 XX 3.0" ] }, - "execution_count": 34, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -624,7 +624,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 17, "id": "57261e6f", "metadata": {}, "outputs": [ @@ -636,7 +636,7 @@ "(2+0j) [Z0 Z1]" ] }, - "execution_count": 35, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -655,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 18, "id": "cda97c5e", "metadata": {}, "outputs": [ @@ -666,7 +666,7 @@ " coeffs=[3.+0.j, 2.+0.j, 1.+0.j]), coeff=1.0)" ] }, - "execution_count": 36, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } diff --git a/notebooks/1. Basic Usage/1.2 QuantumState usage.ipynb b/notebooks/1. Basic Usage/1.2 QuantumState usage.ipynb index ff6c74e9..e16d0769 100644 --- a/notebooks/1. Basic Usage/1.2 QuantumState usage.ipynb +++ b/notebooks/1. Basic Usage/1.2 QuantumState usage.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 1, "id": "b71a6aa8", "metadata": {}, "outputs": [], @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 2, "id": "e5131b2d", "metadata": {}, "outputs": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 3, "id": "3a03866a", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 4, "id": "6c007a11", "metadata": {}, "outputs": [ @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 5, "id": "277acf81", "metadata": {}, "outputs": [ @@ -147,27 +147,27 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.236+0.024j |01011> +\n", - " 0.221+0.270j |10001> +\n", - " 0.112+0.245j |10001> +\n", - " 0.144+0.300j |10110> +\n", - " 0.188+0.324j |11000> +\n", - " 0.292+0.235j |11001> +\n", - " 0.076+0.306j |01110> +\n", - " 0.063+0.074j |01011> +\n", - " 0.207+0.201j |10000> +\n", - " 0.322+0.249j |10010>\n", + " 0.177+0.075j |01100> +\n", + " 0.314+0.374j |11111> +\n", + " 0.264+0.109j |11010> +\n", + " 0.170+0.242j |01100> +\n", + " 0.363+0.156j |10001> +\n", + " 0.107+0.205j |11110> +\n", + " 0.095+0.021j |00010> +\n", + " 0.326+0.385j |10010> +\n", + " 0.116+0.044j |10111> +\n", + " 0.258+0.016j |11011>\n", "\n", - " 0.209+0.121j |11110> +\n", - " 0.210+0.298j |01010> +\n", - " 0.055+0.066j |11010> +\n", - " 0.289+0.319j |11111> +\n", - " 0.242+0.344j |11111> +\n", - " 0.020+0.218j |11111> +\n", - " 0.263+0.076j |01001> +\n", - " 0.308+0.179j |11001> +\n", - " 0.317+0.217j |10100> +\n", - " 0.196+0.048j |10111>\n" + " 0.091+0.344j |10110> +\n", + " 0.361+0.405j |10101> +\n", + " 0.017+0.002j |11011> +\n", + " 0.285+0.411j |11010> +\n", + " 0.086+0.076j |01111> +\n", + " 0.245+0.219j |11110> +\n", + " 0.039+0.127j |00011> +\n", + " 0.083+0.087j |01011> +\n", + " 0.023+0.371j |11001> +\n", + " 0.168+0.096j |00100>\n" ] } ], @@ -175,8 +175,8 @@ "N = 5 # number of qubits\n", "M = 10 # number of terms\n", "\n", - "psi_1 = QuantumState.random_state(N, M)\n", - "psi_2 = QuantumState.random_state(N, M)\n", + "psi_1 = QuantumState.random(N, M)\n", + "psi_2 = QuantumState.random(N, M)\n", "\n", "print(psi_1)\n", "print()\n", @@ -185,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "id": "2c9aa59f", "metadata": {}, "outputs": [ @@ -193,23 +193,24 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.148+0.043j |01001> +\n", - " 0.118+0.168j |01010> +\n", - " 0.168+0.055j |01011> +\n", - " 0.043+0.172j |01110> +\n", - " 0.117+0.113j |10000> +\n", - " 0.187+0.291j |10001> +\n", - " 0.181+0.140j |10010> +\n", - " 0.178+0.122j |10100> +\n", - " 0.081+0.169j |10110> +\n", - " 0.110+0.027j |10111> +\n", - " 0.106+0.183j |11000> +\n", - " 0.338+0.233j |11001> +\n", - " 0.031+0.037j |11010> +\n", - " 0.118+0.068j |11110> +\n", - " 0.311+0.497j |11111>\n", + " 0.060+0.013j |00010> +\n", + " 0.025+0.081j |00011> +\n", + " 0.107+0.061j |00100> +\n", + " 0.052+0.055j |01011> +\n", + " 0.220+0.201j |01100> +\n", + " 0.054+0.048j |01111> +\n", + " 0.230+0.099j |10001> +\n", + " 0.207+0.244j |10010> +\n", + " 0.229+0.257j |10101> +\n", + " 0.058+0.218j |10110> +\n", + " 0.074+0.028j |10111> +\n", + " 0.014+0.235j |11001> +\n", + " 0.348+0.330j |11010> +\n", + " 0.175+0.011j |11011> +\n", + " 0.223+0.269j |11110> +\n", + " 0.199+0.237j |11111>\n", "\n", - "Norm: (0.9999999999999999+0j)\n" + "Norm: (1+0j)\n" ] } ], @@ -230,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 7, "id": "05dc6d0a", "metadata": {}, "outputs": [ @@ -238,38 +239,38 @@ "name": "stdout", "output_type": "stream", "text": [ - "-0.009+0.044j |00000> +\n", - "-0.036-0.036j |00001> +\n", - "-0.093+0.027j |00010> +\n", - " 0.306+0.094j |00011> +\n", - " 0.182-0.058j |00100> +\n", - " 0.058+0.059j |00101> +\n", - " 0.256+0.302j |00110> +\n", - " 0.188-0.128j |00111> +\n", - "-0.064-0.104j |01000> +\n", - " 0.215-0.025j |01001> +\n", - " 0.146+0.247j |01010> +\n", - "-0.208-0.058j |01011> +\n", - "-0.031-0.014j |01100> +\n", - "-0.072-0.038j |01101> +\n", - "-0.044-0.022j |01110> +\n", - "-0.257+0.020j |01111> +\n", - " 0.096+0.078j |10000> +\n", - " 0.098+0.068j |10001> +\n", - "-0.004-0.041j |10010> +\n", - " 0.172-0.006j |10011> +\n", - " 0.110-0.157j |10100> +\n", - " 0.144-0.136j |10101> +\n", - " 0.059+0.147j |10110> +\n", - "-0.103+0.125j |10111> +\n", - "-0.034+0.005j |11000> +\n", - "-0.041+0.155j |11001> +\n", - " 0.103-0.003j |11010> +\n", - "-0.289-0.012j |11011> +\n", - " 0.029+0.077j |11100> +\n", - " 0.115-0.070j |11101> +\n", - "-0.091+0.124j |11110> +\n", - " 0.075-0.039j |11111>\n" + "-0.117-0.171j |00000> +\n", + "-0.164-0.062j |00001> +\n", + " 0.168-0.123j |00010> +\n", + "-0.006+0.092j |00011> +\n", + "-0.160+0.173j |00100> +\n", + "-0.022-0.055j |00101> +\n", + "-0.207+0.103j |00110> +\n", + " 0.155+0.085j |00111> +\n", + "-0.066-0.003j |01000> +\n", + " 0.076+0.283j |01001> +\n", + "-0.040-0.157j |01010> +\n", + "-0.129-0.246j |01011> +\n", + " 0.013-0.128j |01100> +\n", + "-0.016+0.126j |01101> +\n", + "-0.035-0.018j |01110> +\n", + "-0.019-0.037j |01111> +\n", + "-0.043+0.129j |10000> +\n", + " 0.220+0.113j |10001> +\n", + " 0.016-0.172j |10010> +\n", + " 0.098-0.218j |10011> +\n", + " 0.017+0.103j |10100> +\n", + "-0.236-0.000j |10101> +\n", + " 0.106+0.076j |10110> +\n", + "-0.072-0.237j |10111> +\n", + " 0.186-0.030j |11000> +\n", + " 0.007+0.147j |11001> +\n", + "-0.210+0.061j |11010> +\n", + " 0.104-0.003j |11011> +\n", + "-0.129+0.013j |11100> +\n", + " 0.212-0.038j |11101> +\n", + " 0.101+0.003j |11110> +\n", + "-0.004+0.000j |11111>\n" ] } ], @@ -280,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 8, "id": "bc1e9705", "metadata": {}, "outputs": [ @@ -290,18 +291,18 @@ "text": [ "Generate a random Hermitian operator:\n", "\n", - " 1.118+0.000j YZXYZ +\n", - " 0.222+0.000j ZIZIX +\n", - " 0.675+0.000j XXIYX +\n", - "-2.429+0.000j ZZXXI +\n", - " 0.131+0.000j ZZZZZ +\n", - "-1.408+0.000j ZYXYY +\n", - "-0.834+0.000j YXIZX +\n", - " 1.586+0.000j ZIYYI +\n", - "-1.057+0.000j ZZYXY +\n", - " 1.316+0.000j YIZIY\n", + "-0.005+0.000j ZYZYY +\n", + "-1.615+0.000j ZZXIZ +\n", + " 1.031+0.000j YIYZZ +\n", + "-0.174+0.000j ZIYZZ +\n", + "-0.279+0.000j ZIZIZ +\n", + "-1.485+0.000j YZXIY +\n", + "-0.191+0.000j ZYXYY +\n", + " 0.582+0.000j IYZIX +\n", + "-0.616+0.000j ZZXXY +\n", + " 0.074+0.000j IIYZX\n", "\n", - "Expectation value = 0.4313721369770473\n" + "Expectation value = 0.39241190535279735\n" ] } ], @@ -323,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 9, "id": "bb741ebd", "metadata": {}, "outputs": [ @@ -364,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 10, "id": "7c0d7bcd", "metadata": {}, "outputs": [ @@ -377,7 +378,7 @@ " 16.000+0.000j |1111>" ] }, - "execution_count": 30, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -404,7 +405,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 11, "id": "4d645b45", "metadata": {}, "outputs": [ @@ -446,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 12, "id": "2bd472ba", "metadata": {}, "outputs": [ @@ -492,7 +493,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 13, "id": "5653acac", "metadata": {}, "outputs": [ @@ -500,12 +501,12 @@ "data": { "text/plain": [ " 0.200+0.000j |0101> +\n", - " 0.447+0.000j |1101> +\n", - " 0.529+0.000j |0001> +\n", - " 0.693+0.000j |1111>" + " 0.424+0.000j |1101> +\n", + " 0.648+0.000j |0001> +\n", + " 0.600+0.000j |1111>" ] }, - "execution_count": 33, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -525,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 14, "id": "f14fe0a8", "metadata": {}, "outputs": [ @@ -533,21 +534,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "With n_samples=1 , = (0.565685424949238+0j)\n", + "With n_samples=1 , = (0.4472135954999579+0j)\n", "With n_samples=4 , = (0.9536631057245559+0j)\n", - "With n_samples=16 , = (0.9785368169228137+0j)\n", - "With n_samples=64 , = (0.9880094617859954+0j)\n", - "With n_samples=256 , = (0.9979956122926343+0j)\n", - "With n_samples=1024 , = (0.9996961647743783+0j)\n", - "With n_samples=4096 , = (0.9999363594211486+0j)\n", - "With n_samples=16384 , = (0.9999952211731546+0j)\n", - "With n_samples=65536 , = (0.999992069869821+0j)\n", - "With n_samples=262144 , = (0.9999998393622556+0j)\n", - "With n_samples=1048576 , = (0.9999992981791623+0j)\n", - "With n_samples=4194304 , = (0.9999999843659798+0j)\n", - "With n_samples=16777216 , = (0.9999999898761083+0j)\n", - "With n_samples=67108864 , = (0.9999999978134162+0j)\n", - "With n_samples=268435456 , = (0.9999999998605718+0j)\n" + "With n_samples=16 , = (0.9535261006375797+0j)\n", + "With n_samples=64 , = (0.9836078899552315+0j)\n", + "With n_samples=256 , = (0.9991960138426712+0j)\n", + "With n_samples=1024 , = (0.9996322633486345+0j)\n", + "With n_samples=4096 , = (0.9999553083700304+0j)\n", + "With n_samples=16384 , = (0.9999895200428515+0j)\n", + "With n_samples=65536 , = (0.9999953223692815+0j)\n", + "With n_samples=262144 , = (0.9999995188606302+0j)\n", + "With n_samples=1048576 , = (0.9999996888442162+0j)\n", + "With n_samples=4194304 , = (0.9999999597206877+0j)\n", + "With n_samples=16777216 , = (0.9999999852232992+0j)\n", + "With n_samples=67108864 , = (0.9999999959238957+0j)\n", + "With n_samples=268435456 , = (0.9999999987686086+0j)\n" ] } ], @@ -567,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 15, "id": "8b6fe4c7", "metadata": {}, "outputs": [ @@ -575,14 +576,14 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.067+0.238j |000> +\n", - " 0.307-0.022j |001> +\n", - " 0.314-0.032j |010> +\n", - "-0.070+0.090j |011> +\n", - " 0.091-0.128j |100> +\n", - "-0.064-0.075j |101> +\n", - " 0.227+0.551j |110> +\n", - "-0.197-0.550j |111>\n" + " 0.038+0.160j |000> +\n", + " 0.036-0.072j |001> +\n", + "-0.258-0.051j |010> +\n", + " 0.283-0.302j |011> +\n", + "-0.173-0.462j |100> +\n", + "-0.099-0.291j |101> +\n", + " 0.107+0.125j |110> +\n", + " 0.280+0.532j |111>\n" ] } ], @@ -594,13 +595,13 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 16, "id": "2fdfbaf2", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -617,13 +618,13 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 17, "id": "267f7600", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -642,7 +643,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 18, "id": "47ba9923", "metadata": {}, "outputs": [ @@ -652,7 +653,7 @@ "" ] }, - "execution_count": 38, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, @@ -678,7 +679,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 19, "id": "da477775", "metadata": {}, "outputs": [ @@ -688,7 +689,7 @@ "" ] }, - "execution_count": 39, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, @@ -711,7 +712,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 20, "id": "057c57e0", "metadata": {}, "outputs": [ @@ -721,7 +722,7 @@ "" ] }, - "execution_count": 40, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, diff --git a/notebooks/1. Basic Usage/1.3 importing_hamiltonian_data.ipynb b/notebooks/1. Basic Usage/1.3 importing_hamiltonian_data.ipynb index d9dbaab6..704c957d 100644 --- a/notebooks/1. Basic Usage/1.3 importing_hamiltonian_data.ipynb +++ b/notebooks/1. Basic Usage/1.3 importing_hamiltonian_data.ipynb @@ -57,107 +57,107 @@ { "data": { "text/plain": [ - "['MgH2_STO-3G_SINGLET_BK.json',\n", - " 'Mg_STO-3G_SINGLET_JW.json',\n", - " 'HOOH_STO-3G_SINGLET_JW.json',\n", - " 'OH-_STO-3G_SINGLET_JW.json',\n", - " 'NaH_STO-3G_SINGLET_JW.json',\n", - " 'HCN_STO-3G_SINGLET_BK.json',\n", - " 'N2_STO-3G_SINGLET_BK.json',\n", - " 'B_STO-3G_DOUBLET_JW.json',\n", - " 'CH+_STO-3G_SINGLET_BK.json',\n", - " 'H2S_STO-3G_SINGLET_JW.json',\n", - " 'NH_STO-3G_SINGLET_JW.json',\n", + "['C_STO-3G_TRIPLET_JW.json',\n", + " 'H2_6-31G_SINGLET_JW.json',\n", + " 'HCl_STO-3G_SINGLET_BK.json',\n", + " 'HeH+_6-311G_SINGLET_BK.json',\n", + " 'BeH2_STO-3G_SINGLET_JW.json',\n", + " 'NH4+_STO-3G_SINGLET_BK.json',\n", + " 'SiH4_STO-3G_SINGLET_JW.json',\n", + " 'LiOH_STO-3G_SINGLET_JW.json',\n", + " 'H2O_STO-3G_SINGLET_BK.json',\n", " 'LiOH_STO-3G_SINGLET_BK.json',\n", - " 'BH_STO-3G_SINGLET_BK.json',\n", - " 'HCl_STO-3G_SINGLET_JW.json',\n", - " 'CH2_STO-3G_TRIPLET_BK.json',\n", - " 'NaCl_STO-3G_SINGLET_BK.json',\n", - " 'F2_STO-3G_SINGLET_JW.json',\n", - " 'Be_STO-3G_SINGLET_BK.json',\n", - " 'LiH_3-21G_SINGLET_BK.json',\n", - " 'HeH+_6-311G_SINGLET_JW.json',\n", - " 'O2_STO-3G_TRIPLET_BK.json',\n", - " 'H2_6-31G_SINGLET_BK.json',\n", - " 'CH3OH_STO-3G_SINGLET_BK.json',\n", + " 'OH-_STO-3G_SINGLET_BK.json',\n", + " 'Be_STO-3G_SINGLET_JW.json',\n", + " 'O2_STO-3G_TRIPLET_JW.json',\n", + " 'BeH+_STO-3G_SINGLET_BK.json',\n", + " 'H3+_3-21G_SINGLET_BK.json',\n", + " 'H3+_3-21G_SINGLET_JW.json',\n", + " 'H3+_STO-3G_SINGLET_JW.json',\n", + " 'HCN_STO-3G_SINGLET_JW.json',\n", + " 'H4_STO-3G_SINGLET_BK.json',\n", " 'NH2-_STO-3G_SINGLET_BK.json',\n", - " 'H2_3-21G_SINGLET_BK.json',\n", + " 'LiH_STO-3G_SINGLET_JW.json',\n", + " 'CH2_STO-3G_TRIPLET_JW.json',\n", + " 'H6_STO-3G_SINGLET_JW.json',\n", + " 'H2O_STO-3G_SINGLET_JW.json',\n", + " 'CH+_STO-3G_SINGLET_BK.json',\n", + " 'CH2_STO-3G_TRIPLET_BK.json',\n", " 'BeH+_STO-3G_SINGLET_JW.json',\n", - " 'H2_6-31G_SINGLET_JW.json',\n", + " 'Li_STO-3G_DOUBLET_BK.json',\n", + " 'H6_STO-3G_SINGLET_BK.json',\n", + " 'NH_STO-3G_SINGLET_JW.json',\n", " 'CH3OH_STO-3G_SINGLET_JW.json',\n", + " 'HF_3-21G_SINGLET_BK.json',\n", + " 'HeH+_3-21G_SINGLET_JW.json',\n", + " 'LiH_STO-3G_SINGLET_BK.json',\n", + " 'NaCl_STO-3G_SINGLET_BK.json',\n", + " 'N_STO-3G_QUARTET_BK.json',\n", + " 'B+_STO-3G_SINGLET_JW.json',\n", + " 'Li_STO-3G_DOUBLET_JW.json',\n", + " 'NaH_STO-3G_SINGLET_JW.json',\n", + " 'MgH2_STO-3G_SINGLET_BK.json',\n", + " 'NH_STO-3G_SINGLET_BK.json',\n", " 'NH2-_STO-3G_SINGLET_JW.json',\n", - " 'O2_STO-3G_TRIPLET_JW.json',\n", - " 'BeH+_STO-3G_SINGLET_BK.json',\n", - " 'H2_3-21G_SINGLET_JW.json',\n", - " 'Be_STO-3G_SINGLET_JW.json',\n", - " 'F2_STO-3G_SINGLET_BK.json',\n", - " 'HeH+_6-311G_SINGLET_BK.json',\n", - " 'LiH_3-21G_SINGLET_JW.json',\n", - " 'HCl_STO-3G_SINGLET_BK.json',\n", + " 'H4_STO-3G_SINGLET_JW.json',\n", + " 'Mg_STO-3G_SINGLET_BK.json',\n", + " 'CH3OH_STO-3G_SINGLET_BK.json',\n", + " 'CO2_STO-3G_SINGLET_JW.json',\n", + " 'CH4_STO-3G_SINGLET_JW.json',\n", " 'NaCl_STO-3G_SINGLET_JW.json',\n", - " 'CH2_STO-3G_TRIPLET_JW.json',\n", - " 'NH_STO-3G_SINGLET_BK.json',\n", - " 'H2S_STO-3G_SINGLET_BK.json',\n", + " 'H3+_STO-3G_SINGLET_BK.json',\n", + " 'NH3_STO-3G_SINGLET_JW.json',\n", + " 'OH-_STO-3G_SINGLET_JW.json',\n", + " 'H3O+_STO-3G_SINGLET_JW.json',\n", " 'BH_STO-3G_SINGLET_JW.json',\n", - " 'LiOH_STO-3G_SINGLET_JW.json',\n", - " 'HCN_STO-3G_SINGLET_JW.json',\n", - " 'CH+_STO-3G_SINGLET_JW.json',\n", - " 'N2_STO-3G_SINGLET_JW.json',\n", - " 'B_STO-3G_DOUBLET_BK.json',\n", - " 'OH-_STO-3G_SINGLET_BK.json',\n", + " 'HF_STO-3G_SINGLET_BK.json',\n", " 'NaH_STO-3G_SINGLET_BK.json',\n", + " 'O2_STO-3G_TRIPLET_BK.json',\n", + " 'CO2_STO-3G_SINGLET_BK.json',\n", + " 'HeH+_6-311G_SINGLET_JW.json',\n", + " 'N2_STO-3G_SINGLET_BK.json',\n", + " 'NeH+_STO-3G_SINGLET_BK.json',\n", + " 'C_STO-3G_TRIPLET_BK.json',\n", + " 'H2_6-311G_SINGLET_BK.json',\n", + " 'B_STO-3G_DOUBLET_JW.json',\n", + " 'BeH2_STO-3G_SINGLET_BK.json',\n", + " 'B+_STO-3G_SINGLET_BK.json',\n", + " 'HeH+_3-21G_SINGLET_BK.json',\n", + " 'HCN_STO-3G_SINGLET_BK.json',\n", + " 'N_STO-3G_QUARTET_JW.json',\n", + " 'HF_STO-3G_SINGLET_JW.json',\n", " 'HOOH_STO-3G_SINGLET_BK.json',\n", - " 'Mg_STO-3G_SINGLET_BK.json',\n", + " 'CH+_STO-3G_SINGLET_JW.json',\n", + " 'CH4_STO-3G_SINGLET_BK.json',\n", + " 'H2S_STO-3G_SINGLET_BK.json',\n", " 'MgH2_STO-3G_SINGLET_JW.json',\n", - " 'H3O+_STO-3G_SINGLET_BK.json',\n", - " 'CO_STO-3G_SINGLET_BK.json',\n", - " 'HeH+_3-21G_SINGLET_BK.json',\n", - " 'HF_3-21G_SINGLET_BK.json',\n", - " 'H3+_STO-3G_SINGLET_JW.json',\n", - " 'BeH2_STO-3G_SINGLET_JW.json',\n", - " 'CO2_STO-3G_SINGLET_JW.json',\n", - " 'H4_STO-3G_SINGLET_BK.json',\n", - " 'H3+_3-21G_SINGLET_BK.json',\n", - " 'HF_STO-3G_SINGLET_BK.json',\n", - " 'LiH_STO-3G_SINGLET_JW.json',\n", - " 'CH4_STO-3G_SINGLET_JW.json',\n", " 'BH2+_STO-3G_SINGLET_JW.json',\n", - " 'C_STO-3G_TRIPLET_JW.json',\n", - " 'H6_STO-3G_SINGLET_JW.json',\n", - " 'H2O_STO-3G_SINGLET_BK.json',\n", - " 'N_STO-3G_QUARTET_JW.json',\n", - " 'NH4+_STO-3G_SINGLET_BK.json',\n", + " 'Mg_STO-3G_SINGLET_JW.json',\n", + " 'B_STO-3G_DOUBLET_BK.json',\n", + " 'NH4+_STO-3G_SINGLET_JW.json',\n", + " 'H2_6-311G_SINGLET_JW.json',\n", + " 'F2_STO-3G_SINGLET_JW.json',\n", + " 'HF_3-21G_SINGLET_JW.json',\n", " 'NeH+_STO-3G_SINGLET_JW.json',\n", - " 'B+_STO-3G_SINGLET_JW.json',\n", - " 'Li_STO-3G_DOUBLET_BK.json',\n", - " 'H2_6-311G_SINGLET_BK.json',\n", - " 'SiH4_STO-3G_SINGLET_JW.json',\n", + " 'H3O+_STO-3G_SINGLET_BK.json',\n", + " 'O_STO-3G_TRIPLET_JW.json',\n", + " 'BH_STO-3G_SINGLET_BK.json',\n", + " 'H2_3-21G_SINGLET_JW.json',\n", + " 'HOOH_STO-3G_SINGLET_JW.json',\n", " 'NH3_STO-3G_SINGLET_BK.json',\n", - " 'H2_6-311G_SINGLET_JW.json',\n", - " 'NH3_STO-3G_SINGLET_JW.json',\n", + " 'N2_STO-3G_SINGLET_JW.json',\n", + " 'LiH_3-21G_SINGLET_BK.json',\n", + " 'H2S_STO-3G_SINGLET_JW.json',\n", + " 'CO_STO-3G_SINGLET_BK.json',\n", + " 'Be_STO-3G_SINGLET_BK.json',\n", + " 'H2_3-21G_SINGLET_BK.json',\n", + " 'H2_6-31G_SINGLET_BK.json',\n", " 'SiH4_STO-3G_SINGLET_BK.json',\n", - " 'NH4+_STO-3G_SINGLET_JW.json',\n", - " 'NeH+_STO-3G_SINGLET_BK.json',\n", - " 'B+_STO-3G_SINGLET_BK.json',\n", - " 'O_STO-3G_TRIPLET_JW.json',\n", - " 'Li_STO-3G_DOUBLET_JW.json',\n", - " 'H2O_STO-3G_SINGLET_JW.json',\n", - " 'N_STO-3G_QUARTET_BK.json',\n", " 'BH2+_STO-3G_SINGLET_BK.json',\n", - " 'CH4_STO-3G_SINGLET_BK.json',\n", - " 'H6_STO-3G_SINGLET_BK.json',\n", - " 'C_STO-3G_TRIPLET_BK.json',\n", - " 'H3+_3-21G_SINGLET_JW.json',\n", - " 'LiH_STO-3G_SINGLET_BK.json',\n", - " 'HF_STO-3G_SINGLET_JW.json',\n", - " 'H3+_STO-3G_SINGLET_BK.json',\n", - " 'H4_STO-3G_SINGLET_JW.json',\n", - " 'CO2_STO-3G_SINGLET_BK.json',\n", - " 'BeH2_STO-3G_SINGLET_BK.json',\n", + " 'F2_STO-3G_SINGLET_BK.json',\n", " 'CO_STO-3G_SINGLET_JW.json',\n", - " 'H3O+_STO-3G_SINGLET_JW.json',\n", - " 'HeH+_3-21G_SINGLET_JW.json',\n", - " 'HF_3-21G_SINGLET_JW.json']" + " 'HCl_STO-3G_SINGLET_JW.json',\n", + " 'LiH_3-21G_SINGLET_JW.json']" ] }, "execution_count": 3, @@ -488,7 +488,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 13, "id": "5359c992", "metadata": {}, "outputs": [ @@ -498,7 +498,7 @@ "4" ] }, - "execution_count": 23, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -509,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "a361775e", "metadata": {}, "outputs": [ @@ -522,7 +522,7 @@ " 'FCI': {'energy': -1.86439214542294, 'converged': True}}" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -533,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "7cc6ffd2", "metadata": {}, "outputs": [ @@ -543,7 +543,7 @@ "1e-06" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -554,7 +554,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "9efb1597", "metadata": {}, "outputs": [ @@ -564,7 +564,7 @@ "dict_keys(['number_operator', 'alpha_parity_operator', 'beta_parity_operator', 'UCCSD_operator'])" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -575,7 +575,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "id": "c78ea7a4", "metadata": {}, "outputs": [], @@ -596,7 +596,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 18, "id": "58291638", "metadata": {}, "outputs": [ @@ -606,7 +606,7 @@ "(4+0j)" ] }, - "execution_count": 22, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -617,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, "id": "9f4a1a9c", "metadata": {}, "outputs": [ @@ -627,7 +627,7 @@ "4" ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -661,7 +661,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.13" } }, "nbformat": 4, diff --git a/notebooks/2. Applications/2.1 Tapering the Heisenberg Hamiltonian.ipynb b/notebooks/2. Applications/2.1 Tapering the Heisenberg Hamiltonian.ipynb index 16ec59f9..761658a8 100644 --- a/notebooks/2. Applications/2.1 Tapering the Heisenberg Hamiltonian.ipynb +++ b/notebooks/2. Applications/2.1 Tapering the Heisenberg Hamiltonian.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "072ceab2", "metadata": {}, "outputs": [ @@ -25,26 +25,26 @@ "text": [ "The heisenberg Hamiltonian is\n", "\n", - "-0.312+0.000j IIYY +\n", - "-0.312+0.000j IYYI +\n", - "-0.312+0.000j YYII +\n", - "-0.190+0.000j IIXX +\n", - "-0.190+0.000j IXXI +\n", - "-0.190+0.000j XXII +\n", - "-0.139+0.000j IIZZ +\n", - "-0.139+0.000j IZZI +\n", - "-0.139+0.000j ZZII\n", + "-0.480+0.000j IIYY +\n", + "-0.480+0.000j IYYI +\n", + "-0.480+0.000j YYII +\n", + "-0.179+0.000j IIZZ +\n", + "-0.179+0.000j IZZI +\n", + "-0.179+0.000j ZZII +\n", + "-0.115+0.000j IIXX +\n", + "-0.115+0.000j IXXI +\n", + "-0.115+0.000j XXII\n", "\n", - "with ground state energy -0.9583578191861392 and corresponding eigenvector\n", + "with ground state energy -1.4609414542131196 and corresponding eigenvector\n", "\n", - " 0.238-0.000j |0000> +\n", - "-0.325+0.000j |0011> +\n", - "-0.415+0.000j |0101> +\n", - "-0.406+0.000j |0110> +\n", - "-0.406+0.000j |1001> +\n", - "-0.415+0.000j |1010> +\n", - "-0.325+0.000j |1100> +\n", - " 0.238+0.000j |1111>\n" + "-0.419+0.000j |0000> +\n", + " 0.376+0.000j |0011> +\n", + " 0.296+0.000j |0101> +\n", + " 0.308+0.000j |0110> +\n", + " 0.308+0.000j |1001> +\n", + " 0.296+0.000j |1010> +\n", + " 0.376+0.000j |1100> +\n", + "-0.419+0.000j |1111>\n" ] } ], @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "a1738822", "metadata": { "scrolled": true @@ -145,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "d0560d49", "metadata": {}, "outputs": [ @@ -155,26 +155,26 @@ "text": [ "We rotate the Hamiltonian accordingly:\n", "\n", - "-0.139+0.000j IIZZ +\n", - "-0.190+0.000j IIXX +\n", - "-0.312+0.000j IIYY +\n", - " 0.139-0.000j IXZI +\n", - " 0.190-0.000j IXXX +\n", - " 0.139-0.000j XIZZ +\n", - " 0.312-0.000j XIZX +\n", - " 0.190-0.000j XXIX +\n", - "-0.312+0.000j XXYY\n", + "-0.179+0.000j IIZZ +\n", + "-0.115+0.000j IIXX +\n", + "-0.480+0.000j IIYY +\n", + " 0.179-0.000j IXZI +\n", + " 0.115-0.000j IXXX +\n", + " 0.179-0.000j XIZZ +\n", + " 0.480-0.000j XIZX +\n", + " 0.115-0.000j XXIX +\n", + "-0.480+0.000j XXYY\n", "\n", "and observe that qubit positions [1 0] consist only of Pauli I, X operators.\n", "\n", "These may therefore be removed to yield a 2-qubit reduced Hamiltonian:\n", "\n", - "-0.139+0.000j ZI +\n", - "-0.279+0.000j ZZ +\n", - " 0.190+0.000j IX +\n", - "-0.312+0.000j ZX +\n", - "-0.380+0.000j XX +\n", - "-0.624+0.000j YY\n" + "-0.179+0.000j ZI +\n", + "-0.358+0.000j ZZ +\n", + " 0.115+0.000j IX +\n", + "-0.480+0.000j ZX +\n", + "-0.230+0.000j XX +\n", + "-0.961+0.000j YY\n" ] } ], @@ -198,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "db6d9dec", "metadata": {}, "outputs": [ @@ -206,16 +206,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "The ground state energy of the Hamiltonian is -0.9583578191861392\n", - "and for the 2-qubit tapered Hamiltonian it is -0.9583578191861379;\n", - "the energy error is 1.2212453270876722e-15.\n", + "The ground state energy of the Hamiltonian is -1.4609414542131196\n", + "and for the 2-qubit tapered Hamiltonian it is -1.460941454213121;\n", + "the energy error is 1.3322676295501878e-15.\n", "\n", "The tapered ground state is:\n", "\n", - " 0.337-0.000j |00> +\n", - " 0.575+0.000j |01> +\n", - " 0.587+0.000j |10> +\n", - "-0.460+0.000j |11>\n" + "-0.593+0.000j |00> +\n", + "-0.436+0.000j |01> +\n", + "-0.418+0.000j |10> +\n", + " 0.532+0.000j |11>\n" ] } ], @@ -262,7 +262,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.13" }, "vscode": { "interpreter": { diff --git a/notebooks/2. Applications/2.2 QubitTapering usage.ipynb b/notebooks/2. Applications/2.2 QubitTapering usage.ipynb index 897915a6..a50ba21c 100644 --- a/notebooks/2. Applications/2.2 QubitTapering usage.ipynb +++ b/notebooks/2. Applications/2.2 QubitTapering usage.ipynb @@ -65,10 +65,10 @@ }, { "data": { - "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", + "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ - "
\n", - "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", + "

\n", + "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] @@ -113,7 +113,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "id": "d9ab5a88", "metadata": {}, "outputs": [ @@ -296,20 +296,20 @@ " 1 IZIZIZIZ" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from symmer.symplectic import StabilizerOp\n", + "from symmer.symplectic import IndependentOp\n", "\n", - "StabilizerOp.symmetry_basis(H_q, commuting_override=True)" + "IndependentOp.symmetry_generators(H_q, commuting_override=True)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "id": "adb344ea", "metadata": {}, "outputs": [ @@ -322,19 +322,19 @@ "-1 XIIIIIII" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "taper_hamiltonian = QubitTapering(H_q)\n", - "taper_hamiltonian.stabilizers.rotate_onto_single_qubit_paulis()\n" + "taper_hamiltonian.stabilizers.rotate_onto_single_qubit_paulis()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "id": "651ece02", "metadata": {}, "outputs": [ @@ -394,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "id": "03b40998", "metadata": {}, "outputs": [ @@ -422,7 +422,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "id": "7244101d", "metadata": {}, "outputs": [ @@ -449,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "id": "3d54b931", "metadata": {}, "outputs": [ @@ -540,7 +540,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 13, "id": "2bde8799", "metadata": {}, "outputs": [ @@ -548,9 +548,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "The ground state energy of the full system is -1.8743019741837124,\n", + "The ground state energy of the full system is -1.8743019741837241,\n", "whereas for the tapered system we find the energy is -1.8643921454229424.\n", - "The absolute error is 0.009909828760769956.\n" + "The absolute error is 0.009909828760781725.\n" ] } ], @@ -573,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "id": "1daa0bed", "metadata": {}, "outputs": [ @@ -587,7 +587,7 @@ } ], "source": [ - "hf_overlap = ( QuantumState(hf_array).dagger * true_gs_psi ).real\n", + "hf_overlap = ( QuantumState(hf_array).dagger * gs_psi ).real\n", "\n", "if hf_overlap < 1e-18:\n", " print('The Hartree-Fock state has no overlap with the true ground state!')\n", @@ -606,7 +606,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 16, "id": "a17ca852", "metadata": {}, "outputs": [ @@ -616,76 +616,78 @@ "text": [ "The true ground state is:\n", "\n", - " 0.000-0.000j |00001111> +\n", + "-0.000+0.000j |00001111> +\n", " 0.000+0.000j |00010111> +\n", - " 0.287+0.004j |00011011> +\n", - " 0.000+0.000j |00011101> +\n", - "-0.000+0.000j |00011110> +\n", - "-0.287-0.004j |00100111> +\n", - "-0.000+0.000j |00101011> +\n", - "-0.000+0.000j |00101101> +\n", - " 0.000-0.000j |00101110> +\n", - " 0.000-0.000j |00110011> +\n", - " 0.000+0.000j |00110101> +\n", - " 0.000-0.000j |00110110> +\n", - " 0.000-0.000j |00111001> +\n", + " 0.084+0.274j |00011011> +\n", + "-0.000+0.000j |00011101> +\n", + " 0.000-0.000j |00011110> +\n", + "-0.084-0.274j |00100111> +\n", + " 0.000+0.000j |00101011> +\n", + " 0.000-0.000j |00101101> +\n", + " 0.000+0.000j |00101110> +\n", + "-0.000+0.000j |00110011> +\n", + "-0.000-0.000j |00110101> +\n", + " 0.000+0.000j |00110110> +\n", + " 0.000+0.000j |00111001> +\n", "-0.000+0.000j |00111010> +\n", - "-0.000+0.000j |00111100> +\n", - "-0.000-0.000j |01000111> +\n", - "-0.000+0.000j |01001011> +\n", - "-0.000+0.000j |01001110> +\n", - " 0.000+0.000j |01010011> +\n", - " 0.000+0.000j |01010101> +\n", + " 0.000-0.000j |00111100> +\n", + " 0.000+0.000j |01000111> +\n", + "-0.000-0.000j |01001011> +\n", + " 0.000-0.000j |01001110> +\n", + "-0.000+0.000j |01010011> +\n", + "-0.000+0.000j |01010101> +\n", " 0.000+0.000j |01010110> +\n", - "-0.000-0.000j |01011001> +\n", - " 0.070+0.001j |01011010> +\n", - "-0.000-0.000j |01011100> +\n", - "-0.000+0.000j |01100011> +\n", + "-0.000+0.000j |01011001> +\n", + " 0.021+0.067j |01011010> +\n", + " 0.000-0.000j |01011100> +\n", + " 0.000-0.000j |01100011> +\n", " 0.000+0.000j |01100101> +\n", - "-0.351-0.005j |01100110> +\n", - " 0.280+0.004j |01101001> +\n", - "-0.000-0.000j |01101010> +\n", - " 0.000-0.000j |01101100> +\n", - " 0.000-0.000j |01110010> +\n", - " 0.000+0.000j |01110100> +\n", - " 0.000-0.000j |01111000> +\n", - "-0.000+0.000j |10000111> +\n", + "-0.103-0.335j |01100110> +\n", + " 0.082+0.268j |01101001> +\n", + " 0.000+0.000j |01101010> +\n", + "-0.000+0.000j |01101100> +\n", + "-0.000+0.000j |01110010> +\n", + "-0.000-0.000j |01110100> +\n", + " 0.000+0.000j |01111000> +\n", + "-0.000-0.000j |10000111> +\n", " 0.000-0.000j |10001011> +\n", - " 0.000-0.000j |10001101> +\n", - "-0.000+0.000j |10010011> +\n", - "-0.000-0.000j |10010101> +\n", - " 0.280+0.004j |10010110> +\n", - "-0.351-0.005j |10011001> +\n", - " 0.000-0.000j |10011010> +\n", - " 0.000-0.000j |10011100> +\n", - " 0.000-0.000j |10100011> +\n", - " 0.070+0.001j |10100101> +\n", - "-0.000+0.000j |10100110> +\n", - " 0.000-0.000j |10101001> +\n", - "-0.000+0.000j |10101010> +\n", - "-0.000+0.000j |10101100> +\n", - "-0.000+0.000j |10110001> +\n", - " 0.000-0.000j |10110100> +\n", + "-0.000+0.000j |10001101> +\n", + " 0.000-0.000j |10010011> +\n", + "-0.000+0.000j |10010101> +\n", + " 0.082+0.268j |10010110> +\n", + "-0.103-0.335j |10011001> +\n", + "-0.000-0.000j |10011010> +\n", + "-0.000+0.000j |10011100> +\n", + " 0.000+0.000j |10100011> +\n", + " 0.021+0.067j |10100101> +\n", + " 0.000+0.000j |10100110> +\n", + "-0.000-0.000j |10101001> +\n", + "-0.000-0.000j |10101010> +\n", + "-0.000-0.000j |10101100> +\n", + " 0.000-0.000j |10110001> +\n", + " 0.000+0.000j |10110100> +\n", "-0.000+0.000j |10111000> +\n", - "-0.000+0.000j |11000011> +\n", - "-0.000-0.000j |11000101> +\n", - "-0.000+0.000j |11000110> +\n", - "-0.000+0.000j |11001001> +\n", + " 0.000-0.000j |11000011> +\n", + " 0.000+0.000j |11000101> +\n", + "-0.000-0.000j |11000110> +\n", + "-0.000-0.000j |11001001> +\n", " 0.000-0.000j |11001010> +\n", - " 0.000-0.000j |11001100> +\n", - "-0.000-0.000j |11010001> +\n", - " 0.000-0.000j |11010010> +\n", + "-0.000+0.000j |11001100> +\n", + " 0.000-0.000j |11010001> +\n", + "-0.000+0.000j |11010010> +\n", "-0.000-0.000j |11010100> +\n", - "-0.460-0.007j |11011000> +\n", - " 0.000-0.000j |11100001> +\n", - "-0.000+0.000j |11100010> +\n", - " 0.460+0.007j |11100100> +\n", - " 0.000-0.000j |11101000> +\n", - " 0.000-0.000j |11110000>\n", + " 0.000-0.000j |11010101> +\n", + "-0.135-0.439j |11011000> +\n", + "-0.000+0.000j |11100001> +\n", + "-0.000-0.000j |11100010> +\n", + " 0.135+0.439j |11100100> +\n", + "-0.000-0.000j |11101000> +\n", + "-0.000+0.000j |11101010> +\n", + "-0.000+0.000j |11110000>\n", "\n", - "Taking the dominant amplitude 0.000-0.000j |00001111> for sector selection...\n", + "Taking the dominant amplitude -0.000+0.000j |00001111> for sector selection...\n", "we obtain the sector [-1 -1 1 1], in which the ground state energy is -1.8743019741837192.\n", - "The absolute error is -6.8833827526759706e-15.\n" + "The absolute error is 4.884981308350689e-15.\n" ] } ], @@ -717,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 17, "id": "cebfcd78", "metadata": {}, "outputs": [ @@ -726,7 +728,7 @@ "output_type": "stream", "text": [ "we obtain the sector [-1 -1 1 1], in which the ground state energy is -1.8743019741837192.\n", - "The absolute error is -6.8833827526759706e-15.\n" + "The absolute error is 4.884981308350689e-15.\n" ] } ], diff --git a/notebooks/2. Applications/2.3 CS-VQE for Electronic Structure.ipynb b/notebooks/2. Applications/2.3 CS-VQE for Electronic Structure.ipynb index 7b7514bd..d58ccceb 100644 --- a/notebooks/2. Applications/2.3 CS-VQE for Electronic Structure.ipynb +++ b/notebooks/2. Applications/2.3 CS-VQE for Electronic Structure.ipynb @@ -28,32 +28,24 @@ "metadata": {}, "outputs": [ { - "ename": "OSError", - "evalue": "dlopen(/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib, 0x0006): Library not loaded: '/usr/local/opt/libomp/lib/libomp.dylib'\n Referenced from: '/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib'\n Reason: tried: '/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/usr/local/lib/libomp.dylib' (no such file), '/usr/lib/libomp.dylib' (no such file)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/misc.py:55\u001b[0m, in \u001b[0;36mload_library\u001b[0;34m(libname)\u001b[0m\n\u001b[1;32m 54\u001b[0m _loaderpath \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mdirname(\u001b[38;5;18m__file__\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mnumpy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mctypeslib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_library\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlibname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_loaderpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m:\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/numpy/ctypeslib.py:158\u001b[0m, in \u001b[0;36mload_library\u001b[0;34m(libname, loader_path)\u001b[0m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mctypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcdll\u001b[49m\u001b[43m[\u001b[49m\u001b[43mlibpath\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m## defective lib file\u001b[39;00m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:457\u001b[0m, in \u001b[0;36mLibraryLoader.__getitem__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, name):\n\u001b[0;32m--> 457\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:452\u001b[0m, in \u001b[0;36mLibraryLoader.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 451\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(name)\n\u001b[0;32m--> 452\u001b[0m dll \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dlltype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 453\u001b[0m \u001b[38;5;28msetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, dll)\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:382\u001b[0m, in \u001b[0;36mCDLL.__init__\u001b[0;34m(self, name, mode, handle, use_errno, use_last_error, winmode)\u001b[0m\n\u001b[1;32m 381\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m handle \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 382\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle \u001b[38;5;241m=\u001b[39m \u001b[43m_dlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 383\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "\u001b[0;31mOSError\u001b[0m: dlopen(/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib, 0x0006): Library not loaded: '/usr/local/opt/libomp/lib/libomp.dylib'\n Referenced from: '/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib'\n Reason: tried: '/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/usr/local/lib/libomp.dylib' (no such file), '/usr/lib/libomp.dylib' (no such file)", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn [1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msymmer\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchemistry\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MoleculeBuilder\n\u001b[1;32m 3\u001b[0m atoms \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBe\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 4\u001b[0m coords \u001b[38;5;241m=\u001b[39m [(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m0\u001b[39m)]\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/symmer/chemistry/__init__.py:2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;124;03m\"\"\"init for chemistry.\"\"\"\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mCI_qham\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfermionic_ham\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/symmer/chemistry/utils.py:4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m gto\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenfermion\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchem\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpubchem\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m geometry_from_pubchem\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpy3Dmol\u001b[39;00m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/__init__.py:113\u001b[0m\n\u001b[1;32m 110\u001b[0m _internal\u001b[38;5;241m.\u001b[39m_get_void_ptr \u001b[38;5;241m=\u001b[39m _get_void_ptr\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m __config__\n\u001b[0;32m--> 113\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m lib\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m gto\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m scf\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/__init__.py:24\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m parameters\n\u001b[1;32m 23\u001b[0m param \u001b[38;5;241m=\u001b[39m parameters\n\u001b[0;32m---> 24\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m numpy_helper\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m linalg_helper\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyscf\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m scipy_helper\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/numpy_helper.py:39\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mImportError\u001b[39;00m, \u001b[38;5;167;01mOSError\u001b[39;00m):\n\u001b[1;32m 37\u001b[0m FOUND_TBLIS \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m---> 39\u001b[0m _np_helper \u001b[38;5;241m=\u001b[39m \u001b[43mmisc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_library\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlibnp_helper\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 41\u001b[0m BLOCK_DIM \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m192\u001b[39m\n\u001b[1;32m 42\u001b[0m PLAIN \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/misc.py:63\u001b[0m, in \u001b[0;36mload_library\u001b[0;34m(libname)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m files \u001b[38;5;129;01min\u001b[39;00m os\u001b[38;5;241m.\u001b[39mlistdir(libpath):\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m files\u001b[38;5;241m.\u001b[39mstartswith(libname):\n\u001b[0;32m---> 63\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mnumpy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mctypeslib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_library\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlibname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlibpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/site-packages/numpy/ctypeslib.py:158\u001b[0m, in \u001b[0;36mload_library\u001b[0;34m(libname, loader_path)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(libpath):\n\u001b[1;32m 157\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mctypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcdll\u001b[49m\u001b[43m[\u001b[49m\u001b[43mlibpath\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m## defective lib file\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:457\u001b[0m, in \u001b[0;36mLibraryLoader.__getitem__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, name):\n\u001b[0;32m--> 457\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:452\u001b[0m, in \u001b[0;36mLibraryLoader.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 451\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(name)\n\u001b[0;32m--> 452\u001b[0m dll \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dlltype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 453\u001b[0m \u001b[38;5;28msetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, dll)\n\u001b[1;32m 454\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m dll\n", - "File \u001b[0;32m~/anaconda3/envs/symred/lib/python3.9/ctypes/__init__.py:382\u001b[0m, in \u001b[0;36mCDLL.__init__\u001b[0;34m(self, name, mode, handle, use_errno, use_last_error, winmode)\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_FuncPtr \u001b[38;5;241m=\u001b[39m _FuncPtr\n\u001b[1;32m 381\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m handle \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 382\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle \u001b[38;5;241m=\u001b[39m \u001b[43m_dlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 383\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 384\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle \u001b[38;5;241m=\u001b[39m handle\n", - "\u001b[0;31mOSError\u001b[0m: dlopen(/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib, 0x0006): Library not loaded: '/usr/local/opt/libomp/lib/libomp.dylib'\n Referenced from: '/Users/lex/anaconda3/envs/symred/lib/python3.9/site-packages/pyscf/lib/libnp_helper.dylib'\n Reason: tried: '/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/usr/local/lib/libomp.dylib' (no such file), '/usr/lib/libomp.dylib' (no such file)" + "name": "stdout", + "output_type": "stream", + "text": [ + "Molecule geometry:\n", + "Be\t0\t0\t0\n", + "\n", + "CISD converged? True\n", + "FCI converged? True\n", + "FCI converged? True\n", + "\n", + "HF energy: -14.351880476202023\n", + "MP2 energy: -14.376238850841515\n", + "CCSD energy: -14.403650751752787\n", + "CISD energy: -14.403645784721308\n", + "FCI energy: -14.403655108067682\n", + "\n", + "\n", + "Number of qubits: 10\n" ] } ], @@ -78,10 +70,486 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "64a90203", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'qubit_encoding': 'jordan_wigner',\n", + " 'unit': 'angstrom',\n", + " 'geometry': '1\\n \\nBe\\t0\\t0\\t0',\n", + " 'basis': 'sto-3g',\n", + " 'charge': 0,\n", + " 'spin': 0,\n", + " 'hf_array': [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n", + " 'hf_method': 'pyscf.scf.hf.RHF',\n", + " 'n_particles': {'total': 4, 'alpha': 2, 'beta': 2},\n", + " 'n_qubits': 10,\n", + " 'convergence_threshold': 1e-06,\n", + " 'point_group': {'groupname': 'C1', 'topgroup': 'C1'},\n", + " 'calculated_properties': {'HF': {'energy': -14.351880476202023,\n", + " 'converged': True},\n", + " 'MP2': {'energy': -14.376238850841515, 'converged': True},\n", + " 'CCSD': {'energy': -14.403650751752787, 'converged': True},\n", + " 'CISD': {'energy': -14.403645784721304, 'converged': True},\n", + " 'FCI': {'energy': -14.403655108067682, 'converged': True}},\n", + " 'auxiliary_operators': {'number_operator': {'IIIIIIIIII': (5.0, 0.0),\n", + " 'IIIIIIIIIZ': (-0.5, 0.0),\n", + " 'IIIIIIIIZI': (-0.5, 0.0),\n", + " 'IIIIIIIZII': (-0.5, 0.0),\n", + " 'IIIIIIZIII': (-0.5, 0.0),\n", + " 'IIIIIZIIII': (-0.5, 0.0),\n", + " 'IIIIZIIIII': (-0.5, 0.0),\n", + " 'IIIZIIIIII': (-0.5, 0.0),\n", + " 'IIZIIIIIII': (-0.5, 0.0),\n", + " 'IZIIIIIIII': (-0.5, 0.0),\n", + " 'ZIIIIIIIII': (-0.5, 0.0)},\n", + " 'S^2_operator': {'IIIIIIIIII': (1.875, 0.0),\n", + " 'IIIIIIIIIZ': (0.5, 0.0),\n", + " 'IIIIIIIIZI': (-0.5, 0.0),\n", + " 'IIIIIIIIZZ': (-0.375, 0.0),\n", + " 'IIIIIIIZII': (0.5, 0.0),\n", + " 'IIIIIIIZIZ': (0.125, 0.0),\n", + " 'IIIIIIIZZI': (-0.125, 0.0),\n", + " 'IIIIIIZIII': (-0.5, 0.0),\n", + " 'IIIIIIZIIZ': (-0.125, 0.0),\n", + " 'IIIIIIZIZI': (0.125, 0.0),\n", + " 'IIIIIIZZII': (-0.375, 0.0),\n", + " 'IIIIIZIIII': (0.5, 0.0),\n", + " 'IIIIIZIIIZ': (0.125, 0.0),\n", + " 'IIIIIZIIZI': (-0.125, 0.0),\n", + " 'IIIIIZIZII': (0.125, 0.0),\n", + " 'IIIIIZZIII': (-0.125, 0.0),\n", + " 'IIIIZIIIII': (-0.5, 0.0),\n", + " 'IIIIZIIIIZ': (-0.125, 0.0),\n", + " 'IIIIZIIIZI': (0.125, 0.0),\n", + " 'IIIIZIIZII': (-0.125, 0.0),\n", + " 'IIIIZIZIII': (0.125, 0.0),\n", + " 'IIIIZZIIII': (-0.375, 0.0),\n", + " 'IIIZIIIIII': (0.5, 0.0),\n", + " 'IIIZIIIIIZ': (0.125, 0.0),\n", + " 'IIIZIIIIZI': (-0.125, 0.0),\n", + " 'IIIZIIIZII': (0.125, 0.0),\n", + " 'IIIZIIZIII': (-0.125, 0.0),\n", + " 'IIIZIZIIII': (0.125, 0.0),\n", + " 'IIIZZIIIII': (-0.125, 0.0),\n", + " 'IIZIIIIIII': (-0.5, 0.0),\n", + " 'IIZIIIIIIZ': (-0.125, 0.0),\n", + " 'IIZIIIIIZI': (0.125, 0.0),\n", + " 'IIZIIIIZII': (-0.125, 0.0),\n", + " 'IIZIIIZIII': (0.125, 0.0),\n", + " 'IIZIIZIIII': (-0.125, 0.0),\n", + " 'IIZIZIIIII': (0.125, 0.0),\n", + " 'IIZZIIIIII': (-0.375, 0.0),\n", + " 'IZIIIIIIII': (0.5, 0.0),\n", + " 'IZIIIIIIIZ': (0.125, 0.0),\n", + " 'IZIIIIIIZI': (-0.125, 0.0),\n", + " 'IZIIIIIZII': (0.125, 0.0),\n", + " 'IZIIIIZIII': (-0.125, 0.0),\n", + " 'IZIIIZIIII': (0.125, 0.0),\n", + " 'IZIIZIIIII': (-0.125, 0.0),\n", + " 'IZIZIIIIII': (0.125, 0.0),\n", + " 'IZZIIIIIII': (-0.125, 0.0),\n", + " 'ZIIIIIIIII': (-0.5, 0.0),\n", + " 'ZIIIIIIIIZ': (-0.125, 0.0),\n", + " 'ZIIIIIIIZI': (0.125, 0.0),\n", + " 'ZIIIIIIZII': (-0.125, 0.0),\n", + " 'ZIIIIIZIII': (0.125, 0.0),\n", + " 'ZIIIIZIIII': (-0.125, 0.0),\n", + " 'ZIIIZIIIII': (0.125, 0.0),\n", + " 'ZIIZIIIIII': (-0.125, 0.0),\n", + " 'ZIZIIIIIII': (0.125, 0.0),\n", + " 'ZZIIIIIIII': (-0.375, 0.0),\n", + " 'IIIIIIXXXX': (0.125, 0.0),\n", + " 'IIIIIIXXYY': (0.125, 0.0),\n", + " 'IIIIIIXYXY': (0.125, 0.0),\n", + " 'IIIIIIXYYX': (-0.125, 0.0),\n", + " 'IIIIIIYXXY': (-0.125, 0.0),\n", + " 'IIIIIIYXYX': (0.125, 0.0),\n", + " 'IIIIIIYYXX': (0.125, 0.0),\n", + " 'IIIIIIYYYY': (0.125, 0.0),\n", + " 'IIIIXXIIXX': (0.125, 0.0),\n", + " 'IIIIXXIIYY': (0.125, 0.0),\n", + " 'IIIIXYIIXY': (0.125, 0.0),\n", + " 'IIIIXYIIYX': (-0.125, 0.0),\n", + " 'IIIIYXIIXY': (-0.125, 0.0),\n", + " 'IIIIYXIIYX': (0.125, 0.0),\n", + " 'IIIIYYIIXX': (0.125, 0.0),\n", + " 'IIIIYYIIYY': (0.125, 0.0),\n", + " 'IIIIXXXXII': (0.125, 0.0),\n", + " 'IIIIXXYYII': (0.125, 0.0),\n", + " 'IIIIXYXYII': (0.125, 0.0),\n", + " 'IIIIXYYXII': (-0.125, 0.0),\n", + " 'IIIIYXXYII': (-0.125, 0.0),\n", + " 'IIIIYXYXII': (0.125, 0.0),\n", + " 'IIIIYYXXII': (0.125, 0.0),\n", + " 'IIIIYYYYII': (0.125, 0.0),\n", + " 'IIXXIIIIXX': (0.125, 0.0),\n", + " 'IIXXIIIIYY': (0.125, 0.0),\n", + " 'IIXYIIIIXY': (0.125, 0.0),\n", + " 'IIXYIIIIYX': (-0.125, 0.0),\n", + " 'IIYXIIIIXY': (-0.125, 0.0),\n", + " 'IIYXIIIIYX': (0.125, 0.0),\n", + " 'IIYYIIIIXX': (0.125, 0.0),\n", + " 'IIYYIIIIYY': (0.125, 0.0),\n", + " 'IIXXIIXXII': (0.125, 0.0),\n", + " 'IIXXIIYYII': (0.125, 0.0),\n", + " 'IIXYIIXYII': (0.125, 0.0),\n", + " 'IIXYIIYXII': (-0.125, 0.0),\n", + " 'IIYXIIXYII': (-0.125, 0.0),\n", + " 'IIYXIIYXII': (0.125, 0.0),\n", + " 'IIYYIIXXII': (0.125, 0.0),\n", + " 'IIYYIIYYII': (0.125, 0.0),\n", + " 'IIXXXXIIII': (0.125, 0.0),\n", + " 'IIXXYYIIII': (0.125, 0.0),\n", + " 'IIXYXYIIII': (0.125, 0.0),\n", + " 'IIXYYXIIII': (-0.125, 0.0),\n", + " 'IIYXXYIIII': (-0.125, 0.0),\n", + " 'IIYXYXIIII': (0.125, 0.0),\n", + " 'IIYYXXIIII': (0.125, 0.0),\n", + " 'IIYYYYIIII': (0.125, 0.0),\n", + " 'XXIIIIIIXX': (0.125, 0.0),\n", + " 'XXIIIIIIYY': (0.125, 0.0),\n", + " 'XYIIIIIIXY': (0.125, 0.0),\n", + " 'XYIIIIIIYX': (-0.125, 0.0),\n", + " 'YXIIIIIIXY': (-0.125, 0.0),\n", + " 'YXIIIIIIYX': (0.125, 0.0),\n", + " 'YYIIIIIIXX': (0.125, 0.0),\n", + " 'YYIIIIIIYY': (0.125, 0.0),\n", + " 'XXIIIIXXII': (0.125, 0.0),\n", + " 'XXIIIIYYII': (0.125, 0.0),\n", + " 'XYIIIIXYII': (0.125, 0.0),\n", + " 'XYIIIIYXII': (-0.125, 0.0),\n", + " 'YXIIIIXYII': (-0.125, 0.0),\n", + " 'YXIIIIYXII': (0.125, 0.0),\n", + " 'YYIIIIXXII': (0.125, 0.0),\n", + " 'YYIIIIYYII': (0.125, 0.0),\n", + " 'XXIIXXIIII': (0.125, 0.0),\n", + " 'XXIIYYIIII': (0.125, 0.0),\n", + " 'XYIIXYIIII': (0.125, 0.0),\n", + " 'XYIIYXIIII': (-0.125, 0.0),\n", + " 'YXIIXYIIII': (-0.125, 0.0),\n", + " 'YXIIYXIIII': (0.125, 0.0),\n", + " 'YYIIXXIIII': (0.125, 0.0),\n", + " 'YYIIYYIIII': (0.125, 0.0),\n", + " 'XXXXIIIIII': (0.125, 0.0),\n", + " 'XXYYIIIIII': (0.125, 0.0),\n", + " 'XYXYIIIIII': (0.125, 0.0),\n", + " 'XYYXIIIIII': (-0.125, 0.0),\n", + " 'YXXYIIIIII': (-0.125, 0.0),\n", + " 'YXYXIIIIII': (0.125, 0.0),\n", + " 'YYXXIIIIII': (0.125, 0.0),\n", + " 'YYYYIIIIII': (0.125, 0.0)},\n", + " 'Sz_operator': {'IIIIIIIIIZ': (0.25, 0.0),\n", + " 'IIIIIIIIZI': (-0.25, 0.0),\n", + " 'IIIIIIIZII': (0.25, 0.0),\n", + " 'IIIIIIZIII': (-0.25, 0.0),\n", + " 'IIIIIZIIII': (0.25, 0.0),\n", + " 'IIIIZIIIII': (-0.25, 0.0),\n", + " 'IIIZIIIIII': (0.25, 0.0),\n", + " 'IIZIIIIIII': (-0.25, 0.0),\n", + " 'IZIIIIIIII': (0.25, 0.0),\n", + " 'ZIIIIIIIII': (-0.25, 0.0)},\n", + " 'alpha_parity_operator': {'ZIZIZIZIZI': (1.0, 0.0)},\n", + " 'beta_parity_operator': {'IZIZIZIZIZ': (1.0, 0.0)},\n", + " 'UCCSD_operator': {'IIXXIIIIXY': (0.02461919857404172, 0.0),\n", + " 'IIXXIIIIYX': (0.02461919857404172, 0.0),\n", + " 'IIXYIIIIXX': (-0.02461919857404172, 0.0),\n", + " 'IIXYIIIIYY': (0.02461919857404172, 0.0),\n", + " 'IIYXIIIIXX': (-0.02461919857404172, 0.0),\n", + " 'IIYXIIIIYY': (0.02461919857404172, 0.0),\n", + " 'IIYYIIIIXY': (-0.02461919857404172, 0.0),\n", + " 'IIYYIIIIYX': (-0.02461919857404172, 0.0),\n", + " 'IIXXIIXYII': (0.02461919857404172, 0.0),\n", + " 'IIXXIIYXII': (0.02461919857404172, 0.0),\n", + " 'IIXYIIXXII': (-0.02461919857404172, 0.0),\n", + " 'IIXYIIYYII': (0.02461919857404172, 0.0),\n", + " 'IIYXIIXXII': (-0.02461919857404172, 0.0),\n", + " 'IIYXIIYYII': (0.02461919857404172, 0.0),\n", + " 'IIYYIIXYII': (-0.02461919857404172, 0.0),\n", + " 'IIYYIIYXII': (-0.02461919857404172, 0.0),\n", + " 'IIXXXYIIII': (0.02461919857404172, 0.0),\n", + " 'IIXXYXIIII': (0.02461919857404172, 0.0),\n", + " 'IIXYXXIIII': (-0.02461919857404172, 0.0),\n", + " 'IIXYYYIIII': (0.02461919857404172, 0.0),\n", + " 'IIYXXXIIII': (-0.02461919857404172, 0.0),\n", + " 'IIYXYYIIII': (0.02461919857404172, 0.0),\n", + " 'IIYYXYIIII': (-0.02461919857404172, 0.0),\n", + " 'IIYYYXIIII': (-0.02461919857404172, 0.0),\n", + " 'IXXIIIIIXY': (-0.0004444198953152826, 0.0),\n", + " 'IXXIIIIIYX': (-0.0004444198953152826, 0.0),\n", + " 'IXYIIIIIXX': (0.0004444198953152826, 0.0),\n", + " 'IXYIIIIIYY': (-0.0004444198953152826, 0.0),\n", + " 'IYXIIIIIXX': (0.0004444198953152826, 0.0),\n", + " 'IYXIIIIIYY': (-0.0004444198953152826, 0.0),\n", + " 'IYYIIIIIXY': (0.0004444198953152826, 0.0),\n", + " 'IYYIIIIIYX': (0.0004444198953152826, 0.0),\n", + " 'IXXIIIXYII': (-0.0004444198953152826, 0.0),\n", + " 'IXXIIIYXII': (-0.0004444198953152826, 0.0),\n", + " 'IXYIIIXXII': (0.0004444198953152826, 0.0),\n", + " 'IXYIIIYYII': (-0.0004444198953152826, 0.0),\n", + " 'IYXIIIXXII': (0.0004444198953152826, 0.0),\n", + " 'IYXIIIYYII': (-0.0004444198953152826, 0.0),\n", + " 'IYYIIIXYII': (0.0004444198953152826, 0.0),\n", + " 'IYYIIIYXII': (0.0004444198953152826, 0.0),\n", + " 'IXXIXYIIII': (-0.0004444198953152826, 0.0),\n", + " 'IXXIYXIIII': (-0.0004444198953152826, 0.0),\n", + " 'IXYIXXIIII': (0.0004444198953152826, 0.0),\n", + " 'IXYIYYIIII': (-0.0004444198953152826, 0.0),\n", + " 'IYXIXXIIII': (0.0004444198953152826, 0.0),\n", + " 'IYXIYYIIII': (-0.0004444198953152826, 0.0),\n", + " 'IYYIXYIIII': (0.0004444198953152826, 0.0),\n", + " 'IYYIYXIIII': (0.0004444198953152826, 0.0),\n", + " 'XZZXIIIIXY': (0.0004444198953152826, 0.0),\n", + " 'XZZXIIIIYX': (0.0004444198953152826, 0.0),\n", + " 'XZZYIIIIXX': (-0.0004444198953152826, 0.0),\n", + " 'XZZYIIIIYY': (0.0004444198953152826, 0.0),\n", + " 'YZZXIIIIXX': (-0.0004444198953152826, 0.0),\n", + " 'YZZXIIIIYY': (0.0004444198953152826, 0.0),\n", + " 'YZZYIIIIXY': (-0.0004444198953152826, 0.0),\n", + " 'YZZYIIIIYX': (-0.0004444198953152826, 0.0),\n", + " 'XZZXIIXYII': (0.0004444198953152826, 0.0),\n", + " 'XZZXIIYXII': (0.0004444198953152826, 0.0),\n", + " 'XZZYIIXXII': (-0.0004444198953152826, 0.0),\n", + " 'XZZYIIYYII': (0.0004444198953152826, 0.0),\n", + " 'YZZXIIXXII': (-0.0004444198953152826, 0.0),\n", + " 'YZZXIIYYII': (0.0004444198953152826, 0.0),\n", + " 'YZZYIIXYII': (-0.0004444198953152826, 0.0),\n", + " 'YZZYIIYXII': (-0.0004444198953152826, 0.0),\n", + " 'XZZXXYIIII': (0.0004444198953152826, 0.0),\n", + " 'XZZXYXIIII': (0.0004444198953152826, 0.0),\n", + " 'XZZYXXIIII': (-0.0004444198953152826, 0.0),\n", + " 'XZZYYYIIII': (0.0004444198953152826, 0.0),\n", + " 'YZZXXXIIII': (-0.0004444198953152826, 0.0),\n", + " 'YZZXYYIIII': (0.0004444198953152826, 0.0),\n", + " 'YZZYXYIIII': (-0.0004444198953152826, 0.0),\n", + " 'YZZYYXIIII': (-0.0004444198953152826, 0.0),\n", + " 'XXIIIIIIXY': (0.00010580623256393757, 0.0),\n", + " 'XXIIIIIIYX': (0.00010580623256393757, 0.0),\n", + " 'XYIIIIIIXX': (-0.00010580623256393757, 0.0),\n", + " 'XYIIIIIIYY': (0.00010580623256393757, 0.0),\n", + " 'YXIIIIIIXX': (-0.00010580623256393757, 0.0),\n", + " 'YXIIIIIIYY': (0.00010580623256393757, 0.0),\n", + " 'YYIIIIIIXY': (-0.00010580623256393757, 0.0),\n", + " 'YYIIIIIIYX': (-0.00010580623256393757, 0.0),\n", + " 'XXIIIIXYII': (0.00010580623256393757, 0.0),\n", + " 'XXIIIIYXII': (0.00010580623256393757, 0.0),\n", + " 'XYIIIIXXII': (-0.00010580623256393757, 0.0),\n", + " 'XYIIIIYYII': (0.00010580623256393757, 0.0),\n", + " 'YXIIIIXXII': (-0.00010580623256393757, 0.0),\n", + " 'YXIIIIYYII': (0.00010580623256393757, 0.0),\n", + " 'YYIIIIXYII': (-0.00010580623256393757, 0.0),\n", + " 'YYIIIIYXII': (-0.00010580623256393757, 0.0),\n", + " 'XXIIXYIIII': (0.00010580623256393757, 0.0),\n", + " 'XXIIYXIIII': (0.00010580623256393757, 0.0),\n", + " 'XYIIXXIIII': (-0.00010580623256393757, 0.0),\n", + " 'XYIIYYIIII': (0.00010580623256393757, 0.0),\n", + " 'YXIIXXIIII': (-0.00010580623256393757, 0.0),\n", + " 'YXIIYYIIII': (0.00010580623256393757, 0.0),\n", + " 'YYIIXYIIII': (-0.00010580623256393757, 0.0),\n", + " 'YYIIYXIIII': (-0.00010580623256393757, 0.0)},\n", + " 'CISD_operator': {'IIIIIIIIII': (-0.9464218957503409, 0.0),\n", + " 'IIXXIIIIXX': (0.011648925683764457, 0.0),\n", + " 'IIXXIIIIXY': (0.0, -0.011648925683764457),\n", + " 'IIXXIIIIYX': (0.0, -0.011648925683764457),\n", + " 'IIXXIIIIYY': (-0.011648925683764457, 0.0),\n", + " 'IIXYIIIIXX': (0.0, 0.011648925683764457),\n", + " 'IIXYIIIIXY': (0.011648925683764457, 0.0),\n", + " 'IIXYIIIIYX': (0.011648925683764457, 0.0),\n", + " 'IIXYIIIIYY': (0.0, -0.011648925683764457),\n", + " 'IIYXIIIIXX': (0.0, 0.011648925683764457),\n", + " 'IIYXIIIIXY': (0.011648925683764457, 0.0),\n", + " 'IIYXIIIIYX': (0.011648925683764457, 0.0),\n", + " 'IIYXIIIIYY': (0.0, -0.011648925683764457),\n", + " 'IIYYIIIIXX': (-0.011648925683764457, 0.0),\n", + " 'IIYYIIIIXY': (0.0, 0.011648925683764457),\n", + " 'IIYYIIIIYX': (0.0, 0.011648925683764457),\n", + " 'IIYYIIIIYY': (0.011648925683764457, 0.0),\n", + " 'IIXXIIXXII': (0.01164892568376438, 0.0),\n", + " 'IIXXIIXYII': (0.0, -0.01164892568376438),\n", + " 'IIXXIIYXII': (0.0, -0.01164892568376438),\n", + " 'IIXXIIYYII': (-0.01164892568376438, 0.0),\n", + " 'IIXYIIXXII': (0.0, 0.01164892568376438),\n", + " 'IIXYIIXYII': (0.01164892568376438, 0.0),\n", + " 'IIXYIIYXII': (0.01164892568376438, 0.0),\n", + " 'IIXYIIYYII': (0.0, -0.01164892568376438),\n", + " 'IIYXIIXXII': (0.0, 0.01164892568376438),\n", + " 'IIYXIIXYII': (0.01164892568376438, 0.0),\n", + " 'IIYXIIYXII': (0.01164892568376438, 0.0),\n", + " 'IIYXIIYYII': (0.0, -0.01164892568376438),\n", + " 'IIYYIIXXII': (-0.01164892568376438, 0.0),\n", + " 'IIYYIIXYII': (0.0, 0.01164892568376438),\n", + " 'IIYYIIYXII': (0.0, 0.01164892568376438),\n", + " 'IIYYIIYYII': (0.01164892568376438, 0.0),\n", + " 'IIXXXXIIII': (0.011648925683764438, 0.0),\n", + " 'IIXXXYIIII': (0.0, -0.011648925683764438),\n", + " 'IIXXYXIIII': (0.0, -0.011648925683764438),\n", + " 'IIXXYYIIII': (-0.011648925683764438, 0.0),\n", + " 'IIXYXXIIII': (0.0, 0.011648925683764438),\n", + " 'IIXYXYIIII': (0.011648925683764438, 0.0),\n", + " 'IIXYYXIIII': (0.011648925683764438, 0.0),\n", + " 'IIXYYYIIII': (0.0, -0.011648925683764438),\n", + " 'IIYXXXIIII': (0.0, 0.011648925683764438),\n", + " 'IIYXXYIIII': (0.011648925683764438, 0.0),\n", + " 'IIYXYXIIII': (0.011648925683764438, 0.0),\n", + " 'IIYXYYIIII': (0.0, -0.011648925683764438),\n", + " 'IIYYXXIIII': (-0.011648925683764438, 0.0),\n", + " 'IIYYXYIIII': (0.0, 0.011648925683764438),\n", + " 'IIYYYXIIII': (0.0, 0.011648925683764438),\n", + " 'IIYYYYIIII': (0.011648925683764438, 0.0),\n", + " 'IXXIIIIIXX': (-0.00021046311784297424, 0.0),\n", + " 'IXXIIIIIXY': (0.0, 0.00021046311784297424),\n", + " 'IXXIIIIIYX': (0.0, 0.00021046311784297424),\n", + " 'IXXIIIIIYY': (0.00021046311784297424, 0.0),\n", + " 'IXYIIIIIXX': (0.0, -0.00021046311784297424),\n", + " 'IXYIIIIIXY': (-0.00021046311784297424, 0.0),\n", + " 'IXYIIIIIYX': (-0.00021046311784297424, 0.0),\n", + " 'IXYIIIIIYY': (0.0, 0.00021046311784297424),\n", + " 'IYXIIIIIXX': (0.0, -0.00021046311784297424),\n", + " 'IYXIIIIIXY': (-0.00021046311784297424, 0.0),\n", + " 'IYXIIIIIYX': (-0.00021046311784297424, 0.0),\n", + " 'IYXIIIIIYY': (0.0, 0.00021046311784297424),\n", + " 'IYYIIIIIXX': (0.00021046311784297424, 0.0),\n", + " 'IYYIIIIIXY': (0.0, -0.00021046311784297424),\n", + " 'IYYIIIIIYX': (0.0, -0.00021046311784297424),\n", + " 'IYYIIIIIYY': (-0.00021046311784297424, 0.0),\n", + " 'IXXIIIXXII': (-0.00021046311784297258, 0.0),\n", + " 'IXXIIIXYII': (0.0, 0.00021046311784297258),\n", + " 'IXXIIIYXII': (0.0, 0.00021046311784297258),\n", + " 'IXXIIIYYII': (0.00021046311784297258, 0.0),\n", + " 'IXYIIIXXII': (0.0, -0.00021046311784297258),\n", + " 'IXYIIIXYII': (-0.00021046311784297258, 0.0),\n", + " 'IXYIIIYXII': (-0.00021046311784297258, 0.0),\n", + " 'IXYIIIYYII': (0.0, 0.00021046311784297258),\n", + " 'IYXIIIXXII': (0.0, -0.00021046311784297258),\n", + " 'IYXIIIXYII': (-0.00021046311784297258, 0.0),\n", + " 'IYXIIIYXII': (-0.00021046311784297258, 0.0),\n", + " 'IYXIIIYYII': (0.0, 0.00021046311784297258),\n", + " 'IYYIIIXXII': (0.00021046311784297258, 0.0),\n", + " 'IYYIIIXYII': (0.0, -0.00021046311784297258),\n", + " 'IYYIIIYXII': (0.0, -0.00021046311784297258),\n", + " 'IYYIIIYYII': (-0.00021046311784297258, 0.0),\n", + " 'IXXIXXIIII': (-0.00021046311784297445, 0.0),\n", + " 'IXXIXYIIII': (0.0, 0.00021046311784297445),\n", + " 'IXXIYXIIII': (0.0, 0.00021046311784297445),\n", + " 'IXXIYYIIII': (0.00021046311784297445, 0.0),\n", + " 'IXYIXXIIII': (0.0, -0.00021046311784297445),\n", + " 'IXYIXYIIII': (-0.00021046311784297445, 0.0),\n", + " 'IXYIYXIIII': (-0.00021046311784297445, 0.0),\n", + " 'IXYIYYIIII': (0.0, 0.00021046311784297445),\n", + " 'IYXIXXIIII': (0.0, -0.00021046311784297445),\n", + " 'IYXIXYIIII': (-0.00021046311784297445, 0.0),\n", + " 'IYXIYXIIII': (-0.00021046311784297445, 0.0),\n", + " 'IYXIYYIIII': (0.0, 0.00021046311784297445),\n", + " 'IYYIXXIIII': (0.00021046311784297445, 0.0),\n", + " 'IYYIXYIIII': (0.0, -0.00021046311784297445),\n", + " 'IYYIYXIIII': (0.0, -0.00021046311784297445),\n", + " 'IYYIYYIIII': (-0.00021046311784297445, 0.0),\n", + " 'XZZXIIIIXX': (0.0002104631178429677, 0.0),\n", + " 'XZZXIIIIXY': (0.0, -0.0002104631178429677),\n", + " 'XZZXIIIIYX': (0.0, -0.0002104631178429677),\n", + " 'XZZXIIIIYY': (-0.0002104631178429677, 0.0),\n", + " 'XZZYIIIIXX': (0.0, 0.0002104631178429677),\n", + " 'XZZYIIIIXY': (0.0002104631178429677, 0.0),\n", + " 'XZZYIIIIYX': (0.0002104631178429677, 0.0),\n", + " 'XZZYIIIIYY': (0.0, -0.0002104631178429677),\n", + " 'YZZXIIIIXX': (0.0, 0.0002104631178429677),\n", + " 'YZZXIIIIXY': (0.0002104631178429677, 0.0),\n", + " 'YZZXIIIIYX': (0.0002104631178429677, 0.0),\n", + " 'YZZXIIIIYY': (0.0, -0.0002104631178429677),\n", + " 'YZZYIIIIXX': (-0.0002104631178429677, 0.0),\n", + " 'YZZYIIIIXY': (0.0, 0.0002104631178429677),\n", + " 'YZZYIIIIYX': (0.0, 0.0002104631178429677),\n", + " 'YZZYIIIIYY': (0.0002104631178429677, 0.0),\n", + " 'XZZXIIXXII': (0.00021046311784297527, 0.0),\n", + " 'XZZXIIXYII': (0.0, -0.00021046311784297527),\n", + " 'XZZXIIYXII': (0.0, -0.00021046311784297527),\n", + " 'XZZXIIYYII': (-0.00021046311784297527, 0.0),\n", + " 'XZZYIIXXII': (0.0, 0.00021046311784297527),\n", + " 'XZZYIIXYII': (0.00021046311784297527, 0.0),\n", + " 'XZZYIIYXII': (0.00021046311784297527, 0.0),\n", + " 'XZZYIIYYII': (0.0, -0.00021046311784297527),\n", + " 'YZZXIIXXII': (0.0, 0.00021046311784297527),\n", + " 'YZZXIIXYII': (0.00021046311784297527, 0.0),\n", + " 'YZZXIIYXII': (0.00021046311784297527, 0.0),\n", + " 'YZZXIIYYII': (0.0, -0.00021046311784297527),\n", + " 'YZZYIIXXII': (-0.00021046311784297527, 0.0),\n", + " 'YZZYIIXYII': (0.0, 0.00021046311784297527),\n", + " 'YZZYIIYXII': (0.0, 0.00021046311784297527),\n", + " 'YZZYIIYYII': (0.00021046311784297527, 0.0),\n", + " 'XZZXXXIIII': (0.0002104631178429656, 0.0),\n", + " 'XZZXXYIIII': (0.0, -0.0002104631178429656),\n", + " 'XZZXYXIIII': (0.0, -0.0002104631178429656),\n", + " 'XZZXYYIIII': (-0.0002104631178429656, 0.0),\n", + " 'XZZYXXIIII': (0.0, 0.0002104631178429656),\n", + " 'XZZYXYIIII': (0.0002104631178429656, 0.0),\n", + " 'XZZYYXIIII': (0.0002104631178429656, 0.0),\n", + " 'XZZYYYIIII': (0.0, -0.0002104631178429656),\n", + " 'YZZXXXIIII': (0.0, 0.0002104631178429656),\n", + " 'YZZXXYIIII': (0.0002104631178429656, 0.0),\n", + " 'YZZXYXIIII': (0.0002104631178429656, 0.0),\n", + " 'YZZXYYIIII': (0.0, -0.0002104631178429656),\n", + " 'YZZYXXIIII': (-0.0002104631178429656, 0.0),\n", + " 'YZZYXYIIII': (0.0, 0.0002104631178429656),\n", + " 'YZZYYXIIII': (0.0, 0.0002104631178429656),\n", + " 'YZZYYYIIII': (0.0002104631178429656, 0.0),\n", + " 'XXIIIIIIXX': (4.976384808559036e-05, 0.0),\n", + " 'XXIIIIIIXY': (0.0, -4.976384808559036e-05),\n", + " 'XXIIIIIIYX': (0.0, -4.976384808559036e-05),\n", + " 'XXIIIIIIYY': (-4.976384808559036e-05, 0.0),\n", + " 'XYIIIIIIXX': (0.0, 4.976384808559036e-05),\n", + " 'XYIIIIIIXY': (4.976384808559036e-05, 0.0),\n", + " 'XYIIIIIIYX': (4.976384808559036e-05, 0.0),\n", + " 'XYIIIIIIYY': (0.0, -4.976384808559036e-05),\n", + " 'YXIIIIIIXX': (0.0, 4.976384808559036e-05),\n", + " 'YXIIIIIIXY': (4.976384808559036e-05, 0.0),\n", + " 'YXIIIIIIYX': (4.976384808559036e-05, 0.0),\n", + " 'YXIIIIIIYY': (0.0, -4.976384808559036e-05),\n", + " 'YYIIIIIIXX': (-4.976384808559036e-05, 0.0),\n", + " 'YYIIIIIIXY': (0.0, 4.976384808559036e-05),\n", + " 'YYIIIIIIYX': (0.0, 4.976384808559036e-05),\n", + " 'YYIIIIIIYY': (4.976384808559036e-05, 0.0),\n", + " 'XXIIIIXXII': (4.976384808558268e-05, 0.0),\n", + " 'XXIIIIXYII': (0.0, -4.976384808558268e-05),\n", + " 'XXIIIIYXII': (0.0, -4.976384808558268e-05),\n", + " 'XXIIIIYYII': (-4.976384808558268e-05, 0.0),\n", + " 'XYIIIIXXII': (0.0, 4.976384808558268e-05),\n", + " 'XYIIIIXYII': (4.976384808558268e-05, 0.0),\n", + " 'XYIIIIYXII': (4.976384808558268e-05, 0.0),\n", + " 'XYIIIIYYII': (0.0, -4.976384808558268e-05),\n", + " 'YXIIIIXXII': (0.0, 4.976384808558268e-05),\n", + " 'YXIIIIXYII': (4.976384808558268e-05, 0.0),\n", + " 'YXIIIIYXII': (4.976384808558268e-05, 0.0),\n", + " 'YXIIIIYYII': (0.0, -4.976384808558268e-05),\n", + " 'YYIIIIXXII': (-4.976384808558268e-05, 0.0),\n", + " 'YYIIIIXYII': (0.0, 4.976384808558268e-05),\n", + " 'YYIIIIYXII': (0.0, 4.976384808558268e-05),\n", + " 'YYIIIIYYII': (4.976384808558268e-05, 0.0),\n", + " 'XXIIXXIIII': (4.976384808558008e-05, 0.0),\n", + " 'XXIIXYIIII': (0.0, -4.976384808558008e-05),\n", + " 'XXIIYXIIII': (0.0, -4.976384808558008e-05),\n", + " 'XXIIYYIIII': (-4.976384808558008e-05, 0.0),\n", + " 'XYIIXXIIII': (0.0, 4.976384808558008e-05),\n", + " 'XYIIXYIIII': (4.976384808558008e-05, 0.0),\n", + " 'XYIIYXIIII': (4.976384808558008e-05, 0.0),\n", + " 'XYIIYYIIII': (0.0, -4.976384808558008e-05),\n", + " 'YXIIXXIIII': (0.0, 4.976384808558008e-05),\n", + " 'YXIIXYIIII': (4.976384808558008e-05, 0.0),\n", + " 'YXIIYXIIII': (4.976384808558008e-05, 0.0),\n", + " 'YXIIYYIIII': (0.0, -4.976384808558008e-05),\n", + " 'YYIIXXIIII': (-4.976384808558008e-05, 0.0),\n", + " 'YYIIXYIIII': (0.0, 4.976384808558008e-05),\n", + " 'YYIIYXIIII': (0.0, 4.976384808558008e-05),\n", + " 'YYIIYYIIII': (4.976384808558008e-05, 0.0)}}}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "molecule.data_dictionary()" ] @@ -96,12 +564,469 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "751d7737", "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-7.8575006535368574 [0^ 0] +\n", + "1.1376669191197275 [0^ 0^ 0 0] +\n", + "-0.1266650547067105 [0^ 0^ 0 2] +\n", + "-0.12666505470671052 [0^ 0^ 2 0] +\n", + "0.02214895386816603 [0^ 0^ 2 2] +\n", + "0.007799539287510122 [0^ 0^ 4 4] +\n", + "0.007799539287510122 [0^ 0^ 6 6] +\n", + "0.007799539287510122 [0^ 0^ 8 8] +\n", + "1.1376669191197275 [0^ 1^ 1 0] +\n", + "-0.1266650547067105 [0^ 1^ 1 2] +\n", + "-0.12666505470671052 [0^ 1^ 3 0] +\n", + "0.02214895386816603 [0^ 1^ 3 2] +\n", + "0.007799539287510122 [0^ 1^ 5 4] +\n", + "0.007799539287510122 [0^ 1^ 7 6] +\n", + "0.007799539287510122 [0^ 1^ 9 8] +\n", + "0.26757386046668147 [0^ 2] +\n", + "-0.12666505470671052 [0^ 2^ 0 0] +\n", + "0.02214895386816603 [0^ 2^ 0 2] +\n", + "0.2856181541250914 [0^ 2^ 2 0] +\n", + "-0.007121875526630251 [0^ 2^ 2 2] +\n", + "0.010281285614826111 [0^ 2^ 4 4] +\n", + "0.010281285614826111 [0^ 2^ 6 6] +\n", + "0.010281285614826111 [0^ 2^ 8 8] +\n", + "-0.12666505470671052 [0^ 3^ 1 0] +\n", + "0.02214895386816603 [0^ 3^ 1 2] +\n", + "0.2856181541250914 [0^ 3^ 3 0] +\n", + "-0.007121875526630251 [0^ 3^ 3 2] +\n", + "0.010281285614826111 [0^ 3^ 5 4] +\n", + "0.010281285614826111 [0^ 3^ 7 6] +\n", + "0.010281285614826111 [0^ 3^ 9 8] +\n", + "0.007799539287510122 [0^ 4^ 0 4] +\n", + "0.010281285614826111 [0^ 4^ 2 4] +\n", + "0.284614418228139 [0^ 4^ 4 0] +\n", + "-0.004469970875487477 [0^ 4^ 4 2] +\n", + "0.007799539287510122 [0^ 5^ 1 4] +\n", + "0.010281285614826111 [0^ 5^ 3 4] +\n", + "0.284614418228139 [0^ 5^ 5 0] +\n", + "-0.004469970875487477 [0^ 5^ 5 2] +\n", + "0.007799539287510122 [0^ 6^ 0 6] +\n", + "0.010281285614826111 [0^ 6^ 2 6] +\n", + "0.284614418228139 [0^ 6^ 6 0] +\n", + "-0.004469970875487477 [0^ 6^ 6 2] +\n", + "0.007799539287510122 [0^ 7^ 1 6] +\n", + "0.010281285614826111 [0^ 7^ 3 6] +\n", + "0.284614418228139 [0^ 7^ 7 0] +\n", + "-0.004469970875487477 [0^ 7^ 7 2] +\n", + "0.007799539287510122 [0^ 8^ 0 8] +\n", + "0.010281285614826111 [0^ 8^ 2 8] +\n", + "0.284614418228139 [0^ 8^ 8 0] +\n", + "-0.004469970875487477 [0^ 8^ 8 2] +\n", + "0.007799539287510122 [0^ 9^ 1 8] +\n", + "0.010281285614826111 [0^ 9^ 3 8] +\n", + "0.284614418228139 [0^ 9^ 9 0] +\n", + "-0.004469970875487477 [0^ 9^ 9 2] +\n", + "1.1376669191197275 [1^ 0^ 0 1] +\n", + "-0.1266650547067105 [1^ 0^ 0 3] +\n", + "-0.12666505470671052 [1^ 0^ 2 1] +\n", + "0.02214895386816603 [1^ 0^ 2 3] +\n", + "0.007799539287510122 [1^ 0^ 4 5] +\n", + "0.007799539287510122 [1^ 0^ 6 7] +\n", + "0.007799539287510122 [1^ 0^ 8 9] +\n", + "-7.8575006535368574 [1^ 1] +\n", + "1.1376669191197275 [1^ 1^ 1 1] +\n", + "-0.1266650547067105 [1^ 1^ 1 3] +\n", + "-0.12666505470671052 [1^ 1^ 3 1] +\n", + "0.02214895386816603 [1^ 1^ 3 3] +\n", + "0.007799539287510122 [1^ 1^ 5 5] +\n", + "0.007799539287510122 [1^ 1^ 7 7] +\n", + "0.007799539287510122 [1^ 1^ 9 9] +\n", + "-0.12666505470671052 [1^ 2^ 0 1] +\n", + "0.02214895386816603 [1^ 2^ 0 3] +\n", + "0.2856181541250914 [1^ 2^ 2 1] +\n", + "-0.007121875526630251 [1^ 2^ 2 3] +\n", + "0.010281285614826111 [1^ 2^ 4 5] +\n", + "0.010281285614826111 [1^ 2^ 6 7] +\n", + "0.010281285614826111 [1^ 2^ 8 9] +\n", + "0.26757386046668147 [1^ 3] +\n", + "-0.12666505470671052 [1^ 3^ 1 1] +\n", + "0.02214895386816603 [1^ 3^ 1 3] +\n", + "0.2856181541250914 [1^ 3^ 3 1] +\n", + "-0.007121875526630251 [1^ 3^ 3 3] +\n", + "0.010281285614826111 [1^ 3^ 5 5] +\n", + "0.010281285614826111 [1^ 3^ 7 7] +\n", + "0.010281285614826111 [1^ 3^ 9 9] +\n", + "0.007799539287510122 [1^ 4^ 0 5] +\n", + "0.010281285614826111 [1^ 4^ 2 5] +\n", + "0.284614418228139 [1^ 4^ 4 1] +\n", + "-0.004469970875487477 [1^ 4^ 4 3] +\n", + "0.007799539287510122 [1^ 5^ 1 5] +\n", + "0.010281285614826111 [1^ 5^ 3 5] +\n", + "0.284614418228139 [1^ 5^ 5 1] +\n", + "-0.004469970875487477 [1^ 5^ 5 3] +\n", + "0.007799539287510122 [1^ 6^ 0 7] +\n", + "0.010281285614826111 [1^ 6^ 2 7] +\n", + "0.284614418228139 [1^ 6^ 6 1] +\n", + "-0.004469970875487477 [1^ 6^ 6 3] +\n", + "0.007799539287510122 [1^ 7^ 1 7] +\n", + "0.010281285614826111 [1^ 7^ 3 7] +\n", + "0.284614418228139 [1^ 7^ 7 1] +\n", + "-0.004469970875487477 [1^ 7^ 7 3] +\n", + "0.007799539287510122 [1^ 8^ 0 9] +\n", + "0.010281285614826111 [1^ 8^ 2 9] +\n", + "0.284614418228139 [1^ 8^ 8 1] +\n", + "-0.004469970875487477 [1^ 8^ 8 3] +\n", + "0.007799539287510122 [1^ 9^ 1 9] +\n", + "0.010281285614826111 [1^ 9^ 3 9] +\n", + "0.284614418228139 [1^ 9^ 9 1] +\n", + "-0.004469970875487477 [1^ 9^ 9 3] +\n", + "0.2675738604666816 [2^ 0] +\n", + "-0.1266650547067105 [2^ 0^ 0 0] +\n", + "0.2856181541250914 [2^ 0^ 0 2] +\n", + "0.02214895386816603 [2^ 0^ 2 0] +\n", + "-0.0071218755266302496 [2^ 0^ 2 2] +\n", + "0.010281285614826115 [2^ 0^ 4 4] +\n", + "0.010281285614826115 [2^ 0^ 6 6] +\n", + "0.010281285614826115 [2^ 0^ 8 8] +\n", + "-0.1266650547067105 [2^ 1^ 1 0] +\n", + "0.2856181541250914 [2^ 1^ 1 2] +\n", + "0.02214895386816603 [2^ 1^ 3 0] +\n", + "-0.0071218755266302496 [2^ 1^ 3 2] +\n", + "0.010281285614826115 [2^ 1^ 5 4] +\n", + "0.010281285614826115 [2^ 1^ 7 6] +\n", + "0.010281285614826115 [2^ 1^ 9 8] +\n", + "-1.7563500223350403 [2^ 2] +\n", + "0.02214895386816603 [2^ 2^ 0 0] +\n", + "-0.0071218755266302496 [2^ 2^ 0 2] +\n", + "-0.007121875526630251 [2^ 2^ 2 0] +\n", + "0.20206880988712603 [2^ 2^ 2 2] +\n", + "0.04340448973076089 [2^ 2^ 4 4] +\n", + "0.04340448973076089 [2^ 2^ 6 6] +\n", + "0.04340448973076089 [2^ 2^ 8 8] +\n", + "0.02214895386816603 [2^ 3^ 1 0] +\n", + "-0.0071218755266302496 [2^ 3^ 1 2] +\n", + "-0.007121875526630251 [2^ 3^ 3 0] +\n", + "0.20206880988712603 [2^ 3^ 3 2] +\n", + "0.04340448973076089 [2^ 3^ 5 4] +\n", + "0.04340448973076089 [2^ 3^ 7 6] +\n", + "0.04340448973076089 [2^ 3^ 9 8] +\n", + "0.010281285614826115 [2^ 4^ 0 4] +\n", + "0.04340448973076089 [2^ 4^ 2 4] +\n", + "-0.004469970875487477 [2^ 4^ 4 0] +\n", + "0.20479845197244187 [2^ 4^ 4 2] +\n", + "0.010281285614826115 [2^ 5^ 1 4] +\n", + "0.04340448973076089 [2^ 5^ 3 4] +\n", + "-0.004469970875487477 [2^ 5^ 5 0] +\n", + "0.20479845197244187 [2^ 5^ 5 2] +\n", + "0.010281285614826115 [2^ 6^ 0 6] +\n", + "0.04340448973076089 [2^ 6^ 2 6] +\n", + "-0.004469970875487477 [2^ 6^ 6 0] +\n", + "0.20479845197244187 [2^ 6^ 6 2] +\n", + "0.010281285614826115 [2^ 7^ 1 6] +\n", + "0.04340448973076089 [2^ 7^ 3 6] +\n", + "-0.004469970875487477 [2^ 7^ 7 0] +\n", + "0.20479845197244187 [2^ 7^ 7 2] +\n", + "0.010281285614826115 [2^ 8^ 0 8] +\n", + "0.04340448973076089 [2^ 8^ 2 8] +\n", + "-0.004469970875487477 [2^ 8^ 8 0] +\n", + "0.20479845197244187 [2^ 8^ 8 2] +\n", + "0.010281285614826115 [2^ 9^ 1 8] +\n", + "0.04340448973076089 [2^ 9^ 3 8] +\n", + "-0.004469970875487477 [2^ 9^ 9 0] +\n", + "0.20479845197244187 [2^ 9^ 9 2] +\n", + "-0.1266650547067105 [3^ 0^ 0 1] +\n", + "0.2856181541250914 [3^ 0^ 0 3] +\n", + "0.02214895386816603 [3^ 0^ 2 1] +\n", + "-0.0071218755266302496 [3^ 0^ 2 3] +\n", + "0.010281285614826115 [3^ 0^ 4 5] +\n", + "0.010281285614826115 [3^ 0^ 6 7] +\n", + "0.010281285614826115 [3^ 0^ 8 9] +\n", + "0.2675738604666816 [3^ 1] +\n", + "-0.1266650547067105 [3^ 1^ 1 1] +\n", + "0.2856181541250914 [3^ 1^ 1 3] +\n", + "0.02214895386816603 [3^ 1^ 3 1] +\n", + "-0.0071218755266302496 [3^ 1^ 3 3] +\n", + "0.010281285614826115 [3^ 1^ 5 5] +\n", + "0.010281285614826115 [3^ 1^ 7 7] +\n", + "0.010281285614826115 [3^ 1^ 9 9] +\n", + "0.02214895386816603 [3^ 2^ 0 1] +\n", + "-0.0071218755266302496 [3^ 2^ 0 3] +\n", + "-0.007121875526630251 [3^ 2^ 2 1] +\n", + "0.20206880988712603 [3^ 2^ 2 3] +\n", + "0.04340448973076089 [3^ 2^ 4 5] +\n", + "0.04340448973076089 [3^ 2^ 6 7] +\n", + "0.04340448973076089 [3^ 2^ 8 9] +\n", + "-1.7563500223350403 [3^ 3] +\n", + "0.02214895386816603 [3^ 3^ 1 1] +\n", + "-0.0071218755266302496 [3^ 3^ 1 3] +\n", + "-0.007121875526630251 [3^ 3^ 3 1] +\n", + "0.20206880988712603 [3^ 3^ 3 3] +\n", + "0.04340448973076089 [3^ 3^ 5 5] +\n", + "0.04340448973076089 [3^ 3^ 7 7] +\n", + "0.04340448973076089 [3^ 3^ 9 9] +\n", + "0.010281285614826115 [3^ 4^ 0 5] +\n", + "0.04340448973076089 [3^ 4^ 2 5] +\n", + "-0.004469970875487477 [3^ 4^ 4 1] +\n", + "0.20479845197244187 [3^ 4^ 4 3] +\n", + "0.010281285614826115 [3^ 5^ 1 5] +\n", + "0.04340448973076089 [3^ 5^ 3 5] +\n", + "-0.004469970875487477 [3^ 5^ 5 1] +\n", + "0.20479845197244187 [3^ 5^ 5 3] +\n", + "0.010281285614826115 [3^ 6^ 0 7] +\n", + "0.04340448973076089 [3^ 6^ 2 7] +\n", + "-0.004469970875487477 [3^ 6^ 6 1] +\n", + "0.20479845197244187 [3^ 6^ 6 3] +\n", + "0.010281285614826115 [3^ 7^ 1 7] +\n", + "0.04340448973076089 [3^ 7^ 3 7] +\n", + "-0.004469970875487477 [3^ 7^ 7 1] +\n", + "0.20479845197244187 [3^ 7^ 7 3] +\n", + "0.010281285614826115 [3^ 8^ 0 9] +\n", + "0.04340448973076089 [3^ 8^ 2 9] +\n", + "-0.004469970875487477 [3^ 8^ 8 1] +\n", + "0.20479845197244187 [3^ 8^ 8 3] +\n", + "0.010281285614826115 [3^ 9^ 1 9] +\n", + "0.04340448973076089 [3^ 9^ 3 9] +\n", + "-0.004469970875487477 [3^ 9^ 9 1] +\n", + "0.20479845197244187 [3^ 9^ 9 3] +\n", + "0.284614418228139 [4^ 0^ 0 4] +\n", + "-0.0044699708754874475 [4^ 0^ 2 4] +\n", + "0.007799539287510122 [4^ 0^ 4 0] +\n", + "0.010281285614826115 [4^ 0^ 4 2] +\n", + "0.284614418228139 [4^ 1^ 1 4] +\n", + "-0.0044699708754874475 [4^ 1^ 3 4] +\n", + "0.007799539287510122 [4^ 1^ 5 0] +\n", + "0.010281285614826115 [4^ 1^ 5 2] +\n", + "-0.0044699708754874475 [4^ 2^ 0 4] +\n", + "0.20479845197244193 [4^ 2^ 2 4] +\n", + "0.010281285614826111 [4^ 2^ 4 0] +\n", + "0.04340448973076089 [4^ 2^ 4 2] +\n", + "-0.0044699708754874475 [4^ 3^ 1 4] +\n", + "0.20479845197244193 [4^ 3^ 3 4] +\n", + "0.010281285614826111 [4^ 3^ 5 0] +\n", + "0.04340448973076089 [4^ 3^ 5 2] +\n", + "-1.6341574655066096 [4^ 4] +\n", + "0.007799539287510122 [4^ 4^ 0 0] +\n", + "0.010281285614826115 [4^ 4^ 0 2] +\n", + "0.010281285614826111 [4^ 4^ 2 0] +\n", + "0.04340448973076089 [4^ 4^ 2 2] +\n", + "0.22492952054333537 [4^ 4^ 4 4] +\n", + "0.012124689610585583 [4^ 4^ 6 6] +\n", + "0.012124689610585583 [4^ 4^ 8 8] +\n", + "0.007799539287510122 [4^ 5^ 1 0] +\n", + "0.010281285614826115 [4^ 5^ 1 2] +\n", + "0.010281285614826111 [4^ 5^ 3 0] +\n", + "0.04340448973076089 [4^ 5^ 3 2] +\n", + "0.22492952054333537 [4^ 5^ 5 4] +\n", + "0.012124689610585583 [4^ 5^ 7 6] +\n", + "0.012124689610585583 [4^ 5^ 9 8] +\n", + "0.012124689610585583 [4^ 6^ 4 6] +\n", + "0.20068014132216427 [4^ 6^ 6 4] +\n", + "0.012124689610585583 [4^ 7^ 5 6] +\n", + "0.20068014132216427 [4^ 7^ 7 4] +\n", + "0.012124689610585583 [4^ 8^ 4 8] +\n", + "0.20068014132216427 [4^ 8^ 8 4] +\n", + "0.012124689610585583 [4^ 9^ 5 8] +\n", + "0.20068014132216427 [4^ 9^ 9 4] +\n", + "0.284614418228139 [5^ 0^ 0 5] +\n", + "-0.0044699708754874475 [5^ 0^ 2 5] +\n", + "0.007799539287510122 [5^ 0^ 4 1] +\n", + "0.010281285614826115 [5^ 0^ 4 3] +\n", + "0.284614418228139 [5^ 1^ 1 5] +\n", + "-0.0044699708754874475 [5^ 1^ 3 5] +\n", + "0.007799539287510122 [5^ 1^ 5 1] +\n", + "0.010281285614826115 [5^ 1^ 5 3] +\n", + "-0.0044699708754874475 [5^ 2^ 0 5] +\n", + "0.20479845197244193 [5^ 2^ 2 5] +\n", + "0.010281285614826111 [5^ 2^ 4 1] +\n", + "0.04340448973076089 [5^ 2^ 4 3] +\n", + "-0.0044699708754874475 [5^ 3^ 1 5] +\n", + "0.20479845197244193 [5^ 3^ 3 5] +\n", + "0.010281285614826111 [5^ 3^ 5 1] +\n", + "0.04340448973076089 [5^ 3^ 5 3] +\n", + "0.007799539287510122 [5^ 4^ 0 1] +\n", + "0.010281285614826115 [5^ 4^ 0 3] +\n", + "0.010281285614826111 [5^ 4^ 2 1] +\n", + "0.04340448973076089 [5^ 4^ 2 3] +\n", + "0.22492952054333537 [5^ 4^ 4 5] +\n", + "0.012124689610585583 [5^ 4^ 6 7] +\n", + "0.012124689610585583 [5^ 4^ 8 9] +\n", + "-1.6341574655066096 [5^ 5] +\n", + "0.007799539287510122 [5^ 5^ 1 1] +\n", + "0.010281285614826115 [5^ 5^ 1 3] +\n", + "0.010281285614826111 [5^ 5^ 3 1] +\n", + "0.04340448973076089 [5^ 5^ 3 3] +\n", + "0.22492952054333537 [5^ 5^ 5 5] +\n", + "0.012124689610585583 [5^ 5^ 7 7] +\n", + "0.012124689610585583 [5^ 5^ 9 9] +\n", + "0.012124689610585583 [5^ 6^ 4 7] +\n", + "0.20068014132216427 [5^ 6^ 6 5] +\n", + "0.012124689610585583 [5^ 7^ 5 7] +\n", + "0.20068014132216427 [5^ 7^ 7 5] +\n", + "0.012124689610585583 [5^ 8^ 4 9] +\n", + "0.20068014132216427 [5^ 8^ 8 5] +\n", + "0.012124689610585583 [5^ 9^ 5 9] +\n", + "0.20068014132216427 [5^ 9^ 9 5] +\n", + "0.284614418228139 [6^ 0^ 0 6] +\n", + "-0.0044699708754874475 [6^ 0^ 2 6] +\n", + "0.007799539287510122 [6^ 0^ 6 0] +\n", + "0.010281285614826115 [6^ 0^ 6 2] +\n", + "0.284614418228139 [6^ 1^ 1 6] +\n", + "-0.0044699708754874475 [6^ 1^ 3 6] +\n", + "0.007799539287510122 [6^ 1^ 7 0] +\n", + "0.010281285614826115 [6^ 1^ 7 2] +\n", + "-0.0044699708754874475 [6^ 2^ 0 6] +\n", + "0.20479845197244193 [6^ 2^ 2 6] +\n", + "0.010281285614826111 [6^ 2^ 6 0] +\n", + "0.04340448973076089 [6^ 2^ 6 2] +\n", + "-0.0044699708754874475 [6^ 3^ 1 6] +\n", + "0.20479845197244193 [6^ 3^ 3 6] +\n", + "0.010281285614826111 [6^ 3^ 7 0] +\n", + "0.04340448973076089 [6^ 3^ 7 2] +\n", + "0.20068014132216427 [6^ 4^ 4 6] +\n", + "0.012124689610585583 [6^ 4^ 6 4] +\n", + "0.20068014132216427 [6^ 5^ 5 6] +\n", + "0.012124689610585583 [6^ 5^ 7 4] +\n", + "-1.6341574655066096 [6^ 6] +\n", + "0.007799539287510122 [6^ 6^ 0 0] +\n", + "0.010281285614826115 [6^ 6^ 0 2] +\n", + "0.010281285614826111 [6^ 6^ 2 0] +\n", + "0.04340448973076089 [6^ 6^ 2 2] +\n", + "0.012124689610585583 [6^ 6^ 4 4] +\n", + "0.22492952054333537 [6^ 6^ 6 6] +\n", + "0.012124689610585583 [6^ 6^ 8 8] +\n", + "0.007799539287510122 [6^ 7^ 1 0] +\n", + "0.010281285614826115 [6^ 7^ 1 2] +\n", + "0.010281285614826111 [6^ 7^ 3 0] +\n", + "0.04340448973076089 [6^ 7^ 3 2] +\n", + "0.012124689610585583 [6^ 7^ 5 4] +\n", + "0.22492952054333537 [6^ 7^ 7 6] +\n", + "0.012124689610585583 [6^ 7^ 9 8] +\n", + "0.012124689610585583 [6^ 8^ 6 8] +\n", + "0.20068014132216427 [6^ 8^ 8 6] +\n", + "0.012124689610585583 [6^ 9^ 7 8] +\n", + "0.20068014132216427 [6^ 9^ 9 6] +\n", + "0.284614418228139 [7^ 0^ 0 7] +\n", + "-0.0044699708754874475 [7^ 0^ 2 7] +\n", + "0.007799539287510122 [7^ 0^ 6 1] +\n", + "0.010281285614826115 [7^ 0^ 6 3] +\n", + "0.284614418228139 [7^ 1^ 1 7] +\n", + "-0.0044699708754874475 [7^ 1^ 3 7] +\n", + "0.007799539287510122 [7^ 1^ 7 1] +\n", + "0.010281285614826115 [7^ 1^ 7 3] +\n", + "-0.0044699708754874475 [7^ 2^ 0 7] +\n", + "0.20479845197244193 [7^ 2^ 2 7] +\n", + "0.010281285614826111 [7^ 2^ 6 1] +\n", + "0.04340448973076089 [7^ 2^ 6 3] +\n", + "-0.0044699708754874475 [7^ 3^ 1 7] +\n", + "0.20479845197244193 [7^ 3^ 3 7] +\n", + "0.010281285614826111 [7^ 3^ 7 1] +\n", + "0.04340448973076089 [7^ 3^ 7 3] +\n", + "0.20068014132216427 [7^ 4^ 4 7] +\n", + "0.012124689610585583 [7^ 4^ 6 5] +\n", + "0.20068014132216427 [7^ 5^ 5 7] +\n", + "0.012124689610585583 [7^ 5^ 7 5] +\n", + "0.007799539287510122 [7^ 6^ 0 1] +\n", + "0.010281285614826115 [7^ 6^ 0 3] +\n", + "0.010281285614826111 [7^ 6^ 2 1] +\n", + "0.04340448973076089 [7^ 6^ 2 3] +\n", + "0.012124689610585583 [7^ 6^ 4 5] +\n", + "0.22492952054333537 [7^ 6^ 6 7] +\n", + "0.012124689610585583 [7^ 6^ 8 9] +\n", + "-1.6341574655066096 [7^ 7] +\n", + "0.007799539287510122 [7^ 7^ 1 1] +\n", + "0.010281285614826115 [7^ 7^ 1 3] +\n", + "0.010281285614826111 [7^ 7^ 3 1] +\n", + "0.04340448973076089 [7^ 7^ 3 3] +\n", + "0.012124689610585583 [7^ 7^ 5 5] +\n", + "0.22492952054333537 [7^ 7^ 7 7] +\n", + "0.012124689610585583 [7^ 7^ 9 9] +\n", + "0.012124689610585583 [7^ 8^ 6 9] +\n", + "0.20068014132216427 [7^ 8^ 8 7] +\n", + "0.012124689610585583 [7^ 9^ 7 9] +\n", + "0.20068014132216427 [7^ 9^ 9 7] +\n", + "0.284614418228139 [8^ 0^ 0 8] +\n", + "-0.0044699708754874475 [8^ 0^ 2 8] +\n", + "0.007799539287510122 [8^ 0^ 8 0] +\n", + "0.010281285614826115 [8^ 0^ 8 2] +\n", + "0.284614418228139 [8^ 1^ 1 8] +\n", + "-0.0044699708754874475 [8^ 1^ 3 8] +\n", + "0.007799539287510122 [8^ 1^ 9 0] +\n", + "0.010281285614826115 [8^ 1^ 9 2] +\n", + "-0.0044699708754874475 [8^ 2^ 0 8] +\n", + "0.20479845197244193 [8^ 2^ 2 8] +\n", + "0.010281285614826111 [8^ 2^ 8 0] +\n", + "0.04340448973076089 [8^ 2^ 8 2] +\n", + "-0.0044699708754874475 [8^ 3^ 1 8] +\n", + "0.20479845197244193 [8^ 3^ 3 8] +\n", + "0.010281285614826111 [8^ 3^ 9 0] +\n", + "0.04340448973076089 [8^ 3^ 9 2] +\n", + "0.20068014132216427 [8^ 4^ 4 8] +\n", + "0.012124689610585583 [8^ 4^ 8 4] +\n", + "0.20068014132216427 [8^ 5^ 5 8] +\n", + "0.012124689610585583 [8^ 5^ 9 4] +\n", + "0.20068014132216427 [8^ 6^ 6 8] +\n", + "0.012124689610585583 [8^ 6^ 8 6] +\n", + "0.20068014132216427 [8^ 7^ 7 8] +\n", + "0.012124689610585583 [8^ 7^ 9 6] +\n", + "-1.6341574655066096 [8^ 8] +\n", + "0.007799539287510122 [8^ 8^ 0 0] +\n", + "0.010281285614826115 [8^ 8^ 0 2] +\n", + "0.010281285614826111 [8^ 8^ 2 0] +\n", + "0.04340448973076089 [8^ 8^ 2 2] +\n", + "0.012124689610585583 [8^ 8^ 4 4] +\n", + "0.012124689610585583 [8^ 8^ 6 6] +\n", + "0.22492952054333537 [8^ 8^ 8 8] +\n", + "0.007799539287510122 [8^ 9^ 1 0] +\n", + "0.010281285614826115 [8^ 9^ 1 2] +\n", + "0.010281285614826111 [8^ 9^ 3 0] +\n", + "0.04340448973076089 [8^ 9^ 3 2] +\n", + "0.012124689610585583 [8^ 9^ 5 4] +\n", + "0.012124689610585583 [8^ 9^ 7 6] +\n", + "0.22492952054333537 [8^ 9^ 9 8] +\n", + "0.284614418228139 [9^ 0^ 0 9] +\n", + "-0.0044699708754874475 [9^ 0^ 2 9] +\n", + "0.007799539287510122 [9^ 0^ 8 1] +\n", + "0.010281285614826115 [9^ 0^ 8 3] +\n", + "0.284614418228139 [9^ 1^ 1 9] +\n", + "-0.0044699708754874475 [9^ 1^ 3 9] +\n", + "0.007799539287510122 [9^ 1^ 9 1] +\n", + "0.010281285614826115 [9^ 1^ 9 3] +\n", + "-0.0044699708754874475 [9^ 2^ 0 9] +\n", + "0.20479845197244193 [9^ 2^ 2 9] +\n", + "0.010281285614826111 [9^ 2^ 8 1] +\n", + "0.04340448973076089 [9^ 2^ 8 3] +\n", + "-0.0044699708754874475 [9^ 3^ 1 9] +\n", + "0.20479845197244193 [9^ 3^ 3 9] +\n", + "0.010281285614826111 [9^ 3^ 9 1] +\n", + "0.04340448973076089 [9^ 3^ 9 3] +\n", + "0.20068014132216427 [9^ 4^ 4 9] +\n", + "0.012124689610585583 [9^ 4^ 8 5] +\n", + "0.20068014132216427 [9^ 5^ 5 9] +\n", + "0.012124689610585583 [9^ 5^ 9 5] +\n", + "0.20068014132216427 [9^ 6^ 6 9] +\n", + "0.012124689610585583 [9^ 6^ 8 7] +\n", + "0.20068014132216427 [9^ 7^ 7 9] +\n", + "0.012124689610585583 [9^ 7^ 9 7] +\n", + "0.007799539287510122 [9^ 8^ 0 1] +\n", + "0.010281285614826115 [9^ 8^ 0 3] +\n", + "0.010281285614826111 [9^ 8^ 2 1] +\n", + "0.04340448973076089 [9^ 8^ 2 3] +\n", + "0.012124689610585583 [9^ 8^ 4 5] +\n", + "0.012124689610585583 [9^ 8^ 6 7] +\n", + "0.22492952054333537 [9^ 8^ 8 9] +\n", + "-1.6341574655066096 [9^ 9] +\n", + "0.007799539287510122 [9^ 9^ 1 1] +\n", + "0.010281285614826115 [9^ 9^ 1 3] +\n", + "0.010281285614826111 [9^ 9^ 3 1] +\n", + "0.04340448973076089 [9^ 9^ 3 3] +\n", + "0.012124689610585583 [9^ 9^ 5 5] +\n", + "0.012124689610585583 [9^ 9^ 7 7] +\n", + "0.22492952054333537 [9^ 9^ 9 9]\n" + ] + } + ], "source": [ "print(molecule.H)" ] @@ -116,12 +1041,175 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "6db8f02f", "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-9.009+0.000j IIIIIIIIII +\n", + " 2.243+0.000j ZIIIIIIIII +\n", + " 0.038+0.000j YZYIIIIIII +\n", + " 0.038+0.000j XZXIIIIIII +\n", + " 2.243+0.000j IZIIIIIIII +\n", + " 0.038+0.000j IYZYIIIIII +\n", + " 0.038+0.000j IXZXIIIIII +\n", + "-0.047+0.000j IIZIIIIIII +\n", + "-0.047+0.000j IIIZIIIIII +\n", + "-0.148+0.000j IIIIZIIIII +\n", + "-0.148+0.000j IIIIIZIIII +\n", + "-0.148+0.000j IIIIIIZIII +\n", + "-0.148+0.000j IIIIIIIZII +\n", + "-0.148+0.000j IIIIIIIIZI +\n", + "-0.148+0.000j IIIIIIIIIZ +\n", + " 0.569+0.000j ZZIIIIIIII +\n", + " 0.063+0.000j YIYIIIIIII +\n", + " 0.063+0.000j XIXIIIIIII +\n", + " 0.063+0.000j ZYZYIIIIII +\n", + " 0.063+0.000j ZXZXIIIIII +\n", + " 0.011+0.000j YXXYIIIIII +\n", + "-0.011+0.000j YYXXIIIIII +\n", + "-0.011+0.000j XXYYIIIIII +\n", + " 0.011+0.000j XYYXIIIIII +\n", + " 0.004+0.000j YXIIXYIIII +\n", + "-0.004+0.000j YYIIXXIIII +\n", + "-0.004+0.000j XXIIYYIIII +\n", + " 0.004+0.000j XYIIYXIIII +\n", + " 0.004+0.000j YXIIIIXYII +\n", + "-0.004+0.000j YYIIIIXXII +\n", + "-0.004+0.000j XXIIIIYYII +\n", + " 0.004+0.000j XYIIIIYXII +\n", + " 0.004+0.000j YXIIIIIIXY +\n", + "-0.004+0.000j YYIIIIIIXX +\n", + "-0.004+0.000j XXIIIIIIYY +\n", + " 0.004+0.000j XYIIIIIIYX +\n", + " 0.132+0.000j ZIZIIIIIII +\n", + " 0.143+0.000j ZIIZIIIIII +\n", + " 0.004+0.000j YZYZIIIIII +\n", + " 0.004+0.000j XZXZIIIIII +\n", + " 0.005+0.000j YZZXXYIIII +\n", + "-0.005+0.000j YZZYXXIIII +\n", + "-0.005+0.000j XZZXYYIIII +\n", + " 0.005+0.000j XZZYYXIIII +\n", + " 0.005+0.000j YZZXIIXYII +\n", + "-0.005+0.000j YZZYIIXXII +\n", + "-0.005+0.000j XZZXIIYYII +\n", + " 0.005+0.000j XZZYIIYXII +\n", + " 0.005+0.000j YZZXIIIIXY +\n", + "-0.005+0.000j YZZYIIIIXX +\n", + "-0.005+0.000j XZZXIIIIYY +\n", + " 0.005+0.000j XZZYIIIIYX +\n", + " 0.138+0.000j ZIIIZIIIII +\n", + " 0.007+0.000j YZYIZIIIII +\n", + " 0.007+0.000j XZXIZIIIII +\n", + " 0.142+0.000j ZIIIIZIIII +\n", + " 0.002+0.000j YZYIIZIIII +\n", + " 0.002+0.000j XZXIIZIIII +\n", + " 0.138+0.000j ZIIIIIZIII +\n", + " 0.007+0.000j YZYIIIZIII +\n", + " 0.007+0.000j XZXIIIZIII +\n", + " 0.142+0.000j ZIIIIIIZII +\n", + " 0.002+0.000j YZYIIIIZII +\n", + " 0.002+0.000j XZXIIIIZII +\n", + " 0.138+0.000j ZIIIIIIIZI +\n", + " 0.007+0.000j YZYIIIIIZI +\n", + " 0.007+0.000j XZXIIIIIZI +\n", + " 0.142+0.000j ZIIIIIIIIZ +\n", + " 0.002+0.000j YZYIIIIIIZ +\n", + " 0.002+0.000j XZXIIIIIIZ +\n", + " 0.143+0.000j IZZIIIIIII +\n", + " 0.004+0.000j IYIYIIIIII +\n", + " 0.004+0.000j IXIXIIIIII +\n", + "-0.005+0.000j IYXIXYIIII +\n", + "-0.005+0.000j IYYIYYIIII +\n", + "-0.005+0.000j IXXIXXIIII +\n", + "-0.005+0.000j IXYIYXIIII +\n", + "-0.005+0.000j IYXIIIXYII +\n", + "-0.005+0.000j IYYIIIYYII +\n", + "-0.005+0.000j IXXIIIXXII +\n", + "-0.005+0.000j IXYIIIYXII +\n", + "-0.005+0.000j IYXIIIIIXY +\n", + "-0.005+0.000j IYYIIIIIYY +\n", + "-0.005+0.000j IXXIIIIIXX +\n", + "-0.005+0.000j IXYIIIIIYX +\n", + " 0.132+0.000j IZIZIIIIII +\n", + " 0.142+0.000j IZIIZIIIII +\n", + " 0.002+0.000j IYZYZIIIII +\n", + " 0.002+0.000j IXZXZIIIII +\n", + " 0.138+0.000j IZIIIZIIII +\n", + " 0.007+0.000j IYZYIZIIII +\n", + " 0.007+0.000j IXZXIZIIII +\n", + " 0.142+0.000j IZIIIIZIII +\n", + " 0.002+0.000j IYZYIIZIII +\n", + " 0.002+0.000j IXZXIIZIII +\n", + " 0.138+0.000j IZIIIIIZII +\n", + " 0.007+0.000j IYZYIIIZII +\n", + " 0.007+0.000j IXZXIIIZII +\n", + " 0.142+0.000j IZIIIIIIZI +\n", + " 0.002+0.000j IYZYIIIIZI +\n", + " 0.002+0.000j IXZXIIIIZI +\n", + " 0.138+0.000j IZIIIIIIIZ +\n", + " 0.007+0.000j IYZYIIIIIZ +\n", + " 0.007+0.000j IXZXIIIIIZ +\n", + " 0.101+0.000j IIZZIIIIII +\n", + " 0.022+0.000j IIYXXYIIII +\n", + "-0.022+0.000j IIYYXXIIII +\n", + "-0.022+0.000j IIXXYYIIII +\n", + " 0.022+0.000j IIXYYXIIII +\n", + " 0.022+0.000j IIYXIIXYII +\n", + "-0.022+0.000j IIYYIIXXII +\n", + "-0.022+0.000j IIXXIIYYII +\n", + " 0.022+0.000j IIXYIIYXII +\n", + " 0.022+0.000j IIYXIIIIXY +\n", + "-0.022+0.000j IIYYIIIIXX +\n", + "-0.022+0.000j IIXXIIIIYY +\n", + " 0.022+0.000j IIXYIIIIYX +\n", + " 0.081+0.000j IIZIZIIIII +\n", + " 0.102+0.000j IIZIIZIIII +\n", + " 0.081+0.000j IIZIIIZIII +\n", + " 0.102+0.000j IIZIIIIZII +\n", + " 0.081+0.000j IIZIIIIIZI +\n", + " 0.102+0.000j IIZIIIIIIZ +\n", + " 0.102+0.000j IIIZZIIIII +\n", + " 0.081+0.000j IIIZIZIIII +\n", + " 0.102+0.000j IIIZIIZIII +\n", + " 0.081+0.000j IIIZIIIZII +\n", + " 0.102+0.000j IIIZIIIIZI +\n", + " 0.081+0.000j IIIZIIIIIZ +\n", + " 0.112+0.000j IIIIZZIIII +\n", + " 0.006+0.000j IIIIYXXYII +\n", + "-0.006+0.000j IIIIYYXXII +\n", + "-0.006+0.000j IIIIXXYYII +\n", + " 0.006+0.000j IIIIXYYXII +\n", + " 0.006+0.000j IIIIYXIIXY +\n", + "-0.006+0.000j IIIIYYIIXX +\n", + "-0.006+0.000j IIIIXXIIYY +\n", + " 0.006+0.000j IIIIXYIIYX +\n", + " 0.094+0.000j IIIIZIZIII +\n", + " 0.100+0.000j IIIIZIIZII +\n", + " 0.094+0.000j IIIIZIIIZI +\n", + " 0.100+0.000j IIIIZIIIIZ +\n", + " 0.100+0.000j IIIIIZZIII +\n", + " 0.094+0.000j IIIIIZIZII +\n", + " 0.100+0.000j IIIIIZIIZI +\n", + " 0.094+0.000j IIIIIZIIIZ +\n", + " 0.112+0.000j IIIIIIZZII +\n", + " 0.006+0.000j IIIIIIYXXY +\n", + "-0.006+0.000j IIIIIIYYXX +\n", + "-0.006+0.000j IIIIIIXXYY +\n", + " 0.006+0.000j IIIIIIXYYX +\n", + " 0.094+0.000j IIIIIIZIZI +\n", + " 0.100+0.000j IIIIIIZIIZ +\n", + " 0.100+0.000j IIIIIIIZZI +\n", + " 0.094+0.000j IIIIIIIZIZ +\n", + " 0.112+0.000j IIIIIIIIZZ\n" + ] + } + ], "source": [ "H = molecule.H_q\n", "print(H)" @@ -137,10 +1225,53 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "5be573ec", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ground state energy = -14.403655108067936, with FCI error 2.540190280342358e-13.\n", + "\n", + "The ground state is:\n", + "\n", + " 0.000+0.000j |0000001111> +\n", + " 0.000+0.000j |0000110011> +\n", + " 0.000+0.000j |0000111100> +\n", + "-0.001-0.001j |0011000011> +\n", + "-0.001-0.001j |0011001100> +\n", + "-0.001-0.001j |0011110000> +\n", + "-0.002-0.002j |0110000011> +\n", + "-0.002-0.002j |0110001100> +\n", + "-0.002-0.002j |0110110000> +\n", + " 0.002+0.002j |1001000011> +\n", + " 0.002+0.002j |1001001100> +\n", + " 0.002+0.002j |1001110000> +\n", + "-0.133-0.130j |1100000011> +\n", + "-0.133-0.130j |1100001100> +\n", + "-0.133-0.130j |1100110000> +\n", + "-0.000+0.000j |1101000001> +\n", + " 0.000+0.000j |1101000010> +\n", + "-0.000+0.000j |1101000100> +\n", + " 0.000+0.000j |1101001000> +\n", + " 0.000+0.000j |1101010000> +\n", + "-0.000+0.000j |1101010001> +\n", + " 0.000-0.000j |1101100000> +\n", + "-0.000+0.000j |1110000001> +\n", + "-0.000-0.000j |1110000010> +\n", + " 0.000+0.000j |1110000100> +\n", + " 0.000+0.000j |1110001000> +\n", + "-0.000-0.000j |1110010000> +\n", + "-0.000+0.000j |1110100000> +\n", + " 0.678+0.661j |1111000000> +\n", + " 0.000-0.000j |1111000001> +\n", + "-0.000-0.000j |1111001000> +\n", + "-0.000-0.000j |1111100000>\n" + ] + } + ], "source": [ "from symmer.utils import exact_gs_energy\n", "from symmer.symplectic import QuantumState\n", @@ -163,10 +1294,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "1be9c499", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Qubit tapering permits a reduction of 10 -> 5 qubits.\n", + "\n", + "The following symmetry generators were identified:\n", + "\n", + " 1 IIIIIIIIZZ \n", + " 1 IIIIIIZZII \n", + " 1 IIIIZZIIII \n", + " 1 IZIZIZIZIZ \n", + " 1 ZIZIIZIZIZ\n", + "\n", + "which we may rotate onto the single-qubit Pauli operators\n", + "\n", + "-1 IIIIIIIIXI \n", + "-1 IIIIIIXIII \n", + "-1 IIIIXIIIII \n", + "-1 IXIIIIIIII \n", + "-1 XIIIIIIIII\n", + "\n", + "via a sequence of Clifford operations R_k = e^{i pi/4 P_k} where:\n", + "\n", + "P_0 = 1+0j IIIIIIIIYZ\n", + "P_1 = 1+0j IIIIIIYZII\n", + "P_2 = 1+0j IIIIYZIIII\n", + "P_3 = 1+0j IYIZIZIZIZ\n", + "P_4 = 1+0j YIZIIZIZIZ\n" + ] + } + ], "source": [ "from symmer.projection import QubitTapering\n", "\n", @@ -184,10 +1347,39 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "def1b88b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The ground state energy of the Hamiltonian is -14.403655108067936\n", + "and for the 5-qubit tapered Hamiltonian it is -14.40365510806768;\n", + "the energy error is 2.5579538487363607e-13.\n", + "\n", + "The tapered ground state is:\n", + "\n", + "-0.186+0.000j |00001> +\n", + "-0.186+0.000j |00010> +\n", + "-0.001+0.000j |00011> +\n", + "-0.186+0.000j |00100> +\n", + "-0.001+0.000j |00101> +\n", + "-0.001+0.000j |00110> +\n", + "-0.003+0.000j |01001> +\n", + "-0.003+0.000j |01010> +\n", + "-0.003+0.000j |01100> +\n", + " 0.003+0.000j |10001> +\n", + " 0.003+0.000j |10010> +\n", + " 0.003+0.000j |10100> +\n", + "-0.946+0.000j |11000> +\n", + "-0.001+0.000j |11001> +\n", + "-0.001+0.000j |11010> +\n", + "-0.001+0.000j |11100>\n" + ] + } + ], "source": [ "H_taper = QT.taper_it(ref_state=molecule.hf_array) \n", "UCC_taper = QT.taper_it(aux_operator=molecule.UCC_q)\n", @@ -214,7 +1406,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "d3512213", "metadata": {}, "outputs": [], @@ -238,10 +1430,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "bf909985", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'symmetry': -8.672+0.000j IIIII +\n", + " -0.297+0.000j IIIIZ +\n", + " -0.297+0.000j IIIZI +\n", + " 0.389+0.000j IIIZZ +\n", + " -0.297+0.000j IIZII +\n", + " 0.389+0.000j IIZIZ +\n", + " 0.389+0.000j IIZZI +\n", + " 0.263+0.000j IIZZZ +\n", + " -0.047+0.000j IZIII +\n", + " 0.183+0.000j IZIIZ +\n", + " 0.183+0.000j IZIZI +\n", + " 0.281+0.000j IZIZZ +\n", + " 0.183+0.000j IZZII +\n", + " 0.281+0.000j IZZIZ +\n", + " 0.281+0.000j IZZZI +\n", + " 2.243-0.000j IZZZZ,\n", + " 'clique_0': -0.060+0.000j XIIII +\n", + " 0.060+0.000j XIZZZ +\n", + " 0.038-0.000j XZIII +\n", + " 0.010+0.000j XZIIZ +\n", + " 0.010+0.000j XZIZI +\n", + " -0.010+0.000j XZIZZ +\n", + " 0.010+0.000j XZZII +\n", + " -0.010+0.000j XZZIZ +\n", + " -0.010+0.000j XZZZI +\n", + " -0.038+0.000j XZZZZ,\n", + " 'clique_1': -0.047+0.000j ZIIII +\n", + " 0.183+0.000j ZIIIZ +\n", + " 0.183+0.000j ZIIZI +\n", + " 0.281+0.000j ZIIZZ +\n", + " 0.183+0.000j ZIZII +\n", + " 0.281+0.000j ZIZIZ +\n", + " 0.281+0.000j ZIZZI +\n", + " 2.243-0.000j ZIZZZ +\n", + " 0.670+0.000j ZZIII +\n", + " 0.286+0.000j ZZZZZ}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cs_vqe.noncontextual_operator.decomposed" ] @@ -256,10 +1494,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "c609c3fd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from symmer.symplectic import ObservableGraph, PauliwordOp\n", "from matplotlib import pyplot as plt\n", @@ -304,10 +1553,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "043e1a50", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The symmetry generators G are:\n", + "\n", + " 1 IIIIZ \n", + " 1 IIIZI \n", + " 1 IIZII \n", + "-1 IZIII\n", + "\n", + "The clique operator A(r) is:\n", + "\n", + " 0.000 XIIII +\n", + "-1.000 ZIIII\n", + "\n", + "The optimal paramters are nu=[ 1 1 1 -1], r=[ 1.45865824e-08 -1.00000000e+00],\n", + "which yields a noncontextual energy of n(nu,r) = -14.351880476202028\n" + ] + } + ], "source": [ "print('The symmetry generators G are:\\n')\n", "print(cs_vqe.noncontextual_operator.symmetry_generators); print()\n", @@ -338,13 +1608,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "68cde7f5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We may project into the contextual subspace stabilized by ['IZZZZ', 'ZIZZZ'] via a sequence of rotations:\n", + "\n", + "Note the clique operator\n", + " 0.000 XIIII +\n", + "-1.000 ZIIII\n", + "is enforced for this set of stabilizers.\n", + "\n", + "and tracing over qubit positions [1 0] yields the 3-qubit Hamiltonian:\n", + "\n", + "-12.489+0.000j III +\n", + "-0.858+0.000j IIZ +\n", + "-0.858+0.000j IZI +\n", + " 0.023+0.000j IZZ +\n", + "-0.858+0.000j ZII +\n", + " 0.023+0.000j ZIZ +\n", + " 0.023+0.000j ZZI +\n", + " 0.642+0.000j ZZZ +\n", + "-0.043+0.000j IIX +\n", + "-0.043+0.000j ZZX +\n", + "-0.043+0.000j IXI +\n", + "-0.043+0.000j ZXZ +\n", + " 0.012+0.000j IXX +\n", + " 0.012+0.000j IYY +\n", + "-0.043+0.000j XII +\n", + "-0.043+0.000j XZZ +\n", + " 0.012+0.000j XIX +\n", + " 0.012+0.000j YIY +\n", + " 0.012+0.000j XXI +\n", + " 0.012+0.000j YYI\n" + ] + } + ], "source": [ - "from symmer.symplectic import StabilizerOp\n", - "\n", "cs_vqe.update_stabilizers(n_qubits = 3, strategy='aux_preserving', aux_operator=UCC_taper)\n", "# the user may specify stabilizers manually also:\n", "# cs_vqe.manual_stabilizers(['ZIZZZ', 'ZZIII'])\n", @@ -369,20 +1673,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "5313b96e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[( 1.000+0.000j YIZZZ, None),\n", + " ( 1.000+0.000j IYZZZ, None),\n", + " ( 1.000+0.000j IYIII, None),\n", + " ( 1.000+0.000j YIIII, None)]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cs_vqe.stabilizers.stabilizer_rotations" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "f5e3b115", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + " 0.000+0.000j IIIII +\n", + " 0.000+1.000j YIIII" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cs_vqe.unitary_partitioning_rotations" ] @@ -397,10 +1727,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "724f1ae9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Converged VQE energy = -14.40332860225806 with FCI error 0.00032650580962112485\n" + ] + } + ], "source": [ "from symmer.symplectic import ObservableOp, AnsatzOp\n", "\n", @@ -420,10 +1758,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "e0b1c8bd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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FStWRNmyZfHjjz8iXbp0piMREVEifvvtN5QqVcp0DLID//77LzJlygQRwcaNG7Fhw4aYou7ff/9FuXLlcPToUcQ3VFhc30sickRVveP6vEO1qNnjwwRPK1asGD7++GP8/PPP8PX1NR2HiIiInsORI0fg5eWF8uXLY+HChZgxYwaAyAc0SpUqhX79+sVbpCUHW9QM6dOnD5YsWYJvvvkGb775puk4RESUALaokaWk6Ra11GTWrFkoX748unTpgqCgINNxiIiIyA6xUDMkU6ZM2Lx5Mx48eICOHTsamZaCiIiI7BsLNYNefvllLF68GPv37zc+sS4RERHZHxZqhnXu3BndunXDxIkTsWvXLtNxiIiIyI44VKGWGp76jMu8efNQunRpdOrUKdaUFURERNH+/vtvtG/fHkWLFkWlSpXw5ptv4vfff8fevXvRuHFjq5yzevXqydpv9OjRMWOzUcpwCik7kDlzZmzevBne3t7o1KkTdu3aFTOnGBER2Z+DVw7i1sNbFjueWwY3VH2xarzbVRUtWrTA22+/HTMa/vHjx2Pm7rSWAwcOWPX41hIzoblT6m+PSv1fgYMoXbo0FixYgD179mD8+PGm4xARUQJuPbyF3JlzW+yVWNG3Z88epEuXDn369IlZ5+npGTNV1N27d9G6dWuULFkSnTp1ipnC6ciRI6hVqxYqVaqE119/PeauTe3atTFo0CB4e3ujVKlSOHz4MFq2bInixYvHGuMza9asMctTpkxBuXLl4OnpiaFDhwIAPv74Y1SuXBmenp5o1apVzJRU8dm2bRteeeUVVKhQAa+99lpMoXn37l107doV5cqVQ/ny5WOmaPr2229RsWJFeHp6ol69egCeba0rW7YsLl26hEuXLuHll19Gly5dULZsWVy5cgXvvPMOvL29UaZMGYwaNSpmn8OHD6N69erw9PRElSpVcOfOHdSsWTPWXJ//+9//4p1GypYcqkUttfPx8cGePXswZswY1KxZE3Xq1DEdiYiI7MCvv/6KSpUqxbv92LFjOHXqFPLnz49XX30V//d//4dXXnkF/fr1w1dffYXcuXNj06ZNGDFiBFasWAEASJ8+Pfz9/TFnzhw0a9YMR44cQc6cOVG0aFEMGjQIuXLlijn+jh078NVXX+HQoUPInDkzbty4ASByHuuePSNvYvn6+mL58uXo169fvDn/97//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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "fig, axis = plt.subplots(figsize=(10,6))\n", "\n", @@ -463,7 +1814,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.13" }, "vscode": { "interpreter": { diff --git a/notebooks/2. Applications/2.4 CS-VQE for Noncontextual Problem.ipynb b/notebooks/2. Applications/2.4 CS-VQE for Noncontextual Problem.ipynb index e7930dfe..ca6d742c 100644 --- a/notebooks/2. Applications/2.4 CS-VQE for Noncontextual Problem.ipynb +++ b/notebooks/2. Applications/2.4 CS-VQE for Noncontextual Problem.ipynb @@ -369,52 +369,132 @@ { "cell_type": "code", "execution_count": 8, + "id": "f2818f7e", + "metadata": {}, + "outputs": [], + "source": [ + "from symmer.utils import exact_gs_energy\n", + "\n", + "gs_energy, psi = exact_gs_energy(H_noncon.to_sparse_matrix)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f630f794", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(-24.148988598855286+1.3877787807814457e-16j)\n", + "(-24.148988598855286+1.3877787807814457e-16j)\n" + ] + } + ], + "source": [ + "i=8\n", + "print(psi.dagger * H_noncon * psi)\n", + "print(psi.dagger * H_noncon.symmetry_generators[i].dagger * H_noncon * H_noncon.symmetry_generators[i] * psi)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "94b357c1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "np.sum(np.array([False, True, False]))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, "id": "33ad22fd", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/independent_op.py:245: UserWarning: The stabilizers ['IIIIIIZIII'] were assigned zero values - bad reference state.\n", + " warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.')\n" + ] + }, { "data": { "text/plain": [ - "-24.14898859885364" + "(-24.148988598850025,\n", + " 1 IIIIIIIIIZ \n", + " 1 IIIIIIIIZI \n", + " 1 IIIIIIIZII \n", + " -1 IIIIIIZIII \n", + " 1 IIIIIZIIII \n", + " 1 IIIIZIIIII \n", + " -1 IIZIIIIIII \n", + " 1 IZIZIIIIII \n", + " -1 ZIIIIIIIII)" ] }, - "execution_count": 8, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='brute_force')\n", - "H_noncon.energy" + "H_noncon.solve(strategy='brute_force', ref_state=psi)\n", + "H_noncon.energy, H_noncon.symmetry_generators" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "id": "323ab3d2", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/independent_op.py:245: UserWarning: The stabilizers ['IIIIIIZIII'] were assigned zero values - bad reference state.\n", + " warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.')\n" + ] + }, { "data": { "text/plain": [ - "-24.14898859885364" + "-23.94847036640803" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='binary_relaxation')\n", + "H_noncon.solve(strategy='binary_relaxation', ref_state=psi)\n", "H_noncon.energy" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "id": "31adf9dd", "metadata": {}, "outputs": [], @@ -425,103 +505,217 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, + "id": "0424df70", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " 1 IIIIIIIIIZ \n", + " 1 IIIIIIIIZI \n", + " 1 IIIIIIIZII \n", + " 1 IIIIIIZIII \n", + " 1 IIIIIZIIII \n", + " 1 IIIIZIIIII \n", + "-1 IIZIIIIIII \n", + " 1 IZIZIIIIII \n", + "-1 ZIIIIIIIII" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "H_noncon.symmetry_generators" + ] + }, + { + "cell_type": "code", + "execution_count": 15, "id": "3acb2a85", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/independent_op.py:245: UserWarning: The stabilizers ['IIIIIIZIII'] were assigned zero values - bad reference state.\n", + " warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.')\n" + ] + }, { "data": { "text/plain": [ - "-24.14898859885362" + "-24.14898859885364" ] }, - "execution_count": 11, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='brute_force_PUSO')\n", - "H_noncon.energy" + "H_noncon.solve(strategy='brute_force_PUSO', ref_state=psi)\n", + "H_noncon.energy#, H_noncon.symmetry_generators" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 16, + "id": "2831634a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 1, 1, -1, 1, 1, -1, 1, -1])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "H_noncon.symmetry_generators.coeff_vec" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "id": "27920508", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/independent_op.py:245: UserWarning: The stabilizers ['IIIIIIZIII'] were assigned zero values - bad reference state.\n", + " warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.')\n" + ] + }, { "data": { "text/plain": [ - "-24.148988598852178" + "-24.14898859885364" ] }, - "execution_count": 12, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='brute_force_QUSO')\n", + "H_noncon.solve(strategy='brute_force_QUSO', ref_state=psi)\n", "H_noncon.energy" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 18, "id": "e936e9c0", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/independent_op.py:245: UserWarning: The stabilizers ['IIIIIIZIII'] were assigned zero values - bad reference state.\n", + " warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.')\n", + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/noncontextual_op.py:505: QUBOVertWarning: The input problem has degree <= 2; consider using the ``qubovert.sim.anneal_qubo`` or ``qubovert.sim.anneal_quso`` functions, which are significantly faster than this function because they take advantage of the low degree.\n", + " puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=self.num_anneals)\n", + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/noncontextual_op.py:505: QUBOVertWarning: The input problem has degree <= 2; consider using the ``qubovert.sim.anneal_qubo`` or ``qubovert.sim.anneal_quso`` functions, which are significantly faster than this function because they take advantage of the low degree.\n", + " puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=self.num_anneals)\n", + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/noncontextual_op.py:505: QUBOVertWarning: The input problem has degree <= 2; consider using the ``qubovert.sim.anneal_qubo`` or ``qubovert.sim.anneal_quso`` functions, which are significantly faster than this function because they take advantage of the low degree.\n", + " puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=self.num_anneals)\n", + "/home/tweaving/anaconda3/envs/symmer/lib/python3.8/site-packages/symmer/symplectic/noncontextual_op.py:505: QUBOVertWarning: The input problem has degree <= 2; consider using the ``qubovert.sim.anneal_qubo`` or ``qubovert.sim.anneal_quso`` functions, which are significantly faster than this function because they take advantage of the low degree.\n", + " puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=self.num_anneals)\n" + ] + }, { "data": { "text/plain": [ - "-24.148988598851812" + "-24.14898859885364" ] }, - "execution_count": 13, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='annealing_PUSO', num_anneals=100)\n", + "H_noncon.solve(strategy='annealing_PUSO', num_anneals=100, ref_state=psi)\n", "H_noncon.energy" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "id": "629242b0", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0.965+0.262j |1111001000>\n" + ] + }, { "data": { "text/plain": [ - "-24.14898859885365" + "1.4992451724538114e-12" ] }, - "execution_count": 14, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", - "H_noncon.solve(strategy='annealing_QUSO', num_anneals=100)\n", - "H_noncon.energy" + "ref = psi.cleanup(zero_threshold=1e-4).sort()[0].normalize\n", + "print(ref)\n", + "\n", + "H_noncon.solve(strategy='annealing_QUSO', num_anneals=10, ref_state=ref)\n", + "H_noncon.energy - gs_energy" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "b9df357c", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + " 1 IIIIIIIIIZ \n", + " 1 IIIIIIIIZI \n", + " 1 IIIIIIIZII \n", + "-1 IIIIIIZIII \n", + " 1 IIIIIZIIII \n", + " 1 IIIIZIIIII \n", + "-1 IIZIIIIIII \n", + " 1 IZIZIIIIII \n", + "-1 ZIIIIIIIII" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "H_noncon.symmetry_generators.update_sector(ref)\n", + "H_noncon.symmetry_generators" + ] }, { "cell_type": "code", @@ -533,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 21, "id": "9aeb12c3", "metadata": {}, "outputs": [], @@ -545,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 22, "id": "abcdaa08", "metadata": {}, "outputs": [], @@ -557,7 +751,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 23, "id": "bf850a88", "metadata": {}, "outputs": [], @@ -569,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 24, "id": "9f9802a5", "metadata": {}, "outputs": [], @@ -612,7 +806,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.13" }, "vscode": { "interpreter": { diff --git a/notebooks/2. Applications/2.4 H3+ ground state failure example.ipynb b/notebooks/2. Applications/2.4 H3+ ground state failure example.ipynb index d23f2e75..c525a63c 100644 --- a/notebooks/2. Applications/2.4 H3+ ground state failure example.ipynb +++ b/notebooks/2. Applications/2.4 H3+ ground state failure example.ipynb @@ -31,11 +31,11 @@ "FCI converged? True\n", "FCI converged? True\n", "\n", - "HF energy: -1.2468600063384454\n", - "MP2 energy: -1.2658602663569558\n", - "CCSD energy: -1.2741446169583135\n", - "CISD energy: -1.274144467123986\n", - "FCI energy: -1.2741444671239879\n", + "HF energy: -1.2468600063384467\n", + "MP2 energy: -1.2658602663569571\n", + "CCSD energy: -1.2741446169583148\n", + "CISD energy: -1.2741444671239874\n", + "FCI energy: -1.2741444671239888\n", "\n", "\n", "Number of qubits: 6\n" @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "id": "55e0ea78", "metadata": {}, "outputs": [ @@ -74,7 +74,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Least eigenvalue = -1.3507306438907667 | FCI error = -0.07658617676677881\n" + "Least eigenvalue = -1.3507306438907656 | FCI error = -0.07658617676677681\n" ] } ], @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "id": "15aef568", "metadata": {}, "outputs": [ @@ -104,27 +104,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Eigenvector with eigenvalue -1.3507306438907667:\n", + "Eigenvector with eigenvalue -1.3507306438907656:\n", "\n", - "-0.000-0.000j |000111> +\n", - " 0.083+0.086j |001011> +\n", - " 0.000+0.000j |001101> +\n", - " 0.000-0.000j |001110> +\n", - "-0.000-0.000j |010011> +\n", - "-0.000-0.000j |010110> +\n", - " 0.000+0.000j |011001> +\n", - " 0.000+0.000j |011100> +\n", - " 0.100+0.104j |100011> +\n", - " 0.000+0.000j |100101> +\n", - "-0.000+0.000j |100110> +\n", - " 0.000-0.000j |101001> +\n", - "-0.100-0.104j |101100> +\n", + " 0.000-0.000j |000111> +\n", + " 0.063+0.102j |001011> +\n", + "-0.000+0.000j |001101> +\n", + " 0.000+0.000j |001110> +\n", + " 0.000-0.000j |010011> +\n", + " 0.000-0.000j |010110> +\n", + "-0.000+0.000j |011001> +\n", + "-0.000+0.000j |011100> +\n", + " 0.076+0.123j |100011> +\n", + "-0.000-0.000j |100110> +\n", + " 0.000+0.000j |101001> +\n", + "-0.076-0.123j |101100> +\n", " 0.000+0.000j |110000> +\n", - "-0.000-0.000j |110001> +\n", - "-0.000+0.000j |110010> +\n", - " 0.000+0.000j |110100> +\n", - "-0.000-0.000j |110101> +\n", - "-0.676-0.698j |111000>\n" + " 0.000-0.000j |110001> +\n", + "-0.000-0.000j |110010> +\n", + "-0.000+0.000j |110100> +\n", + "-0.508-0.828j |111000>\n" ] } ], @@ -143,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "id": "5265519a", "metadata": {}, "outputs": [ @@ -151,16 +149,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "Least eigenvalue = -1.2741444671240014 | FCI error = -1.354472090042691e-14\n", + "Least eigenvalue = -1.2741444671239903 | FCI error = -1.5543122344752192e-15\n", "\n", - "Eigenvector with eigenvalue -1.2741444671240014:\n", + "Eigenvector with eigenvalue -1.2741444671239903:\n", "\n", - " 0.094-0.006j |000011> +\n", - " 0.094-0.006j |001100> +\n", - " 0.000-0.000j |011000> +\n", - " 0.000-0.000j |100100> +\n", - "-0.989+0.065j |110000> +\n", - " 0.000+0.000j |111000>\n" + " 0.082+0.045j |000011> +\n", + " 0.082+0.045j |001100> +\n", + " 0.000+0.000j |011000> +\n", + " 0.000+0.000j |100100> +\n", + "-0.000-0.000j |101010> +\n", + "-0.867-0.479j |110000> +\n", + "-0.000+0.000j |111010>\n" ] } ], diff --git a/symmer/projection/base.py b/symmer/projection/base.py index 90e293e8..b70c0bf4 100644 --- a/symmer/projection/base.py +++ b/symmer/projection/base.py @@ -1,6 +1,8 @@ import numpy as np from typing import List, Tuple, Union -from symmer.symplectic import PauliwordOp, StabilizerOp +from symmer.symplectic import PauliwordOp, IndependentOp, QuantumState +from symmer.evolution import trotter, Had +from functools import reduce class S3_projection: """ Base class for enabling qubit reduction techniques derived from @@ -22,7 +24,7 @@ class S3_projection: rotated_flag = False def __init__(self, - stabilizers: StabilizerOp + stabilizers: IndependentOp ) -> None: """ - stabilizers @@ -102,4 +104,32 @@ def perform_projection(self, self.rotated_flag = True # ...and finally perform the stabilizer subspace projection - return self._perform_projection(operator=op_rotated) \ No newline at end of file + return self._perform_projection(operator=op_rotated) + + def project_state(self, state: QuantumState) -> QuantumState: + """ Project a state into the stabilizer subspace + """ + transformation_list = [] + # Hadamards where rotated onto Pauli X operators + transformation_list += [ + Had(self.stabilizers.n_qubits, i) for i in np.where( + np.sum( + self.stabilizers.rotate_onto_single_qubit_paulis().X_block & + ~self.stabilizers.rotate_onto_single_qubit_paulis().Z_block, + axis=0 + ) + )[0] + ] + # Projections onto the stabilizer subspace + #transformation_list += list(map(lambda x:(x**2 + x)*.5,self.stabilizers.rotate_onto_single_qubit_paulis())) + # Rotations mapping stabilizers onto single-qubit Pauli operators + transformation_list += list(map(lambda s:trotter(s[0]*(np.pi/4*1j)), self.stabilizers.stabilizer_rotations)) + # Product over the transformation list yields final transformation operator + transformation = reduce(lambda x,y:x*y, transformation_list) + # apply transformation to the reference state + transformed_state = transformation * state + # drop stabilized qubit positions and sum over potential duplicates + return QuantumState( + transformed_state.state_matrix[:, self.free_qubit_indices], + transformed_state.state_op.coeff_vec + ).cleanup(zero_threshold=1e-12) \ No newline at end of file diff --git a/symmer/projection/contextual_subspace.py b/symmer/projection/contextual_subspace.py index 733c2930..c3168eff 100644 --- a/symmer/projection/contextual_subspace.py +++ b/symmer/projection/contextual_subspace.py @@ -1,5 +1,5 @@ import numpy as np -from symmer.symplectic import PauliwordOp, StabilizerOp, NoncontextualOp +from symmer.symplectic import PauliwordOp, IndependentOp, NoncontextualOp from symmer.projection.utils import ( update_eigenvalues, StabilizerIdentification, ObservableBiasing, stabilizer_walk ) @@ -28,6 +28,7 @@ def __init__(self, noncontextual_strategy: str = 'diag', noncontextual_solver: str = 'brute_force', num_anneals:Optional[int] = 1000, + discrete_optimization_order = 'first', unitary_partitioning_method: str = 'LCU', reference_state: np.array = None, noncontextual_operator: NoncontextualOp = None, @@ -41,6 +42,7 @@ def __init__(self, self.nc_strategy = extract_noncon_strat[0] self.noncontextual_solver = noncontextual_solver self.num_anneals = num_anneals + self.discrete_optimization_order = discrete_optimization_order if self.nc_strategy=='StabilizeFirst': self.stabilize_first_method = extract_noncon_strat[1] @@ -64,14 +66,19 @@ def _noncontextual_update(self): self.contextual_operator = self.operator - self.noncontextual_operator if self.contextual_operator.n_terms == 0: raise ValueError('The Hamiltonian is noncontextual, the contextual subspace is empty.') - self.noncontextual_operator.solve(strategy=self.noncontextual_solver, ref_state=self.ref_state, num_anneals=self.num_anneals) + self.noncontextual_operator.solve( + strategy=self.noncontextual_solver, + ref_state=self.ref_state, + num_anneals=self.num_anneals, + discrete_optimization_order=self.discrete_optimization_order + ) self.n_cliques = self.noncontextual_operator.n_cliques - def manual_stabilizers(self, S: Union[List[str], StabilizerOp]) -> None: + def manual_stabilizers(self, S: Union[List[str], IndependentOp]) -> None: """ Specify a set of operators to enforce manually """ if isinstance(S, list): - S = StabilizerOp.from_list(S) + S = IndependentOp.from_list(S) self.n_qubits_in_subspace = self.operator.n_qubits - S.n_terms self.stabilizers = S @@ -141,7 +148,7 @@ def update_stabilizers(self, self.stabilizers += extra_stabilizer # find symmetry generators given a sum of anticommuting operators - symgen = StabilizerOp.symmetry_basis(sum_clique_reps+self.stabilizers) + symgen = IndependentOp.symmetry_generators(sum_clique_reps+self.stabilizers) # this forms a noncontextual generating set under the Jordan product noncon_basis = symgen*1 + sum_clique_reps self.noncontextual_operator = NoncontextualOp.from_hamiltonian(strategy='basis', H=self.operator, basis=noncon_basis) @@ -151,7 +158,7 @@ def update_stabilizers(self, def _greedy_stabilizer_search(self, n_qubits: int, depth: int=2 - ) -> StabilizerOp: + ) -> IndependentOp: """ """ raise NotImplementedError @@ -159,7 +166,7 @@ def _greedy_stabilizer_search(self, def _aux_operator_preserving_stabilizer_search(self, n_qubits: int, aux_operator: PauliwordOp - ) -> StabilizerOp: + ) -> IndependentOp: """ Choose stabilizers that preserve some auxiliary operator. This could be an Ansatz operator such as UCCSD, for example. """ @@ -170,7 +177,7 @@ def _aux_operator_preserving_stabilizer_search(self, aux_operator = self.contextual_operator SI = StabilizerIdentification(aux_operator) - S = SI.symmetry_basis_by_subspace_dimension(n_qubits) + S = SI.symmetry_generators_by_subspace_dimension(n_qubits) return S @@ -178,7 +185,7 @@ def _HOMO_LUMO_biasing(self, n_qubits: int, HF_array: np.array, weighting_operator: PauliwordOp = None - ) -> StabilizerOp: + ) -> IndependentOp: """ Bias the Hamiltonian with respect to the HOMO-LUMO gap and preserve terms in the resulting operator as above. """ @@ -197,7 +204,7 @@ def _HOMO_LUMO_biasing(self, def _random_stabilizers(self, n_qubits: int - ) -> StabilizerOp: + ) -> IndependentOp: """ Generate a random set of stabilizers """ # TODO better approach that does not rely on this *potentially infinite* while loop! @@ -210,7 +217,7 @@ def _random_stabilizers(self, diagonal=True ) S.coeff_vec[:] = 1 - S = StabilizerOp.from_PauliwordOp(S) + S = IndependentOp.from_PauliwordOp(S) found_stabilizers = True except: pass @@ -218,7 +225,7 @@ def _random_stabilizers(self, return S def _get_clique_representatives(self, - symmetry_terms: StabilizerOp = None, + symmetry_terms: IndependentOp = None, n_cliques: int = 2, clique_reps: List[PauliwordOp] = [] ) -> PauliwordOp: @@ -282,7 +289,7 @@ def _prepare_stabilizers(self) -> None: # consistent with the noncontextual ground state configuration - this is # G U {RARdag} in the original CS-VQE notation. augmented_basis = ( - StabilizerOp.from_PauliwordOp(self.mapped_clique_rep) + + IndependentOp.from_PauliwordOp(self.mapped_clique_rep) + self.noncontextual_operator.symmetry_generators ) # given this new basis, we reconstruct the given stabilizers to identify diff --git a/symmer/projection/qubit_tapering.py b/symmer/projection/qubit_tapering.py index f005fb40..898637ef 100644 --- a/symmer/projection/qubit_tapering.py +++ b/symmer/projection/qubit_tapering.py @@ -4,7 +4,7 @@ from typing import List, Union from cached_property import cached_property from symmer.projection import S3_projection -from symmer.symplectic import PauliwordOp, StabilizerOp, QuantumState +from symmer.symplectic import PauliwordOp, IndependentOp, QuantumState class QubitTapering(S3_projection): """ Class for performing qubit tapering as per https://arxiv.org/abs/1701.08213. @@ -33,10 +33,10 @@ def __init__(self, super().__init__(self.symmetry_generators) @cached_property - def symmetry_generators(self) -> StabilizerOp: + def symmetry_generators(self) -> IndependentOp: """ Find an independent basis for the input operator symmetry """ - stabilizers = StabilizerOp.symmetry_basis(self.operator) + stabilizers = IndependentOp.symmetry_generators(self.operator) stabilizers.target_sqp = self.target_sqp return stabilizers @@ -55,6 +55,11 @@ def taper_it(self, one wishes to restrict to the same stabilizer subspace as the Hamiltonian for use in VQE, for example. """ + if ref_state is not None: + if not isinstance(ref_state, QuantumState): + ref_state = QuantumState(ref_state) + assert ref_state._is_normalized(), 'Reference state is not normalized.' + if self.symmetry_generators != self.stabilizers: # need to update stabilizers in parent class if user decides to fix less stabilizers (e.g. doesn't want # to taper all stabilizers). Could be useful in error mitigation strategies @@ -74,11 +79,8 @@ def taper_it(self, sector=sector ) - # if a reference state was supplied, taper it by dropping any - # qubit positions fixed during the perform_projection method - if ref_state is not None and not isinstance(ref_state, QuantumState): - # TODO general implementation to project QuantumState into reduced space - ref_state = np.array(ref_state) - self.tapered_ref_state = ref_state[self.free_qubit_indices] + # if a reference state was supplied, project it into the stabilizer subspace + if ref_state is not None: + self.tapered_ref_state = self.project_state(ref_state) - return tapered_operator \ No newline at end of file + return tapered_operator diff --git a/symmer/projection/utils.py b/symmer/projection/utils.py index 4bb5ff9c..fb003ccb 100644 --- a/symmer/projection/utils.py +++ b/symmer/projection/utils.py @@ -1,7 +1,7 @@ import numpy as np from copy import deepcopy from scipy.optimize import differential_evolution -from symmer.symplectic import PauliwordOp, StabilizerOp +from symmer.symplectic import PauliwordOp, IndependentOp def norm(vector: np.array) -> float: """ @@ -19,7 +19,7 @@ def lp_norm(vector: np.array, p:int=2) -> float: def basis_score( weighting_operator: PauliwordOp, - basis: StabilizerOp, + basis: IndependentOp, p:int=1 ) -> float: """ Evaluate the score of an input basis according @@ -39,8 +39,8 @@ def basis_score( ) def update_eigenvalues( - basis: StabilizerOp, - stabilizers: StabilizerOp + basis: IndependentOp, + stabilizers: IndependentOp ) -> None: """ Update the +/-1 eigenvalue assigned to the input stabilizer according to the noncontextual ground state configuration @@ -76,16 +76,16 @@ def build_basis_weighting_operator(self): self.qubit_positions = np.arange(self.weighting_operator.n_qubits) self.term_region = [0,self.basis_weighting.n_terms] - def symmetry_basis_by_term_significance(self, n_preserved): + def symmetry_generators_by_term_significance(self, n_preserved): """ Set the number of terms to be preserved in order of coefficient magnitude Then generate the largest symmetry basis that preserves them """ preserve = self.basis_weighting[:n_preserved] - stabilizers = StabilizerOp.symmetry_basis(preserve, commuting_override=True) + stabilizers = IndependentOp.symmetry_generators(preserve, commuting_override=True) mask_diag = np.where(~np.any(stabilizers.X_block, axis=1))[0] - return StabilizerOp(stabilizers.symp_matrix[mask_diag], stabilizers.coeff_vec[mask_diag]) + return IndependentOp(stabilizers.symp_matrix[mask_diag], stabilizers.coeff_vec[mask_diag]) - def symmetry_basis_by_subspace_dimension(self, n_sim_qubits, region=None): + def symmetry_generators_by_subspace_dimension(self, n_sim_qubits, region=None): """ """ if region is None: @@ -94,7 +94,7 @@ def symmetry_basis_by_subspace_dimension(self, n_sim_qubits, region=None): assert(region[1]-region[0]>1), 'Search region collapsed without identifying any stabilizers' n_terms = sum(region)//2 - stabilizers = self.symmetry_basis_by_term_significance(n_terms) + stabilizers = self.symmetry_generators_by_term_significance(n_terms) current_n_qubits = self.basis_weighting.n_qubits - stabilizers.n_terms sign = np.sign(current_n_qubits - n_sim_qubits) @@ -107,7 +107,7 @@ def symmetry_basis_by_subspace_dimension(self, n_sim_qubits, region=None): else: region[0] = n_terms - return self.symmetry_basis_by_subspace_dimension(n_sim_qubits, region=region) + return self.symmetry_generators_by_subspace_dimension(n_sim_qubits, region=region) class ObservableBiasing: """ Class for re-weighting Hamiltonian terms based on some criteria, such as HOMO-LUMO bias @@ -172,7 +172,7 @@ def stabilizer_walk( biasing_operator: ObservableBiasing, weighting_operator: PauliwordOp = None, print_info: bool = False, - ) -> StabilizerOp: + ) -> IndependentOp: """ """ if weighting_operator is None: @@ -182,7 +182,7 @@ def get_stabilizers(x): biasing_operator.HOMO_bias,biasing_operator.LUMO_bias = x biased_op = biasing_operator.HOMO_LUMO_biased_operator() stabilizers = StabilizerIdentification(biased_op) - S = stabilizers.symmetry_basis_by_subspace_dimension(n_sim_qubits) + S = stabilizers.symmetry_generators_by_subspace_dimension(n_sim_qubits) return(S) def objective(x): diff --git a/symmer/symplectic/__init__.py b/symmer/symplectic/__init__.py index e13269f1..24e0963b 100644 --- a/symmer/symplectic/__init__.py +++ b/symmer/symplectic/__init__.py @@ -3,7 +3,7 @@ from .base import * from .ansatz_op import AnsatzOp from .observable_op import ObservableGraph, ObservableOp -from .stabilizer_op import StabilizerOp +from .independent_op import IndependentOp from .anticommuting_op import AntiCommutingOp from .noncontextual_op import NoncontextualOp from .majorana_op import * \ No newline at end of file diff --git a/symmer/symplectic/anticommuting_op.py b/symmer/symplectic/anticommuting_op.py index e44b616c..e22354e8 100644 --- a/symmer/symplectic/anticommuting_op.py +++ b/symmer/symplectic/anticommuting_op.py @@ -1,4 +1,4 @@ -from symmer.symplectic import PauliwordOp +from symmer.symplectic import PauliwordOp, IndependentOp import numpy as np from typing import Dict, List, Optional, Tuple, Union import warnings @@ -38,7 +38,7 @@ def from_dictionary(cls, @classmethod def from_PauliwordOp(cls, PwordOp: PauliwordOp - ) -> "StabilizerOp": + ) -> IndependentOp: return cls(PwordOp.symp_matrix, PwordOp.coeff_vec) def lexicographical_sort(self) -> None: diff --git a/symmer/symplectic/base.py b/symmer/symplectic/base.py index 1dae1210..b1bb74d5 100644 --- a/symmer/symplectic/base.py +++ b/symmer/symplectic/base.py @@ -344,7 +344,7 @@ def basis_reconstruction(self, reduced = cref_binary(basis_op_stack) mask_successfully_reconstructed = np.all(~reduced[dim:,dim:], axis=1) op_reconstruction = reduced[dim:,:dim] - return op_reconstruction, mask_successfully_reconstructed + return op_reconstruction.astype(int), mask_successfully_reconstructed @cached_property def Y_count(self) -> np.array: @@ -1270,7 +1270,7 @@ def sort(self, by='decreasing', key='magnitude') -> "QuantumState": return QuantumState(self.state_matrix[sort_order], self.state_op.coeff_vec[sort_order]) def sectors_present(self, symmetry): - """ return the sectors present within the QuantumState w.r.t. a StabilizerOp + """ return the sectors present within the QuantumState w.r.t. a IndependentOp """ symmetry_copy = symmetry.copy() symmetry_copy.coeff_vec = np.ones(symmetry.n_terms) diff --git a/symmer/symplectic/stabilizer_op.py b/symmer/symplectic/independent_op.py similarity index 91% rename from symmer/symplectic/stabilizer_op.py rename to symmer/symplectic/independent_op.py index 1a78ef3c..17b593fa 100644 --- a/symmer/symplectic/stabilizer_op.py +++ b/symmer/symplectic/independent_op.py @@ -3,9 +3,9 @@ import warnings import multiprocessing as mp from symmer.symplectic.utils import _rref_binary, _cref_binary -from symmer.symplectic import PauliwordOp, QuantumState, symplectic_to_string +from symmer.symplectic import PauliwordOp, QuantumState, symplectic_to_string, single_term_expval -class StabilizerOp(PauliwordOp): +class IndependentOp(PauliwordOp): """ Special case of PauliwordOp, in which the operator terms must by algebraically independent, with all coefficients set to integers +/-1. @@ -39,31 +39,31 @@ def __init__(self, @classmethod def from_PauliwordOp(cls, PwordOp: PauliwordOp - ) -> "StabilizerOp": + ) -> "IndependentOp": return cls(PwordOp.symp_matrix, PwordOp.coeff_vec) @classmethod def from_list(cls, pauli_terms :List[str], coeff_vec: List[complex] = None - ) -> "StabilizerOp": + ) -> "IndependentOp": PwordOp = super().from_list(pauli_terms, coeff_vec) return cls.from_PauliwordOp(PwordOp) @classmethod def from_dictionary(cls, operator_dict: Dict[str, complex] - ) -> "StabilizerOp": + ) -> "IndependentOp": """ Initialize a PauliwordOp from its dictionary representation {pauli:coeff, ...} """ PwordOp = super().from_dictionary(operator_dict) return cls.from_PauliwordOp(PwordOp) @classmethod - def symmetry_basis(cls, + def symmetry_generators(cls, PwordOp: PauliwordOp, commuting_override:bool=False, - ) -> "StabilizerOp": + ) -> "IndependentOp": """ Identify a symmetry basis for the supplied Pauli operator with symplectic representation M = [ X | Z ]. We perform columnwise Gaussian elimination to yield the matrix @@ -106,7 +106,7 @@ def symmetry_basis(cls, def _check_stab(self) -> None: """ Checks the stabilizer coefficients are +/-1 """ - assert(set(self.coeff_vec).issubset({+1,-1})), f'Stabilizer coefficients not +/-1: {self.coeff_vec}' + assert(set(self.coeff_vec).issubset({0, +1,-1})), f'Stabilizer coefficients not +/-1: {self.coeff_vec}' def _check_independent(self) -> None: """ Check the supplied stabilizers are algebraically independent @@ -118,11 +118,11 @@ def _check_independent(self) -> None: def __str__(self) -> str: """ - Defines the print behaviour of StabilizerOp - + Defines the print behaviour of IndependentOp - returns the operator in an easily readable format Returns: - out_string (str): human-readable StabilizerOp string + out_string (str): human-readable IndependentOp string """ out_string = '' for pauli_vec, coeff in zip(self.symp_matrix, self.coeff_vec): @@ -133,33 +133,33 @@ def __str__(self) -> str: def __repr__(self) -> str: return str(self) - def __add__(self, Pword: "StabilizerOp") -> "StabilizerOp": + def __add__(self, Pword: "IndependentOp") -> "IndependentOp": summed = super().__add__(Pword) return self.from_PauliwordOp(summed) def _rotate_by_single_Pword(self, Pword: "PauliwordOp", angle: float = None - ) -> "StabilizerOp": + ) -> "IndependentOp": rotated_stabilizers = super()._rotate_by_single_Pword(Pword, angle) return self.from_PauliwordOp(rotated_stabilizers) def perform_rotations(self, rotations: List[Tuple["PauliwordOp", float]] ) -> "PauliwordOp": - """ Overwrite PauliwordOp.perform_rotations to return a StabilizerOp + """ Overwrite PauliwordOp.perform_rotations to return a IndependentOp """ rotated_stabilizers = super().perform_rotations(rotations) return self.from_PauliwordOp(rotated_stabilizers) - def _recursive_rotations(self, basis: "StabilizerOp") -> None: - """ Recursively rotate terms of the StabilizerOp to single-qubit Pauli operators. + def _recursive_rotations(self, basis: "IndependentOp") -> None: + """ Recursively rotate terms of the IndependentOp to single-qubit Pauli operators. This is only possible when the basis is mutually commuting! Else, such rotations do not exist (there is a check for this in generate_stabilizer_rotations, that wraps this method). """ # drop any term(s) that are single-qubit Pauli operators non_sqp = np.where(np.sum(basis.symp_matrix, axis=1)!=1) - basis_non_sqp = StabilizerOp(basis.symp_matrix[non_sqp], basis.coeff_vec[non_sqp]) + basis_non_sqp = IndependentOp(basis.symp_matrix[non_sqp], basis.coeff_vec[non_sqp]) sqp_indices = np.where((basis - basis_non_sqp).symp_matrix)[1]%self.n_qubits self.used_indices += np.append(sqp_indices, sqp_indices+self.n_qubits).tolist() @@ -188,7 +188,7 @@ def _recursive_rotations(self, basis: "StabilizerOp") -> None: return self._recursive_rotations(rotated_basis) def generate_stabilizer_rotations(self) -> None: - """ Find the full list of pi/2 Pauli rotations (Clifford operations) mapping this StabilizerOp + """ Find the full list of pi/2 Pauli rotations (Clifford operations) mapping this IndependentOp to single-qubit Pauli operators, for use in stabilizer subsapce projection schemes. """ assert(self.n_terms <= self.n_qubits), 'Too many terms in basis to reduce to single-qubit Paulis' @@ -244,7 +244,7 @@ def update_sector(self, S_zero = list(S_zero.to_dictionary.keys()) warnings.warn(f'The stabilizers {S_zero} were assigned zero values - bad reference state.') - def rotate_onto_single_qubit_paulis(self) -> "StabilizerOp": + def rotate_onto_single_qubit_paulis(self) -> "IndependentOp": """ Returns the rotated single-qubit Pauli stabilizers """ self.generate_stabilizer_rotations() @@ -255,8 +255,8 @@ def rotate_onto_single_qubit_paulis(self) -> "StabilizerOp": def __getitem__(self, key: Union[slice, int] - ) -> "StabilizerOp": - """ Makes the StabilizerOp subscriptable - returns a StabilizerOp constructed + ) -> "IndependentOp": + """ Makes the IndependentOp subscriptable - returns a IndependentOp constructed from the indexed row and coefficient from the symplectic matrix """ if isinstance(key, int): @@ -279,7 +279,7 @@ def __getitem__(self, symp_items = self.symp_matrix[mask] coeff_items = self.coeff_vec[mask] - return StabilizerOp(symp_items, coeff_items) + return IndependentOp(symp_items, coeff_items) def __iter__(self): """ Makes a PauliwordOp instance iterable @@ -290,7 +290,7 @@ def __iter__(self): def assign_value(S: PauliwordOp, ref_state: QuantumState, threshold: float) -> int: """ Measure expectation value of stabilizer on input reference state """ - expval = S.expval(ref_state) + expval = single_term_expval(S, ref_state) # if this expval exceeds some predefined threshold then assign the corresponding # ±1 eigenvalue. Otherwise, return 0 as insufficient evidence to fix the value. if abs(expval) > threshold: diff --git a/symmer/symplectic/noncontextual_op.py b/symmer/symplectic/noncontextual_op.py index 6153df6f..8d33c7e0 100644 --- a/symmer/symplectic/noncontextual_op.py +++ b/symmer/symplectic/noncontextual_op.py @@ -1,10 +1,10 @@ import numpy as np from time import time from functools import reduce -from typing import Optional +from typing import Optional, Union, Tuple import multiprocessing as mp from scipy.optimize import differential_evolution, shgo -from symmer.symplectic import PauliwordOp, StabilizerOp, AntiCommutingOp, QuantumState +from symmer.symplectic import PauliwordOp, IndependentOp, AntiCommutingOp, QuantumState from symmer.symplectic.utils import unit_n_sphere_cartesian_coords import itertools import qubovert as qv @@ -172,13 +172,13 @@ def _from_basis_noncontextual_op(cls, H: PauliwordOp, basis: PauliwordOp): noncontextual_terms_mask = np.any(np.array(aug_basis_reconstruction_masks), axis=0) return cls.from_PauliwordOp(H[noncontextual_terms_mask]) - def noncontextual_basis(self) -> StabilizerOp: + def noncontextual_basis(self) -> IndependentOp: """ Find an independent *generating set* for the noncontextual symmetry * technically not a basis! """ self.decomposed = {} # identify a basis of universally commuting operators - symmetry_generators = StabilizerOp.symmetry_basis(self) + symmetry_generators = IndependentOp.symmetry_generators(self) # try to reconstruct the noncontextual operator in this basis # not all terms can be decomposed in this basis, so check which can reconstructed_indices, succesfully_reconstructed = self.basis_reconstruction(symmetry_generators) @@ -216,7 +216,7 @@ def noncontextual_reconstruction(self): """ if self.n_cliques > 0: reconstruction_ind_matrix = np.zeros( - [self.n_terms, self.symmetry_generators.n_terms + self.n_cliques] + [self.n_terms, self.symmetry_generators.n_terms + self.n_cliques], dtype=int ) # Cannot simultaneously know eigenvalues of cliques so zero rows with more than one clique # therefore, we decompose the noncontextual terms in the respective independent bases @@ -226,7 +226,7 @@ def noncontextual_reconstruction(self): np.arange(self.symmetry_generators.n_terms), clique_column_index ) GuCi_symp = np.vstack([self.symmetry_generators.symp_matrix, Ci.symp_matrix]) - GuCi = StabilizerOp(GuCi_symp) + GuCi = IndependentOp(GuCi_symp) reconstructed, row_mask_inds = self.basis_reconstruction(GuCi) row_col_mask = np.ix_(row_mask_inds, col_mask_inds) reconstruction_ind_matrix[row_col_mask] = reconstructed[row_mask_inds] @@ -266,10 +266,10 @@ def noncontextual_objective_function(self, ) -> float: """ The classical objective function that encodes the noncontextual energies """ - nu = np.asarray(nu) # must be an array! + nu = np.asarray(nu, dtype=int) # must be an array! G_prod = (-1)**np.count_nonzero(np.logical_and(self.G_indices==1, nu == -1), axis=1) r_part = np.sum(self.r_indices*r, axis=1) - r_part[np.where(r_part==0)]=1 + r_part[~np.any(self.r_indices, axis=1)]=1 return np.sum(self.coeff_vec*G_prod*r_part*self.pauli_mult_signs).real def _convex_problem(self, nu): @@ -294,62 +294,114 @@ def _convex_problem(self, nu): return optimized_energy, r_optimal - def _energy_via_ref_state(self, ref_state): - """ Given a reference state such as Hartree-Fock, fix the symmetry generator eigenvalues - Currently only implemented for single reference basis states in the Z basis - """ - # update the symmetry generator G coefficients w.r.t. the reference state - self.symmetry_generators.update_sector(ref_state) - ev_assignment = self.symmetry_generators.coeff_vec - fixed_indices = np.where(ev_assignment!=0)[0] - fixed_eigvals = ev_assignment[fixed_indices] - # any remaining unfixed symmetry generators are solved via brute force: - return self._energy_via_brute_force(fixed_indices, fixed_eigvals) - - def _energy_via_relaxation(self): - """ Relax the binary value assignment of symmetry generators to continuous variables - """ - # optimize discrete value assignments nu by relaxation to continuous variables - nu_bounds = [(0, np.pi)]*self.symmetry_generators.n_terms - optimizer_output = shgo(func=lambda angles:self._convex_problem(np.cos(angles))[0], bounds=nu_bounds) - # if optimization was successful the optimal angles should consist of 0 and pi - fix_nu = np.sign(np.array(np.cos(optimizer_output['x']))).astype(int) - self.symmetry_generators.coeff_vec = fix_nu - energy, r_optimal = self._convex_problem(fix_nu) - return energy, fix_nu, r_optimal + def solve(self, + strategy: str = 'brute_force', + ref_state: np.array = None, + num_anneals:int = 1_000, + discrete_optimization_order = 'first' + ) -> None: + """ Minimize the classical objective function, yielding the noncontextual ground state - def _energy_via_brute_force(self, fixed_indices=None, fixed_eigvals=None): - """ Does what is says on the tin! Try every single eigenvalue assignment in parallel - and return the minimizing noncontextual configuration. This scales exponentially in - the number of qubits. + Note most QUSO functions/methods work faster than their PUSO counterparts. """ + + if ref_state is not None: + # update the symmetry generator G coefficients w.r.t. the reference state + self.symmetry_generators.update_sector(ref_state) + ev_assignment = self.symmetry_generators.coeff_vec + fixed_ev_mask = ev_assignment!=0 + fixed_eigvals = (ev_assignment[fixed_ev_mask]).astype(int) + NC_solver = NoncontextualSolver(self, fixed_ev_mask, fixed_eigvals) + # any remaining unfixed symmetry generators are solved via other means: + else: + NC_solver = NoncontextualSolver(self) - # allow certain indices to be fixed while performing a brute force search over those remaining - if fixed_indices is None: - fixed_indices = np.array([], dtype=int) - fixed_eigvals = np.array([], dtype=int) + NC_solver.num_anneals = num_anneals + NC_solver.discrete_optimization_order = discrete_optimization_order + + if strategy=='brute_force': + self.energy, nu, r = NC_solver.energy_via_brute_force() + + elif strategy=='binary_relaxation': + self.energy, nu, r = NC_solver.energy_via_relaxation() + else: - assert fixed_eigvals is not None, 'Must specify the eigenvalues to fix.' - assert len(fixed_indices) == len(fixed_eigvals), 'Length of eigvals does not match the fixed index list.' - fixed_indices = np.asarray(fixed_indices, dtype=int) - fixed_eigvals = np.asarray(fixed_eigvals, dtype=int) + #### qubovert strategies below this point #### + # PUSO = Polynomial unconstrained spin Optimization + # QUSO: Quadratic Unconstrained Spin Optimization + if strategy == 'brute_force_PUSO': + NC_solver.method = 'brute_force' + NC_solver.x = 'P' + elif strategy == 'brute_force_QUSO': + NC_solver.method = 'brute_force' + NC_solver.x = 'Q' + elif strategy == 'annealing_PUSO': + NC_solver.method = 'annealing' + NC_solver.x = 'P' + elif strategy == 'annealing_QUSO': + NC_solver.method = 'annealing' + NC_solver.x = 'Q' + else: + raise ValueError(f'Unknown optimization strategy: {strategy}') + + self.energy, nu, r = NC_solver.energy_xUSO() - nu = np.ones(self.symmetry_generators.n_terms, dtype=int) - nu[fixed_indices] = fixed_eigvals - unfixed_indices = np.setdiff1d(np.arange(self.symmetry_generators.n_terms),fixed_indices) + # optimize the clique operator coefficients + self.symmetry_generators.coeff_vec = nu.astype(int) + if r is not None: + self.clique_operator.coeff_vec = r + +############################################################################### +################### NONCONTEXTUAL SOLVERS BELOW ############################### +############################################################################### + +class NoncontextualSolver: + + # xUSO settings + method:str = 'brute_force' + x:str = 'P' + num_anneals:int = 1_000, + discrete_optimization_order:str = 'first' + reoptimize_r_vec:bool = False + _nu = None + + def __init__( + self, + NC_op: NoncontextualOp, + fixed_ev_mask: np.array = None, + fixed_eigvals: np.array = None + ) -> None: + self.NC_op = NC_op + + if fixed_ev_mask is not None: + assert fixed_eigvals is not None, 'Must specify the fixed eigenvalues' + assert np.sum(fixed_ev_mask) == len(fixed_eigvals), 'Number of non-zero elements in mask does not match the number of fixed eigenvalues' + self.fixed_ev_mask = fixed_ev_mask + self.fixed_eigvals = fixed_eigvals + else: + self.fixed_ev_mask = np.zeros(NC_op.symmetry_generators.n_terms, dtype=bool) + self.fixed_eigvals = np.array([], dtype=int) + + ################################################################# + ########################## BRUTE FORCE ########################## + ################################################################# - if len(unfixed_indices)==0: - nu_list = fixed_eigvals.reshape([1,-1]) + def energy_via_brute_force(self) -> Tuple[float, np.array, np.array]: + """ Does what is says on the tin! Try every single eigenvalue assignment in parallel + and return the minimizing noncontextual configuration. This scales exponentially in + the number of qubits. + """ + if np.all(self.fixed_ev_mask): + nu_list = self.fixed_eigvals.reshape([1,-1]) else: - search_size = 2**len(unfixed_indices) - nu_list = np.ones([search_size, self.symmetry_generators.n_terms], dtype=int) - nu_list[:,fixed_indices] = np.tile(fixed_eigvals, [search_size,1]) - nu_list[:,unfixed_indices] = np.array(list(itertools.product([-1,1],repeat=len(unfixed_indices)))) + search_size = 2**np.sum(~self.fixed_ev_mask) + nu_list = np.ones([search_size, self.NC_op.symmetry_generators.n_terms], dtype=int) + nu_list[:,self.fixed_ev_mask] = np.tile(self.fixed_eigvals, [search_size,1]) + nu_list[:,~self.fixed_ev_mask] = np.array(list(itertools.product([-1,1],repeat=np.sum(~self.fixed_ev_mask)))) # optimize over all discrete value assignments of nu in parallel - pool = mp.Pool(mp.cpu_count()) - tracker = pool.map(self._convex_problem, nu_list) - pool.terminate() # close the multiprocessing pool + with mp.Pool(mp.cpu_count()) as pool: + tracker = pool.map(self.NC_op._convex_problem, nu_list) # find the lowest energy eigenvalue assignment from the full list full_search_results = zip(tracker, nu_list) @@ -357,107 +409,76 @@ def _energy_via_brute_force(self, fixed_indices=None, fixed_eigvals=None): return energy, fixed_nu, r_optimal - def _energy_via_brute_force_xUSO(self, x='P'): - """ - Optimize noncontextual energy by either: Polynomial unconstrained spin Optimization (x=P) - or - Quadratic Unconstrained Spin Optimization (x=Q) - - via brute force. This method optimizes over the r-vector and finds the q_vector by brute force - - - Args: - x (str): Whether method is Polynomial or Quadratic optimization - - Returns: - optimized_energy (float): minimized noncontextual ground state energy - q_vec_opt (np.array): q vector - r_optimal (np.array): r vector - - """ - r_bounds = [(0, np.pi)]*(self.n_cliques-2)+[(0, 2*np.pi)] - - optimizer_output = differential_evolution( - func=lambda angles:self.xUSO( - unit_n_sphere_cartesian_coords(angles), x=x, method='brute_force' - ), - bounds=r_bounds - ) - optimized_energy = optimizer_output['fun'] - optimized_angles = optimizer_output['x'] - r_optimal = unit_n_sphere_cartesian_coords(optimized_angles) - - q_vec_opt = self.xUSO_qvec_solution - return optimized_energy, q_vec_opt, r_optimal - - def _energy_via_annealing_xUSO(self, x='P', num_anneals:Optional[int]=1_000): - """ - Optimize noncontextual energy by either: Polynomial unconstrained spin Optimization (x=P) - or - Quadratic Unconstrained Spin Optimization (x=Q) - - via simulated annealing. This method optimizes over the r-vector and finds the q_vector by simulated annealing - - - Args: - x (str): Whether method is Polynomial or Quadratic optimization - num_anneals (optional): number of simulated anneals to do - - Returns: - optimized_energy (float): minimized noncontextual ground state energy - q_vec_opt (np.array): q vector - r_optimal (np.array): r vector + ################################################################# + ###################### BINARY RELAXATION ######################## + ################################################################# + def energy_via_relaxation(self) -> Tuple[float, np.array, np.array]: + """ Relax the binary value assignment of symmetry generators to continuous variables """ - if not isinstance(num_anneals, int): - raise ValueError('Please give an integer number of anneals') - - r_bounds = [(0, np.pi)]*(self.n_cliques-2)+[(0, 2*np.pi)] - - optimizer_output = differential_evolution( - func=lambda angles:self.xUSO( - unit_n_sphere_cartesian_coords(angles), x=x, - method='annealing', - num_anneals=num_anneals - ), - bounds=r_bounds - ) - optimized_energy = optimizer_output['fun'] - optimized_angles = optimizer_output['x'] - r_optimal = unit_n_sphere_cartesian_coords(optimized_angles) + # optimize discrete value assignments nu by relaxation to continuous variables + nu_bounds = [(0, np.pi)]*(self.NC_op.symmetry_generators.n_terms-np.sum(self.fixed_ev_mask)) - q_vec_opt = self.xUSO_qvec_solution - return optimized_energy, q_vec_opt, r_optimal + def get_nu(angles): + """ Build nu vector given fixed values + """ + nu = np.ones(self.NC_op.symmetry_generators.n_terms) + nu[self.fixed_ev_mask] = self.fixed_eigvals + nu[~self.fixed_ev_mask] = np.cos(angles) + return nu - def xUSO(self, r_vec: np.array, x:str='P', method:str='brute_force', num_anneals:Optional[int]=1_000): + optimizer_output = shgo(func=lambda angles:self.NC_op._convex_problem(get_nu(angles))[0], bounds=nu_bounds) + # if optimization was successful the optimal angles should consist of 0 and pi + fix_nu = np.sign(np.array(get_nu(np.cos(optimizer_output['x'])))).astype(int) + self.NC_op.symmetry_generators.coeff_vec = fix_nu + energy, r_optimal = self.NC_op._convex_problem(fix_nu) + return energy, fix_nu, r_optimal + + ################################################################# + ################ UNCONSTRAINED SPIN OPTIMIZATION ################ + ################################################################# + + def _energy_xUSO(self, r_vec: np.array) -> Tuple[float, np.array, np.array]: """ Get energy via either: Polynomial unconstrained spin Optimization (x=P) or - Quadratic Unconstrained Spin Optimization (x=Q) + Quadratic Unconstrained Spin Optimization (x=Q) via a brute force search over q_vector or via simulated annealing Note in this method the r_vector is fixed upon input! (aka just does binary optimization) Args: + NC_op (NoncontextualOp): noncontextual operator r_vec (np.array): array of clique expectation values - x (str): Whether method is Polynomial or Quadratic optimization + fixed_ev_mask (np.array): bool list of where eigenvalues in nu vector are fixed + fixed_eigvals (np.array): list of nu eigenvalues that are fixed method (str): brute force or annealing optimization + x (str): Whether method is Polynomial or Quadratic optimization num_anneals (optional): number of simulated anneals to do Returns: energy (float): noncontextual energy """ - assert x in ['P', 'Q'] - assert method in ['brute_force', 'annealing'] - - r_part = np.sum(self.r_indices * r_vec, axis=1) - r_part[np.where(r_part == 0)] = 1 # set all zero terms to 1 (aka multiply be value of 1) - q_vec_SPIN = [qv.spin_var('x%d' % i) for i in range(self.symmetry_generators.n_terms)] + assert self.x in ['P', 'Q'] + assert self.method in ['brute_force', 'annealing'] + + r_part = np.sum(self.NC_op.r_indices * r_vec, axis=1) + r_part[~np.any(self.NC_op.r_indices, axis=1)] = 1 # set all zero terms to 1 (aka multiply be value of 1) + + # setup spin variables + fixed_indices = np.where(self.fixed_ev_mask)[0] # bool to indices + fixed_assignments = dict(zip(fixed_indices, self.fixed_eigvals)) + q_vec_SPIN={} + for ind in range(self.NC_op.symmetry_generators.n_terms): + if ind in fixed_assignments.keys(): + q_vec_SPIN[ind] = fixed_assignments[ind] + else: + q_vec_SPIN[ind] = qv.spin_var('x%d' % ind) COST = 0 - for P_index, term in enumerate(self.G_indices): + for P_index, term in enumerate(self.NC_op.G_indices): non_zero_inds = term.nonzero()[0] # collect all the spin terms G_term = 1 @@ -465,53 +486,81 @@ def xUSO(self, r_vec: np.array, x:str='P', method:str='brute_force', num_anneals G_term *= q_vec_SPIN[i] # cost function - COST += G_term * self.coeff_vec[P_index].real * self.pauli_mult_signs[P_index] * r_part[P_index].real + COST += G_term * self.NC_op.coeff_vec[P_index].real * self.NC_op.pauli_mult_signs[P_index] * r_part[P_index].real - if x =='P': + if np.all(self.fixed_ev_mask): + # if no degrees of freedom over nu vector, COST is a number + self._nu = self.fixed_eigvals + return COST, self.fixed_eigvals, r_vec + + if self.x =='P': spin_problem = COST.to_puso() else: spin_problem = COST.to_quso() - if method=='brute_force': + if self.method=='brute_force': sol = spin_problem.solve_bruteforce() - elif method == 'annealing': - if x == 'P': - puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=num_anneals) - elif x == 'Q': - puso_res= qv.sim.anneal_quso(spin_problem, num_anneals=num_anneals) + elif self.method == 'annealing': + if self.x == 'P': + puso_res = qv.sim.anneal_puso(spin_problem, num_anneals=self.num_anneals) + elif self.x == 'Q': + puso_res= qv.sim.anneal_quso(spin_problem, num_anneals=self.num_anneals) assert COST.is_solution_valid(puso_res.best.state) is True sol = puso_res.best.state solution = COST.convert_solution(sol) energy = COST.value(solution) - self.xUSO_qvec_solution = np.array(list(solution.values())) - return energy + nu_vec = np.ones(self.NC_op.symmetry_generators.n_terms, dtype=int) + nu_vec[self.fixed_ev_mask] = self.fixed_eigvals + nu_vec[~self.fixed_ev_mask] = np.array(list(solution.values())) + self._nu = nu_vec # so nu accessible during the _convex_then_xUSO optimization + + if self.reoptimize_r_vec: + opt_energy, opt_r_vec = self.NC_op._convex_problem(nu_vec) + return opt_energy, nu_vec, opt_r_vec + else: + return energy, nu_vec, r_vec + + def _xUSO_then_convex(self) -> Tuple[float, np.array, np.array]: + """ + """ + self.reoptimize_r_vec = True + + extreme_r_vecs = np.eye(self.NC_op.n_cliques, dtype=int) + extreme_r_vecs = np.vstack([extreme_r_vecs, -extreme_r_vecs]) + + with mp.Pool(mp.cpu_count()) as pool: + tracker = pool.map(self._energy_xUSO, extreme_r_vecs) - def solve(self, strategy='brute_force', ref_state: np.array = None, num_anneals=1_000) -> None: - """ Minimize the classical objective function, yielding the noncontextual ground state + return sorted(tracker, key=lambda x:x[0])[0] + + def _convex_then_xUSO(self) -> Tuple[float, np.array, np.array]: + """ + """ + self.reoptimize_r_vec = False - Note most QUSO functions/methods work faster than their PUSO counterparts. + r_bounds = [(0, np.pi)]*(self.NC_op.n_cliques-2)+[(0, 2*np.pi)] + + optimizer_output = differential_evolution( + func=lambda angles:self._energy_xUSO( + unit_n_sphere_cartesian_coords(angles) + )[0], + bounds=r_bounds + ) + optimized_energy = optimizer_output['fun'] + optimized_angles = optimizer_output['x'] + r_optimal = unit_n_sphere_cartesian_coords(optimized_angles) + + return optimized_energy, self._nu, r_optimal + + def energy_xUSO(self) -> Tuple[float, np.array, np.array]: """ - if ref_state is not None: - self.energy, nu, r = self._energy_via_ref_state(ref_state) - elif strategy=='binary_relaxation': - self.energy, nu, r = self._energy_via_relaxation() - elif strategy=='brute_force': - self.energy, nu, r = self._energy_via_brute_force() - elif strategy == 'brute_force_PUSO': - # PUSO = Polynomial unconstrained spin Optimization - self.energy, nu, r = self._energy_via_brute_force_xUSO(x='P') - elif strategy == 'brute_force_QUSO': - # QUSO: Quadratic Unconstrained Spin Optimization - self.energy, nu, r = self._energy_via_brute_force_xUSO(x='Q') - elif strategy == 'annealing_PUSO': - self.energy, nu, r = self._energy_via_annealing_xUSO(x='P', num_anneals=num_anneals) - elif strategy == 'annealing_QUSO': - self.energy, nu, r = self._energy_via_annealing_xUSO(x='Q', num_anneals=num_anneals) + """ + if self.NC_op.n_cliques == 0: + return self._energy_xUSO(None) + elif self.discrete_optimization_order == 'first': + return self._xUSO_then_convex() + elif self.discrete_optimization_order == 'last': + return self._convex_then_xUSO() else: - raise ValueError(f'unknown optimization strategy: {strategy}') - - # optimize the clique operator coefficients - self.symmetry_generators.coeff_vec = nu - if r is not None: - self.clique_operator.coeff_vec = r + raise ValueError('Unrecognised discrete optimization order, must be first or last') \ No newline at end of file diff --git a/symmer/symplectic/observable_op.py b/symmer/symplectic/observable_op.py index 3ce54a88..7bc24888 100644 --- a/symmer/symplectic/observable_op.py +++ b/symmer/symplectic/observable_op.py @@ -196,7 +196,7 @@ def _ansatz_expectation_trotter_rotations(self, def _ansatz_expectation_statevector(self, ansatz_op: AnsatzOp, ref_state: np.array, - sparse = False + sparse = True ) -> float: """ Exact expectation value - expensive! Converts the ansatz operator to a sparse vector | psi > and return the quantity < psi | Observable | psi >