# Quantum Entanglement in Python
[](https://circleci.com/gh/stephenhky/pyqentangle.svg)
[](https://github.com/stephenhky/pyqentangle/releases)
[](https://pyqentangle.readthedocs.io/en/latest/?badge=latest)
[](https://pyup.io/repos/github/stephenhky/pyqentangle/)
[](https://pyup.io/repos/github/stephenhky/pyqentangle/)
[](https://pypi.org/project/pyqentangle/)
[](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 was decomissioned.
## 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))
```

## 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": null,
"name": "pyqentangle",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "quantum physics, quantum information, Schmidt decomposition, entanglement",
"author": null,
"author_email": "Kwan Yuet Stephen Ho <stephenhky@yahoo.com.hk>",
"download_url": "https://files.pythonhosted.org/packages/1c/f6/a19e4a2713548ed5748c3e9838f1444c72320a28f582614da3c059018dbf/pyqentangle-4.0.4.tar.gz",
"platform": null,
"description": "# Quantum Entanglement in Python\n\n[](https://circleci.com/gh/stephenhky/pyqentangle.svg)\n[](https://github.com/stephenhky/pyqentangle/releases)\n[](https://pyqentangle.readthedocs.io/en/latest/?badge=latest)\n[](https://pyup.io/repos/github/stephenhky/pyqentangle/)\n[](https://pyup.io/repos/github/stephenhky/pyqentangle/)\n[](https://pypi.org/project/pyqentangle/)\n[](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 was decomissioned.\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\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.4",
"project_urls": {
"Documentation": "http://pyqentangle.readthedocs.io",
"Issues": "https://github.com/stephenhky/pyqentangle/issues",
"Repository": "https://github.com/stephenhky/pyqentangle"
},
"split_keywords": [
"quantum physics",
" quantum information",
" schmidt decomposition",
" entanglement"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b8f46b6ae678c6a26b0760232d321d925c55b701d5b7216ff79d2735ab1c3b54",
"md5": "766060d9cb79b75df73258adfa8f54dd",
"sha256": "89d34b67537eb94da75e5cfa0ed9fb0e089cd470526d0a2979a913b69e9ae93f"
},
"downloads": -1,
"filename": "pyqentangle-4.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "766060d9cb79b75df73258adfa8f54dd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 11923,
"upload_time": "2025-01-06T18:26:53",
"upload_time_iso_8601": "2025-01-06T18:26:53.666443Z",
"url": "https://files.pythonhosted.org/packages/b8/f4/6b6ae678c6a26b0760232d321d925c55b701d5b7216ff79d2735ab1c3b54/pyqentangle-4.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1cf6a19e4a2713548ed5748c3e9838f1444c72320a28f582614da3c059018dbf",
"md5": "fe78f763d262a982106b22df2d190de1",
"sha256": "faa95b9e4138ee0027cff108a709ecc15a51299264d4f40334000aefffb592f0"
},
"downloads": -1,
"filename": "pyqentangle-4.0.4.tar.gz",
"has_sig": false,
"md5_digest": "fe78f763d262a982106b22df2d190de1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 14423,
"upload_time": "2025-01-06T18:26:55",
"upload_time_iso_8601": "2025-01-06T18:26:55.756120Z",
"url": "https://files.pythonhosted.org/packages/1c/f6/a19e4a2713548ed5748c3e9838f1444c72320a28f582614da3c059018dbf/pyqentangle-4.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-06 18:26:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "stephenhky",
"github_project": "pyqentangle",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"lcname": "pyqentangle"
}