pyqentangle


Namepyqentangle JSON
Version 4.0.0 PyPI version JSON
download
home_pagehttps://github.com/stephenhky/pyqentangle
SummaryQuantum Entanglement in Python
upload_time2024-04-09 23:15:15
maintainerNone
docs_urlNone
authorKwan-Yuet Ho
requires_pythonNone
licenseMIT
keywords quantum physics schmidt decompostion entanglement
VCS
bugtrack_url
requirements numpy scipy tensornetwork
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Quantum Entanglement in Python

[![CircleCI](https://circleci.com/gh/stephenhky/pyqentangle.svg?style=svg)](https://circleci.com/gh/stephenhky/pyqentangle.svg)
[![GitHub release](https://img.shields.io/github/release/stephenhky/pyqentangle.svg?maxAge=3600)](https://github.com/stephenhky/pyqentangle/releases)
[![Documentation Status](https://readthedocs.org/projects/pyqentangle/badge/?version=latest)](https://pyqentangle.readthedocs.io/en/latest/?badge=latest)
[![Updates](https://pyup.io/repos/github/stephenhky/pyqentangle/shield.svg)](https://pyup.io/repos/github/stephenhky/pyqentangle/)
[![Python 3](https://pyup.io/repos/github/stephenhky/pyqentangle/python-3-shield.svg)](https://pyup.io/repos/github/stephenhky/pyqentangle/)
[![pypi](https://img.shields.io/pypi/v/pyqentangle.svg?maxAge=3600)](https://pypi.org/project/pyqentangle/)
[![download](https://img.shields.io/pypi/dm/pyqentangle.svg?maxAge=2592000&label=installs&color=%2327B1FF)](https://pypi.org/project/pyqentangle/)

## Version

The releases of `pyqentangle` 2.x.x is incompatible with previous releases.

The releases of `pyqentangle` 3.x.x is incompatible with previous releases.

Since release 3.1.0, the support for Python 2.7 and 3.5 has been decomissioned.
Since release 3.3.0, support for Python 3.6 is diminished, but that for Python 3.11 is added.

## Installation

This package can be installed using `pip`.

```
>>> pip install pyqentangle
```

To use it, enter

```
>>> import pyqentangle
>>> import numpy as np
```

## Schmidt Decomposition for Discrete Bipartite States

We first express the bipartite state in terms of a tensor. For example, if the state is `|01>+|10>`, then express it as

```
>>> tensor = np.array([[0., np.sqrt(0.5)], [np.sqrt(0.5), 0.]])
```

To perform the Schmidt decompostion, just enter:

```
>>> pyqentangle.schmidt_decomposition(tensor)
[(0.7071067811865476, array([ 0., -1.]), array([-1., -0.])),
 (0.7071067811865476, array([-1.,  0.]), array([-0., -1.]))]
 ```

For each tuple in the returned list, the first element is the Schmidt coefficients, the second the component for first subsystem, and the third the component for the second subsystem.

## Schmidt Decomposition for Continuous Bipartite States

We can perform Schmidt decomposition on continuous systems too. For example, define the following normalized wavefunction:

```
>>> fcn = lambda x1, x2: np.exp(-0.5 * (x1 + x2) ** 2) * np.exp(-(x1 - x2) ** 2) * np.sqrt(np.sqrt(8.) / np.pi)
```

Then perform the Schmidt decomposition, 

```
>>> modes = pyqentangle.continuous_schmidt_decomposition(biwavefcn, -10., 10., -10., 10., keep=10)
```

where it describes the ranges of x1 and x2 respectively, and `keep=10` specifies only top 10 Schmidt modes are kept. Then we can read the Schmidt coefficients:

```
>>> list(map(lambda dec: dec[0], modes))
[0.9851714310094161,
 0.1690286950361957,
 0.02900073920775954,
 0.004975740210361192,
 0.0008537020544076649,
 0.00014647211608480773,
 2.51306421011773e-05,
 4.311736522272035e-06,
 7.39777032460608e-07,
 1.2692567250688184e-07]
```

The second and the third elements in each tuple in the list `decompositions` are lambda functions for the modes of susbsystems A and B respectively. The Schmidt functions can be plotted:
```
>>> xarray = np.linspace(-10., 10., 100)

    plt.subplot(3, 2, 1)
    plt.plot(xarray, modes[0][1](xarray))
    plt.subplot(3, 2, 2)
    plt.plot(xarray, modes[0][2](xarray))

    plt.subplot(3, 2, 3)
    plt.plot(xarray, modes[1][1](xarray))
    plt.subplot(3, 2, 4)
    plt.plot(xarray, modes[1][2](xarray))

    plt.subplot(3, 2, 5)
    plt.plot(xarray, modes[2][1](xarray))
    plt.subplot(3, 2, 6)
    plt.plot(xarray, modes[2][2](xarray))
```

![alt](https://github.com/stephenhky/pyqentangle/raw/master/fig/three_harmonic_modes.png)


## Useful Links

* Study of Entanglement in Quantum Computers: [https://datawarrior.wordpress.com/2017/09/20/a-first-glimpse-of-rigettis-quantum-computing-cloud/](https://datawarrior.wordpress.com/2017/09/20/a-first-glimpse-of-rigettis-quantum-computing-cloud/)
* Github page: [https://github.com/stephenhky/pyqentangle](https://github.com/stephenhky/pyqentangle)
* PyPI page: [https://pypi.python.org/pypi/pyqentangle/](https://pypi.python.org/pypi/pyqentangle/)
* Documentation: [http://pyqentangle.readthedocs.io/](http://pyqentangle.readthedocs.io/)
* RQEntangle: [https://CRAN.R-project.org/package=RQEntangle](https://CRAN.R-project.org/package=RQEntangle) (corresponding R library)

## Reference
* Artur Ekert, Peter L. Knight, "Entangled quantum systems and the Schmidt decomposition", *Am. J. Phys.* 63, 415 (1995).

## Acknowledgement
* [Hossein Seifoory](https://ca.linkedin.com/in/hosseinseifoory?trk=public_profile_card_url)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/stephenhky/pyqentangle",
    "name": "pyqentangle",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "quantum physics Schmidt decompostion entanglement",
    "author": "Kwan-Yuet Ho",
    "author_email": "stephenhky@yahoo.com.hk",
    "download_url": "https://files.pythonhosted.org/packages/52/22/08b30c921a8b40ec79142f1d9f236f5c17c595a54ebab54da24ae19c7e81/pyqentangle-4.0.0.tar.gz",
    "platform": null,
    "description": "# Quantum Entanglement in Python\n\n[![CircleCI](https://circleci.com/gh/stephenhky/pyqentangle.svg?style=svg)](https://circleci.com/gh/stephenhky/pyqentangle.svg)\n[![GitHub release](https://img.shields.io/github/release/stephenhky/pyqentangle.svg?maxAge=3600)](https://github.com/stephenhky/pyqentangle/releases)\n[![Documentation Status](https://readthedocs.org/projects/pyqentangle/badge/?version=latest)](https://pyqentangle.readthedocs.io/en/latest/?badge=latest)\n[![Updates](https://pyup.io/repos/github/stephenhky/pyqentangle/shield.svg)](https://pyup.io/repos/github/stephenhky/pyqentangle/)\n[![Python 3](https://pyup.io/repos/github/stephenhky/pyqentangle/python-3-shield.svg)](https://pyup.io/repos/github/stephenhky/pyqentangle/)\n[![pypi](https://img.shields.io/pypi/v/pyqentangle.svg?maxAge=3600)](https://pypi.org/project/pyqentangle/)\n[![download](https://img.shields.io/pypi/dm/pyqentangle.svg?maxAge=2592000&label=installs&color=%2327B1FF)](https://pypi.org/project/pyqentangle/)\n\n## Version\n\nThe releases of `pyqentangle` 2.x.x is incompatible with previous releases.\n\nThe releases of `pyqentangle` 3.x.x is incompatible with previous releases.\n\nSince release 3.1.0, the support for Python 2.7 and 3.5 has been decomissioned.\nSince release 3.3.0, support for Python 3.6 is diminished, but that for Python 3.11 is added.\n\n## Installation\n\nThis package can be installed using `pip`.\n\n```\n>>> pip install pyqentangle\n```\n\nTo use it, enter\n\n```\n>>> import pyqentangle\n>>> import numpy as np\n```\n\n## Schmidt Decomposition for Discrete Bipartite States\n\nWe first express the bipartite state in terms of a tensor. For example, if the state is `|01>+|10>`, then express it as\n\n```\n>>> tensor = np.array([[0., np.sqrt(0.5)], [np.sqrt(0.5), 0.]])\n```\n\nTo perform the Schmidt decompostion, just enter:\n\n```\n>>> pyqentangle.schmidt_decomposition(tensor)\n[(0.7071067811865476, array([ 0., -1.]), array([-1., -0.])),\n (0.7071067811865476, array([-1.,  0.]), array([-0., -1.]))]\n ```\n\nFor each tuple in the returned list, the first element is the Schmidt coefficients, the second the component for first subsystem, and the third the component for the second subsystem.\n\n## Schmidt Decomposition for Continuous Bipartite States\n\nWe can perform Schmidt decomposition on continuous systems too. For example, define the following normalized wavefunction:\n\n```\n>>> fcn = lambda x1, x2: np.exp(-0.5 * (x1 + x2) ** 2) * np.exp(-(x1 - x2) ** 2) * np.sqrt(np.sqrt(8.) / np.pi)\n```\n\nThen perform the Schmidt decomposition, \n\n```\n>>> modes = pyqentangle.continuous_schmidt_decomposition(biwavefcn, -10., 10., -10., 10., keep=10)\n```\n\nwhere it describes the ranges of x1 and x2 respectively, and `keep=10` specifies only top 10 Schmidt modes are kept. Then we can read the Schmidt coefficients:\n\n```\n>>> list(map(lambda dec: dec[0], modes))\n[0.9851714310094161,\n 0.1690286950361957,\n 0.02900073920775954,\n 0.004975740210361192,\n 0.0008537020544076649,\n 0.00014647211608480773,\n 2.51306421011773e-05,\n 4.311736522272035e-06,\n 7.39777032460608e-07,\n 1.2692567250688184e-07]\n```\n\nThe second and the third elements in each tuple in the list `decompositions` are lambda functions for the modes of susbsystems A and B respectively. The Schmidt functions can be plotted:\n```\n>>> xarray = np.linspace(-10., 10., 100)\n\n    plt.subplot(3, 2, 1)\n    plt.plot(xarray, modes[0][1](xarray))\n    plt.subplot(3, 2, 2)\n    plt.plot(xarray, modes[0][2](xarray))\n\n    plt.subplot(3, 2, 3)\n    plt.plot(xarray, modes[1][1](xarray))\n    plt.subplot(3, 2, 4)\n    plt.plot(xarray, modes[1][2](xarray))\n\n    plt.subplot(3, 2, 5)\n    plt.plot(xarray, modes[2][1](xarray))\n    plt.subplot(3, 2, 6)\n    plt.plot(xarray, modes[2][2](xarray))\n```\n\n![alt](https://github.com/stephenhky/pyqentangle/raw/master/fig/three_harmonic_modes.png)\n\n\n## Useful Links\n\n* Study of Entanglement in Quantum Computers: [https://datawarrior.wordpress.com/2017/09/20/a-first-glimpse-of-rigettis-quantum-computing-cloud/](https://datawarrior.wordpress.com/2017/09/20/a-first-glimpse-of-rigettis-quantum-computing-cloud/)\n* Github page: [https://github.com/stephenhky/pyqentangle](https://github.com/stephenhky/pyqentangle)\n* PyPI page: [https://pypi.python.org/pypi/pyqentangle/](https://pypi.python.org/pypi/pyqentangle/)\n* Documentation: [http://pyqentangle.readthedocs.io/](http://pyqentangle.readthedocs.io/)\n* RQEntangle: [https://CRAN.R-project.org/package=RQEntangle](https://CRAN.R-project.org/package=RQEntangle) (corresponding R library)\n\n## Reference\n* Artur Ekert, Peter L. Knight, \"Entangled quantum systems and the Schmidt decomposition\", *Am. J. Phys.* 63, 415 (1995).\n\n## Acknowledgement\n* [Hossein Seifoory](https://ca.linkedin.com/in/hosseinseifoory?trk=public_profile_card_url)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Quantum Entanglement in Python",
    "version": "4.0.0",
    "project_urls": {
        "Homepage": "https://github.com/stephenhky/pyqentangle"
    },
    "split_keywords": [
        "quantum",
        "physics",
        "schmidt",
        "decompostion",
        "entanglement"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "522208b30c921a8b40ec79142f1d9f236f5c17c595a54ebab54da24ae19c7e81",
                "md5": "1252fa034d60286b4cd428339c27e6e0",
                "sha256": "3bcc6acba5dd6967b1f19a075402d9c2fff5910d5005039dfc1aace6a57339cf"
            },
            "downloads": -1,
            "filename": "pyqentangle-4.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "1252fa034d60286b4cd428339c27e6e0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 14607,
            "upload_time": "2024-04-09T23:15:15",
            "upload_time_iso_8601": "2024-04-09T23:15:15.782222Z",
            "url": "https://files.pythonhosted.org/packages/52/22/08b30c921a8b40ec79142f1d9f236f5c17c595a54ebab54da24ae19c7e81/pyqentangle-4.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-09 23:15:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "stephenhky",
    "github_project": "pyqentangle",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "circle": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.20.0"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "tensornetwork",
            "specs": [
                [
                    ">=",
                    "0.4.0"
                ]
            ]
        }
    ],
    "lcname": "pyqentangle"
}
        
Elapsed time: 0.22334s