diff --git a/docs/_static/amplitude.png b/docs/_static/amplitude.png new file mode 100644 index 00000000..53b0dbb9 Binary files /dev/null and b/docs/_static/amplitude.png differ diff --git a/docs/_static/branching.png b/docs/_static/branching.png new file mode 100644 index 00000000..721c77ca Binary files /dev/null and b/docs/_static/branching.png differ diff --git a/docs/_static/compute_marginal.png b/docs/_static/compute_marginal.png new file mode 100644 index 00000000..25f05d02 Binary files /dev/null and b/docs/_static/compute_marginal.png differ diff --git a/docs/_static/local_expectation.png b/docs/_static/local_expectation.png new file mode 100644 index 00000000..8f5a7463 Binary files /dev/null and b/docs/_static/local_expectation.png differ diff --git a/docs/_static/partial_trace.png b/docs/_static/partial_trace.png new file mode 100644 index 00000000..e0be4ffe Binary files /dev/null and b/docs/_static/partial_trace.png differ diff --git a/docs/_static/sample.png b/docs/_static/sample.png new file mode 100644 index 00000000..ea0bd587 Binary files /dev/null and b/docs/_static/sample.png differ diff --git a/docs/_static/sample_chaotic.png b/docs/_static/sample_chaotic.png new file mode 100644 index 00000000..d05f0cfd Binary files /dev/null and b/docs/_static/sample_chaotic.png differ diff --git a/docs/_static/sample_gate_by_gate.png b/docs/_static/sample_gate_by_gate.png new file mode 100644 index 00000000..caac275b Binary files /dev/null and b/docs/_static/sample_gate_by_gate.png differ diff --git a/docs/_static/to_dense.png b/docs/_static/to_dense.png new file mode 100644 index 00000000..b3b7d299 Binary files /dev/null and b/docs/_static/to_dense.png differ diff --git a/docs/basics.ipynb b/docs/basics.ipynb index 49e88da4..dd8713a3 100644 --- a/docs/basics.ipynb +++ b/docs/basics.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "0b054e8d-d0bb-4613-bddd-81b37f3d2a8e", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -21,6 +22,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "a30d59e4-ebf6-417d-9adf-16de0b1bbbe1", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -32,6 +34,7 @@ }, { "cell_type": "markdown", + "id": "1f139c32-2483-406f-8a4c-399cf1945a34", "metadata": {}, "source": [ "Kets are column vectors, i.e. with shape ``(d, 1)``:" @@ -40,6 +43,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "69b02c9c-37c3-427d-99de-b480b7ea4d6d", "metadata": {}, "outputs": [ { @@ -61,6 +65,7 @@ }, { "cell_type": "markdown", + "id": "4a731dcf-13e7-4888-a7d1-e7defb06edd3", "metadata": {}, "source": [ "The ``normalized=True`` option can be used to ensure a normalized output.\n", @@ -71,6 +76,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "0770dcd6-e29b-4b92-9072-2b4ade641268", "metadata": {}, "outputs": [ { @@ -90,6 +96,7 @@ }, { "cell_type": "markdown", + "id": "f2ab8914-8431-4dad-bb4b-7a6c400c60df", "metadata": {}, "source": [ "And operators are square matrices, i.e. have shape ``(d, d)``:" @@ -98,12 +105,13 @@ { "cell_type": "code", "execution_count": 4, + "id": "6a3a349c-8648-4934-8000-66d3ddf16805", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[ 1.+0.j 0.-2.j -3.+0.j]\n", + "[[ 1.+0.j 0.-2.j -3.-0.j]\n", " [ 0.+2.j 4.+0.j 0.-6.j]\n", " [-3.+0.j 0.+6.j 9.+0.j]]" ] @@ -119,6 +127,7 @@ }, { "cell_type": "markdown", + "id": "fb452078-ab1c-4ba5-81e0-799af6ef0f76", "metadata": {}, "source": [ "Which can also be sparse:" @@ -127,13 +136,14 @@ { "cell_type": "code", "execution_count": 5, + "id": "24cab7c2-7dd3-46a7-9acf-f1d3e0cbe5d3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<3x3 sparse matrix of type ''\n", - "\twith 9 stored elements in Compressed Sparse Row format>" + "" ] }, "execution_count": 5, @@ -147,6 +157,7 @@ }, { "cell_type": "markdown", + "id": "a10ffe96-9bc3-4e4e-ace8-0098d0e29564", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -173,6 +184,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "7bebe19b-bb7e-4d5d-a55c-63340574aba4", "metadata": {}, "outputs": [ { @@ -197,6 +209,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "0cb44044-6832-4365-a4b0-5f6ed7b940c4", "metadata": {}, "outputs": [ { @@ -216,6 +229,7 @@ }, { "cell_type": "markdown", + "id": "9389db86-974f-47a7-94e0-729a34436be2", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -231,6 +245,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "ccb3c8b1-3673-496b-9efe-d15e13e15c45", "metadata": {}, "outputs": [ { @@ -253,6 +268,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "21c148d7-a55c-44cb-bbf3-8de4c9b33f41", "metadata": {}, "outputs": [ { @@ -273,6 +289,7 @@ { "cell_type": "code", "execution_count": 10, + "id": "6916a93e-bbfa-4b37-92f3-a7816d58af28", "metadata": {}, "outputs": [ { @@ -295,6 +312,7 @@ { "cell_type": "code", "execution_count": 11, + "id": "ad4186dc-309d-44b9-abed-5d6af268746a", "metadata": {}, "outputs": [ { @@ -314,6 +332,7 @@ }, { "cell_type": "markdown", + "id": "ba59088e-d798-455f-95b8-179512b0874f", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -327,12 +346,13 @@ { "cell_type": "code", "execution_count": 12, + "id": "4012d11b-f4b9-4dd5-af69-96f51299839d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.0" + "np.float64(1.0)" ] }, "execution_count": 12, @@ -347,12 +367,13 @@ { "cell_type": "code", "execution_count": 13, + "id": "a67c2946-6e4b-40e6-91ff-f47c17e5f0d7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0j" + "np.complex128(0j)" ] }, "execution_count": 13, @@ -366,6 +387,7 @@ }, { "cell_type": "markdown", + "id": "cd62be41-0bf5-422e-b5b5-8cb9a37174d6", "metadata": {}, "source": [ "Here's an example for a much larger (20 qubit), sparse operator expecation,\n", @@ -375,13 +397,14 @@ { "cell_type": "code", "execution_count": 14, + "id": "425bae86-798a-4d9d-a7e0-2690ea7a219b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<1048576x1048576 sparse matrix of type ''\n", - "\twith 11534268 stored elements in Compressed Sparse Row format>" + "" ] }, "execution_count": 14, @@ -398,12 +421,13 @@ { "cell_type": "code", "execution_count": 15, + "id": "4198dbc2-d143-4514-9563-8785ef1395f4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.9998770131258168" + "np.float64(1.0004858170636874)" ] }, "execution_count": 15, @@ -418,13 +442,14 @@ { "cell_type": "code", "execution_count": 16, + "id": "bda59aa7-95c5-4dbf-9b63-95a3635f1ec9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "59 ms ± 3.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + "55.1 ms ± 3.82 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], @@ -435,6 +460,7 @@ }, { "cell_type": "markdown", + "id": "e68195b9-331c-4e07-b3b2-a1276beb808e", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -464,12 +490,13 @@ ":::\n", "\n", "Often one wants to sandwich an operator with many identities,\n", - "{func}`~quimb.core.ikron` can be used for this:\n" + "{func}`~quimb.core.ikron` can be used for this:" ] }, { "cell_type": "code", "execution_count": 17, + "id": "bf597230-30d7-4d54-b876-e93967891fc7", "metadata": {}, "outputs": [ { @@ -492,6 +519,7 @@ }, { "cell_type": "markdown", + "id": "5b7a4905-ee44-4a82-89f1-6e1a612c021b", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -503,6 +531,7 @@ { "cell_type": "code", "execution_count": 18, + "id": "ed53d5cc-a2e7-4acb-b867-cb1e61951d3f", "metadata": {}, "outputs": [ { @@ -532,6 +561,7 @@ }, { "cell_type": "markdown", + "id": "753aebb7-8d79-491b-8add-9b2497e6d81a", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -553,15 +583,16 @@ { "cell_type": "code", "execution_count": 19, + "id": "5c6f0168-e595-4472-b78e-e7c551089e31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[ 0.256+0.j -0.013-0.007j 0.02 +0.008j -0.014+0.007j]\n", - " [-0.013+0.007j 0.263+0.j -0.011+0.008j 0.016+0.004j]\n", - " [ 0.02 -0.008j -0.011-0.008j 0.231+0.j 0.01 +0.008j]\n", - " [-0.014-0.007j 0.016-0.004j 0.01 -0.008j 0.25 +0.j ]]" + "[[ 0.279+0.j 0.003-0.005j 0.012+0.009j 0.018-0.009j]\n", + " [ 0.003+0.005j 0.239+0.j -0.005+0.007j -0.005-0.002j]\n", + " [ 0.012-0.009j -0.005-0.007j 0.24 +0.j -0.015-0.014j]\n", + " [ 0.018+0.009j -0.005+0.002j -0.015+0.014j 0.242+0.j ]]" ] }, "execution_count": 19, @@ -579,6 +610,7 @@ }, { "cell_type": "markdown", + "id": "5ea15f65-79d4-40a1-993a-82b011dc77e1", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -590,7 +622,7 @@ "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { - "display_name": "Python 3.10.8 ('numpy')", + "display_name": "py312", "language": "python", "name": "python3" }, @@ -604,12 +636,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8 (main, Nov 4 2022, 13:48:29) [GCC 11.2.0]" - }, - "vscode": { - "interpreter": { - "hash": "39c10650315d977fb13868ea1402e99f3e10e9885c2c202e692ae90b8995050d" - } + "version": "3.12.6" } }, "nbformat": 4, diff --git a/docs/changelog.md b/docs/changelog.md index 8d689321..385be185 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,13 +2,28 @@ Release notes for `quimb`. -(whats-new-1-8-5)= -## v1.8.5 (unreleased) +(whats-new-1-9-0)= +## v1.9.0 (unreleased) + +**Breaking Changes** + +- renamed `MatrixProductState.partial_trace` and `MatrixProductState.ptr` to [MatrixProductState.partial_trace_to_mpo](quimb.tensor.tensor_1d.MatrixProductState.partial_trace_to_mpo) to avoid confusion with other `partial_trace` methods that usually produce a dense matrix. **Enhancements:** +- add [`Circuit.sample_gate_by_gate`](quimb.tensor.circuit.Circuit.sample_gate_by_gate) and related methods [`CircuitMPS.reordered_gates_dfs_clustered`](quimb.tensor.circuit.Circuit.reordered_gates_dfs_clustered) and [`CircuitMPS.get_qubit_distances`](quimb.tensor.circuit.CircuitMPS.get_qubit_distances) for sampling a circuit using the 'gate by gate' method introduced in https://arxiv.org/abs/2112.08499. +- add [`Circuit.draw`](quimb.tensor.circuit.Circuit.draw) for drawing a very simple circuit schematic. +- [`Circuit`](quimb.tensor.circuit.Circuit): by default turn on `simplify_equalize_norms` and use a `group_size=10` for sampling. This should result in faster and more stable sampling. +- [`Circuit`](quimb.tensor.circuit.Circuit): use `numpy.random.default_rng` for random number generation. +- add [`qtn.circ_a2a_rand`](quimb.tensor.circuit_gen.circ_a2a_rand) for generating random all-to-all circuits. - expose [`qtn.edge_coloring`](quimb.tensor.tensor_arbgeom_tebd.edge_coloring) as top level function and allow layers to be returned grouped. -- add docstring for [`tn.contract_compressed`](quimb.tensor.tensor_core.TensorNetwork.contract_compressed) +- add docstring for [`tn.contract_compressed`](quimb.tensor.tensor_core.TensorNetwork.contract_compressed) and by default pick up important settings from the supplied contraction path optimizer (`max_bond` and `compress_late`) +- add [`Tensor.rand_reduce`](quimb.tensor.tensor_core.Tensor.rand_reduce) for randomly removing a tensor index by contracting a random vector into it. One can also supply the value `"r"` to `isel` selectors to use this. +- add `fit-zipup` and `fit-projector` shorthand methods to the general 1d tensor network compression function +- add [`MatrixProductState.compute_local_expectation`](quimb.tensor.tensor_1d.MatrixProductState.compute_local_expectation) for computing many local expectations for a MPS at once, to match the interface for this method elsewhere. These can either be computed via canonicalization (`method="canonical"`), or via explicit left and right environment contraction (`method="envs"`) +- specialize [`CircuitMPS.local_expectation`](quimb.tensor.circuit.CircuitMPS.local_expectation) to make use of the MPS form. + +--- (whats-new-1-8-4)= @@ -19,6 +34,8 @@ Release notes for `quimb`. - fix for MPS sampling with fixed seed ({issue}`247` and {pull}`248`) - fix for `mps_gate_with_mpo_lazy` ({issue}`246`). +--- + (whats-new-1-8-3)= ## v1.8.3 (2024-07-10) @@ -31,6 +48,8 @@ Release notes for `quimb`. - add [`edges_1d_chain`](quimb.tensor.geometry.edges_1d_chain) for generating 1D chain edges - [operatorbuilder](quimb.experimental.operatorbuilder): better coefficient placement for long range MPO building +--- + (whats-new-1-8-2)= ## v1.8.2 (2024-06-12) @@ -48,6 +67,9 @@ Release notes for `quimb`. - [`approx_spectral_function`](quimb.linalg.approx_spectral.approx_spectral_function) add plotting and tracking - add dispatching to various tensor primitives to allow overriding +--- + + (whats-new-1-8-1)= ## v1.8.1 (2024-05-06) @@ -76,6 +98,9 @@ Release notes for `quimb`. - fix for retrieving `opt_einsum.PathInfo` for single scalar contraction ({issue}`231`) +--- + + (whats-new-1-8-0)= ## v1.8.0 (2024-04-10) @@ -160,6 +185,9 @@ Release notes for `quimb`. - fix autoblock bug where connected sectors were not being merged ({issue}`223`) +--- + + (whats-new-1-7-3)= ## v1.7.3 (2024-02-08) @@ -173,6 +201,9 @@ Release notes for `quimb`. - restore fallback (to `scipy.linalg.svd` with driver='gesvd') behavior for truncated SVD with numpy backend. +--- + + (whats-new-1-7-2)= ## v1.7.2 (2024-01-30) @@ -186,6 +217,9 @@ Release notes for `quimb`. - removed import of deprecated `numba.generated_jit` decorator. +--- + + (whats-new-1-7-1)= ## v1.7.1 (2024-01-30) @@ -219,6 +253,9 @@ Release notes for `quimb`. - fix bug in quantum discord computation when the state was diagonal ({issue}`217`) +--- + + (whats-new-1-7-0)= ## v1.7.0 (2023-12-08) @@ -269,6 +306,9 @@ Release notes for `quimb`. performing tensor network simplifications. +--- + + (whats-new-1-6-0)= ## v1.6.0 (2023-09-10) @@ -293,6 +333,9 @@ Release notes for `quimb`. - fix gauge size check for some backends +--- + + (whats-new-1-5-1)= ## v1.5.1 (2023-07-28) @@ -313,6 +356,9 @@ Release notes for `quimb`. - fix for {meth}`gate_with_auto_swap` for `i > j`. - fix bug where calling `tn.norm()` would mangle indices. +--- + + (whats-new-1-5-0)= ## v1.5.0 (2023-05-03) @@ -377,6 +423,9 @@ Release notes for `quimb`. - fix {func}`~quimb.tensor.decomp.qr_stabilized` bug for strictly upper triangular R factors. +--- + + (whats-new-1-4-2)= ## v1.4.2 (2022-11-28) @@ -385,6 +434,9 @@ Release notes for `quimb`. - move from versioneer to to [setuptools_scm](https://pypi.org/project/setuptools-scm/) for versioning +--- + + (whats-new-1-4-1)= ## v1.4.1 (2022-11-28) @@ -418,6 +470,9 @@ Release notes for `quimb`. > - fix force atlas 2 and `weight_attr` bug ({issue}`126`) > - allow unpickling of `PTensor` objects ({issue}`128`, {pull}`131`) +--- + + (whats-new-1-4-0)= ## v1.4.0 (2022-06-14) @@ -437,6 +492,9 @@ Release notes for `quimb`. - Various memory and performance improvements - Various graph generators and TN builders +--- + + (whats-new-1-3-0)= ## v1.3.0 (2020-02-18) @@ -473,6 +531,9 @@ Release notes for `quimb`. - Add environment variable `QUIMB_NUMBA_PAR` to set whether numba should use automatic parallelization - mainly to fix travis segfaults. - Make cache import and initilization of `petsc4py` and `slepc4py` more robust. +--- + + (whats-new-1-2-0)= ## v1.2.0 (2019-06-06) diff --git a/docs/conf.py b/docs/conf.py index 34a9b86e..701baf1e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -64,6 +64,8 @@ 'python': ('https://docs.python.org/3/', None), 'numpy': ('https://numpy.org/doc/stable/', None), 'scipy': ('https://docs.scipy.org/doc/scipy/', None), + 'cotengra': ('https://cotengra.readthedocs.io/en/latest/', None), + 'autoray': ('https://autoray.readthedocs.io/en/latest/', None), } # Add any paths that contain templates here, relative to this directory. diff --git a/docs/tensor-basics.ipynb b/docs/tensor-basics.ipynb index fa35b52a..2581fb05 100644 --- a/docs/tensor-basics.ipynb +++ b/docs/tensor-basics.ipynb @@ -3,6 +3,7 @@ { "attachments": {}, "cell_type": "markdown", + "id": "51f916b5-d6eb-4aad-9d56-b0f9e82f0595", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -34,6 +35,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "9f2756c6-1df3-4ff4-9054-7fb7423176e4", "metadata": {}, "outputs": [], "source": [ @@ -44,6 +46,7 @@ }, { "cell_type": "markdown", + "id": "0b3e1355-f577-429e-b65e-1ca43dde5c54", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -52,8 +55,8 @@ "\n", "To create a Tensor you just need:\n", "\n", - "* `data` - a raw array, and \n", - "* `inds` - a set of 'indices' to label each dimension with. \n", + "* `data` - a raw array, and\n", + "* `inds` - a set of 'indices' to label each dimension with.\n", "\n", "Whilst naming the dimensions is useful so you don't have to remember which axis is which, the crucial point is that tensors simply sharing the same index name automatically form a 'bond' or implicit contraction when put together. Tensors can also carry an arbitrary number of identifiers - `tags` - which you can use to refer to single or groups of tensors once they are embedded in networks.\n", "\n", @@ -63,6 +66,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "f8e575b2-8f76-40ca-8eb3-8a00ec3be204", "metadata": {}, "outputs": [ { @@ -92,229 +96,13 @@ { "cell_type": "code", "execution_count": 3, + "id": "2cb31903-aef9-4653-8e17-20cd092952e6", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.303768\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -332,6 +120,7 @@ }, { "cell_type": "markdown", + "id": "88d2446b-bfda-4442-a75c-4c83291f6e58", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -368,6 +157,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "cee2ae1c-1c7e-442c-8c44-59baed4508b2", "metadata": {}, "outputs": [], "source": [ @@ -377,6 +167,7 @@ }, { "cell_type": "markdown", + "id": "be211a49-32b5-4512-a916-7639590f2bae", "metadata": {}, "source": [ "And finally, a random 'bra' to complete the inner product:" @@ -385,6 +176,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "cbea620b-317a-4de2-9272-e4c758feb6ff", "metadata": {}, "outputs": [], "source": [ @@ -393,17 +185,19 @@ }, { "cell_type": "markdown", + "id": "db757fb1-bd13-4f65-8978-c6dd11d18303", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Note how repeating an index name is all that is required to define a contraction.\n", - "If you want to join two tensors and have the index generated automatically \n", + "If you want to join two tensors and have the index generated automatically\n", "you can use the function [`qtn.connect`](quimb.tensor.tensor_core.connect)." ] }, { "cell_type": "markdown", + "id": "e5bba4e1-7799-4dd9-b088-a31709a68712", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -416,12 +210,13 @@ "\n", "## Creating Tensor Networks\n", "\n", - "We can now combine these into a [`TensorNetwork`](quimb.tensor.tensor_core.TensorNetwork) using the `&` operator overload:\n" + "We can now combine these into a [`TensorNetwork`](quimb.tensor.tensor_core.TensorNetwork) using the `&` operator overload:" ] }, { "cell_type": "code", "execution_count": 6, + "id": "c3af54e0-0fd8-4429-90a4-767287a57475", "metadata": {}, "outputs": [ { @@ -444,6 +239,7 @@ }, { "cell_type": "markdown", + "id": "aaee6ec9-7bba-4d70-893a-7a8fd69ad75f", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -467,7 +263,7 @@ "find the names of indices connecting tensors if explicitly required.\n", ":::\n", "\n", - "Some common [`TensorNetwork`](quimb.tensor.tensor_core.TensorNetwork) methods \n", + "Some common [`TensorNetwork`](quimb.tensor.tensor_core.TensorNetwork) methods\n", "are:\n", "\n", "- [`TensorNetwork.reindex`](quimb.tensor.tensor_core.TensorNetwork.reindex)\n", @@ -491,694 +287,13 @@ { "cell_type": "code", "execution_count": 7, + "id": "16c76c97-2640-46e3-a724-7a69d595658a", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.515203\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -1196,6 +311,7 @@ }, { "cell_type": "markdown", + "id": "cdc25ee4-5a83-4241-8e25-cb761a0654f3", "metadata": {}, "source": [ "Note the tags can be used to identify both paulis at once. But they could also be uniquely identified using their ``'X'`` and ``'Y'`` tags respectively:" @@ -1203,6 +319,7 @@ }, { "cell_type": "markdown", + "id": "b48d4fc3-b7df-48c9-9d5a-4146561e60e5", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -1223,770 +340,13 @@ { "cell_type": "code", "execution_count": 8, + "id": "ac74eca3-0f61-492f-8a0b-391ef1317655", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.635378\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -2017,6 +377,7 @@ }, { "cell_type": "markdown", + "id": "1f61668c-9605-496b-b1f1-d67ffe96d7b0", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -2051,18 +412,19 @@ "graphs. See {ref}`tensor-network-contraction` for more details.\n", ":::\n", "\n", - "To fully contract a network we can use the `^` operator, and the `...` object:\n" + "To fully contract a network we can use the `^` operator, and the `...` object:" ] }, { "cell_type": "code", "execution_count": 9, + "id": "088405f6-6c11-4e77-8daf-dcd6f9cc8281", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(0.06766823867678032-0.8460798111575898j)" + "(0.556024406455527+0.28213663229389124j)" ] }, "execution_count": 9, @@ -2076,6 +438,7 @@ }, { "cell_type": "markdown", + "id": "03e3a18a-2f0c-4ae3-ab61-63a56e1757ad", "metadata": {}, "source": [ "Or if you only want to contract tensors with a specific set of tags, such as the two pauli operators,\n", @@ -2085,484 +448,13 @@ { "cell_type": "code", "execution_count": 10, + "id": "ea5e2905-bbb2-4f48-b801-648a174db267", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.734174\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -2593,6 +485,7 @@ }, { "cell_type": "markdown", + "id": "2aecb912-418c-49e2-afed-79c96db6ca40", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -2610,13 +503,14 @@ { "cell_type": "code", "execution_count": 11, + "id": "e2aa08f9-db49-4b03-be59-28393cf5f186", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Tensor(shape=(2, 4), inds=[a, b], tags={A, B}),backend=numpy, dtype=float64, data=array([[-1.82145456, 5.37156602, -0.6407701 , 1.73704458],\n", - " [-3.04900789, 5.68378085, -3.08717877, 4.09540662]])
" + "
Tensor(shape=(2, 4), inds=[a, b], tags={A, B}),backend=numpy, dtype=float64, data=array([[-1.07482966, 1.40801906, 0.97244287, 2.06712511],\n", + " [-1.19598176, -1.1037286 , -0.15011799, 1.1052763 ]])
" ], "text/plain": [ "Tensor(shape=(2, 4), inds=('a', 'b'), tags=oset(['A', 'B']))" @@ -2637,6 +531,7 @@ }, { "cell_type": "markdown", + "id": "b2554816-853e-4bf9-bf4e-83dc3a1d5d04", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -2649,12 +544,13 @@ { "cell_type": "code", "execution_count": 12, + "id": "b136e4aa-9ad6-4bc1-af35-ba53d319f5b4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.0" + "0.9999999999999999" ] }, "execution_count": 12, @@ -2672,6 +568,7 @@ }, { "cell_type": "markdown", + "id": "7963ae63-db42-4dab-b6fe-b2898a3a68f3", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -2688,329 +585,13 @@ { "cell_type": "code", "execution_count": 13, + "id": "227e4bfd-3b58-4879-b588-9571fe09ded4", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.785037\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -3031,347 +612,13 @@ { "cell_type": "code", "execution_count": 14, + "id": "db070ecd-d78e-4db4-ad40-4735cea49f18", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.883794\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -3391,6 +638,7 @@ }, { "cell_type": "markdown", + "id": "691cda75-a0ec-4bc8-b87e-df5db5aa931a", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -3409,535 +657,13 @@ { "cell_type": "code", "execution_count": 15, + "id": "2b21499c-40be-426a-9d3b-0226025580e5", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:50.989950\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -3957,664 +683,13 @@ { "cell_type": "code", "execution_count": 16, + "id": "af444a50-b491-4895-89fa-7f1c861b3644", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:51.107289\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -4642,6 +717,7 @@ }, { "cell_type": "markdown", + "id": "724772fe-8265-4f09-9414-eb742f14525b", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -4677,521 +753,13 @@ { "cell_type": "code", "execution_count": 17, + "id": "d0a57a78-c06b-4cdb-afd8-5fae91409189", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:51.212497\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -5214,6 +782,7 @@ }, { "cell_type": "markdown", + "id": "8b990d65-559b-47e8-bd54-282cd4e2357a", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -5239,416 +808,19 @@ "\n", "The maximum bond dimension kept is often denoted $\\chi$.\n", "The core function that handles this is\n", - "[`qtn.tensor_compress_bond`](quimb.tensor.tensor_core.tensor_compress_bond).\n" + "[`qtn.tensor_compress_bond`](quimb.tensor.tensor_core.tensor_compress_bond)." ] }, { "cell_type": "code", "execution_count": 18, + "id": "1f706cb8-37e0-4f81-b6e3-9e582afe474c", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:51.309527\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -5669,406 +841,13 @@ { "cell_type": "code", "execution_count": 19, + "id": "18180bab-1d2e-4a3f-aa0e-398c098f985f", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:51.408834\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -6090,6 +869,7 @@ }, { "cell_type": "markdown", + "id": "31e643cd-e2d9-41e0-b67d-b39a9ebd4fe4", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -6112,675 +892,19 @@ "be cast as a contraction that is usually much cheaper.\n", "\n", "Consider the following contrived TN with overall shape\n", - "`(1000, 1000, 1000, 1000)`, but which is evidently low rank:\n" + "`(1000, 1000, 1000, 1000)`, but which is evidently low rank:" ] }, { "cell_type": "code", "execution_count": 20, + "id": "a84c0de6-3dcc-4968-a354-ba96acbd62de", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:51.519428\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -6803,6 +927,7 @@ }, { "cell_type": "markdown", + "id": "96df8da5-2c83-4b40-b0f2-e4d75f87405a", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -6816,6 +941,7 @@ { "cell_type": "code", "execution_count": 21, + "id": "1a3bcae3-17e3-477a-9f9a-a3f34c4866cc", "metadata": {}, "outputs": [ { @@ -6836,6 +962,7 @@ }, { "cell_type": "markdown", + "id": "19e8585d-eb1d-4814-bb1f-599226801bc5", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -6850,12 +977,13 @@ { "cell_type": "code", "execution_count": 22, + "id": "57136381-6ed2-4135-94bb-3a49dd81cc58", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([6425.04063216+0.j])" + "array([2900.03154824+0.j])" ] }, "execution_count": 22, @@ -6869,6 +997,7 @@ }, { "cell_type": "markdown", + "id": "12c05935-a7eb-4fdb-b0e9-88343b6ee69f", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -6882,552 +1011,13 @@ { "cell_type": "code", "execution_count": 23, + "id": "49269f52-20b9-484c-87c7-bef4acd14413", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:56.825684\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -7454,6 +1044,7 @@ }, { "cell_type": "markdown", + "id": "51ae6010-83b4-4330-8217-f7eedf119351", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -7481,6 +1072,7 @@ { "cell_type": "code", "execution_count": 24, + "id": "2a60349b-1ec3-4be5-8296-a59545c29eba", "metadata": {}, "outputs": [], "source": [ @@ -7489,6 +1081,7 @@ }, { "cell_type": "markdown", + "id": "1edad091-4af5-48d6-990e-590d03312557", "metadata": {}, "source": [ "Get tensors which have **all** of the tags:" @@ -7497,647 +1090,13 @@ { "cell_type": "code", "execution_count": 25, + "id": "bb157352-624b-494c-aa97-d8fb5f4c2d0f", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:56.962082\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -8156,6 +1115,7 @@ }, { "cell_type": "markdown", + "id": "4fb3d3af-180e-4f3e-844f-9d31140a6172", "metadata": {}, "source": [ "Get tensors which *don't* have **all** of the tags:" @@ -8164,663 +1124,13 @@ { "cell_type": "code", "execution_count": 26, + "id": "9bf6efec-c02d-4af1-86f2-e657464b6a3e", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:57.091620\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -8839,6 +1149,7 @@ }, { "cell_type": "markdown", + "id": "deabe48d-218b-4197-8e92-457aff1e44ea", "metadata": {}, "source": [ "Get tensors which have **any** of the tags:" @@ -8847,663 +1158,13 @@ { "cell_type": "code", "execution_count": 27, + "id": "49c89b3a-05ee-4ffc-9bc0-a4ea39f69d8b", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:57.284905\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -9522,6 +1183,7 @@ }, { "cell_type": "markdown", + "id": "48f5f275-faf3-409b-b327-c256d40e33cc", "metadata": {}, "source": [ "Get tensors which *don't* have **any** of the tags:" @@ -9530,679 +1192,13 @@ { "cell_type": "code", "execution_count": 28, + "id": "926bf5c8-85b5-4244-90a8-74cf1de46a27", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:57.407596\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -10221,6 +1217,7 @@ }, { "cell_type": "markdown", + "id": "beffc29c-a696-4dd0-8123-ef3ac7245d28", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -10240,15 +1237,16 @@ { "cell_type": "code", "execution_count": 29, + "id": "6a2c5e06-36d9-479a-acc2-7673e92550e4", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Tensor(shape=(4, 4, 4, 4), inds=[_d0324aAAABX, _d0324aAAABZ, _d0324aAAABa, _d0324aAAABR], tags={I2,3, X2, Y3, ALL, ANY}),backend=numpy, dtype=float64, data=...
" + "
Tensor(shape=(4, 4, 4, 4), inds=[_835204AAABZ, _835204AAABb, _835204AAABc, _835204AAABT], tags={I2,3, X2, Y3, ALL, ANY}),backend=numpy, dtype=float64, data=...
" ], "text/plain": [ - "Tensor(shape=(4, 4, 4, 4), inds=('_d0324aAAABX', '_d0324aAAABZ', '_d0324aAAABa', '_d0324aAAABR'), tags=oset(['I2,3', 'X2', 'Y3', 'ALL', 'ANY']))" + "Tensor(shape=(4, 4, 4, 4), inds=('_835204AAABZ', '_835204AAABb', '_835204AAABc', '_835204AAABT'), tags=oset(['I2,3', 'X2', 'Y3', 'ALL', 'ANY']))" ] }, "execution_count": 29, @@ -10262,6 +1260,7 @@ }, { "cell_type": "markdown", + "id": "92807b3c-63dc-49ce-9c23-0e1fea472672", "metadata": {}, "source": [ "Although some special tensor networks also accept a lattice coordinate here as well:" @@ -10270,15 +1269,16 @@ { "cell_type": "code", "execution_count": 30, + "id": "2a9d0254-3aeb-4b08-8242-34e580a49406", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Tensor(shape=(4, 4, 4, 4), inds=[_d0324aAAABX, _d0324aAAABZ, _d0324aAAABa, _d0324aAAABR], tags={I2,3, X2, Y3, ALL, ANY}),backend=numpy, dtype=float64, data=...
" + "
Tensor(shape=(4, 4, 4, 4), inds=[_835204AAABZ, _835204AAABb, _835204AAABc, _835204AAABT], tags={I2,3, X2, Y3, ALL, ANY}),backend=numpy, dtype=float64, data=...
" ], "text/plain": [ - "Tensor(shape=(4, 4, 4, 4), inds=('_d0324aAAABX', '_d0324aAAABZ', '_d0324aAAABa', '_d0324aAAABR'), tags=oset(['I2,3', 'X2', 'Y3', 'ALL', 'ANY']))" + "Tensor(shape=(4, 4, 4, 4), inds=('_835204AAABZ', '_835204AAABb', '_835204AAABc', '_835204AAABT'), tags=oset(['I2,3', 'X2', 'Y3', 'ALL', 'ANY']))" ] }, "execution_count": 30, @@ -10292,6 +1292,7 @@ }, { "cell_type": "markdown", + "id": "fc373c17-3d26-4aaf-9780-ee6ac73622a8", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -10323,6 +1324,7 @@ { "cell_type": "code", "execution_count": 31, + "id": "040ac949-eb3c-4d59-b883-d0b3d5c47dee", "metadata": {}, "outputs": [], "source": [ @@ -10331,6 +1333,7 @@ }, { "cell_type": "markdown", + "id": "596ecf1e-615a-43c5-8b32-eebe638b731f", "metadata": {}, "source": [ "which is equivalent to" @@ -10339,6 +1342,7 @@ { "cell_type": "code", "execution_count": 32, + "id": "2a30c5c5-10d4-4be7-9085-1df8c7689e0b", "metadata": {}, "outputs": [], "source": [ @@ -10347,14 +1351,16 @@ }, { "cell_type": "markdown", + "id": "941a79bc-bd1d-4b0c-9f42-cbc7245870b6", "metadata": {}, "source": [ - "the new TN is *viewing* those tensors and so changes to them will affect ``tn`` \n", + "the new TN is *viewing* those tensors and so changes to them will affect ``tn``\n", "and vice versa. Note this is *not* the default behaviour." ] }, { "cell_type": "markdown", + "id": "b8e5c1e7-35ac-4ea9-9ce7-cad5bab6f45a", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -10383,672 +1389,13 @@ { "cell_type": "code", "execution_count": 33, + "id": "1af2f302-c742-47a0-95ca-1a24d63d7e60", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:57.719491\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -11068,1426 +1415,13 @@ { "cell_type": "code", "execution_count": 34, + "id": "6172d29d-3dda-495b-aeff-9ea75e31a4bd", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2023-11-29T15:22:57.853653\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -12510,23 +1444,24 @@ { "cell_type": "code", "execution_count": 35, + "id": "155c4539-7be9-48b0-a17e-44c3460a7f4a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "('_d0324aAAACH',\n", - " '_d0324aAAACI',\n", - " '_d0324aAAACJ',\n", - " '_d0324aAAACK',\n", - " '_d0324aAAACL',\n", - " '_d0324aAAACM',\n", - " '_d0324aAAACN',\n", - " '_d0324aAAACO',\n", - " '_d0324aAAACP',\n", - " '_d0324aAAACQ',\n", - " '_d0324aAAACR',\n", - " '_d0324aAAACS')" + "('_835204AAACJ',\n", + " '_835204AAACK',\n", + " '_835204AAACL',\n", + " '_835204AAACM',\n", + " '_835204AAACN',\n", + " '_835204AAACO',\n", + " '_835204AAACP',\n", + " '_835204AAACQ',\n", + " '_835204AAACR',\n", + " '_835204AAACS',\n", + " '_835204AAACT',\n", + " '_835204AAACU')" ] }, "execution_count": 35, @@ -12541,6 +1476,7 @@ }, { "cell_type": "markdown", + "id": "31fd7c7e-63e0-4984-99db-31857caf6a4b", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] @@ -12553,9 +1489,9 @@ "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { - "display_name": "Python [conda env:py311]", + "display_name": "py312", "language": "python", - "name": "conda-env-py311-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -12567,7 +1503,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.12.6" } }, "nbformat": 4, diff --git a/docs/tensor-circuit.ipynb b/docs/tensor-circuit.ipynb index f205c3cf..f90732e5 100644 --- a/docs/tensor-circuit.ipynb +++ b/docs/tensor-circuit.ipynb @@ -3,6 +3,7 @@ { "attachments": {}, "cell_type": "markdown", + "id": "31fbfeda-e02b-4029-becb-dfd8cf8a2db0", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -35,13 +36,14 @@ { "cell_type": "code", "execution_count": 1, + "id": "e9942fcd-455d-43f7-b4d1-00d6e850469c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11111111111111111111111110111111111111111111111111111111111111111111111111111111\n" + "11011111111111111111111111111111111111111111111111111111111111111111111111111111\n" ] } ], @@ -70,12 +72,13 @@ "circ.apply_gate('X', regs[-1], controls=regs[:-1])\n", "\n", "# sample it a few times\n", - "for b in circ.sample(1):\n", + "for b in circ.sample(1, seed=42):\n", " print(b)" ] }, { "cell_type": "markdown", + "id": "bcedf1c9-7506-4006-b3e9-270c3abfb689", "metadata": {}, "source": [ "As mentioned above, various pre-processing steps need to occur (which will happen on the first run if not explicitly called). The results of these are cached such that the more you sample the more the simulation should speed up:" @@ -84,34 +87,36 @@ { "cell_type": "code", "execution_count": 2, + "id": "24460891-8162-4b66-8703-88a32ef8552c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "11011111111111111111111111111111111111111111111111111111111111111111111111111111\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", - "11111111111111111111111110111111111111111111111111111111111111111111111111111111\n", - "11111111111111111111111110111111111111111111111111111111111111111111111111111111\n", - "11111111111111111111111110111111111111111111111111111111111111111111111111111111\n", - "11111111111111111111111110111111111111111111111111111111111111111111111111111111\n", + "11011111111111111111111111111111111111111111111111111111111111111111111111111111\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", - "CPU times: user 794 ms, sys: 137 μs, total: 794 ms\n", - "Wall time: 793 ms\n" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", + "00000000000000000000000000000000000000000000000000000000000000000000000000000000\n", + "CPU times: user 47.5 ms, sys: 0 ns, total: 47.5 ms\n", + "Wall time: 47.4 ms\n" ] } ], "source": [ "%%time\n", "# sample it 8 times\n", - "for b in circ.sample(8):\n", + "for b in circ.sample(8, seed=43):\n", " print(b)" ] }, { "cell_type": "markdown", + "id": "1586d1a4-3b3c-4d51-9eda-065f47041445", "metadata": {}, "source": [ "Collect some statistics:" @@ -120,21 +125,22 @@ { "cell_type": "code", "execution_count": 3, + "id": "96770615-e231-4973-8af2-1fac694def49", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 254 ms, sys: 45.3 ms, total: 299 ms\n", - "Wall time: 286 ms\n" + "CPU times: user 13.3 ms, sys: 13 μs, total: 13.3 ms\n", + "Wall time: 13.1 ms\n" ] }, { "data": { "text/plain": [ - "Counter({'00000000000000000000000000000000000000000000000000000000000000000000000000000000': 65,\n", - " '11111111111111111111111110111111111111111111111111111111111111111111111111111111': 35})" + "Counter({'00000000000000000000000000000000000000000000000000000000000000000000000000000000': 51,\n", + " '11011111111111111111111111111111111111111111111111111111111111111111111111111111': 49})" ] }, "execution_count": 3, @@ -152,6 +158,7 @@ }, { "cell_type": "markdown", + "id": "074234b6-860d-4446-b0a1-7ed4d42a1c23", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -196,6 +203,7 @@ }, { "cell_type": "markdown", + "id": "f2066f2d-cf4d-408f-92ae-1d5d07585bb2", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -219,6 +227,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "5198f13a-6e4f-4b0b-8411-e1ae3fb68d37", "metadata": {}, "outputs": [ { @@ -268,8342 +277,23 @@ }, { "cell_type": "markdown", + "id": "f1fa4bbc-270f-444a-8f03-c8fbf4e92f19", "metadata": {}, "source": [ - "The basic tensor network representing the state is stored in the \n", + "The basic tensor network representing the state is stored in the\n", "``.psi`` attribute, which we can then visualize:" ] }, { "cell_type": "code", "execution_count": 5, + "id": "f52d1a19-8629-4d1c-b7f0-91f4bcc9e8ed", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:23.693664\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -8621,8298 +311,26 @@ }, { "cell_type": "markdown", + "id": "039cb9b1-32c3-46f2-a5a4-a47a2b6f0c99", "metadata": {}, "source": [ "Note by default the CNOT and CZ gates have\n", "been split via a rank-2 spatial decomposition into two parts acting on each site seperately\n", - "but connected by a new bond. \n", - "We can also graph the default (``propagate_tags='register'``) method for \n", + "but connected by a new bond.\n", + "We can also graph the default (``propagate_tags='register'``) method for\n", "adding site tags to the applied operators:" ] }, { "cell_type": "code", "execution_count": 6, + "id": "e919f266-8c89-419a-9cb5-62a15a19df75", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:27.856516\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -16930,6 +348,7 @@ }, { "cell_type": "markdown", + "id": "3f65f883-78d0-4132-a434-bf08b0bc3c4d", "metadata": {}, "source": [ "Or since we supplied ``gate_round`` as an keyword (which is optional), the tensors\n", @@ -16939,8531 +358,13 @@ { "cell_type": "code", "execution_count": 7, + "id": "b7041e14-1935-4af0-af18-8040c425eeec", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:31.665447\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -25481,6 +382,7 @@ }, { "cell_type": "markdown", + "id": "f13c177e-7e6a-42d1-a64a-1e9e82753d29", "metadata": {}, "source": [ "All of these might be helpful when addressing only certain tensors:" @@ -25489,12 +391,13 @@ { "cell_type": "code", "execution_count": 8, + "id": "dcd9ac7c-3b83-47cf-a69f-001c69c9a20c", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
TensorNetworkGenVector(tensors=1, indices=3)
Tensor(shape=(2, 2, 2), inds=[_119073AASdN, _119073AASda, _119073AASdM], tags={GATE_69, ROUND_3, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642+0.j, 0. +0.j],\n", + "
TensorNetworkGenVector(tensors=1, indices=3)
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByq, _438f3aAABzD, _438f3aAAByp], tags={GATE_69, ROUND_3, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642+0.j, 0. +0.j],\n", " [ 0. +0.j, 0.84089642+0.j]],\n", "\n", " [[-0. +0.j, -0.84089642+0.j],\n", @@ -25516,6 +419,7 @@ }, { "cell_type": "markdown", + "id": "888c7a46-c2ca-4e11-92d4-54c584878ab3", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -25531,6 +435,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "4ce7cc04-6be0-43d0-a0f2-e2604f613c2f", "metadata": {}, "outputs": [ { @@ -25542,6 +447,7 @@ "CCY\n", "CCZ\n", "CNOT\n", + "CPHASE\n", "CRX\n", "CRY\n", "CRZ\n", @@ -25563,6 +469,7 @@ "IDEN\n", "IS\n", "ISWAP\n", + "PHASE\n", "RX\n", "RXX\n", "RY\n", @@ -25595,6 +502,7 @@ }, { "cell_type": "markdown", + "id": "bf18f25c-8faa-4bcb-8af0-f1cf0c8c8f03", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -25611,1346 +519,13 @@ { "cell_type": "code", "execution_count": 10, + "id": "dc3442d1-a015-465b-9c34-266f65051482", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:32.187779\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -26978,6 +553,7 @@ }, { "cell_type": "markdown", + "id": "ab4bdab1-8343-4ab0-9711-1acc9f7883bc", "metadata": {}, "source": [ "We've used the ``contract=False`` option which doesn't try and split the gate tensor in any way,\n", @@ -26989,26 +565,27 @@ { "cell_type": "code", "execution_count": 11, + "id": "618d5dec-fdf5-4037-84ab-1dda8c5541af", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
PTensor(shape=(2, 2, 2, 2), inds=[_119073AASiy, _119073AASiu, _119073AASio, _119073AASip], tags={GATE_0, FSIM, I0, I1}),backend=numpy, dtype=None, data=array([[[[1. +0.j , 0. +0.j ],\n", + "
PTensor(shape=(2, 2, 2, 2), inds=[_438f3aAACEb, _438f3aAACEX, _438f3aAACER, _438f3aAACES], tags={GATE_0, FSIM, I0, I1}),backend=numpy, dtype=None, data=array([[[[1. +0.j , 0. +0.j ],\n", " [0. +0.j , 0. +0.j ]],\n", "\n", - " [[0. +0.j , 0.87547496+0.j ],\n", - " [0. -0.48326349j, 0. +0.j ]]],\n", + " [[0. +0.j , 0.67603267+0.j ],\n", + " [0. -0.73687165j, 0. +0.j ]]],\n", "\n", "\n", - " [[[0. +0.j , 0. -0.48326349j],\n", - " [0.87547496+0.j , 0. +0.j ]],\n", + " [[[0. +0.j , 0. -0.73687165j],\n", + " [0.67603267+0.j , 0. +0.j ]],\n", "\n", " [[0. +0.j , 0. +0.j ],\n", - " [0. +0.j , 0.94853626-0.31666855j]]]])
" + " [0. +0.j , 0.77759171-0.62876954j]]]])
" ], "text/plain": [ - "PTensor(shape=(2, 2, 2, 2), inds=('_119073AASiy', '_119073AASiu', '_119073AASio', '_119073AASip'), tags=oset(['GATE_0', 'FSIM', 'I0', 'I1']))" + "PTensor(shape=(2, 2, 2, 2), inds=('_438f3aAACEb', '_438f3aAACEX', '_438f3aAACER', '_438f3aAACES'), tags=oset(['GATE_0', 'FSIM', 'I0', 'I1']))" ] }, "execution_count": 11, @@ -27022,6 +599,7 @@ }, { "cell_type": "markdown", + "id": "288ee59b-4914-4110-9b24-c1961b9be71d", "metadata": {}, "source": [ "For most tasks like contraction these are transparently handled like normal tensors:" @@ -27030,12 +608,13 @@ { "cell_type": "code", "execution_count": 12, + "id": "16e2a04f-3830-4e29-a1bf-f6dea1ded19c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(-0.07115178600720336+0.02949649184357368j)" + "np.complex128(0.027649938444653424-0.003473153420318573j)" ] }, "execution_count": 12, @@ -27049,6 +628,7 @@ }, { "cell_type": "markdown", + "id": "da59b46f-9fed-46eb-b025-1a24741b250b", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -27068,10 +648,7 @@ "\n", "### Compute an amplitude\n", "\n", - ":::{figure} https://i.imgur.com/3mcnDNp.png\n", - ":alt: amplitude\n", - ":width: 300\n", - ":::\n", + "\n", "\n", "- [Circuit.amplitude](quimb.tensor.circuit.Circuit.amplitude)\n", "\n", @@ -27089,20 +666,13 @@ { "cell_type": "code", "execution_count": 13, + "id": "88e01279-272f-4e18-bd36-54a8891afdcc", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/kjs/.pyenv/versions/3.11.9/envs/quimb/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, { "data": { "text/plain": [ - "(-0.0062675896452940244+0.012702244544177444j)" + "(-0.006267589645294032+0.012702244544177538j)" ] }, "execution_count": 13, @@ -27116,16 +686,14 @@ }, { "cell_type": "markdown", + "id": "0630c5a7-3c86-4593-8caf-cf38342bf6e9", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Compute a local expectation\n", "\n", - ":::{figure} https://i.imgur.com/XuXmTMM.png\n", - ":alt: local_expectation\n", - ":width: 300\n", - ":::\n", + "\n", "\n", "- [`Circuit.local_expectation`](quimb.tensor.circuit.Circuit.local_expectation)\n", "\n", @@ -27146,12 +714,13 @@ { "cell_type": "code", "execution_count": 14, + "id": "65273dfe-ed10-47f1-9b7d-dfd0725f0a52", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-0.018188965185456228" + "-0.01818896518545991" ] }, "execution_count": 14, @@ -27165,6 +734,7 @@ }, { "cell_type": "markdown", + "id": "e49efbbf-8080-4e61-9679-c7c11e152d40", "metadata": {}, "source": [ "You can compute several individual expectations on the same sites by supplying a list (they are computed in a single contraction):" @@ -27173,14 +743,15 @@ { "cell_type": "code", "execution_count": 15, + "id": "9c16ca45-3d57-44f8-87fd-468639f46ee4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "((-0.005784719259097598+4.9439619065339e-17j),\n", - " (0.05890188167924251+1.6046192152785466e-17j),\n", - " (-0.018188965185456277-1.474514954580286e-17j))" + "(np.complex128(-0.005784719259098372-2.3124976814589107e-17j),\n", + " np.complex128(0.05890188167925037+7.043679869776645e-17j),\n", + " np.complex128(-0.018188965185458657-6.705296660729364e-18j))" ] }, "execution_count": 15, @@ -27199,16 +770,14 @@ }, { "cell_type": "markdown", + "id": "b6a4e492-ae83-4adb-9777-50983a1cdd92", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Compute a reduced density matrix\n", "\n", - ":::{figure} https://i.imgur.com/DAbEdXg.png\n", - ":alt: partial_trace\n", - ":width: 300\n", - ":::\n", + "\n", "\n", "- [`Circuit.partial_trace`](quimb.tensor.circuit.Circuit.partial_trace)\n", "\n", @@ -27225,12 +794,13 @@ "and so it can be more efficient than repeatedly calling\n", "{meth}`~quimb.tensor.circuit.Circuit.local_expectation`.\n", "\n", - "**Example usage:**\n" + "**Example usage:**" ] }, { "cell_type": "code", "execution_count": 16, + "id": "6f8b7a46-103f-4dcb-9d04-eafb995d3653", "metadata": {}, "outputs": [ { @@ -27253,16 +823,14 @@ }, { "cell_type": "markdown", + "id": "de9818d4-d8ea-4c2c-b5c9-3cb66ca86116", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Compute a marginal probability distribution\n", "\n", - ":::{figure} https://i.imgur.com/stoZ3v8.png\n", - ":alt: compute_marginal\n", - ":width: 400\n", - ":::\n", + "\n", "\n", "- {meth}`~quimb.tensor.circuit.Circuit.compute_marginal`\n", "\n", @@ -27284,12 +852,13 @@ "The result is a $2^{|\\bar{q}|}$ dimensional tensor containing the probabilites for each\n", "bit-string $x_{\\bar{q}}$, given that we have already 'measured' $x_{\\bar{f}}$.\n", "\n", - "**Example usage:**\n" + "**Example usage:**" ] }, { "cell_type": "code", "execution_count": 17, + "id": "5a9db911-0e0e-4455-8178-e86c92f48a2d", "metadata": {}, "outputs": [ { @@ -27312,12 +881,13 @@ { "cell_type": "code", "execution_count": 18, + "id": "2b1fe1ba-e83f-422e-848d-b2d5abbfbd3f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'01'" + "'10'" ] }, "execution_count": 18, @@ -27331,16 +901,14 @@ }, { "cell_type": "markdown", + "id": "96df885d-510c-4052-bbcd-7a8ece61af04", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Generate unbiased samples\n", "\n", - ":::{figure} https://i.imgur.com/egpytOg.png\n", - ":alt: sample\n", - ":width: 800\n", - ":::\n", + "\n", "\n", "- [`Circuit.sample`](quimb.tensor.circuit.Circuit.sample)\n", "\n", @@ -27378,7 +946,7 @@ "\n", ":::{note}\n", "You can set the group size to be that of the whole sytem, which is equivalent to sampling from the full wavefunction,\n", - "if you want to do this, it would be more efficient to call \n", + "if you want to do this, it would be more efficient to call\n", "[`Circuit.simulate_counts`](quimb.tensor.circuit.Circuit.simulate_counts), which\n", "doesn't draw the samples individually.\n", ":::\n", @@ -27386,10 +954,7 @@ "2. **Once we have computed a particular marginal we can cache the result, meaning if we come across the same sub-string result,\n", " we don't need to contract anything again, the trivial example being the first marginal we compute.**\n", "\n", - ":::{figure} https://i.imgur.com/4jnATD2.png\n", - ":alt: branching\n", - ":width: 300\n", - ":::\n", + "\n", "\n", "The second point is easy to understand if we think of the sampling process as the repeated exploration of a\n", "probability tree as above - which is shown for 3 qubits grouped individually, with a first sample of $011$ drawn.\n", @@ -27403,42 +968,87 @@ { "cell_type": "code", "execution_count": 19, + "id": "c4f50cba-1a87-48b6-a073-d578e3a90a45", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0011011010\n", - "0101100000\n", - "0100001010\n", - "0110011111\n", - "1000000001\n", - "1011000100\n", - "1111010101\n", - "0011101001\n", - "0011010001\n", - "0101110000\n" + "1010101000\n", + "0001000000\n", + "1110100111\n", + "0101111110\n", + "1110100000\n", + "1100111000\n", + "1001000111\n", + "1101111000\n", + "0111110001\n", + "1000111011\n" ] } ], "source": [ - "for b in circ.sample(10, group_size=3):\n", + "for b in circ.sample(10):\n", " print(b)" ] }, { "cell_type": "markdown", + "id": "8c76939e-35d2-4fca-b75e-bceeaf914cc1", + "metadata": {}, + "source": [ + "### Generate unbiased samples using the *'gate-by-gate'* method\n", + "\n", + "\n", + "\n", + "- [`Circuit.sample_gate_by_gate`](quimb.tensor.circuit.Circuit.sample_gate_by_gate)\n", + "\n", + "There is an alternative way to compute unbiased samples first introduced in *\"How to simulate quantum measurement without computing marginals\"* by Sergey Bravyi, David Gosset, Yinchen Liu (https://arxiv.org/abs/2112.08499). As illustrated above this essentially propagates a bit-string by sequentially adding more and more gates from the target circuit, and resampling parts of the bit-string corresponding to qubits that are acted on by the added gates. The upshot is that every contraction is no more expensive than computing a single amplitude, though the number of contractions we have to do scales linearly with the depth of the circuit. In many cases the theoretical total flop count of this 'gate-by-gate' method, as compared to the 'qubit-by-qubit' approach above, is significantly better, though practically the computation can still be dominated by subleading steps such as TN simplification - so it is worth comparing the two explicitly!\n", + "\n", + "This method makes use of being to reorder the gates so that groups of adjacent qubits are acted in in close succession. If you call the gate by gate rehearse methods you can access the sequence of circuits used.\n", + "\n", + "**Example usage:**" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5bb08c38-9b0c-41b8-ab34-ff9aa24c5c97", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0110011101\n", + "0010100101\n", + "0010000001\n", + "0101001010\n", + "1101010011\n", + "1110010011\n", + "0001111111\n", + "0100111110\n", + "0001001010\n", + "0001010110\n" + ] + } + ], + "source": [ + "for b in circ.sample_gate_by_gate(10):\n", + " print(b)" + ] + }, + { + "cell_type": "markdown", + "id": "f13d33df-62c0-41a7-93ba-82aec81ed19d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Generate samples from a chaotic circuit\n", "\n", - ":::{figure} https://i.imgur.com/vIw74uS.png\n", - ":alt: sample_chaotic\n", - ":width: 310\n", - ":::\n", + "\n", "\n", "- [`Circuit.sample_chaotic`](quimb.tensor.circuit.Circuit.sample_chaotic)\n", "\n", @@ -27464,28 +1074,29 @@ "superconducting processor\"](https://www.nature.com/articles/s41586-019-1666-5).\n", ":::\n", "\n", - "**Example usage:**\n" + "**Example usage:**" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, + "id": "bd141fe5-5cf4-452f-8de8-552855d86f72", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1000111100\n", - "1001110110\n", - "0101101101\n", - "1110100010\n", - "0101111000\n", - "0001101011\n", - "0000111011\n", - "0110001111\n", - "0110111010\n", - "0110101110\n" + "1100110110\n", + "1111011001\n", + "1101010111\n", + "0010101011\n", + "1110100001\n", + "0100100001\n", + "0010111100\n", + "1101010011\n", + "1111001110\n", + "0010000001\n" ] } ], @@ -27496,6 +1107,7 @@ }, { "cell_type": "markdown", + "id": "9f290c32-c62e-4fd7-85bd-c0b9f48ef7a0", "metadata": {}, "source": [ "Five of these qubits will now be sampled completely randomly." @@ -27503,16 +1115,14 @@ }, { "cell_type": "markdown", + "id": "94dd7bef-873f-46f4-b262-169af327ef81", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "### Compute the dense vector representation of the state\n", "\n", - ":::{figure} https://i.imgur.com/2lak43W.png\n", - ":alt: to_dense\n", - ":width: 500\n", - ":::\n", + "\n", "\n", "- {meth}`~quimb.tensor.circuit.Circuit.to_dense`\n", "\n", @@ -27533,12 +1143,13 @@ "the circuit geometry once.\n", ":::\n", "\n", - "**Example usage:**\n" + "**Example usage:**" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, + "id": "1b4f3d41-b677-4f43-928e-a773253f708d", "metadata": {}, "outputs": [ { @@ -27553,7 +1164,7 @@ " [-0.033285-0.030653j]]" ] }, - "execution_count": 21, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -27564,6 +1175,7 @@ }, { "cell_type": "markdown", + "id": "37b4a489-2570-49a2-8549-2f2ede26993e", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -27579,18 +1191,20 @@ "- [`Circuit.partial_trace_rehearse`](quimb.tensor.circuit.Circuit.partial_trace_rehearse)\n", "- [`Circuit.compute_marginal_rehearse`](quimb.tensor.circuit.Circuit.compute_marginal_rehearse)\n", "- [`Circuit.sample_rehearse`](quimb.tensor.circuit.Circuit.sample_rehearse)\n", + "- [`Circuit.sample_gate_by_gate_rehearse`](quimb.tensor.circuit.Circuit.sample_gate_by_gate_rehearse)\n", "- [`Circuit.sample_chaotic_rehearse`](quimb.tensor.circuit.Circuit.sample_chaotic_rehearse)\n", "- [`Circuit.to_dense_rehearse`](quimb.tensor.circuit.Circuit.to_dense_rehearse)\n", "\n", "These each return a `dict` with the tensor network that *would* be\n", "contracted in the main part of the computation (with the key `'tn'`),\n", "and the {class}`cotengra.ContractionTree` object describing the contraction\n", - "path found for that tensor network (with the key `'tree'`). For example:\n" + "path found for that tensor network (with the key `'tree'`). For example:" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, + "id": "cb933e4d-e142-4b23-945c-f7c9e4891342", "metadata": {}, "outputs": [ { @@ -27599,7 +1213,7 @@ "7.0" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -27614,6 +1228,7 @@ }, { "cell_type": "markdown", + "id": "32b9223e-b760-421f-b81b-3d0a1762a03f", "metadata": {}, "source": [ "Upper twenties is the limit for standard (~10GB) amounts of RAM." @@ -27621,16 +1236,17 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, + "id": "62671971-3f3e-4a61-bf44-1b26ba01ac81", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "3.93791890264778" + "4.059487684274447" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -27646,16 +1262,17 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, + "id": "58298e3d-1af0-45af-a707-0d4c693b9e7e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(0.0074846830625545525+0.030157252558037258j)" + "(44.57893837175564-2.968763081936263j)" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -27667,6 +1284,7 @@ }, { "cell_type": "markdown", + "id": "b011f251-aae9-4e78-93a6-0177b0dbc730", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -27681,7 +1299,8 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, + "id": "53c2ae2d-5282-48da-9cb7-b7d4ea77c178", "metadata": {}, "outputs": [ { @@ -27690,7 +1309,7 @@ "dict_keys([(0, 1, 2), (3, 4, 9), (5, 6, 7), (8,)])" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -27702,7 +1321,8 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, + "id": "cf341e1c-38b4-4ccc-8a05-1b7432aa9b0d", "metadata": {}, "outputs": [ { @@ -27711,7 +1331,7 @@ "dict_keys(['tn', 'tree', 'W', 'C'])" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -27722,6 +1342,7 @@ }, { "cell_type": "markdown", + "id": "2197b25d-9e17-452a-af25-c71ee7063a03", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -27747,12 +1368,13 @@ "Whilst such simplifications can be found by the local simplifications (see below) its\n", "easier and quicker to drop these explicitly.\n", "\n", - "You can see which gate tags are in the reverse lightcone of which regions of qubits by calling:\n" + "You can see which gate tags are in the reverse lightcone of which regions of qubits by calling:" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, + "id": "d9d6b097-35ba-4470-ba10-003fa45c2e7c", "metadata": {}, "outputs": [ { @@ -27770,7 +1392,7 @@ " 'GATE_8')" ] }, - "execution_count": 27, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -27783,7993 +1405,14 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, + "id": "da2012fa-9fef-44fa-ad7d-eb9c9a67b3fb", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:43.548255\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -35787,6 +1430,7 @@ }, { "cell_type": "markdown", + "id": "c4190c50-a516-4b1f-ac6b-646674a796f8", "metadata": {}, "source": [ "We can plot the effect this has as selecting only these, $| \\psi \\rangle \\rightarrow | \\psi_{\\bar{q}} \\rangle$, on the norm with the following:" @@ -35794,11053 +1438,14 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, + "id": "96824aec-a768-4a0a-ba7b-ae8b5f2f547a", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:49.061066\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -46862,6 +1467,7 @@ }, { "cell_type": "markdown", + "id": "3715bbcb-47a9-4c65-b701-dc5e26e25d05", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -46874,6 +1480,7 @@ }, { "cell_type": "markdown", + "id": "ff4c9f02-d48b-49b9-bbb5-8d152f78f952", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -46901,3215 +1508,14 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, + "id": "86c8d9f4-b86b-4700-b0ed-009a0a568985", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:50.588020\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -50133,3902 +1539,23 @@ }, { "cell_type": "markdown", + "id": "1ad19a0c-6c04-4fa9-a959-923e172577e1", "metadata": {}, "source": [ - "You can see that only 3+ dimensional tensors remain. Now if we turn on all the \n", + "You can see that only 3+ dimensional tensors remain. Now if we turn on all the\n", "simplification methods we get an even smaller tensor network:" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, + "id": "188da222-de38-45bc-a01d-50471de07a78", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:32:51.480559\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -54052,6 +1579,7 @@ }, { "cell_type": "markdown", + "id": "2d668dd5-6780-4d54-bf8f-91b2ef915ebb", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54071,219 +1599,220 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, + "id": "16ae7e1c-994b-49c3-9aff-42859dfb46e9", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
TensorNetworkGen(tensors=668, indices=802)
Tensor(shape=(2), inds=[_119073AASbJ], tags={I0, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbK], tags={I1, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbL], tags={I2, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbM], tags={I3, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbN], tags={I4, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbO], tags={I5, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbP], tags={I6, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbQ], tags={I7, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbR], tags={I8, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_119073AASbS], tags={I9, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2, 2), inds=[_119073AASbT, _119073AASbJ], tags={GATE_0, ROUND_0, H, I0}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbU, _119073AASbK], tags={GATE_1, ROUND_0, H, I1}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbV, _119073AASbL], tags={GATE_2, ROUND_0, H, I2}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbW, _119073AASbM], tags={GATE_3, ROUND_0, H, I3}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbY, _119073AASbN], tags={GATE_4, ROUND_0, H, I4}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbZ, _119073AASbO], tags={GATE_5, ROUND_0, H, I5}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbb, _119073AASbP], tags={GATE_6, ROUND_0, H, I6}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbc, _119073AASbQ], tags={GATE_7, ROUND_0, H, I7}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbe, _119073AASbR], tags={GATE_8, ROUND_0, H, I8}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_119073AASbf, _119073AASbS], tags={GATE_9, ROUND_0, H, I9}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", - " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbh, _119073AASbT, b], tags={GATE_10, ROUND_1, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + "
TensorNetworkGen(tensors=668, indices=802)
Tensor(shape=(2), inds=[_438f3aAABwm], tags={I0, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwn], tags={I1, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwo], tags={I2, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwp], tags={I3, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwq], tags={I4, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwr], tags={I5, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABws], tags={I6, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwt], tags={I7, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwu], tags={I8, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2), inds=[_438f3aAABwv], tags={I9, PSI0}),backend=numpy, dtype=complex128, data=array([1.-0.j, 0.-0.j])
Tensor(shape=(2, 2), inds=[_438f3aAABww, _438f3aAABwm], tags={GATE_0, ROUND_0, H, I0}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABwx, _438f3aAABwn], tags={GATE_1, ROUND_0, H, I1}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABwy, _438f3aAABwo], tags={GATE_2, ROUND_0, H, I2}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABwz, _438f3aAABwp], tags={GATE_3, ROUND_0, H, I3}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxB, _438f3aAABwq], tags={GATE_4, ROUND_0, H, I4}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxC, _438f3aAABwr], tags={GATE_5, ROUND_0, H, I5}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxE, _438f3aAABws], tags={GATE_6, ROUND_0, H, I6}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxF, _438f3aAABwt], tags={GATE_7, ROUND_0, H, I7}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxH, _438f3aAABwu], tags={GATE_8, ROUND_0, H, I8}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxI, _438f3aAABwv], tags={GATE_9, ROUND_0, H, I9}),backend=numpy, dtype=complex128, data=array([[ 0.70710678-0.j, 0.70710678-0.j],\n", + " [ 0.70710678-0.j, -0.70710678-0.j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxK, _438f3aAABww, b], tags={GATE_10, ROUND_1, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[b, _119073AASbi, _119073AASbU], tags={GATE_10, ROUND_1, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[b, _438f3aAABxL, _438f3aAABwx], tags={GATE_10, ROUND_1, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbj, _119073AASbV, _119073AASbX], tags={GATE_11, ROUND_1, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxM, _438f3aAABwy, _438f3aAABxA], tags={GATE_11, ROUND_1, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbX, _119073AASbk, _119073AASbW], tags={GATE_11, ROUND_1, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxA, _438f3aAABxN, _438f3aAABwz], tags={GATE_11, ROUND_1, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbl, _119073AASbY, _119073AASba], tags={GATE_12, ROUND_1, CX, I4}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxO, _438f3aAABxB, _438f3aAABxD], tags={GATE_12, ROUND_1, CX, I4}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASba, _119073AASbm, _119073AASbZ], tags={GATE_12, ROUND_1, CX, I5}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxD, _438f3aAABxP, _438f3aAABxC], tags={GATE_12, ROUND_1, CX, I5}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbn, _119073AASbb, _119073AASbd], tags={GATE_13, ROUND_1, CX, I6}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxQ, _438f3aAABxE, _438f3aAABxG], tags={GATE_13, ROUND_1, CX, I6}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbd, _119073AASbo, _119073AASbc], tags={GATE_13, ROUND_1, CX, I7}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxG, _438f3aAABxR, _438f3aAABxF], tags={GATE_13, ROUND_1, CX, I7}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbp, _119073AASbe, _119073AASbg], tags={GATE_14, ROUND_1, CX, I8}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxS, _438f3aAABxH, _438f3aAABxJ], tags={GATE_14, ROUND_1, CX, I8}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbg, _119073AASbq, _119073AASbf], tags={GATE_14, ROUND_1, CX, I9}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxJ, _438f3aAABxT, _438f3aAABxI], tags={GATE_14, ROUND_1, CX, I9}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2), inds=[_119073AAScD, _119073AASbh], tags={GATE_15, ROUND_1, RZ, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASbr, _119073AASbi], tags={GATE_16, ROUND_1, RZ, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASbs, _119073AASbj], tags={GATE_17, ROUND_1, RZ, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASbu, _119073AASbk], tags={GATE_18, ROUND_1, RZ, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASbv, _119073AASbl], tags={GATE_19, ROUND_1, RZ, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASbx, _119073AASbm], tags={GATE_20, ROUND_1, RZ, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASby, _119073AASbn], tags={GATE_21, ROUND_1, RZ, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScA, _119073AASbo], tags={GATE_22, ROUND_1, RZ, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScB, _119073AASbp], tags={GATE_23, ROUND_1, RZ, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScM, _119073AASbq], tags={GATE_24, ROUND_1, RZ, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScE, _119073AASbr, _119073AASbt], tags={GATE_25, ROUND_1, CZ, I1}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABxg, _438f3aAABxK], tags={GATE_15, ROUND_1, RZ, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxU, _438f3aAABxL], tags={GATE_16, ROUND_1, RZ, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxV, _438f3aAABxM], tags={GATE_17, ROUND_1, RZ, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxX, _438f3aAABxN], tags={GATE_18, ROUND_1, RZ, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxY, _438f3aAABxO], tags={GATE_19, ROUND_1, RZ, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxa, _438f3aAABxP], tags={GATE_20, ROUND_1, RZ, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxb, _438f3aAABxQ], tags={GATE_21, ROUND_1, RZ, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxd, _438f3aAABxR], tags={GATE_22, ROUND_1, RZ, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxe, _438f3aAABxS], tags={GATE_23, ROUND_1, RZ, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABxp, _438f3aAABxT], tags={GATE_24, ROUND_1, RZ, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxh, _438f3aAABxU, _438f3aAABxW], tags={GATE_25, ROUND_1, CZ, I1}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbt, _119073AAScF, _119073AASbs], tags={GATE_25, ROUND_1, CZ, I2}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxW, _438f3aAABxi, _438f3aAABxV], tags={GATE_25, ROUND_1, CZ, I2}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScG, _119073AASbu, _119073AASbw], tags={GATE_26, ROUND_1, CZ, I3}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxj, _438f3aAABxX, _438f3aAABxZ], tags={GATE_26, ROUND_1, CZ, I3}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbw, _119073AAScH, _119073AASbv], tags={GATE_26, ROUND_1, CZ, I4}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxZ, _438f3aAABxk, _438f3aAABxY], tags={GATE_26, ROUND_1, CZ, I4}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScI, _119073AASbx, _119073AASbz], tags={GATE_27, ROUND_1, CZ, I5}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxl, _438f3aAABxa, _438f3aAABxc], tags={GATE_27, ROUND_1, CZ, I5}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASbz, _119073AAScJ, _119073AASby], tags={GATE_27, ROUND_1, CZ, I6}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxc, _438f3aAABxm, _438f3aAABxb], tags={GATE_27, ROUND_1, CZ, I6}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScK, _119073AAScA, _119073AAScC], tags={GATE_28, ROUND_1, CZ, I7}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxn, _438f3aAABxd, _438f3aAABxf], tags={GATE_28, ROUND_1, CZ, I7}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScC, _119073AAScL, _119073AAScB], tags={GATE_28, ROUND_1, CZ, I8}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxf, _438f3aAABxo, _438f3aAABxe], tags={GATE_28, ROUND_1, CZ, I8}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2), inds=[_119073AAScN, _119073AAScD], tags={GATE_29, ROUND_1, RX, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScO, _119073AAScE], tags={GATE_30, ROUND_1, RX, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScQ, _119073AAScF], tags={GATE_31, ROUND_1, RX, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScR, _119073AAScG], tags={GATE_32, ROUND_1, RX, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScT, _119073AAScH], tags={GATE_33, ROUND_1, RX, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScU, _119073AAScI], tags={GATE_34, ROUND_1, RX, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScW, _119073AAScJ], tags={GATE_35, ROUND_1, RX, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScX, _119073AAScK], tags={GATE_36, ROUND_1, RX, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AAScZ, _119073AAScL], tags={GATE_37, ROUND_1, RX, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASca, _119073AAScM], tags={GATE_38, ROUND_1, RX, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScc, _119073AAScN, _119073AAScP], tags={GATE_39, ROUND_2, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABxq, _438f3aAABxg], tags={GATE_29, ROUND_1, RX, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxr, _438f3aAABxh], tags={GATE_30, ROUND_1, RX, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxt, _438f3aAABxi], tags={GATE_31, ROUND_1, RX, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxu, _438f3aAABxj], tags={GATE_32, ROUND_1, RX, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxw, _438f3aAABxk], tags={GATE_33, ROUND_1, RX, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxx, _438f3aAABxl], tags={GATE_34, ROUND_1, RX, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABxz, _438f3aAABxm], tags={GATE_35, ROUND_1, RX, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByA, _438f3aAABxn], tags={GATE_36, ROUND_1, RX, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByC, _438f3aAABxo], tags={GATE_37, ROUND_1, RX, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByD, _438f3aAABxp], tags={GATE_38, ROUND_1, RX, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByF, _438f3aAABxq, _438f3aAABxs], tags={GATE_39, ROUND_2, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScP, _119073AAScd, _119073AAScO], tags={GATE_39, ROUND_2, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxs, _438f3aAAByG, _438f3aAABxr], tags={GATE_39, ROUND_2, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASce, _119073AAScQ, _119073AAScS], tags={GATE_40, ROUND_2, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByH, _438f3aAABxt, _438f3aAABxv], tags={GATE_40, ROUND_2, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScS, _119073AAScf, _119073AAScR], tags={GATE_40, ROUND_2, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxv, _438f3aAAByI, _438f3aAABxu], tags={GATE_40, ROUND_2, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScg, _119073AAScT, _119073AAScV], tags={GATE_41, ROUND_2, CX, I4}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByJ, _438f3aAABxw, _438f3aAABxy], tags={GATE_41, ROUND_2, CX, I4}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScV, _119073AASch, _119073AAScU], tags={GATE_41, ROUND_2, CX, I5}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABxy, _438f3aAAByK, _438f3aAABxx], tags={GATE_41, ROUND_2, CX, I5}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASci, _119073AAScW, _119073AAScY], tags={GATE_42, ROUND_2, CX, I6}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByL, _438f3aAABxz, _438f3aAAByB], tags={GATE_42, ROUND_2, CX, I6}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScY, _119073AAScj, _119073AAScX], tags={GATE_42, ROUND_2, CX, I7}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByB, _438f3aAAByM, _438f3aAAByA], tags={GATE_42, ROUND_2, CX, I7}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASck, _119073AAScZ, _119073AAScb], tags={GATE_43, ROUND_2, CX, I8}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByN, _438f3aAAByC, _438f3aAAByE], tags={GATE_43, ROUND_2, CX, I8}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScb, _119073AAScl, _119073AASca], tags={GATE_43, ROUND_2, CX, I9}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByE, _438f3aAAByO, _438f3aAAByD], tags={GATE_43, ROUND_2, CX, I9}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2), inds=[_119073AAScy, _119073AAScc], tags={GATE_44, ROUND_2, RZ, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScm, _119073AAScd], tags={GATE_45, ROUND_2, RZ, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScn, _119073AASce], tags={GATE_46, ROUND_2, RZ, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScp, _119073AAScf], tags={GATE_47, ROUND_2, RZ, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScq, _119073AAScg], tags={GATE_48, ROUND_2, RZ, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScs, _119073AASch], tags={GATE_49, ROUND_2, RZ, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASct, _119073AASci], tags={GATE_50, ROUND_2, RZ, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScv, _119073AAScj], tags={GATE_51, ROUND_2, RZ, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAScw, _119073AASck], tags={GATE_52, ROUND_2, RZ, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASdH, _119073AAScl], tags={GATE_53, ROUND_2, RZ, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", - " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScz, _119073AAScm, _119073AASco], tags={GATE_54, ROUND_2, CZ, I1}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAByb, _438f3aAAByF], tags={GATE_44, ROUND_2, RZ, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByP, _438f3aAAByG], tags={GATE_45, ROUND_2, RZ, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByQ, _438f3aAAByH], tags={GATE_46, ROUND_2, RZ, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByS, _438f3aAAByI], tags={GATE_47, ROUND_2, RZ, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByT, _438f3aAAByJ], tags={GATE_48, ROUND_2, RZ, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByV, _438f3aAAByK], tags={GATE_49, ROUND_2, RZ, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByW, _438f3aAAByL], tags={GATE_50, ROUND_2, RZ, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByY, _438f3aAAByM], tags={GATE_51, ROUND_2, RZ, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByZ, _438f3aAAByN], tags={GATE_52, ROUND_2, RZ, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAByk, _438f3aAAByO], tags={GATE_53, ROUND_2, RZ, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179+0.57859091j, 0. -0.j ],\n", + " [0. -0.j , 0.8156179-0.57859091j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByc, _438f3aAAByP, _438f3aAAByR], tags={GATE_54, ROUND_2, CZ, I1}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASco, _119073AASdA, _119073AAScn], tags={GATE_54, ROUND_2, CZ, I2}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByR, _438f3aAAByd, _438f3aAAByQ], tags={GATE_54, ROUND_2, CZ, I2}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdB, _119073AAScp, _119073AAScr], tags={GATE_55, ROUND_2, CZ, I3}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABye, _438f3aAAByS, _438f3aAAByU], tags={GATE_55, ROUND_2, CZ, I3}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScr, _119073AASdC, _119073AAScq], tags={GATE_55, ROUND_2, CZ, I4}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByU, _438f3aAAByf, _438f3aAAByT], tags={GATE_55, ROUND_2, CZ, I4}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdD, _119073AAScs, _119073AAScu], tags={GATE_56, ROUND_2, CZ, I5}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByg, _438f3aAAByV, _438f3aAAByX], tags={GATE_56, ROUND_2, CZ, I5}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScu, _119073AASdE, _119073AASct], tags={GATE_56, ROUND_2, CZ, I6}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByX, _438f3aAAByh, _438f3aAAByW], tags={GATE_56, ROUND_2, CZ, I6}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdF, _119073AAScv, _119073AAScx], tags={GATE_57, ROUND_2, CZ, I7}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByi, _438f3aAAByY, _438f3aAABya], tags={GATE_57, ROUND_2, CZ, I7}),backend=numpy, dtype=complex128, data=array([[[-0.34461337-0.j, 1.13818065-0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAScx, _119073AASdG, _119073AAScw], tags={GATE_57, ROUND_2, CZ, I8}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", - " [ 0. -0.j, 0.5611368 -0.j]],\n", + " [-1.13818065-0.j, -0.34461337-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABya, _438f3aAAByj, _438f3aAAByZ], tags={GATE_57, ROUND_2, CZ, I8}),backend=numpy, dtype=complex128, data=array([[[-1.04849371-0.j, 0. -0.j],\n", + " [-0. -0.j, 0.5611368 -0.j]],\n", "\n", " [[ 0.5611368 -0.j, 0. -0.j],\n", - " [ 0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2), inds=[_119073AASdI, _119073AAScy], tags={GATE_58, ROUND_2, RX, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdJ, _119073AAScz], tags={GATE_59, ROUND_2, RX, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdL, _119073AASdA], tags={GATE_60, ROUND_2, RX, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdM, _119073AASdB], tags={GATE_61, ROUND_2, RX, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdO, _119073AASdC], tags={GATE_62, ROUND_2, RX, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdP, _119073AASdD], tags={GATE_63, ROUND_2, RX, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdR, _119073AASdE], tags={GATE_64, ROUND_2, RX, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdS, _119073AASdF], tags={GATE_65, ROUND_2, RX, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdU, _119073AASdG], tags={GATE_66, ROUND_2, RX, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_119073AASdV, _119073AASdH], tags={GATE_67, ROUND_2, RX, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", - " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdX, _119073AASdI, _119073AASdK], tags={GATE_68, ROUND_3, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0. -0.j, 1.04849371-0.j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAByl, _438f3aAAByb], tags={GATE_58, ROUND_2, RX, I0}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABym, _438f3aAAByc], tags={GATE_59, ROUND_2, RX, I1}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByo, _438f3aAAByd], tags={GATE_60, ROUND_2, RX, I2}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByp, _438f3aAABye], tags={GATE_61, ROUND_2, RX, I3}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByr, _438f3aAAByf], tags={GATE_62, ROUND_2, RX, I4}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAABys, _438f3aAAByg], tags={GATE_63, ROUND_2, RX, I5}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByu, _438f3aAAByh], tags={GATE_64, ROUND_2, RX, I6}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByv, _438f3aAAByi], tags={GATE_65, ROUND_2, RX, I7}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByx, _438f3aAAByj], tags={GATE_66, ROUND_2, RX, I8}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2), inds=[_438f3aAAByy, _438f3aAAByk], tags={GATE_67, ROUND_2, RX, I9}),backend=numpy, dtype=complex128, data=array([[0.8156179-0.j , 0. +0.57859091j],\n", + " [0. +0.57859091j, 0.8156179-0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABzA, _438f3aAAByl, _438f3aAAByn], tags={GATE_68, ROUND_3, CX, I0}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdK, _119073AASdY, _119073AASdJ], tags={GATE_68, ROUND_3, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByn, _438f3aAABzB, _438f3aAABym], tags={GATE_68, ROUND_3, CX, I1}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", - " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdZ, _119073AASdL, _119073AASdN], tags={GATE_69, ROUND_3, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", + " [-0.84089642-0.j, 0. -0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABzC, _438f3aAAByo, _438f3aAAByq], tags={GATE_69, ROUND_3, CX, I2}),backend=numpy, dtype=complex128, data=array([[[ 1.18920712-0.j, 0. -0.j],\n", " [ 0. -0.j, 0. -0.j]],\n", "\n", " [[ 0. -0.j, 0. -0.j],\n", - " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdN, _119073AASda, _119073AASdM], tags={GATE_69, ROUND_3, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", + " [ 0. -0.j, -1.18920712-0.j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByq, _438f3aAABzD, _438f3aAAByp], tags={GATE_69, ROUND_3, CX, I3}),backend=numpy, dtype=complex128, data=array([[[ 0.84089642-0.j, 0. -0.j],\n", " [ 0. -0.j, 0.84089642-0.j]],\n", "\n", " [[-0. -0.j, -0.84089642-0.j],\n", @@ -54293,7 +1822,7 @@ "TensorNetworkGen(tensors=668, indices=802)" ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -54305,30 +1834,31 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, + "id": "899cfb2b-f7f4-41bf-b4f0-a5cd3918b951", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
TensorNetworkGen(tensors=87, indices=67)
Tensor(shape=(2, 2), inds=[_119073AAYDm, _119073AAYDn], tags={GATE_138, ROUND_5, RZ, I7, GATE_144, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASfo, _119073AAYDl], tags={GATE_136, ROUND_5, RZ, I5, GATE_143, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYCr, _119073AAYCs], tags={GATE_109, ROUND_4, RZ, I7, GATE_115, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYCp, _119073AAYCq], tags={GATE_107, ROUND_4, RZ, I5, GATE_114, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASer, _119073AAYCo], tags={GATE_105, ROUND_4, RZ, I3, GATE_113, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYBw, _119073AAYBx], tags={GATE_80, ROUND_3, RZ, I7, GATE_86, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYBu, _119073AAYBv], tags={GATE_78, ROUND_3, RZ, I5, GATE_85, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYBs, _119073AAYBt], tags={GATE_76, ROUND_3, RZ, I3, GATE_84, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASdu, _119073AAYBr], tags={GATE_74, ROUND_3, RZ, I1, GATE_83, CZ, I2}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", - " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYEh, _119073AASgm], tags={GATE_167, ROUND_6, RZ, I7, GATE_173, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASfq, _119073AASfr], tags={GATE_138, ROUND_5, RZ, I7, GATE_144, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASev, _119073AASew], tags={GATE_109, ROUND_4, RZ, I7, GATE_115, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASet, _119073AASeu], tags={GATE_107, ROUND_4, RZ, I5, GATE_114, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASeA, _119073AASeB], tags={GATE_80, ROUND_3, RZ, I7, GATE_86, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASdy, _119073AASdz], tags={GATE_78, ROUND_3, RZ, I5, GATE_85, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AASdw, _119073AASdx], tags={GATE_76, ROUND_3, RZ, I3, GATE_84, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", - " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_119073AAYEi, _119073AAYDn], tags={GATE_159, ROUND_6, CX, I8, GATE_153, ROUND_5, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYEi, _119073AAYEj, _119073AAYDo], tags={GATE_168, ROUND_6, RZ, I8, GATE_169, I9, GATE_154, ROUND_5, RX, GATE_159, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", + "
TensorNetworkGen(tensors=87, indices=67)
Tensor(shape=(2, 2), inds=[_438f3aAAFVl, _438f3aAAFVm], tags={GATE_138, ROUND_5, RZ, I7, GATE_144, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAACBR, _438f3aAAFVk], tags={GATE_136, ROUND_5, RZ, I5, GATE_143, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUq, _438f3aAAFUr], tags={GATE_109, ROUND_4, RZ, I7, GATE_115, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUo, _438f3aAAFUp], tags={GATE_107, ROUND_4, RZ, I5, GATE_114, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAACAU, _438f3aAAFUn], tags={GATE_105, ROUND_4, RZ, I3, GATE_113, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTv, _438f3aAAFTw], tags={GATE_80, ROUND_3, RZ, I7, GATE_86, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTt, _438f3aAAFTu], tags={GATE_78, ROUND_3, RZ, I5, GATE_85, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTr, _438f3aAAFTs], tags={GATE_76, ROUND_3, RZ, I3, GATE_84, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABzX, _438f3aAAFTq], tags={GATE_74, ROUND_3, RZ, I1, GATE_83, CZ, I2}),backend=numpy, dtype=complex128, data=array([[ 0.8156179-0.57859091j, 0.8156179-0.57859091j],\n", + " [ 0.8156179+0.57859091j, -0.8156179-0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFWg, _438f3aAACCP], tags={GATE_167, ROUND_6, RZ, I7, GATE_173, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAACBT, _438f3aAACBU], tags={GATE_138, ROUND_5, RZ, I7, GATE_144, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAACAY, _438f3aAACAZ], tags={GATE_109, ROUND_4, RZ, I7, GATE_115, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAACAW, _438f3aAACAX], tags={GATE_107, ROUND_4, RZ, I5, GATE_114, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABzd, _438f3aAABze], tags={GATE_80, ROUND_3, RZ, I7, GATE_86, CZ, I8}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABzb, _438f3aAABzc], tags={GATE_78, ROUND_3, RZ, I5, GATE_85, CZ, I6}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAABzZ, _438f3aAABza], tags={GATE_76, ROUND_3, RZ, I3, GATE_84, CZ, I4}),backend=numpy, dtype=complex128, data=array([[ 0.8156179+0.57859091j, 0.8156179+0.57859091j],\n", + " [ 0.8156179-0.57859091j, -0.8156179+0.57859091j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFWh, _438f3aAAFVm], tags={GATE_159, ROUND_6, CX, I8, GATE_153, ROUND_5, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFWh, _438f3aAAFWi, _438f3aAAFVn], tags={GATE_168, ROUND_6, RZ, I8, GATE_169, I9, GATE_154, ROUND_5, RX, GATE_159, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", " -4.59200617e-01-1.60782850e-01j],\n", " [-2.51780799e-18-4.86535026e-01j,\n", " 6.85850166e-01+2.33613923e-17j]],\n", @@ -54336,12 +1866,12 @@ " [[-2.51780799e-18+4.86535026e-01j,\n", " -6.85850166e-01+2.33613923e-17j],\n", " [-2.26649549e-01-6.47317875e-01j,\n", - " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASgk, _119073AAYDm, _119073AAYEh], tags={GATE_166, ROUND_6, RZ, I6, GATE_152, ROUND_5, RX, I7, GATE_158, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACCN, _438f3aAAFVl, _438f3aAAFWg], tags={GATE_166, ROUND_6, RZ, I6, GATE_152, ROUND_5, RX, I7, GATE_158, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYDn, _119073AAYCs], tags={GATE_130, ROUND_5, CX, I8, GATE_124, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYDn, _119073AAYDo, _119073AAYCt], tags={GATE_139, ROUND_5, RZ, I8, GATE_140, I9, GATE_125, ROUND_4, RX, GATE_130, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFVm, _438f3aAAFUr], tags={GATE_130, ROUND_5, CX, I8, GATE_124, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFVm, _438f3aAAFVn, _438f3aAAFUs], tags={GATE_139, ROUND_5, RZ, I8, GATE_140, I9, GATE_125, ROUND_4, RX, GATE_130, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", " -4.59200617e-01-1.60782850e-01j],\n", " [-2.51780799e-18-4.86535026e-01j,\n", " 6.85850166e-01+2.33613923e-17j]],\n", @@ -54349,13 +1879,13 @@ " [[-2.51780799e-18+4.86535026e-01j,\n", " -6.85850166e-01+2.33613923e-17j],\n", " [-2.26649549e-01-6.47317875e-01j,\n", - " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AAYDl, _119073AAYCq], tags={GATE_129, ROUND_5, CX, I6, GATE_122, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYDl, _119073AAYCr, _119073AAYDm], tags={GATE_137, ROUND_5, RZ, I6, GATE_123, ROUND_4, RX, I7, GATE_129, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFVk, _438f3aAAFUp], tags={GATE_129, ROUND_5, CX, I6, GATE_122, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFVk, _438f3aAAFUq, _438f3aAAFVl], tags={GATE_137, ROUND_5, RZ, I6, GATE_123, ROUND_4, RX, I7, GATE_129, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYCs, _119073AAYBx], tags={GATE_101, ROUND_4, CX, I8, GATE_95, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYCs, _119073AAYCt, _119073AAYBy], tags={GATE_110, ROUND_4, RZ, I8, GATE_111, I9, GATE_96, ROUND_3, RX, GATE_101, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUr, _438f3aAAFTw], tags={GATE_101, ROUND_4, CX, I8, GATE_95, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFUr, _438f3aAAFUs, _438f3aAAFTx], tags={GATE_110, ROUND_4, RZ, I8, GATE_111, I9, GATE_96, ROUND_3, RX, GATE_101, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", " -4.59200617e-01-1.60782850e-01j],\n", " [-2.51780799e-18-4.86535026e-01j,\n", " 6.85850166e-01+2.33613923e-17j]],\n", @@ -54363,18 +1893,18 @@ " [[-2.51780799e-18+4.86535026e-01j,\n", " -6.85850166e-01+2.33613923e-17j],\n", " [-2.26649549e-01-6.47317875e-01j,\n", - " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AAYCq, _119073AAYBv], tags={GATE_100, ROUND_4, CX, I6, GATE_93, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYCq, _119073AAYBw, _119073AAYCr], tags={GATE_108, ROUND_4, RZ, I6, GATE_94, ROUND_3, RX, I7, GATE_100, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUp, _438f3aAAFTu], tags={GATE_100, ROUND_4, CX, I6, GATE_93, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFUp, _438f3aAAFTv, _438f3aAAFUq], tags={GATE_108, ROUND_4, RZ, I6, GATE_94, ROUND_3, RX, I7, GATE_100, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYCo, _119073AAYBt], tags={GATE_99, ROUND_4, CX, I4, GATE_91, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYCo, _119073AAYBu, _119073AAYCp], tags={GATE_106, ROUND_4, RZ, I4, GATE_92, ROUND_3, RX, I5, GATE_99, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUn, _438f3aAAFTs], tags={GATE_99, ROUND_4, CX, I4, GATE_91, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFUn, _438f3aAAFTt, _438f3aAAFUo], tags={GATE_106, ROUND_4, RZ, I4, GATE_92, ROUND_3, RX, I5, GATE_99, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYBx, _119073AAYBC], tags={GATE_72, ROUND_3, CX, I8, GATE_66, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBx, _119073AAYBy, _119073AAYBD], tags={GATE_81, ROUND_3, RZ, I8, GATE_82, I9, GATE_67, ROUND_2, RX, GATE_72, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTw, _438f3aAAFTB], tags={GATE_72, ROUND_3, CX, I8, GATE_66, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFTw, _438f3aAAFTx, _438f3aAAFTC], tags={GATE_81, ROUND_3, RZ, I8, GATE_82, I9, GATE_67, ROUND_2, RX, GATE_72, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01-6.47317875e-01j,\n", " -4.59200617e-01-1.60782850e-01j],\n", " [-2.51780799e-18-4.86535026e-01j,\n", " 6.85850166e-01+2.33613923e-17j]],\n", @@ -54382,27 +1912,27 @@ " [[-2.51780799e-18+4.86535026e-01j,\n", " -6.85850166e-01+2.33613923e-17j],\n", " [-2.26649549e-01-6.47317875e-01j,\n", - " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AAYBv, _119073AAYBA], tags={GATE_71, ROUND_3, CX, I6, GATE_64, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBv, _119073AAYBB, _119073AAYBw], tags={GATE_79, ROUND_3, RZ, I6, GATE_65, ROUND_2, RX, I7, GATE_71, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " -4.59200617e-01+1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTu, _438f3aAAFSz], tags={GATE_71, ROUND_3, CX, I6, GATE_64, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFTu, _438f3aAAFTA, _438f3aAAFTv], tags={GATE_79, ROUND_3, RZ, I6, GATE_65, ROUND_2, RX, I7, GATE_71, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYBt, _119073AAYAy], tags={GATE_70, ROUND_3, CX, I4, GATE_62, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBt, _119073AAYAz, _119073AAYBu], tags={GATE_77, ROUND_3, RZ, I4, GATE_63, ROUND_2, RX, I5, GATE_70, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTs, _438f3aAAFSx], tags={GATE_70, ROUND_3, CX, I4, GATE_62, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFTs, _438f3aAAFSy, _438f3aAAFTt], tags={GATE_77, ROUND_3, RZ, I4, GATE_63, ROUND_2, RX, I5, GATE_70, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYBr, _119073AAYAw], tags={GATE_69, ROUND_3, CX, I2, GATE_60, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", - " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBr, _119073AAYAx, _119073AAYBs], tags={GATE_75, ROUND_3, RZ, I2, GATE_61, ROUND_2, RX, I3, GATE_69, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTq, _438f3aAAFSv], tags={GATE_69, ROUND_3, CX, I2, GATE_60, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.j , 0. -0.68806443j],\n", + " [ 0. +0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFTq, _438f3aAAFSw, _438f3aAAFTr], tags={GATE_75, ROUND_3, RZ, I2, GATE_61, ROUND_2, RX, I3, GATE_69, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYBC, _119073AAYBB], tags={GATE_43, ROUND_2, CX, I8, GATE_51, RZ, I7, GATE_57, CZ}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.68806443j, 0.96993861+0.68806443j],\n", - " [-0.96993861+0.68806443j, 0.96993861+0.68806443j]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBA, _119073AAYAG, _119073AAYBB], tags={GATE_50, ROUND_2, RZ, I6, GATE_36, ROUND_1, RX, I7, GATE_42, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFTB, _438f3aAAFTA], tags={GATE_43, ROUND_2, CX, I8, GATE_51, RZ, I7, GATE_57, CZ}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.68806443j, 0.96993861+0.68806443j],\n", + " [-0.96993861+0.68806443j, 0.96993861+0.68806443j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFSz, _438f3aAAFSF, _438f3aAAFTA], tags={GATE_50, ROUND_2, RZ, I6, GATE_36, ROUND_1, RX, I7, GATE_42, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167-0.39682667j, -0.28150475-0.39682667j],\n", " [-0.28150475-0.39682667j, 0.55939167-0.39682667j]],\n", "\n", " [[-0.28150475+0.39682667j, -0.55939167-0.39682667j],\n", - " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAShh, _119073AAYFe, _119073AASgn], tags={GATE_197, ROUND_7, RZ, I8, GATE_198, I9, GATE_183, ROUND_6, RX, GATE_188, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", + " [-0.55939167-0.39682667j, -0.28150475+0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACDK, _438f3aAAFXd, _438f3aAACCQ], tags={GATE_197, ROUND_7, RZ, I8, GATE_198, I9, GATE_183, ROUND_6, RX, GATE_188, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", " -4.59200617e-01+1.60782850e-01j],\n", " [-2.51780799e-18+4.86535026e-01j,\n", " 6.85850166e-01-2.33613923e-17j]],\n", @@ -54410,8 +1940,8 @@ " [[-2.51780799e-18-4.86535026e-01j,\n", " -6.85850166e-01-2.33613923e-17j],\n", " [-2.26649549e-01+6.47317875e-01j,\n", - " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AASgm, _119073AASfr], tags={GATE_159, ROUND_6, CX, I8, GATE_153, ROUND_5, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASgm, _119073AASgn, _119073AASfs], tags={GATE_168, ROUND_6, RZ, I8, GATE_169, I9, GATE_154, ROUND_5, RX, GATE_159, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", + " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACCP, _438f3aAACBU], tags={GATE_159, ROUND_6, CX, I8, GATE_153, ROUND_5, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACCP, _438f3aAACCQ, _438f3aAACBV], tags={GATE_168, ROUND_6, RZ, I8, GATE_169, I9, GATE_154, ROUND_5, RX, GATE_159, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", " -4.59200617e-01+1.60782850e-01j],\n", " [-2.51780799e-18+4.86535026e-01j,\n", " 6.85850166e-01-2.33613923e-17j]],\n", @@ -54419,12 +1949,12 @@ " [[-2.51780799e-18-4.86535026e-01j,\n", " -6.85850166e-01-2.33613923e-17j],\n", " [-2.26649549e-01+6.47317875e-01j,\n", - " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASgk, _119073AASfq, _119073AAYEh], tags={GATE_166, ROUND_6, RZ, I6, GATE_152, ROUND_5, RX, I7, GATE_158, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACCN, _438f3aAACBT, _438f3aAAFWg], tags={GATE_166, ROUND_6, RZ, I6, GATE_152, ROUND_5, RX, I7, GATE_158, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASfr, _119073AASew], tags={GATE_130, ROUND_5, CX, I8, GATE_124, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASfr, _119073AASfs, _119073AASex], tags={GATE_139, ROUND_5, RZ, I8, GATE_140, I9, GATE_125, ROUND_4, RX, GATE_130, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACBU, _438f3aAACAZ], tags={GATE_130, ROUND_5, CX, I8, GATE_124, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACBU, _438f3aAACBV, _438f3aAACAa], tags={GATE_139, ROUND_5, RZ, I8, GATE_140, I9, GATE_125, ROUND_4, RX, GATE_130, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", " -4.59200617e-01+1.60782850e-01j],\n", " [-2.51780799e-18+4.86535026e-01j,\n", " 6.85850166e-01-2.33613923e-17j]],\n", @@ -54432,18 +1962,18 @@ " [[-2.51780799e-18-4.86535026e-01j,\n", " -6.85850166e-01-2.33613923e-17j],\n", " [-2.26649549e-01+6.47317875e-01j,\n", - " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AASfp, _119073AASeu], tags={GATE_129, ROUND_5, CX, I6, GATE_122, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASfp, _119073AASev, _119073AASfq], tags={GATE_137, ROUND_5, RZ, I6, GATE_123, ROUND_4, RX, I7, GATE_129, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACBS, _438f3aAACAX], tags={GATE_129, ROUND_5, CX, I6, GATE_122, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACBS, _438f3aAACAY, _438f3aAACBT], tags={GATE_137, ROUND_5, RZ, I6, GATE_123, ROUND_4, RX, I7, GATE_129, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYDj, _119073AASes], tags={GATE_128, ROUND_5, CX, I4, GATE_120, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYDj, _119073AASet, _119073AASfo], tags={GATE_135, ROUND_5, RZ, I4, GATE_121, ROUND_4, RX, I5, GATE_128, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFVi, _438f3aAACAV], tags={GATE_128, ROUND_5, CX, I4, GATE_120, ROUND_4, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFVi, _438f3aAACAW, _438f3aAACBR], tags={GATE_135, ROUND_5, RZ, I4, GATE_121, ROUND_4, RX, I5, GATE_128, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASew, _119073AASeB], tags={GATE_101, ROUND_4, CX, I8, GATE_95, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASew, _119073AASex, _119073AASeC], tags={GATE_110, ROUND_4, RZ, I8, GATE_111, I9, GATE_96, ROUND_3, RX, GATE_101, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACAZ, _438f3aAABze], tags={GATE_101, ROUND_4, CX, I8, GATE_95, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACAZ, _438f3aAACAa, _438f3aAABzf], tags={GATE_110, ROUND_4, RZ, I8, GATE_111, I9, GATE_96, ROUND_3, RX, GATE_101, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", " -4.59200617e-01+1.60782850e-01j],\n", " [-2.51780799e-18+4.86535026e-01j,\n", " 6.85850166e-01-2.33613923e-17j]],\n", @@ -54451,23 +1981,23 @@ " [[-2.51780799e-18-4.86535026e-01j,\n", " -6.85850166e-01-2.33613923e-17j],\n", " [-2.26649549e-01+6.47317875e-01j,\n", - " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AASeu, _119073AASdz], tags={GATE_100, ROUND_4, CX, I6, GATE_93, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASeu, _119073AASeA, _119073AASev], tags={GATE_108, ROUND_4, RZ, I6, GATE_94, ROUND_3, RX, I7, GATE_100, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACAX, _438f3aAABzc], tags={GATE_100, ROUND_4, CX, I6, GATE_93, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACAX, _438f3aAABzd, _438f3aAACAY], tags={GATE_108, ROUND_4, RZ, I6, GATE_94, ROUND_3, RX, I7, GATE_100, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASes, _119073AASdx], tags={GATE_99, ROUND_4, CX, I4, GATE_91, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASes, _119073AASdy, _119073AASet], tags={GATE_106, ROUND_4, RZ, I4, GATE_92, ROUND_3, RX, I5, GATE_99, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACAV, _438f3aAABza], tags={GATE_99, ROUND_4, CX, I4, GATE_91, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACAV, _438f3aAABzb, _438f3aAACAW], tags={GATE_106, ROUND_4, RZ, I4, GATE_92, ROUND_3, RX, I5, GATE_99, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AAYCm, _119073AASdv], tags={GATE_98, ROUND_4, CX, I2, GATE_89, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYCm, _119073AASdw, _119073AASer], tags={GATE_104, ROUND_4, RZ, I2, GATE_90, ROUND_3, RX, I3, GATE_98, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUl, _438f3aAABzY], tags={GATE_98, ROUND_4, CX, I2, GATE_89, ROUND_3, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFUl, _438f3aAABzZ, _438f3aAACAU], tags={GATE_104, ROUND_4, RZ, I2, GATE_90, ROUND_3, RX, I3, GATE_98, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASeB, _119073AASdG], tags={GATE_72, ROUND_3, CX, I8, GATE_66, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASeB, _119073AASeC, _119073AASdH], tags={GATE_81, ROUND_3, RZ, I8, GATE_82, I9, GATE_67, ROUND_2, RX, GATE_72, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABze, _438f3aAAByj], tags={GATE_72, ROUND_3, CX, I8, GATE_66, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABze, _438f3aAABzf, _438f3aAAByk], tags={GATE_81, ROUND_3, RZ, I8, GATE_82, I9, GATE_67, ROUND_2, RX, GATE_72, CX}),backend=numpy, dtype=complex128, data=array([[[ 2.26649549e-01+6.47317875e-01j,\n", " -4.59200617e-01+1.60782850e-01j],\n", " [-2.51780799e-18+4.86535026e-01j,\n", " 6.85850166e-01-2.33613923e-17j]],\n", @@ -54475,87 +2005,87 @@ " [[-2.51780799e-18-4.86535026e-01j,\n", " -6.85850166e-01-2.33613923e-17j],\n", " [-2.26649549e-01+6.47317875e-01j,\n", - " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AASdz, _119073AASdE], tags={GATE_71, ROUND_3, CX, I6, GATE_64, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdz, _119073AASdF, _119073AASeA], tags={GATE_79, ROUND_3, RZ, I6, GATE_65, ROUND_2, RX, I7, GATE_71, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " -4.59200617e-01-1.60782850e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABzc, _438f3aAAByh], tags={GATE_71, ROUND_3, CX, I6, GATE_64, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABzc, _438f3aAAByi, _438f3aAABzd], tags={GATE_79, ROUND_3, RZ, I6, GATE_65, ROUND_2, RX, I7, GATE_71, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASdx, _119073AASdC], tags={GATE_70, ROUND_3, CX, I4, GATE_62, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdx, _119073AASdD, _119073AASdy], tags={GATE_77, ROUND_3, RZ, I4, GATE_63, ROUND_2, RX, I5, GATE_70, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABza, _438f3aAAByf], tags={GATE_70, ROUND_3, CX, I4, GATE_62, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABza, _438f3aAAByg, _438f3aAABzb], tags={GATE_77, ROUND_3, RZ, I4, GATE_63, ROUND_2, RX, I5, GATE_70, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASdv, _119073AASdA], tags={GATE_69, ROUND_3, CX, I2, GATE_60, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", - " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdv, _119073AASdB, _119073AASdw], tags={GATE_75, ROUND_3, RZ, I2, GATE_61, ROUND_2, RX, I3, GATE_69, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABzY, _438f3aAAByd], tags={GATE_69, ROUND_3, CX, I2, GATE_60, ROUND_2, RX}),backend=numpy, dtype=complex128, data=array([[ 0.96993861-0.j , 0. +0.68806443j],\n", + " [ 0. -0.68806443j, -0.96993861+0.j ]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABzY, _438f3aAABye, _438f3aAABzZ], tags={GATE_75, ROUND_3, RZ, I2, GATE_61, ROUND_2, RX, I3, GATE_69, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASdG, _119073AASdF], tags={GATE_43, ROUND_2, CX, I8, GATE_51, RZ, I7, GATE_57, CZ}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.68806443j, 0.96993861-0.68806443j],\n", - " [-0.96993861-0.68806443j, 0.96993861-0.68806443j]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdE, _119073AAScK, _119073AASdF], tags={GATE_50, ROUND_2, RZ, I6, GATE_36, ROUND_1, RX, I7, GATE_42, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAAByj, _438f3aAAByi], tags={GATE_43, ROUND_2, CX, I8, GATE_51, RZ, I7, GATE_57, CZ}),backend=numpy, dtype=complex128, data=array([[ 0.96993861+0.68806443j, 0.96993861-0.68806443j],\n", + " [-0.96993861-0.68806443j, 0.96993861-0.68806443j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByh, _438f3aAABxn, _438f3aAAByi], tags={GATE_50, ROUND_2, RZ, I6, GATE_36, ROUND_1, RX, I7, GATE_42, CX}),backend=numpy, dtype=complex128, data=array([[[ 0.55939167+0.39682667j, -0.28150475+0.39682667j],\n", " [-0.28150475+0.39682667j, 0.55939167+0.39682667j]],\n", "\n", " [[-0.28150475-0.39682667j, -0.55939167+0.39682667j],\n", - " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdG, _119073AAScK, _119073AASdH], tags={GATE_52, ROUND_2, RZ, I8, GATE_14, ROUND_1, CX, GATE_22, I7, GATE_28, CZ, GATE_37, RX, GATE_23, GATE_8, ROUND_0, H, GATE_53, I9, GATE_38, GATE_43, GATE_24, GATE_9, GATE_21, I6, GATE_6, GATE_7, GATE_13}),backend=numpy, dtype=complex128, data=array([[[ 0.5027836 +0.11370736j, -0.02428325-0.12148106j],\n", + " [-0.55939167+0.39682667j, -0.28150475-0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByj, _438f3aAABxn, _438f3aAAByk], tags={GATE_52, ROUND_2, RZ, I8, GATE_14, ROUND_1, CX, GATE_22, I7, GATE_28, CZ, GATE_37, RX, GATE_23, GATE_8, ROUND_0, H, GATE_53, I9, GATE_38, GATE_43, GATE_24, GATE_9, GATE_21, I6, GATE_6, GATE_7, GATE_13}),backend=numpy, dtype=complex128, data=array([[[ 0.5027836 +0.11370736j, -0.02428325-0.12148106j],\n", " [-0.02428325-0.12148106j, -0.02428325+0.01722628j]],\n", "\n", " [[ 0.02428325+0.01722628j, 0.1226808 +0.01722628j],\n", - " [-0.02428325+0.12148106j, 0.142557 +0.49537684j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYBC, _119073AAYAG, _119073AAYBD], tags={GATE_52, ROUND_2, RZ, I8, GATE_14, ROUND_1, CX, GATE_22, I7, GATE_28, CZ, GATE_37, RX, GATE_23, GATE_8, ROUND_0, H, GATE_53, I9, GATE_38, GATE_43, GATE_24, GATE_9, GATE_21, I6, GATE_6, GATE_7, GATE_13}),backend=numpy, dtype=complex128, data=array([[[ 0.5027836 -0.11370736j, -0.02428325+0.12148106j],\n", + " [-0.02428325+0.12148106j, 0.142557 +0.49537684j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFTB, _438f3aAAFSF, _438f3aAAFTC], tags={GATE_52, ROUND_2, RZ, I8, GATE_14, ROUND_1, CX, GATE_22, I7, GATE_28, CZ, GATE_37, RX, GATE_23, GATE_8, ROUND_0, H, GATE_53, I9, GATE_38, GATE_43, GATE_24, GATE_9, GATE_21, I6, GATE_6, GATE_7, GATE_13}),backend=numpy, dtype=complex128, data=array([[[ 0.5027836 -0.11370736j, -0.02428325+0.12148106j],\n", " [-0.02428325+0.12148106j, -0.02428325-0.01722628j]],\n", "\n", " [[ 0.02428325-0.01722628j, 0.1226808 -0.01722628j],\n", - " [-0.02428325-0.12148106j, 0.142557 -0.49537684j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdB, _119073AASdC, _119073AASdA], tags={GATE_47, ROUND_2, RZ, I3, GATE_55, CZ, I4, GATE_41, CX, GATE_33, ROUND_1, RX, GATE_12, GATE_18, GATE_26, GATE_19, GATE_4, ROUND_0, H, GATE_5, I5, GATE_46, I2, GATE_32, GATE_40, GATE_17, GATE_2, GATE_3, GATE_11}),backend=numpy, dtype=complex128, data=array([[[-0.53798078+3.63434853e-01j, 0.28016385-2.68095775e-17j],\n", + " [-0.02428325-0.12148106j, 0.142557 -0.49537684j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABye, _438f3aAAByf, _438f3aAAByd], tags={GATE_47, ROUND_2, RZ, I3, GATE_55, CZ, I4, GATE_41, CX, GATE_33, ROUND_1, RX, GATE_12, GATE_18, GATE_26, GATE_19, GATE_4, ROUND_0, H, GATE_5, I5, GATE_46, I2, GATE_32, GATE_40, GATE_17, GATE_2, GATE_3, GATE_11}),backend=numpy, dtype=complex128, data=array([[[-0.53798078+3.63434853e-01j, 0.28016385+6.06362953e-18j],\n", " [ 0.09258438+2.64423745e-01j, -0.16523255+6.27858598e-01j]],\n", "\n", - " [[-0.28016385+7.81422312e-17j, -0.64718797-5.15358662e-02j],\n", - " [-0.16523255+6.27858598e-01j, 0.09258438-2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdD, _119073AASdE, _119073AASdC], tags={GATE_49, ROUND_2, RZ, I5, GATE_56, CZ, I6, GATE_42, CX, GATE_35, ROUND_1, RX, GATE_13, GATE_20, GATE_27, GATE_21, GATE_6, ROUND_0, H, GATE_7, I7, GATE_48, I4, GATE_34, GATE_41, GATE_19, GATE_4, GATE_5, GATE_12}),backend=numpy, dtype=complex128, data=array([[[-0.53798078+3.63434853e-01j, 0.28016385-2.68095775e-17j],\n", + " [[-0.28016385+6.57395498e-17j, -0.64718797-5.15358662e-02j],\n", + " [-0.16523255+6.27858598e-01j, 0.09258438-2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAByg, _438f3aAAByh, _438f3aAAByf], tags={GATE_49, ROUND_2, RZ, I5, GATE_56, CZ, I6, GATE_42, CX, GATE_35, ROUND_1, RX, GATE_13, GATE_20, GATE_27, GATE_21, GATE_6, ROUND_0, H, GATE_7, I7, GATE_48, I4, GATE_34, GATE_41, GATE_19, GATE_4, GATE_5, GATE_12}),backend=numpy, dtype=complex128, data=array([[[-0.53798078+3.63434853e-01j, 0.28016385+6.06362953e-18j],\n", " [ 0.09258438+2.64423745e-01j, -0.16523255+6.27858598e-01j]],\n", "\n", - " [[-0.28016385+7.81422312e-17j, -0.64718797-5.15358662e-02j],\n", - " [-0.16523255+6.27858598e-01j, 0.09258438-2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYAx, _119073AAYAy, _119073AAYAw], tags={GATE_47, ROUND_2, RZ, I3, GATE_55, CZ, I4, GATE_41, CX, GATE_33, ROUND_1, RX, GATE_12, GATE_18, GATE_26, GATE_19, GATE_4, ROUND_0, H, GATE_5, I5, GATE_46, I2, GATE_32, GATE_40, GATE_17, GATE_2, GATE_3, GATE_11}),backend=numpy, dtype=complex128, data=array([[[-0.53798078-3.63434853e-01j, 0.28016385+2.68095775e-17j],\n", + " [[-0.28016385+6.57395498e-17j, -0.64718797-5.15358662e-02j],\n", + " [-0.16523255+6.27858598e-01j, 0.09258438-2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFSw, _438f3aAAFSx, _438f3aAAFSv], tags={GATE_47, ROUND_2, RZ, I3, GATE_55, CZ, I4, GATE_41, CX, GATE_33, ROUND_1, RX, GATE_12, GATE_18, GATE_26, GATE_19, GATE_4, ROUND_0, H, GATE_5, I5, GATE_46, I2, GATE_32, GATE_40, GATE_17, GATE_2, GATE_3, GATE_11}),backend=numpy, dtype=complex128, data=array([[[-0.53798078-3.63434853e-01j, 0.28016385-6.06362953e-18j],\n", " [ 0.09258438-2.64423745e-01j, -0.16523255-6.27858598e-01j]],\n", "\n", - " [[-0.28016385-7.81422312e-17j, -0.64718797+5.15358662e-02j],\n", - " [-0.16523255-6.27858598e-01j, 0.09258438+2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYAz, _119073AAYBA, _119073AAYAy], tags={GATE_49, ROUND_2, RZ, I5, GATE_56, CZ, I6, GATE_42, CX, GATE_35, ROUND_1, RX, GATE_13, GATE_20, GATE_27, GATE_21, GATE_6, ROUND_0, H, GATE_7, I7, GATE_48, I4, GATE_34, GATE_41, GATE_19, GATE_4, GATE_5, GATE_12}),backend=numpy, dtype=complex128, data=array([[[-0.53798078-3.63434853e-01j, 0.28016385+2.68095775e-17j],\n", + " [[-0.28016385-6.57395498e-17j, -0.64718797+5.15358662e-02j],\n", + " [-0.16523255-6.27858598e-01j, 0.09258438+2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFSy, _438f3aAAFSz, _438f3aAAFSx], tags={GATE_49, ROUND_2, RZ, I5, GATE_56, CZ, I6, GATE_42, CX, GATE_35, ROUND_1, RX, GATE_13, GATE_20, GATE_27, GATE_21, GATE_6, ROUND_0, H, GATE_7, I7, GATE_48, I4, GATE_34, GATE_41, GATE_19, GATE_4, GATE_5, GATE_12}),backend=numpy, dtype=complex128, data=array([[[-0.53798078-3.63434853e-01j, 0.28016385-6.06362953e-18j],\n", " [ 0.09258438-2.64423745e-01j, -0.16523255-6.27858598e-01j]],\n", "\n", - " [[-0.28016385-7.81422312e-17j, -0.64718797+5.15358662e-02j],\n", - " [-0.16523255-6.27858598e-01j, 0.09258438+2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AAShh, _119073AAYFe, _119073AAYEj], tags={GATE_197, ROUND_7, RZ, I8, GATE_198, I9, GATE_183, ROUND_6, RX, GATE_188, CX, GATE_212, GATE_217, ROUND_8, GATE_227, GATE_241, GATE_251, ROUND_9, H}),backend=numpy, dtype=complex128, data=array([[[-1.90588793e-01+5.44327281e-01j,\n", + " [[-0.28016385-6.57395498e-17j, -0.64718797+5.15358662e-02j],\n", + " [-0.16523255-6.27858598e-01j, 0.09258438+2.64423745e-01j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAACDK, _438f3aAAFXd, _438f3aAAFWi], tags={GATE_197, ROUND_7, RZ, I8, GATE_198, I9, GATE_183, ROUND_6, RX, GATE_188, CX, GATE_212, GATE_217, ROUND_8, GATE_227, GATE_241, GATE_251, ROUND_9, H}),backend=numpy, dtype=complex128, data=array([[[-1.90588793e-01+5.44327281e-01j,\n", " 3.86140152e-01+1.35201722e-01j],\n", - " [ 2.11721571e-18+4.09125559e-01j,\n", - " -5.76728946e-01-1.96445111e-17j]],\n", + " [ 4.47512346e-18+4.09125559e-01j,\n", + " -5.76728946e-01-1.63206570e-17j]],\n", "\n", - " [[ 2.11721571e-18-4.09125559e-01j,\n", - " 5.76728946e-01-1.96445111e-17j],\n", + " [[-2.40692041e-19-4.09125559e-01j,\n", + " 5.76728946e-01-2.29683651e-17j],\n", " [ 1.90588793e-01+5.44327281e-01j,\n", - " 3.86140152e-01-1.35201722e-01j]]])
Tensor(shape=(2, 2), inds=[_119073AAShh, _119073AASgm], tags={GATE_188, ROUND_7, CX, I8, GATE_182, ROUND_6, RX, GATE_217, ROUND_8, GATE_211, GATE_212, I9, GATE_227, RZ, GATE_241, GATE_251, ROUND_9, H, GATE_226, GATE_240, GATE_250, GATE_231, CZ, I7, GATE_225}),backend=numpy, dtype=complex128, data=array([[ 0.9407809 -0.66738026j, 0.47343266+0.66738026j],\n", - " [-0.47343266-0.66738026j, -0.9407809 +0.66738026j]])
Tensor(shape=(2, 2), inds=[_119073AAShh, _119073AAYEi], tags={GATE_188, ROUND_7, CX, I8, GATE_182, ROUND_6, RX, GATE_196, RZ, I7, GATE_202, CZ}),backend=numpy, dtype=complex128, data=array([[-9.69938606e-01+0.00000000e+00j, 0.00000000e+00+6.88064432e-01j],\n", - " [-5.07964202e-18-6.88064432e-01j, 9.69938606e-01-7.16058072e-18j]])
Tensor(shape=(2, 2), inds=[_119073AAYEh, _119073AAYEi], tags={GATE_167, ROUND_6, RZ, I7, GATE_173, CZ, I8, GATE_195, ROUND_7, I6, GATE_181, RX, GATE_187, CX, GATE_210, GATE_216, ROUND_8, GATE_224, GATE_238, GATE_248, ROUND_9, H, GATE_225, GATE_239, GATE_249, GATE_226, GATE_231, GATE_196, GATE_202}),backend=numpy, dtype=complex128, data=array([[-0.62892738+0.44615459j, -0.62892738+0.44615459j],\n", - " [-0.62892738-0.44615459j, 0.62892738+0.44615459j]])
Tensor(shape=(2, 2), inds=[_119073AASgk, _119073AASfp], tags={GATE_158, ROUND_6, CX, I6, GATE_151, ROUND_5, RX, GATE_187, ROUND_7, GATE_180, GATE_195, RZ, GATE_181, I7, GATE_210, GATE_216, ROUND_8, GATE_224, GATE_238, GATE_248, ROUND_9, H, GATE_225, GATE_239, GATE_249, GATE_226, I8, GATE_231, CZ, GATE_196, GATE_202, GATE_209, GATE_230, I5, GATE_223, GATE_194, GATE_201, GATE_208, GATE_215, GATE_222, I4, GATE_236, GATE_246, GATE_237, GATE_247}),backend=numpy, dtype=complex128, data=array([[ 1.15345789e+00-5.31640927e-17j, 3.77140584e-17+8.18251118e-01j],\n", - " [-4.66651456e-17-8.18251118e-01j, -1.15345789e+00+6.57821044e-17j]])
Tensor(shape=(2, 2), inds=[_119073AASgk, _119073AAYDl], tags={GATE_158, ROUND_6, CX, I6, GATE_151, ROUND_5, RX, GATE_165, RZ, I5, GATE_172, CZ}),backend=numpy, dtype=complex128, data=array([[-9.69938606e-01+0.00000000e+00j, 0.00000000e+00+6.88064432e-01j],\n", - " [ 5.07964202e-18-6.88064432e-01j, 9.69938606e-01+7.16058072e-18j]])
Tensor(shape=(2, 2), inds=[_119073AASfo, _119073AASfp], tags={GATE_136, ROUND_5, RZ, I5, GATE_143, CZ, I6, GATE_164, ROUND_6, I4, GATE_150, RX, GATE_157, CX, GATE_193, ROUND_7, GATE_179, GATE_186, GATE_194, GATE_201, GATE_208, GATE_215, ROUND_8, GATE_222, GATE_236, GATE_246, ROUND_9, H, GATE_223, GATE_237, GATE_247, GATE_224, GATE_230, GATE_165, GATE_172}),backend=numpy, dtype=complex128, data=array([[ 0.61545076+0.43659441j, 0.61545076+0.43659441j],\n", - " [ 0.61545076-0.43659441j, -0.61545076+0.43659441j]])
Tensor(shape=(2, 2), inds=[_119073AAYDj, _119073AAYCo], tags={GATE_128, ROUND_5, CX, I4, GATE_120, ROUND_4, RX, GATE_157, ROUND_6, GATE_149, GATE_164, RZ, GATE_150, I5, GATE_193, ROUND_7, GATE_179, GATE_186, GATE_194, GATE_201, CZ, I6, GATE_208, GATE_215, ROUND_8, GATE_222, GATE_236, GATE_246, ROUND_9, H, GATE_223, GATE_237, GATE_247, GATE_224, GATE_230, GATE_165, GATE_172, GATE_178, GATE_192, I3, GATE_200, GATE_206, GATE_214, GATE_220, I2, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_229, GATE_207, GATE_163, GATE_171, GATE_191, GATE_177, GATE_185}),backend=numpy, dtype=complex128, data=array([[ 1.15345789e+00-6.10152182e-17j, -4.32835657e-17-8.18251118e-01j],\n", - " [ 5.45687982e-17+8.18251118e-01j, -1.15345789e+00+7.69235868e-17j]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYDj, _119073AAYCp, _119073AASfo], tags={GATE_135, ROUND_5, RZ, I4, GATE_121, ROUND_4, RX, I5, GATE_128, CX, GATE_134, I3, GATE_142, CZ}),backend=numpy, dtype=complex128, data=array([[[-0.55939167+0.39682667j, 0.28150475+0.39682667j],\n", + " 3.86140152e-01-1.35201722e-01j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACDK, _438f3aAACCP], tags={GATE_188, ROUND_7, CX, I8, GATE_182, ROUND_6, RX, GATE_217, ROUND_8, GATE_211, GATE_212, I9, GATE_227, RZ, GATE_241, GATE_251, ROUND_9, H, GATE_226, GATE_240, GATE_250, GATE_231, CZ, I7, GATE_225}),backend=numpy, dtype=complex128, data=array([[ 0.9407809 -0.66738026j, 0.47343266+0.66738026j],\n", + " [-0.47343266-0.66738026j, -0.9407809 +0.66738026j]])
Tensor(shape=(2, 2), inds=[_438f3aAACDK, _438f3aAAFWh], tags={GATE_188, ROUND_7, CX, I8, GATE_182, ROUND_6, RX, GATE_196, RZ, I7, GATE_202, CZ}),backend=numpy, dtype=complex128, data=array([[-9.69938606e-01+0.00000000e+00j, 0.00000000e+00+6.88064432e-01j],\n", + " [-5.07964202e-18-6.88064432e-01j, 9.69938606e-01-7.16058072e-18j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFWg, _438f3aAAFWh], tags={GATE_167, ROUND_6, RZ, I7, GATE_173, CZ, I8, GATE_195, ROUND_7, I6, GATE_181, RX, GATE_187, CX, GATE_210, GATE_216, ROUND_8, GATE_224, GATE_238, GATE_248, ROUND_9, H, GATE_225, GATE_239, GATE_249, GATE_226, GATE_231, GATE_196, GATE_202}),backend=numpy, dtype=complex128, data=array([[-0.62892738+0.44615459j, -0.62892738+0.44615459j],\n", + " [-0.62892738-0.44615459j, 0.62892738+0.44615459j]])
Tensor(shape=(2, 2), inds=[_438f3aAACCN, _438f3aAACBS], tags={GATE_158, ROUND_6, CX, I6, GATE_151, ROUND_5, RX, GATE_187, ROUND_7, GATE_180, GATE_195, RZ, GATE_181, I7, GATE_210, GATE_216, ROUND_8, GATE_224, GATE_238, GATE_248, ROUND_9, H, GATE_225, GATE_239, GATE_249, GATE_226, I8, GATE_231, CZ, GATE_196, GATE_202, GATE_209, GATE_230, I5, GATE_223, GATE_194, GATE_201, GATE_208, GATE_215, GATE_222, I4, GATE_236, GATE_246, GATE_237, GATE_247}),backend=numpy, dtype=complex128, data=array([[ 1.15345789e+00+3.08719276e-17j, -2.19002267e-17+8.18251118e-01j],\n", + " [ 5.29450912e-17-8.18251118e-01j, -1.15345789e+00-7.46347080e-17j]])
Tensor(shape=(2, 2), inds=[_438f3aAACCN, _438f3aAAFVk], tags={GATE_158, ROUND_6, CX, I6, GATE_151, ROUND_5, RX, GATE_165, RZ, I5, GATE_172, CZ}),backend=numpy, dtype=complex128, data=array([[-9.69938606e-01+0.00000000e+00j, 0.00000000e+00+6.88064432e-01j],\n", + " [ 5.07964202e-18-6.88064432e-01j, 9.69938606e-01+7.16058072e-18j]])
Tensor(shape=(2, 2), inds=[_438f3aAACBR, _438f3aAACBS], tags={GATE_136, ROUND_5, RZ, I5, GATE_143, CZ, I6, GATE_164, ROUND_6, I4, GATE_150, RX, GATE_157, CX, GATE_193, ROUND_7, GATE_179, GATE_186, GATE_194, GATE_201, GATE_208, GATE_215, ROUND_8, GATE_222, GATE_236, GATE_246, ROUND_9, H, GATE_223, GATE_237, GATE_247, GATE_224, GATE_230, GATE_165, GATE_172}),backend=numpy, dtype=complex128, data=array([[ 0.61545076+0.43659441j, 0.61545076+0.43659441j],\n", + " [ 0.61545076-0.43659441j, -0.61545076+0.43659441j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFVi, _438f3aAAFUn], tags={GATE_128, ROUND_5, CX, I4, GATE_120, ROUND_4, RX, GATE_157, ROUND_6, GATE_149, GATE_164, RZ, GATE_150, I5, GATE_193, ROUND_7, GATE_179, GATE_186, GATE_194, GATE_201, CZ, I6, GATE_208, GATE_215, ROUND_8, GATE_222, GATE_236, GATE_246, ROUND_9, H, GATE_223, GATE_237, GATE_247, GATE_224, GATE_230, GATE_165, GATE_172, GATE_178, GATE_192, I3, GATE_200, GATE_206, GATE_214, GATE_220, I2, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_229, GATE_207, GATE_163, GATE_171, GATE_191, GATE_177, GATE_185}),backend=numpy, dtype=complex128, data=array([[ 1.15345789e+00+4.06113858e-17j, 2.88092977e-17-8.18251118e-01j],\n", + " [-3.50891981e-17+8.18251118e-01j, -1.15345789e+00-4.94639256e-17j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFVi, _438f3aAAFUo, _438f3aAACBR], tags={GATE_135, ROUND_5, RZ, I4, GATE_121, ROUND_4, RX, I5, GATE_128, CX, GATE_134, I3, GATE_142, CZ}),backend=numpy, dtype=complex128, data=array([[[-0.55939167+0.39682667j, 0.28150475+0.39682667j],\n", " [ 0.28150475+0.39682667j, -0.55939167+0.39682667j]],\n", "\n", " [[ 0.28150475-0.39682667j, 0.55939167+0.39682667j],\n", - " [ 0.55939167+0.39682667j, 0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_119073AASer, _119073AASes], tags={GATE_105, ROUND_4, RZ, I3, GATE_113, CZ, I4, GATE_133, ROUND_5, I2, GATE_119, RX, GATE_127, CX, GATE_162, ROUND_6, GATE_148, GATE_156, GATE_163, GATE_171, GATE_191, ROUND_7, GATE_177, GATE_185, GATE_192, GATE_200, GATE_206, GATE_214, ROUND_8, GATE_220, GATE_234, GATE_244, ROUND_9, H, GATE_221, GATE_235, GATE_245, GATE_222, GATE_229, GATE_134, GATE_142}),backend=numpy, dtype=complex128, data=array([[ 0.61212697+0.43423655j, 0.61212697+0.43423655j],\n", - " [ 0.61212697-0.43423655j, -0.61212697+0.43423655j]])
Tensor(shape=(2, 2), inds=[_119073AAYCm, _119073AAYBr], tags={GATE_98, ROUND_4, CX, I2, GATE_89, ROUND_3, RX, GATE_127, ROUND_5, GATE_118, GATE_133, RZ, GATE_119, I3, GATE_162, ROUND_6, GATE_148, GATE_156, GATE_163, GATE_171, CZ, I4, GATE_191, ROUND_7, GATE_177, GATE_185, GATE_192, GATE_200, GATE_206, GATE_214, ROUND_8, GATE_220, GATE_234, GATE_244, ROUND_9, H, GATE_221, GATE_235, GATE_245, GATE_222, GATE_229, GATE_134, GATE_142, GATE_132, I1, GATE_141, GATE_160, I0, GATE_146, GATE_155, GATE_161, GATE_170, GATE_189, GATE_175, GATE_184, GATE_190, GATE_199, GATE_219, GATE_233, GATE_243, GATE_204, GATE_213, GATE_218, GATE_228, GATE_147, GATE_176, GATE_205}),backend=numpy, dtype=complex128, data=array([[ 1.02947075e+00+1.00729510e-17j, 7.14564743e-18-7.30295919e-01j],\n", - " [-1.41994610e-17+7.30295919e-01j, -1.02947075e+00-2.00164473e-17j]])
Tensor(shape=(2, 2, 2), inds=[_119073AAYCm, _119073AAYBs, _119073AASer], tags={GATE_104, ROUND_4, RZ, I2, GATE_90, ROUND_3, RX, I3, GATE_98, CX, GATE_103, I1, GATE_112, CZ}),backend=numpy, dtype=complex128, data=array([[[-0.55939167+0.39682667j, 0.28150475+0.39682667j],\n", + " [ 0.55939167+0.39682667j, 0.28150475-0.39682667j]]])
Tensor(shape=(2, 2), inds=[_438f3aAACAU, _438f3aAACAV], tags={GATE_105, ROUND_4, RZ, I3, GATE_113, CZ, I4, GATE_133, ROUND_5, I2, GATE_119, RX, GATE_127, CX, GATE_162, ROUND_6, GATE_148, GATE_156, GATE_163, GATE_171, GATE_191, ROUND_7, GATE_177, GATE_185, GATE_192, GATE_200, GATE_206, GATE_214, ROUND_8, GATE_220, GATE_234, GATE_244, ROUND_9, H, GATE_221, GATE_235, GATE_245, GATE_222, GATE_229, GATE_134, GATE_142}),backend=numpy, dtype=complex128, data=array([[ 0.61212697+0.43423655j, 0.61212697+0.43423655j],\n", + " [ 0.61212697-0.43423655j, -0.61212697+0.43423655j]])
Tensor(shape=(2, 2), inds=[_438f3aAAFUl, _438f3aAAFTq], tags={GATE_98, ROUND_4, CX, I2, GATE_89, ROUND_3, RX, GATE_127, ROUND_5, GATE_118, GATE_133, RZ, GATE_119, I3, GATE_162, ROUND_6, GATE_148, GATE_156, GATE_163, GATE_171, CZ, I4, GATE_191, ROUND_7, GATE_177, GATE_185, GATE_192, GATE_200, GATE_206, GATE_214, ROUND_8, GATE_220, GATE_234, GATE_244, ROUND_9, H, GATE_221, GATE_235, GATE_245, GATE_222, GATE_229, GATE_134, GATE_142, GATE_132, I1, GATE_141, GATE_160, I0, GATE_146, GATE_155, GATE_161, GATE_170, GATE_189, GATE_175, GATE_184, GATE_190, GATE_199, GATE_219, GATE_233, GATE_243, GATE_204, GATE_213, GATE_218, GATE_228, GATE_147, GATE_176, GATE_205}),backend=numpy, dtype=complex128, data=array([[ 1.02947075e+00+7.76633283e-17j, 5.50935632e-17-7.30295919e-01j],\n", + " [-1.09479079e-16+7.30295919e-01j, -1.02947075e+00-1.54328549e-16j]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAAFUl, _438f3aAAFTr, _438f3aAACAU], tags={GATE_104, ROUND_4, RZ, I2, GATE_90, ROUND_3, RX, I3, GATE_98, CX, GATE_103, I1, GATE_112, CZ}),backend=numpy, dtype=complex128, data=array([[[-0.55939167+0.39682667j, 0.28150475+0.39682667j],\n", " [ 0.28150475+0.39682667j, -0.55939167+0.39682667j]],\n", "\n", " [[ 0.28150475-0.39682667j, 0.55939167+0.39682667j],\n", - " [ 0.55939167+0.39682667j, 0.28150475-0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_119073AASdu, _119073AAYAw, _119073AASdA], tags={GATE_97, ROUND_4, CX, I0, GATE_87, ROUND_3, RX, GATE_73, RZ, GATE_59, ROUND_2, I1, GATE_68, GATE_45, GATE_54, CZ, I2, GATE_40, GATE_31, ROUND_1, GATE_11, GATE_39, GATE_16, GATE_25, GATE_30, GATE_10, GATE_0, ROUND_0, H, GATE_1, GATE_15, GATE_29, GATE_44, GATE_58, GATE_17, GATE_2, GATE_3, I3, GATE_126, ROUND_5, GATE_116, GATE_155, ROUND_6, GATE_145, GATE_184, ROUND_7, GATE_174, GATE_213, ROUND_8, GATE_203, GATE_218, GATE_232, GATE_242, ROUND_9, GATE_219, GATE_233, GATE_243, GATE_204, GATE_220, GATE_228, GATE_189, GATE_175, GATE_190, GATE_199, GATE_160, GATE_146, GATE_161, GATE_170, GATE_131, GATE_117, GATE_132, GATE_141, GATE_156, GATE_147, GATE_185, GATE_176, GATE_214, GATE_205, GATE_206, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_222, I4, GATE_229, GATE_191, GATE_177, GATE_192, GATE_200, GATE_162, GATE_148, GATE_163, GATE_171, GATE_102, GATE_88, GATE_103, GATE_112}),backend=numpy, dtype=complex128, data=array([[[ 0.9367917 -0.66455036j, -0.01811946-0.44375959j],\n", + " [ 0.55939167+0.39682667j, 0.28150475-0.39682667j]]])
Tensor(shape=(2, 2, 2), inds=[_438f3aAABzX, _438f3aAAFSv, _438f3aAAByd], tags={GATE_97, ROUND_4, CX, I0, GATE_87, ROUND_3, RX, GATE_73, RZ, GATE_59, ROUND_2, I1, GATE_68, GATE_45, GATE_54, CZ, I2, GATE_40, GATE_31, ROUND_1, GATE_11, GATE_39, GATE_16, GATE_25, GATE_30, GATE_10, GATE_0, ROUND_0, H, GATE_1, GATE_15, GATE_29, GATE_44, GATE_58, GATE_17, GATE_2, GATE_3, I3, GATE_126, ROUND_5, GATE_116, GATE_155, ROUND_6, GATE_145, GATE_184, ROUND_7, GATE_174, GATE_213, ROUND_8, GATE_203, GATE_218, GATE_232, GATE_242, ROUND_9, GATE_219, GATE_233, GATE_243, GATE_204, GATE_220, GATE_228, GATE_189, GATE_175, GATE_190, GATE_199, GATE_160, GATE_146, GATE_161, GATE_170, GATE_131, GATE_117, GATE_132, GATE_141, GATE_156, GATE_147, GATE_185, GATE_176, GATE_214, GATE_205, GATE_206, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_222, I4, GATE_229, GATE_191, GATE_177, GATE_192, GATE_200, GATE_162, GATE_148, GATE_163, GATE_171, GATE_102, GATE_88, GATE_103, GATE_112}),backend=numpy, dtype=complex128, data=array([[[ 0.9367917 -0.66455036j, -0.01811946-0.44375959j],\n", " [ 0.41284054+0.16374854j, 0.30657993-0.21748464j]],\n", "\n", " [[ 0.4201327 -0.2980378j , -0.3613847 -0.56550071j],\n", - " [ 0.41430484+0.52795972j, 1.05034446-0.74510352j]]])
Tensor(shape=(2, 2), inds=[_119073AASdu, _119073AASdv], tags={GATE_74, ROUND_3, RZ, I1, GATE_83, CZ, I2, GATE_102, ROUND_4, I0, GATE_88, RX, GATE_97, CX, GATE_131, ROUND_5, GATE_117, GATE_126, GATE_132, GATE_141, GATE_160, ROUND_6, GATE_146, GATE_155, GATE_161, GATE_170, GATE_189, ROUND_7, GATE_175, GATE_184, GATE_190, GATE_199, GATE_219, ROUND_8, GATE_233, GATE_243, ROUND_9, H, GATE_204, GATE_213, GATE_218, GATE_220, GATE_228, GATE_156, GATE_147, GATE_185, GATE_176, GATE_214, GATE_205, GATE_206, I3, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_222, I4, GATE_229, GATE_191, GATE_177, GATE_192, GATE_200, GATE_162, GATE_148, GATE_163, GATE_171, GATE_103, GATE_112}),backend=numpy, dtype=complex128, data=array([[-0.21325027+0.74103163j, -0.21325027+0.74103163j],\n", + " [ 0.41430484+0.52795972j, 1.05034446-0.74510352j]]])
Tensor(shape=(2, 2), inds=[_438f3aAABzX, _438f3aAABzY], tags={GATE_74, ROUND_3, RZ, I1, GATE_83, CZ, I2, GATE_102, ROUND_4, I0, GATE_88, RX, GATE_97, CX, GATE_131, ROUND_5, GATE_117, GATE_126, GATE_132, GATE_141, GATE_160, ROUND_6, GATE_146, GATE_155, GATE_161, GATE_170, GATE_189, ROUND_7, GATE_175, GATE_184, GATE_190, GATE_199, GATE_219, ROUND_8, GATE_233, GATE_243, ROUND_9, H, GATE_204, GATE_213, GATE_218, GATE_220, GATE_228, GATE_156, GATE_147, GATE_185, GATE_176, GATE_214, GATE_205, GATE_206, I3, GATE_234, GATE_244, GATE_221, GATE_235, GATE_245, GATE_222, I4, GATE_229, GATE_191, GATE_177, GATE_192, GATE_200, GATE_162, GATE_148, GATE_163, GATE_171, GATE_103, GATE_112}),backend=numpy, dtype=complex128, data=array([[-0.21325027+0.74103163j, -0.21325027+0.74103163j],\n", " [ 0.62892738+0.44615459j, -0.62892738-0.44615459j]])
" ], "text/plain": [ "TensorNetworkGen(tensors=87, indices=67)" ] }, - "execution_count": 33, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -54566,6 +2096,7 @@ }, { "cell_type": "markdown", + "id": "e157ea5c-602a-4350-a4fc-5d90017ce765", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54577,16 +2108,17 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, + "id": "8e171bd1-0679-4879-9f75-6223c3bff6ce", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.99999999999996" + "0.9999999999999576" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -54598,6 +2130,7 @@ }, { "cell_type": "markdown", + "id": "9fed741d-8ce0-48f3-8e6d-a5528fb55fb8", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54614,7 +2147,7 @@ "different types of values:\n", "\n", "> 1. A string, specifiying a [cotengra](https://cotengra.readthedocs.io/) registered path optimizer.\n", - "> 2. A custom `cotengra.HyperOptimizer` instance\n", + "> 2. A custom [`cotengra.HyperOptimizer`](cotengra.HyperOptimizer) instance\n", "> 2. A custom `opt_einsum.PathOptimizer` instance\n", "> 3. An explicit path - a sequence of pairs of ints - likely found from a previous rehearsal, for example.\n", "\n", @@ -54627,12 +2160,13 @@ "\n", "$$\n", "\\langle \\psi_{3, 4} | Z_3 \\otimes Z_4 | \\psi_{3, 4} \\rangle\n", - "$$\n" + "$$" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, + "id": "c4a292f2-14b4-40bf-be1f-81b057d529a6", "metadata": {}, "outputs": [], "source": [ @@ -54643,27 +2177,29 @@ }, { "cell_type": "markdown", + "id": "5433605f-5aa0-42c9-9fd6-d2b3b9ee1683", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ - "### An `cotengra` preset\n", + "### A `cotengra` preset\n", "\n", "First we use the fast but low quality `'greedy'` preset:" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, + "id": "794bf5cf-299a-4aa8-b97c-f7efdf83dd7a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "222176" + "228328" ] }, - "execution_count": 36, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -54676,6 +2212,7 @@ }, { "cell_type": "markdown", + "id": "48cc5518-5289-4921-81b3-11fa46e2e248", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54688,14 +2225,15 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, + "id": "bc8642ae-7627-4090-a4fb-ba556025d9fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "43.8 ms ± 713 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + "16.1 ms ± 118 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -54706,6 +2244,7 @@ }, { "cell_type": "markdown", + "id": "53caeed7-76eb-46dd-bc03-2542a38e7885", "metadata": {}, "source": [ "We can compare this to just performing the main contraction:" @@ -54713,14 +2252,15 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, + "id": "2ea2c78c-4bd0-4676-be55-70b32f8d10b2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "3.73 ms ± 137 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "1.21 ms ± 10.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -54731,6 +2271,7 @@ }, { "cell_type": "markdown", + "id": "38526510-c40e-4f20-9430-3aefa6725365", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54742,21 +2283,22 @@ "You can also supply a customized `PathOptimizer` instance here, an example of which\n", "is the `opt_einsum.RandomGreedy`\n", "[optimizer](https://optimized-einsum.readthedocs.io/en/stable/random_greedy_path.html)\n", - "(which is itself called by `'auto-hq'` in fact).\n" + "(which is itself called by `'auto-hq'` in fact)." ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, + "id": "c355a3f1-062e-454d-be58-d8299ae9d846", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "222176" + "228328" ] }, - "execution_count": 39, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -54774,6 +2316,7 @@ }, { "cell_type": "markdown", + "id": "04f721cb-9afe-4a62-b668-410b43044cbe", "metadata": {}, "source": [ "We see it has found a much better path than `'greedy'`, which is not so surprising.\n", @@ -54784,16 +2327,17 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, + "id": "b490e220-012d-45a7-875e-80ef1a793c36", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.04035324286371912" + "0.04035324286372618" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -54804,27 +2348,26 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, + "id": "cb659f49-7d2b-4bdb-89ba-aa10453298a8", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "0.04035324286371912" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "14.4 ms ± 95.6 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] } ], "source": [ - "# %%timeit\n", + "%%timeit\n", "circ.local_expectation(ZZ, where, optimize=tree)" ] }, { "cell_type": "markdown", + "id": "0793283d-6a95-4310-a247-a3f749b68ce2", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -54857,23 +2400,24 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, + "id": "357d665c-7248-4408-b89f-5efecd03e4a9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "F=4.64 C=5.94 S=10.00 P=11.63: 100%|██████████| 16/16 [00:09<00:00, 1.65it/s]\n" + "F=4.60 C=5.89 S=10.00 P=11.31: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:04<00:00, 3.80it/s]\n" ] }, { "data": { "text/plain": [ - "{'flops': 43442, 'write': 12995, 'size': 1024}" + "{'flops': 40212, 'write': 11365, 'size': 1024}" ] }, - "execution_count": 42, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -54897,6 +2441,7 @@ }, { "cell_type": "markdown", + "id": "b600436e-fc4a-49ae-a11a-aca616c361af", "metadata": {}, "source": [ "We can see even for this small contraction it has improved on the `RandomGreedy` path cost.\n", @@ -54907,14 +2452,15 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, + "id": "f88f43e7-d17e-4784-ae2b-27a179144805", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "40.7 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + "15.3 ms ± 54.3 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -54925,6 +2471,7 @@ }, { "cell_type": "markdown", + "id": "7ef2ec50-3db8-4178-a7b5-6ec7adf86aa6", "metadata": {}, "source": [ "Again, since the main contraction is very small, we don't see any real improvement." @@ -54932,6 +2479,7 @@ }, { "cell_type": "markdown", + "id": "58b45f82-5ba8-48b5-b3c9-6dd56a7ae625", "metadata": {}, "source": [ "`cotengra` also has a `ContractionTree` object for manipulating and visualizing\n", @@ -54940,5759 +2488,14 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 46, + "id": "6175b264-9abe-4112-bfff-3c4d7c01fd3d", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-08-19T07:33:13.983561\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.9.1, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -60709,7 +2512,7 @@ "(
, )" ] }, - "execution_count": 44, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -60720,15 +2523,54 @@ }, { "cell_type": "markdown", + "id": "617dffa5-fdd4-412a-aed6-2e55ca0b36ae", "metadata": {}, "source": [ "Here the, grey network at the bottom is the TN to be contracted, and the tree\n", "above it depicts the series of pairwise contractions and their individual cost\n", - "needed to find the output answer (the node at the top)." + "needed to find the output answer (the node at the top).\n", + "\n", + "See https://cotengra.readthedocs.io/en/latest/visualization.html for other methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "6005efec-747a-4b8f-9075-16014e5f9946", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(
, )" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tree.plot_rubberband()" ] }, { "cell_type": "markdown", + "id": "a6623df9-ad8f-45be-a42a-1a328ce0da9e", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -60741,7 +2583,8 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 47, + "id": "37feee8f-f1ce-4823-b7a8-8ddbca0da395", "metadata": {}, "outputs": [ { @@ -60750,7 +2593,7 @@ "{2, 4, 8}" ] }, - "execution_count": 45, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -60761,12 +2604,13 @@ }, { "cell_type": "markdown", + "id": "7bcca2e3-c63e-49e9-be2f-8ea96f2299c4", "metadata": {}, "source": [ "When it comes to the actual contraction however, where large tensors will appear, it can be advantageous to\n", "use a different library to perform the contractions. If you specify a ``backend`` kwarg, before contraction,\n", "the arrays will converted to the ``backend``, then the contraction performed, and the result converted back\n", - "to ``numpy``. \n", + "to ``numpy``.\n", "[The list of available backends is here](https://optimized-einsum.readthedocs.io/en/stable/backends.html#special-gpu-backends-for-numpy-arrays), including:\n", "\n", "\n", @@ -60778,42 +2622,45 @@ }, { "cell_type": "markdown", + "id": "ca55de97-8b0d-4ec3-9c6a-2ebba9979715", "metadata": {}, "source": [ "Sampling is an excellent candidate for GPU acceleration as the same geometry TNs\n", - "are contracted over and over again and since sampling is inherently a low \n", + "are contracted over and over again and since sampling is inherently a low\n", "precision task, single precision arrays are a natural fit." ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 48, + "id": "7279cd0b-426e-4431-a866-d0ab8ce35fae", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1011111001\n", - "1101000001\n", - "1000100011\n", - "0011101000\n", - "0010100101\n", - "1100001101\n", - "1111011010\n", - "0001111101\n", - "0111001001\n", - "1001000000\n" + "1001000111\n", + "0111100001\n", + "1011000000\n", + "0101101000\n", + "0101110101\n", + "0011001001\n", + "1001100000\n", + "1010011001\n", + "1111101000\n", + "1000010010\n" ] } ], "source": [ "for b in circ.sample(10, backend='jax', dtype='complex64'):\n", - " print(b)\n" + " print(b)" ] }, { "cell_type": "markdown", + "id": "b18b3052-d369-4df1-af5e-4afc50f8a39c", "metadata": { "raw_mimetype": "text/restructuredtext" }, @@ -60831,17 +2678,20 @@ "Here's a list of things to check if you want to ensure you are getting the\n", "most performance out of your circuit simulation:\n", "\n", - "- What contraction path optimizer are you using? If performance isn't great, have you tried `cotengra`?\n", - "- How are you applying the gates? For example, `gate_opts={'contract': False}` (no decomposition) can be better for diagonal 2-qubit gates.\n", - "- How are you grouping the qubits? For sampling, there is a sweet spot for `group_size` usually. For chaotic sampling, you might try the *last* \\$M\\$ marginal qubits rather than the *first*, for example.\n", - "- What local simplifications are you using, and in what order? `simplify_sequence='SADCR'` is also good sometimes.\n", - "- If the computation is contraction dominated, can you run it on a GPU?\n" + "- If you are sampling:\n", + " - [ ] Have you tried the *gate-by-gate* method?\n", + " - [ ] How are you grouping the qubits? For sampling, there is a sweet spot for `group_size` usually. For chaotic sampling, you might try the *last* \\$M\\$ marginal qubits rather than the *first*, for example.\n", + "- [ ] What contraction path optimizer are you using? If performance isn't great, have you tried [`cotengra`](https://cotengra.readthedocs.io)?\n", + " - [ ] if you are using `cotengra` and subtree-reconfiguration / dynamic slicing, have you installed [`cotengrust`](https://github.com/jcmgray/cotengrust)?\n", + "- [ ] How are you applying the gates? For example, `gate_opts={'contract': False}` (no decomposition) can be better for diagonal 2-qubit gates.\n", + "- [ ] What local simplifications are you using, and in what order? `simplify_sequence='SADCR'` is also good sometimes.\n", + "- [ ] If the computation is contraction dominated, can you run it on a GPU?" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -60855,7 +2705,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3" } }, "nbformat": 4, diff --git a/docs/tensor-optimization.ipynb b/docs/tensor-optimization.ipynb index 89f6429d..5eae6ec9 100644 --- a/docs/tensor-optimization.ipynb +++ b/docs/tensor-optimization.ipynb @@ -3,6 +3,7 @@ { "attachments": {}, "cell_type": "markdown", + "id": "c54f04b8-37a4-44bb-8969-9d8370ab98f2", "metadata": {}, "source": [ "(tensor-network-optimization)=\n", @@ -30,6 +31,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "652da1b7-7dba-4a4f-8675-892474d4eb09", "metadata": {}, "outputs": [], "source": [ @@ -41,6 +43,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "61708615-4fed-46b8-b9c8-b286acc3fb4b", "metadata": {}, "outputs": [], "source": [ @@ -57,6 +60,7 @@ }, { "cell_type": "markdown", + "id": "1d70582b-a30e-4457-a924-d4bfca4b94c9", "metadata": {}, "source": [ "Next we define our `norm_fn`, which here just normalizes the MPS, and our `loss_fn`, which computes the energy of the Heisenberg model by exactly contracting an MPS-MPO-MPS overlap." @@ -65,6 +69,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "c57c1f96-fbad-4c47-b8e4-afec61590e9f", "metadata": {}, "outputs": [], "source": [ @@ -78,11 +83,12 @@ "def loss_fn(psi, ham):\n", " b, h, k = qtn.tensor_network_align(psi.H, ham, psi)\n", " energy_tn = b | h | k\n", - " return energy_tn ^ ...\n" + " return energy_tn ^ ..." ] }, { "cell_type": "markdown", + "id": "90ccfc56-7641-4053-8324-9f9ae791879f", "metadata": {}, "source": [ "We can check the initial loss value with:" @@ -91,6 +97,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "9535c227-0f2d-42db-9cf6-e545bf03366d", "metadata": {}, "outputs": [ { @@ -110,6 +117,7 @@ }, { "cell_type": "markdown", + "id": "0f09042b-fa87-4ad9-91fc-e09ef2cf696a", "metadata": {}, "source": [ "Next we supply these to a [`TNOptimizer`](quimb.tensor.optimize.TNOptimizer) object. Since we have an extra tensor object `ham` that is needed to compute the loss, but should not be optimized, we pass it in `loss_constants`, that allows it to be converted to the correct backend etc." @@ -118,6 +126,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "090eb325-5af4-418f-979b-bfb539893f4e", "metadata": {}, "outputs": [ { @@ -152,6 +161,7 @@ }, { "cell_type": "markdown", + "id": "3668f6cf-d946-4728-b325-792101d977e3", "metadata": {}, "source": [ "```{hint}\n", @@ -164,6 +174,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "97f603f1-b5d7-4d38-b639-4fde48bc3e6b", "metadata": {}, "outputs": [ { @@ -180,6 +191,7 @@ }, { "cell_type": "markdown", + "id": "a24d9191-a1aa-40ff-8b2a-96aba4258d7b", "metadata": {}, "source": [ "There is a simple [`tnopt.plot`](quimb.tensor.optimize.TNOptimizer.plot) method to visualize the loss progress (note by default the first 20 points are shown on a linear plot, the rest on a log plot):" @@ -188,2558 +200,13 @@ { "cell_type": "code", "execution_count": 9, + "id": "6ac927f4-4c1a-46d6-9ab0-a255a95b8068", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:35:49.556705\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -2767,6 +234,7 @@ }, { "cell_type": "markdown", + "id": "23879a36-5819-43b5-b7f1-1be6c5ad3b0f", "metadata": {}, "source": [ "We can check the returned `psi_opt` optimized target indeed matches loss:" @@ -2775,6 +243,7 @@ { "cell_type": "code", "execution_count": 10, + "id": "429c3953-ee06-4ce1-9b89-b79468daf879", "metadata": {}, "outputs": [ { @@ -2794,14 +263,16 @@ }, { "cell_type": "markdown", + "id": "56d72083-c659-41a3-b8d0-554ba2a7fbf8", "metadata": {}, "source": [ - "Note this TN (which can be retrieved from [`tnopt.get_tn_opt`](quimb.tensor.optimize.tnopt.TNOptimizer.get_tn_opt)) is a copy of the original target TN, with the optimized parameters set. It has also been passed through `norm_fn` so is in normalized/projected form, and converted back to `numpy` backed arrays." + "Note this TN (which can be retrieved from [`tnopt.get_tn_opt`](quimb.tensor.optimize.TNOptimizer.get_tn_opt)) is a copy of the original target TN, with the optimized parameters set. It has also been passed through `norm_fn` so is in normalized/projected form, and converted back to `numpy` backed arrays." ] }, { "attachments": {}, "cell_type": "markdown", + "id": "f67f1e14-bf72-4424-8906-69409478a5b8", "metadata": {}, "source": [ "## Using tags to opt in, opt out or group tensors\n", @@ -2820,6 +291,7 @@ { "cell_type": "code", "execution_count": 11, + "id": "d988cc62-c9f5-43f9-89a2-e627eb581f80", "metadata": {}, "outputs": [ { @@ -2853,2474 +325,13 @@ { "cell_type": "code", "execution_count": 12, + "id": "0eba2cc5-fad6-486c-b247-af717f8b6696", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:35:50.988689\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -5339,6 +350,7 @@ { "cell_type": "code", "execution_count": 13, + "id": "83427e03-ba0c-494a-98d3-169c70ae692f", "metadata": {}, "outputs": [ { @@ -5370,6 +382,7 @@ }, { "cell_type": "markdown", + "id": "b96c6021-7ce6-4724-8770-f36f5779da8c", "metadata": {}, "source": [ "You can see the dramatic reduction in the number of parameters to optimize, from 32,768 to 1,024. The optimization proceeds in the same way as before, but now the tensors A and B are constrained to be the same." @@ -5378,6 +391,7 @@ { "cell_type": "code", "execution_count": 14, + "id": "2ef1de72-8919-419d-bec4-0d80eaa86b3d", "metadata": {}, "outputs": [ { @@ -5415,2500 +429,13 @@ { "cell_type": "code", "execution_count": 15, + "id": "3575733a-5ba8-4d52-b635-84c034012191", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:36:33.317694\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -7936,6 +463,7 @@ }, { "cell_type": "markdown", + "id": "d22f796f-5933-4b28-a379-d96e8e16048f", "metadata": {}, "source": [ "The reduction in parameters also helps the optimization converge faster.\n", @@ -7946,35040 +474,13 @@ { "cell_type": "code", "execution_count": 16, + "id": "911fd7d0-b69a-4b52-8932-9fa721ac3891", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:36:33.873506\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -42998,6 +499,7 @@ }, { "cell_type": "markdown", + "id": "b1ad5a90-1fe3-4f50-b20b-b30d80ae62fb", "metadata": {}, "source": [ "(optimizing-circuits)=\n", @@ -43009,6 +511,7 @@ { "cell_type": "code", "execution_count": 17, + "id": "cb6a603e-ba03-4857-8af5-4f5cdd67ca15", "metadata": {}, "outputs": [ { @@ -43050,6 +553,7 @@ }, { "cell_type": "markdown", + "id": "82c25e32-7692-4aeb-9835-c1c18a5f1268", "metadata": {}, "source": [ "The returned circuit now has the optimized parameters set." @@ -43058,6 +562,7 @@ { "cell_type": "code", "execution_count": 18, + "id": "cd68221f-f40e-4149-be06-eecb788c358f", "metadata": {}, "outputs": [ { @@ -43082,6 +587,7 @@ { "cell_type": "code", "execution_count": 19, + "id": "509e0fe8-8264-4c3f-8bec-32a01ec0fe52", "metadata": {}, "outputs": [ { @@ -43101,6 +607,7 @@ }, { "cell_type": "markdown", + "id": "6ddfef05-04fa-46e3-85c5-080c6a5f7095", "metadata": {}, "source": [ "But the initial state and constant gates have not been changed, and becuase the parametrized tensors are manifestly unitary, it is always normalized.\n", @@ -43114,11 +621,12 @@ }, { "cell_type": "markdown", + "id": "df7cfd7a-33d6-4e0a-ad05-9a541ed8fbee", "metadata": {}, "source": [ "## Optimizing `PTensor` objects\n", "\n", - "The circuit object paramterized gates behind the scenes use a 'paramterized' tensor object, [`PTensor`](quimb.tensor.tensor.PTensor), which holds a [`PArray`](quimb.tensor.array_opts.PArray). This is a generalization of `Tensor` whose data is defined by a function and some parameters (kind of like a local `norm_fn` that is always applied). You can use these directly for even finer control.\n", + "The circuit object paramterized gates behind the scenes use a 'paramterized' tensor object, [`PTensor`](quimb.tensor.PTensor), which holds a [`PArray`](quimb.tensor.array_ops.PArray). This is a generalization of `Tensor` whose data is defined by a function and some parameters (kind of like a local `norm_fn` that is always applied). You can use these directly for even finer control.\n", "\n", "Here we show a very roundabout way of trying to diagonalize a non-symmetric matrix using two orthogonal matrices `U` and `V`." ] @@ -43126,415 +634,13 @@ { "cell_type": "code", "execution_count": 20, + "id": "bc0fbd42-63d3-4832-8848-c80861ee36db", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:36:34.917866\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -43548,1498 +654,7 @@ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:36:34.976897\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -45093,6 +708,7 @@ { "cell_type": "code", "execution_count": 21, + "id": "33201a4e-4d04-4c9a-975f-02c42ffbc05b", "metadata": {}, "outputs": [], "source": [ @@ -45105,6 +721,7 @@ }, { "cell_type": "markdown", + "id": "469826ed-a3cc-4f6b-9665-9bc82a665b5f", "metadata": {}, "source": [ "We'll also here make use of automatic hessian-vector product computation by some backends (e.g. `jax`), which is can be used with second order optimization methods like `Newton-CG`." @@ -45113,6 +730,7 @@ { "cell_type": "code", "execution_count": 22, + "id": "7bfcc1df-0fcf-4f2f-9456-38e0617528ec", "metadata": {}, "outputs": [], "source": [ @@ -45128,6 +746,7 @@ { "cell_type": "code", "execution_count": 23, + "id": "c639c11f-f59c-467d-b40d-8559d6378ade", "metadata": {}, "outputs": [ { @@ -45145,2027 +764,13 @@ { "cell_type": "code", "execution_count": 24, + "id": "7f732bc6-e98d-42f0-b7f9-1ec208d8824e", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:36:37.169069\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -47194,6 +799,7 @@ { "cell_type": "code", "execution_count": 25, + "id": "c9569835-803f-4800-9a96-1e11b698041c", "metadata": {}, "outputs": [ { @@ -47238,6 +844,7 @@ { "cell_type": "code", "execution_count": 26, + "id": "30945e98-807a-4b7f-89d8-f86be0b8fff1", "metadata": {}, "outputs": [ { @@ -47259,1511 +866,13 @@ { "cell_type": "code", "execution_count": 27, + "id": "d2494938-0019-4bf9-ba68-a98aaa7d05c9", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-05-15T11:37:07.818372\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.8.4, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" + "" ], "text/plain": [ "
" @@ -48793,7 +902,7 @@ ], "metadata": { "kernelspec": { - "display_name": "jax", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -48807,9 +916,8 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3" }, - "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "6132c5c0a7d26b7c311caf7f55df83b87474b489906668e67e2d71a3b39ab16a" diff --git a/quimb/calc.py b/quimb/calc.py index 1979e62a..87d7f72e 100644 --- a/quimb/calc.py +++ b/quimb/calc.py @@ -357,8 +357,7 @@ def simulate_counts(p, C, phys_dim=2, seed=None): {'000': 514, '111': 510} """ - if seed is not None: - np.random.seed(seed) + rng = np.random.default_rng(seed) n = infer_size(p, phys_dim) d = phys_dim**n @@ -372,7 +371,7 @@ def simulate_counts(p, C, phys_dim=2, seed=None): pi = pi.reshape(-1) # raw counts in terms of integers - raw_counts = np.random.choice(np.arange(d), size=C, p=pi) + raw_counts = rng.choice(d, size=C, p=pi) # convert to frequencies of binary bin_str = "{:0>" + str(n) + "b}" diff --git a/quimb/schematic.py b/quimb/schematic.py index e2d827d5..27f7b00b 100644 --- a/quimb/schematic.py +++ b/quimb/schematic.py @@ -430,6 +430,9 @@ def marker(self, coo, preset=None, **kwargs): coo, preset=preset, n=n, orientation=orientation, **style ) + def square(self, coo, preset=None, **kwargs): + return self.marker(coo, preset=preset, marker="s", **kwargs) + def cube(self, coo, preset=None, **kwargs): """Draw a cube at the specified coordinate, which must be 3D. @@ -825,6 +828,24 @@ def shape(self, coos, preset=None, **kwargs): for coo in coos: self._adjust_lims(*coo) + def rectangle(self, cooa, coob, preset=None, **kwargs): + style = parse_style_preset(self.presets, preset, **kwargs) + radius = style.pop("radius", 0.25) + + forward, inverse = get_rotator_and_inverse(cooa, coob) + + # rotate both onto y=0 + xa, _ = forward(*cooa) + xb, _ = forward(*coob) + points = [ + (xa - radius, -radius), + (xa - radius, +radius), + (xb + radius, +radius), + (xb + radius, -radius), + ] + points = [inverse(*coo) for coo in points] + self.shape(points, **style) + def patch(self, coos, preset=None, **kwargs): """Draw a closed smooth patch through given coordinates. diff --git a/quimb/tensor/__init__.py b/quimb/tensor/__init__.py index da946f8c..a34316d7 100644 --- a/quimb/tensor/__init__.py +++ b/quimb/tensor/__init__.py @@ -8,6 +8,7 @@ Gate, ) from .circuit_gen import ( + circ_a2a_rand, circ_ansatz_1D_brickwork, circ_ansatz_1D_rand, circ_ansatz_1D_zigzag, @@ -222,6 +223,7 @@ "array_contract", "bonds_size", "bonds", + "circ_a2a_rand", "circ_ansatz_1D_brickwork", "circ_ansatz_1D_rand", "circ_ansatz_1D_zigzag", diff --git a/quimb/tensor/circuit.py b/quimb/tensor/circuit.py index 113fe104..e8a988c4 100644 --- a/quimb/tensor/circuit.py +++ b/quimb/tensor/circuit.py @@ -1361,7 +1361,7 @@ def __repr__(self): ) -def sample_bitstring_from_prob_ndarray(p): +def sample_bitstring_from_prob_ndarray(p, seed=None): """Sample a bitstring from n-dimensional tensor ``p`` of probabilities. Examples @@ -1373,7 +1373,8 @@ def sample_bitstring_from_prob_ndarray(p): >>> sample_bitstring_from_prob_ndarray(p) '01011' """ - b = np.random.choice(p.size, p=p.flat) + rng = np.random.default_rng(seed) + b = rng.choice(p.size, p=p.ravel()) return f"{b:0>{p.ndim}b}" @@ -2642,7 +2643,7 @@ def amplitude( optimize="auto-hq", simplify_sequence="ADCRS", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, backend=None, dtype="complex128", rehearse=False, @@ -2701,7 +2702,7 @@ def amplitude( # fix the output indices to the correct bitstring for i, x in zip(range(self.N), b): - psi_b.isel_({psi_b.site_ind(i): int(x)}) + psi_b.isel_({psi_b.site_ind(i): x}) # perform a final simplification and cast psi_b.full_simplify_(**fs_opts) @@ -2727,7 +2728,7 @@ def amplitude_rehearse( b="random", simplify_sequence="ADCRS", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, optimize="auto-hq", dtype="complex128", rehearse=True, @@ -2766,9 +2767,7 @@ def amplitude_rehearse( """ if b == "random": - import random - - b = [random.choice("01") for _ in range(self.N)] + b = "r" * self.N return self.amplitude( b=b, @@ -2788,7 +2787,7 @@ def partial_trace( optimize="auto-hq", simplify_sequence="ADCRS", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, backend=None, dtype="complex128", rehearse=False, @@ -2885,7 +2884,7 @@ def local_expectation( optimize="auto-hq", simplify_sequence="ADCRS", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, backend=None, dtype="complex128", rehearse=False, @@ -3078,7 +3077,7 @@ def compute_marginal( if fix: # project (slice) fixed tensors with bitstring # this severs the indices connecting bra and ket on fixed sites - nm_lc.isel_({self.ket_site_ind(i): int(b) for i, b in fix.items()}) + nm_lc.isel_({self.ket_site_ind(i): b for i, b in fix.items()}) # having sliced we can do a final simplify nm_lc.full_simplify_(output_inds=output_inds, **fs_opts) @@ -3215,12 +3214,149 @@ def _group_order(self, order, group_size=1): tuple(sorted(g)) for g in partition_all(group_size, order) ) + def get_qubit_distances(self, method="dijkstra", alpha=2): + """Get a nested dictionary of qubit distances. This is computed from a + graph representing qubit interactions. The graph has an edge between + qubits if they are acted on by the same gate, and the distance-weight + of the edge is exponentially small in the number of gates between them. + + Parameters + ---------- + method : {'dijkstra', 'resistance'}, optional + The method to use to compute the qubit distances. See + :func:`networkx.all_pairs_dijkstra_path_length` and + :func:`networkx.resistance_distance`. + alpha : float, optional + The distance weight between qubits is ``alpha**(num_gates - 1 )``. + + Returns + ------- + dict[int, dict[int, float]] + The distance between each pair of qubits, accessed like + ``distances[q1][q2]``. If two qubits are not connected, the + distance is missing. + """ + import networkx as nx + + G = nx.Graph() + for g in self.gates: + for q1, q2 in itertools.combinations(g.qubits, 2): + if G.has_edge(q1, q2): + G[q1][q2]["weight"] /= alpha + else: + G.add_edge(q1, q2, weight=1) + + if method == "dijkstra": + distances = dict( + nx.all_pairs_dijkstra_path_length(G, weight="weight") + ) + elif method == "resistance": + distances = nx.resistance_distance(G, weight="weight") + else: + raise ValueError(f"Unknown method {method}.") + + return distances + + def reordered_gates_dfs_clustered(self): + """Get the gates reordered by a depth first search traversal of the + multi-qubit gate graph that greedily selects successive gates which + are 'close' in graph distance, and shifts single qubit gates to be + adjacent to multi-qubit gates where possible. + """ + # first we make a directed graph of the multi-qubit gates + successors = {} + predecessors = {} + single_qubit_stacks = {} + single_qubit_predecessors = {} + last_gates = {} + queue = [] + + for i, g in enumerate(self.gates): + if g.total_qubit_count == 1: + # lazily accumulate single qubit gates + (q,) = g.qubits + single_qubit_stacks.setdefault(q, []).append(i) + + else: + pi = predecessors[i] = [] + sqpi = single_qubit_predecessors[i] = [] + + for q in g.qubits: + # collect any single qubit gates acting on this qubit + sqpi.extend(single_qubit_stacks.pop(q, [])) + + if q in last_gates: + # qubit has already been acted on -> have an edge + h = last_gates[q] + # mark h as a predecessor of i + pi.append(h) + # mark i as a successor of h + successors.setdefault(h, []).append(i) + + # mark qubit as acted on + last_gates[q] = i + + if len(pi) == 0: + # no predecessors -> is possible starting multiqubit gate + queue.append(i) + + # then we traverse the multi-qubit gates in a depth first, topological + # order, breaking ties by minimizing the distance between active qubits + distances = self.get_qubit_distances() + + def gate_distance(i, j): + qis = self.gates[i].qubits + qjs = self.gates[j].qubits + return min( + distances[q1].get(q2, float("inf")) for q1 in qis for q2 in qjs + ) + + # sort initial queue by qubit with smallest index + queue.sort(key=lambda i: min(self.gates[i].qubits)) + new_gates = [] + + while queue: + i = queue.pop(0) + + # first flush any single qubit gates acting on the qubits of gate i + new_gates.extend( + self.gates[j] for j in single_qubit_predecessors.pop(i, []) + ) + # then add the gate itself + new_gates.append(self.gates[i]) + + # then remove i as a predecessor of its successors + for j in successors.pop(i, []): + pj = predecessors[j] + pj.remove(i) + if not pj: + # j has no more predecessors -> can be added to queue + queue.append(j) + + # check if this is the last time q is acted on, + # if so flush any remaining single qubit gates + for q in self.gates[i].qubits: + if last_gates[q] == i: + # qubit has been acted on for the last time + new_gates.extend( + self.gates[j] for j in single_qubit_stacks.pop(q, []) + ) + + # sort the queue of possible next gates + queue.sort(key=lambda k: gate_distance(i, k)) + + # flush any remaining single qubit gates + for q in sorted(single_qubit_stacks): + new_gates.extend(self.gates[j] for j in single_qubit_stacks.pop(q)) + + return new_gates + def sample( self, C, qubits=None, order=None, - group_size=1, + group_size=10, max_marginal_storage=2**20, seed=None, optimize="auto-hq", @@ -3228,7 +3364,7 @@ def sample( dtype="complex64", simplify_sequence="ADCRS", simplify_atol=1e-6, - simplify_equalize_norms=False, + simplify_equalize_norms=True, ): r"""Sample the circuit given by ``gates``, ``C`` times, using lightcone cancelling and caching marginal distribution results. This is a @@ -3319,15 +3455,14 @@ def sample( # init TN norms, contraction trees, and marginals self._maybe_init_storage() + rng = np.random.default_rng(seed) + # which qubits and an ordering e.g. (2, 3, 4, 5), (5, 3, 4, 2) qubits, order = self._parse_qubits_order(qubits, order) # group the ordering e.g. ((5, 3), (4, 2)) groups = self._group_order(order, group_size) - if seed is not None: - np.random.seed(seed) - result = dict() for _ in range(C): for where in groups: @@ -3360,7 +3495,7 @@ def sample( p = self._sampled_conditionals[key] # the sampled bitstring e.g. '1' or '001010101' - b_where = sample_bitstring_from_prob_ndarray(p) + b_where = sample_bitstring_from_prob_ndarray(p, seed=rng) # split back into individual qubit results for q, b in zip(where, b_where): @@ -3373,12 +3508,12 @@ def sample_rehearse( self, qubits=None, order=None, - group_size=1, + group_size=10, result=None, optimize="auto-hq", simplify_sequence="ADCRS", simplify_atol=1e-6, - simplify_equalize_norms=False, + simplify_equalize_norms=True, rehearse=True, progbar=False, ): @@ -3431,7 +3566,7 @@ def sample_rehearse( groups = self._group_order(order, group_size) if result is None: - result = {q: "0" for q in qubits} + result = {q: "r" for q in qubits} fix = {} tns_and_trees = {} @@ -3459,6 +3594,7 @@ def sample_chaotic( self, C, marginal_qubits, + fix=None, max_marginal_storage=2**20, seed=None, optimize="auto-hq", @@ -3466,7 +3602,7 @@ def sample_chaotic( dtype="complex64", simplify_sequence="ADCRS", simplify_atol=1e-6, - simplify_equalize_norms=False, + simplify_equalize_norms=True, ): r"""Sample from this circuit, *assuming* it to be chaotic. Which is to say, only compute and sample correctly from the final marginal, @@ -3502,6 +3638,9 @@ def sample_chaotic( The number of qubits to treat as marginal, or the actual qubits. If an int is given then the qubits treated as marginal will be ``circuit.calc_qubit_ordering()[:marginal_qubits]``. + fix : None or dict[int, str], optional + Measurement results on other qubits to fix. These will be randomly + sampled if ``fix`` is not given or a qubit is missing. seed : None or int, optional A random seed, passed to ``numpy.random.seed`` if given. optimize : str, optional @@ -3531,8 +3670,7 @@ def sample_chaotic( self._maybe_init_storage() qubits = tuple(range(self.N)) - if seed is not None: - np.random.seed(seed) + rng = np.random.default_rng(seed) # choose which qubits to treat as marginal - ideally 'towards one side' # to increase contraction efficiency @@ -3547,7 +3685,10 @@ def sample_chaotic( for _ in range(C): # generate a random bit-string for the fixed qubits for q in fix_qubits: - result[q] = np.random.choice(("0", "1")) + if (fix is None) or (q not in fix): + result[q] = rng.choice(("0", "1")) + else: + result[q] = fix[q] # compute the remaining marginal key = (where, tuple(sorted(result.items()))) @@ -3588,7 +3729,7 @@ def sample_chaotic_rehearse( optimize="auto-hq", simplify_sequence="ADCRS", simplify_atol=1e-6, - simplify_equalize_norms=False, + simplify_equalize_norms=True, dtype="complex64", rehearse=True, ): @@ -3664,13 +3805,275 @@ def sample_chaotic_rehearse( sample_chaotic_rehearse, rehearse="tn" ) + def get_gate_by_gate_circuits(self, group_size=10): + """Get a sequence of circuits by partitioning the gates into groups + such circuit `i + 1` acts on at most ``group_size`` new qubits compared + to circuit `i`. + + Parameters + ---------- + group_size : int, optional + The maximum number of new qubits that can be acted on by a circuit + compared to its predecessor. + + Returns + ------- + Sequence[dict] + A sequence of dicts, each with keys ``'circuit'`` and ``'where'``, + where the former is a :class:`~quimb.tensor.circuit.Circuit` and + the latter the tuple of new qubits that it acts on comparaed to + the previous circuit. + """ + circs = [self.__class__(self.N)] + groups = [] + current_group = set() + + # this ensures that single qubit gates are always adjacent to + # multi-qubit gates and will thus always be included in the same group + gates = self.reordered_gates_dfs_clustered() + + for gate in gates: + # if we were to add next gate, how many new qubits would we have? + next_group = current_group.union(gate.qubits) + if len(next_group) > group_size: + # over the limit: flush a copy of the current circuit and group + groups.append(tuple(sorted(current_group))) + circs.append(circs[-1].copy()) + # start a new group + current_group = set(gate.qubits) + else: + # add the gate to the current group + current_group = next_group + circs[-1].apply_gate(gate) + + # add the final group corresponding to circs[-1] + groups.append(tuple(sorted(current_group))) + + return tuple({"circuit": c, "where": g} for c, g in zip(circs, groups)) + + def sample_gate_by_gate( + self, + C, + group_size=10, + seed=None, + max_marginal_storage=2**20, + optimize="auto-hq", + backend=None, + dtype="complex64", + simplify_sequence="ADCRS", + simplify_atol=1e-6, + simplify_equalize_norms=True, + ): + """Sample this circuit using the gate-by-gate method, where we 'evolve' + a result bitstring by sequentially including more and more gates, at + each step updating the result by computing a full conditional marginal. + See "How to simulate quantum measurement without computing marginals" + by Sergey Bravyi, David Gosset, Yinchen Liu + (https://arxiv.org/abs/2112.08499). The overall complexity of this is + guaranteed to be similar to that of computing a single amplitude which + can be much better than the naive "qubit-by-qubit" (`.sample`) method. + However, it requires evaluting a number of tensor networks that scales + linearly with the number of gates which can offset any practical + advantages for shallow circuits for example. + + Parameters + ---------- + C : int + The number of samples to generate. + group_size : int, optional + The maximum number of qubits that can be acted on by a circuit + compared to its predecessor. This will be the dimension of the + marginal computed at each step. + seed : None or int, optional + A random seed, passed to ``numpy.random.seed`` if given. + max_marginal_storage : int, optional + The total cumulative number of marginal probabilites to cache, once + this is exceeded caching will be turned off. + optimize : str, optional + Contraction path optimizer to use for the marginals, shouldn't be + a non-reusable path optimizer as called on many different TNs. + Passed to :func:`cotengra.array_contract_tree`. + backend : str, optional + Backend to perform the marginal contraction with, e.g. ``'numpy'``, + ``'cupy'`` or ``'jax'``. Passed to ``cotengra``. + dtype : str, optional + Data type to cast the TN to before contraction. + simplify_sequence : str, optional + Which local tensor network simplifications to perform and in which + order, see + :meth:`~quimb.tensor.tensor_core.TensorNetwork.full_simplify`. + simplify_atol : float, optional + The tolerance with which to compare to zero when applying + :meth:`~quimb.tensor.tensor_core.TensorNetwork.full_simplify`. + simplify_equalize_norms : bool, optional + Actively renormalize tensor norms during simplification. + rehearse : bool, optional + If ``True``, generate and cache the simplified tensor network and + contraction tree but don't actually perform the contraction. + Returns a dict with keys ``'tn'`` and ``'tree'`` with the tensor + network that will be contracted and the corresponding contraction + tree if so. + + Yields + ------ + str + """ + self._maybe_init_storage() + + rng = np.random.default_rng(seed) + + key = ("gate_by_gate_circuits", group_size) + try: + circs_wheres = self._storage[key] + except KeyError: + circs_wheres = self.get_gate_by_gate_circuits(group_size) + self._storage[key] = circs_wheres + + for _ in range(C): + # start with all qubits in the |0> state + result = {q: "0" for q in range(self.N)} + + for circ_where in circs_wheres: + # get the next circuit and the new group of qubits + circ_g = circ_where["circuit"] + where = circ_where["where"] + + # remove the new group of qubits from our current result + for q in where: + result.pop(q) + + # check if we have already computed the conditional + key = (where, tuple(sorted(result.items()))) + + if key not in circ_g._sampled_conditionals: + p = circ_g.compute_marginal( + where, + fix=result, + optimize=optimize, + backend=backend, + dtype=dtype, + simplify_sequence=simplify_sequence, + simplify_atol=simplify_atol, + simplify_equalize_norms=simplify_equalize_norms, + ) + p /= p.sum() + + if circ_g._marginal_storage_size <= max_marginal_storage: + circ_g._sampled_conditionals[key] = p + circ_g._marginal_storage_size += p.size + else: + p = circ_g._sampled_conditionals[key] + + # sample a configuration for our new group + b_where = sample_bitstring_from_prob_ndarray(p, seed=rng) + + # update the fixed qubits given new group result + for q, qx in zip(where, b_where): + result[q] = qx + + yield "".join(result[i] for i in range(self.N)) + + def sample_gate_by_gate_rehearse( + self, + group_size=10, + optimize="auto-hq", + dtype="complex64", + simplify_sequence="ADCRS", + simplify_atol=1e-6, + simplify_equalize_norms=True, + rehearse=True, + progbar=False, + ): + """Perform the preparations and contraction tree findings for + :meth:`~quimb.tensor.circuit.Circuit.sample_gate_by_gate`, caching + various intermedidate objects, but don't perform the main contractions. + + Parameters + ---------- + group_size : int, optional + The maximum number of qubits that can be acted on by a circuit + compared to its predecessor. This will be the dimension of the + marginal computed at each step. + optimize : str, optional + Contraction path optimizer to use for the marginals, shouldn't be + a non-reusable path optimizer as called on many different TNs. + Passed to :func:`cotengra.array_contract_tree`. + dtype : str, optional + Data type to cast the TN to before contraction. + simplify_sequence : str, optional + Which local tensor network simplifications to perform and in which + order, see + :meth:`~quimb.tensor.tensor_core.TensorNetwork.full_simplify`. + simplify_atol : float, optional + The tolerance with which to compare to zero when applying + :meth:`~quimb.tensor.tensor_core.TensorNetwork.full_simplify`. + simplify_equalize_norms : bool, optional + Actively renormalize tensor norms during simplification. + rehearse : True or "tn", optional + If ``True``, generate and cache the simplified tensor network and + contraction tree but don't actually perform the contraction. If + "tn", only generate the simplified tensor networks. + + Returns + ------- + Sequence[dict] or Sequence[TensorNetwork] + """ + self._maybe_init_storage() + + key = ("gate_by_gate_circuits", group_size) + try: + circs_wheres = self._storage[key] + except KeyError: + circs_wheres = self.get_gate_by_gate_circuits(group_size) + self._storage[key] = circs_wheres + + rehs = [] + result = {q: "0" for q in range(self.N)} + + for circs_wheres in _progbar(circs_wheres, disable=not progbar): + # get the next circuit and the new group of qubits + circ_g = circs_wheres["circuit"] + where = circs_wheres["where"] + + # remove the new group of qubits from our current result + for q in where: + result.pop(q) + + r = circ_g.compute_marginal( + where, + fix=result, + optimize=optimize, + dtype=dtype, + simplify_sequence=simplify_sequence, + simplify_atol=simplify_atol, + simplify_equalize_norms=simplify_equalize_norms, + rehearse=rehearse, + ) + + if rehearse != "tn": + r["where"] = where + r["circuit"] = circ_g + + rehs.append(r) + + # update the fixed qubits with randomly rotated results so we + # don't get zero probability networks when simplifying + for q in where: + result[q] = "r" + + return rehs + + sample_gate_by_gate_tns = functools.partialmethod( + sample_gate_by_gate_rehearse, rehearse="tn" + ) + def to_dense( self, reverse=False, optimize="auto-hq", simplify_sequence="R", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, backend=None, dtype=None, rehearse=False, @@ -3846,7 +4249,7 @@ def xeb_ex( optimize="auto-hq", simplify_sequence="R", simplify_atol=1e-12, - simplify_equalize_norms=False, + simplify_equalize_norms=True, dtype=None, backend=None, autojit=False, @@ -3957,6 +4360,112 @@ def update_params_from(self, tn): self.clear_storage() + def draw( + self, + figsize=None, + radius=1 / 3, + drawcolor=(0.5, 0.5, 0.5), + linewidth=1, + ): + """Draw a simple linear schematic of the circuit. + + Parameters + ---------- + figsize : tuple, optional + The size of the figure, if not given will be set based on the + number of gates and qubits. + radius : float, optional + The radius of the gates. + drawcolor : tuple, optional + The color of the wires. + linewidth : float, optional + The linewidth of the wires. + + Returns + ------- + fig : matplotlib.Figure + The figure object. + ax : matplotlib.Axes + The axis object. + """ + from quimb.schematic import Drawing, hash_to_color + + if figsize is None: + figsize = (self.num_gates / 6, self.N / 6) + + d = Drawing( + figsize=figsize, + presets=dict( + wire=dict( + color=drawcolor, + linewidth=linewidth, + ), + gate=dict( + radius=radius, + ), + ), + ) + + depths = {} + for i, g in enumerate(self.gates): + # level = max(depths.get(q, 0) for q in g.qubits) + 1 + level = i + + if len(g.qubits) == 1: + (q,) = g.qubits + # draw line from previous gate to this one + d.line( + (depths.get(q, -1) + radius, q), + (level - radius, q), + preset="wire", + zorder=level, + ) + # draw the gate + d.marker( + (level, q), + color=hash_to_color(g.label), + zorder=0, + preset="gate", + ) + # record last gate on this qubit + depths[q] = level + else: + # stretch a box over all qubits + qmin = min(g.qubits) + qmax = max(g.qubits) + d.rectangle( + (level, qmin), + (level, qmax), + color=hash_to_color(g.label), + zorder=0, + alpha=1 / 3, + preset="gate", + ) + for q in g.qubits: + # draw markers on each qubit acted on + d.marker( + (level, q), + color=hash_to_color(g.label), + zorder=0, + preset="gate", + ) + # draw lines from previous gate to this one + d.line( + (depths.get(q, -1) + radius, q), + (level - radius, q), + preset="wire", + zorder=level, + ) + # record last gate on this qubit + depths[q] = level + + # draw final lines to the right + level = max(depths.values(), default=0) + 1 + for q in depths: + d.line((depths.get(q, -1), q), (level, q), preset="wire") + + return d.fig, d.ax + def __repr__(self): r = "" return r.format(self.N, self.num_gates, self.gate_opts) @@ -4152,6 +4661,36 @@ def error_estimate(self): """ return 1 - self.fidelity_estimate() + def local_expectation( + self, + G, + where, + normalized=False, + **contract_opts, + ): + """Compute the local expectation value of a local operator at ``where`` + (via forming the reduced density matrix). Note this moves the + orthogonality around inplace, and records it in `info`. + + Parameters + ---------- + G : Tensor + The local operator tensor. + where : int + The qubit to compute the expectation value at. + + Returns + ------- + float + """ + return self._psi.local_expectation_canonical( + G, + where, + normalized=normalized, + info=self.gate_opts["info"], + **contract_opts, + ) + class CircuitPermMPS(CircuitMPS): """Quantum circuit simulation keeping the state always in an MPS form, but diff --git a/quimb/tensor/circuit_gen.py b/quimb/tensor/circuit_gen.py index 8639a800..e4d93fff 100644 --- a/quimb/tensor/circuit_gen.py +++ b/quimb/tensor/circuit_gen.py @@ -1,5 +1,4 @@ -"""Functions for generating specific, e.g. ansatz, circuits. -""" +"""Functions for generating specific, e.g. ansatz, circuits.""" import math import random @@ -10,7 +9,7 @@ def inject_u3s( ent_gates, - gate2='cz', + gate2="cz", avoid_doubling=False, seed=None, ): @@ -65,11 +64,10 @@ def inject_u3s( gates = [] # consume list of pairs to entangle while ent_gates: - # break up entanling gates with U3s where necesary for i in range(n): if needs_u3[i]: - gates.append(('U3', *rand(3, scale=2 * math.pi), i)) + gates.append(("U3", *rand(3, scale=2 * math.pi), i)) needs_u3[i] = False # try and get the next entanling gate which is not 'doubled' @@ -91,8 +89,7 @@ def inject_u3s( # ^ ^ ^ ^ if avoid_doubling: just_entangled = { - ij for ij in just_entangled - if (i not in ij) and (j not in ij) + ij for ij in just_entangled if (i not in ij) and (j not in ij) } just_entangled.add((i, j)) @@ -102,12 +99,12 @@ def inject_u3s( # place the final layer of U3s for i in range(n): if needs_u3[i]: - gates.append(('U3', *rand(3, scale=2 * math.pi), i)) + gates.append(("U3", *rand(3, scale=2 * math.pi), i)) return gates -def gates_to_param_circuit(gates, n, parametrize='U3', **circuit_opts): +def gates_to_param_circuit(gates, n, parametrize="U3", **circuit_opts): """Turn the sequence ``gates`` into a ``Circuit`` of ``n`` qubits, with any gates that appear in ``parametrize`` being... parametrized. @@ -138,13 +135,7 @@ def gates_to_param_circuit(gates, n, parametrize='U3', **circuit_opts): return circ -def circ_ansatz_1D_zigzag( - n, - depth, - gate2='cz', - seed=None, - **circuit_opts -): +def circ_ansatz_1D_zigzag(n, depth, gate2="cz", seed=None, **circuit_opts): r"""A 1D circuit ansatz with forward and backward layers of entangling gates interleaved with U3 single qubit unitaries:: @@ -203,11 +194,7 @@ def circ_ansatz_1D_zigzag( def circ_ansatz_1D_brickwork( - n, depth, - cyclic=False, - gate2='cz', - seed=None, - **circuit_opts + n, depth, cyclic=False, gate2="cz", seed=None, **circuit_opts ): r"""A 1D circuit ansatz with odd and even layers of entangling gates interleaved with U3 single qubit unitaries:: @@ -254,7 +241,6 @@ def circ_ansatz_1D_brickwork( """ ent_gates = [] for d in range(depth): - # the even pairs layer ent_gates.extend((i, i + 1) for i in range(0, n - 1, 2)) if cyclic and (n % 2 == 1): @@ -277,9 +263,9 @@ def circ_ansatz_1D_rand( depth, seed=None, cyclic=False, - gate2='cz', + gate2="cz", avoid_doubling=True, - **circuit_opts + **circuit_opts, ): """A 1D circuit ansatz with randomly place entangling gates interleaved with U3 single qubit unitaries. @@ -322,13 +308,37 @@ def circ_ansatz_1D_rand( random.shuffle(ent_gates) # inject U3 gates! - gates = inject_u3s(ent_gates, avoid_doubling=avoid_doubling, - gate2=gate2, seed=seed) + gates = inject_u3s( + ent_gates, avoid_doubling=avoid_doubling, gate2=gate2, seed=seed + ) circ = gates_to_param_circuit(gates, n, **circuit_opts) return circ +def circ_a2a_rand( + n, + depth, + seed=None, + gate2="cz", +): + if not isinstance(seed, random.Random): + rng = random.Random(seed) + + qubits = list(range(n)) + + ent_gates = [] + for _ in range(depth): + rng.shuffle(qubits) + for i, j in zip(qubits[::2], qubits[1::2]): + ent_gates.append((i, j)) + + gates = inject_u3s(ent_gates, gate2=gate2, seed=seed) + circ = gates_to_param_circuit(gates, n) + + return circ + + def circ_qaoa( terms, depth, @@ -377,8 +387,8 @@ def circ_qaoa( """ from .circuit import Circuit - circuit_opts.setdefault('gate_opts', {}) - circuit_opts['gate_opts'].setdefault('contract', False) + circuit_opts.setdefault("gate_opts", {}) + circuit_opts["gate_opts"].setdefault("contract", False) n = max(itertools.chain.from_iterable(terms)) + 1 @@ -386,14 +396,14 @@ def circ_qaoa( # layer of hadamards to get into plus state for i in range(n): - gates.append((0, 'h', i)) + gates.append((0, "h", i)) for d in range(depth): for (i, j), wij in terms.items(): - gates.append((d, 'rzz', wij * gammas[d], i, j)) + gates.append((d, "rzz", wij * gammas[d], i, j)) for i in range(n): - gates.append((d, 'rx', -betas[d] * 2, i)) + gates.append((d, "rx", -betas[d] * 2, i)) circ = Circuit(n, **circuit_opts) circ.apply_gates(gates) diff --git a/quimb/tensor/tensor_1d.py b/quimb/tensor/tensor_1d.py index 0d3c73e4..72543c1a 100644 --- a/quimb/tensor/tensor_1d.py +++ b/quimb/tensor/tensor_1d.py @@ -548,6 +548,56 @@ def contract_structured( # contract each block of sites cumulatively return self.contract_cumulative(tags_seq, inplace=inplace, **opts) + def compute_left_environments(self, **contract_opts): + """Compute the left environments of this 1D tensor network. + + Parameters + ---------- + contract_opts + Supplied to + :meth:`~quimb.tensor.tensor_core.TensorNetwork.contract`. + + Returns + ------- + dict[int, Tensor] + Environments indexed by the site they are to the left of, so keys + run from (1, ... L - 1). + """ + left_envs = {1: self.select(0).contract(all, **contract_opts)} + for i in range(2, self.L): + tll = left_envs[i - 1] + tll.drop_tags() + tnl = self.select(i - 1) | tll + left_envs[i] = tnl.contract(all, **contract_opts) + + return left_envs + + def compute_right_environments(self, **contract_opts): + """Compute the right environments of this 1D tensor network. + + Parameters + ---------- + contract_opts + Supplied to + :meth:`~quimb.tensor.tensor_core.TensorNetwork.contract`. + + Returns + ------- + dict[int, Tensor] + Environments indexed by the site they are to the right of, so keys + run from (0, ... L - 2). + """ + right_envs = { + self.L - 2: self.select(-1).contract(all, **contract_opts) + } + for i in range(self.L - 3, -1, -1): + trr = right_envs[i + 1] + trr.drop_tags() + tnr = self.select(i + 1) | trr + right_envs[i] = tnr.contract() + + return right_envs + def _repr_info(self): info = super()._repr_info() info["L"] = self.L @@ -2431,7 +2481,9 @@ def schmidt_gap(self, i, info=None, method="svd"): return S[0] - S[1] - def partial_trace(self, keep, upper_ind_id="b{}", rescale_sites=True): + def partial_trace_to_mpo( + self, keep, upper_ind_id="b{}", rescale_sites=True + ): r"""Partially trace this matrix product state, producing a matrix product operator. @@ -2516,12 +2568,356 @@ def partial_trace(self, keep, upper_ind_id="b{}", rescale_sites=True): rho.fuse_multibonds_() return rho - def ptr(self, keep, upper_ind_id="b{}", rescale_sites=True): - """Alias of :meth:`~quimb.tensor.MatrixProductState.partial_trace`.""" - return self.partial_trace( - keep, upper_ind_id, rescale_sites=rescale_sites + def partial_trace(self, *_, **__): + raise AttributeError( + "`mps.partial_trace` has been renamed to " + "`mps.partial_trace_to_mpo`. Soon `mps.partial_trace` " + "will produce (dense) local reduced density matrices to match " + "methods elsewhere in quimb." + ) + + def ptr(self, *_, **__): + raise AttributeError( + "`mps.ptr` has been renamed " "to `mps.partial_trace_to_mpo`." ) + def partial_trace_to_dense_canonical( + self, where, normalized=True, info=None, **contract_opts + ): + """Compute the dense local reduced density matrix by canonicalizing + around the target sites and then contracting the local tensors. Note + this moves the orthogonality around inplace, and records it in `info`. + + Parameters + ---------- + where : int or tuple[int] + The site or sites to compute the reduced density matrix for. + normalized : bool, optional + Explicitly normalize the local reduced density matrix. + info : dict, optional + If supplied, will be used to infer and store various extra + information. Currently the key "cur_orthog" is used to store the + current orthogonality center. Its input value can be ``"calc"``, a + single site, or a pair of sites representing the min/max range, + inclusive. It will be updated to the actual range after. + contract_opts + Passed to `tensor_contract` when computing the reduced local + density matrix. + + Returns + ------- + array_like + """ + if self.cyclic: + raise NotImplementedError("Only supports OBC.") + + if isinstance(where, Integral): + where = (where,) + + # canonicalize around our sites + self.canonicalize_(where, info=info) + + # form the local reduced density matrix tn + kix = [self.site_ind(i) for i in where] + bix = [f"__b{i}__" for i in where] + k = self[min(where) : max(where) + 1] + b = k.reindex(dict(zip(kix, bix))).conj_() + rho_tn = k | b + + # contract down to a matrix + rho = rho_tn.to_dense(kix, bix, **contract_opts) + + if normalized: + # locally normalize, usually unnecessary for an MPS but cheap + rho = rho / do("trace", rho) + + return rho + + def local_expectation_canonical( + self, G, where, normalized=True, info=None, **contract_opts + ): + """Compute a local expectation value (via forming the reduced density + matrix). Note this moves the orthogonality around inplace, and records + it in `info`. + + Parameters + ---------- + G : array_like + The local operator to compute the expectation of. + where : int or tuple[int] + The site or sites to compute the expectation at. + normalized : bool, optional + Explicitly normalize the local reduced density matrix. + info : dict, optional + If supplied, will be used to infer and store various extra + information. Currently the key "cur_orthog" is used to store the + current orthogonality center. Its input value can be ``"calc"``, a + single site, or a pair of sites representing the min/max range, + inclusive. It will be updated to the actual range after. + contract_opts + Passed to `tensor_contract` when computing the reduced local + density matrix. + + Returns + ------- + float + """ + rho = self.partial_trace_to_dense_canonical( + where, normalized=normalized, info=info, **contract_opts + ) + return do("trace", G @ rho) + + def compute_local_expectation_canonical( + self, + terms, + normalized=True, + return_all=False, + info=None, + inplace=False, + **contract_opts, + ): + """Compute many local expectations at once, via forming the relevant + reduced density matrices via canonicalization. This moves the + orthogonality around inplace, and records it in `info`. + + Parameters + ---------- + terms : dict[int or tuple[int], array_like] + The local terms to compute values for. + normalized : bool, optional + Explicitly normalize each local reduced density matrix. + return_all : bool, optional + Whether to return each expectation in `terms` separately + or sum them all together (the default). + info : dict, optional + If supplied, will be used to infer and store various extra + information. Currently, the key "cur_orthog" is used to store the + current orthogonality center. Its input value can be ``"calc"``, a + single site, or a pair of sites representing the min/max range, + inclusive. It will be updated to the actual range after. + inplace : bool, optional + Whether to perform the required canonicalizations inplace. + contract_opts + Supplied to + :meth:`~quimb.tensor.tensor_core.TensorNetwork.contract` + when contracting the local density matrices. + + Returns + ------- + float or dict[in or tuple[int], float] + The expecetation value(s), either summed or for each term if + `return_all=True`. + + See Also + -------- + compute_local_expectation_via_envs, local_expectation_canonical + partial_trace_to_dense_canonical + """ + if info is None: + # this is used to keep track of canonical center + info = {} + + if inplace: + mps = self + else: + mps = self.copy() + info = info.copy() + + cur_orthog = info.get("cur_orthog", "calc") + if isinstance(cur_orthog, tuple): + # have a canonical center already -> start close to it + terms = sorted( + terms.items(), key=lambda kv: abs(min(kv[0]) - cur_orthog[0]) + ) + else: + # sort by the smallest site so we sweep in one direction + terms = sorted(terms.items(), key=lambda kv: min(kv[0])) + + expecs = { + where: mps.local_expectation_canonical( + G, + where, + normalized=normalized, + info=info, + **contract_opts, + ) + for where, G in terms + } + + if return_all: + return expecs + + return functools.reduce(operator.add, expecs.values()) + + def compute_local_expectation_via_envs( + self, + terms, + normalized=True, + return_all=False, + **contract_opts, + ): + """Compute many local expectations at once, via forming the relevant + local overlaps using left and right environments formed via + contraction. This does not require any canonicalization and can be + quicker if the canonical center is not already aligned. + + Parameters + ---------- + terms : dict[int or tuple[int], array_like] + The local terms to compute values for. + normalized : bool, optional + Explicitly normalize each local reduced density matrix. + return_all : bool, optional + Whether to return each expectation in `terms` separately + or sum them all together (the default). + contract_opts + Supplied to + :meth:`~quimb.tensor.tensor_core.TensorNetwork.contract` + when contracting the local overlaps. + + Returns + ------- + float or dict[int or tuple[int], float] + The expecetation value(s), either summed or for each term if + `return_all=True`. + + See Also + -------- + compute_local_expectation_canonical, compute_left_environments, + compute_right_environments + """ + norm, ket, bra = self.make_norm(return_all=True) + + left_envs = norm.compute_left_environments(**contract_opts) + right_envs = norm.compute_right_environments(**contract_opts) + + expecs = {} + + if normalized: + nfactor = (norm.select(0) | right_envs[0]).contract( + all, **contract_opts + ) + else: + nfactor = None + + for where, G in terms.items(): + sitemin = min(where) + sitemax = max(where) + tags = [ket.site_tag(i) for i in range(sitemin, sitemax + 1)] + # form: + # sitemin sitemax + # : : + # ┌─┐ ┌─┐ + # ┌──┤k├─┤k├──┐ + # │ └┬┘ └┬┘ │ + # │ │ │ │ + # ┌┴┐ ┌┴───┴┐ ┌┴┐ + # │l│ │ G │ │r│ + # └┬┘ └┬───┬┘ └┬┘ + # │ │ │ │ + # │ ┌┴┐ ┌┴┐ │ + # └──┤b├─┤b├──┘ + # └─┘ └─┘ + # (n.b. might be non-gated sites in between as well) + k = ket.select_any(tags, virtual=False) + b = bra.select_any(tags, virtual=False) + k.gate_(G, where, contract=False) + + tn_local_overlap = k | b + if sitemin in left_envs: + tn_local_overlap |= left_envs[sitemin] + if sitemax in right_envs: + tn_local_overlap |= right_envs[sitemax] + + x = tn_local_overlap.contract(all, **contract_opts) + if normalized: + x = x / nfactor + + expecs[where] = x + + if return_all: + return expecs + + return functools.reduce(operator.add, expecs.values()) + + def compute_local_expectation( + self, + terms, + normalized=True, + return_all=False, + method="canonical", + info=None, + inplace=False, + **contract_opts, + ): + """Compute many local expectations at once. + + Parameters + ---------- + terms : dict[int or tuple[int], array_like] + The local terms to compute values for. + normalized : bool, optional + Explicitly normalize each local term. + return_all : bool, optional + Whether to return each expectation in `terms` separately + or sum them all together (the default). + method : {'canonical', 'envs'}, optional + The method to use to compute the local expectations. + + - 'canonical': canonicalize around the sites of interest and + contract the local reduced density matrices, moving the canonical + center around as needed. + - 'envs': form the local overlaps using left and right environments + and contract these directly. This can be quicker if the canonical + center is not already aligned. + + info : dict, optional + If supplied, and `method=="canonical"`, will be used to infer and + store various extra information. Currently the key "cur_orthog" is + used to store the current orthogonality center. Its input value can + be ``"calc"``, a single site, or a pair of sites representing the + min/max range, inclusive. It will be updated to the actual range + after. + inplace : bool, optional + If `method=="canonical"`, whether to perform the required + canonicalizations inplace or on a copy of the state. + contract_opts + Supplied to + :meth:`~quimb.tensor.tensor_core.TensorNetwork.contract` + when contracting the local overlaps or density matrices. + + Returns + ------- + float or dict[int or tuple[int], float] + The expecetation value(s), either summed or for each term if + `return_all=True`. + + See Also + -------- + compute_local_expectation_canonical, compute_local_expectation_via_envs + """ + if method == "canonical": + return self.compute_local_expectation_canonical( + terms, + normalized=normalized, + return_all=return_all, + info=info, + inplace=inplace, + **contract_opts, + ) + elif method == "envs": + return self.compute_local_expectation_via_envs( + terms, + normalized=normalized, + return_all=return_all, + **contract_opts, + ) + else: + raise ValueError( + f"Unrecognized method: {method}, should be one of: " + "'canonical', 'envs'." + ) + @convert_cur_orthog def bipartite_schmidt_state(self, sz_a, get="ket", info=None): r"""Compute the reduced state for a bipartition of an OBC MPS, in terms @@ -3215,7 +3611,6 @@ def sample_configuration(self, seed=None, info=None): config = [] omega = 1.0 for i in range(psi.L): - # form local density matrix ki = psi[i] bi = ki.H @@ -3271,6 +3666,7 @@ def sample(self, C, seed=None, info=None): for _ in range(C): yield psi0.sample_configuration(seed=rng, info=info) + class MatrixProductOperator(TensorNetwork1DOperator, TensorNetwork1DFlat): """Initialise a matrix product operator, with auto labelling and tagging. diff --git a/quimb/tensor/tensor_core.py b/quimb/tensor/tensor_core.py index e3bcf8ef..5e6615d2 100644 --- a/quimb/tensor/tensor_core.py +++ b/quimb/tensor/tensor_core.py @@ -1626,8 +1626,15 @@ def isel(self, selectors, inplace=False): Parameters ---------- - selectors : dict[str, int], dict[str, slice] - Mapping of index(es) to which value to take. + selectors : dict[str, int or slice or "r"] + Mapping of index(es) to which value to take. The values can be: + + - int: select a specific value for that index. + - slice: select a range of values for that index. + - "r": contract a random vector in. + + The mapping can contain indices that don't appear on this tensor, + in which case they are ignored. inplace : bool, optional Whether to select inplace or not. @@ -1643,18 +1650,29 @@ def isel(self, selectors, inplace=False): See Also -------- - TensorNetwork.isel + TensorNetwork.isel, Tensor.rand_reduce """ T = self if inplace else self.copy() - new_inds = tuple( - ix - for ix in self.inds - if (ix not in selectors) or isinstance(selectors[ix], slice) - ) + new_inds = [] + data_loc = [] - data_loc = tuple(selectors.get(ix, slice(None)) for ix in self.inds) - T.modify(apply=lambda x: x[data_loc], inds=new_inds, left_inds=None) + for ix in T.inds: + sel = selectors.get(ix, slice(None)) + if isinstance(sel, slice): + # index will be kept (including a partial slice of entries) + new_inds.append(ix) + data_loc.append(sel) + elif sel == "r": + # eagerly remove any 'random' selections + T.rand_reduce_(ix) + else: + # index will be removed by selecting a specific index + data_loc.append(int(sel)) + + T.modify( + apply=lambda x: x[tuple(data_loc)], inds=new_inds, left_inds=None + ) return T isel_ = functools.partialmethod(isel, inplace=True) @@ -2190,16 +2208,35 @@ def vector_reduce(self, ind, v, inplace=False): """ t = self if inplace else self.copy() axis = t.inds.index(ind) - new_data = array_contract( - (t.data, v), - (tuple(range(self.ndim)), (axis,)), + + expr = array_contract_expression( + shapes=(self.shape, shape(v)), + inputs=(tuple(range(self.ndim)), (axis,)), + constants={1: v}, ) + new_inds = t.inds[:axis] + t.inds[axis + 1 :] - t.modify(data=new_data, inds=new_inds) + t.modify(apply=expr, inds=new_inds) return t vector_reduce_ = functools.partialmethod(vector_reduce, inplace=True) + def rand_reduce(self, ind, dtype=None, inplace=False, **kwargs): + """Contract the index ``ind`` of this tensor with a random vector, + removing it. + + Parameters + ---------- + """ + if dtype is None: + dtype = self.dtype + + v = randn(self.ind_size(ind), dtype=self.dtype, **kwargs) + + return self.vector_reduce(ind, v, inplace=inplace) + + rand_reduce_ = functools.partialmethod(rand_reduce, inplace=True) + def collapse_repeated(self, inplace=False): """Take the diagonals of any repeated indices, such that each index only appears once. @@ -7983,8 +8020,13 @@ def isel(self, selectors, inplace=False): Parameters ---------- - selectors : dict[str, int] - Mapping of index(es) to which value to take. + selectors : dict[str, int or slice or "r"] + Mapping of index(es) to which value to take. The values can be: + + - int: select a specific value for that index. + - slice: select a range of values for that index. + - "r": contract a random vector in. + inplace : bool, optional Whether to select inplace or not. @@ -9606,7 +9648,7 @@ def rank_weight(ind): if equalize_norms: signs = [] for s in scalars: - signs.append(do("sign", s)) + signs.append(s / do("abs", s)) tn.exponent += do("log10", do("abs", s)) scalars = signs diff --git a/tests/test_tensor/test_circuit.py b/tests/test_tensor/test_circuit.py index 0629271d..df7085fe 100644 --- a/tests/test_tensor/test_circuit.py +++ b/tests/test_tensor/test_circuit.py @@ -466,6 +466,28 @@ def test_sample(self, group_size): assert power_divergence(f_obs, f_exp)[0] < 100 + @pytest.mark.parametrize("group_size", (1, 3)) + def test_sample_gate_by_gate(self, group_size): + import collections + from scipy.stats import power_divergence + + C = 2**10 + L = 5 + circ = random_a2a_circ(L, 3) + + psi = circ.to_dense() + p_exp = abs(psi.reshape(-1)) ** 2 + f_exp = p_exp * C + + counts = collections.Counter( + circ.sample_gate_by_gate(C, group_size=group_size) + ) + f_obs = np.zeros(2**L) + for b, c in counts.items(): + f_obs[int(b, 2)] = c + + assert power_divergence(f_obs, f_exp)[0] < 100 + def test_sample_chaotic(self): import collections from scipy.stats import power_divergence diff --git a/tests/test_tensor/test_tensor_1d.py b/tests/test_tensor/test_tensor_1d.py index 67b0fb2c..4b762e55 100644 --- a/tests/test_tensor/test_tensor_1d.py +++ b/tests/test_tensor/test_tensor_1d.py @@ -383,7 +383,9 @@ def test_magnetization(self): def test_partial_trace(self, rescale, keep): n = 10 p = qtn.MPS_rand_state(n, 7) - r = p.ptr(keep=keep, upper_ind_id="u{}", rescale_sites=rescale) + r = p.partial_trace_to_mpo( + keep=keep, upper_ind_id="u{}", rescale_sites=rescale + ) rd = r.to_qarray() if isinstance(keep, slice): keep = p.slice2sites(keep) @@ -775,6 +777,16 @@ def test_sample_seed(self): ] assert len(set(configs)) > 1 + def test_compute_local_expectation(self): + psi = qtn.MPS_rand_state(10, 7, dtype="complex128") + terms = {(i, i + 1): qu.rand_herm(4) for i in range(9)} + + ex = psi.compute_local_expectation_exact(terms) + xa = psi.compute_local_expectation(terms, method="canonical") + assert xa == pytest.approx(ex) + xb = psi.compute_local_expectation(terms, method="envs") + assert xb == pytest.approx(ex) + class TestMatrixProductOperator: @pytest.mark.parametrize("cyclic", [False, True]) @@ -911,7 +923,7 @@ def test_mpo_rand_herm_trace_and_identity_like(self, cyclic): def test_partial_transpose(self): p = qtn.MPS_rand_state(8, 10) - r = p.ptr([2, 3, 4, 5, 6, 7]) + r = p.partial_trace_to_mpo([2, 3, 4, 5, 6, 7]) rd = r.to_qarray() assert qu.isherm(rd) diff --git a/tests/test_tensor/test_tensor_core.py b/tests/test_tensor/test_tensor_core.py index f9877e74..bf6950cb 100644 --- a/tests/test_tensor/test_tensor_core.py +++ b/tests/test_tensor/test_tensor_core.py @@ -1909,6 +1909,15 @@ def test_gen_inds_connected(self): patches = tuple(tn.gen_inds_connected(2)) assert len(patches) == 34 + def test_tn_isel_rand(self): + mps = qtn.MPS_rand_state(6, 7) + ramp = mps.isel({mps.site_ind(i): "r" for i in mps.sites}) + assert ramp.outer_inds() == () + # check we haven't selected an computation basis amplitude + rx = ramp.contract() + xs = mps.to_dense().ravel() + assert not any(np.allclose(rx, x) for x in xs) + class TestTensorNetworkSimplifications: def test_rank_simplify(self): diff --git a/tests/test_tensor/test_tensor_spectral_approx.py b/tests/test_tensor/test_tensor_spectral_approx.py index ccb23172..fabffb74 100644 --- a/tests/test_tensor/test_tensor_spectral_approx.py +++ b/tests/test_tensor/test_tensor_spectral_approx.py @@ -37,7 +37,7 @@ def test_realistic(self): ham = MPO_ham_heis(20) dmrg = DMRG2(ham, bond_dims=[2, 4]) dmrg.solve() - rho_ab = dmrg.state.ptr(range(6, 14)) + rho_ab = dmrg.state.partial_trace_to_mpo(range(6, 14)) xf = approx_spectral_function( rho_ab, lambda x: x, tol=0.1, verbosity=2 ) @@ -55,7 +55,7 @@ def test_realistic_ent(self): psi0 = dmrg.state.to_dense() lne = logneg_subsys(psi0, [2] * n, sysa=sysa, sysb=sysb) - rho_ab = dmrg.state.ptr(sysab, rescale_sites=True) + rho_ab = dmrg.state.partial_trace_to_mpo(sysab, rescale_sites=True) rho_ab_pt = rho_ab.partial_transpose(range(3)) lnx = log2( approx_spectral_function(rho_ab_pt, abs, tol=0.1, verbosity=2)