ket-lang


Nameket-lang JSON
Version 0.7.1 PyPI version JSON
download
home_pagehttps://quantumket.org
SummaryKet quantum programming language interpreter and library
upload_time2024-04-17 14:10:55
maintainerNone
docs_urlNone
authorEvandro Chagas Ribeiro da Rosa
requires_python>=3.8
licenseApache-2.0
keywords quantum computer quantum programming quantum simulator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <!--
SPDX-FileCopyrightText: 2020 Evandro Chagas Ribeiro da Rosa <evandro@quantuloop.com>
SPDX-FileCopyrightText: 2020 Rafael de Santiago <r.santiago@ufsc.br>

SPDX-License-Identifier: Apache-2.0
-->

[![PyPI](https://img.shields.io/pypi/v/ket-lang.svg)](https://pypi.org/project/ket-lang/)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)
[![REUSE status](https://api.reuse.software/badge/gitlab.com/quantum-ket/ket)](https://api.reuse.software/info/gitlab.com/quantum-ket/ket)

# Ket Quantum Programming

[[_TOC_]]

Ket is an embedded programming language that introduces the ease of Python to quantum programming, letting anyone quickly prototype and test a quantum application.

Python is the most widely used programming language for machine learning and data science and has been the language of choice for quantum programming. Ket is a Python-embedded language, but many can use it as a Python library in most cases. So you can use Ket together with NumPy, ScyPy, Pandas, and other popular Python libraries.

Ket's goal is to streamline the development of hardware-independent classical quantum applications by providing transparent interaction of classical and quantum data. See <https://quantumket.org> to learn more about Ket.

## Installation :arrow_down:

Ket requires Python 3.8 or newer and is available for Linux, Windows, and macOS. If you are not using x86_64 (example ARM), you must install [Rust](https://www.rust-lang.org/tools/install) before installing Ket.

You can install Ket using [`pip`](https://pip.pypa.io/en/stable/user_guide/). To do so, copy and paste the following command into your terminal:

```shell
pip install ket-lang
```

## Documentation :scroll:

Documentation available at <https://quantumket.org>.

## Examples :bulb:

### Grover's Algorithm

```py
from ket import *
from math import sqrt, pi


def grover(n: int, oracle) -> int:
    p = Process()
    qubits = H(p.alloc(n))
    steps = int((pi / 4) * sqrt(2**n))
    for _ in range(steps):
        oracle(qubits)
        with around(H, qubits):
            phase_oracle(0, qubits)
    return measure(qubits).value


n = 8
looking_for = 13
print(grover(n, phase_oracle(looking_for)))
# 13
```

### Quantum Teleportation

```py
from ket import *


def entangle(a: Quant, b: Quant):
    return CNOT(H(a), b)


def teleport(quantum_message: Quant, entangled_qubit: Quant):
    adj(entangle)(quantum_message, entangled_qubit)
    return measure(entangled_qubit).value, measure(quantum_message).value


def decode(classical_message: tuple[int, int], qubit: Quant):
    if classical_message[0] == 1:
        X(qubit)

    if classical_message[1] == 1:
        Z(qubit)


if __name__ == "__main__":
    from math import pi

    p = Process()

    alice_message = PHASE(pi / 4, H(p.alloc()))

    alice_message_dump = dump(alice_message)

    alice_qubit, bob_qubit = entangle(*p.alloc(2))

    classical_message = teleport(
        quantum_message=alice_message, entangled_qubit=alice_qubit
    )

    decode(classical_message, bob_qubit)

    bob_qubit_dump = dump(bob_qubit)

    print("Alice Message:")
    print(alice_message_dump.show())

    print("Bob Qubit:")
    print(bob_qubit_dump.show())
# Alice Message:
# |0⟩     (50.00%)
#  0.707107               ≅      1/√2
# |1⟩     (50.00%)
#  0.500000+0.500000i     ≅  (1+i)/√4
# Bob Qubit:
# |0⟩     (50.00%)
#  0.707107               ≅      1/√2
# |1⟩     (50.00%)
#  0.500000+0.500000i     ≅  (1+i)/√4
```

## Setup for Ket Development :hammer:

To get started with Ket development, follow these steps:

1. **Rust Installation**
   
    Ensure that Rust is installed on your system. If not, follow the [Rust install guide](https://www.rust-lang.org/tools/install). After installation, set the Rust version to 1.75 using the following command:
    
    ```shell
    rustup default 1.75
    ```

2. **Clone and Compile**

    Clone the Ket repository and compile the Rust libraries:

    ```shell
    git clone --recursive https://gitlab.com/quantum-ket/ket.git
    cd ket

    cargo build --manifest-path src/ket/clib/libs/libket/Cargo.toml
    cargo build --manifest-path src/ket/clib/libs/kbw/Cargo.toml

    ln -s libket/target/debug/libket.so src/ket/clib/libs
    ln -s kbw/target/debug/libkbw.so src/ket/clib/libs
    ```

3. **Set Up Virtual Environment**

    Set up a virtual environment for Python:

    ```shell
    python3 -m venv venv
    source venv/bin/activate
    ```

4. **Install Dependencies**

    Upgrade pip and install development requirements:
    
    ```shell
    pip install -U pip
    pip install -r requirements_dev.txt
    ```

5. **Install Ket**

    Install Ket in editable mode:

    ```shell
    pip install -e .
    ```

6. **Run Tests**

    To ensure everything is correctly installed, run the tests:
    
    ```shell
    pytest
    ```

You're now set up for Ket development! Happy coding! 🚀

## Cite Ket :book:

When using Ket for research projects, please cite:

> Evandro Chagas Ribeiro da Rosa and Rafael de Santiago. 2021. Ket Quantum Programming. J. Emerg. Technol. Comput. Syst. 18, 1, Article 12 (January 2022), 25 pages. DOI: [10.1145/3474224](https://doi.org/10.1145/3474224)

```bibtex
@article{ket,
   author = {Evandro Chagas Ribeiro da Rosa and Rafael de Santiago},
   title = {Ket Quantum Programming},
   year = {2021},
   issue_date = {January 2022},
   publisher = {Association for Computing Machinery},
   address = {New York, NY, USA},
   volume = {18},
   number = {1},
   issn = {1550-4832},
   url = {https://doi.org/10.1145/3474224},
   doi = {10.1145/3474224},
   journal = {J. Emerg. Technol. Comput. Syst.},
   month = oct,
   articleno = {12},
   numpages = {25},
   keywords = {Quantum programming, cloud quantum computation, qubit simulation}
}
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://quantumket.org",
    "name": "ket-lang",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "quantum computer, quantum programming, quantum simulator",
    "author": "Evandro Chagas Ribeiro da Rosa",
    "author_email": "evandro@quantuloop.com",
    "download_url": "https://files.pythonhosted.org/packages/e0/8e/760660801787a4ae1ceb4a4931cf24c7ea479b87307364ca6f913919fd69/ket_lang-0.7.1.tar.gz",
    "platform": "linux",
    "description": "<!--\r\nSPDX-FileCopyrightText: 2020 Evandro Chagas Ribeiro da Rosa <evandro@quantuloop.com>\r\nSPDX-FileCopyrightText: 2020 Rafael de Santiago <r.santiago@ufsc.br>\r\n\r\nSPDX-License-Identifier: Apache-2.0\r\n-->\r\n\r\n[![PyPI](https://img.shields.io/pypi/v/ket-lang.svg)](https://pypi.org/project/ket-lang/)\r\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)\r\n[![REUSE status](https://api.reuse.software/badge/gitlab.com/quantum-ket/ket)](https://api.reuse.software/info/gitlab.com/quantum-ket/ket)\r\n\r\n# Ket Quantum Programming\r\n\r\n[[_TOC_]]\r\n\r\nKet is an embedded programming language that introduces the ease of Python to quantum programming, letting anyone quickly prototype and test a quantum application.\r\n\r\nPython is the most widely used programming language for machine learning and data science and has been the language of choice for quantum programming. Ket is a Python-embedded language, but many can use it as a Python library in most cases. So you can use Ket together with NumPy, ScyPy, Pandas, and other popular Python libraries.\r\n\r\nKet's goal is to streamline the development of hardware-independent classical quantum applications by providing transparent interaction of classical and quantum data. See <https://quantumket.org> to learn more about Ket.\r\n\r\n## Installation :arrow_down:\r\n\r\nKet requires Python 3.8 or newer and is available for Linux, Windows, and macOS. If you are not using x86_64 (example ARM), you must install [Rust](https://www.rust-lang.org/tools/install) before installing Ket.\r\n\r\nYou can install Ket using [`pip`](https://pip.pypa.io/en/stable/user_guide/). To do so, copy and paste the following command into your terminal:\r\n\r\n```shell\r\npip install ket-lang\r\n```\r\n\r\n## Documentation :scroll:\r\n\r\nDocumentation available at <https://quantumket.org>.\r\n\r\n## Examples :bulb:\r\n\r\n### Grover's Algorithm\r\n\r\n```py\r\nfrom ket import *\r\nfrom math import sqrt, pi\r\n\r\n\r\ndef grover(n: int, oracle) -> int:\r\n    p = Process()\r\n    qubits = H(p.alloc(n))\r\n    steps = int((pi / 4) * sqrt(2**n))\r\n    for _ in range(steps):\r\n        oracle(qubits)\r\n        with around(H, qubits):\r\n            phase_oracle(0, qubits)\r\n    return measure(qubits).value\r\n\r\n\r\nn = 8\r\nlooking_for = 13\r\nprint(grover(n, phase_oracle(looking_for)))\r\n# 13\r\n```\r\n\r\n### Quantum Teleportation\r\n\r\n```py\r\nfrom ket import *\r\n\r\n\r\ndef entangle(a: Quant, b: Quant):\r\n    return CNOT(H(a), b)\r\n\r\n\r\ndef teleport(quantum_message: Quant, entangled_qubit: Quant):\r\n    adj(entangle)(quantum_message, entangled_qubit)\r\n    return measure(entangled_qubit).value, measure(quantum_message).value\r\n\r\n\r\ndef decode(classical_message: tuple[int, int], qubit: Quant):\r\n    if classical_message[0] == 1:\r\n        X(qubit)\r\n\r\n    if classical_message[1] == 1:\r\n        Z(qubit)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from math import pi\r\n\r\n    p = Process()\r\n\r\n    alice_message = PHASE(pi / 4, H(p.alloc()))\r\n\r\n    alice_message_dump = dump(alice_message)\r\n\r\n    alice_qubit, bob_qubit = entangle(*p.alloc(2))\r\n\r\n    classical_message = teleport(\r\n        quantum_message=alice_message, entangled_qubit=alice_qubit\r\n    )\r\n\r\n    decode(classical_message, bob_qubit)\r\n\r\n    bob_qubit_dump = dump(bob_qubit)\r\n\r\n    print(\"Alice Message:\")\r\n    print(alice_message_dump.show())\r\n\r\n    print(\"Bob Qubit:\")\r\n    print(bob_qubit_dump.show())\r\n# Alice Message:\r\n# |0\u27e9     (50.00%)\r\n#  0.707107               \u2245      1/\u221a2\r\n# |1\u27e9     (50.00%)\r\n#  0.500000+0.500000i     \u2245  (1+i)/\u221a4\r\n# Bob Qubit:\r\n# |0\u27e9     (50.00%)\r\n#  0.707107               \u2245      1/\u221a2\r\n# |1\u27e9     (50.00%)\r\n#  0.500000+0.500000i     \u2245  (1+i)/\u221a4\r\n```\r\n\r\n## Setup for Ket Development :hammer:\r\n\r\nTo get started with Ket development, follow these steps:\r\n\r\n1. **Rust Installation**\r\n   \r\n    Ensure that Rust is installed on your system. If not, follow the [Rust install guide](https://www.rust-lang.org/tools/install). After installation, set the Rust version to 1.75 using the following command:\r\n    \r\n    ```shell\r\n    rustup default 1.75\r\n    ```\r\n\r\n2. **Clone and Compile**\r\n\r\n    Clone the Ket repository and compile the Rust libraries:\r\n\r\n    ```shell\r\n    git clone --recursive https://gitlab.com/quantum-ket/ket.git\r\n    cd ket\r\n\r\n    cargo build --manifest-path src/ket/clib/libs/libket/Cargo.toml\r\n    cargo build --manifest-path src/ket/clib/libs/kbw/Cargo.toml\r\n\r\n    ln -s libket/target/debug/libket.so src/ket/clib/libs\r\n    ln -s kbw/target/debug/libkbw.so src/ket/clib/libs\r\n    ```\r\n\r\n3. **Set Up Virtual Environment**\r\n\r\n    Set up a virtual environment for Python:\r\n\r\n    ```shell\r\n    python3 -m venv venv\r\n    source venv/bin/activate\r\n    ```\r\n\r\n4. **Install Dependencies**\r\n\r\n    Upgrade pip and install development requirements:\r\n    \r\n    ```shell\r\n    pip install -U pip\r\n    pip install -r requirements_dev.txt\r\n    ```\r\n\r\n5. **Install Ket**\r\n\r\n    Install Ket in editable mode:\r\n\r\n    ```shell\r\n    pip install -e .\r\n    ```\r\n\r\n6. **Run Tests**\r\n\r\n    To ensure everything is correctly installed, run the tests:\r\n    \r\n    ```shell\r\n    pytest\r\n    ```\r\n\r\nYou're now set up for Ket development! Happy coding! \ud83d\ude80\r\n\r\n## Cite Ket :book:\r\n\r\nWhen using Ket for research projects, please cite:\r\n\r\n> Evandro Chagas Ribeiro da Rosa and Rafael de Santiago. 2021. Ket Quantum Programming. J. Emerg. Technol. Comput. Syst. 18, 1, Article 12 (January 2022), 25 pages. DOI: [10.1145/3474224](https://doi.org/10.1145/3474224)\r\n\r\n```bibtex\r\n@article{ket,\r\n   author = {Evandro Chagas Ribeiro da Rosa and Rafael de Santiago},\r\n   title = {Ket Quantum Programming},\r\n   year = {2021},\r\n   issue_date = {January 2022},\r\n   publisher = {Association for Computing Machinery},\r\n   address = {New York, NY, USA},\r\n   volume = {18},\r\n   number = {1},\r\n   issn = {1550-4832},\r\n   url = {https://doi.org/10.1145/3474224},\r\n   doi = {10.1145/3474224},\r\n   journal = {J. Emerg. Technol. Comput. Syst.},\r\n   month = oct,\r\n   articleno = {12},\r\n   numpages = {25},\r\n   keywords = {Quantum programming, cloud quantum computation, qubit simulation}\r\n}\r\n```\r\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Ket quantum programming language interpreter and library",
    "version": "0.7.1",
    "project_urls": {
        "Homepage": "https://quantumket.org",
        "Source": "https://gitlab.com/quantum-ket/ket"
    },
    "split_keywords": [
        "quantum computer",
        " quantum programming",
        " quantum simulator"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9458f135f160ad3afafcae99e3b6f1d7213293e2ca9df56c5987ebb1bcda962a",
                "md5": "dfdb1c0206da605ff023adfed9db0e71",
                "sha256": "958ac31b01f231a1e476a15de8517826172d07dde6eaaf5104cff383946663f3"
            },
            "downloads": -1,
            "filename": "ket_lang-0.7.1-py3-none-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dfdb1c0206da605ff023adfed9db0e71",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 629114,
            "upload_time": "2024-04-17T14:07:29",
            "upload_time_iso_8601": "2024-04-17T14:07:29.888517Z",
            "url": "https://files.pythonhosted.org/packages/94/58/f135f160ad3afafcae99e3b6f1d7213293e2ca9df56c5987ebb1bcda962a/ket_lang-0.7.1-py3-none-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "99f21cc4855a9e5ca95867f3eaaf0c6eb361e2f74af30de88f0d0656928a83e4",
                "md5": "707368c54219fa579b2a43214a7db521",
                "sha256": "dec478704b89ba6a10aca239d5cc05281760190f5bd4639cb99dca862b6ae7be"
            },
            "downloads": -1,
            "filename": "ket_lang-0.7.1-py3-none-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "707368c54219fa579b2a43214a7db521",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 679310,
            "upload_time": "2024-04-17T14:10:51",
            "upload_time_iso_8601": "2024-04-17T14:10:51.608426Z",
            "url": "https://files.pythonhosted.org/packages/99/f2/1cc4855a9e5ca95867f3eaaf0c6eb361e2f74af30de88f0d0656928a83e4/ket_lang-0.7.1-py3-none-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "774a6850fd17bc91a34f850c44ec732209edf6ea005f20b76aeff7faf55461ee",
                "md5": "105b2d1cbb11db18f77a7d1fb49d3b92",
                "sha256": "3653ca24e7b64adafeb6d82510ddfe59c108abb89a225fc8a15ac9a36d693b2f"
            },
            "downloads": -1,
            "filename": "ket_lang-0.7.1-py3-none-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "105b2d1cbb11db18f77a7d1fb49d3b92",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 704579,
            "upload_time": "2024-04-17T14:10:53",
            "upload_time_iso_8601": "2024-04-17T14:10:53.713186Z",
            "url": "https://files.pythonhosted.org/packages/77/4a/6850fd17bc91a34f850c44ec732209edf6ea005f20b76aeff7faf55461ee/ket_lang-0.7.1-py3-none-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb08314fd3f3395a12448699ce09774a893e0ebac80d5851dbb13042e7d0387a",
                "md5": "c4f20753e9a811f50280f10825dadd3d",
                "sha256": "b724e2d221abc840cdfcf7aae4a0e24f22eb728d532e63ebf01c8240ed72ee6d"
            },
            "downloads": -1,
            "filename": "ket_lang-0.7.1-py3-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c4f20753e9a811f50280f10825dadd3d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 73456898,
            "upload_time": "2024-04-17T14:07:15",
            "upload_time_iso_8601": "2024-04-17T14:07:15.111705Z",
            "url": "https://files.pythonhosted.org/packages/fb/08/314fd3f3395a12448699ce09774a893e0ebac80d5851dbb13042e7d0387a/ket_lang-0.7.1-py3-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e08e760660801787a4ae1ceb4a4931cf24c7ea479b87307364ca6f913919fd69",
                "md5": "41dfe06dd55ba66960d756b9aea88758",
                "sha256": "9a1749c28784a3a9e92a2cbe238791a2ac60016ec86a368842cd12295aa9cc11"
            },
            "downloads": -1,
            "filename": "ket_lang-0.7.1.tar.gz",
            "has_sig": false,
            "md5_digest": "41dfe06dd55ba66960d756b9aea88758",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 77895,
            "upload_time": "2024-04-17T14:10:55",
            "upload_time_iso_8601": "2024-04-17T14:10:55.231991Z",
            "url": "https://files.pythonhosted.org/packages/e0/8e/760660801787a4ae1ceb4a4931cf24c7ea479b87307364ca6f913919fd69/ket_lang-0.7.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-17 14:10:55",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "quantum-ket",
    "gitlab_project": "ket",
    "lcname": "ket-lang"
}
        
Elapsed time: 0.31051s