From 65b5adf103466874c843a9b3525ce57a432adb43 Mon Sep 17 00:00:00 2001 From: Dimitri Berthault Date: Mon, 25 Nov 2024 10:06:09 +0100 Subject: [PATCH 1/3] Add qoqo_examples documentation --- .../compatibility_test_1_0/Cargo.toml | 2 +- .../compatibility_test_1_10/Cargo.toml | 2 +- .../compatibility_test_1_11/Cargo.toml | 2 +- .../compatibility_test_1_12/Cargo.toml | 2 +- .../compatibility_test_1_13/Cargo.toml | 2 +- .../compatibility_test_1_14/Cargo.toml | 2 +- .../compatibility_test_1_15/Cargo.toml | 2 +- .../compatibility_test_1_2/Cargo.toml | 2 +- .../compatibility_test_1_3/Cargo.toml | 2 +- .../compatibility_test_1_4/Cargo.toml | 2 +- .../compatibility_test_1_5/Cargo.toml | 2 +- .../compatibility_test_1_6/Cargo.toml | 2 +- .../compatibility_test_1_7/Cargo.toml | 2 +- .../compatibility_test_1_8/Cargo.toml | 2 +- .../compatibility_test_1_9/Cargo.toml | 2 +- .../compatibility_test_sim/Cargo.toml | 2 +- .../hqs-build-deploy-sphinx-doc-rust-pyo3.yml | 37 +- CHANGELOG.md | 6 + Cargo.lock | 110 +- documentation/book.toml | 10 + documentation/src/SUMMARY.md | 23 + documentation/src/backends.md | 183 + documentation/src/circuits/intro.md | 53 + documentation/src/circuits/noise.md | 97 + documentation/src/circuits/pragma.md | 15 + documentation/src/circuits/readout.md | 102 + documentation/src/circuits/unitary.md | 13 + documentation/src/conventions.md | 82 + documentation/src/devices.md | 110 + documentation/src/gate_operations/intro.md | 68 + .../src/gate_operations/multi_qubit_gates.md | 74 + .../src/gate_operations/single_qubit_gates.md | 211 + .../src/gate_operations/two_qubit_gates.md | 358 ++ documentation/src/high-level/cheated.md | 87 + documentation/src/high-level/classical.md | 104 + documentation/src/high-level/intro.md | 37 + documentation/src/high-level/pauliz.md | 127 + .../src/high-level/pauliz_cheated.md | 131 + documentation/src/high-level/program.md | 147 + .../images/qoqo_compilation_schematics.png | Bin 0 -> 78295 bytes .../src/images/qoqo_program_schematics.png | Bin 0 -> 172848 bytes documentation/src/installation.md | 49 + documentation/src/introduction.md | 68 + documentation/src/noise_models.md | 144 + .../src/python_api_docs/.placeholder | 0 qoqo-macros/Cargo.toml | 2 +- qoqo/Cargo.toml | 2 +- qoqo/pyproject.toml | 2 +- qoqo/python/qoqo/DEPENDENCIES | 5001 ++++++++--------- qoqo/python/qoqo/operations.pyi | 1825 ++++++ qoqo/python/qoqo/qoqo.pyi | 6 +- roqoqo-derive/Cargo.toml | 2 +- roqoqo/Cargo.toml | 2 +- 53 files changed, 6732 insertions(+), 2588 deletions(-) create mode 100644 documentation/book.toml create mode 100644 documentation/src/SUMMARY.md create mode 100644 documentation/src/backends.md create mode 100644 documentation/src/circuits/intro.md create mode 100644 documentation/src/circuits/noise.md create mode 100644 documentation/src/circuits/pragma.md create mode 100644 documentation/src/circuits/readout.md create mode 100644 documentation/src/circuits/unitary.md create mode 100644 documentation/src/conventions.md create mode 100644 documentation/src/devices.md create mode 100644 documentation/src/gate_operations/intro.md create mode 100644 documentation/src/gate_operations/multi_qubit_gates.md create mode 100644 documentation/src/gate_operations/single_qubit_gates.md create mode 100644 documentation/src/gate_operations/two_qubit_gates.md create mode 100644 documentation/src/high-level/cheated.md create mode 100644 documentation/src/high-level/classical.md create mode 100644 documentation/src/high-level/intro.md create mode 100644 documentation/src/high-level/pauliz.md create mode 100644 documentation/src/high-level/pauliz_cheated.md create mode 100644 documentation/src/high-level/program.md create mode 100644 documentation/src/images/qoqo_compilation_schematics.png create mode 100644 documentation/src/images/qoqo_program_schematics.png create mode 100644 documentation/src/installation.md create mode 100644 documentation/src/introduction.md create mode 100644 documentation/src/noise_models.md create mode 100644 documentation/src/python_api_docs/.placeholder diff --git a/.compatibility_tests/compatibility_test_1_0/Cargo.toml b/.compatibility_tests/compatibility_test_1_0/Cargo.toml index 05cdcf3de..752658f28 100644 --- a/.compatibility_tests/compatibility_test_1_0/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_0/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_0" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_10/Cargo.toml b/.compatibility_tests/compatibility_test_1_10/Cargo.toml index 32b0f0a19..14159eab1 100644 --- a/.compatibility_tests/compatibility_test_1_10/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_10/Cargo.toml @@ -1,7 +1,7 @@ [package] authors = ["HQS Quantum Simulations "] name = "compatibility_test_1_10" -version = "1.16.1" +version = "1.16.2" license = "Apache-2.0" edition = "2021" rust-version = "1.70" diff --git a/.compatibility_tests/compatibility_test_1_11/Cargo.toml b/.compatibility_tests/compatibility_test_1_11/Cargo.toml index fb025bee0..21c5f98f1 100644 --- a/.compatibility_tests/compatibility_test_1_11/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_11/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_11" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_12/Cargo.toml b/.compatibility_tests/compatibility_test_1_12/Cargo.toml index 03df90742..40354ef41 100644 --- a/.compatibility_tests/compatibility_test_1_12/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_12/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_12" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_13/Cargo.toml b/.compatibility_tests/compatibility_test_1_13/Cargo.toml index 2a7051900..74773bfdb 100644 --- a/.compatibility_tests/compatibility_test_1_13/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_13/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_13" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_14/Cargo.toml b/.compatibility_tests/compatibility_test_1_14/Cargo.toml index 513552b41..64959f663 100644 --- a/.compatibility_tests/compatibility_test_1_14/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_14/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_14" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_15/Cargo.toml b/.compatibility_tests/compatibility_test_1_15/Cargo.toml index a98513137..932f903da 100644 --- a/.compatibility_tests/compatibility_test_1_15/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_15/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_15" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_2/Cargo.toml b/.compatibility_tests/compatibility_test_1_2/Cargo.toml index 6b908ef94..ebeb5e1b8 100644 --- a/.compatibility_tests/compatibility_test_1_2/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_2" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_3/Cargo.toml b/.compatibility_tests/compatibility_test_1_3/Cargo.toml index ea976793a..eca3d8aeb 100644 --- a/.compatibility_tests/compatibility_test_1_3/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_3" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_4/Cargo.toml b/.compatibility_tests/compatibility_test_1_4/Cargo.toml index 82194b93c..9d59f9b8b 100644 --- a/.compatibility_tests/compatibility_test_1_4/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_4/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_4" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_5/Cargo.toml b/.compatibility_tests/compatibility_test_1_5/Cargo.toml index 974ca45d3..44f144725 100644 --- a/.compatibility_tests/compatibility_test_1_5/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_5" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_6/Cargo.toml b/.compatibility_tests/compatibility_test_1_6/Cargo.toml index db558706d..4e6de6b8b 100644 --- a/.compatibility_tests/compatibility_test_1_6/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_6/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_6" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_7/Cargo.toml b/.compatibility_tests/compatibility_test_1_7/Cargo.toml index f44679ec1..9bd3a2307 100644 --- a/.compatibility_tests/compatibility_test_1_7/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_7/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_7" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_8/Cargo.toml b/.compatibility_tests/compatibility_test_1_8/Cargo.toml index efca5f9bc..2c4da0572 100644 --- a/.compatibility_tests/compatibility_test_1_8/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_8/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_8" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_9/Cargo.toml b/.compatibility_tests/compatibility_test_1_9/Cargo.toml index d51618118..06bc22408 100644 --- a/.compatibility_tests/compatibility_test_1_9/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_9/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_9" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_sim/Cargo.toml b/.compatibility_tests/compatibility_test_sim/Cargo.toml index a634d049f..bd528624c 100644 --- a/.compatibility_tests/compatibility_test_sim/Cargo.toml +++ b/.compatibility_tests/compatibility_test_sim/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_sim" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml b/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml index 2006fc678..56f7be0a5 100644 --- a/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml +++ b/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml @@ -6,10 +6,35 @@ on: types: [created] jobs: - publish_documentation: - uses: HQSquantumsimulations/reusable_workflows/.github/workflows/reusable_publish_documentation_rust_sphinx.yml@main - with: - py_interface_folder: "qoqo" - py_docs_folder: "qoqo/docs" - secrets: inherit + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # - uses: Swatinem/rust-cache@v2 + - uses: actions/setup-python@v4 + with: + python-version: "3.11" + - uses: peaceiris/actions-mdbook@v1 + with: + version: latest + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + default: true + - name: Install dependencies + run: | + python -m pip install --upgrade pip maturin + pip install ${{inputs.py_interface_folder}}/[docs] + - name: build + run: | + cd ${{inputs.py_docs_folder}} + python -m sphinx -T -E -b html . _build/html + mv _build/html ../../documentation/src/python_api_docs + cd ../.. + mdbook build documentation + - name: publish + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: documentation/book diff --git a/CHANGELOG.md b/CHANGELOG.md index 6561812a2..40c6342a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ This changelog track changes to the qoqo project starting at version v0.5.0 +## 1.16.2 + +### Fixed in 1.16.2 + +* Added the documentation from qoqo_examples. + ## 1.16.1 ### Fixed in 1.16.1 diff --git a/Cargo.lock b/Cargo.lock index a2f1c5fd3..cde070b19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -143,9 +143,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" [[package]] name = "byteorder" @@ -374,9 +374,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -432,9 +432,9 @@ checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "hyper" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" dependencies = [ "bytes", "futures-channel", @@ -655,9 +655,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" [[package]] name = "js-sys" @@ -703,9 +703,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libm" @@ -715,9 +715,9 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1006,9 +1006,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "ppv-lite86" @@ -1021,9 +1021,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1095,7 +1095,7 @@ dependencies = [ [[package]] name = "qoqo" -version = "1.16.1" +version = "1.16.2" dependencies = [ "bincode", "nalgebra", @@ -1123,7 +1123,7 @@ dependencies = [ [[package]] name = "qoqo-macros" -version = "1.16.1" +version = "1.16.2" dependencies = [ "proc-macro2", "quote", @@ -1268,9 +1268,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "roqoqo" -version = "1.16.1" +version = "1.16.2" dependencies = [ "async-trait", "bincode", @@ -1351,7 +1351,7 @@ dependencies = [ [[package]] name = "roqoqo-derive" -version = "1.16.1" +version = "1.16.2" dependencies = [ "proc-macro2", "quote", @@ -1430,18 +1430,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", @@ -1461,9 +1461,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -1555,9 +1555,9 @@ dependencies = [ [[package]] name = "struqture" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5164769bf87c5ba799f89d51526152e1ba1cf36735cfa59ddefa3ddcb480541" +checksum = "8ec79acf34c1f18f4f29f6331d97380da7fac3d0d152003f4693ec46b3fadc31" dependencies = [ "indexmap", "itertools 0.12.1", @@ -1591,7 +1591,7 @@ dependencies = [ "serde", "serde_json", "struqture 1.9.2", - "struqture 2.0.0-alpha.3", + "struqture 2.0.0-alpha.4", "struqture-py-macros", "syn", "thiserror", @@ -1611,9 +1611,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -1622,9 +1622,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -1681,18 +1681,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -1727,9 +1727,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "libc", @@ -1808,9 +1808,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unindent" @@ -1820,9 +1820,9 @@ checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -1964,9 +1964,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.28" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" dependencies = [ "bytemuck", "safe_arch", @@ -2089,9 +2089,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -2101,9 +2101,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", @@ -2134,18 +2134,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", diff --git a/documentation/book.toml b/documentation/book.toml new file mode 100644 index 000000000..671be0a79 --- /dev/null +++ b/documentation/book.toml @@ -0,0 +1,10 @@ +[book] +authors = ["HQS Quantum Simulations "] +language = "en" +multilingual = false +src = "src" +title = "HQS qoqo User Documentation" + + +[output.html] +mathjax-support = true diff --git a/documentation/src/SUMMARY.md b/documentation/src/SUMMARY.md new file mode 100644 index 000000000..50bdc6711 --- /dev/null +++ b/documentation/src/SUMMARY.md @@ -0,0 +1,23 @@ +# qoqo/roqoqo User Guide + +[Introduction](introduction.md) + +- [Installation](installation.md) +- [Quantum Circuits](circuits/intro.md) + - [Unitary Operations](circuits/unitary.md) + - [Readout](circuits/readout.md) + - [Pragma Operations](circuits/pragma.md) + - [Noise Operations](circuits/noise.md) +- [High-Level Interface: Quantum Programs](high-level/intro.md) + - [PauliZProduct Measurement](high-level/pauliz.md) + - [QuantumProgram and Variable-Replacement](high-level/program.md) + - [ClassicalRegister Measurement](high-level/classical.md) + - [CheatedPauliZProduct Measurement](high-level/pauliz_cheated.md) + - [Cheated Measurement](high-level/cheated.md) +- [Backends](backends.md) +- [Devices](devices.md) +- [Conventions](conventions.md) +- [List of Gate Operations](gate_operations/intro.md) + - [Single-Qubit Gates](gate_operations/single_qubit_gates.md) + - [Two-Qubit Gates](gate_operations/two_qubit_gates.md) + - [Multi-Qubit Gates](gate_operations/multi_qubit_gates.md) diff --git a/documentation/src/backends.md b/documentation/src/backends.md new file mode 100644 index 000000000..a375b6d58 --- /dev/null +++ b/documentation/src/backends.md @@ -0,0 +1,183 @@ +# Backends + +Backends in qoqo/roqoqo are used for two things: + +* Running quantum programs and obtaining results from them +* Translating qoqo/roqoqo objects to other frameworks + +## Running quantum programs + +To obtain results based on a quantum program (or quantum circuit) defined in qoqo/roqoqo, the program must run on a simulator or real quantum computing hardware. + +For an individual simulator or hardware, a backend can be created that implements roqoqo's `EvaluatingBackend` trait and executes quantum circuits. +The implementation of individual backends is provided not in qoqo itself, but in other packages. + +At the moment the following EvaluatingBackends are implemented for qoqo/roqoqo: + +* [qoqo_aqt](https://github.com/HQSquantumsimulations/qoqo_aqt) +* [qoqo_mock](https://github.com/HQSquantumsimulations/qoqo_aqt) +* [qoqo_qryd](https://github.com/HQSquantumsimulations/qoqo_qryd) +* [qoqo_quest](https://github.com/HQSquantumsimulations/qoqo-quest) + +An EvaluatingBackend provides the functionality to run: + +* A _single_ circuit. The backend will execute just the circuit and return the measurement results of all registers in a tuple (bit-registers, float-registers, complex-registers). More details on registers can be found in section [readout](circuits/readout.md). All the postprocessing of the bare results needs to be done manually. +* A measurement. _All_ circuits collected in the measurement are executed and the post-processed expectation values are returned. +* A quantum program. A qoqo QuantumProgram also handles replacement of symbolic variables. It provides its own `run()` method and calls the given backend internally. + +All evaluating backends provide the same methods: `run_circuit()`, `run_measurement()` or `run_measurement_registers()`, and `run()`. + +### Example + +A [QuantumProgram](hight-level/program.md) is created to be executed on the [qoqo_quest](https://github.com/HQSquantumsimulations/qoqo-quest) simulator backend. Here, all three options supported by an `EvaluatingBackend` are presented: + +* to run a single circuit, +* to run a measurement, and +* to run a quantum program. + +In python: + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import PauliZProduct, PauliZProductInput +from qoqo import QuantumProgram +from qoqo_quest import Backend +# initialize |psi> +init_circuit = Circuit() +# Apply a RotateY gate with a symbolic angle +# To execute the circuit this symbolic parameter must replaced +# with a real number with the help of a QuantumProgram +init_circuit += ops.RotateX(0, "angle") +# Z-basis measurement circuit with 1000 shots +z_circuit = Circuit() +z_circuit += ops.DefinitionBit("ro_z", 1, is_output=True) +z_circuit += ops.PragmaRepeatedMeasurement("ro_z", 1000, None) +# X-basis measurement circuit with 1000 shots +x_circuit = Circuit() +x_circuit += ops.DefinitionBit("ro_x", 1, is_output=True) +# Changing to the X basis with a Hadamard gate +x_circuit += ops.Hadamard(0) +x_circuit += ops.PragmaRepeatedMeasurement("ro_x", 1000, None) + +# Preparing the measurement input for one qubit +measurement_input = PauliZProductInput(1, False) +# Read out product of Z on site 0 for register ro_z (no basis change) +z_basis_index = measurement_input.add_pauliz_product("ro_z", [0,]) +# Read out product of Z on site 0 for register ro_x +# (after basis change effectively a measurement) +x_basis_index = measurement_input.add_pauliz_product("ro_x", [0,]) + +# Add a result (the expectation value of H) that is a combination of the PauliProduct +# expectation values +measurement_input.add_linear_exp_val("", {x_basis_index: 0.1, z_basis_index: 0.2}) + +measurement = PauliZProduct( + constant_circuit=init_circuit, + circuits=[z_circuit, x_circuit], + input=measurement_input, +) + +# Here we show three alternative options that can be ran: +# a single circuit, a measurement, and a quantum program. + +# Create a backend simulating one qubit +backend = Backend(1) + +# a) Run a single circuit +(bit_registers, float_registers, complex_registers) = backend.run_circuit(z_circuit) + +# b) To run a measurement we need to replace the free parameter by hand +executable_measurement = measurement.substitute_parameters({"angle": 0.2}) +expectation_values = backend.run_measurement(executable_measurement) +print(expectation_values) + +# c) Run a quantum program +# The QuantumProgram now has one free parameter that must be set when executing it. +# The symbolic value "angle" in the circuits will be replaced by that free parameter +# during execution. +program = QuantumProgram(measurement=measurement, input_parameter_names=["angle"]) +# Run the program with 0.1 substituting `angle` +expectation_values = program.run(backend, [0.1]) +``` + +In Rust: + +```rust +use std::collections::HashMap; + +use roqoqo::Circuit; +use roqoqo::operations as ops; +use roqoqo::measurements::{PauliZProduct, PauliZProductInput}; +use roqoqo::QuantumProgram; +use roqoqo::prelude::EvaluatingBackend; +use roqoqo::prelude::Measure; +use roqoqo_quest::Backend; + +// initialize |psi> +let mut init_circuit = Circuit::new(); +// Apply a RotateY gate with a symbolic angle +// To execute the circuit this symbolic parameter needs to be replaced +// with a real number with the help of a QuantumProgram +init_circuit += ops::RotateX::new(0, "angle".into()); +// Z-basis measurement circuit with 1000 shots +let mut z_circuit = Circuit::new(); +z_circuit += ops::DefinitionBit::new("ro_z".to_string(), 1, true); +z_circuit += ops::PragmaRepeatedMeasurement::new("ro_z".to_string(), 1000, None); +// X-basis measurement circuit with 1000 shots +let mut x_circuit = Circuit::new(); +x_circuit += ops::DefinitionBit::new("ro_x".to_string(), 1, true); +// Changing to the X basis with a Hadamard gate +x_circuit += ops::Hadamard::new(0); +x_circuit += ops::PragmaRepeatedMeasurement::new("ro_x".to_string(), 1000, None); + +// Preparing the measurement input for one qubit +let mut measurement_input = PauliZProductInput::new(1, false); +// Read out product of Z on site 0 for register ro_z (no basis change) +let z_basis_index = measurement_input.add_pauliz_product("ro_z".to_string(), vec![0,]).unwrap(); +// Read out product of Z on site 0 for register ro_x +// (after basis change effectively a measurement) +let x_basis_index = measurement_input.add_pauliz_product("ro_x".to_string(), vec![0,]).unwrap(); + +//Add a result (the expectation value of H) that is a combination of the PauliProduct +// expectation values +let mut linear: HashMap = HashMap::new(); +linear.insert(x_basis_index, 0.1); +linear.insert(z_basis_index, 0.2); +measurement_input.add_linear_exp_val("".to_string(), linear).unwrap(); + +let measurement = PauliZProduct{ + constant_circuit: Some(init_circuit), + circuits: vec![z_circuit.clone(), x_circuit], + input: measurement_input, +}; + +// Here we show three alternative options that can be ran: +// a single circuit, a measurement, and a quantum program. + +// Create a backend simulating one qubit +let backend = Backend::new(1); + +// a) Run a single circuit +let (_bit_registers, _float_registers, _complex_registers) = backend.run_circuit(&z_circuit).unwrap(); + +// b) To run a measurement we need to replace the free parameter by hand +let executable_measurement = measurement.substitute_parameters(HashMap::from([("angle".to_string(), 0.2)])).unwrap(); +let expectation_values = backend.run_measurement(&executable_measurement).unwrap(); +println!("{:?}", expectation_values); + +// c) Run a quantum program +// The QuantumProgram now has one free parameter that must be set when executing it. +// The symbolic value "angle" in the circuits will be replaced by that free parameter +// during execution. +let program = QuantumProgram::PauliZProduct{ measurement, input_parameter_names: vec!["angle".to_string()]}; +// Run the program with 0.1 substituting `angle` +let expectation_values = program.run(backend, &[0.1]).unwrap(); +println!("{:?}", expectation_values); +``` + +## Translating to other quantum computing frameworks + +There are many open- and closed-source quantum frameworks. For some use cases, it may be advantageous to interface between qoqo and another quantum computing framework. Depending on the target framework, circuits containing an available subset of qoqo operations can be translated to other frameworks by backends. Backends that translate qoqo/roqoqo objects (for example Circuits) to other frameworks or representations do not implement the `EvaluatingBackend`. + +At the moment, we have implemented one translating backend, from qoqo/roqoqo `Circuits` to qasm: [qoqo_qasm](https://github.com/HQSquantumsimulations/qoqo_qasm). diff --git a/documentation/src/circuits/intro.md b/documentation/src/circuits/intro.md new file mode 100644 index 000000000..9d88bce6f --- /dev/null +++ b/documentation/src/circuits/intro.md @@ -0,0 +1,53 @@ +# Quantum circuit + +A quantum circuit refers to a linear sequence of operations that can be executed on a quantum computer. Like most quantum computing toolkits, qoqo/roqoqo provides a `Circuit` object and a set of `Operations` that can be added to a `Circuit`. + +qoqo/roqoqo distinguishes between: + +* Definitions: Operations that declare (and initialize) classical register values ([see also here](readout.md)) +* Gate Operations: Unitary operations that can be executed on every unitary quantum computer (but might need to be decomposed into a sequence of native operations) ([see also here](unitary.md)) +* Pragma operations that are not generally available on all universal quantum computers (see [pragma operations](pragma.md) and [noise operations](noise.md) ) + +In order to create a useful result, a Circuit in qoqo/roqoqo must contain: + +* A definition of a classical register for readout +* Operations to change the state of the quantum computer, for example `RotateZ` or `CNOT` gate operations. +* A measurement to return classical information based on the state of the quantum computer. + +With qoqo, a `Circuit` can be constructed like this: + +```python +from qoqo import Circuit +from qoqo import operations as ops +# create a new circuit +circuit = Circuit() +# Define the readout for two qubits +circuit += ops.DefinitionBit(name="ro", length=2, is_output=True) +# Rotation around Z axis by pi/2 on qubit 0 +circuit += ops.RotateZ(qubit=0, theta=1.57) +# Entangling qubits 0 and 1 with CNOT gate +circuit += ops.CNOT(control=0, target=1) +# Measuring the qubits +circuit += ops.MeasureQubit(qubit=0, readout="ro", readout_index=0) +circuit += ops.MeasureQubit(qubit=1, readout="ro", readout_index=1) +``` + +And with roqoqo, like this: + +```rust +use roqoqo::{Circuit, operations::*}; + +// Create a new _modifiable_ circuit +let mut circuit = Circuit::new(); +// Define the readout for two qubits +circuit += DefinitionBit::new("ro".to_string(), 2, true); +// Apply rotation around Z axis by pi/2 on qubit 0 +circuit += RotateZ::new(0, 1.57.into()); +// Establish entanglement between qubits 0 and 1 +circuit += CNOT::new(0, 1); +// Measuring the qubits +circuit += MeasureQubit::new(0, "ro".to_string(), 0); +circuit += MeasureQubit::new(1, "ro".to_string(), 1); +``` + +For details on the **available methods** of a `Circuit` please refer to the **API documentation** of [roqoqo](https://docs.rs/roqoqo/latest/roqoqo/struct.Circuit.html) and [qoqo](https://hqsquantumsimulations.github.io/qoqo/generated/qoqo.html#qoqo.Circuit). diff --git a/documentation/src/circuits/noise.md b/documentation/src/circuits/noise.md new file mode 100644 index 000000000..ceb56fb66 --- /dev/null +++ b/documentation/src/circuits/noise.md @@ -0,0 +1,97 @@ +# Noise Operations + +qoqo/roqoqo enables the user to construct finely controlled noise models. Noise acting on the quantum computer is modeled as noise operations acting on individual qubits in between each unitary gate applied on the quantum computer. + +The noise operations can be directly added to a quantum circuit and can be simulated by compatible backends. Since noise cannot be actively controlled on a quantum computer normally, the noise operations are defined as [Pragma](pragma.md) operations in qoqo/roqoqo. The strength of the noise is determined by defining a `gate_time` and a `rate`. The noise Pragma operation affects the system as a Lindblad type noise acting on the system with the rate `rate` for the time `gate_time`. + +_Note_: as long as gate times and rates are scaled inversely any kind of units can be used. + +## Example + +For example we can add dephasing noise to qubit 0, damping noise to qubit 1, and depolarising noise to qubit 2 after a `CNOT` gate has been applied. + +In Python: + +```python + +from qoqo import Circuit +from qoqo import operations + +circuit = Circuit() +circuit += operations.CNOT(0,1) +# Adding dephasing noise acting on gate 0 with gate_time 1.0 and rate 1e-3 +circuit += operations.PragmaDephasing(qubit=0, gate_time=1.0, rate=1e-3) +circuit += operations.PragmaDamping(1, 1.0, 2e-3) +circuit += operations.PragmaDepolarising(3, 1.0, 5e-3) + +``` + +In Rust: + +```rust +use roqoqo::Circuit; +use roqoqo::operations; + +let mut circuit = Circuit::new(); +circuit += operations::CNOT::new(0,1); +// Adding dephasing noise acting on gate 0 with gate_time 1.0 and rate 1e-3 +circuit += operations::PragmaDephasing::new(0, 1.0, 1e-3.into()); +circuit += operations::PragmaDamping::new(1, 1.0, 2e-3.into()); +circuit += operations::PragmaDepolarising::new(3, 1.0, 5e-3.into()); +``` + +## Superoperator representation + +All noise operations in qoqo/roqoqo provide a `superoperator()` method that returns the definition of the noise operation in superoperator matrix form. +In the superoperator formalism, the density matrix of the system is rewritten as a vector in row-major form. Applying the noise to the quantum computer then corresponds to multiplying the vector with the superoperator matrix. +The superoperator matrix ignores the qubits the noise operation acts on to fit in the smallest possible matrix dimension. + +For other methods available for noise operations see the API documentation of [roqoqo](https://docs.rs/roqoqo/latest/roqoqo/operations/index.html) and [qoqo](https://hqsquantumsimulations.github.io/qoqo/generated/generated/qoqo.operations.html). + +## Noise operations + +The single noise operations shown in the example above are: + +* `PragmaDamping`, which applies a pure damping error corresponding to _zero_ temperature environments. +* `PragmaDepolarising`, which applies a depolarising noise. +* `PragmaDephasing`, which applies a pure dephasing noise. + +For a stochastically unravelled combination of dephasing and depolarising, the user can choose to use the `PragmaRandomNoise`. The error rate of the depolaristion (`depolarising_rate`) and the error rate of the dephasing (`dephasing_rate`) are provided as input parameters for this random noise operation. + +### PragmaGeneralNoise + +The most general noise can be modeled in qoqo by the PragmaGeneralNoise operation. This Pragma operation applies a noise term according to the given rates. The rates are represented by a 3x3 matrix: + +\\[ + M = \begin{pmatrix} + a & b & c \\\\ + d & e & f \\\\ + g & h & j \\\\ + \end{pmatrix} +\\], + +where the coefficients correspond to the following summands expanded from the first term of the non-coherent part of the Lindblad equation: +\\[ + \frac{d}{dt}\rho = \sum_{i,j=0}^{2} M_{i,j} L_{i} \rho L_{j}^{\dagger} - \frac{1}{2} \{ L_{j}^{\dagger} L_i, \rho \} +\\], + +with \\( L_0 = \sigma^{+} \\), \\( L_1 = \sigma^{-} \\) and \\( L_3 = \sigma_{z} \\). + +Applying a Pragma noise operation with a given `gate_time` corresponds to applying the full time-evolution under the Lindblad equation. + +## Error Pragmas that are not noise operations + +qoqo/roqoqo also supports Pragma operations that lead to errors in the execution of the quantum program that do not correspond to applying physical noise to the system + +### PragmaOverrotation + +This operation applies a statistical overrotation to the next rotation gate in the circuit, which matches the name given in the `gate` parameter of `PragmaOverrotation` and the involved qubits provided in `qubits`. The applied overrotation corresponds to adding a random number to the rotation angle. +The random number is drawn from a normal distribution with mean `0` and standard deviation whose variance is given by the input parameter `variance`, which is then multiplied by the `amplitude` parameter. + +### PragmaBoostNoise + +This operation boosts noise and overrotations in the circuit. The input parameter `noise_coefficient` defines the coefficient by which the noise is boosted, *i.e.* the number by which the `gate_time` is multiplied. + +### PragmaSleep + +This operation makes the quantum computer hardware, that provides this functionality, wait a given amount of time (`sleep_time`). Waiting for a given time can increase the effect of continuous noise on the result of running a quantum circuit. This is sometimes used in noise-extrapolation error mitigation techniques. \ No newline at end of file diff --git a/documentation/src/circuits/pragma.md b/documentation/src/circuits/pragma.md new file mode 100644 index 000000000..b3677974f --- /dev/null +++ b/documentation/src/circuits/pragma.md @@ -0,0 +1,15 @@ +# Pragma Operations + +Pragma operations in qoqo/roqoqo are operations that are _not_ part of the set of operations that can run on all universal quantum computers. + +Pragma operations can be used to: + +* Annotate a quantum circuit with additional information that is not necessary for execution (e.g. `PragmaGlobalPhase`, `PragmaStartDecompositionBlock`) +* Apply operations that lead to a repeated execution of a circuit (`PragmaRepeatedMeasurement`, `PragmaSetNumberOfMeasurements`) +* Apply operations that are only available on specific hardware (e.g. `PragmaChangeDevice`, `PragmaSleep`) +* Apply operations that are only available on a simulator (e.g. `PragmaSetStateVector`, `PragmaGetStateVector`) +* Model noise ([see also](noise.md)) +* Model error sources (`PragmaOverrotation`) + +For a full list of available Pragma operations see the API documentation of [roqoqo](https://docs.rs/roqoqo/latest/roqoqo/operations/index.html) + and [qoqo](https://hqsquantumsimulations.github.io/qoqo/generated/generated/qoqo.operations.html). diff --git a/documentation/src/circuits/readout.md b/documentation/src/circuits/readout.md new file mode 100644 index 000000000..c68a74c00 --- /dev/null +++ b/documentation/src/circuits/readout.md @@ -0,0 +1,102 @@ +# Readout + +To obtain results from running a quantum circuit, the quantum computer needs to return classical information. +qoqo/roqoqo uses register-based readouts where all classical information is returned from the quantum circuit using classical registers declared at the start of the circuit. +Classical registers can contain three types of classical data: + +* Bit (or bool) +* Float (f64/double) +* Complex. + +Each register is declared in a `Circuit` by a Pragma operation setting the register name and a length. The Pragma operation also declares whether the register is an output or not. +After being declared at the start of the circuit, information is written to the registers in the `Circuit` by `Measurement` or `Pragma` operations. +If the register is declared as an output register, it is returned after the execution of the circuit. + +A python example: + +```python +from qoqo import Circuit +from qoqo import operations as ops + +circuit = Circuit() +# A bit register that is not returned +circuit += ops.DefinitionBit("bit_register", length=2, is_output=False) +# A float register that is returned +circuit += ops.DefinitionFloat("float_register", length=2, is_output=True) +# A complex register that is not returned +circuit += ops.DefinitionComplex("complex_register", length=3, is_output=False) +``` + +A Rust example: + +```rust +use roqoqo::Circuit; +use roqoqo::operations; + +fn main(){ +let mut circuit = Circuit::new(); +// A bit register of length 2 that is not returned +circuit += operations::DefinitionBit::new("bit_register".to_string(), 2, false); +// A float register of length 2 that is returned as an output of the circuit +circuit += operations::DefinitionFloat::new("float_register".to_string(), 2, true); +// A complex register of length 3 that is not returned as an output +circuit += operations::DefinitionComplex::new("complex_register".to_string(), 3, false); +} +``` + +## Writing to registers + +Information is written to registers by the `MeasureQubit` operation or Pragma operations in a quantum circuit. + +* On quantum computing _hardware_ only _projective_ measurements into a bit register are available, that is a measurement in the `Z`-basis yielding `0` or `1`. +* On _simulators_ one can also read out the full state vector or density matrix into a complex register. + +`MeasureQubit` corresponds directly to a _projectivce_ measurement. By definition, projective measurements are available on universal quantum computers. +`PragmaRepeatedMeasurement` is shorthand for repeatedly running the circuit and applying a projective measurement each time. While it is not necessarily available on every [backend](backends.md) it is compatible with hardware quantum computers. + +As shown in the example below, the operation `MeasureQubit` can be used to provide measurement instructions for each individual qubit. The input parameter `qubit` specifies the qubit to be measured, whereas the parameter `readout_index` defines the position in the classical register `readout` where the measurement value of the `qubit` is stored. The explicit assignment of a qubit measurement to a readout register index can be used to handle qubit remapping in a quantum circuit. + +When supported by the backend, `PragmaRepeatedMeasurement` can be used instead of `MeasureQubit` command to provide the measurement instruction for all qubits in `qubit_mapping` that needs to be repeated N times (`number_measurements`). For further available Pragma measurement instructions, please refer to the section [Pragma operations](pragma.md). + +Setting up readouts in Python: + +```python +from qoqo import Circuit +from qoqo import operations as ops + +circuit = Circuit() +# Add a Bit register to the circuit for the qubit readout +circuit += ops.DefinitionBit("bit_register", 2, is_output = True) +# Add measurement instructions for each qubit, when using hardware +circuit += ops.MeasureQubit(qubit=0, readout="bit_register", readout_index=0) +circuit += ops.MeasureQubit(qubit=1, readout="bit_register", readout_index=1) + +# Alternatively, define a Complex register to readout the state vector +circuit += ops.DefinitionComplex("complex_register", 3, is_output = False) +# Measure the state vector when running the circuit on a simulator +circuit += ops.PragmaGetStateVector("complex_register", None) +``` + +Setting up readouts in Rust: + +```rust +use roqoqo::Circuit; +use roqoqo::operations; + + +let mut circuit = Circuit::new(); +// Add a Bit register to the circuit for the qubit readout +circuit += operations::DefinitionBit::new("bit_register".to_string(), 2, true); +// Add measurement instructions for each qubit, when using hardware +circuit += operations::MeasureQubit::new(0, "bit_register".to_string(), 0); +circuit += operations::MeasureQubit::new(1, "bit_register".to_string(), 1); + +// Alternatively, define a Complex register to readout the state vector +circuit += operations::DefinitionComplex::new( + "complex_register".to_string(), 3, false, +); +// Measure the state vector when running the circuit on a simulator +circuit += operations::PragmaGetStateVector::new( + "complex_register".to_string(), None, +); +``` diff --git a/documentation/src/circuits/unitary.md b/documentation/src/circuits/unitary.md new file mode 100644 index 000000000..b864b17ea --- /dev/null +++ b/documentation/src/circuits/unitary.md @@ -0,0 +1,13 @@ +# Unitary Operations + +Unitary operations or gate operations are operations that can be executed on all universal quantum computers. The operations correspond to unitary transformations of the state of a quantum computer. + +## Unitary Matrix + +Gate operations in qoqo/roqoqo provide a `unitary_matrix()` method that returns the definition of the gate in matrix form. This definition ignores the qubits the gates acts on to fit in the smallest possible matrix dimension. + +* For single-qubit gates, the created matrix always corresponds to `qubit=0` and has dimension 2x2. +* For two-qubit gates, the created matrix always corresponds to `control=1`, `target=0` and has dimension a 4x4. See also the state ordering [conventions](../conventions.md). +* For multi-qubit gates, the created matrix always corresponds to `qubits=[0..N]` where `N` is the number of qubits in the qubit vector of the multi-qubit gate. + +For a list of unitary operations see [gate operations](../gate_operations/intro.md). diff --git a/documentation/src/conventions.md b/documentation/src/conventions.md new file mode 100644 index 000000000..9011732d3 --- /dev/null +++ b/documentation/src/conventions.md @@ -0,0 +1,82 @@ +# Conventions + +This section gives a quick overview of some of the conventions used in qoqo/roqoqo. + +## Definitions + +* `operation`: An atomic instruction applied to a quantum computer (or simulated quantum computer). +* `gate`: An `operation` that corresponds to a unitary transformation of the state of the quantum computer and can be implemented on all universal quantum computers. +* `qubit`: A quantum bit. Can be in a superposition of two basis states. +* `Circuit`: A linear sequence of `operations`. + +## Qubit states + +For the two basis states of a single qubit we define + +\\[ + \left\| 0 \right> = \left|\textrm{false} \right> = \left| \uparrow \right> = \begin{pmatrix} + 1 \\\\ + 0 + \end{pmatrix} \\\\ + \\]. + + \\[ + \left \|1 \right> = \left|\textrm{true} \right> = \left| \downarrow \right> = \begin{pmatrix} + 0 \\\\ + 1 + \end{pmatrix} \\\\ + \\]. + +Before any operations are applied in a circuit a quantum computer is always assumed to be in the zero state (all qubits in state `|0>`). + +### Note + +This convention implies that `|0>` is the **excited** state with respect to the `Z` Pauli operator and `|1>` is the **ground** state. This is in contract with the physical implementation of qubits, where `|0>` typically corresponds to the state with lower energy and damping will lead to the system relaxing from `|1>` to `|0>`. + +This means that in this convention, when identifying the qubits with spins with respect to the `Z` operator, the system starts out in the highest energy case and damping leads to a heating effect where the system population shifts to higher energy spin states. + +## Endianness + +qoqo and roqoqo use little-endian encoding, where the least significant qubit is at the smallest memory address (or at the lowest index in a vector and at the rightmost entry when writing the qubit state as a sequence of `0` and `1` like a binary number). + +For a two-qubit state space we write the states of the qubits in the following order: + \\[ + \left|00 \right> = \textrm{state} 0 \\\\ + \left|01 \right> = \textrm{state} 1 \\\\ + \left|10 \right> = \textrm{state} 2 \\\\ + \left|11 \right> = \textrm{state} 3 \\\\ + \\]. + +## Operation order + + When adding qoqo/roqoqo operations to circuits, the first operation added will be executed first. When writing qoqo/roqoqo operations, they are read left to right. This leads to an inversion of the order when transcribing to matrix form, where the matrix to the right acts first. + + \\[ + \textrm{PauliX}(0) \cdot \textrm{PauliZ}(0) \\\\ = + \textrm{PauliZ(0).unitary_matrix()} \cdot \textrm{PauliX(0).unitary_matrix()} \\\\ + = \begin{pmatrix} + 1 & 0 \\\\ + 0 & -1 + \end{pmatrix} \begin{pmatrix} + 0 & 1 \\\\ + 1 & 0 + \end{pmatrix} + \\]. + +## Qubit naming + +qoqo uses a unified naming scheme for qubits in operations + +* In single-qubit operations, the qubit is always referred to as `qubit`, +* In two-qubit gates, the two qubits are referred to as `control` and `target`, +* In multi-qubit gates, the ordered list/vector of qubits the gates acts on is referred to as `qubits`. + +When initializing two-qubit gates, the `control` is always the first argumemt and `target` the second argument. + +## Unitary Matrix + +Unitary operations in qoqo/roqoqo provide a `unitary_matrix()` method that returns the definition of the gate in matrix form. This definition ignores the qubits of the gate to fit in the smallest possible matrix dimension. + +* For single-qubit gates, the created matrix always corresponds to `qubit=0` and has a 2x2-dimension. +* For two-qubit gates, the created matrix always corresponds to `control=1`, `target=0` and is a 4x4-dimensional matrix. This convention corresponds to the little-endian encoding described above. +* For multi-qubit gates, the created matrix always corresponds to `qubits=[0..N]` where `N` is the number of qubits in the qubit vector of the multi-qubit gate. diff --git a/documentation/src/devices.md b/documentation/src/devices.md new file mode 100644 index 000000000..3ad0289c6 --- /dev/null +++ b/documentation/src/devices.md @@ -0,0 +1,110 @@ +# Devices + +When working with quantum circuits it is often necessary to know the topology of a target quantum device. Device properties can also be used by backends, for example to accurately simulate a given quantum device. +qoqo/roqoqo defines an interface for obtaining the device topology. The interface is defined by roqoqo's `Device` trait. Additionally qoqo/roqoqo provides some simple devices that can be used to quickly define simple device topologies. + +Devices based on the roqoqo `Device` trait can be abstract devices or backend devices. + +**Abstract devices** contain abstract information about the device topology and the available gates. + +**Backend devices** are devices that are implemented by a roqoqo [backend](backends.md). They can specify additional information for accessing the device on the backend and can contain additional information. The devices also contain all the information of the abstract devices. + +A typical example for abstract devices are linear chains of square lattices in which two-qubit gate operations are only available between neighboring qubits. + +It is defined by the decoherence rates `M` and the (pseudo-)time needed to execute a quantum operation. + +The matrix representation of the decoherence rates of the Lindblad equation can be obtained by calling the method `qubit_decoherence_rates()` of a device. + +The time required for a gate operation can be obtained from the methods `single_qubit_gate_time()`, `two_qubit_gate_time()`, and `multi_qubit_gate_time()` for a specific type of gate (defined by its name) and the qubits the gate should act on. +The gate time method can also be used to query the topology and available gate operations on a device. If a specific type of gate operation is not available on the given qubits, the gate time method will return `None`. + +For further details of the `Device` trait please refer to the API documentation of [roqoqo::devices](https://docs.rs/roqoqo/latest/roqoqo/devices/index.html) (Rust core) + +## Simple Devices + +qoqo/roqoqo provide three simple devices + +* `GenericDevice` +* `AllToAllDevice` +* `SquareLatticeDevice` + +The `GenericDevice` is the most basic device. It simply contains all available gate operations, the corresponding gate times and the decoherence rate for each qubit in internal HashMaps. It can be used to create custom devices and as a device interchange format. As part of the `Device` interface, each device can be exported as a `GenericDevice` with the `to_generic_device` function. The `GenericDevice` is also used to exchange device data via JSON files or REST API calls. + +```rust +use roqoqo::devices::Device; +use roqoqo::devices::{GenericDevice, AllToAllDevice}; +use ndarray::array; +// Create a two-qubit device +let mut generic_device = GenericDevice::new(2); +// Create a comparison two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +let all_to_all = AllToAllDevice::new(2, &["RotateZ".to_string()], &["CNOT".to_string()], 1.0); + +generic_device.set_single_qubit_gate_time("RotateZ", 0, 1.0).unwrap(); +generic_device.set_single_qubit_gate_time("RotateZ", 1, 1.0).unwrap(); +generic_device.set_two_qubit_gate_time("CNOT", 0, 1, 1.0).unwrap(); +generic_device.set_two_qubit_gate_time("CNOT", 1, 0, 1.0).unwrap(); +assert_eq!(generic_device, all_to_all.to_generic_device()); +``` + +```python +from qoqo import devices +import numpy as np + +# Create a two-qubit device +generic_device = devices.GenericDevice(2) +# Create a comparison two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +all_to_all = devices.AllToAllDevice(2, ["RotateZ"], ["CNOT"], 1.0) + +generic_device.set_single_qubit_gate_time("RotateZ", 0, 1.0) +generic_device.set_single_qubit_gate_time("RotateZ", 1, 1.0) +generic_device.set_two_qubit_gate_time("CNOT", 0, 1, 1.0) +generic_device.set_two_qubit_gate_time("CNOT", 1, 0, 1.0) +assert generic_device == all_to_all.generic_device() +``` + +The `AllToAllDevice` can be used to quickly create a device with all-to-all connectivity. Additionally to the `set_single_qubit_time` type functions which are identical to the `GenericDevice`, it provides functions to set the gate time on *all* gates of a certain type and set the decoherence rates of *all* qubits. When setting these attributes for *all* of the qubits on the device, the `AllToAllDevice` uses a builder pattern, in order for the user to be able to chain such calls. This is demonstrated below. + +```rust +use roqoqo::devices::Device; +use roqoqo::devices::{GenericDevice, AllToAllDevice}; +use ndarray::array; + +// Create a two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +let mut all_to_all = AllToAllDevice::new(2, &["RotateZ".to_string()], &["CNOT".to_string()], 1.0); +// Set a new time for all RotateZ gates +let mut all_to_all = all_to_all.set_all_single_qubit_gate_times("RotateZ", 2.0); +// Set a new time for all CNOT gates +let mut all_to_all = all_to_all.set_all_two_qubit_gate_times("CNOT", 0.1); +``` + +```python +from qoqo import devices +import numpy as np + +# Create a two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +all_to_all = devices.AllToAllDevice(2, ["RotateZ"], ["CNOT"], 1.0) + +# Set a new time for all RotateZ gates and CNOT gates +all_to_all = all_to_all.set_all_single_qubit_gate_times("RotateZ", 2.0).set_all_two_qubit_gate_times("CNOT", 0.1) +``` + +The `SquareLatticeDevice` can be used to quickly initialize a device with two-qubit operations available between next-neighbours on a square lattice. The same methods as `AllToAllDevice` are available. + +```rust +use roqoqo::devices::Device; +use roqoqo::devices::{SquareLatticeDevice}; +let rows = 1; +let columns = 2; +// Create a two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +let square_lattice = SquareLatticeDevice::new(rows, columns, &["RotateZ".to_string()], &["CNOT".to_string()], 1.0); +``` + +```python +from qoqo import devices + +rows = 1 +columns = 2 + +# Create a two-qubit device with `RotateZ` and `CNOT` as the only gates and 1.0 as the default gate time +square_lattice = devices.SquareLatticeDevice(rows, columns, ["RotateZ"], ["CNOT"], 1.0) +``` diff --git a/documentation/src/gate_operations/intro.md b/documentation/src/gate_operations/intro.md new file mode 100644 index 000000000..64ca55d07 --- /dev/null +++ b/documentation/src/gate_operations/intro.md @@ -0,0 +1,68 @@ +# List of Gate Operations + +Operations are the atomic instructions in any quantum program that can be represented by qoqo/roqoqo. Gate operations are single-, two- or multi-qubit unitary operations that apply a unitary transformation and can be executed on any universal quantum computer. Mathematically, a gate can be represented by a unitary matrix. + +A list of the gate operations available in qoqo and roqoqo with their mathematical description is provided in this section. We differentiate between [single-qubit gates](single_qubit_gates.md) acting on a single qubit, [two-qubit gates](two_qubit_gates.md) applied on a pair of qubits and [multi-qubit gates](multi_qubit_gates.md) affecting a series of qubits. + +### Notation + +* A rotation angle is usually annotated with \\( \theta \\) and its corresponding argument is `theta`. +* For the phase angle, the symbol \\( \varphi \\) is used. +* The rotation angle \\( \phi \\) in the x-y plane is addressed by the argument name `phi`. +* \\( \sigma_x \\), \\( \sigma_y \\), \\( \sigma_z \\) are the Pauli matrices X, Y, Z +\\[ + \sigma_x = \begin{pmatrix} 0 & 1 \\\\ 1 & 0 \end{pmatrix} := X, \quad \sigma_y = \begin{pmatrix} 0 & -i \\\\ i & 0 \end{pmatrix} := Y, \quad \sigma_z = \begin{pmatrix} 1 & 0 \\\\ 0 & -1 \end{pmatrix} := Z +\\]. + +## [Single-qubit gates](single_qubit_gates.md) + +| Gate | Short Description | +|---------|---------| +| Hadamard | The Hadamard gate, to create a superposition of states, and so to change the basis. | +| InvSqrtPauliX | The inverse square root of the PauliX gate \\( e^{i \frac{\theta}{4} \sigma_x} \\). | +| PauliX | The Pauli X gate, a rotation with a fixed angle of \\( \frac{\pi}{2} \\), corresponds to a "flip" on x-axis. | +| PauliY | The Pauli Y gate, a rotation with a fixed angle of \\( \frac{\pi}{2} \\), corresponds to a "flip" on y-axis. | +| PauliZ | The Pauli Z gate, a rotation with a fixed angle of \\( \frac{\pi}{2} \\), corresponds to a "flip" on z-axis. | +| PhaseShiftState0 | Rotation around z-axis by angle \\(\theta\\) applied on state \\( \left \|0 \right> \\) results in a phase shift compared to RotateZ gate. | +| PhaseShiftState1 | Rotation around z-axis by angle \\(\theta\\) applied on state \\( \left\|1 \right> \\) results in phase shift compared to RotateZ gate. | +| RotateAroundSphericalAxis | Implements a rotation around an axis in spherical coordinates. | +| RotateX | The rotation gate around x-axis \\( e^{-i \frac{\theta}{2} \sigma_x} \\). | +| RotateXY | Implements a rotation around an axis in the x-y plane, where the axis is defined by an angle/spherical coordinates. | +| RotateY | The rotation gate around y-axis \\( e^{-i \frac{\theta}{2} \sigma_y} \\). | +| RotateZ | The rotation gate around z-axis \\( e^{-i \frac{\theta}{2} \sigma_z} \\). | +| SGate | The S gate. | +| SqrtPauliX | The square root of the PauliX gate \\( e^{-i \frac{\theta}{4} \sigma_x} \\). | +| TGate | The T gate. | + +## [Two-qubit gates](two_qubit_gates.md) + +| Gate | Short Description | +|---------|---------| +| Bogoliubov | The Bogoliubov DeGennes interaction gate. | +| CNOT | The controlled not gate, *e.g.* to entangle two qubits. | +| ComplexPMInteraction | The complex hopping gate. | +| ControlledPauliY | The controlled PauliY gate. | +| ControlledPauliZ | The controlled PauliZ gate. | +| ControlledPhaseShift | The controlled phase shift gate. | +| Fsim | The fermionic qubit simulation gate. | +| FSwap | The fermionic SWAP gate. | +| GivensRotation | The Givens rotation interaction gate in big endian notation: \\(e^{-\mathrm{i} \theta (X_c Y_t - Y_c X_t)}\cdot e^{-i \phi Z_t/2} \\). | +| GivensRotationLittleEndian | The Givens rotation interaction gate in little-endian notation: \\(e^{-\mathrm{i} \theta (X_c Y_t - Y_c X_t)}\cdot e^{-i \phi Z_c/2} \\). | +| InvSqrtISwap | The inverse square root of the ISwap gate. | +| ISwap | The complex swap gate. | +| MolmerSorensenXX | The fixed-phase Mølmer–Sørensen XX gate. | +| PhaseShiftedControlledZ | The phased-shifted controlled-Z gate. | +| PMInteraction | The transversal interaction gate. | +| Qsim | The qubit simulation gate. | +| SpinInteraction | The generalized, anisotropic XYZ Heisenberg interaction between spins. | +| SqrtISwap | The square root of the ISwap gate. | +| SWAP | The swap gate, to switch the positions of two qubits. | +| VariablesMSXX | The variable-angle Mølmer–Sørensen XX gate. | +| XY | The XY gate. | + +## [Multi-qubit gates](multi_qubit_gates.md) + +| Gate | Short Description | +|---------|---------| +| MultiQubitMS | The Mølmer–Sørensen gate between multiple qubits. | +| MultiQubitZZ | The multi-qubit PauliZ-product gate. | diff --git a/documentation/src/gate_operations/multi_qubit_gates.md b/documentation/src/gate_operations/multi_qubit_gates.md new file mode 100644 index 000000000..5d8ef5937 --- /dev/null +++ b/documentation/src/gate_operations/multi_qubit_gates.md @@ -0,0 +1,74 @@ +# Multi-qubit gates + +Multi-qubit gates in qoqo/roqoqo represent atomic instructions in any quantum computer that act on `N` number of qubits. In multi-qubit gates the `qubits` are given as a vector of all involved qubits. The unitary matrix of a multi-qubit gate corresponds to the notation based on `qubits=[0..N]` where `N` is the number of qubits in the qubit vector of the multi-qubit gate. + +## ControlledControlledPauliZ + +Implements the double-controlled PauliZ gate, with two control qubits and one target qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1 + \end{pmatrix} +\\]. + +## ControlledControlledPhaseShift + +Implements the double-controlled PhaseShift gate, with two control qubits and one target qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{i \theta} + \end{pmatrix} +\\]. + +## MultiQubitMS + +The Mølmer–Sørensen gate between multiple qubits. The gate applies the rotation under the product of PauliX operators on multiple qubits. In mathematical terms, the gate applies + +\\[ + e^{-i * \theta/2 * X_{i0} * X_{i1} * ... * X_{in}}, +\\], + +whereas \\(\theta\\) is the angle parameter of the multi-qubit Mølmer–Sørensen gate and `i0`, `i1` *etc.* are the qubits the gate acts on. + +## MultiQubitZZ + +The multi-qubit PauliZ-product gate. he gate applies the rotation under the product of PauliZ operators on multiple qubits. + +\\[ + e^{-i * \theta/2 * Z_{i0} * Z_{i1} * ... * Z_{in}}, +\\], + +whereas \\(\theta\\) is the angle parameter of the multi-qubit PauliZ-product gate and `i0`, `i1` *etc.* are the qubits the gate acts on. + +## Toffoli + +Implements the Toffoli, with two control qubits and one target qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 + \end{pmatrix} +\\]. diff --git a/documentation/src/gate_operations/single_qubit_gates.md b/documentation/src/gate_operations/single_qubit_gates.md new file mode 100644 index 000000000..5760a1c05 --- /dev/null +++ b/documentation/src/gate_operations/single_qubit_gates.md @@ -0,0 +1,211 @@ +# Single-qubit gates + +Single-qubit gates in qoqo/roqoqo represent atomic instructions of any quantum computer that act on a single qubit. In single-qubit gates the qubit is always referred to as `qubit`. The unitary matrices of single-qubit gates are 2x2-dimensional matrices applied on single-qubit states \\( \left \|0 \right> \\) and \\( \left \|1 \right> \\), as defined in chapter [conventions](../conventions.md). + +The most general unitary operation acting on one qubit is of the form +\\[ + U =e^{\mathrm{i} \phi}\begin{pmatrix} + \alpha_r+\mathrm{i} \alpha_i & -\beta_r+\mathrm{i} \beta_i \\\\ + \beta_r+\mathrm{i} \beta_i & \alpha_r-\mathrm{i}\alpha_i + \end{pmatrix} + \\]. + +The parameters \\( \alpha_r \\), \\( \alpha_i \\) and \\( \beta_r \\), \\( \beta_i \\) can be accessed by the functions `alpha_r()`, `alpha_i()`, `beta_r()` and `beta_i()`, applied on the particular single-qubit gate. The full matrix form of the single-qubit gates available in qoqo/roqoqo is documented in this chapter. + +## GPi + +The unitary matrix of the GPi gate, which is often used in the context of ion traps, is defined as follows: + +\\[ + U = \begin{pmatrix} + 0 & e^{-i \theta}\\\\ + e^{i \theta} & 0 + \end{pmatrix} +\\]. + +## GPi2 + +The unitary matrix of the GPi2 gate, which is often used in the context of ion traps, is defined as follows: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & -i e^{-i \theta}\\\\ + -i e^{i \theta} & 1 + \end{pmatrix} +\\]. + +## Hadamard + +The Hadamard gate when applied creates a superposition of states, and can therefore be used to change the basis if required. The definition of the gate in matrix form is given by: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 1 \\\\ + 1 & -1 + \end{pmatrix} +\\]. + +## InvSqrtPauliX + +The inverse square root of the PauliX gate \\( e^{\mathrm{i} \frac{\theta}{4} \sigma_x} \\) corresponds to a unitary matrix defined as: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & \mathrm{i} \\\\ + \mathrm{i} & 1 + \end{pmatrix} +\\]. + + On some hardware platforms, the gate operation `InvSqrtPauliX` together with the operation `SqrtPauliX` are the only available rotation gates. This becomes relevant when it comes to the compilation of a quantum algorithm containing any arbitrary gates to the set of basic gates supported by the hardware device. + +## PauliX + +The Pauli X gate implements a rotation of \\( \frac{\pi}{2} \\) about the x-axis that can be used, for example, to flip the qubit state. The full matrix form is given by: + +\\[ + U = \begin{pmatrix} + 0 & 1 \\\\ + 1 & 0 + \end{pmatrix} +\\]. + +## PauliY + +The Pauli Y gate implements a rotation of \\( \frac{\pi}{2} \\) about the y-axis that can be used, for example, to flip the qubit state. The unitary matrix is defined as: + +\\[ + U = \begin{pmatrix} + 0 & -\mathrm{i} \\\\ + \mathrm{i} & 0 + \end{pmatrix} +\\]. + +## PauliZ + +The Pauli Z gate implements a rotation of \\( \frac{\pi}{2} \\) about the z-axis that can be used, for example, to flip the qubit state. The full matrix form is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 \\\\ + 0 & -1 + \end{pmatrix} +\\]. + +## PhaseShiftState0 + +This gate operation corresponds to the phase shift gate applied on state \\( \left \|0 \right> \\) compared to RotateZ gate. It implements a rotation around Z-axis by an arbitrary angle \\(\theta\\), also known as AC Stark shift of the state \\( \left \|0 \right> \\). The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + e^{\mathrm{i} \theta} & 0\\\\ + 0 & 1 + \end{pmatrix} +\\]. + +## PhaseShiftState1 + +This gate operation corresponds to the phase shift gate applied on state \\( \left \|1 \right> \\) compared to RotateZ gate. It implements a rotation around Z-axis by an arbitrary angle \\(\theta\\), also known as AC Stark shift of the state \\( \left \|1 \right> \\). The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0\\\\ + 0 & e^{\mathrm{i} \theta} + \end{pmatrix} +\\]. + +## RotateAroundSphericalAxis + +Implements a rotation around an axis in the x-y plane in spherical coordinates. The definition of the gate in matrix form is given by: + +\\[ + U = \begin{pmatrix} + \cos\left(\frac{\theta}{2}\right) & 0\\\\ + 0 & \cos\left(\frac{\theta}{2}\right) + \end{pmatrix} + \+ \begin{pmatrix} + -\mathrm{i} \sin\left(\frac{\theta}{2}\right) v_z & \sin\left(\frac{\theta}{2}\right) \left(-i v_x - v_y \right)\\\\ + \sin\left(\frac{\theta}{2}\right) \left(-\mathrm{i} v_x + v_y \right) & \mathrm{i} \sin\left(\frac{\theta}{2}\right) v_z + \end{pmatrix} +\\], + + +with \\[ v_x = \sin\left(\theta_{sph}\right) \cdot \cos\left(\phi_{sph}\right), \quad v_y = \sin\left(\theta_{sph}\right)\cdot\sin\left(\phi_{sph}\right), \quad v_z = \cos\left(\theta_{sph}\right). \\]. + +## RotateX + +The rotation gate around x-axis \\( e^{-\mathrm{i} \frac{\theta}{2} \sigma_x} \\). The definition of the unitary matrix is as follows: + +\\[ + U = \begin{pmatrix} + \cos(\frac{\theta}{2}) & -\mathrm{i} \sin(\frac{\theta}{2})\\\\ + -\mathrm{i}\sin(\frac{\theta}{2}) & \cos(\frac{\theta}{2}) + \end{pmatrix} +\\]. + +## RotateXY + +Implements a rotation around an axis in the x-y plane, where the axis is defined by an angle/spherical coordinates. The unitary matrix representing the gate is given by: + +\\[ + U = \begin{pmatrix} + \cos \left(\frac{\theta}{2} \right) & -\mathrm{i} e^{-\mathrm{i} \phi} \sin \left(\frac{\theta}{2} \right) \\\\ + -\mathrm{i} e^{\mathrm{i} \phi} \sin \left( \frac{\theta}{2} \right) & \cos\left( \frac{\theta}{2} \right) + \end{pmatrix} + \\]. + +## RotateY + +The rotation gate around the y-axis \\( e^{-\mathrm{i} \frac{\theta}{2} \sigma_y} \\). The full matrix form is given by: + +\\[ + U = \begin{pmatrix} + \cos(\frac{\theta}{2}) & - \sin(\frac{\theta}{2})\\\\ + \sin(\frac{\theta}{2}) & \cos(\frac{\theta}{2}) + \end{pmatrix} +\\]. + +## RotateZ + +The rotation gate around the z-axis \\( e^{-\mathrm{i} \frac{\theta}{2} \sigma_z} \\). The unitary matrix reads: + +\\[ + U = \begin{pmatrix} + \cos(\frac{\theta}{2}) -\mathrm{i} \sin(\frac{\theta}{2}) & 0\\\\ + 0 & \cos(\frac{\theta}{2}) + \mathrm{i} \sin(\frac{\theta}{2}) + \end{pmatrix} +\\]. + +## SGate + +The unitary matrix of the S gate, which is often used in the theory of error correction, reads: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 0 \\\\ + 0 & \mathrm{i} + \end{pmatrix} +\\]. + +## SqrtPauliX + +The square root of the PauliX gate \\( e^{-\mathrm{i} \frac{\theta}{4} \sigma_x} \\). The full matrix form is given by: + +\\[ + U = \frac{1}{\sqrt(2)}\begin{pmatrix} + 1 & -\mathrm{i} \\\\ + -\mathrm{i} & 1 + \end{pmatrix} +\\]. + +On some hardware platforms, the gate operation `SqrtPauliX` together with the operation `InvSqrtPauliX` are the only available rotation gates. This becomes relevant when it comes to the compilation of a quantum algorithm containing any arbitrary gates to the set of basic gates supported by the hardware device. + +## TGate + +The unitary matrix of the T gate, which is often used in the theory of error correction, is defined as follows: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 0 \\\\ + 0 & e^{\mathrm{i} \frac{\pi}{4}} + \end{pmatrix} +\\]. diff --git a/documentation/src/gate_operations/two_qubit_gates.md b/documentation/src/gate_operations/two_qubit_gates.md new file mode 100644 index 000000000..c077441c2 --- /dev/null +++ b/documentation/src/gate_operations/two_qubit_gates.md @@ -0,0 +1,358 @@ +# Two-qubit gates + +Two-qubit gates in qoqo/roqoqo represent atomic instructions of any quantum computer that act on a pair of qubits. In two-qubit gates the two qubits are referred to as `control` and `target`. When initializing two-qubit gates, the `control` is always the first argument and `target` the second argument. For two-qubit gates, the created matrix always corresponds to `control=1`, `target=0`, and is a 4x4-dimensional matrix. This convention corresponds to the little-endian encoding as described in chapter [conventions](../conventions.md). The full matrix form of the two-qubit gates implemented in qoqo/roqoqo is documented in this chapter. + +The given form of the unitary matrix is consistent with the following ordering of qubit states in a two-qubit state space: + + \\[ + \left|00 \right> = \textrm{state} 0 \\\\ + \left|01 \right> = \textrm{state} 1 \\\\ + \left|10 \right> = \textrm{state} 2 \\\\ + \left|11 \right> = \textrm{state} 3 \\\\ + \\]. + +## Bogoliubov + +The Bogoliubov DeGennes gate representing interactions of the form: +\\[ + e^{-\mathrm{i} \mathrm{Re}(\Delta)\cdot(X_c X_t - Y_c Y_t)/2 + \mathrm{Im}(\Delta)\cdot(X_c Y_t+Y_c X_t)/2}, + \\], + +where \\(X_c\\) is the Pauli matrix \\(\sigma_x\\) acting on the control qubit, and \\(Y_t\\) is the Pauli matrix \\(\sigma_y\\) acting on the target qubit, and \\( \Delta \\) is the complex Bogoliubov interaction strength. + +The full matrix form is given by: + +\\[ + U = \begin{pmatrix} + \cos(|\Delta|) & 0 & 0 & \mathrm{i} \sin(|\Delta|) e^{\mathrm{i} \cdot \varphi(\Delta)} \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 \\\\ + \mathrm{i} \sin(|\Delta|) e^{-\mathrm{i} \cdot \varphi(\Delta)} & 0 & 0 & \cos(|\Delta|) + \end{pmatrix} +\\], + +with the value \\(|\Delta|\\) of the complex Bogoliubov interaction strength \\( \Delta \\), and its phase angle \\(\varphi(\Delta)\\). + +## CNOT + +The controlled not gate can be used to entangle two qubits. The unitary matrix for the CNOT gate is defined as: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 \\\\ + 0 & 0 & 1 & 0 + \end{pmatrix} + \\]. + + ## ComplexPMInteraction + +This gate implements the complex hopping operation of the form: + +\\[ + e^{-\mathrm{i} \left[ \mathrm{Re}(\theta) \cdot (X_c X_t + Y_c Y_t) - \mathrm{Im}(\theta) \cdot (X_c Y_t - Y_c X_t) \right] } , +\\], + +where \\(X_c\\) is the Pauli matrix \\(\sigma_x\\) acting on the control qubit, and \\(Y_t\\) is the Pauli matrix \\(\sigma_y\\) acting on the target qubit. The complex parameter \\( \theta \\) gives the strength of the rotation. + +## ControlledPauliY + +The controlled PauliY gate applies the PauliY gate on the `target` qubit based on the value of the `control` qubit. The corresponding unitary matrix reads: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & -\mathrm{i} \\\\ + 0 & 0 & \mathrm{i} & 0 + \end{pmatrix} + \\]. + +## ControlledPauliZ + +The controlled PauliZ gate applies the PauliZ gate on the `target` qubit controlled by the `control` qubit. The definition for the unitary matrix is as follows: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 \\\\ + 0 & 0 & 0 & -1 + \end{pmatrix} + \\]. + +## ControlledPhaseShift + +The controlled phase shift gate implements a phase shift applied on `target` qubit based on the value of the `control` qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 \\\\ + 0 & 0 & 0 & e^{\mathrm{i} \theta} + \end{pmatrix} +\\]. + +## ControlledRotateX + +The controlled RotateX implements a RotateX gate applied on `target` qubit based on the value of the `control` qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & \cos(\frac{\theta}{2}) & -i \sin(\frac{\theta}{2}) \\\\ + 0 & 0 & -i \sin(\frac{\theta}{2}) & \cos(\frac{\theta}{2}) + \end{pmatrix} +\\]. + +## ControlledRotateXY + +The controlled RotateXY implements a RotateXY gate applied on `target` qubit based on the value of the `control` qubit. The unitary matrix is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & \cos(\frac{\theta}{2}) & -i e^{-i \phi} \sin(\frac{\theta}{2}) \\\\ + 0 & 0 & -i e^{-i \phi} \sin(\frac{\theta}{2}) & \cos(\frac{\theta}{2}) + \end{pmatrix} +\\]. + +## Fsim + +The fermionic qubit simulation gate that can be represented as the following unitary matrix: + +\\[ + U = \begin{pmatrix} + \cos(\Delta) & 0 & 0 & \mathrm{i} \sin(\Delta) \\\\ + 0 & -\mathrm{i} \sin(t) & \cos(t) & 0 \\\\ + 0 & \cos(t) & -\mathrm{i} \sin(t) & 0 \\\\ + -\sin(\Delta) \cdot e^{-\mathrm{i} U} & 0 & 0 & -\cos(\Delta) \cdot e^{-\mathrm{i} U} + \end{pmatrix} +\\], + +where `t` is the hopping strength, `U` is the interaction strength and \\( \Delta \\) is the Bogoliubov interaction strength. + +_Note_: The qubits have to be adjacent, *i.e.*, \\( |i-j|=1 \\) has to hold. This is the only case in which the gate is valid as a two-qubit gate (due to the Jordan-Wigner transformation). + + +## FSwap + +The fermionic SWAP gate can be represented as the following unitary matrix: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & -1 + \end{pmatrix} +\\]. + +## GivensRotation + +The Givens rotation interaction gate in big endian notation: +\\[ + e^{-\mathrm{i} \theta (X_c Y_t - Y_c X_t)}\cdot e^{-\mathrm{i} \phi Z_t/2}, +\\], + +where \\(X_c\\) is the Pauli matrix \\(\sigma_x\\) acting on the control qubit, \\(Y_t\\) is the Pauli matrix \\(\sigma_y\\) acting on the target qubit, and \\(Z_t\\) is the Pauli matrix \\(\sigma_z\\) acting on the target qubit. + +The unitary matrix representation is: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & \cos(\theta) \cdot e^{\mathrm{i} \phi} & \sin(\theta) & 0 \\\\ + 0 & -\sin(\theta) \cdot e^{\mathrm{i} \phi} & \cos(\theta) & 0 \\\\ + 0 & 0 & 0 & e^{\mathrm{i} \phi} + \end{pmatrix} +\\]. + +Further information on the endianness in context of qoqo can be found in the section [conventions](../conventions.md). + +## GivensRotationLittleEndian + +The Givens rotation interaction gate in little-endian notation: +\\[ + e^{-\mathrm{i} \theta (X_c Y_t - Y_c X_t)}\cdot e^{-\mathrm{i} \phi Z_c/2}, +\\], +with Pauli matrices \\( X := \sigma_x\\), \\( Y := \sigma_y\\), \\( Z := \sigma_z\\) and indices `c` for control qubit and `t` for target qubit. + +The unitary matrix form is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & \cos(\theta) & \sin(\theta) & 0 \\\\ + 0 & -\sin(\theta) \cdot e^{\mathrm{i} \phi} & \cos(\theta) \cdot e^{\mathrm{i} \phi} & 0 \\\\ + 0 & 0 & 0 & e^{\mathrm{i} \phi} + \end{pmatrix} +\\]. + +## InvSqrtISwap + +The inverse square root of the ISwap gate has the full matrix form: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & \frac{1}{\sqrt{2}} & \frac{-\mathrm{i}}{\sqrt{2}} & 0 \\\\ + 0 & \frac{-\mathrm{i}}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\\]. + +## ISwap + +The unitary matrix of the complex ISwap gate reads: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 0 & \mathrm{i} & 0 \\\\ + 0 & \mathrm{i} & 0 & 0 \\\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\\]. + +## MolmerSorensenXX + +This gate implements the fixed-phase MolmerSorensen XX operation as introduced in this [reference](http://arxiv.org/abs/1705.02771). The MolmerSorensenXX gate can be used to represent global laser-driver entangling operations, for example in the context of quantum computing hardware based on trapped ions. The unitary matrix is given by: + +\\[ + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 0 & 0 & -\mathrm{i} \\\\ + 0 &1 & -\mathrm{i} & 0 \\\\ + 0 & -\mathrm{i} & 1 & 0 \\\\ + -\mathrm{i} & 0 & 0 & 1 + \end{pmatrix} +\\]. + +## PhaseShiftedControlledPhase + +The phase-shifted controlled PhaseShift gate of the form: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & e^{\mathrm{i} \phi} & 0 & 0 \\\\ + 0 & 0 & e^{\mathrm{i} \phi} & 0 \\\\ + 0 & 0 & 0 & e^{\mathrm{i} (2\cdot\phi - \pi)} + \end{pmatrix} +\\], + +with the single-qubit phase \\( \phi \\). + +## PhaseShiftedControlledZ + +The phase-shifted controlled-Z gate, modified, *i.e.* phase-shifted ControlledPauliZ two-qubit gate, which corresponds to the equation (1) in the original [reference](https://arxiv.org/pdf/1908.06101.pdf). The full matrix form is defined as: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & e^{\mathrm{i} \phi} & 0 & 0 \\\\ + 0 & 0 & e^{\mathrm{i} \phi} & 0 \\\\ + 0 & 0 & 0 & e^{\mathrm{i} (2\cdot\phi - \pi)} + \end{pmatrix} +\\], + +with the single-qubit phase \\( \phi \\). + +## PMInteraction + +The transversal interaction gate of the form: + +\\[ + e^{-\mathrm{i} \theta (X_c X_t + Y_c Y_t)} = e^{-\mathrm{i} \theta (\sigma^+_c \sigma^-_t + \sigma^-_c \sigma^+_t)} , +\\], + +where \\(X_c\\) is the Pauli matrix \\(\sigma_x\\) acting on the control qubit, and \\(Y_t\\) is the Pauli matrix \\(\sigma_y\\) acting on the target qubit. The parameter \\( \theta \\) gives the strength of the rotation. + +## Qsim + +The Qsim gate implements a `SWAP` between two spins and a `SpinInteraction` simultaneously. In this context, spins are meant to be localized and therefore have distinguishable degrees of freedom. The definition of the Qsim gate in matrix form is given by: + + +\\[ + U = \begin{pmatrix} + \cos(x-y) \cdot e^{-\mathrm{i} z} & 0 & 0 & -\mathrm{i}\sin(x-y)\cdot e^{-\mathrm{i} z}\\\\ + 0 & -\mathrm{i} \sin(x+y)\cdot e^{\mathrm{i} z} & \cos(x+y)\cdot e^{\mathrm{i} z} & 0 \\\\ + 0 & \cos(x+y)\cdot e^{\mathrm{i} z}& -\mathrm{i} \sin(x+y)\cdot e^{\mathrm{i} z} & 0 \\\\ + -\sin(x-y)\cdot e^{-\mathrm{i} z} & 0 & 0 & \cos(x-y)\cdot e^{-\mathrm{i} z} + \end{pmatrix} +\\], + +where x, y, z are the prefactors of the products of Pauli matrices \\(X_c X_t\\), \\(Y_c Y_t\\), \\(Z_c Z_t\\) acting on the control (`c`) and target (`t`) qubits that are part of the spin interaction. + +## SpinInteraction + +The gate represents the generalized, anisotropic XYZ Heisenberg interaction between spins of the form: + +\\[ + e^{-\mathrm{i} (x \cdot X_c X_t + y \cdot Y_c Y_t + z \cdot Z_c Z_t)} , +\\], + +where x, y, z are the prefactors of the products of Pauli matrices \\(X_c X_t\\), \\(Y_c Y_t\\), \\(Z_c Z_t\\) acting on control (`c`) and target (`t`) qubit, +with the underlying definition \\(XX \equiv \sigma_x \sigma_x\\), \\(YY \equiv \sigma_y \sigma_y\\) and \\(ZZ \equiv \sigma_z \sigma_z\\). + +In this context, spins are meant to be localized and therefore have distinguishable degrees of freedom. + +## SqrtISwap + +The square root of the ISwap gate is represented by the matrix: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & \frac{1}{\sqrt{2}} & \frac{\mathrm{i}}{\sqrt{2}} & 0 \\\\ + 0 & \frac{\mathrm{i}}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\\]. + +## SWAP + +The SWAP gate is used to change the positions between two qubits. For example, the SWAP gate is used by many compilation routines if the given connectivity on the quantum computing device is limited and the qubits need to be remapped in order to run a quantum program successfully on the quantum computing hardware. The full matrix form is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 \\\\ + 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\\]. + +## VariablesMSXX + +The variable-angle MolmerSorensen XX gate as defined by the unitary matrix of the form: + +\\[ + U = \begin{pmatrix} + \cos(\theta/2) & 0 & 0 & -\mathrm{i} \sin(\theta/2) \\\\ + 0 & \cos(\theta/2) & -\mathrm{i} \sin(\theta/2) & 0 \\\\ + 0 & -\mathrm{i} \sin(\theta/2) & \cos(\theta/2) & 0 \\\\ + -\mathrm{i}\sin(\theta/2) & 0 & 0 & \cos(\theta/2) + \end{pmatrix} +\\]. + +In general, the MolmerSorensenXX gate can be used to represent global laser-driver entangling operations, for example in the context of quantum computing hardware based on trapped ions, as introduced in this [reference](http://arxiv.org/abs/1705.02771). + +## XY + +The definition of the XY gate in matrix form is given by: + +\\[ + U = \begin{pmatrix} + 1 & 0 & 0 & 0 \\\\ + 0 & \cos(\theta/2) & \mathrm{i} \sin(\theta/2) & 0 \\\\ + 0 & \mathrm{i} \sin(\theta/2) & \cos(\theta/2) & 0 \\\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\\]. + +It implements the same interaction as described by the `PMInteraction` gate but with a different prefactor. diff --git a/documentation/src/high-level/cheated.md b/documentation/src/high-level/cheated.md new file mode 100644 index 000000000..5b8911901 --- /dev/null +++ b/documentation/src/high-level/cheated.md @@ -0,0 +1,87 @@ +# Cheated Measurement + +A `Cheated` measurement in qoqo/roqoqo reads out the state vector or the density matrix of a quantum computer and obtains expectation values by multiplying the matrix representation of the observable with the state vector or multiplying the operator with the density matrix and taking the trace (respectively). + +`Cheated` measurements are only possible with simulator backends that can return the state vector or the density matrix of the quantum state. The expectation values are defined by a sparse matrix representation of the measured observables. Using `Cheated` measurements, expectation values can be obtained directly without decomposing operators into Pauli products and post-processing the raw output of quantum computers. + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import Cheated, CheatedInput +from qoqo import QuantumProgram +from qoqo_quest import Backend +import numpy as np + +# initialize |psi> = (|0> + |1>)/ sqrt(2) +circuit = Circuit() +circuit += ops.Hadamard(0) + +# Add definition for state-vector readout +circuit += ops.DefinitionComplex("state_vec", 2, is_output=True) + +# The dictionary of the pauli matrix to measure for each qubit in the product in the form {qubit: pauli}. +# Allowed values to be provided for 'pauli' are: 1 = PauliX, 2 = PauliY, 3 = PauliZ. +x_matrix = np.array([[0, 1],[1, 0]]) +z_matrix = np.array([[1, 0],[0, -1]]) +h_matrix = 0.1 * x_matrix + 0.2 * z_matrix +operator = [(0,0, 0.2), (0,1, 0.1), (1,0, 0.1), (1,1, -0.2)] +# Directly get the state vector from the simulator backend +circuit += ops.PragmaGetStateVector(readout="state_vec", circuit=Circuit()) + +# Preparing the measurement input for CheatedPauliZProductInput +measurement_input = CheatedInput(number_qubits=1) +# Add the measured operator +measurement_input.add_operator_exp_val(name="", operator=operator, readout="state_vec") + +measurement = Cheated( + constant_circuit=None, + circuits=[circuit,], + input=measurement_input, +) +backend = Backend(1) + +result = backend.run_measurement(measurement) +print(result) + +``` + +```rust +use num_complex::Complex64; +use roqoqo::measurements::{Cheated, CheatedInput}; +use roqoqo::operations as ops; +use roqoqo::prelude::EvaluatingBackend; +use roqoqo::Circuit; +use roqoqo_quest::Backend; + +// initialize |psi> = (|0> + |1>)/ sqrt(2) +let mut circuit = Circuit::new(); +circuit += ops::Hadamard::new(0); + +// Add definition for state-vector readout +circuit += ops::DefinitionComplex::new("state_vec".to_string(), 2, true); + +// Defining the sparse operator +let operator: Vec<(usize, usize, Complex64)> = vec![ + (0, 0, 0.2.into()), + (0, 1, 0.1.into()), + (1, 0, 0.1.into()), + (1, 1, (-0.2).into()), +]; +// Directly get the state vector from the simulator backend +circuit += ops::PragmaGetStateVector::new("state_vec".to_string(), None); + +// Preparing the measurement input for CheatedPauliZProductInput +let mut measurement_input = CheatedInput::new(1); +// Add the measured operator +measurement_input.add_operator_exp_val("".to_string(), operator, "state_vec".to_string()).unwrap(); + +let measurement = Cheated { + constant_circuit: None, + circuits: vec![circuit], + input: measurement_input, +}; +let backend = Backend::new(1); + +let result = backend.run_measurement(&measurement); +println!("{:?}", result); +``` diff --git a/documentation/src/high-level/classical.md b/documentation/src/high-level/classical.md new file mode 100644 index 000000000..8753a650a --- /dev/null +++ b/documentation/src/high-level/classical.md @@ -0,0 +1,104 @@ +# ClassicalRegister Measurement + +A `ClassicalRegister` measurement returns the unprocessed register readouts of `Circuits`. +A `ClassicalRegister` measurement can be used when end-users want to perform their own post-processing, for instance when working with external tools that expect full measurement records. + +The registers are returned as a tuple of three dictionaries/HashMaps: + +* The collection of bit registers +* The collection of float registers +* The collection of complex registers + +A `ClassicalRegister` measurement does _not_ need a separate `measurement_input` since no post-processing takes place. + +To distinguish between a method returning expectation values and a method returning registers, the method `run_registers()` is used when executing a `ClassicalRegister` measurement. + +An example for running a `ClassicalRegister` measurement: + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import ClassicalRegister +from qoqo import QuantumProgram +from qoqo_quest import Backend + +# initialize |psi> +init_circuit = Circuit() +init_circuit += ops.Hadamard(0) + +# Z-basis measurement circuit with 1000 shots +z_circuit = Circuit() +z_circuit += ops.DefinitionBit("ro_z", 1, is_output=True) +z_circuit += ops.PragmaRepeatedMeasurement("ro_z", 1000, None) + +# X-basis measurement circuit with 1000 shots +x_circuit = Circuit() +x_circuit += ops.DefinitionBit("ro_x", 1, is_output=True) +# Changing to the X basis with a Hadamard gate +x_circuit += ops.Hadamard(0) +x_circuit += ops.PragmaRepeatedMeasurement("ro_x", 1000, None) + +measurement = ClassicalRegister( + constant_circuit=init_circuit, + circuits=[z_circuit, x_circuit], +) + +# A quantum program is created from the measurement +program = QuantumProgram(measurement=measurement, input_parameter_names=[]) + +# Create a backend simulating one qubit. +backend = Backend(1) + +(bit_registers, float_registers, complex_registers) = program.run_registers(backend, []) +``` + +The same example in Rust: + +```Rust +use roqoqo::{Circuit, operations::*, registers::*, QuantumProgram}; +use roqoqo::measurements::ClassicalRegister; +use roqoqo::backends::{EvaluatingBackend, RegisterResult}; +use roqoqo_quest::Backend; +use std::collections::{HashMap, HashSet}; + +// initialize |psi> +let mut init_circuit = Circuit::new(); +init_circuit.add_operation(Hadamard::new(0)); + +// Z-basis measurement circuit with 1000 shots +let mut z_circuit = Circuit::new(); +z_circuit.add_operation(DefinitionBit::new("ro_z".to_string(), 1, true)); +z_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_z".to_string(), 1000, None), +); + +// X-basis measurement circuit with 1000 shots +let mut x_circuit = Circuit::new(); +x_circuit.add_operation(DefinitionBit::new("ro_x".to_string(), 1, true)); +// Changing to the X-basis with a Hadamard gate +x_circuit.add_operation(Hadamard::new(0)); +x_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_x".to_string(), 1000, None), +); + +let measurement = ClassicalRegister { + circuits: vec![z_circuit.clone(), x_circuit.clone()], + constant_circuit: Some(init_circuit.clone()), +}; + +// A quantum program is created from the measurement +let program = QuantumProgram::ClassicalRegister { + measurement, + input_parameter_names: vec![], +}; + +// Create a backend simulating one qubit +let backend = Backend::new(1); + +let result: RegisterResult = program.run_registers(backend.clone(), &[]); +let result_registers: ( + HashMap, + HashMap, + HashMap, +) = result.unwrap(); +``` diff --git a/documentation/src/high-level/intro.md b/documentation/src/high-level/intro.md new file mode 100644 index 000000000..81d4ec51c --- /dev/null +++ b/documentation/src/high-level/intro.md @@ -0,0 +1,37 @@ +# High-level interface: quantum programs + +In the definition of qoqo/roqoqo, a quantum program accepts input from a user/calling function and runs operations on a quantum computer. It then returns an output in the form of expectation values, instead of raw output from the quantum computer. +To represent quantum programs qoqo/roqoqo provides `QuantumProgram`. +It is intended as a high-level interface between a complex program and the quantum computer, which can be called (almost) as easily as a normal function and handles variable replacement and the post-processing of the raw output of the quantum computer/simulator. + +## Measurements + +Post-processing the raw output is handled by `measurements`. +For many applications, the measurement results of several circuits need to be combined to extract the required information. +`Measurement` objects group several quantum circuits and a `measurement input` that determines how the raw output is post-processed. +A qoqo `measurement` combines one optional `constant_circuit` that is always executed first and a list of `circuits` that are each executed after the constant circuit. +The type of `measurement` and `measurement input` depends on the type of readout used in the circuits. + +The following `measurements` are available in qoqo/roqoqo: + +* [PauliZProduct](pauliz.md), +* [ClassicalRegister](classical.md), +* [CheatedPauliZProduct](pauliz_cheated.md), +* [Cheated](cheated.md). + +The `PauliZProduct` measurement is based on measuring the product of PauliZ operators for given qubits. Combined with a basis rotation of the measured qubits, it can be used to measure arbitrary expectation values. It uses projective qubit readouts like `MeasureQubit` or `PragmaRepeatedMeasurement`. It can be run on real quantum computer hardware and simulators. For further details please refer to section [PauliZProduct](pauliz.md). + +The `ClassicalRegister` measurement returns the raw output of the classical registers written during circuit execution. + +The `CheatedPauliZProduct` measurement directly calculates operator expectation values from the expectation values of products of Pauli matrices. The Pauli product expectation values are read out by the `PragmaGetPauliProduct` operation. It can only be used on simulator backends. + +The `Cheated` measurement calculates expectation values by directly extracting the state vector `PragmaGetStateVector` or the density matrix `PragmaGetDensityMatrix` from a simulator and applying matrix multiplication. + +For examples how to construct measurement input and measurements see the pages for the separate measurement types. + +## Variable replacement + +qoqo/roqoqo supports symbolic parameters in Operations, for example the rotation angles \\( \theta \\) in a `RotateX` gate operation. A `Circuit` with symbolic parameters cannot be executed on real hardware or simulated. The symbolic parameters need to be replaced with real floating point numbers first. A QuantumProgram contains a list of the free parameters (`input_parameter_names`). +When calling its `run` method, it replaces the free parameters with the given input, executes the measurement on the given backend and returns the result. + +For an example how to `run` a `QuantumProgram` [see here](program.md). diff --git a/documentation/src/high-level/pauliz.md b/documentation/src/high-level/pauliz.md new file mode 100644 index 000000000..3523f0300 --- /dev/null +++ b/documentation/src/high-level/pauliz.md @@ -0,0 +1,127 @@ +# PauliZProduct Measurement + +The `PauliZProduct` measurement is based on measuring the product of PauliZ operators for given qubits. Combined with a basis rotation of the measured qubits, it can be used to measure arbitrary expectation values. It uses projective qubit readouts like `MeasureQubit` or `PragmaRepeatedMeasurement`. It can be run on real quantum computer hardware and simulators. + +As an example, let us consider the measurement of the following Hamiltonian +\\[ + \hat{H} = 0.1\cdot X + 0.2\cdot Z +\\] where `X` and `Z` are Pauli operators. The target is to measure \\(\hat{H} \\) with respect to a state +\\[ + |\psi> = (|0> + |1>)/\sqrt{2}. +\\]. + +The `constant_circuit` will be used to prepare the state \\( |\psi> \\) by applying the Hadamard gate. The given Hamiltonian includes `X` and `Z` terms that cannot be measured at the same time, since they are measured using different bases. The `circuits` list includes one quantum circuit that does not apply any additional gate and one circuit that rotates the qubit basis into the X-basis so that the expectation value `` is equivalent to the measurement of `` in the new basis. In this example, each measured Pauli product contains only one Pauli operator. For the post-processing of the measured results, the `PauliZProduct` measurement needs two more inputs provided by the object `PauliZProductInput`: + +* The definition of the measured Pauli products after basis transformations (`add_pauliz_product()`), +* The weights of the Pauli product expectation values in the final expectation values (`add_linear_exp_val()`). + +In general, one can measure the expectation values of the products of local Z operators, *e.g.* ``, ``, ``, ``, *etc.* The `PauliZProductInput` needs to define all of the products that are measured. In the given example, we will measure two products `` after a rotation in the X basis (corresponding to ``) and `` _without_ a rotation before the measurement. +The `PauliZProductInput` also defines the weights of the products in the final result. In the example below, 0.1 is the coefficient for the first product and 0.2 for the second. + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import PauliZProduct, PauliZProductInput + +# initialize |psi> +init_circuit = Circuit() +init_circuit += ops.Hadamard(0) + +# Z-basis measurement circuit with 1000 shots +z_circuit = Circuit() +z_circuit += ops.DefinitionBit("ro_z", 1, is_output=True) +z_circuit += ops.PragmaRepeatedMeasurement("ro_z", 1000, None) + +# X-basis measurement circuit with 1000 shots +x_circuit = Circuit() +x_circuit += ops.DefinitionBit("ro_x", 1, is_output=True) +# Changing to the X basis with a Hadamard gate +x_circuit += ops.Hadamard(0) +x_circuit += ops.PragmaRepeatedMeasurement("ro_x", 1000, None) + +# Preparing the measurement input for one qubit +# The PauliZProductInput starts with just the number of qubits +# and if to use a flipped measurements set. +measurement_input = PauliZProductInput(1, False) +# Next, pauli products are added to the PauliZProductInput +# Read out product of Z on site 0 for register ro_z (no basis change) +z_basis_index = measurement_input.add_pauliz_product("ro_z", [0,]) +# Read out product of Z on site 0 for register ro_x +# (after basis change effectively a measurement) +x_basis_index = measurement_input.add_pauliz_product("ro_x", [0,]) + +# Last, instructions how to combine the single expectation values +# into the total result are provided. +# Add a result (the expectation value of H) that is a combination of +# the PauliProduct expectation values. +measurement_input.add_linear_exp_val( + "", {x_basis_index: 0.1, z_basis_index: 0.2}, +) + +measurement = PauliZProduct( + constant_circuit=init_circuit, + circuits=[z_circuit, x_circuit], + input=measurement_input, +) +``` + +The same example in Rust: + +```rust +use roqoqo::{Circuit, operations::*}; +use roqoqo::measurements::{PauliZProduct, PauliZProductInput}; +use std::collections::HashMap; + +// initialize |psi> +let mut init_circuit = Circuit::new(); +init_circuit.add_operation(Hadamard::new(0)); + +// Z-basis measurement circuit with 1000 shots +let mut z_circuit = Circuit::new(); +z_circuit.add_operation(DefinitionBit::new("ro_z".to_string(), 1, true)); +z_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_z".to_string(), 1000, None), +); + +// X-basis measurement circuit with 1000 shots +let mut x_circuit = Circuit::new(); +x_circuit.add_operation(DefinitionBit::new("ro_x".to_string(), 1, true)); +// Changing to the X-basis with a Hadamard gate +x_circuit.add_operation(Hadamard::new(0)); +x_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_x".to_string(), 1000, None), +); + +// Preparing the measurement input for one qubit +// The PauliZProductInput starts with just the number of qubits +// and if to use a flipped measurements set. +let mut measurement_input = PauliZProductInput::new(1, false); +// Next, pauli products are added to the PauliZProductInput +// Read out product of Z on site 0 for register ro_z (no basis change) +measurement_input + .add_pauliz_product("ro_z".to_string(), vec![0]) + .unwrap(); +// Read out product of Z on site 0 for register ro_x +// (after basis change effectively a measurement) +measurement_input + .add_pauliz_product("ro_x".to_string(), vec![0]) + .unwrap(); + +// Last, instructions how to combine the single expectation values +// into the total result are provided. +// Add a result (the expectation value of H) that is a combination +// of the PauliProduct expectation values. +measurement_input + .add_linear_exp_val( + "".to_string(), HashMap::from([(0, 0.1), (1, 0.2)]), + ) + .unwrap(); + +let measurement = PauliZProduct { + input: measurement_input, + circuits: vec![z_circuit.clone(), x_circuit.clone()], + constant_circuit: Some(init_circuit.clone()), + +println!("{:?}", measurement); +}; +``` diff --git a/documentation/src/high-level/pauliz_cheated.md b/documentation/src/high-level/pauliz_cheated.md new file mode 100644 index 000000000..eec0bbd71 --- /dev/null +++ b/documentation/src/high-level/pauliz_cheated.md @@ -0,0 +1,131 @@ +# CheatedPauliZProduct Measurement + +The `CheatedPauliZProduct` measurement in qoqo/roqoqo calculates expectation values based on the expectation values of products of Pauli operators. It uses the `PragmaGetPauliProduct` readout and can only be used on a simulator backend. + +The measurement input `CheatedPauliZProductInput` registers Pauli products and combines the expectation values of Pauli products into results just like the measurement input of a [PauliZProduct](pauliz.md) measurement. In contrast to the `PauliZProductInput`, however, the involved qubits of the Pauli product are defined in the `PragmaGetPauliProduct` and no basis rotation is necessary. + +The expectation values of Pauli products are directly derived from the state of a simulator in the backend and are exact on the level of the numerical accuracy of the simulator. The `CheatedPauliZProduct` operation can be used to benchmark an algorithm, assuming that the statistical error due to a finite amount of projective measurements vanishes. + +The `CheatedPauliZProduct` only requires running one `Circuit` compared to several for more complex `PauliZProduct` measurements and can be faster. + +## Example + +The following code measures the same observable as the [PauliZProduct](pauliz.md) example with the `CheatedPauliZProduct` measurement. + +Example in python: + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import CheatedPauliZProduct, CheatedPauliZProductInput +from qoqo_quest import Backend + +# initialize |psi> = (|0> + |1>)/ sqrt(2) +circuit = Circuit() +circuit += ops.Hadamard(0) + +# Add definition for z-Basis readout +circuit += ops.DefinitionFloat("ro_z", 1, is_output=True) + +# Add definition for x-Basis readout +circuit += ops.DefinitionFloat("ro_x", 1, is_output=True) + +# The dictionary of the pauli matrix to measure for each qubit in the product in the form {qubit: pauli}. +# Allowed values to be provided for 'pauli' are: 1 = PauliX, 2 = PauliY, 3 = PauliZ. +pauliz_products = {0: 3} +paulix_products = {0: 1} +# PragmaGetPauliProduct works only on simulators and can be used several +# times since no projective measurements are applied +circuit += ops.PragmaGetPauliProduct(qubit_paulis=pauliz_products, readout="ro_z", circuit=Circuit()) +circuit += ops.PragmaGetPauliProduct(qubit_paulis=paulix_products, readout="ro_x", circuit=Circuit()) + +# Preparing the measurement input for CheatedPauliZProductInput +measurement_input = CheatedPauliZProductInput() +# Next, pauli products are added to the CheatedPauliZProductInput +z_basis_index = measurement_input.add_pauliz_product("ro_z") +x_basis_index = measurement_input.add_pauliz_product("ro_x") + +# Add a result (the expectation value of H) that is a combination of +# the PauliProduct expectation values. +measurement_input.add_linear_exp_val( + "", {z_basis_index: 0.1, x_basis_index: 0.2}, +) + +measurement = CheatedPauliZProduct( + constant_circuit=None, + circuits=[circuit,], + input=measurement_input, +) +backend = Backend(1) + +result = backend.run_measurement(measurement) +print(result) + +``` + +The same example in Rust: + +```rust + +use roqoqo::backends::{EvaluatingBackend, RegisterResult}; +use roqoqo::measurements::{CheatedPauliZProduct, CheatedPauliZProductInput}; +use roqoqo::{operations::*, Circuit, QuantumProgram}; +use std::collections::HashMap; +use roqoqo_quest::Backend; + +// initialize |psi> +let mut circuit = Circuit::new(); +circuit.add_operation(Hadamard::new(0)); + +// Add definition for z-Basis readout +circuit.add_operation(DefinitionFloat::new("ro_z".to_string(), 1, true)); +// Add definition for z-Basis readout +circuit.add_operation(DefinitionFloat::new("ro_x".to_string(), 1, true)); +// PragmaGetPauliProduct works only on simulators and can be used several +// times since no projective measurements are applied +circuit.add_operation(PragmaGetPauliProduct::new( + HashMap::from([(0, 3)]), + "ro_z".to_string(), + Circuit::new()), +); +circuit.add_operation(PragmaGetPauliProduct::new( + HashMap::from([(0, 1)]), + "ro_x".to_string(), + Circuit::new())); + +// Preparing the measurement input for CheatedPauliZProductInput + +let mut measurement_input = CheatedPauliZProductInput::new(); +// Next, pauli products are added to the PauliZProductInput +// Read out product of Z on site 0 for register ro_z (no basis change) +let index_z = measurement_input.add_pauliz_product("ro_z".to_string()); +// Read out product of X on site 0 for register ro_x +let index_x = measurement_input.add_pauliz_product("ro_x".to_string()); + +// Last, instructions how to combine the single expectation values +// into the total result are provided. +// Add a result (the expectation value of H) that is a combination +// of the PauliProduct expectation values. +measurement_input + .add_linear_exp_val("".to_string(), HashMap::from([(index_z, 0.1), (index_x, 0.2)])) + .unwrap(); + +let measurement = CheatedPauliZProduct { + input: measurement_input, + circuits: vec![circuit.clone()], + constant_circuit: None, +}; + +// Now, the PauliZProduct measurement is prepared to be used +// in a QuantumProgram just like: +let program = QuantumProgram::CheatedPauliZProduct { + measurement, + input_parameter_names: vec![], +}; + +let backend = Backend::new(3); + +let res = program.run(backend, &[]); +println!("{:?}", res); + +``` diff --git a/documentation/src/high-level/program.md b/documentation/src/high-level/program.md new file mode 100644 index 000000000..b78004e66 --- /dev/null +++ b/documentation/src/high-level/program.md @@ -0,0 +1,147 @@ +# QuantumProgram and Variable-Replacement + +A `QuantumProgram` allows the user to call it with a list of free `float` parameters. +It contains a `measurement` with quantum circuits that contain symbolic parameters. Circuits with symbolic parameters cannot be simulated or executed on real hardware. The symbolic parameters need to be replaced with real floating point numbers first. A `QuantumProgram` contains a list of the free parameters (`input_parameter_names`) and can automatically replace the parameters when it is executed. It replaces the parameters by its `run` methods and returns the result. + +As an example we will use the measurement from [PauliZProduct](pauliz.md) with a state`|psi>` parameterized by an angle between `|0>` and `|1>`. + +In python: + +```python +from qoqo import Circuit +from qoqo import operations as ops +from qoqo.measurements import PauliZProduct, PauliZProductInput +from qoqo import QuantumProgram +from qoqo_quest import Backend + +# initialize |psi> +init_circuit = Circuit() +# Apply a RotateY gate with a symbolic angle +# To execute the circuit this symbolic parameter must be replaced +# by a real number with the help of a QuantumProgram +init_circuit += ops.RotateX(0, "angle") + +# Z-basis measurement circuit with 1000 shots +z_circuit = Circuit() +z_circuit += ops.DefinitionBit("ro_z", 1, is_output=True) +z_circuit += ops.PragmaRepeatedMeasurement("ro_z", 1000, None) + +# X-basis measurement circuit with 1000 shots +x_circuit = Circuit() +x_circuit += ops.DefinitionBit("ro_x", 1, is_output=True) +# Changing to the X basis with a Hadamard gate +x_circuit += ops.Hadamard(0) +x_circuit += ops.PragmaRepeatedMeasurement("ro_x", 1000, None) + +# Preparing the measurement input for one qubit +measurement_input = PauliZProductInput(1, False) +# Read out product of Z on site 0 for register ro_z (no basis change) +z_basis_index = measurement_input.add_pauliz_product("ro_z", [0,]) +# Read out product of Z on site 0 for register ro_x +# (after basis change effectively a measurement) +x_basis_index = measurement_input.add_pauliz_product("ro_x", [0,]) + +# Add a result (the expectation value of H) that is a combination of +# the PauliProduct expectation values. +measurement_input.add_linear_exp_val( + "", {x_basis_index: 0.1, z_basis_index: 0.2}, +) + +measurement = PauliZProduct( + constant_circuit=init_circuit, + circuits=[z_circuit, x_circuit], + input=measurement_input, +) + +# A quantum program is created from the measurement +# and "angle" is registered as a free input parameter. +# The QuantumProgram now has one free parameter +# that needs to set when executing it. +# The symbolic value angle in the circuits will be replaced +# by that free parameter during execution. +program = QuantumProgram( + measurement=measurement, + input_parameter_names=["angle"], +) + +# To execute a QuantumProgram a backend needs to be defined. +# Create a backend simulating one qubit. +backend = Backend(1) + +# Run QuantumProgram on the backend by setting the parameter value. +expectation_values = program.run(backend, [0.785]) +``` + +In Rust: + +```rust +use roqoqo::{Circuit, operations::*, QuantumProgram}; +use roqoqo::measurements::{PauliZProduct, PauliZProductInput}; +use roqoqo::backends::{EvaluatingBackend, RegisterResult}; +use roqoqo_quest::Backend; +use std::collections::HashMap; + +// initialize |psi> +let mut init_circuit = Circuit::new(); +init_circuit.add_operation(RotateX::new(0, "angle".into())); + +// Z-basis measurement circuit with 1000 shots +let mut z_circuit = Circuit::new(); +z_circuit.add_operation(DefinitionBit::new("ro_z".to_string(), 1, true)); +z_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_z".to_string(), 1000, None), +); + +// X-basis measurement circuit with 1000 shots +let mut x_circuit = Circuit::new(); +x_circuit.add_operation(DefinitionBit::new("ro_x".to_string(), 1, true)); +// Changing to the X-basis with a Hadamard gate +x_circuit.add_operation(Hadamard::new(0)); +x_circuit.add_operation( + PragmaRepeatedMeasurement::new("ro_x".to_string(), 1000, None), +); + +// Preparing the measurement input for one qubit +let mut measurement_input = PauliZProductInput::new(1, false); +// Read out product of Z on site 0 for register ro_z (no basis change) +measurement_input + .add_pauliz_product("ro_z".to_string(), vec![0]) + .unwrap(); +// Read out product of Z on site 0 for register ro_x +// (after basis change effectively a measurement) +measurement_input + .add_pauliz_product("ro_x".to_string(), vec![0]) + .unwrap(); + +// Add a result (the expectation value of H) that is a combination +// of the PauliProduct expectation values. +measurement_input + .add_linear_exp_val( + "".to_string(), HashMap::from([(0, 0.1), (1, 0.2)]), + ) + .unwrap(); + +let measurement = PauliZProduct { + input: measurement_input, + circuits: vec![z_circuit.clone(), x_circuit.clone()], + constant_circuit: Some(init_circuit.clone()), +}; + +// A quantum program is created from the measurement +// and "angle" is registered as a free input parameter. +// The QuantumProgram now has one free parameter +// that needs to set when executing it. +// The symbolic value angle in the circuits will be replaced +// by that free parameter during execution. +let program = QuantumProgram::PauliZProduct { + measurement, + input_parameter_names: vec!["angle".to_string()], +}; + +// To execute a QuantumProgram a backend needs to be defined. +// Create a backend simulating one qubit. +let backend = Backend::new(1); + +// Run QuantumProgram on the backend by setting the parameter value. +let expectation_values = program.run(backend, &[0.785]).unwrap(); +``` diff --git a/documentation/src/images/qoqo_compilation_schematics.png b/documentation/src/images/qoqo_compilation_schematics.png new file mode 100644 index 0000000000000000000000000000000000000000..d368514c2043c630d630d2cbef82ea869662507f GIT binary patch literal 78295 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 z zDBI}lytQJ=J!yNt%nI^utkg29hJx5j%&If>EQY7Ttr>G`f$JA+h-1g7UJZni0u}X! z;~0^hH~)5Ze8ap&F2E&_#Ek*^zA?`;RYI4rU110m6nam7F#o2H=80{GZ0~cetPzN6 zRuN;QQ*}19E7P(WaWBWLf8Xh*2GXDGCDe9NU)s{h%wttNN@>Y4>(i&AhYy#kHFlh? zP^~@tS{S$w*&HueHpp|(6GoQ4f>a(g|O8GiGvlZJ3 zB~j00J&wX}*FM0R2_jx)D~UKs>*5c)-0@`lvb8|MzrJ}YIXL)UO9ii-e4P68*9AgUdjQ`+* zw>VBo!!}v@)uws#;Ic&Ls<_uuEnxCn0FQ2RvUIv$B zPryu{3@Q`&)-e26pHDU|J=(k-wlBXjEddp%UJZllD&S+VfeO845}w85K2-^uF1 z>afH< zFvIuy3Waqw*w2}l4!+F?mQ~!5Kf60rUz$v|Rn_Y}fPDn&BIIK;`DVOTDaP{S8sqGW zpqp`Ka_<|qhQi&d?>uXaq!jeGd7A_%-wK-f6gu|xPMuV2@y}Y;?t%yr+xqw_NJ3$Y zJTXoSp|{vyAzp633U>G-*m{alHz^AV*t2-@)74#nSb4bpX_Rv2o6z@OC>@F10!VnRFf zdKfg()#Q=ak=2vy1C}uq7UR1*#AYJG0dfLiEIMxWfTdb=rXRYC=Z@crSdu+r(N5vl zre0Z6a6Q3S);8%aqb|+bnF?#+_ZB%O4Z9w917L?#za)JMjBn_{_8eW+;MV!vzz3Ag zVw!^YhgSAaEh6C0=?$nO$d ziVyY|oM>cwU`{p2SgES%?Xu@ym$fy|F8r#i%D^?~L&duFOeYrY!@H2GR3zC4Cbj%3 zE+7}(l>Ax{8(rE@TFA;I;b!2?xo8QQOi@9!CydKQL)O$&5cxP)y6aFt5^xbL(TpnK z?>wvdkv@az(p=VW*%HOPcNcJ`?a$27lPV4UVf7+tiOi)WUG$5z9MX7({Ss5Mmvlmm)ZLOqy_nCrSTcw%Qp z1VfeCZucxwRSU2E;nmbfS!-B}eCCfNVJIdNdZt|u(dG0a(7m5oW|evTF?_YHa19O`cE{%S)Do2TwFLtUOp zKndz9j+IQJ^{#HGkICg?UOEy71 zQq@Xp_Q}O`L=sANevN0{laR)dr_pbxd_7P~u30rvPSwH?$m)?42IDFQ2FNdz_3o?A z+-bqBu&u+VCYZ+HA9JBw)Mq$z*Dk;62z^D9;1`@ibHktL5q~iX!3wE^Z~IJbJ^P%H zQ|%nPUSDy<-Y~c1VJW2M468`3ILt0dkNAsiu5Z~y<@Y#xnok&+gRybYz^r~mqtNDeNIP?QqQr%QD*+4g%^G8ZNV5xgZq7Isft6#7XWU^mIGEa65yuNoXD zhJ>@}S_qd*6F}YistZPEpX#M%u=9|o@CY%zva>NI_jdxSb;lC8Mu2`7*~>KH(NU=C zcO?s2P{U4+uJk5~wdz}J?o7@-TbMP%@d0J>xjeUAbA*?v0}MM52S5f(_sC17ZudSX z-&MtS7O0&u{Kraa#$t6@Dz&NH$AB%0fV#Y<78zNcr!KrhI>~kirD_@43$bCGJS$}Q?Z;B_?O)5JVZ=;Si4L895QEDm{XG{87W(* z$Z?QXq84R^B|4MlMAA%tg6?k88v~>FVMz)P1nY?qP2XG)aBqwUy7dz>BlA+Pu=$4Z=VGWwh8QP@FrzyS!&ev9qF9zHNePKCGyeR!H$v4-78_k8p*$sdAXVF%&nrcf(@zYpobHu} zI>zJ*boda|35iCyLmm#xz^VEckfySoVkS$vlfL%u?R3`JBc?Xfaf;DM2D z46ZVPp>dAxGJfhUo0hhMG!RAU^si20L*$yynQFx5(S7!K=`T0?=%FN%5;Q(Qc*3ly z(6VWtc|9b%CT*~)og0W(A=0>n{|&*r4f{BEa7Mc%8uN>IqjAP6jaIEU<$e<-?OJtz zV8mlwA=R#WCoybo2o6nx68o0+6?bD!ie7C-WU4k*zUNN2P~r3xH#HC`6snv|z_NvR zjK5lL62u4LQ#LeOlw~~>w2p{13z{4-FWe+eXtdsyW+N-R2Kam_T=K%3^;q8O=P@k_njIh$CF4}&+E9w!{;h~L+beM4P91Etl@WgLQZ9?X`?Par>Wm>I zm-SaTiZ}&OD|=q{d+C-QUoSLp)Oi408*qqpeAvIP24k)7Scnp34E);sPARTuaLA0& zVA$l9_LWDQ7A!T;a+9``&)>CY3VT(a2{nc8@YBattSwU^*3EFCdnQf75@w&k^r>8O z2SK5U_ZZSlFgel;#~4Ow-HPb-H(;TowXW}Z*LANKeFL%yp(ik0Azfij^l`k!!;Wv0 zsuvj9Te2pJ)bS0j)oaxy*F-y{4{7Z-mu=v^hs_VbS14RaV$QW*u&lW67|W7AE$C}D z4<9_A(44klf&e0$jQ>t5X=eOpaiXdA7_h88D^xlD`JW7zWT9!fxqE&wm$Pb8EHnmZ zc*NG*`{3+39yd^N#(^Yd&=?;mo_A?#{#GJlenwAyPkyQVv7lgga%jh-`bTS~U1`=# zSQyeu&D?mGT$poK)+x)}e@S6-#20d;DfOHa*a!SfpTq(^E`$}FyzEF5`NQ&J28Tl)AXu4OX|zyb?x-uoJ`=o^-YnDjRk& ziX|t^n=Gq)xl#qZ&oN%srQd6lM`vPSQJ_6Fx|zST;R5GhdM7X(1JNNGpUC$;i?d%i zj4ur_A1eaEXGm0G(N@wO!b`AEb7Wwe+1BaIq;=rg7Y>#yUufNW>GhT^Y#pNW8v9qe zs#MRswdOjEtG*JCjMSl8$(CI{2*l|;Tdcj=fkXdZ9ChZ*q}aJdAP zuo55lkjs^gWjWSzm^QD6MLC!aI;Ile-_Mv!IJ>82>Lazv{sy$Jy)%oC zO6ojac+4z3m)Aq;nkk%C;T*LE@~DN?X6FypX78ksv%q*>zY$O_-I>#w{J6p(fZ0*d zR36U&@A%PWs|{a6JTTwEyak$3;IaSa1V?D^<_pB4ipv>Bo1ACpbrEI{Rw)dhoGGo@ z*hVuVPm?GXA79Rv=$ya3z_^SQxSWq|>6ySwv!Za25v?MGiei-UlEIjuT(n&ngiWy0 zahd^21N*%w7a3H~rNrv+JK}lbX;I!KA(IT*Pytg(8e%M`2hnfV)+=Th%1Y8ZYbnpI zVDU{nBQU89)o9C>Ctbl4Go%NxJ1%xj zVoN#Is7Oz>NY2){wt(${^PA!8j_f7H2+Zp%ONwimY7;;5 zI|35W8(u`O+e3BpJD+NRIz?iBT(LqsBfBVHcF=*qC&RM?teMr7`B=4)5H4TW1p6zV z3dl+;9@rW5iF}rlC9iWcKO%r7DfCuwNr2luxQJmdmDZk4Nt?)GEYF9!aqWh|2O&(S*Vc3Jd_08~c zXc0RNx6G5q?9!UuDLl;|UE1(jA|c$ec}eO2@Op~zcuFDDdMZeKAw3rr#dqeeSNOJ6 ze{H#0OtXX-k$}@c-S90sn1{|!yc%aYrE^Fk(%c@Y5WOX8T!(P7F+6{aC{ntS;~pv0 zNd&UiH#likeKTHJC&Ub|fVBUlUzk**a&B!6XQ{QD&@Yn&V_Q4rm1#z~ zU=0=(K}zDvt-%W)|5X+1AfAW`imrbKlXV8zy_TXEKfE4@!cQa@Hm zmxxQ19>25UH0Kom7}NvqUb(sgzSo2rZib-1TK33{@zUT9LLQrxaurLV!nPIB9KB>` z7u_ZAL7OjYVQtij3plQXx62!>*EPz`Awtr{4&$^R?(op!;`$pAwO)<;cn#~*wI3wI z700HN@Xzm_WVBlS9vlR=!^{?w93#TM-lP z;B@88kPIcWPdu+pmdLaw?$l_9?PS*&$_a1JNg=%9Z8x{mXoF!fY3eK;li2Q_s;^o5 z)zk`d4Z9IrRu$kok9DRah-5yBcQoZY7@e>*^%G{tv*MkdexI&(Y@%dzS$`pvfn^cv zGwFf%bZ_wk!0?d2TG0?SG&#xUCKgsGH96}QORclLrhBCbP+nk$=TzZN{Kc@CITNX( zy2Y+7m#K;w(8+OLgU3g4U6T`JO8MUya$8osWwTFNj&aLsz!;#9`lmkj5uALkE%y`V zQy-i3Nz8B!vPj|R+kaChe7ov;Z~@>D+xK7`9AVTwb>6}@{k-b2aQ3ECCcUd`M*@wA z4)3O1-h|aIyvQAsG6-Axy~Z((Dpp)0Z5Qe|Zp$`m#COM#`3^s*%TjLVkgjKhGCT~L zG@TVRi9DH6KpA$ezDN^wiRwH;X5oCx*n?#LR;wnQ=8|?Z0}ek}NkSe4kM0$SF1Q5lEc#*zj;e(zN3-$Fh0`KzGUmF(RNjZ+*)x$zIpYBgzV=tNo!~tN7gTt`cH&hBdOgPmW}Pg?SKCA z8)-6&M)vFJiA4YTZ(o3HI%T)ISPJ)_@6oKIL8wwY?jPRWzk?Ds&@ZK+zNr7U%;!D- zzfS*N#s6JinjaYc;vCo=;;H7k|-@dakQUaq&GrA_IS5$Kkl19@Vn>=U zKNZu+;$ZPh@MKEGk)PJ?hLQJ`IBXg%S7N>3kmqD)#TUL1I}_Z{7!0O%g_LIa_*M}|~7nv0Crk?xcTu0n+65wKrgzlQa`PF}o zjHU_;!(dOPPfom~&tH z3eWT1fK~MWcJ-q&NQY6^N4ixq%+_6=px_L$?Nk=DYIylqf7fdLl!kf=9Ww?BJVfb< z1OS}Kz38>)Rv007%l&bcjC3*KKMD_h*|BjRCUVG_c5r2T&b@$FX%pI9_de2pf#LFf zP*o8{HknrA_tP2#QV9GoxA*qr+@B7OtS03>*1nDa#G#g5388fMKu`z5sY<=QBYl(PYv(d6b&W* z74L4bm%B_xE6!((K+*KIhFcG{Pe zM=K!gx&R<}UAA^8-`BX!2PMT9UU~GtM0QJbYmU3Y<&Bl^Y4ZGVv)I0VL+;M&<)HJd zyvrOZ64DCXC7A@20u9|{Ot;{sAc6}Ix6qto1TLf*Eq0wTv{W3+x-{%k_kHWk`60a+ zigT?{+|%^K&3Uf%xxY#rg)nFD19sb}Lf-~Mw&)f|*S?+52}q!+(&vXg=Rbn=7slJ` zpW__Dmb2{l?q~a+X$ieF(a4b0eVHf3g7NmIW>v1_&=BOKPV9S`d1FBVAk9OZrXv(f zz-pz6+u>A=+v^a^#4LFKb?>ZW4Cb>q)r-uOUz`mmUS4;4?s|00<%GOxUE~a9pG&P0 zQ1>xoOktD8pXxK9PGzxt4(D}>PsF3f9lpP0ri_eD&q&wAF{&1iF+b9zqy{DeSLK3Wzm~$_m-X**+jR4m0Xb2mF$pfL2aG+H_OnuKaKCO~1tlYwa z3XTZR(;rC#_XIN@|Kdqx%@muIA*z(3mvgnlqY+7Xeh$z(9Tid&1QjfrGGAH;)z&^`LnC4{UBJ( z^zC1PZ+pq37t)K+Kl!HBICdWQyZ-=uz}k1@RtRl9(EV4cV7tPT~9=4OWX9p!j3`U>HTE?@Bmik%Bs} zY%#f&X#}=%6yE>QB~fsJxQ0gTF|y$_7nx3`@Ak>b$qBPUTc1JB2cE@a$KdGob`+YetVJZQRXJP9mfaIgE@>3!^ z8&Fkl+v*leo@dB#yU^%Q_^=Orcgyt!%kPWuYkc--=`$;#0u zQkKJR?!ADVq-0>8UJXB@L+;Wa+oA+O@;L(xpqKDejFvFUC}Jk1*0v}n)l%%6zhmUq z2k3oq?at=m=23D<=|4TEU!qusU$I_dPB961wMBJ)y`C$ux3kHw0-c4=jO zJ;oV1)HY_@U=86B5YQlH(>C&6>;%&t92~sp&JZrWv$M0a`BvHMu7!TrRA1lSg1X)K zP;wqAQdZ5BguLxTWP!Y)VOm+OD@q@!vqky9ZQ~hsi!T`oNgG3~?(FcFyT4Dl@j1W% ziK$->(8GZOA``&E>Ado6q}W)#kf>YqC{NdUP_1dlNXyLDHulSxN7+zl%;hTtuWup~ z9bpmG)u53o$E?~P&9^tdbNDOv?}dh*g?=IP603`jTgPMhH%m|{IHWt zvBtj=im_Hq`P3}eydmc?Y3&l2vMPIZo7*UOb+||($$gRB9gz_`?>TjpbVtPFna_3_ zb)ehuQeUmWxLp8nu3Hb5k~st>oT5Uh#q@VqN9a&>dr7q$U+~m>lypW#jl~$n7mo^C%4C}=O|YnR znsA1{#qKZN8SnNz-3qsYIhqSRwWWcHrW6;eoNfe(1-nQLPEVZdP1&Mme?NJECME*T z9xc5U@aY*zPmF#1dNq>03RurH^|_Mdle}otx#st@?rVx|aNrSmP)D1c-qRe+3ADjPoU7KYr`c(zqOMd|VQajwQ>Ox6Tul|FMjY0kYsAyAb~prizNVsmz*UPEJm7F;dWRa$wBS z*w`4Wrg(+^`v1?*04D0P*$)N7masCVES~(xUuyYp%?+&W2B5o_vcB*G8UmoI)1*I? zhmF>Gx>AQN68)}W{T0wYOI%kl=&oO*AI@-7r9=<`e(O#p&V}=fptoBc<~nF1^r7Ks zICcQ3g;diJq2Gvq{TeNA;!~KTqoaA39UUEyTrk2e@CP)Z;;yb0x}Ixg4o7PhL2VI- z2^BUI_YF=~G#31?P|2LMKe-H)r639o@%ze-9;*O`=iYi*F??ufcad}R0ze{CO9A9B z$zz4t{q$fdZIJ=M-}Dv0O)_6E_7Nx?0N7bjDD3`PrTv`B=Yg9SfFxSd04f)7S)}vB z9{~xxq{GF=A!-dWO@iKOvKI!6Uc6Rxsa>!qz~rLOOG;IhR+8H+E;6*lw3|T4(cC<{ z%o+~WqdmH7y}Y^_S~@lgpPZ!PBP9QA{rxquY-)c z5X?{Pw%NvHn6qv8L4*+>AD`QP_Hor}amS-DFu!$tnKfD}kB<3|XUQ50`I8^G_t{pI z?E6yaXced|2~~mD3Nvf z$)qRhEp`ttn{MS3eXk#q%VWk4VM7y1hx`6+wN5*J$x-p}1hbYb%bF19tj zp$dZV!&u*g*iGfLZDkcTH3nivg>Xt?my4J!Bf>%Aj74QD5)4rD=tjrZyUkPqcQ zLD1qfJeb=;CE3}s+kyF+;xse~{MM0x(vzO_-qREEIj-DUtu|`Aaj=~wW?e_*(hkUo zl)l>xR_~AC4^$%e)1=-W!j0&3EO#$7ipazkxD=AKtdDeKA1| z`38kTm7G+BPi{+!q2aL_Bm5G$^yO(0;GLoQij}DVzQK9cKz97#Xtji#9bk8Tj@Dv= zz_f$LMZjw4J6^iPR+2QT5RNlCGji+0>~k`E5!6&jmC8qUsT zC}suaw|?%jmTR6{T>_Ug1%i;HuqE%UK7r>RCYtVD9aDbfE(}(ak&%&&0feH@ImeZFGtbW#Uj_`viA1&FZvy|ZiHS-!c#>hM?S(G zqTwd6FW+*hOj_?COBqv0<9N+gG|71Cou_Y4?MpRY3z}nnQ2e4eN0=M?iK{UMEvCX>eBQ#Moek`0i6+YR3&YDwKFtI`o^CgiKz zt)z?vBa*E1gC#7Z~<+%m*qZVx@)=tNSh)Rs^|Zazezu|*&me2vX+cf?d@iCa(O^61>RgqP;zS#{zH z>CK17I|gUYDJ3QSo)nf7n3)(WDegNXlN>^5nbD4UJScJ2Wj^th;i!7lVI#j{@@j0C z1?01fhw@8B#$i%ULo=O4Mw&ajQy-I*J+FXg0`qDa@7+N%^f4N^90uLaru|*{{e^*G zOEGja?^Cx1T>^($uEv%|kHZ^Icc!7;-s_H=AqK~fR_6kQMYZ?$e9v4hy@V)LVVL!` zH32P%VY|^;Ssj%F25Sc6H!9bO!=s>3_NuefqmyFEiQNg554?Sg@N9!{^DFgf4@DFV zMPnV2!Pdlkvfm;`AiNG<2lltl$j_P5)ZPOtRJVWp z)vdHP`uX8Q9(Ks`PAWtHredd?Ti@iQjiTFPmu;+fO4kjw4>jx69r3rCbd*umCn!Sz z3QX#qXipWs2yi|IE-Ta++pwpD@U05>EfW;9)PU($>~2Ne)e9&IeFvr2_)%)2Vdy|k z{9CHL2W4etFRMwK6Q>j?NFyr*;DZ5Z3}+dm&NC7h_jc|PjLbZs+^&BceGz|oueB(m zf7v>I)ev&zsk-YHKVtmWRU}g}VKGmC*qBElqRjSackRX2ws8=`#ey;hLaFmvHlPU$ z3oCW*YCJB(p+nn85k~$`AM>fO{@_`}X-=>@S;1TyeFX8}JjBzF>#Cso$~CV?^|Vg3 zM>6}VGT0=$Mk$_1l{tUxTb^OcJ_cW%D&1l-xADFQ0yG(iSwe>5Du_=q} zeB3G8vUGiBO`ct{Vv$?fTq;YiON$d#B!8k|)R)(wK0CSt*jwEr8G2%v|z zm@6wQd40pgEZ zBR4l!EK8xv5VtvFoGq>K&ylA?8)MjX^1kdb-pab75XadBQmO&%G9vbkx0bqN$qc-T z1cDe?ZL0^q;-wSwA5UKq3wC#Sk2Zc)R8;O#Qc|YoFK{zo5A8^=QPlf`l_I+J*ne@+ z#C`THQ{Ii`;g@x?6i@oMhYdgMEOJ^Z6c6TV==dk=Q^uuqW zJB31IO{WHMiITi`wMGDSRVOsNH(F*X2|S!PISzoryNi^cA=ytpw71KJe5IP=AWc9Y z+z|kEPG}Z~!0y#}AGxsDYH4ZxANua(=?-?e^8Vvcfq^alXn{K~O>|TgF|%i@=-Q+^ znzf@L3NP?lU{QaWTk90V=KwfSW<}+(OsiGz<*uNF774G-sN|2pomI8nCy%D} zc0|_qf6O^_i|n=PxlS0bodMhEnfpD>c9C}?E+KO#Rr}Ae(r}7nPy`>fDf`?NJ3%Pt zbItJH;(7TEN62M0t`;EAifyMvbLmGhxpGWirW6UQ$Pv7E&rGx>wuwuAA>|z34Q3mVETe3k-cd_k`iZFZgfm^nfIfDvaPq5zY0`h`X+iZ$4vuso-bK4N7563yiI(BZkpp$8F4)D; z(0oHtM*?vz8?NUH(Nh~Kvy8PGuk59mQZyyZ&(6kO57~QF{-$4+0@%f{mQ3HNYt*6- zCSzsy4Xg_3p!)XN?;&5Y)gVtsjnzI3HVE+HS4c>q zjVC4+d`$dO?Drk~MRD5$ueFmg$teBjv+Lr#01MOmdicM53xHb(;5feHM)qH{xPP?@ z*er?wL&rZT{2O9PfVZnd;KRs-S=aP0w+TrFxOZ$3u*dul)SGmmjLXN zXutg*5(tD!vDy9jP8Q+=1lJJN{5A2+u;MP$f6nm)m?NA+l;A=H#kt`Gbm;=ju}CL^ z_~Krl-`@T{fNuavMt$YKr%?lpY&gI5?LV`=$UQUw%d->mA>hyZ;iu6StOqR5s`~r| zFX_KSN-+T3HizF^n*K+Dpxgh3j`MM0argsn{=Kq29KdW&X6K&&DJwr`^b+lRsUZ>i z&mk?x0<-zU&-(8GiU6NZ$i%zEfB$mf)3!V?n}&VC|Mp)E13cAt8%d@A9MT~Jz{nYR z-T9N@{kf##tH46M{J&~jX#{rjfL-->y1w5RTTkz~yNaux1sG42d3b<3DEYy5k3^F- zS_QFc71LM3(B7*HLIcct8+~x5#s#nXeh@;05as@3WB|czh29UxyJQ&VOhocXLGAAu6V_Re{+L1lE8yw~ zxBV+t`gtK{YFSvC+W7Mca_ApOH5>-C)pxM2B7m8S^Vot?I=Awk+v=Z36d=ukqu|#} zi<2HAUO8l6`c6JpSV83ceEvGKk?1ump19r~(D)bL{?8u&n!;rN<4KTkE}$*$MRnDu zn8#SP`EzC@OQ>)E6V^6M8-Dvk)N5gBPmP2-=Fr$ENPcR^r7dc-=QFu6vSU$x@bmrb zDFcp*2BS^D9|X)UJyzURId+x5dqVhwb@XB8 zi9_i^c&T$zsYgn>hGI5827=BGmE}XDwbCc5=E*xfhe+m9fPJO_g7}t}Kj{ow3{|fQETC37+#5+lnda&p+#O&G9%4 z?QbEPM+F{*J)+6R$0CN}ABBjncKDzCP&%-hbD*3CR)&BuB}8qv+41S6VZa1-oq5YC+WUDrUh z;FW#X+WXC(O_c1!TRmEMKX_sr|2S^*hrMMvnZtGdU+3Acpz+5LUGYh)iBO*kb+LiL zyNSXLd527MePzHcGf(Q~i%MRI&82!jOsO{28B3xrQ{;|-B2D*dZ(21qhO&amVy2nbFu3?q?h1 zh@Ovazr_>o)Ya3g{uhjc@Z7`(Qm7^v1zkTM_zh4_neRyb5Z(%1ad+sLZCKl}byR2) ze2*!*J=D-ns;qi&oQMI|snL8xrg0ek_B`Z`69+@jx$`Z`pG6OG)5-@E-2VHF-@0|lnxP`wCx1{I z=J_3WapbV0CDQk-45TP+UGe>U3r zy1uE5ZCvi#^F)Hb>W+r_;YFaQ0s3+0(PwQODYhGnq1r}_S`K2YwWTxJ^BfNt9@BJT z`P7}-TQ>8X^6~jWqj=BhavFCmIlMRRuehjrx(1711r9)gr>{2*dw(RPWdt`>YA8PI z20M8PQpSay_mEAO@>O1eT&Q1d8X{fMO0Y#s>(@Aqv&zR)QdhCW2LJ9HiM@9E=$8xA zf1d0!C;nh&SmMI{&#?MxuNIWv*s=N-?75YM-46Edl-Y=g&hNOAnt`3RzVdF z+(Ok#{Py3T^)6YTtE2QVKLXq|2?fC@rMU8;En(DnLC1>#`vk&#AdsbqW&7?qi6*1y z|I~Or)?!W1I+LW<(`tAik32()rVLYkU2pw(7lW8@^r#C+;C1K)PQvnX*a_8%ZsGXv98J0ENf~%7nOt0m zY&y>7Yq)a?ItrI7!k{iojPPPx&UL%3hX~y5O70jku7Di8*XQBCPa2Pg)}I^dT^)LL zmoB^-1JFywEn9sx9%j}n>cNq}v=NXwO}P-SRVLiS26~}gIe$A;*yxo#>>2PbsL+TI zOz}L-S^VnNkMptBa%(4Du4_hsikM}80xy)tSQK+<=bjVV>>C@J{yPu?h|2CET{o6o ze|u*)ahSZEyS}M%D9i+YDexL2a`RV6H4qtbuhX&n^U6t=@}S348%!0+=_mb{G@kN_ z!{lwrZ~bzTXh6Rd1EJpI3dc;e* z@Bs|a*LWWMHVzkP@j1d~zR&q>`@VA~anh96lIYZPU1jA8o)5WGxt3Rc^+OY`f}ypj zF#)a?X*hs+qh;n8YqVOaS}BJo`#i(}$N~j=*NZkohmX4+V$UU#{~N6X2(|w{j+2XP zrP56p9?B_a@Ril)s(IH>Boos3RY`O0i3tDZ@RFf zU;6kHiiW>MW4RwtRnz~lDuCQ7AY$&`s_ySEa{lct1Crx_h`Cw4EZF}v3JfCvh^DZ4 zGF)}my#oxdhcA{= z|7$>CbcJ$a6v+8cWQ;Z!Z`}l}y?`$;$^RM<_fr5AGfq0MoNxTa<~i>H>xUf(3HdK8 z(kK-ekU}kT;5@_ZmqPz(p+0{C*tPgqg~|Ram8A7CFd(oSJe%h~*6;ti4W)5?0&SPP zF2n7=nrD@LKR-ij>3v(m8YvY0y1%yY!Hf(!V>dxcmA3_VM`r``bTu z_pyt^d+z(*d(L^CbDl>F>>j%53!D;F*wR};CdWkzs%iqV!1pXqx={Fa|NDNC+}6kRHJ zEmx4!K;Hal`{AG(m;T@p{-gQM;*L2zlJ_g<<*TDT|FaHn^$Z_6L@O1>lN@1%B~nJ^ z*^O~|bQUp(+O$x6s5)_LU;8kSPnrP^LKdhJ1-AzUeM-UDF}4FUl%}*Mg~lQ$mWDSV z4qkSIt_tGKU(c@=cH1*$;b4!HF^X*$K~7z^HKKR%b0Jw>MT?WRKHZ?%c8NT<@!&g4 z+TrfFdBF}|=5SCk1J5d!BX9_rwCLd>zJ)oq?=Zs!&7XHCKgGU_D{W#qucQ&jcfHK^ z?2)h`li8-?VW!P^L}k&8HdQwoVheDQV>b5~d2a3`ETxG;K zB_$>K6Rx>;MIu4U{|NpS%^M>E56A%DxSYqkm(wqR!y4SE}aEn0HQ2)jtmG5^u5mt|qp zGoM1e`Jka`tfYA8N8k$~xiYJ(JKpZ^ua*f7OM^}=aKqIKYuvu$7yrpfS7V*WFPmDf zvZ~@+Ny*|*qBtSXprvaKNoh?X{N&4hIv0f@&tK!M9jjKx5u$KDx^9Gn9SYn|v16?M-(@*|LoniyL;YT_#kr6{~HEk87W@ z^${ubDw{7FeDK&Tx`4BQbWzCN22#VGduhPeV%n)7FwQ(F~soMNeuas zC`I#i6zOx|x~o-wZ}QF9enklr-H9m18~B`&LBds%2y1W=8}gwgkWIG1_K-nHQ$lHC z`H!YcUnL=^|L!?6&Tj-7^gQj^588QjUZD#v4iDMuAV!d}I83Z8_AYR1o4i+QNmhl( z|HbGYcyfc#U+1=JmIE*L4d9Ym_fKes4~8aw!~iTKN({^puLz!q>9tV`)JOd;vuA zUvaLhxb`{In1vQ{dzM_;Bjn}%dfHdrq3xotqqEC#dz+i$i7M%bo~aa$>x-fKFUlDv zjA_D-KWrzudm#st4W{JBo1;|TTRbZ*m@%*NL}%hfm#~y&t1{KZoti z?4ngC(X6g?HKuH!HiSkC!kX!;Yv7?NdiyCyY>@TBJih5J8{ZN<#j5cZng^AsMO)n1dfrJ!LW(yf|uj(NcC(BUG zP14LVy+-~P#Thqc7=~B9FvuB0D2!{Wy|+f(A&~mg`0L3Yv@QUzyKGmlN-`0y(NJy@ zS3xJ*TQyugTAp9p8uKX5D#3-Z*Ee>kDXuvo&gx<&BB3ip{hd58C?(n~hj1Mo4z&MU zUJC+2!Xk^j&*rl@mch;T3Oc9!36+I+a8$KY^3rtBl{68@wGR%q-%99kxRsQa`cHq4 zDVV8li(NX&u~r=ARZGcQ9Iz*#_1yG3{$_CehF!Z%ejT|Xjw!0-A$hIM2;yuVA}{l< zY_#V(wMBDy@BjqSAjZBkUm5nqjMy*0Hq06I$UaRYmb%qJs*eXn4z@G|Fl72*SbD@>@q0~nlG3k2hD^&Y& z+cd<~tuDD1cNYkUMz7s*hr-c%+h|QE?d~>4vl>L99SI}uY@!Kd046Ce`ctYXe{9Pd zapfKa=^Vz3Rqe&>qBGks9KND-Y4a`~0i#=I?LO0mq%AMSEUj+PjN&mTT@?I)|05ErM-R z@NrY)!%I}c4L&oj_csdlkrHi0&7+H&)s7ju-UsuJLt189Qq{p+^&?Z?Fnv$*k~+T2 z1R7@HAD>Gf`#;rw{c@*B$TYy-0dH0|t{9yPG_v`)(hzO3#h<9+9lAcJ&im56AvqsY z0t1!ZIlWA2^aQ$heBDr#rDI%9qU^`r9iWo=cSGoH&H{N^m=ToceLiQPVVx>04F7(x)w0@z2gcmVmh^0(Vt0M0FJA1l6JQs%Z0WA z$++^G6hcFL#qTNk<#c)6nwlEb^z@s&)HsJER|kHmob+RokeFOFyG}(Xe!D`o0VhU& ztHs$%h|TPlj1}Ksp2nUsJA1iXG-Br-wN$<8TTe8s`a+*_1;^q$Xk*xNB6x*#eo;9k zaI=?u1~L$8fL>iM(|YKtG8Eo+A~g)TaDOY3xg>6PV;dxIyo#s}1aQ41#XB7f^W zm&HoF$+A2@UKMuUZ;&3)D%{3;ed))w+jp$oSje$2(x)^qPfkt_F;5M9fb7HEX9BJ$ z3WBWmki6zcYat^6iEmwng=hhOs`o{+{5F#vm^TKF{-_4C5tWuUNv(CL1$E`_W?+-^ z#w*u*R9oG9irA`;nZS3?A z^OAqdCmS!glvQxVkO6cZ*{k`>R0?KZWeL_*4(tqi%oE~Xvr9_amCY5in9A+=7A+=f z73ig^(5Srx1@X@ma*!~u%jvH`kAKX~m^no$hx(}4*pA*$(i!RL4}*e(GqSVg@$vER zNJtozC745@&`l|EQnV}uvAn4t;f7sIC9MHtXy9bSQJb!5dw?YCm9nFd;267RV;80d z8Zw`;AG!QbgNd9|6_S&8g-_Sug~4Ir*38JjH+6{VDZ_Zdk%i7YDIPC3J7%vdfb-xH znHeARvU^})h_1u+RG%pRlkI9OYRp8V#b(O1In^l>-LI{&@!_S8P~kTo?8~poQ%rPU zQthQjNCqBoJ7=0VF_}$GamL<^sv)`}D3Z$?Sy9_>7~yoa>;*5CWqP_E*Ov?;UM4s% zdn#xI{^M>rc%D*(A);6fW3Q_HKcOjkZ7nZA8{ ztUUI$WDS0lMr^x{#7T%no6eoHL-O#Qnt0F$V>P%h~j!G9TKy z)0Viemvmu$G9{~rZyaBY)ZgK}DVNuuvx$1QxhlPsqaM`9mWr~dR;EKI{FWqGZxtEp3m05L$8Jm(Sp>OA^r^YkGTulb_sx1%j`1g}RAYMb)R_3o`P?d<)Cs0VHhKVQG_s#nA-Ul*E_ zz54IlHA35aE~Dc-h{~4ngWyyp_3vxzRYDy|h|-s4$e?B-8-=MyjDHg(+S; zS~CU9eMi1=loiVL-IHctT&_7UPzJu-kG|S$K_Ikv$55LH`7M#t3e7{pF_3`Bs8jfs zq%Rbq&py65Nbj&StNgBHQ$G+iw_YX%2~5k+F?=`8S41sBlV_|`#cN+0C;K}a2|_Tzb?1Iw|ILrVnF4K|B8M9 zh~mAa!EIc1l}eSuIRuw0_|#n3$JqG{i&yqFoNsgCYCh>a=|0OX@}8M!y^5EfE91?g zyaZ3P;y$sc_UE9$Z+REsWMCINsJW30-|9+eITd|7viMug@TiA2Oz4kq&2*~Of6JEc4?RH70V5t91S`oXeqRL%KDamiTaEhm?FM{;}l+DL2vlRf&O{Wg%ha_1=sxqpr966JmX#|Lqkd55%F z(BcA3f4$1D52>YC_GbQ}vQherW>BEGZ=M*WW7k zcqkUAsz@f+!P}CIo2Ft~X~+&sYNk3>En}rTqLxM+Kad>`x{@;QT5-z8 zSDL!df44ui(Bv;693Gh&*i!~IOC>R0b;*{qe%l;1WyxkJnazb>{?~LGpo}g4zaQgA>!ol3vzae40L@{OFEiTYB&T8&JRwJUB>A&L|j@OOg~C8 zZte)a8A2tvdbN!gl{v1^vT9{6Vq3U(q|<_SVxm4PY{%hUp*C_9+Fx-55xmlE@o!_+ z5{-%GgmBv_kJ~H%s2@4>_a}DT`xZUS`afAFvh<0u@5MDHP=}ya(7d^LvwZhJNH8=! zs&Vw8mL$Y2FyM!XnS*zZ(*2$$F+bbBm{*59+Gg&`Wp50$e(gb=53bs*>({ZbTpw|U z&1h>Ff+`r6$EXHB8#dyHE*67~kP>0G!gn%$w0@u*o(9>$+-;M3xL}N( zonpfy6}y`aP9c0G3L%`d%$P*`Q&d&TP>4?fOCQ;g%ug=hos*`RBytf@p`J-HJO139 zxm04_**~L6q^)tnJxDt|o0$;>I z7L|j_fkSQB+tM~!JWi(>B%B{Ycdfc^Im_is87p>D;zhvJ^CH3 zs4Ef-(<|@>Djl_H3HyaxLVGWTuE_~B*FiwqKccibnYIkI;$wY`TQaDdSKl`wjp`ak zpIXs)GleIzOkr8NCM-|x()>LH_?O04%EuFjODsREm zj+R!Wcz8EWdF!(PFJ|a9huJaWFG1a7Xr(Voh1Ar{8?P;v$vB_ICfP=3xe+BG%Hr`p zf3CTH2E;XbAXz++A9=ryO?g$P+O_&h44k7n3=ySm2fx`U%q@8*xGQj|LyDwoTM?r5 zx?(Dq&nRzH!Av|}$0M_ja?fM@dngNUm{zpKv+QJhg^Mw?G(Q_D^SE@A>TQQ@3q4d; z%ceF*7keFq%cx4c`Lc72j)gD6UBqpOD^ajN96n4k2hn()w|H!+#DQmON55}T(yX8S zvrd;&x!@>pj7_THWr1&8MtAUPU_J)!n&w4aM9pwW%kp;}h?0GgL>+Hg@N!?w7sMwg z*zMK*{ZlQVMz68rHZT(?X>mC z6_sK;rtaAA1D`wKtx@Lkf%=-44%0KJ;B1ugF5zXj!W@YZ@ZMtTi5Ade1`NZ_`S@Nx z-$lVnLI#~TWZ|_8{lckhYFukBqTk9qQHU$ubJp<13B)zpy!`@u+ZX>N4(Qr&VE1D0 z&UO>9M2pWZ6YRc9eD$7u#bp6x?A+{nbcWb7_XHMQQ#~}zuMwVjNUzK&LuM^~Jj|@~ z4UBeciVYyKz_8YN3V00=$oV_UWCn)g;aG{0$SrkPQ;T#%-&GV9egQ_g3U|V%u4cbD zKvJ84uUxQIM?|0BE?PDSnvzm5vP#R>5VW$I09lwwx`h-(hv(z1!CqaW)=14S5}gZ$ z>u2R5)%FtN6kKV?P3t1IkrlS6EB98@3+k~KNH~SJEonAt_JtO`#VWlS?h+b9DY+-n zG3dl>sqkfPDH)siLXMtVBWM~%c^voCUX*$F}FFLU89k*3RC&2B%c3*l(tj{5f(v^dD0!jT;s(rM?>(8Eq8m zkr~Nhbcm2_*8&oH~`4B063H58siXz{$#2rNz>|9**z2 z?&?xUY^%}gLMVFTGRsRp{>7%(bPbfUXZIKH@1&JRp~r*+!S#Y_0W9TQ)nVQ zqG@KzO-(!T%h;yY%HzVdbIE;Qq;fy#y96iiDR`kLRz3FLI}E$ygn6v$cb_A~T5 zj|NI+VseH9A}V$NlcMvxLo8$%VAIzlnFYjzO}72Ri+K+v>Xdb2E%DD;0DbQ7g?h5| z)HOcRFhd;T!j|*J9&UBLbZ0Ja2^u9=WRp7bd{+>((qjI5Ft56o zN~QdNUiI(afu|1=e2ocCGXM2JS3w*T`$;g#@;}qVwP4}>1Q&z;>wzd(L8?gFPIT}; z)59;pB44!YCjGAm0*h;?8!+`U7hD_vuTQ?e3Dys9Dv|B)^zeH=Y%K+~8~EoXDB$NM zO)vk%n+5qvz48qr*uM)nZZ7>e&RkrW%P^I>$N#U7W?`M73Sn#IfIS1ZEvmfx9B!7L zi75)WUwMz8?Z%>N!|CCQBZj2`noB#xlMg`qK&(|^oq7$@?cJ!^*Q-MJMLJG?QeWON zmMqBm{Ti0Ju3yH{jovv0g$Omtc;aJf>QBFSG8Vu&5YB&4Tl~1S4a+8P=5w?ngks%0 zVmP)yk4GDNFz?87VKLc9AA>Yl2E9hx!b0~?aBI2hkRCtxKb*S4DSxej@hk9@lSc^~ ze4B*Lq3k&h3lZJxL>4Qe%l}~7(vu|Bbo}#r85JiR4iIpVSdpB-4cZFQTeM!Wbow9e z-q3tl0^tt~cyFF6gi2kP1>}?y59Tyih=(B{v4SaxpnLC*EhpBnnAX9Zu7CF)H#Q6V zV=dJ+Rxd@lNGtds8k@3TjLW{=;oA?nMWjD~jMy;5E34#0{dBsl=U;0a)A%m3C4F+c z+17DBWFQwOLx%1fZf@XEjb*Q`b~Aj{+W8+!oT|!9mD`X@CR%mhuHGrx?mm>aGgoV- zlQ}S+=;NiA@qNh0zsYEzrWFlcb&OWmS?X0DlmSG&E9AZ34IkkL)F7Oy4pRR0m>gKt z_{~TCPScESuhLP#%WmBMmovr{Fmfl*HOtb9*B`hRjpq zvZjscMHv_zQ~;a|r9`2=L*19(->5z#_1@!X_y8C>T8ld6meEUD<>k*7y5VdDWb8%a zq@;BOwarLRZZq97S{? z9&{tLZtd=izPJzVaXAQSh~ht*iVUbgDKGAJ!NpsLW5S*E-v8OHG=4kE2s%IsBE>B~z!y-)bZKc7zmORrh>417rFNa5H#iy_PS4K1XD#m0(!tfh zj=}Ws@$ro$owATaL3b(rKyiw)Tc6W*Aw~<8S4`ZOU@>3&wC43d|%Z~XH zMUUF?+0yTG9eQ1(`FdV;e>KQ=k4CT5?#&KPjsNiQR7Py`X1|CfsHO`;TKv$M3$*iY zQTlFQ1rQ@I>Dn>-+AQ`pz4Bouq4!NRz2rH%9<)(&YFaaFv1~PoppfVB0#_3Tt2BUfA^v7u)*?7zc+*yx_~$ zU8mykdo}T(+Hx;+t90M{*3CXn&OG!K+1l6#t7hl(89|a;_|`&I+OP=?Gi}I^SsqA0 zfR&c%aV3gaV39(!!_L}ED@n%{O_=92ytMTrbynZp$>Y2(@M?V{F>m@;ZB*{$I0F>f zaB{XfdC4<+@Z{$YI{}4}*DM}+DXov6Jbaq?_}deig0za0oM(CE>IGvEbVG%h z`pT5H2C110))Rr&7#3c?3kve`j%SM=t4?l7%&vE<71p~>66^n}>)B3pN^+X&QGQe} zJloD_7gM`>oM~tLs(j{qAZ?5yXZ1rw!>K!_Hw`@iAA`E$p^Qt7T;vIgB3WOz(x zNd8-s>T~ZSlq=B?o%x`s^9tC}oeXnsxi z%;N1{b?%}Kj$hjsA13N85jV%1(YDbPd1q`Hq<53HZ~u1oBvJTF-8m5cLE5(+k9s~3 zT&rftluX>CTL5?7Y18{Q$5bup?qpa~&FD&I$0D0V*?6_O`q~e(@8?ZFl=6~+Ei2k; z$%vPQ&4?WLjt#l5C(yBZXY&-Y$2NR^GQsuJEKUR>h%O?f7D0^6VxyM0NMWm%`{6;R3NZml*O6 z@@emTR+V0C+)(2mQH$rE<6mr#HA`gb?>iKRiVSsh2Sfi zw(ik>RBQL-H&t`l-YAWjHw6!e--?)h{TA|;fNemC9Hhn9LinBQth z9<2MjX zan38ykQ)?cnObu~&-1(Z+1j|bN6*^E$Td`rv!DHS5{z80$}N5D*tzdKJT#fnsAOdm zISwu1slT?>>`i{sq-my2dSYAJqDO0?Zfy&~pw&ndQxpDIcJnB|`W?BGe+TidG<)8hGju$^#C2{J*x`_7{Zwr<+c=4L(eNE1(H3Id{1Z{$)&Pa`gQ^k5dt7aL+Q3~M? zHrS4bUUmVUG9BF@Gx5tvUS>8FFv&igz8W=2Yzi0p=21yYw@B+5x0I>qtgw4(qa)Ww zxZ?emed7N3X_{1}%ODY`Q3pK_`p8}B(fa3RMNK4y)NCh2%fzA!0IPea-gkY9FL#(& z;CdFLsr+;$RD)_BvRy5*YwDsZt6;IIs&?Q_YRN*i z@OEWal}SMQ%eJQPvAC{+%6*n63Y3KkuDMWQic(3aDFJW!@tLu4_?NkPVU_j;J*v+! zgVd2HNT$H9&U3?`T?zV}6yu7fubIG-)9#3IRLsjgm@J!W5-NB~b-!%<@==CJbpfA~ zg@&!(3%L#(j?p_cP5!6Rg<}sX!OZ#hFR@Q|&3L*DMx9x&g2KTYijpmL#-_&api(xd z)B>30;2`_WaXCELL{Gg+{!l+>KymCuSR>YLcr#Mou!FF=QqK+tr zE%zIWU?{C|fa5yq?FVfhbE`;!DF@M}Od>%iaxC+_f;Mf(RQ( z_z{W>jW$m7a}by)_u-qS4unVc|Ltr(B<*$9-VL9UMutY6;vO|SliYpf@Z_M)S8^K! zxWmWE++v^+u@#%EcJq}|lISR6F>}Kz0oH=5trbPCSb)E5f-h~axZ7eF6B7dmD*RwUvSh^bJ zdq8^*wnB5JSQVqQD_z{E(;HV|h?Nq7rwq4-AD0XSOWptpFU8bA88u?b6e*ng<1Izu zx%bj@0NoO8fyx{_q*07vk7)A0)B$*fY{6t4xz27re!%9ba@KA>pfYD;VJWuyQoX&i z)c3`9DrKKq$UfyrHLW&$s9x3rNAOQ4F_`$Vp4WBPBGBTGYA{2-G>NPfD+iwOS;ogO zxFb~T^g+$@FLnDvmWgadxh#VKOM+Yq4ju_RXN18yfffW1d*R|U*S+G zep%V0CVc6)mk)eD8W3935E1=WEa*saA_y9X8lU4Il*0`0Uj8MJjWfFFweI=DHW_JqKI#{E z2QPsf;U*?@-dl2$^cMGv*H1MxItT?P9+8A|CUN>Qj>qIt zwsnckxIp!MjLsZ}dN&O81cQKrZQun)0m98##?S$xm^76l8|zBbv2J+O1l?8EeeD~83!-KBd(CM6c{wQ862}JOP*@KZkP>D{d&?(bhs%I;myw^} z>G8uyjxtdMP{8H@ivZLcPIa7eEyPuuxcZlszFj5YnjC>#fa6CVxV;9YB)clj{ zjpz_d3FOr}V540Y##J8&06z^3ZH#Snbd-L@9xCwgD6z)vpRRzPK=Hbr4Au;2lV%w2 z>@s6YQ%)$AU=TQHW>_h8IC7*NXWLI{kc1Seo!SZUMcdE zzSyM7@h>In{C{4+_6Dcen>g&h^s(#abl`sy;wYB?^W*>ex1Zo#9>@s&m+U5);s;tJ z_^-1M{#SDa-3+*#7s>y)&A(6E-|nj)9tKq)S@iV(G)w;-arzoyCUL(0FBCBr4y8PJ z?f-xNqVYVb^@KjEv0C7T~uO^kv8oTN*Fm{CP`~x?q97MMt*( zUY`{4Ul>gcpO^>0S`ME|YcUpCkMdZ#0aDW7=37{StSR(&C-SopU!ru}xI84KT4ng>KP#D%g9C1=yHtXn_NzXaWw^gS$>XtS9R~oAo+rD*AAs)0C>K^{aOt+aud$g~ zptUJL`&3T3EAsI0%%w*{@#B~$+A!ow!0Ivn>+8D@fRMwfGqOFl;I_Tc2Dp{0fYXXJ z-kfPFnf5+vdrQoiu97VNyrYH-Q!ED%mBy#X2YV~Xjrz!`I*$(Elv|$x_k5w7W_bVZ z-Md?Wdms-&DdV4;-;-*}4MbemqZq?Q`;#q zD(=1a`vtuO+jTC4xBEJwX*CLfNw0YTw6zA6{r08com9N9-D02-mapGXJs*p{OXT@y z9E-u+XzQt3E$uS%@Ab|D`@k|H6210DRdsc5^Vk6^JOM)~I|4#dQ2n*o`a?7u2E}L$ zT*B`qttvi;Y6siNXY7Dxd?g_ZLC$wwz@q<-@b}jw50B=c8v1S-`8t)*`jb7K0|0-T z0|dM{b`X)l@BY;H|I~0eSU3kR>rnF?th#YqWY+>}e;o!6$LN<&(t$zVOnmopY*6)9 zljo72B;6>^=QFnZqwWtpeqVqoqnAa&N4ppgC5d?$gHYXZ%58D<$#dYa6sOHid2TCf zAzccn-F88B=g5V4wk4z;}o|ava%@*NBWMu%TNADt<5qJM8jw z65yRMK&DE@k+BLJHpN&@jN6A{$a7)fP1K{i0Qal_Jm$~}Pk``p1pKU^Jw3V47DZN# zzF7UmMsj_pJph}33Q#{C7-lajOQkYxk#A{GQ$Y`gGXZu51EzM@d{as8M9;nnS70d) z0A+z=9i?I5^=!)f$fkO`TO^~XsJBA!DV6ihDM0eG+g@?@nmTmumAa%wOHG}<-!GYy z)BpfaHvHvY;-A*Lg#R2=1)NTa6mTZr|Ah^R=mXC$Hx&ZGlH;2Uu(Ox>qJ6KdY$(IGQE?d4S?Gs|?bi!+HCqN!GTH(d| z)(D6o^VJKtpQ@|lA;1ot@!FkYy0xsk@CVf_&*}%;4yQO5|LER7#;y@agocam4yZ|2 zD9XKCZspNa?8LF0OY&IHiP(6{81}y2>uBtWF3=4eLRU^nw3EYr_VZ|02rP$*tQUfc0o}rh8aGxoV4y)vo{9NTJ#VwvUGG6rnT?9Scjl;1%A`G^x|Ok zP;cRwfHI^@U9Nt)wa$JyzqI=U0Mqq`C3!5wnOPc-SJ>$EN>2h9dOW4u&g-yazH@F2VFfc(Hq&lm&Bo)7?5R zLwfkn{1(7)hhRdw0G+gM116f5?w!Zw62N^*Q_r!Qwm4i!u(O=21N_WyA*ZD%d*^to zvUIDSWjvbrM3;wbU(N*skUYga>KMr=)zfxKyPQ z=$V|9#0f6U(qUL=Me`%*btTugp?8J7Fp_)dYK>7|CIEGIhk55kG`T*IYu(+Lo=$Qe z``+>SoY_J59%DOioD%m*{$Ae8%qdO0W~^4(zE6|Iy;hm7QRaI9!|~;r(M7j-Gr-(W zHL;9Lgg*oj?9PwD!dQ1FUw?-4HD-vsLGO%fs)D=ST7da2xnkVmLe82gF;HKKCkscnL@W1)8pugwe1r9yn1h z>M@)p^3=2Y=CdxH@j0B&?z?DGrzeC}%h>|V9~W-c{<5#1@0N1EHs9>Ao-u4#=t?jv zMISs={+@Xp1MCtYSDGahAe+ydodLTZv=qm(s>FN$ZAg2SaBEyQY&|N#N52;vC?CWG z&LHXt!XUs9r3>BJi?AAF0M*gU>+<3l^U%vv9?nH|U9E9hqvY_|bPpt=#@w$>vybf_ zJ$ht~#LR`DgrP1Zj`9!LY7(>hl)!;$f=`Y}4L2L{1{iy|mz}#GXhz_Uh`UGq_O$(& z$bpucAZSN4N;away$l5{Wt;^EQ}_UYM3>w4S4(>yJ$n|N=zX~CLW0-x?cOB}@llxX zdX`nyH^wy(%B|P!>mL9VBP;O6l2{4w@r@f!_9B6SoUTU`Wq@mTe@-FhBL8p{sMTgy z&is9ffbgLUHtV-H5s%JYv>Y6mhN?0I!lB#0oCP6$)^OY;WENz}j&wU*ab3?*CLmN`D*r~NLEkJz7W7d7U zZ+9vTg3d0Q|DxCHfsQwau&VgK+MWEq4Z^JozbY^>paTSCbO5zZnh1X$S#JdU<2=4)xSo7)^NH1(wKmQ^?I$4(;oq*j~g8WOiqvfBQF#^N`cehZVep6f0KT2w8#jX7S zy-v5(dN76u@a4$}E#WW!diSJ5h;atyp35sUC`?{%|M4oub(&Pzg}Y8g*wr5}DIw~z z`0e+AUOG+!fpjYXf2-K;%NqX5oRj`yPcm1HNIp|bS9J_~Ate4u)@3WmN`5KEVZ1iJ zla=hP4O9MyGyfh#DEn}7rQiGS{SY7FTgnUiC+k^(V5##pX?cObb;2RA%L(wf6=Y>) zzaG2)0QkwMi3#04Vs*-izI}IuxJ7S@lp`?m3Ut?tno>c6Kqh}3uxt~S2F8e}AtQRK z@Xqem`ejsB2MC-JQS=629ss>rqJ!-H%ZpWSIumD@cZFA=#o+h~q~szePmiY0$RP zvbR6xlm#d6fWb9eqh`r%p8{zt{cTQD=jZ1g!2ppq4E@n#8FU1aP4W*a=pkK5^`w=D zLs5E9rE%wA+UuCPEg0!~zn3TewqO>**nN=NB1<`eDJ#i6*Nbx>@PZQ^LE>zGyc;gk z@uP*7%dYlE01#YS0ovI(S&L^kyy8!kK^lHVf;iMv8zitew zfD%A+^+LW`fXl}bV0_yFAu`!qISbg_$BI~lWsCFkZ6GjN&E}qb_H_6)$~Oeh2(~lO z8OLh^OlQRcF{5lNpo*GYd|o{DC@TYk5?K+E8LZAiP-U$o!9BOy1mp!?ZW=BR7bcq@ zfsBxhe?X1V62LvKA_^cMxCZK+zb4_00srHIMrJ=rTV4DFE(Aw8L>0^+nIOVYO}NMbVmWQ}tqaKwl7Z0e>~ zII|7B4}LWvy1bs)n(vTlNK98_cZMurZdNcJ#Tn|M@7%ru0>Zf=@LxYwO?`` z$XJ}1ls@5@g}q8-%|Rp{7Qb-e`bxL(;-FWT9@BvHV&XQMYeizn+v@1S{BZg9PB{DF zB~rqQB>T@-_Bsp#k2K|O{bQ$%$>e!g5^z3LUo4}>!a;MTG#oD<%0S%#ZaChP@-fKA z!%NZ`_4$^c^61enzn3PuvhJSUFo#}>0Fz>bt8N{F89p-Ov}kg*EFZ9%l3Q0ifvUfE zq}NdCoF2t1R>~=M0A?T2V+M9$x`Q17{c|uQ=wrL}NKq5s5X^EJU{+;(hAi)M45iOI z4?oirDF7!rHSIIs$E=kJ{#ZWS388}>l*$@37kFq&N|V4crLA6;nk3Zd_*4DtXH1fP zU^Za9g0%)lm6)=mq=_d=CL#&}v-PA6y5{Iw;d6E>aNiZIQY%J+!?=Dn6dZYs^B_X$ z^~8bQOhB-xPd|O~gdQ{1sX$iFh~K#1_Y*X&(5ioH_X=caw?0%0>e@7Dm>3oo%r9)U zY@zj!!ykgZ+%{r92EZX*I+8vtPD42Tbcx{0#j91N55r)=3xnwR%U*wAvN)J3Z>uSYPav0))>aM5Oh8ig^?B0@+tBqTV``5YJT>Mg^?NpQxiXX@D{L%=86Z>n z46r8qb|lUY!l^CtP~!^9Tq!GGsomxxQUSptle9+7x@rg9cB6zMJBK!vlVqG!i|1;h z-)o@s#cqbb#bW@IE^Bzv@%&b+*z?Y#^N%~0{#wuu9FoDv`nUanQ5g%%rQ|gY*+CC> z2zObL5GjlK!U#t|d&c#5$x3t#T4EylC!*KF z9ciT3O1`}&n-YiLnIty8w+f=OA}j2{iUbbrvg;gq4Yd|}K+BP|$)m%3J2fn`Aapnw zf@M1PWo~r{TqnkdJIjt>v`+`XMPs@+uZ~89gj}r#sem~U#Spo{BmcMvC79_dG0ZX| z#PY;`cNJqsl7^VyW}5KdS{#_qOyD*OupTQ@fC_!bY3uHGF~C2l2Yr#^KW8p3_oW45 zV7MO_fxi#~uCkF?FrQ~kqbmzFbF3hT24z1EO{h}St`C@+jwdwkC17$I?8g?+3*J?z z$h}>1mp{z#dNA1T~D)8sGHu(Mckv}ljE>~s3<$jQ6-@ok5rBuiXh0Xm@M2@W11FSrxXWD@49(2|bYYQ2>3`vGc%liUQRr>Cj4VFs^3~BqgJHyM?6n-IwpGP-DhC zG2SQR(q|vrFju&!2NeD6le?Qh=Oi@U02$`iMxFcqE1_XSPIl`ljQf1PS*XIYZZNs- z(nSx%i@k!WMKJs!=qG_W!%o|@?f+G$9}wK<;VdIC18KB(I52V*Rqla<5@CeIZ(AVIprz1zax7Fe$>;G49A{c7XtLoH~Vm zIW-B)+dQ!OWm3puqn36MX48RjHk$(^8~%qoEK@e0#LpexU%qfkHAc5YsKj{FzfZ@8 za6DB5IS=&2#jJca4LDoSM@xP z{`ZT}8qZEPG6UQ zfW_>%K;L^4m~kQ#wSpiK3@Bvz z4s!G>kVGE}4*x3Tc*lU5z=r`$tUWz>Xrbmc_9-o*T!Ko#I$MSRJjlbsVZbjk)qP0A z2~3g^!P0=T@-D^TLXiT-}sk5XQNjC)xDAjvCZmj`9uK{kSGeQtNypwLwi zQ&s!QVOJfj^SLhluTc8^9c<`@t}EGt8KZwMd4#zM#v4i~17Y<;E6O#67k-#ZpoN}f z+KNkb-O2wKMCfU{2cEvg8Nsk`LMmYkpQ^DQ62BW`1Ku#-rf6?^( zuEL}QFs0J!EL)(XKkagv*{1~Uf$aJm(Z71wxFNr{5MDz;EXhWQr9&G?7jf9 zB~(^;9iZE@p*`8Mtf%X}R&?c3Nhj(&Ds5C#5&p5}`en?!zY+tHOv)cnP!VN@&>)a_ zbIJgYF<{cy4oC;}8(F7baQM?o^EUDVCMYP#7>o;1RaYnDuxi(9VVb8Arv9C}@?*MTXsk=p zKbR0!Mq#q?n1_LgZu0H9;!^U!Ghd9fye7G6w{K-ohsOOJ@_WI@jyvtu3->(-O zq6bKOGAx{U`I(|GL?n7GmSAQI2)z@vD_^WnR9EC9$g`Z^D1xl-ch0+W2N{a7V=glI z&3AQ@Z`_EN{j<@2ttBDA2P6Faasay)6kQ>CXn-}Sc)uQ^IX)L9eEM_tu80Uy*1=3I z@L8VvU=`W&SD;lh=v54Zal1LNNFYfdK!G#+sxS9vJ7Up!RmIs;dwHAR;vm=+np&I=rRjJ$&}BRtPP zzkcsF!3-8!%j1@XS56qU$e3t%jqUnY#8d;Q#KB-VWZGX8ih-vE!asWr{WnnJsmbWW zu$v=0D-_{~{oA&+1A4v15kd+LCc&rzZJ1Z9!aDAF`s^eb6t>g^1TUcaia_Z|r9lmw zeZqq>G z?{gs~BYOnK16n7m2+!YiaCx$K^Rhz!X*k6b19N- z0-KRqOes;{^@Mp6(yV+*z$|*geN}yh?RH1!DtO|;915^ z?8&8wqi`~44xs=7evZv47~;y=3%>EpqF#f9^q|QrMn6y~_HwJ*hiUmJ84OpzB2l_B zPDFBCGOr@^{WYaq;s(7B{8LzYUAe+KCWmoG__0xK#QWo9>P03xi#&sBN0S*)iEu4p zSZVm$gwNT@lY}i$9EdYkWqLv9{aKHRu`v#! zZg0%@U{-cyPly~n&Xq;8xQo#b>U^py;(YBIam+4a#t5#Rfe9nCHw%7Po~Dr8m#Qr~ z8Sq%zK04X(p}p_dM>+qe8ujvhp6=t|cVNBWF{h+8!MX&gZNNX38r#BH9Wsp}97DuH zkf3#-o{>>&r7i#lKxcII>%yz7qFT^mSjq=8(Y zwqBc^CdMZQDCmwr!VfyY9al3*_fN2^*XsO#+WYERD3`WHm%aq1qE} zmkzLh5WpDrPl;np5cBTu)lE-IfZqP*+n_-ziR3JH@jt1pn>jGJXKv;K& zA5S2_qCQ5bsHzSI`#>7>Brec zMLTy8bZ?TiW?HKzaeHx~U|#7$Cxq_s1^jdoMh{ZgxntKD7}$%3y~7omVUyNd@yQ;0 z9soG=>qp@Unks|9TaEq5Wcsz0lu^iIsH9~~O`0LfakJY0h+JN0zX_4cVV+_ZL6;QwF)?-Jqnp~@0OR8W^{>t_lZs)CWsK>2$QZKg zNpMzs;A~~rCsMzX$%hs7VVH)!GfzKjW*8?_9TIo((D(7jZd6L%V((hF2l}#3D zNY2S4Abf`W%x}P0b$~kHbLCV9t^hj^XY@vwWF!$G~?vv7@hc`_4`uq0*L02@ENn;D7 z^d?uS9EeP5&I&NpU7d0V!gBnoQ-75$>my zux}mpd(aF}Gmo{*2azJvNo%q`md3mMuGOZpM5YbKByZa@J6Tk?7QtDXH?Y02bQ!Cn zwcyjAx_|i~_3~ko5h6KdzI_>xAzgf&d}c9YDpGzsRT-g{t80a{GxLMnSr+oEzDF5% zyQKKNnk&j^j}>SIamoVh17HFCpww7a$;JEq?VLv48E1Gj>!6-}C9~rT*VVG}l<}}x z6bI!c4ty^YVm(C~DS&T0J@umKBCPASF~zv_%A$-wf#HQg#eQ6-$A0Q*a|Tn{F> z2d#TqE7R~TqkgS3*_@iM`#B5uP{mkO6B8FzHst1EA)#GWWR|ZCn)-Q~-9+Q7m65xj z9Xdc(6tJMQfG0T~H~xzP&I2CZH+n$v^pFW+dK(IBX>P3K_NgUo@rfs5m}b?jLUSTh z_15HH^&+>{pMyHOA4yn!Pteg6f1&Z}H&}uEm|tc_>Y-0TvzoJt&4_j1 zZl&JVk~bEqdzk4LWdovzb+m@83dsM$Oi7y)1QLXU+K8G<4~d_AnjIJZX;^s)Oj$*~o4%3REUTU`75?NwfW2BZdDA%*# zl3+}H>88-=5Z^9LM+_m8t*rd3H{y(7I)Y(kAgRocP=GDZVH)~9`66HsGNb73iEOa3 zumtU{4=cbNPP_AA3SSTM^@TF`ooLG`ENO+bD+?5*%i7PT%MSXoO%zEJ>lPz=20_8? z;Ty;kB3x<7`J0>XJV; z*Z}$(o-M*$y`mY5&xS_(dVpCw-zV(Xq6Yoa>kY*CYP#QSd zi_hFjWmsLE1Jc=0g60)?N7Qil@+YOiTR#^weg2X4JwJ~8Vd**WKiq(Thc zyF(v-grn-)W7?O5$W?f`hM3#=>!ixmOVkpCyp8(SIuP;yAnKv9HOR6u2~}>P6Coxud;qwBQnNNaaC1STbD5aV@lI=G`>Iz zWtk_U(CDGSs@M4s>rAj8W1*}RBt!+)IJ9Q5)51_OzbDWVJpBwqDpN$5xr2KQC*y7W z1qhd*0P&)F3BVMt7|Bb{&x%jd634s#Sj$28fYAz>dDN})V=u+{)es_*q9T z3)($)z^f&%)*pl5!`=@u>P*WaiK^H7wTfB$O`SotbE~Cd!{(5vB~&ag0m~1hT3w2n zoo@l*Ku^@1U)UD_Xq3*;HlocM0W8bOu2u5SBKbv>bJevVt#oG z_^^`Z@zXJZbSW_7Lx(swr0?BUfnXJ%0&R;;04oMv5}O95xJ{WU!skK4O{+-jmSq5n zyi|1+eU-%a zn-UvCr{PihwM1>3? z7JLN!HP|}3Yv6~v++yG^)=SyW&hFiM20>bGGQf_N=Z4K1ruX*p`;bzc#(k6+aK^Ta z5HP!p==HcjU(8gD#r&2%+RkUaGXX~OcCjsU?hJr#Q$cmd@y^r2{T3z&cm#pGaCj?f z0M>n6<@b7=;Ig=nQGI1O(8%1IBj^qNFWkJU&EN4;DGG`LfE7^t0vh>a1(=#2*2&rj z5qim7qnQ_rinuj!wUd;I;nR=kSW}I7pVJfr-?K50&Z1Bh1VmrKvTD-2@#!n>$wWX8 zkT!MGsY(LnD2NZp1{+U`?K}WP3KN7I>Z69Xuqq29;}^ieLMNxEhdlzoHJCfuex<-z z-U1@6`#z7+#B(6xacypCAs@^h+gmSP9|D&gnTM($#NGnDfYu42c`jE49Q|G8^v)>j zs^mFZ^N))FJ~$bev@-StL~5XteCf;e`&baa$O?sYC%idO9ZTtWxAiVSL?nM4tKMm6 zzX79QL~I3FumS4vNMNyKfrxa0MjzeS&&<@75-V(IX!suN9!>&XVd}-yo1Xe`+YZD^ z-+^dkMIbeg1kh)&PzyiFt9)ZkVhf~yL-5+i*}15%c$N~7>`U_uA|r$L(ag(R6cu3e zg3C3u@9op_XJgC>^`I#}KDThV`e6obhh`cE_U#5bCowPr7>xv=0b!Wp6$CCWf+!|7 z_PT=bmuH0Ap`Xx<0G|p4Dj#*I*e)!Z&mv-m>7@DFjcz*i>dh(IXnw00_FP(y88W#_ zr?So{QoFU46@Z$*3Jk-#z&3h0bkHAyUu>24S$?b$|@Bc57r{cgezHqNv?@ZD3lgKiG0>=j!Ky znj|O#xRKLprEjtM^>dOQ)Ewwo>6#q@_1VO`yFxezKqTp~4$59O6Wry zjGC7`7*{-d$GwqvA0Su^2_9Q00(wEHi}~Ty3xMPF$;PK(4Qwjc)VjSm4=xH(E+0>c zuI47)VZH_M(%#cudM^=r;ziSFmT!P*Q9ABD3V`lV@|pA^z$?A9&Pv2`!c&4dqH>cH zXxQ+Y7LYBOffQ__96$@^do>VD(f-ns^>}NPIVyQ_)x;IZt7dz{?-g|KnRcm3N}B_R zJcy<@Q?{pgYSkg_Ft1LlJo1~b)?LnsEqF_YhwtkC-8Ba+AVMs158wU8gHl2Po-at< z!4PzZV4h|kVO4*arvsnTo9UcB@e8KU(^Cij)W3M}AtDqb0Gz|)`Q87$6LH{+g6m{T zz%t9XbhiJ+A$)(dk~CxoT={>S z6i<`}8X7)UF@c|Z_a|-fV>D9NK!;GPMfkr;Zhs#Ucol%|QSz|yHTbqiM*ZZ&eiy`DT3H|DD!0r9fAr)}NB2q>nw(6Hw;JRKz`Drtc1e3K#W~GaY@8QiU15Xy%GNU@}lF1N3{l{zpug{djkg+ zabJ6Y5*cH0O<||#bpQ=p%eh|wMOoWo_+-JQlE*CyOn({z6ci!}N4p{>Ie8pFp=bFn zQy*BSUz?4d|FA@3!_++vk{E>ejpT_7=LY643DNyYt5TXi2H)cQLi}+ZNZG}Uy6ya5 zTVycTyZ^Ph0R74^5wn6#wIREA>Lo8EP|;3tx$N)yGU9Y37pT>b^1i0;(k7`32sBX9 zc5tp+CH~c?@16sYI$xlUG*x)EPT%#O=&eN4O}3oi%S5Gje}?NnCrpYO^enY4IW3v& z8P)O|!oy6NJO19flqbF0o~YcRlV^CKQ!FVXkQ;=1Zjn-8`9eiKLO}j*nMKcW{{>a{ zT^D%xxlDogpH1jkY171FSKX6{ifgrEFr27?j-uq5Ag z^h}P1cZSR$df9zYczdkCz2P5J4huzO_zGFCjDAZJ-PaL+tFLd4yUJ*4YG${DP!h#Ty-kQqgrm^I(5c>CNi8?A(U*=eZes}JbN z-j7pYjH<26n|ln0qUDH;-)SR#pb?_XJ2C}YaJjSy?4R{3LHI>7G2SxB6|OqZ7IuwO z`}%OCyj2wK1Hx#!q==~5HCw!}){%in<330^P4fR{`G8G*Ot7h0(~8M_sak3+Pd&96 zKMxD^mQBUIH|=i8=}xiWBcLhXY3InI)~;VqDJXhK)EE9Jw#Q-TbC1Q&xktGU2ZYU! zWoSz1&FOE=5$AHk%TGchL@*`&rl}l(qZv(yLx$fXkG;E@okvQ^Oi4JIh`h~FAM)?Z z@N)zs=FY!XQSUQV=roWMUwlYp&!;bVkSXJPkJ~kYeSa!Cn(>-DdZiS*V2xU2n&o)D zKpGIf)3J*~Iui;OGiHf@UeqbD8k|-_n`s2_pAg;V?D&$@N%$FYPnooQ#Rr7sgGMj<&|Meg+ z-sR@SE$e*CsJ$$tQM9vF>dH&yd!DFkgfOw0r3*c9n~7ea5xbi4^|Z#?VuHx@zvAZa zvj+B9Z5fFh+Ct3Z0V5?@iJXA(jA5Exs>u{d=ND4YT`39g{z_kI-AM2FG@JO9h%hUi zg2-6OA_@+_Cnaq7UjT5bxnG6w&zt$RF*=KYm4N%JjXnx3?sH z4Wo5b2!N8f!x<@A*)#i{rC-Mb+OuOdbb_XVR2mzf&c^wL*NaX?b#zU z`Cqp3r&E;$o}0(3{auR zV^H1%#JH}<_D=)wvkTtefcNN^%Ut{?(f_j*N;UA@hcq024)NeaJuvBC)>8f_H{kcy z>&Oj#E9;(zfj8Y5Gy>hdhLksHHtm+-ZdZ44%u!JflQuHTSBW?$+mMqDj6k_mBIL6h zO;UY1-L{OewS^Wu5iR4Gt*38E9Iy2mPR#;Nfpu;8=S!@c)^Dd>u3j{pDhVD5bbl(( zI*e{{GcGy$W@3$LG@<+9&P3n(y>#Zjtyr?DqCdyH4CMMNekmXGNtHC$E;4QEkV?C# z0eNCvLRD`PizXu9kdV8kNX4Wev<>14ahsvH0Ur z;yPDJCp6ElMmQ3`SuS#&j=2>-v2~HR*Myg9f2&BSyQM#)nn`dhZ9@u`GsGaI-YHX* z({<^OwMK77Farz8ehT#~kdr~{+n3n!(StYD(;23QmR!S*eWYWFt@7v#jPon!qCSR8)#rjB$xqeZr@ zsP_(v8>@0RHEUN*5UszPmM~vwI zkQz)~h8h1dD|=;(g7&4uS9~T^2WLqnMHAOu;GhA)|%6*JG zWAc3qp@5Q%q<8()IU>={3;uVRn=QM0zFHT~O{m72B|lP*a<$mYia6rL@iP-^Wca^Jn@$bY_0oc(#{snHQgSW}yw5$1eA=D*=dBDdea)6O5leuA=vC zp0C|oBL$PAcjOSZ&$Yz}hkWy`(Dtv0;lXiW~Ox%1{yN zx{IdtCarM-*Al%2&%n5YQ-W^6-)Xv@+4*|(;Z8J`hkF6-aEr+_-|7qVqk#kmi5XL8 zcC5#kf!v`-VxI8YiL45K;PAaFXdqeORr&B}=2eL{(A~<%9Ahfszb!&>!Fo$ZAZ3}U zvr=9^BYDt{yY#Mt4by;P3H9@IOy44x#jKUyR`eXGsk4Z$b9|RTU9K|FYoBnX$MItn z4MXh68a^Gl!$G{jQdjp}+0dz5bHk`}+ds~&@KzIRh?NBFxh!NWXCg1OU8*L@R>R!A z>ZVw7_YQ7=r;Vir+IUwIwiW7O9Cs>qJ;ph3;pk;E(b&5?8X`@a)ubUSm<1D2huq!^ z^7y^B^5JpRJNJ(?=a9%|UCbqx6RH zRCb9anK*TCK}vJnhPRfG)6b8+Giz8N4FtC5INvp%dXjQpuf87tcdsKfqr@Mkh{q|5 zf<*v{uF<&tOgt`BT@S9J5r6FAeHpZ0mKdeFSsGGpv%d!m;jI~Ptoan2k-5Q#3%ctQ zzsKsUnO~@txy=MkWG^+iyn+AdO3^mMlJNlOICOZTl!-<0OnTmPa=0=61{2=?{#l7@ zZ;9+Qb%}diW!6aQdPNFE9j}SH$ioz(t@NFMoflyo#8D^rxO`H+z4IiMWxa7+9?ft zB&S+p$qSj(UpcUiTc9*npvY6^l@LS$;+Th7UI(J5O$s8f`Z=}0ee=9=d*Rwte00)6 z?{@jpSjP6@n^vZ8*YHK1bvB~p(A>V_705p#qi4QZ_8CNlxore6>n9sc1jBYQYQ}6R zAyw6|=91L?aBiM80sXYA7D3DdtA)54hNsHraK^+-kyd=lPvE;E>gG5TLtB>=2ba=( zToo)sL(9hR*p`vjn4?eNKeUPVEqznP`C`e%X0bxKTWa$oHy~Sz16^2?IYvZG2Ie>> z)cun2yXi%%x%p|`0jP?ByEX6-@LSKVw%`1lpf;XWevi;Yv*PuHrYY z_sd=x{W2NQbQ^QqK*amr!W*bFEcY04ZaLhoRI0^KAWHEm^HCk%3q$Au+wFhiN@fbN z@bM9pVf|@V?bX{{rpROrjJ@LPxO|V`3o;G@{RDyP$I+{r-jo3ou-Z2KL>P8(69J)813kMj1!U>Dm{VeJsZay1kv3!W zLTVr^^3AbIt4)$J>&!`7^0~JsXH28t>|2=}9@h$D_B9ez+zR?-l`8}p=-9Kicr}&n z%*P=rV|GD`inH5Wp~G(@>0X^jbqwiZ6`w5P3;GAMj+|c{oCU|+;|>JuS%m9K0M$^( ze!$gUH#FXdeS%g5IgsJFlz01@`{g&2du^ufpSDiDaqUYzfw}Th)M0>E87HqwtPuli zQqe(nAy#?DPrNJ7UHImhc5HHiEWU@nXxo{TbD0o;{uWq(gb@H2=6}QO8~Ba?=yI;s zxw{lMO}d}&;-ryZHl1Q%dIK9m^5SiDQC$u+BQL`o-AlPHkbRlP*1QrjTb4tH`N}SK z%f~Q_TxZr+bM4~=5V~iVj15% zYR|*Rr!!n&f;4%gIr{Xh==t0Y zjm-rSRlG`1db58;Pfg$=2cD5)Haxmrv;G=_iJD_m^3x`<`<{KV&PiFPq<}c0f?>I8 zD?ANrYVCcUCU#v`tbhpb106G>sBQse+c!kLC8i=!uAa+>a5|>_VSXVk{G2Dt2k(YG z=Hn2UGAU|oHxPV_jbpgxNeQ9C=*&&M^7vQD^5YdK-34)zxvgsi(NBj%h&UPWwdeuwD+o(EUdAXuM~3_LHTE=+Ci@naZwf znI+N#ZVp6}koyA&wssn~ZY86*{<9Wfrxb}kM_;mnA@?`c7T0sCsWPA)e}!-<5r?oU z$}`R{$hD1%UyHuZ;J62;koo2V*`v6yV};7eSWX~!z1W$UyckF=+tbcC!pd-c!2RLU z#$K=;JiBWli&n5KR4j3(YN{glwQ?5<9FfpriVKmY4W)z8%z zgCyXP(+(7a*XdG~E0H6GRGNP4A}L8v4Bqc_LrX?XUKZh9^E5auGsDhjhvKF(A5R-A z-)P_K)DdmJNHW4)SD_$_jdNA*J){X=8*K~t#=$PaP=bjLezAC#Or`wf+^*=9<2_6$ zQfw0w37gtCsf}i@9 z5yP1Ry`oDr)XG}q3@)Cv3|(AC2|@a=6_1#BVhqf!p;d#23nJ%l3c;oc?DKC&8eK7)(l?wpVq2W>y>@mrpm- ztF>_=1#Pgfn8cTV&haz3$|40fsvHBwjob$LBf>^D89w{DWOs`uD{3hr|AE+ZVBk&q zga3@JoYYOPk6j|R3a%eQ(_a5Y&iw=u@(I!7`pPTUIT*9N6Bh^4O1;@^Kx8)X&7SX! zru7~|Shfus3hgN_9;p>{zbwneQF#A4l6;$H4)#Fdt%P6~ofMYGAq8C^JdWcwUuCYU zEfZm?L3MUXLmG;zlo|MfW>4hcd0x@@udHFs6m)cH=Xf+DOYUEvNN9|So}g&-Wy>9t z&2~L0U?HG32&aIjm~XBx-7(^`5KbF*yTTb0inog=rCSvJ8z@i59I|Na!*Q_6&O+n& z5WK?_kh;|dKK7fMooz)8>po4+_D9-a-8ysUNjn#AGCUh$&0RUP@#y^qV)f=(^kWKFQg-Vm}P4ZpGjG$ zVPM3xk9z4gK$q5woe|rvExwR0e8(4=fHmp>bywWlHz%!tb?WW{aIVO-T5n5dF5XSW zdDUO59 zmA9NrET*-6R%AMc!!{OVUvCfVsZ6fgVL*MwoQP=Kc`uY)GH;h?a!*YhdBa)*U#@VK zt_aV=_Sivl4M>+eZ$-n@dtTGU#?_ZqsLivj_9oxX*VYrqhSpv*jGo4!H^_t#O2oIb zT~CC{@$`L=PK{L;v{|r-kM6%{rmjUX*+4_Gs&a8EF<&(Kk+ohf)>Y=U@Mo=};U*sY zZig?PN1YKBwH*cQnNJ6aR7VkkTHl^xYW=4IbX(1fonB{cYi5sbJ6`GUe)8)ESAa3d7`UgF48NNLAsdQSi9IXpXHb7&= zX308#ObnCUepYIUBUAHLV6VB&;`ycC3kls%N;T%N!EeyPuY`(e1=V&i$At#8Vmm8b z(N4vix!G0y9!}XEI%gJK5%Mjvzic{1e)JJ-oMC^ zhdep)UeX%E57_VfiA6wZ)kx)MIJqWNRk-^cvx-+8&YK<6~vw zlDX$N;vPFHu0gGO@$lgY4<@>kag>ZLW>^jMMVAs0y(%k&X(Ide>dKk3{r&C|G2(Tj zAM&8CxDreAJj1y>yf;$r3=Lr=f)tf^pspnkeOB# z`-k)~3{k*wG~pV+N~G{TLT`>GXb&0ibjgxA&R3X7H23~9 zS=MS3y#EA*VJcNbph&+ag4zFfRi60NTn zOzoU{`>bbAjdr@Yc69WKa`>L7oZ~>cp!z4^-rr=%TVD*CLr*$qCNtn-ot|*?uO!|S zO}-H?F6i($3Lb!SOwGHo=Yug z%U!M~&-M061MH0dmf8?L2VvZzn;vkL*Hrbfgn=1lVgW1`L)z)O;i5(}^YZNE%F(nD zBa!gEr5bk~WV0`MN?EHFzjqt3EG1Y=aO{mlS`LO#_{l%`Vj(2o>(CAVXg#s9i?Y|* z-OHY`E9ti_?M_fc#?I2%qmAPNE&ma)Qk2v`m%Gzb$RAzJ;c6ML^QmqlHOsbdgH|*O z)v}j@c`>`v*R8*4Ecsx%@C*vE2T7t6m^9&ysoq8-s_^k0w5gu}3S7_#;3-zf5#e4C z5>6>sFZo2j^+|%Hy4J5wr|ecq4liL>|5cpokm(8MzJu)s^T@P3 zMz!K`48j-(0$#qfG?S=PA%ELuG*Is7P2SljeYgQ()i~+hY5hT=Z8=S!0^J`5m9@wU zi->1MEBfRRM?C7kgyqY~V3SEHFvQH?yv@DOxlwGR9y1tSn62TH$)jf+vQaII^XPF?CLBWMY?n@ zmf_5?S)Q>Joc$zob3C6Qc#n7Y|3?VWu2>`VF6q{KkZ7NbIPqf$H+#=ak*4ZHhCO~%ArF;0`zRPbX-UH6VX{dg`H+BC#5Dp-maLklwj*gh}Wb~FO z=lq`hnMSW>dnJ3Sv%1mdl+&+dxZi_S8qJ!^n`SfHik@e^{pYn6PV`?}vHi|QO4aPI zurmndQm+N({MG?r6WS0tbA6S^)B$aF<^;k2%&r;zbedlV?cP zhRmvnmajSot+PF-cG)5n=dm07iexm1fkV+JLdTmA>=VLE7w}i*Jf>Gy8CY<(zJP>O|h6m)?y@S-*(?IoN-fT)PH6yS|dcqCWSA z)qs9?m&ECUa{8Os;L%tw33Vhp^y8W?^U5wIMU%Nw|fpd~LAG%4jd75F| z`PA9`KFtY_47oISh^dkbUPdRqlqwt7wHusdTT1MxOejQLRuJi&7Qt?aAlg5ti{f@a zn5oUY3{s>SvjvI0+Gd3s@NQc>|aS&iD=k{lGCw zdU3BqhlxnYC`~mFKhi!CQDW~v#XNld%M-geAM0W%uS4FAL~9h!J`MI=h|x6P2@(Qd z{r5MI!Ec~c8`s9eLHwz9iiYFd9;?kIAU}(+$dY6G+urm0!w&<6y z(fhX!#y)WOc-iWMD1(dyyjV$&gXiiHk!Z>%R(?3+eun3!VEOW9LaSQrSjF#ce&e9` z-{uHOUKwZ_?iA0lcc;)MVuXW@by7LAJS z_kIqO(06Y}(CyQ)R|&)ZHI^TL@jP$3?fQ!RKRzK*B6()VYHt2NKOrGwBqN(R-4*ut zv%u4(PEj_drlYPLO!B|21<}*{%Ze-C`K?>uUjw~3{r!)0!-^M~&C_Gn4}m|@_o4T4 I?&v@LKN}~9qyPW_ literal 0 HcmV?d00001 diff --git a/documentation/src/images/qoqo_program_schematics.png b/documentation/src/images/qoqo_program_schematics.png new file mode 100644 index 0000000000000000000000000000000000000000..5922e86a357510d8a99430d1434293446489cf10 GIT binary patch literal 172848 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≻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 literal 0 HcmV?d00001 diff --git a/documentation/src/installation.md b/documentation/src/installation.md new file mode 100644 index 000000000..dca59f10c --- /dev/null +++ b/documentation/src/installation.md @@ -0,0 +1,49 @@ +# Installation + +## qoqo + +qoqo is available on PyPi, both as a pre-built Python wheel for common architectures (windows/linux/macos on x86) and as a source distribution. + +For pre-built wheels you can install qoqo with a simple pip command + +```bash +pip install qoqo +``` + +If no pre-built python wheel is available for your architecture you can install qoqo from the source distribution using a rust toolchain (for example available via rustup) and maturin (also available via pip). After installing the rust toolchain and maturing run the same pip install command as above. In some cases on macOS it can be necessary to provide specific linker arguments as shown below: + +```shell +# can be necessary on macOS +RUSTFLAGS="-C link-arg=-undefined -C link-arg=dynamic_lookup" pip install qoqo +``` + +When using qoqo in a rust project providing a python interface add + +```TOML +qoqo = {version="1.0", default-features=false} +``` + +to the `[dependencies]` section of the project Cargo.toml. + +Alternatively one can check out the latest tagged version from github and use the maturin tool to build a python package for qoqo locally and install it via pip. Please note that the package should be built from the top level directory of the workspace selecting the qoqo package with the -m qoqo/Cargo.toml option. + +```shell +maturin build -m qoqo/Cargo.toml --release +pip install target/wheels/ +``` + +Specifically for macOS on Apple Silicon the following build command should be used: + +```shell +RUSTFLAGS="-C link-arg=-undefined -C link-arg=dynamic_lookup" maturin build -m qoqo/Cargo.toml --release +pip install target/wheels/$NAME_OF_WHEEL +``` +## roqoqo + +To use roqoqo in a Rust project simply add + +```toml +roqoqo = "1.4" +``` + +to the `[dependencies]` section in your Cargo.toml. diff --git a/documentation/src/introduction.md b/documentation/src/introduction.md new file mode 100644 index 000000000..5739b2ec9 --- /dev/null +++ b/documentation/src/introduction.md @@ -0,0 +1,68 @@ +# Introduction + +**Welcome to the user documentation for the qoqo/roqoqo quantum computing toolkit.** + +This user documentation gives a general overview of the design principles and intended usage scenarios for qoqo and roqoqo. For a detailed description of all the types and functions, see the API-documentation of [roqoqo](https://docs.rs/roqoqo/) and [qoqo](https://hqsquantumsimulations.github.io/qoqo/). + +## What are qoqo and roqoqo + +The qoqo and roqoqo packages are a pair of quantum computing toolkits by [HQS Quantum Simulations](https://quantumsimulations.de). + +Like many quantum toolkits, qoqo and roqoqo are circuit-based toolkits, at the core. A sequence of operations to be run on a quantum computer is grouped into a [quantum circuit](circuits/intro.md). + +In the majority of quantum computing applications, the output of several quantum circuits needs to be collected and processed using additional classical measurement input, in order to construct a usable measurement result (e.g. when using a quantum computer to simulate physical quantum systems). + +qoqo and roqoqo also provide tools to group quantum circuits and measurement input into a [QuantumProgram](high-level/intro.md). QuantumPrograms are designed as a high-level interface to quantum computations that can be used similar to standard function calls. +QuantumPrograms accept floating point inputs, can be serialized, and only need qoqo/roqoqo and a simulator or a hardware backend to be executed. + +### What roqoqo/qoqo is + +* A toolkit to represent quantum operations and circuits +* A tool to package quantum circuits and classical information into quantum programs +* A way to serialize quantum programs +* A set of optional interfaces to devices, simulators and toolkits (e.g. [qoqo_quest](https://github.com/HQSquantumsimulations/qoqo-quest), [qoqo_mock](https://github.com/HQSquantumsimulations/qoqo_mock), [qoqo_qasm](https://github.com/HQSquantumsimulations/qoqo_qasm)) + +### What roqoqo/qoqo is **not** + +* A decomposer translating circuits to a specific set of gates +* A quantum circuit optimizer +* A collection of quantum algorithms + +### qoqo vs roqoqo + +roqoqo is the core implementation of the toolkit. It is written in Rust. +qoqo is the Python interface to roqoqo and provides operations, Circuit, measurements and QuantumProgram from roqoqo in the Python environment. + +## Architecture + +roqoqo has several components: + +* Operations and Circuit (see [Quantum Circuits](circuits/intro.md)) +* Measurements and QuantumProgram (see [High-Level Interface: Quantum Programs](high-level/intro.md)) +* Backends (see [Backends](backends.md)) +* Devices (see [Devices](devices.md)) + +Operations and Circuit can be used to represent single quantum circuits that run on quantum hardware. + +Measurements and QuantumProgram combine several circuits with classical information, to provide a high-level interface for running quantum programs that yield an immediately usable result. + +To execute quantum circuits or quantum programs, a backend connecting to quantum hardware or a simulator is required. +qoqo/roqoqo does not directly implement these backends. To minimize dependencies, backends are implemented in separate packages (e.g. `qoqo-quest`). +In the `backends` module roqoqo provides an interface description for backends with the `EvaluatingBackend` Rust trait. + +When compiling quantum circuits, it is often necessary to know the topology of a target quantum device. Device properties can also be used by backends, for example to accurately simulate a given quantum device. +qoqo/roqoqo defines an interface for obtaining the device topology and the noise properties. The interface is defined by roqoqo's `Device` trait. Additionally qoqo/roqoqo provides some simple devices that can be used to quickly define simple device topologies. + +The following schematic shows how the different components are related when running a quantum program: + +![Relation between qoqo/roqoqo components](images/qoqo_program_schematics.png) + +The circuit compilation use cases can be visualized in a similar way: + +![Compilation use case](images/qoqo_compilation_schematics.png) + +### API Documentation + +The API documentation can be found at the following link: + + - [Python API](https://hqsquantumsimulations.github.io/qoqo/python_api_docs/qoqo/index.html) diff --git a/documentation/src/noise_models.md b/documentation/src/noise_models.md new file mode 100644 index 000000000..da230ebf6 --- /dev/null +++ b/documentation/src/noise_models.md @@ -0,0 +1,144 @@ +# Noise Models + +When working with quantum computers it is often necessary to know the physical noise present of a target quantum device, particularly for NISQ devices. In roqoqo/qoqo, we have defined the three following noise models: + +* `ContinuousDecoherenceModel` +* `DecoherenceOnGateModel` +* `ImperfectReadout` + +All of the noise models use builder patterns for the setting and adding functions, in order to be easier to chain for the user. + +## ContinuousDecoherenceModel + +The `ContinuousDecoherenceModel` is the noise model representing a continuous decoherence process on qubits. This noise model assumes that all qubits are constantly experiencing decoherence over time (e.g. due to coupling to the environment). The noise for each qubit can be different but only single qubit noise is included in the model. + +Noise is given by the rates of the Lindblad equation. The Lindblad equation is a so-called master equation for the time evolution of a density matrix. For the example of a single qubit the non-coherent part of the Lindblad equation can take the following form: +\\[ + \frac{d}{dt}\rho = \sum_{i,j=0}^{2} M_{i,j} L_{i} \rho L_{j}^{\dagger} - \frac{1}{2} \{ L_{j}^{\dagger} L_i \rho \}, +\\], +where the indices i and j run from 0 to 2 and with \\( L_0 = \sigma^{+}\\), \\( L_1 = \sigma^{-}\\) and \\(L_3 = \sigma^{z}\\). + +Here the general incoherent part of the Lindblad equation is internally represented by a [struqture::spins::PlusMinusLindbladNoiseOperator]. + +To create a complex decoherence model first create the Lindblad noise and then turn it into a ContinuousDecoherenceModel. For a simple decoherence model, use new to create an empty model and use the `add_damping`, `add_excitation`, `add_depolarising` and `add_dephasing` methods. For more fine control access the internal `lindblad_noise` directly and modify it. + +```rust +use struqture::{spins::PlusMinusProduct, SpinIndex, OperateOnDensityMatrix}; +use roqoqo::noise_models::ContinuousDecoherenceModel; +// Create the noise model +let mut continuous_model = ContinuousDecoherenceModel::new(); + +continuous_model = continuous_model.add_damping_rate(vec![0, 1, 2], 0.001).unwrap(); +continuous_model = continuous_model.add_dephasing_rate(vec![0, 1, 2], 0.0005).unwrap(); +continuous_model = continuous_model.add_depolarising_rate(vec![0, 1, 2], 0.0001).unwrap(); +continuous_model = continuous_model.add_excitation_rate(vec![0, 1, 2], 0.006).unwrap(); + +// Access the underlying struqture operator +let mut lindblad_noise = continuous_model.lindblad_noise; +lindblad_noise.add_operator_product((PlusMinusProduct::new().plus(0), PlusMinusProduct::new().plus(0)), 0.1.into()).unwrap(); + +// Create a new continuous model from modified lindblad noise +let new_continuous = ContinuousDecoherenceModel::from(lindblad_noise); +``` + +```python +from qoqo import noise_models +import numpy as np + +continuous_model = noise_models.ContinuousDecoherenceModel() +continuous_model = continuous_model.add_damping_rate([0, 1, 2], 0.001) +continuous_model = continuous_model.add_dephasing_rate([0, 1, 2], 0.0005) +continuous_model = continuous_model.add_depolarising_rate([0, 1, 2], 0.0001) +continuous_model = continuous_model.add_excitation_rate([0, 1, 2], 0.0006) + +# Access the underlying struqture operator +lindblad_noise = continuous_model.get_noise_operator() +lindblad_noise.add_operator_product(("0+", "0+"), 0.1) +new_continuous_model = noise_models.ContinuousDecoherenceModel(lindblad_noise) +``` + +For further details of the `ContinuousDecoherenceModel` trait please refer to the API documentation of [roqoqo::noise_models](https://docs.rs/roqoqo/latest/roqoqo/noise_models/index.html) (Rust core) + +## DecoherenceOnGateModel + +The `DecoherenceOnGateModel` is the error model for noise that is only present on gate executions.Adds additional noise when specific gates (identified by hqslang name and qubits acted on) are executed. The noise is given in the form of a [struqture::spins::PlusMinusLindbladNoiseOperator] the same way it is for the ContinuousDecoherence model. + +To create a complex decoherence model, first create the Lindblad noise and then turn it into a DecoherenceOnGateModel. For a simple decoherence model, use new to create an empty model and use the `set_single_qubit_gate_error`, `set_two_qubit_gate_error`, `set_three_qubit_gate_error` and `set_multi_qubit_gate_error` methods. For more fine control access the internal `lindblad_noise` directly and modify it. + +```rust +use struqture::{spins::{PlusMinusProduct, PlusMinusLindbladNoiseOperator}, SpinIndex, OperateOnDensityMatrix}; +use roqoqo::noise_models::DecoherenceOnGateModel; + +let mut noise_model = DecoherenceOnGateModel::new(); +let mut lindblad_noise = PlusMinusLindbladNoiseOperator::new(); +lindblad_noise.add_operator_product( + (PlusMinusProduct::new().z(0), PlusMinusProduct::new().z(0)), + 0.9.into(),).unwrap(); +lindblad_noise.add_operator_product( + (PlusMinusProduct::new().z(1), PlusMinusProduct::new().z(1)), + 0.9.into(),).unwrap(); + +noise_model = noise_model.set_two_qubit_gate_error( + "CNOT", 0,1, + lindblad_noise +); +``` + +```python +from qoqo import noise_models +from struqture_py.spins import PlusMinusLindbladNoiseOperator, PlusMinusProduct +import numpy as np + +noise_model = noise_models.DecoherenceOnGateModel() +lindblad_noise = PlusMinusLindbladNoiseOperator() +lindblad_noise.add_operator_product( + (PlusMinusProduct().z(0), PlusMinusProduct().z(0)), + 0.9) +lindblad_noise.add_operator_product( + (PlusMinusProduct().z(1), PlusMinusProduct().z(1)), + 0.9) + +noise_model = noise_model.set_two_qubit_gate_error( + "CNOT", 0,1, + lindblad_noise +) +``` + +For further details of the `DecoherenceOnGateModel` trait please refer to the API documentation of [roqoqo::noise_models](https://docs.rs/roqoqo/latest/roqoqo/noise_models/index.html) (Rust core) + +## ImperfectReadoutModel + +The `ImperfectReadoutModel` is the noise model representing readout errors. This noise model assumes that all qubits are constantly experiencing decoherence over time (e.g. due to coupling to the environment). + +Readout errors are modeled by two probabilities in this simple model. One probability to detect a 1 instead of a 0 when the quantum measurement gives 0 and one probability to detect a 0 instead of a 1 when the quantum measurement gives 1. + +To create an ImperfectReadoutModel, use new to create an empty model and use the `set_error_probabilites` method, or use the `new_with_uniform_error` method. + +```rust +use roqoqo::noise_models::ImperfectReadoutModel; +// Create the noise model +let model = ImperfectReadoutModel::new_with_uniform_error(3, 0.5, 0.5).unwrap(); +let model = model.set_error_probabilites(2, 0.3, 0.7).unwrap(); +let uniform_prob = model.prob_detect_0_as_1(&0); +assert_eq!(uniform_prob, 0.5); +let lower_prob = model.prob_detect_0_as_1(&2); +assert_eq!(lower_prob, 0.3); +let higher_prob = model.prob_detect_1_as_0(&2); +assert_eq!(higher_prob, 0.7); +``` + +```python +from qoqo import noise_models +import numpy as np + +model = noise_models.ImperfectReadoutModel.new_with_uniform_error(3, 0.5, 0.5) +model = model.set_error_probabilites(2, 0.3, 0.7) +uniform_prob = model.prob_detect_0_as_1(0) +assert uniform_prob == 0.5 +lower_prob = model.prob_detect_0_as_1(2) +assert lower_prob == 0.3 +higher_prob = model.prob_detect_1_as_0(2) +assert higher_prob == 0.7 +``` + +For further details of the `ImperfectReadoutModel` trait please refer to the API documentation of [roqoqo::noise_models](https://docs.rs/roqoqo/latest/roqoqo/noise_models/index.html) (Rust core) diff --git a/documentation/src/python_api_docs/.placeholder b/documentation/src/python_api_docs/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/qoqo-macros/Cargo.toml b/qoqo-macros/Cargo.toml index e7edd20fd..1046ae367 100644 --- a/qoqo-macros/Cargo.toml +++ b/qoqo-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "qoqo-macros" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" readme = "../README.md" diff --git a/qoqo/Cargo.toml b/qoqo/Cargo.toml index fdd74f35e..8b489239c 100644 --- a/qoqo/Cargo.toml +++ b/qoqo/Cargo.toml @@ -1,5 +1,5 @@ [package] -version = "1.16.1" +version = "1.16.2" name = "qoqo" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" diff --git a/qoqo/pyproject.toml b/qoqo/pyproject.toml index e33da5224..c7e3fc804 100644 --- a/qoqo/pyproject.toml +++ b/qoqo/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "qoqo" -version = "1.16.1" +version = "1.16.2" dependencies = ['numpy', 'qoqo_calculator_pyo3>=1.2, <1.3'] license = { text = "Apache-2.0 AND Apache-2.0 with LLVM-exception AND MIT AND Unicode-DFS-2016 AND BSD-2-Clause AND BSD-3-CLause" } maintainers = [ diff --git a/qoqo/python/qoqo/DEPENDENCIES b/qoqo/python/qoqo/DEPENDENCIES index 0ea480e90..58411fe88 100644 --- a/qoqo/python/qoqo/DEPENDENCIES +++ b/qoqo/python/qoqo/DEPENDENCIES @@ -4,6 +4,35 @@ https://github.com/gimli-rs/addr2line by A cross-platform symbolication library written in Rust, using `gimli` License: Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016-2018 The gimli Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -209,11 +238,32 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +adler2 2.0.0 +https://github.com/oyvindln/adler2 +by Jonas Schievink , oyvindln +A simple clean-room implementation of the Adler-32 checksum +License: 0BSD OR MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-0BSD: + +Copyright (C) Jonas Schievink + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016-2018 The gimli Developers - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -238,13 +288,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -adler2 2.0.0 -https://github.com/oyvindln/adler2 -by Jonas Schievink , oyvindln -A simple clean-room implementation of the Adler-32 checksum -License: 0BSD OR MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -450,25 +493,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-0BSD: - -Copyright (C) Jonas Schievink - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN -AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +==================================================== +ahash 0.8.11 +https://github.com/tkaitchuck/ahash +by Tom Kaitchuck +A non-cryptographic hash function using AES-NI for high performance +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2018 Tom Kaitchuck + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -493,13 +529,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -ahash 0.8.11 -https://github.com/tkaitchuck/ahash -by Tom Kaitchuck -A non-cryptographic hash function using AES-NI for high performance -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -705,42 +734,38 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +aho-corasick 1.1.3 +https://github.com/BurntSushi/aho-corasick +by Andrew Gallant +Fast multiple substring searching. +License: Unlicense OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2018 Tom Kaitchuck +The MIT License (MIT) -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: +Copyright (c) 2015 Andrew Gallant -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -==================================================== -aho-corasick 1.1.3 -https://github.com/BurntSushi/aho-corasick -by Andrew Gallant -Fast multiple substring searching. -License: Unlicense OR MIT ---------------------------------------------------- UNLICENSE: @@ -769,31 +794,6 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to ----------------------------------------------------- -LICENSE-MIT: - -The MIT License (MIT) - -Copyright (c) 2015 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ---------------------------------------------------- COPYING: @@ -808,6 +808,33 @@ https://github.com/dtolnay/anyhow by David Tolnay Flexible concrete Error type built on std::error::Error License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -988,33 +1015,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== approx 0.5.1 @@ -1235,6 +1235,35 @@ https://github.com/cuviper/autocfg by Josh Stone Automatic cfg for Rust compiler features License: Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2018 Josh Stone + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -1440,10 +1469,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +backtrace 0.3.74 +https://github.com/rust-lang/backtrace-rs +by The Rust Project Developers +A library to acquire a stack trace (backtrace) at runtime in a Rust program. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2018 Josh Stone +Copyright (c) 2014 Alex Crichton Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -1469,14 +1506,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -backtrace 0.3.74 -https://github.com/rust-lang/backtrace-rs -by The Rust Project Developers -A library to acquire a stack trace (backtrace) at runtime in a Rust program. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -1682,42 +1711,38 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +base64 0.22.1 +https://github.com/marshallpierce/rust-base64 +by Marshall Pierce +encodes and decodes base64 as bytes or utf8 +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 Alex Crichton +The MIT License (MIT) -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: +Copyright (c) 2015 Alice Maz -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -==================================================== -base64 0.22.1 -https://github.com/marshallpierce/rust-base64 -by Marshall Pierce -encodes and decodes base64 as bytes or utf8 -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -1923,31 +1948,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -The MIT License (MIT) - -Copyright (c) 2015 Alice Maz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ==================================================== bincode 1.3.3 @@ -1987,6 +1987,35 @@ https://github.com/contain-rs/bit-set by Alexis Beingessner A set of bits License: MIT/Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016 The Rust Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -2192,10 +2221,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +bit-vec 0.6.3 +https://github.com/contain-rs/bit-vec +by Alexis Beingessner +A vector of bits +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016 The Rust Project Developers +Copyright (c) 2015 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -2221,13 +2257,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -bit-vec 0.6.3 -https://github.com/contain-rs/bit-vec -by Alexis Beingessner -A vector of bits -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -2433,10 +2462,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +bitflags 2.6.0 +https://github.com/bitflags/bitflags +by The Rust Project Developers +A macro to generate structures which behave like bitflags. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 The Rust Project Developers +Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -2462,14 +2499,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -bitflags 2.6.0 -https://github.com/bitflags/bitflags -by The Rust Project Developers -A macro to generate structures which behave like bitflags. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -2675,35 +2704,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2014 The Rust Project Developers - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== borrow-or-share 0.2.2 @@ -2739,6 +2739,35 @@ https://github.com/fitzgen/bumpalo by Nick Fitzgerald A fast bump allocation arena for Rust. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2019 Nick Fitzgerald + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -2944,35 +2973,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2019 Nick Fitzgerald - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== bytecount 0.6.8 @@ -2980,6 +2980,29 @@ https://github.com/llogiq/bytecount by Andre Bogus , Joshua Landau count occurrences of a given byte, or the number of UTF-8 code points, in a byte slice, fast License: Apache-2.0/MIT +---------------------------------------------------- +LICENSE.MIT: + +Copyright (c) 2017 The bytecount Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + ---------------------------------------------------- LICENSE.Apache2: @@ -3185,36 +3208,26 @@ LICENSE.Apache2: See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE.MIT: - -Copyright (c) 2017 The bytecount Developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ==================================================== -bytemuck 1.19.0 +bytemuck 1.20.0 https://github.com/Lokathor/bytemuck by Lokathor A crate for mucking around with piles of bytes. License: Zlib OR Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +MIT License + +Copyright (c) 2019 Daniel "Lokathor" Gee. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-ZLIB: @@ -3295,19 +3308,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -MIT License - -Copyright (c) 2019 Daniel "Lokathor" Gee. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ==================================================== byteorder 1.5.0 @@ -3315,6 +3315,31 @@ https://github.com/BurntSushi/byteorder by Andrew Gallant Library for reading/writing numbers in big-endian and little-endian. License: Unlicense OR MIT +---------------------------------------------------- +LICENSE-MIT: + +The MIT License (MIT) + +Copyright (c) 2015 Andrew Gallant + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + ---------------------------------------------------- UNLICENSE: @@ -3343,31 +3368,6 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to ----------------------------------------------------- -LICENSE-MIT: - -The MIT License (MIT) - -Copyright (c) 2015 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ---------------------------------------------------- COPYING: @@ -3421,6 +3421,35 @@ parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted. License: MIT/Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2014 Alex Crichton + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -3626,11 +3655,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +displaydoc 0.2.5 +https://github.com/yaahc/displaydoc +by Jane Lusby +A derive macro for implementing the display Trait via a doc comment and string interpolation + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 Alex Crichton - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -3655,14 +3690,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -displaydoc 0.2.5 -https://github.com/yaahc/displaydoc -by Jane Lusby -A derive macro for implementing the display Trait via a doc comment and string interpolation - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -3868,6 +3895,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +dyn-clone 1.0.17 +https://github.com/dtolnay/dyn-clone +by David Tolnay +Clone trait that is object-safe +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -3895,13 +3929,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -dyn-clone 1.0.17 -https://github.com/dtolnay/dyn-clone -by David Tolnay -Clone trait that is object-safe -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -4082,9 +4109,19 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +either 1.13.0 +https://github.com/rayon-rs/either +by bluss +The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2015 + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -4109,14 +4146,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -either 1.13.0 -https://github.com/rayon-rs/either -by bluss -The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -4322,35 +4351,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2015 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== email_address 0.2.9 @@ -4390,6 +4390,35 @@ https://github.com/cuviper/equivalent by Traits for key comparison in maps. License: Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016--2023 + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -4595,35 +4624,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2016--2023 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== fancy-regex 0.13.0 @@ -4663,6 +4663,35 @@ https://github.com/petgraph/fixedbitset by bluss FixedBitSet is a simple bitset collection License: MIT/Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2015-2017 + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -4868,35 +4897,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2015-2017 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== fluent-uri 0.3.2 @@ -4935,6 +4935,35 @@ https://github.com/servo/rust-fnv by Alex Crichton Fowler–Noll–Vo hash function License: Apache-2.0 / MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2017 Contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -5140,10 +5169,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +form_urlencoded 1.2.1 +https://github.com/servo/rust-url +by The rust-url developers +Parser and serializer for the application/x-www-form-urlencoded syntax, as used by HTML forms. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2017 Contributors +Copyright (c) 2013-2016 The rust-url developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -5169,13 +5205,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -form_urlencoded 1.2.1 -https://github.com/servo/rust-url -by The rust-url developers -Parser and serializer for the application/x-www-form-urlencoded syntax, as used by HTML forms. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -5381,10 +5410,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +fraction 0.15.3 +https://github.com/dnsl48/fraction.git +by dnsl48 +Lossless fractions and decimals; drop-in float replacement +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2013-2016 The rust-url developers +Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -5410,13 +5446,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -fraction 0.15.3 -https://github.com/dnsl48/fraction.git -by dnsl48 -Lossless fractions and decimals; drop-in float replacement -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -5622,10 +5651,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-channel 0.3.31 +https://rust-lang.github.io/futures-rs +by +Channels for asynchronous communication using futures-rs. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 The Rust Project Developers +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -5651,14 +5689,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-channel 0.3.31 -https://rust-lang.github.io/futures-rs -by -Channels for asynchronous communication using futures-rs. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -5865,6 +5895,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-core 0.3.31 +https://rust-lang.github.io/futures-rs +by +The core traits and types in for the `futures` library. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -5895,14 +5933,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-core 0.3.31 -https://rust-lang.github.io/futures-rs -by -The core traits and types in for the `futures` library. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -6109,6 +6139,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-io 0.3.31 +https://rust-lang.github.io/futures-rs +by +The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -6139,14 +6177,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-io 0.3.31 -https://rust-lang.github.io/futures-rs -by -The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -6353,6 +6383,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-sink 0.3.31 +https://rust-lang.github.io/futures-rs +by +The asynchronous `Sink` trait for the futures-rs library. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -6383,14 +6421,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-sink 0.3.31 -https://rust-lang.github.io/futures-rs -by -The asynchronous `Sink` trait for the futures-rs library. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -6597,6 +6627,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-task 0.3.31 +https://rust-lang.github.io/futures-rs +by +Tools for working with tasks. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -6627,14 +6665,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-task 0.3.31 -https://rust-lang.github.io/futures-rs -by -Tools for working with tasks. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -6841,6 +6871,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +futures-util 0.3.31 +https://rust-lang.github.io/futures-rs +by +Common utilities and extension traits for the futures-rs library. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -6871,14 +6909,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -futures-util 0.3.31 -https://rust-lang.github.io/futures-rs -by -Common utilities and extension traits for the futures-rs library. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -7085,11 +7115,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +getrandom 0.2.15 +https://github.com/rust-random/getrandom +by The Rand Project Developers +A small cross-platform library for retrieving random data from system source +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright (c) 2018-2024 The rust-random Project Developers +Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -7115,13 +7152,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -getrandom 0.2.15 -https://github.com/rust-random/getrandom -by The Rand Project Developers -A small cross-platform library for retrieving random data from system source -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -7327,11 +7357,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +gimli 0.31.1 +https://github.com/gimli-rs/gimli +by +A library for reading and writing the DWARF debugging format. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2018-2024 The rust-random Project Developers -Copyright (c) 2014 The Rust Project Developers +Copyright (c) 2015 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -7357,13 +7393,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -gimli 0.31.1 -https://github.com/gimli-rs/gimli -by -A library for reading and writing the DWARF debugging format. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -7569,10 +7598,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +hashbrown 0.15.2 +https://github.com/rust-lang/hashbrown +by Amanieu d'Antras +A Rust port of Google's SwissTable hash map +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 The Rust Project Developers +Copyright (c) 2016 Amanieu d'Antras Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -7598,13 +7634,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -hashbrown 0.15.1 -https://github.com/rust-lang/hashbrown -by Amanieu d'Antras -A Rust port of Google's SwissTable hash map -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -7810,10 +7839,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +heck 0.4.1 +https://github.com/withoutboats/heck +by Without Boats +heck is a case conversion library. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016 Amanieu d'Antras +Copyright (c) 2015 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -7839,13 +7875,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -heck 0.4.1 -https://github.com/withoutboats/heck -by Without Boats -heck is a case conversion library. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -8051,11 +8080,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +hermit-abi 0.3.9 +https://github.com/hermit-os/hermit-rs +by Stefan Lankes +Hermit system calls definitions. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 The Rust Project Developers - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -8080,13 +8114,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -hermit-abi 0.3.9 -https://github.com/hermit-os/hermit-rs -by Stefan Lankes -Hermit system calls definitions. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -8292,9 +8319,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +http 1.1.0 +https://github.com/hyperium/http +by Alex Crichton , Carl Lerche , Sean McArthur +A set of types for representing HTTP requests and responses. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2017 http-rs authors + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -8319,14 +8356,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -http 1.1.0 -https://github.com/hyperium/http -by Alex Crichton , Carl Lerche , Sean McArthur -A set of types for representing HTTP requests and responses. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -8532,35 +8561,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2017 http-rs authors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== http-body 1.0.1 @@ -8642,6 +8642,30 @@ https://github.com/seanmonstar/httparse by Sean McArthur A tiny, safe, speedy, zero-copy HTTP/1.x parser. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2015-2024 Sean McArthur + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + ---------------------------------------------------- LICENSE-APACHE: @@ -8847,36 +8871,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2015-2024 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - ==================================================== -hyper 1.5.0 +hyper 1.5.1 https://hyper.rs by Sean McArthur -A fast and correct HTTP library. +A protective and efficient HTTP library for all. License: MIT ---------------------------------------------------- LICENSE: @@ -9508,6 +9508,35 @@ https://github.com/servo/rust-url/ by The rust-url developers IDNA (Internationalizing Domain Names in Applications) and Punycode. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2013-2022 The rust-url developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -9713,10 +9742,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +idna_adapter 1.2.0 +https://docs.rs/crate/idna_adapter/latest +by The rust-url developers +Back end adapter for idna +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2013-2022 The rust-url developers +Copyright (c) The rust-url developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -9742,13 +9778,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -idna_adapter 1.2.0 -https://docs.rs/crate/idna_adapter/latest -by The rust-url developers -Back end adapter for idna -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -9954,10 +9983,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +indexmap 2.6.0 +https://github.com/indexmap-rs/indexmap +by +A hash table with consistent order and fast iteration. +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) The rust-url developers +Copyright (c) 2016--2017 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -9983,13 +10019,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -indexmap 2.6.0 -https://github.com/indexmap-rs/indexmap -by -A hash table with consistent order and fast iteration. -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -10195,11 +10224,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +indoc 2.0.5 +https://github.com/dtolnay/indoc +by David Tolnay +Indented document literals +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016--2017 - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -10224,13 +10258,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -indoc 2.0.5 -https://github.com/dtolnay/indoc -by David Tolnay -Indented document literals -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -10411,6 +10438,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +inventory 0.3.15 +https://github.com/dtolnay/inventory +by David Tolnay +Typed distributed plugin registration +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -10438,13 +10472,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -inventory 0.3.15 -https://github.com/dtolnay/inventory -by David Tolnay -Typed distributed plugin registration -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -10625,33 +10652,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== ipnet 2.10.1 @@ -10659,6 +10659,17 @@ https://github.com/krisprice/ipnet by Kris Price Provides types and useful methods for working with IPv4 and IPv6 network addresses, commonly called IP prefixes. The new `IpNet`, `Ipv4Net`, and `Ipv6Net` types build on the existing `IpAddr`, `Ipv4Addr`, and `Ipv6Addr` types already provided in Rust's standard library and align to their design to stay consistent. The module also provides useful traits that extend `Ipv4Addr` and `Ipv6Addr` with methods for `Add`, `Sub`, `BitAnd`, and `BitOr` operations. The module only uses stable feature so it is guaranteed to compile using the stable toolchain. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright 2017 Juniper Networks, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -10864,17 +10875,6 @@ LICENSE-APACHE: See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright 2017 Juniper Networks, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ==================================================== itertools 0.12.1 @@ -10882,6 +10882,35 @@ https://github.com/rust-itertools/itertools by bluss Extra iterator adaptors, iterator methods, free functions, and macros. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2015 + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -11087,6 +11116,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +itertools 0.13.0 +https://github.com/rust-itertools/itertools +by bluss +Extra iterator adaptors, iterator methods, free functions, and macros. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -11116,13 +11152,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -itertools 0.13.0 -https://github.com/rust-itertools/itertools -by bluss -Extra iterator adaptors, iterator methods, free functions, and macros. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -11328,222 +11357,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2015 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== -itoa 1.0.11 +itoa 1.0.13 https://github.com/dtolnay/itoa by David Tolnay Fast integer primitive to string conversion License: MIT OR Apache-2.0 ----------------------------------------------------- -LICENSE-APACHE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - ---------------------------------------------------- LICENSE-MIT: @@ -11571,15 +11391,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -js-sys 0.3.72 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -Bindings for all JS global objects and functions in all JS environments like -Node.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -11760,31 +11571,15 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +==================================================== +js-sys 0.3.72 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +Bindings for all JS global objects and functions in all JS environments like +Node.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -11814,20 +11609,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -jsonschema 0.23.0 -https://github.com/Stranger6667/jsonschema-rs -by Dmitry Dygalo -JSON schema validaton library -License: MIT - -==================================================== -lazy_static 1.5.0 -https://github.com/rust-lang-nursery/lazy-static.rs -by Marvin Löbel -A macro for declaring lazily evaluated statics in Rust. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -12033,6 +11814,20 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +jsonschema 0.23.0 +https://github.com/Stranger6667/jsonschema-rs +by Dmitry Dygalo +JSON schema validaton library +License: MIT + +==================================================== +lazy_static 1.5.0 +https://github.com/rust-lang-nursery/lazy-static.rs +by Marvin Löbel +A macro for declaring lazily evaluated statics in Rust. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -12062,14 +11857,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -libc 0.2.161 -https://github.com/rust-lang/libc -by The Rust Project Developers -Raw FFI bindings to platform libraries like libc. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -12250,6 +12037,39 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +==================================================== +libc 0.2.164 +https://github.com/rust-lang/libc +by The Rust Project Developers +Raw FFI bindings to platform libraries like libc. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -12279,6 +12099,186 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------- +LICENSE-APACHE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + ==================================================== libm 0.2.11 @@ -12550,7 +12550,7 @@ Copyright notices are retained in src/* files where relevant. ==================================================== -litemap 0.7.3 +litemap 0.7.4 https://github.com/unicode-org/icu4x by The ICU4X Project Developers A key-value Map implementation based on a flat, sorted Vec. @@ -12612,6 +12612,35 @@ https://github.com/Amanieu/parking_lot by Amanieu d'Antras Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016 The Rust Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -12817,10 +12846,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +log 0.4.22 +https://github.com/rust-lang/log +by The Rust Project Developers +A lightweight logging facade for Rust + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016 The Rust Project Developers +Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -12846,14 +12883,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -log 0.4.22 -https://github.com/rust-lang/log -by The Rust Project Developers -A lightweight logging facade for Rust - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -13059,10 +13088,21 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +matrixmultiply 0.3.9 +https://github.com/bluss/matrixmultiply/ +by bluss, R. Janis Goldschmidt +General matrix multiplication for f32 and f64 matrices. Operates on matrices with general layout (they can use arbitrary row and column stride). Detects and uses AVX or SSE2 on x86 platforms transparently for higher performance. Uses a microkernel strategy, so that the implementation is easy to parallelize and optimize. + +Supports multithreading. +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 The Rust Project Developers +Copyright (c) 2016 - 2023 Ulrik Sverdrup "bluss" +Copyirhgt (c) 2018 R. Janis Goldschmidt +Copyright (c) 2021 DutchGhost [constparse.rs] Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -13088,15 +13128,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -matrixmultiply 0.3.9 -https://github.com/bluss/matrixmultiply/ -by bluss, R. Janis Goldschmidt -General matrix multiplication for f32 and f64 matrices. Operates on matrices with general layout (they can use arbitrary row and column stride). Detects and uses AVX or SSE2 on x86 platforms transparently for higher performance. Uses a microkernel strategy, so that the implementation is easy to parallelize and optimize. - -Supports multithreading. -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -13302,37 +13333,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2016 - 2023 Ulrik Sverdrup "bluss" -Copyirhgt (c) 2018 R. Janis Goldschmidt -Copyright (c) 2021 DutchGhost [constparse.rs] - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== memchr 2.7.4 @@ -13342,6 +13342,31 @@ Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for 1, 2 or 3 byte search and single substring search. License: Unlicense OR MIT +---------------------------------------------------- +LICENSE-MIT: + +The MIT License (MIT) + +Copyright (c) 2015 Andrew Gallant + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + ---------------------------------------------------- UNLICENSE: @@ -13370,31 +13395,6 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to ----------------------------------------------------- -LICENSE-MIT: - -The MIT License (MIT) - -Copyright (c) 2015 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ---------------------------------------------------- COPYING: @@ -13438,6 +13438,30 @@ https://github.com/hyperium/mime by Sean McArthur Strongly Typed Mimes License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2014 Sean McArthur + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + ---------------------------------------------------- LICENSE-APACHE: @@ -13643,10 +13667,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +miniz_oxide 0.8.0 +https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide +by Frommi , oyvindln +DEFLATE compression and decompression library rewritten in Rust based on miniz +License: MIT OR Zlib OR Apache-2.0 ---------------------------------------------------- -LICENSE-MIT: +LICENSE-MIT.md: -Copyright (c) 2014 Sean McArthur +MIT License + +Copyright (c) 2017 Frommi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -13655,25 +13688,42 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +---------------------------------------------------- +LICENSE: +MIT License + +Copyright (c) 2017 Frommi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. -==================================================== -miniz_oxide 0.8.0 -https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide -by Frommi , oyvindln -DEFLATE compression and decompression library rewritten in Rust based on miniz -License: MIT OR Zlib OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE.md: @@ -13855,31 +13905,6 @@ LICENSE-APACHE.md: END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE: - -MIT License - -Copyright (c) 2017 Frommi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ---------------------------------------------------- LICENSE-ZLIB.md: @@ -13895,31 +13920,6 @@ Permission is granted to anyone to use this software for any purpose, including 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------- -LICENSE-MIT.md: - -MIT License - -Copyright (c) 2017 Frommi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ==================================================== mio 1.0.2 @@ -14180,6 +14180,37 @@ https://github.com/rust-ndarray/ndarray by Ulrik Sverdrup "bluss", Jim Turner An n-dimensional array for general elements and for numerics. Lightweight array views and slicing; views support chunking and splitting. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2015 - 2021 Ulrik Sverdrup "bluss", + Jim Turner, + and ndarray developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -14385,12 +14416,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num 0.4.3 +https://github.com/rust-num/num +by The Rust Project Developers +A collection of numeric types and traits for Rust, including bigint, +complex, rational, range iterators, generic integers, and more! + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 - 2021 Ulrik Sverdrup "bluss", - Jim Turner, - and ndarray developers +Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -14416,15 +14454,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num 0.4.3 -https://github.com/rust-num/num -by The Rust Project Developers -A collection of numeric types and traits for Rust, including bigint, -complex, rational, range iterators, generic integers, and more! - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -14630,6 +14659,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num-bigint 0.4.6 +https://github.com/rust-num/num-bigint +by The Rust Project Developers +Big integer implementation for Rust +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -14659,13 +14695,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num-bigint 0.4.6 -https://github.com/rust-num/num-bigint -by The Rust Project Developers -Big integer implementation for Rust -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -14871,35 +14900,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2014 The Rust Project Developers - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== num-cmp 0.1.0 @@ -15308,6 +15308,35 @@ https://github.com/rust-num/num-complex by The Rust Project Developers Complex numbers implementation for Rust License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2014 The Rust Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -15513,6 +15542,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num-integer 0.1.46 +https://github.com/rust-num/num-integer +by The Rust Project Developers +Integer traits and functions +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -15542,13 +15578,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num-integer 0.1.46 -https://github.com/rust-num/num-integer -by The Rust Project Developers -Integer traits and functions -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -15754,6 +15783,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num-iter 0.1.45 +https://github.com/rust-num/num-iter +by The Rust Project Developers +External iterators for generic mathematics +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -15783,13 +15819,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num-iter 0.1.45 -https://github.com/rust-num/num-iter -by The Rust Project Developers -External iterators for generic mathematics -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -15995,6 +16024,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num-rational 0.4.2 +https://github.com/rust-num/num-rational +by The Rust Project Developers +Rational numbers implementation for Rust +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -16024,13 +16060,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num-rational 0.4.2 -https://github.com/rust-num/num-rational -by The Rust Project Developers -Rational numbers implementation for Rust -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -16236,6 +16265,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +num-traits 0.2.19 +https://github.com/rust-num/num-traits +by The Rust Project Developers +Numeric traits for generic mathematics +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -16265,13 +16301,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -num-traits 0.2.19 -https://github.com/rust-num/num-traits -by The Rust Project Developers -Numeric traits for generic mathematics -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -16477,35 +16506,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2014 The Rust Project Developers - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== numpy 0.21.0 @@ -16549,6 +16549,35 @@ https://github.com/gimli-rs/object by A unified interface for reading and writing object file formats. License: Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2015 The Gimli Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -16754,11 +16783,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +once_cell 1.20.2 +https://github.com/matklad/once_cell +by Aleksey Kladov +Single assignment cells and lazy values. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 The Gimli Developers - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -16783,13 +16817,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -once_cell 1.20.2 -https://github.com/matklad/once_cell -by Aleksey Kladov -Single assignment cells and lazy values. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -16995,33 +17022,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== outref 0.5.1 @@ -17060,6 +17060,35 @@ https://github.com/Amanieu/parking_lot by Amanieu d'Antras More compact and efficient implementations of the standard synchronization primitives. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016 The Rust Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -17265,6 +17294,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +parking_lot_core 0.9.10 +https://github.com/Amanieu/parking_lot +by Amanieu d'Antras +An advanced API for creating custom synchronization primitives. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -17294,13 +17330,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -parking_lot_core 0.9.10 -https://github.com/Amanieu/parking_lot -by Amanieu d'Antras -An advanced API for creating custom synchronization primitives. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -17506,11 +17535,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +paste 1.0.15 +https://github.com/dtolnay/paste +by David Tolnay +Macros for all your token pasting needs +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016 The Rust Project Developers - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -17535,13 +17569,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -paste 1.0.15 -https://github.com/dtolnay/paste -by David Tolnay -Macros for all your token pasting needs -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -17722,9 +17749,18 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +percent-encoding 2.3.1 +https://github.com/servo/rust-url/ +by The rust-url developers +Percent encoding and decoding +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2013-2022 The rust-url developers + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -17749,13 +17785,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -percent-encoding 2.3.1 -https://github.com/servo/rust-url/ -by The rust-url developers -Percent encoding and decoding -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -17961,10 +17990,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +petgraph 0.6.5 +https://github.com/petgraph/petgraph +by bluss, mitchmindtree +Graph data structure library. Provides graph types and graph algorithms. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2013-2022 The rust-url developers +Copyright (c) 2015 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -17990,13 +18026,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -petgraph 0.6.5 -https://github.com/petgraph/petgraph -by bluss, mitchmindtree -Graph data structure library. Provides graph types and graph algorithms. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -18202,11 +18231,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +pin-project-lite 0.2.15 +https://github.com/taiki-e/pin-project-lite +by +A lightweight version of pin-project written with declarative macros. + +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2015 - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -18231,14 +18266,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -pin-project-lite 0.2.15 -https://github.com/taiki-e/pin-project-lite -by -A lightweight version of pin-project written with declarative macros. - -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -18420,9 +18447,19 @@ LICENSE-APACHE: END OF TERMS AND CONDITIONS + +==================================================== +pin-utils 0.1.0 +https://github.com/rust-lang-nursery/pin-utils +by Josef Brandl +Utilities for pinning + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2018 The pin-utils authors + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -18447,14 +18484,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -pin-utils 0.1.0 -https://github.com/rust-lang-nursery/pin-utils -by Josef Brandl -Utilities for pinning - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -18660,11 +18689,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +portable-atomic 1.10.0 +https://github.com/taiki-e/portable-atomic +by +Portable atomic types including support for 128-bit atomics, atomic float, etc. + +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2018 The pin-utils authors - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -18689,14 +18724,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -portable-atomic 1.9.0 -https://github.com/taiki-e/portable-atomic -by -Portable atomic types including support for 128-bit atomics, atomic float, etc. - -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -18878,9 +18905,18 @@ LICENSE-APACHE: END OF TERMS AND CONDITIONS + +==================================================== +ppv-lite86 0.2.20 +https://github.com/cryptocorrosion/cryptocorrosion +by The CryptoCorrosion Contributors +Implementation of the crypto-simd API for x86 +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2019 The CryptoCorrosion Contributors + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -18905,13 +18941,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -ppv-lite86 0.2.20 -https://github.com/cryptocorrosion/cryptocorrosion -by The CryptoCorrosion Contributors -Implementation of the crypto-simd API for x86 -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -19117,11 +19146,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +proc-macro2 1.0.92 +https://github.com/dtolnay/proc-macro2 +by David Tolnay , Alex Crichton +A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2019 The CryptoCorrosion Contributors - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -19146,13 +19180,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -proc-macro2 1.0.89 -https://github.com/dtolnay/proc-macro2 -by David Tolnay , Alex Crichton -A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -19333,33 +19360,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== pyo3 0.21.2 @@ -19367,199 +19367,6 @@ https://github.com/pyo3/pyo3 by PyO3 Project and Contributors Bindings to Python interpreter License: MIT OR Apache-2.0 ----------------------------------------------------- -LICENSE-APACHE: - - Copyright (c) 2017-present PyO3 Project and Contributors. https://github.com/PyO3 - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - ---------------------------------------------------- LICENSE-MIT: @@ -19589,13 +19396,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -pyo3-build-config 0.21.2 -https://github.com/pyo3/pyo3 -by PyO3 Project and Contributors -Build configuration for the PyO3 ecosystem -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -19789,6 +19589,13 @@ LICENSE-APACHE: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +==================================================== +pyo3-build-config 0.21.2 +https://github.com/pyo3/pyo3 +by PyO3 Project and Contributors +Build configuration for the PyO3 ecosystem +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -19818,13 +19625,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -pyo3-ffi 0.21.2 -https://github.com/pyo3/pyo3 -by PyO3 Project and Contributors -Python-API bindings for the PyO3 ecosystem -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -20018,6 +19818,13 @@ LICENSE-APACHE: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +==================================================== +pyo3-ffi 0.21.2 +https://github.com/pyo3/pyo3 +by PyO3 Project and Contributors +Python-API bindings for the PyO3 ecosystem +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -20047,6 +19854,199 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------- +LICENSE-APACHE: + + Copyright (c) 2017-present PyO3 Project and Contributors. https://github.com/PyO3 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + ==================================================== pyo3-macros 0.21.2 @@ -20054,6 +20054,35 @@ https://github.com/pyo3/pyo3 by PyO3 Project and Contributors Proc macros for PyO3 package License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2023-present PyO3 Project and Contributors. https://github.com/PyO3 + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -20247,6 +20276,13 @@ LICENSE-APACHE: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +==================================================== +pyo3-macros-backend 0.21.2 +https://github.com/pyo3/pyo3 +by PyO3 Project and Contributors +Code generation for PyO3 package +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -20276,13 +20312,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -pyo3-macros-backend 0.21.2 -https://github.com/pyo3/pyo3 -by PyO3 Project and Contributors -Code generation for PyO3 package -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -20476,38 +20505,9 @@ LICENSE-APACHE: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2023-present PyO3 Project and Contributors. https://github.com/PyO3 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== -qoqo 1.16.1 +qoqo 1.16.2 https://github.com/HQSquantumsimulations/qoqo by HQS Quantum Simulations Quantum computing circuit toolkit. Python interface of roqoqo @@ -20719,7 +20719,7 @@ LICENSE: ==================================================== -qoqo-macros 1.16.1 +qoqo-macros 1.16.2 by HQS Quantum Simulations Macros for the qoqo crate License: Apache-2.0 @@ -21359,6 +21359,33 @@ https://github.com/dtolnay/quote by David Tolnay Quasi-quoting macro quote!(...) License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -21539,9 +21566,20 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +rand 0.8.5 +https://rust-random.github.io/book +by The Rand Project Developers, The Rust Project Developers +Random number generators and other randomness functionality. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright 2018 Developers of the Rand project +Copyright (c) 2014 The Rust Project Developers + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -21566,14 +21604,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rand 0.8.5 -https://rust-random.github.io/book -by The Rand Project Developers, The Rust Project Developers -Random number generators and other randomness functionality. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -21754,6 +21784,14 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +rand_chacha 0.3.1 +https://rust-random.github.io/book +by The Rand Project Developers, The Rust Project Developers, The CryptoCorrosion Contributors +ChaCha random number generator + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -21784,14 +21822,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rand_chacha 0.3.1 -https://rust-random.github.io/book -by The Rand Project Developers, The Rust Project Developers, The CryptoCorrosion Contributors -ChaCha random number generator - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -21997,6 +22027,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +rand_core 0.6.4 +https://rust-random.github.io/book +by The Rand Project Developers, The Rust Project Developers +Core random number generator traits and tools for implementation. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -22027,14 +22065,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rand_core 0.6.4 -https://rust-random.github.io/book -by The Rand Project Developers, The Rust Project Developers -Core random number generator traits and tools for implementation. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -22226,11 +22256,18 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. + +==================================================== +rand_distr 0.4.3 +https://rust-random.github.io/book +by The Rand Project Developers +Sampling from random number distributions + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: Copyright 2018 Developers of the Rand project -Copyright (c) 2014 The Rust Project Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -22256,14 +22293,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rand_distr 0.4.3 -https://rust-random.github.io/book -by The Rand Project Developers -Sampling from random number distributions - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -22455,10 +22484,21 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. + +==================================================== +rawpointer 0.2.1 +https://github.com/bluss/rawpointer/ +by bluss +Extra methods for raw pointers and `NonNull`. + +For example `.post_inc()` and `.pre_dec()` (c.f. `ptr++` and `--ptr`), +`offset` and `add` for `NonNull`, and the function `ptrdistance`. + +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright 2018 Developers of the Rand project +Copyright (c) 2015 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -22484,17 +22524,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rawpointer 0.2.1 -https://github.com/bluss/rawpointer/ -by bluss -Extra methods for raw pointers and `NonNull`. - -For example `.post_inc()` and `.pre_dec()` (c.f. `ptr++` and `--ptr`), -`offset` and `add` for `NonNull`, and the function `ptrdistance`. - -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -22700,35 +22729,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2015 - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== redox_syscall 0.5.7 @@ -22769,6 +22769,33 @@ https://github.com/dtolnay/ref-cast by David Tolnay Safely cast &T to &U where the struct U contains a single field of type T. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -22949,6 +22976,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +ref-cast-impl 1.0.23 +https://github.com/dtolnay/ref-cast +by David Tolnay +Derive implementation for ref_cast::RefCast. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -22976,13 +23010,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -ref-cast-impl 1.0.23 -https://github.com/dtolnay/ref-cast -by David Tolnay -Derive implementation for ref_cast::RefCast. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -23163,9 +23190,27 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +referencing 0.23.0 +https://github.com/Stranger6667/jsonschema-rs +by Dmitry Dygalo +An implementation-agnostic JSON reference resolution library for Rust. +License: MIT + +==================================================== +regex 1.11.1 +https://github.com/rust-lang/regex +by The Rust Project Developers, Andrew Gallant +An implementation of regular expressions for Rust. This implementation uses +finite automata and guarantees linear time matching on all inputs. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2014 The Rust Project Developers + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -23190,22 +23235,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -referencing 0.23.0 -https://github.com/Stranger6667/jsonschema-rs -by Dmitry Dygalo -An implementation-agnostic JSON reference resolution library for Rust. -License: MIT - -==================================================== -regex 1.11.1 -https://github.com/rust-lang/regex -by The Rust Project Developers, Andrew Gallant -An implementation of regular expressions for Rust. This implementation uses -finite automata and guarantees linear time matching on all inputs. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -23411,6 +23440,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +regex-automata 0.4.9 +https://github.com/rust-lang/regex/tree/master/regex-automata +by The Rust Project Developers, Andrew Gallant +Automata construction and matching using regular expressions. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -23440,13 +23476,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -regex-automata 0.4.8 -https://github.com/rust-lang/regex/tree/master/regex-automata -by The Rust Project Developers, Andrew Gallant -Automata construction and matching using regular expressions. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -23652,6 +23681,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +regex-syntax 0.8.5 +https://github.com/rust-lang/regex/tree/master/regex-syntax +by The Rust Project Developers, Andrew Gallant +A regular expression parser. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -23681,13 +23717,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -regex-syntax 0.8.5 -https://github.com/rust-lang/regex/tree/master/regex-syntax -by The Rust Project Developers, Andrew Gallant -A regular expression parser. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -23893,42 +23922,37 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +reqwest 0.12.9 +https://github.com/seanmonstar/reqwest +by Sean McArthur +higher level HTTP client library +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 The Rust Project Developers +Copyright (c) 2016 Sean McArthur -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -==================================================== -reqwest 0.12.9 -https://github.com/seanmonstar/reqwest -by Sean McArthur -higher level HTTP client library -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -24134,33 +24158,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2016 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - ==================================================== -roqoqo 1.16.1 +roqoqo 1.16.2 https://github.com/HQSquantumsimulations/qoqo by HQS Quantum Simulations Rust Quantum Computing Toolkit by HQS @@ -24372,7 +24372,7 @@ LICENSE: ==================================================== -roqoqo-derive 1.16.1 +roqoqo-derive 1.16.2 by HQS Quantum Simulations Macros for the roqoqo crate License: Apache-2.0 @@ -24801,6 +24801,35 @@ by Alex Crichton Rust compiler symbol demangling. License: MIT/Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2014 Alex Crichton + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -25006,11 +25035,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +rustc-hash 1.1.0 +https://github.com/rust-lang-nursery/rustc-hash +by The Rust Project Developers +speed, non-cryptographic hash used in rustc +License: Apache-2.0/MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 Alex Crichton - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -25035,13 +25069,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -rustc-hash 1.1.0 -https://github.com/rust-lang-nursery/rustc-hash -by The Rust Project Developers -speed, non-cryptographic hash used in rustc -License: Apache-2.0/MIT ---------------------------------------------------- LICENSE-APACHE: @@ -25247,33 +25274,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== ryu 1.0.18 @@ -25495,6 +25495,19 @@ https://github.com/Lokathor/safe_arch by Lokathor Crate that exposes `core::arch` safely via `#[cfg()]`. License: Zlib OR Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT.md: + +MIT License + +Copyright (c) 2023 Daniel "Lokathor" Gee. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE.md: @@ -25575,19 +25588,6 @@ Permission is granted to anyone to use this software for any purpose, including 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------- -LICENSE-MIT.md: - -MIT License - -Copyright (c) 2023 Daniel "Lokathor" Gee. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ==================================================== schemars 0.8.21 @@ -25664,6 +25664,35 @@ Defines the macros `defer!`, `defer_on_unwind!`, `defer_on_success!` as shorthands for guards with one of the implemented strategies. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2016-2019 Ulrik Sverdrup "bluss" and scopeguard developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -25869,11 +25898,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +serde 1.0.215 +https://serde.rs +by Erick Tryzelaar , David Tolnay +A generic serialization/deserialization framework +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2016-2019 Ulrik Sverdrup "bluss" and scopeguard developers - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -25898,13 +25932,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde 1.0.214 -https://serde.rs -by Erick Tryzelaar , David Tolnay -A generic serialization/deserialization framework -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -26085,6 +26112,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +serde_derive 1.0.215 +https://serde.rs +by Erick Tryzelaar , David Tolnay +Macros 1.1 implementation of #[derive(Serialize, Deserialize)] +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -26112,13 +26146,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde_derive 1.0.214 -https://serde.rs -by Erick Tryzelaar , David Tolnay -Macros 1.1 implementation of #[derive(Serialize, Deserialize)] -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -26299,6 +26326,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +serde_derive_internals 0.29.1 +https://serde.rs +by Erick Tryzelaar , David Tolnay +AST representation used by Serde derive macros. Unstable. +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -26326,13 +26360,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde_derive_internals 0.29.1 -https://serde.rs -by Erick Tryzelaar , David Tolnay -AST representation used by Serde derive macros. Unstable. -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -26513,6 +26540,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +serde_json 1.0.133 +https://github.com/serde-rs/json +by Erick Tryzelaar , David Tolnay +A JSON serialization file format +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -26540,13 +26574,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde_json 1.0.132 -https://github.com/serde-rs/json -by Erick Tryzelaar , David Tolnay -A JSON serialization file format -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -26727,6 +26754,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +serde_test 1.0.177 +https://github.com/serde-rs/test +by Erick Tryzelaar , David Tolnay +Token De/Serializer for testing De/Serialize implementations +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -26754,13 +26788,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde_test 1.0.177 -https://github.com/serde-rs/test -by Erick Tryzelaar , David Tolnay -Token De/Serializer for testing De/Serialize implementations -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -26941,9 +26968,18 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +serde_urlencoded 0.7.1 +https://github.com/nox/serde_urlencoded +by Anthony Ramine +`x-www-form-urlencoded` meets Serde +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2016 Anthony Ramine + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -26968,13 +27004,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -serde_urlencoded 0.7.1 -https://github.com/nox/serde_urlencoded -by Anthony Ramine -`x-www-form-urlencoded` meets Serde -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -27155,35 +27184,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2016 Anthony Ramine - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== simba 0.9.0 @@ -27439,6 +27439,35 @@ https://github.com/servo/rust-smallvec by The Servo Project Developers 'Small vector' optimization: store up to a small number of items on the stack License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Copyright (c) 2018 The Servo Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -27644,10 +27673,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +socket2 0.5.7 +https://github.com/rust-lang/socket2 +by Alex Crichton , Thomas de Zeeuw +Utilities for handling networking sockets with a maximal amount of configuration +possible intended. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2018 The Servo Project Developers +Copyright (c) 2014 Alex Crichton Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -27673,15 +27711,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -socket2 0.5.7 -https://github.com/rust-lang/socket2 -by Alex Crichton , Thomas de Zeeuw -Utilities for handling networking sockets with a maximal amount of configuration -possible intended. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -27887,10 +27916,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +stable_deref_trait 1.2.0 +https://github.com/storyyeller/stable_deref_trait +by Robert Grosse +An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental. + +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2014 Alex Crichton +Copyright (c) 2017 Robert Grosse Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -27915,15 +27952,6 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -==================================================== -stable_deref_trait 1.2.0 -https://github.com/storyyeller/stable_deref_trait -by Robert Grosse -An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental. - -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -28129,34 +28157,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2017 Robert Grosse - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. ==================================================== struqture 1.9.2 @@ -28370,7 +28370,7 @@ LICENSE: ==================================================== -struqture 2.0.0-alpha.3 +struqture 2.0.0-alpha.4 by HQS Quantum Simulations HQS tool for representing operators, Hamiltonians and open systems. License: Apache-2.0 @@ -28798,11 +28798,38 @@ LICENSE: ==================================================== -syn 2.0.87 +syn 2.0.89 https://github.com/dtolnay/syn by David Tolnay Parser for Rust source code License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -28983,36 +29010,9 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== -sync_wrapper 1.0.1 +sync_wrapper 1.0.2 https://docs.rs/sync_wrapper by Actyx AG A tool for enlisting the compiler's help in proving the absence of concurrency @@ -29545,11 +29545,38 @@ SOFTWARE. ==================================================== -thiserror 1.0.68 +thiserror 1.0.69 https://github.com/dtolnay/thiserror by David Tolnay derive(Error) License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -29730,6 +29757,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +thiserror-impl 1.0.69 +https://github.com/dtolnay/thiserror +by David Tolnay +Implementation detail of the `thiserror` crate +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -29757,13 +29791,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -thiserror-impl 1.0.68 -https://github.com/dtolnay/thiserror -by David Tolnay -Implementation detail of the `thiserror` crate -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -29944,33 +29971,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS ----------------------------------------------------- -LICENSE-MIT: - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== tinystr 0.7.6 @@ -30035,6 +30035,15 @@ https://github.com/Lokathor/tinyvec by Lokathor `tinyvec` provides 100% safe vec-like data structures. License: Zlib OR Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT.md: + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE.md: @@ -30256,15 +30265,6 @@ Permission is granted to anyone to use this software for any purpose, including 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------- -LICENSE-MIT.md: - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ==================================================== tinyvec_macros 0.1.1 @@ -30272,6 +30272,31 @@ https://github.com/Soveu/tinyvec_macros by Soveu Some macros for tiny containers License: MIT OR Apache-2.0 OR Zlib +---------------------------------------------------- +LICENSE-MIT.md: + +MIT License + +Copyright (c) 2020 Soveu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE.md: @@ -30502,34 +30527,9 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------- -LICENSE-MIT.md: - -MIT License - -Copyright (c) 2020 Soveu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ==================================================== -tokio 1.41.0 +tokio 1.41.1 https://tokio.rs by Tokio Contributors An event-driven, non-blocking I/O platform for writing asynchronous I/O @@ -30714,6 +30714,35 @@ Typenum is a Rust library for type-level numbers evaluated at integers. It also provides a type-level array of type-level numbers, but its implementation is incomplete. License: MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE: + +MIT OR Apache-2.0 +---------------------------------------------------- +LICENSE-MIT: + +The MIT License (MIT) + +Copyright (c) 2014 Paho Lurie-Gregg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -30918,42 +30947,83 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +unicode-ident 1.0.14 +https://github.com/dtolnay/unicode-ident +by David Tolnay +Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 +License: (MIT OR Apache-2.0) AND Unicode-3.0 ---------------------------------------------------- LICENSE-MIT: -The MIT License (MIT) +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: -Copyright (c) 2014 Paho Lurie-Gregg +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +---------------------------------------------------- +LICENSE-UNICODE: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +UNICODE LICENSE V3 ----------------------------------------------------- -LICENSE: +COPYRIGHT AND PERMISSION NOTICE -MIT OR Apache-2.0 +Copyright © 1991-2023 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. -==================================================== -unicode-ident 1.0.13 -https://github.com/dtolnay/unicode-ident -by David Tolnay -Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 -License: (MIT OR Apache-2.0) AND Unicode-DFS-2016 ---------------------------------------------------- LICENSE-APACHE: @@ -31134,6 +31204,13 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +unindent 0.2.3 +https://github.com/dtolnay/indoc +by David Tolnay +Remove a column of leading whitespace from a string +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -31161,63 +31238,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------------------- -LICENSE-UNICODE: - -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -See Terms of Use -for definitions of Unicode Inc.’s Data Files and Software. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2022 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in https://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. - - -==================================================== -unindent 0.2.3 -https://github.com/dtolnay/indoc -by David Tolnay -Remove a column of leading whitespace from a string -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -31398,9 +31418,18 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS + +==================================================== +url 2.5.4 +https://github.com/servo/rust-url +by The rust-url developers +URL library for Rust, based on the WHATWG URL Standard +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2013-2022 The rust-url developers + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -31425,13 +31454,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -url 2.5.3 -https://github.com/servo/rust-url -by The rust-url developers -URL library for Rust, based on the WHATWG URL Standard -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -31637,10 +31659,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +utf16_iter 1.0.5 +https://docs.rs/utf16_iter/ +by Henri Sivonen +Iterator by char over potentially-invalid UTF-16 in &[u16] +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: -Copyright (c) 2013-2022 The rust-url developers +Copyright Mozilla Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -31666,13 +31695,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -utf16_iter 1.0.5 -https://docs.rs/utf16_iter/ -by Henri Sivonen -Iterator by char over potentially-invalid UTF-16 in &[u16] -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -31879,6 +31901,13 @@ LICENSE-APACHE: See the License for the specific language governing permissions and limitations under the License. + +==================================================== +utf8_iter 1.0.4 +https://docs.rs/utf8_iter/ +by Henri Sivonen +Iterator by char over potentially-invalid UTF-8 in &[u8] +License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: @@ -31908,13 +31937,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -utf8_iter 1.0.4 -https://docs.rs/utf8_iter/ -by Henri Sivonen -Iterator by char over potentially-invalid UTF-8 in &[u8] -License: Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -32121,35 +32143,6 @@ LICENSE-APACHE: See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright Mozilla Foundation - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== uuid 1.11.0 @@ -32157,211 +32150,6 @@ https://github.com/uuid-rs/uuid by Ashley Mannix, Dylan DPC, Hunar Roop Kahlon A library to generate and parse UUIDs. License: Apache-2.0 OR MIT ----------------------------------------------------- -LICENSE-APACHE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - ---------------------------------------------------- LICENSE-MIT: @@ -32392,20 +32180,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -uuid-simd 0.8.0 -https://github.com/Nugine/simd -by -SIMD-accelerated UUID operations -License: MIT - -==================================================== -version_check 0.9.5 -https://github.com/SergioBenitez/version_check -by Sergio Benitez -Tiny crate to check the version of the installed/running rustc. -License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -32611,6 +32385,20 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +uuid-simd 0.8.0 +https://github.com/Nugine/simd +by +SIMD-accelerated UUID operations +License: MIT + +==================================================== +version_check 0.9.5 +https://github.com/SergioBenitez/version_check +by Sergio Benitez +Tiny crate to check the version of the installed/running rustc. +License: MIT/Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -32634,6 +32422,211 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------- +LICENSE-APACHE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + ==================================================== vsimd 0.8.0 @@ -32679,6 +32672,33 @@ https://github.com/bytecodealliance/wasi by The Cranelift Project Developers Experimental WASI API bindings for Rust License: Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -33108,9 +33128,19 @@ the License, but only in their entirety and only with respect to the Combined Software. + +==================================================== +wasm-bindgen 0.2.95 +https://rustwasm.github.io/ +by The wasm-bindgen Developers +Easy support for interacting between JS and Rust. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: +Copyright (c) 2014 Alex Crichton + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -33135,14 +33165,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen 0.2.95 -https://rustwasm.github.io/ -by The wasm-bindgen Developers -Easy support for interacting between JS and Rust. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -33348,6 +33370,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +wasm-bindgen-backend 0.2.95 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +Backend code generation of the wasm-bindgen tool + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -33377,14 +33407,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen-backend 0.2.95 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -Backend code generation of the wasm-bindgen tool - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -33590,6 +33612,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +wasm-bindgen-futures 0.4.45 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +Bridging the gap between Rust Futures and JavaScript Promises +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -33619,13 +33648,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen-futures 0.4.45 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -Bridging the gap between Rust Futures and JavaScript Promises -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -33831,6 +33853,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +wasm-bindgen-macro 0.2.95 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +Definition of the `#[wasm_bindgen]` attribute, an internal dependency + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -33860,14 +33890,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen-macro 0.2.95 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -Definition of the `#[wasm_bindgen]` attribute, an internal dependency - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -34073,6 +34095,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +wasm-bindgen-macro-support 0.2.95 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +The part of the implementation of the `#[wasm_bindgen]` attribute that is not in the shared backend crate + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -34102,14 +34132,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen-macro-support 0.2.95 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -The part of the implementation of the `#[wasm_bindgen]` attribute that is not in the shared backend crate - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -34315,6 +34337,15 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +wasm-bindgen-shared 0.2.95 +https://rustwasm.github.io/wasm-bindgen/ +by The wasm-bindgen Developers +Shared support between wasm-bindgen and wasm-bindgen cli, an internal +dependency. + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -34344,15 +34375,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -wasm-bindgen-shared 0.2.95 -https://rustwasm.github.io/wasm-bindgen/ -by The wasm-bindgen Developers -Shared support between wasm-bindgen and wasm-bindgen cli, an internal -dependency. - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -34558,6 +34580,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +==================================================== +web-sys 0.3.72 +https://rustwasm.github.io/wasm-bindgen/web-sys/index.html +by The wasm-bindgen Developers +Bindings for all Web APIs, a procedurally generated crate from WebIDL + +License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-MIT: @@ -34587,14 +34617,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -web-sys 0.3.72 -https://rustwasm.github.io/wasm-bindgen/web-sys/index.html -by The wasm-bindgen Developers -Bindings for all Web APIs, a procedurally generated crate from WebIDL - -License: MIT OR Apache-2.0 ---------------------------------------------------- LICENSE-APACHE: @@ -34800,38 +34822,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright (c) 2014 Alex Crichton - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== -wide 0.7.28 +wide 0.7.30 https://github.com/Lokathor/wide by Lokathor A crate to help you go wide. @@ -37939,6 +37932,35 @@ https://docs.rs/write16/ by A UTF-16 analog of the Write trait License: Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright Mozilla Foundation + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + ---------------------------------------------------- LICENSE-APACHE: @@ -38145,35 +38167,6 @@ LICENSE-APACHE: See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------- -LICENSE-MIT: - -Copyright Mozilla Foundation - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ==================================================== writeable 0.5.5 @@ -38233,7 +38226,7 @@ ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation a ==================================================== -yoke 0.7.4 +yoke 0.7.5 https://github.com/unicode-org/icu4x by Manish Goregaokar Abstraction allowing borrowed data to be carried along with the backing data it borrows from @@ -38290,7 +38283,7 @@ ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation a ==================================================== -yoke-derive 0.7.4 +yoke-derive 0.7.5 https://github.com/unicode-org/icu4x by Manish Goregaokar Custom derive for the yoke crate @@ -38352,6 +38345,36 @@ https://github.com/google/zerocopy by Joshua Liebow-Feeser Utilities for zero-copy parsing and serialization License: BSD-2-Clause OR Apache-2.0 OR MIT +---------------------------------------------------- +LICENSE-MIT: + +Copyright 2023 The Fuchsia Authors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------- LICENSE-APACHE: @@ -38586,6 +38609,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +==================================================== +zerocopy-derive 0.7.35 +https://github.com/google/zerocopy +by Joshua Liebow-Feeser +Custom derive for traits from the zerocopy crate +License: BSD-2-Clause OR Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-MIT: @@ -38616,13 +38646,6 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================== -zerocopy-derive 0.7.35 -https://github.com/google/zerocopy -by Joshua Liebow-Feeser -Custom derive for traits from the zerocopy crate -License: BSD-2-Clause OR Apache-2.0 OR MIT ---------------------------------------------------- LICENSE-APACHE: @@ -38857,39 +38880,9 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------- -LICENSE-MIT: - -Copyright 2023 The Fuchsia Authors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - ==================================================== -zerofrom 0.1.4 +zerofrom 0.1.5 https://github.com/unicode-org/icu4x by Manish Goregaokar ZeroFrom trait for constructing @@ -38946,7 +38939,7 @@ ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation a ==================================================== -zerofrom-derive 0.1.4 +zerofrom-derive 0.1.5 https://github.com/unicode-org/icu4x by Manish Goregaokar Custom derive for the zerofrom crate diff --git a/qoqo/python/qoqo/operations.pyi b/qoqo/python/qoqo/operations.pyi index 21b76cc76..18b7beb0d 100644 --- a/qoqo/python/qoqo/operations.pyi +++ b/qoqo/python/qoqo/operations.pyi @@ -15154,3 +15154,1828 @@ Returns: Returns: str: The json schema serialized to json """ + +class InvSGate(Operation): + """ +The InvS gate. + +.. math:: + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 0 \\\\ + 0 & -i + \end{pmatrix} + +Args: + qubit (int): The qubit the unitary gate is applied to. + +""" + + def __init__(self, qubit: int): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def qubit(self): + """ + Return the qubit the operation acts on + + Returns: + int + """ + + def global_phase(self): + """ +Return the global phase :math:`g` of a unitary gate acting on one qubit + +Here global_phase is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_r(self): + """ +Return the property alpha_r :math:`\alpha_r` of a unitary gate acting on one qubit + +Here alpha_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_i(self): + """ +Return the property alpha_i :math:`\alpha_i` of a unitary gate acting on one qubit + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_r(self): + """ +Return the property beta_r :math:`\beta_r` of a unitary gate acting on one qubit + +Here beta_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_i(self): + """ +Returns the property beta_i :math:`\beta_i` of a unitary gate acting on one qubit + +Here beta_i is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + + +Returns: + CalculatorFloat +""" + + def mul(self) -> Operation: + """ + Multiplies two compatible operations implementing OperateSingleQubitGate. + + Does not consume the two operations being multiplied. + Only Operations + + Args: + `other` - An Operation implementing [OperateSingleQubitGate]. + + Returns: + Operation: Result of the multiplication, i.e. the multiplied single qubit gate. + + Example: + ``` + from qoqo.operations import RotateZ, RotateX + + gate1 = RotateZ(qubit=0, theta=1) + gate2 = RotateX(qubit=0, theta=1) + multiplied = gate1.mul(gate2) + print("Multiplied gate: ", multiplied) + ``` + + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class InvTGate(Operation): + """ +The InvT gate. + +.. math:: + U = \frac{1}{\sqrt{2}} \begin{pmatrix} + 1 & 0 \\\\ + 0 & e^{-i \frac{\pi}{4}} + \end{pmatrix} + +Args: + qubit (int): The qubit the unitary gate is applied to. + +""" + + def __init__(self, qubit: int): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def qubit(self): + """ + Return the qubit the operation acts on + + Returns: + int + """ + + def global_phase(self): + """ +Return the global phase :math:`g` of a unitary gate acting on one qubit + +Here global_phase is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_r(self): + """ +Return the property alpha_r :math:`\alpha_r` of a unitary gate acting on one qubit + +Here alpha_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_i(self): + """ +Return the property alpha_i :math:`\alpha_i` of a unitary gate acting on one qubit + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_r(self): + """ +Return the property beta_r :math:`\beta_r` of a unitary gate acting on one qubit + +Here beta_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_i(self): + """ +Returns the property beta_i :math:`\beta_i` of a unitary gate acting on one qubit + +Here beta_i is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + + +Returns: + CalculatorFloat +""" + + def mul(self) -> Operation: + """ + Multiplies two compatible operations implementing OperateSingleQubitGate. + + Does not consume the two operations being multiplied. + Only Operations + + Args: + `other` - An Operation implementing [OperateSingleQubitGate]. + + Returns: + Operation: Result of the multiplication, i.e. the multiplied single qubit gate. + + Example: + ``` + from qoqo.operations import RotateZ, RotateX + + gate1 = RotateZ(qubit=0, theta=1) + gate2 = RotateX(qubit=0, theta=1) + multiplied = gate1.mul(gate2) + print("Multiplied gate: ", multiplied) + ``` + + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class SXGate(Operation): + """ +The SX gate. + +.. math:: + U = \frac{1}{\sqrt(2)} \begin{pmatrix} + 1+i & 1-i \\\\ + 1-i & 1+i + \end{pmatrix} + +Args: + qubit (int): The qubit the unitary gate is applied to. + +""" + + def __init__(self, qubit: int): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def qubit(self): + """ + Return the qubit the operation acts on + + Returns: + int + """ + + def global_phase(self): + """ +Return the global phase :math:`g` of a unitary gate acting on one qubit + +Here global_phase is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_r(self): + """ +Return the property alpha_r :math:`\alpha_r` of a unitary gate acting on one qubit + +Here alpha_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_i(self): + """ +Return the property alpha_i :math:`\alpha_i` of a unitary gate acting on one qubit + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_r(self): + """ +Return the property beta_r :math:`\beta_r` of a unitary gate acting on one qubit + +Here beta_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_i(self): + """ +Returns the property beta_i :math:`\beta_i` of a unitary gate acting on one qubit + +Here beta_i is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + + +Returns: + CalculatorFloat +""" + + def mul(self) -> Operation: + """ + Multiplies two compatible operations implementing OperateSingleQubitGate. + + Does not consume the two operations being multiplied. + Only Operations + + Args: + `other` - An Operation implementing [OperateSingleQubitGate]. + + Returns: + Operation: Result of the multiplication, i.e. the multiplied single qubit gate. + + Example: + ``` + from qoqo.operations import RotateZ, RotateX + + gate1 = RotateZ(qubit=0, theta=1) + gate2 = RotateX(qubit=0, theta=1) + multiplied = gate1.mul(gate2) + print("Multiplied gate: ", multiplied) + ``` + + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class InvSXGate(Operation): + """ +The InvSX gate. + +.. math:: + U = \frac{1}{\sqrt(2)} \begin{pmatrix} + 1-i & 1+i \\\\ + 1+i & 1-i + \end{pmatrix} + +Args: + qubit (int): The qubit the unitary gate is applied to. + +""" + + def __init__(self, qubit: int): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def qubit(self): + """ + Return the qubit the operation acts on + + Returns: + int + """ + + def global_phase(self): + """ +Return the global phase :math:`g` of a unitary gate acting on one qubit + +Here global_phase is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_r(self): + """ +Return the property alpha_r :math:`\alpha_r` of a unitary gate acting on one qubit + +Here alpha_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def alpha_i(self): + """ +Return the property alpha_i :math:`\alpha_i` of a unitary gate acting on one qubit + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_r(self): + """ +Return the property beta_r :math:`\beta_r` of a unitary gate acting on one qubit + +Here beta_r is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + +Returns: + CalculatorFloat +""" + + def beta_i(self): + """ +Returns the property beta_i :math:`\beta_i` of a unitary gate acting on one qubit + +Here beta_i is defined by + +.. math:: + U =e^{i \cdot g}\begin{pmatrix} + \alpha_r+i \alpha_i & -\beta_r+i \beta_i \\\\ + \beta_r+i \beta_i & \alpha_r-i\alpha_i + \end{pmatrix} + + +Returns: + CalculatorFloat +""" + + def mul(self) -> Operation: + """ + Multiplies two compatible operations implementing OperateSingleQubitGate. + + Does not consume the two operations being multiplied. + Only Operations + + Args: + `other` - An Operation implementing [OperateSingleQubitGate]. + + Returns: + Operation: Result of the multiplication, i.e. the multiplied single qubit gate. + + Example: + ``` + from qoqo.operations import RotateZ, RotateX + + gate1 = RotateZ(qubit=0, theta=1) + gate2 = RotateX(qubit=0, theta=1) + multiplied = gate1.mul(gate2) + print("Multiplied gate: ", multiplied) + ``` + + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class TripleControlledPauliX(Operation): + """ + The triple-controlled PauliX gate. + + """ + + def __init__(self): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control_0(self): + """ + Returns control_0 qubit of the four-qubit operation + """ + + def control_1(self): + """ + Returns control_1 qubit of the four-qubit operation + """ + + def control_2(self): + """ + Returns control_2 qubit of the four-qubit operation + """ + + def target(self): + """ + Returns target qubit of the four-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the FourQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class TripleControlledPauliZ(Operation): + """ + The triple-controlled PauliZ gate. + + """ + + def __init__(self): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control_0(self): + """ + Returns control_0 qubit of the four-qubit operation + """ + + def control_1(self): + """ + Returns control_1 qubit of the four-qubit operation + """ + + def control_2(self): + """ + Returns control_2 qubit of the four-qubit operation + """ + + def target(self): + """ + Returns target qubit of the four-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the FourQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class TripleControlledPhaseShift(Operation): + """ + The triple-controlled PhaseShift gate. + + """ + + def __init__(self): + return + + def theta(self): + """ + Returns value of attribute theta + """ + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control_0(self): + """ + Returns control_0 qubit of the four-qubit operation + """ + + def control_1(self): + """ + Returns control_1 qubit of the four-qubit operation + """ + + def control_2(self): + """ + Returns control_2 qubit of the four-qubit operation + """ + + def target(self): + """ + Returns target qubit of the four-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the FourQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class ControlledSWAP(Operation): + """ +Implements ControlledSWAP gate. + +.. math:: + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 + \end{pmatrix} + +Args: + control (int): The index of the most significant qubit in the unitary representation. Here, the controlling qubit of the operation. + target_0 (int): The index of the second most significant qubit in the unitary representation. Here, the first targeting qubit of the operation. + target_1 (int): The index of the least significant qubit in the unitary representation. Here, the second targeting qubit of the operation. +""" + + def __init__(self, control: int, target_0: int, target_1: int): + return + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits in the ControlledSWAP operation + + Args: + mapping (Dict[int, int]): The mapping to be used in the remapping. + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved qubits in the ControlledSWAP operation. + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control(self): + """ + Returns control qubit of the three-qubit operation + """ + + def target_0(self): + """ + Returns target_0 qubit of the three-qubit operation + """ + + def target_1(self): + """ + Returns target_1 qubit of the three-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the ThreeQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class PhaseShiftedControlledControlledZ(Operation): + """ +The phased-shifted double-controlled-Z gate. + +The unitary matrix representation is: + +.. math:: + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & e^{i \phi} & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & e^{i \phi} & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & e^{i \phi} & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{i (3\cdot\phi + \pi)} + \end{pmatrix} + +Args: + control_0 (int): The index of the most significant qubit in the unitary representation. Here, the first qubit that controls the application of the phase-shift on the target qubit. + control_1 (int): The index of the second most significant qubit in the unitary representation. Here, the second qubit that controls the application of the phase-shift on the target qubit. + target (int):: The index of the least significant qubit in the unitary representation. Here, the qubit phase-shift is applied to. + phi (CalculatorFloat): The single qubit phase $\phi$. + +""" + + def __init__( + self, control_0: int, control_1: int, target: int, phi: Union[float, str] + ): + return + + def phi(self): + """ + Returns value of attribute phi + """ + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control_0(self): + """ + Returns control_0 qubit of the three-qubit operation + """ + + def control_1(self): + """ + Returns control_1 qubit of the three-qubit operation + """ + + def target(self): + """ + Returns target qubit of the three-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the ThreeQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ + +class PhaseShiftedControlledControlledPhase(Operation): + """ +The phased-shifted double-controlled-Z gate. + +The unitary matrix representation is: + +.. math:: + U = \begin{pmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & e^{i \phi} & 0 & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & e^{i \phi} & 0 & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & e^{i \phi} & 0 & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & e^{i (2\cdot\phi)} & 0 \\\\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{i (3\cdot\phi + \theta)} + \end{pmatrix} + +Args: + control_0 (int): The index of the most significant qubit in the unitary representation. Here, the first qubit that controls the application of the phase-shift on the target qubit. + control_1 (int): The index of the second most significant qubit in the unitary representation. Here, the second qubit that controls the application of the phase-shift on the target qubit. + target (int):: The index of the least significant qubit in the unitary representation. Here, the qubit phase-shift is applied to. + phi (CalculatorFloat): The single qubit phase $\phi$. + theta (CalculatorFloat): The phase rotation $\theta$. + +""" + + def __init__( + self, + control_0: int, + control_1: int, + target: int, + phi: Union[float, str], + theta: Union[float, str], + ): + return + + def theta(self): + """ + Returns value of attribute theta + """ + + def phi(self): + """ + Returns value of attribute phi + """ + + def is_parametrized(self) -> bool: + """ + Returns true if operation contains symbolic parameters + + Returns: + bool: Whether or not the operation contains symbolic parameters. + """ + + def tags(self) -> List[str]: + """ + Returns tags identifying the Operation + + Returns: + List[str]: The tags identifying the operation + """ + + def hqslang(self) -> str: + """ + Returns hqslang name of Operation + + Returns: + str: The name + """ + + def substitute_parameters( + self, substitution_parameters: Dict[str, float] + ) -> Operation: + """ + Substitutes internal symbolic parameters with float values + + Only available when all symbolic expressions can be evaluated to float with the + provided parameters. + + Args: + substitution_parameters (Dict[str, float]): The substituted free parameters + + Returns: + Operation: The operation with the parameters substituted + + Raises: + RuntimeError: Parameter Substitution failed + """ + + def remap_qubits(self, mapping: Dict[int, int]) -> Operation: + """ + Remap qubits + + Args: + mapping (Dict[int, int]): The mapping + + Returns: + Operation: The operation with the remapped qubits + + Raises: + RuntimeError: Qubit remapping failed + """ + + def involved_qubits(self) -> Union[Set[int], str]: + """ + List all involved Qubits + + Returns: + Union[Set[int], str]: The involved qubits as a set or 'ALL' if all qubits are involved + """ + + def control_0(self): + """ + Returns control_0 qubit of the three-qubit operation + """ + + def control_1(self): + """ + Returns control_1 qubit of the three-qubit operation + """ + + def target(self): + """ + Returns target qubit of the three-qubit operation + """ + + def circuit(self): + """ + Returns circuit implementing the ThreeQubitGateOperation + + Returns: + Circuit + """ + + def unitary_matrix(self) -> numpy.ndarray: + """ + Return unitary matrix of gate. + + Returns: + np.ndarray: matrix of gate. + + Raises: + ValueError: Error symbolic operation cannot return float unitary matrix + """ + + def powercf(self) -> PhaseShiftedControlledControlledPhase: + """ + Returns Rotated gate raised to power + + Args: + `power`(CalculatorFloat): exponent of the power operation. + + Returns: + Self: gate raised to the power of `power` + + """ + + def current_version(self) -> str: + """ + Returns the current version of the qoqo library . + + Returns: + str: The current version of the library. + """ + + def min_supported_version(self) -> str: + """ + Return the minimum version of qoqo that supports this object. + + Returns: + str: The minimum version of the qoqo library to deserialize this object. + """ + + def json_schema(self) -> str: + """ + Return the JsonSchema for the json serialisation of the class. + + Returns: + str: The json schema serialized to json + """ diff --git a/qoqo/python/qoqo/qoqo.pyi b/qoqo/python/qoqo/qoqo.pyi index 6da02a39f..99e723b83 100644 --- a/qoqo/python/qoqo/qoqo.pyi +++ b/qoqo/python/qoqo/qoqo.pyi @@ -14,10 +14,12 @@ qoqo is the HQS python package to represent quantum circuits. :toctree: generated/ Circuit + CircuitDag operations - registers - measurements QuantumProgram + measurements + devices + noise_models """ diff --git a/roqoqo-derive/Cargo.toml b/roqoqo-derive/Cargo.toml index 5dbab728b..de05d84df 100644 --- a/roqoqo-derive/Cargo.toml +++ b/roqoqo-derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo-derive" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/roqoqo/Cargo.toml b/roqoqo/Cargo.toml index a3747a976..24015afd7 100644 --- a/roqoqo/Cargo.toml +++ b/roqoqo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" From bd207d03f96f853124528227b2a3666e89fbda31 Mon Sep 17 00:00:00 2001 From: Dimitri Berthault Date: Mon, 25 Nov 2024 15:32:26 +0100 Subject: [PATCH 2/3] update --- .github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml | 1 - Cargo.lock | 2 +- roqoqo-test/Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml b/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml index 56f7be0a5..1ab5a983e 100644 --- a/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml +++ b/.github/workflows/hqs-build-deploy-sphinx-doc-rust-pyo3.yml @@ -10,7 +10,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - # - uses: Swatinem/rust-cache@v2 - uses: actions/setup-python@v4 with: python-version: "3.11" diff --git a/Cargo.lock b/Cargo.lock index cde070b19..903684fef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1360,7 +1360,7 @@ dependencies = [ [[package]] name = "roqoqo-test" -version = "1.16.1" +version = "1.16.2" dependencies = [ "nalgebra", "ndarray", diff --git a/roqoqo-test/Cargo.toml b/roqoqo-test/Cargo.toml index d12c55a9d..ac446579c 100644 --- a/roqoqo-test/Cargo.toml +++ b/roqoqo-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo-test" -version = "1.16.1" +version = "1.16.2" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" From 929040a0ea2d03fa192e0a284cfa0753c7098fd7 Mon Sep 17 00:00:00 2001 From: Dimitri Berthault Date: Mon, 25 Nov 2024 15:46:53 +0100 Subject: [PATCH 3/3] remove version update --- .compatibility_tests/compatibility_test_1_0/Cargo.toml | 2 +- .../compatibility_test_1_10/Cargo.toml | 2 +- .../compatibility_test_1_11/Cargo.toml | 2 +- .../compatibility_test_1_12/Cargo.toml | 2 +- .../compatibility_test_1_13/Cargo.toml | 2 +- .../compatibility_test_1_14/Cargo.toml | 2 +- .../compatibility_test_1_15/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_2/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_3/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_4/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_5/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_6/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_7/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_8/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_1_9/Cargo.toml | 2 +- .compatibility_tests/compatibility_test_sim/Cargo.toml | 2 +- CHANGELOG.md | 4 +--- Cargo.lock | 10 +++++----- qoqo-macros/Cargo.toml | 2 +- qoqo/Cargo.toml | 2 +- qoqo/pyproject.toml | 2 +- qoqo/python/qoqo/DEPENDENCIES | 8 ++++---- roqoqo-derive/Cargo.toml | 2 +- roqoqo-test/Cargo.toml | 6 ++---- roqoqo/Cargo.toml | 2 +- 25 files changed, 33 insertions(+), 37 deletions(-) diff --git a/.compatibility_tests/compatibility_test_1_0/Cargo.toml b/.compatibility_tests/compatibility_test_1_0/Cargo.toml index 752658f28..05cdcf3de 100644 --- a/.compatibility_tests/compatibility_test_1_0/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_0/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_0" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_10/Cargo.toml b/.compatibility_tests/compatibility_test_1_10/Cargo.toml index 14159eab1..32b0f0a19 100644 --- a/.compatibility_tests/compatibility_test_1_10/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_10/Cargo.toml @@ -1,7 +1,7 @@ [package] authors = ["HQS Quantum Simulations "] name = "compatibility_test_1_10" -version = "1.16.2" +version = "1.16.1" license = "Apache-2.0" edition = "2021" rust-version = "1.70" diff --git a/.compatibility_tests/compatibility_test_1_11/Cargo.toml b/.compatibility_tests/compatibility_test_1_11/Cargo.toml index 21c5f98f1..fb025bee0 100644 --- a/.compatibility_tests/compatibility_test_1_11/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_11/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_11" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_12/Cargo.toml b/.compatibility_tests/compatibility_test_1_12/Cargo.toml index 40354ef41..03df90742 100644 --- a/.compatibility_tests/compatibility_test_1_12/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_12/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_12" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_13/Cargo.toml b/.compatibility_tests/compatibility_test_1_13/Cargo.toml index 74773bfdb..2a7051900 100644 --- a/.compatibility_tests/compatibility_test_1_13/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_13/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_13" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_14/Cargo.toml b/.compatibility_tests/compatibility_test_1_14/Cargo.toml index 64959f663..513552b41 100644 --- a/.compatibility_tests/compatibility_test_1_14/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_14/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_14" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_15/Cargo.toml b/.compatibility_tests/compatibility_test_1_15/Cargo.toml index 932f903da..a98513137 100644 --- a/.compatibility_tests/compatibility_test_1_15/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_15/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_15" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_2/Cargo.toml b/.compatibility_tests/compatibility_test_1_2/Cargo.toml index ebeb5e1b8..6b908ef94 100644 --- a/.compatibility_tests/compatibility_test_1_2/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_2" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_3/Cargo.toml b/.compatibility_tests/compatibility_test_1_3/Cargo.toml index eca3d8aeb..ea976793a 100644 --- a/.compatibility_tests/compatibility_test_1_3/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_3" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_4/Cargo.toml b/.compatibility_tests/compatibility_test_1_4/Cargo.toml index 9d59f9b8b..82194b93c 100644 --- a/.compatibility_tests/compatibility_test_1_4/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_4/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_4" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_5/Cargo.toml b/.compatibility_tests/compatibility_test_1_5/Cargo.toml index 44f144725..974ca45d3 100644 --- a/.compatibility_tests/compatibility_test_1_5/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_5" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_6/Cargo.toml b/.compatibility_tests/compatibility_test_1_6/Cargo.toml index 4e6de6b8b..db558706d 100644 --- a/.compatibility_tests/compatibility_test_1_6/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_6/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_6" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_7/Cargo.toml b/.compatibility_tests/compatibility_test_1_7/Cargo.toml index 9bd3a2307..f44679ec1 100644 --- a/.compatibility_tests/compatibility_test_1_7/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_7/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_7" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_8/Cargo.toml b/.compatibility_tests/compatibility_test_1_8/Cargo.toml index 2c4da0572..efca5f9bc 100644 --- a/.compatibility_tests/compatibility_test_1_8/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_8/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_8" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_1_9/Cargo.toml b/.compatibility_tests/compatibility_test_1_9/Cargo.toml index 06bc22408..d51618118 100644 --- a/.compatibility_tests/compatibility_test_1_9/Cargo.toml +++ b/.compatibility_tests/compatibility_test_1_9/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_1_9" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/.compatibility_tests/compatibility_test_sim/Cargo.toml b/.compatibility_tests/compatibility_test_sim/Cargo.toml index bd528624c..a634d049f 100644 --- a/.compatibility_tests/compatibility_test_sim/Cargo.toml +++ b/.compatibility_tests/compatibility_test_sim/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "compatibility_test_sim" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/CHANGELOG.md b/CHANGELOG.md index 40c6342a4..9c7eeacc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,7 @@ This changelog track changes to the qoqo project starting at version v0.5.0 -## 1.16.2 - -### Fixed in 1.16.2 +## Unreleased * Added the documentation from qoqo_examples. diff --git a/Cargo.lock b/Cargo.lock index 903684fef..bc2e59688 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1095,7 +1095,7 @@ dependencies = [ [[package]] name = "qoqo" -version = "1.16.2" +version = "1.16.1" dependencies = [ "bincode", "nalgebra", @@ -1123,7 +1123,7 @@ dependencies = [ [[package]] name = "qoqo-macros" -version = "1.16.2" +version = "1.16.1" dependencies = [ "proc-macro2", "quote", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "roqoqo" -version = "1.16.2" +version = "1.16.1" dependencies = [ "async-trait", "bincode", @@ -1351,7 +1351,7 @@ dependencies = [ [[package]] name = "roqoqo-derive" -version = "1.16.2" +version = "1.16.1" dependencies = [ "proc-macro2", "quote", @@ -1360,7 +1360,7 @@ dependencies = [ [[package]] name = "roqoqo-test" -version = "1.16.2" +version = "1.16.1" dependencies = [ "nalgebra", "ndarray", diff --git a/qoqo-macros/Cargo.toml b/qoqo-macros/Cargo.toml index 1046ae367..e7edd20fd 100644 --- a/qoqo-macros/Cargo.toml +++ b/qoqo-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "qoqo-macros" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" readme = "../README.md" diff --git a/qoqo/Cargo.toml b/qoqo/Cargo.toml index 8b489239c..fdd74f35e 100644 --- a/qoqo/Cargo.toml +++ b/qoqo/Cargo.toml @@ -1,5 +1,5 @@ [package] -version = "1.16.2" +version = "1.16.1" name = "qoqo" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" diff --git a/qoqo/pyproject.toml b/qoqo/pyproject.toml index c7e3fc804..e33da5224 100644 --- a/qoqo/pyproject.toml +++ b/qoqo/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "qoqo" -version = "1.16.2" +version = "1.16.1" dependencies = ['numpy', 'qoqo_calculator_pyo3>=1.2, <1.3'] license = { text = "Apache-2.0 AND Apache-2.0 with LLVM-exception AND MIT AND Unicode-DFS-2016 AND BSD-2-Clause AND BSD-3-CLause" } maintainers = [ diff --git a/qoqo/python/qoqo/DEPENDENCIES b/qoqo/python/qoqo/DEPENDENCIES index 58411fe88..8887639b8 100644 --- a/qoqo/python/qoqo/DEPENDENCIES +++ b/qoqo/python/qoqo/DEPENDENCIES @@ -20507,7 +20507,7 @@ LICENSE-APACHE: ==================================================== -qoqo 1.16.2 +qoqo 1.16.1 https://github.com/HQSquantumsimulations/qoqo by HQS Quantum Simulations Quantum computing circuit toolkit. Python interface of roqoqo @@ -20719,7 +20719,7 @@ LICENSE: ==================================================== -qoqo-macros 1.16.2 +qoqo-macros 1.16.1 by HQS Quantum Simulations Macros for the qoqo crate License: Apache-2.0 @@ -24160,7 +24160,7 @@ limitations under the License. ==================================================== -roqoqo 1.16.2 +roqoqo 1.16.1 https://github.com/HQSquantumsimulations/qoqo by HQS Quantum Simulations Rust Quantum Computing Toolkit by HQS @@ -24372,7 +24372,7 @@ LICENSE: ==================================================== -roqoqo-derive 1.16.2 +roqoqo-derive 1.16.1 by HQS Quantum Simulations Macros for the roqoqo crate License: Apache-2.0 diff --git a/roqoqo-derive/Cargo.toml b/roqoqo-derive/Cargo.toml index de05d84df..5dbab728b 100644 --- a/roqoqo-derive/Cargo.toml +++ b/roqoqo-derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo-derive" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" diff --git a/roqoqo-test/Cargo.toml b/roqoqo-test/Cargo.toml index ac446579c..5ec184582 100644 --- a/roqoqo-test/Cargo.toml +++ b/roqoqo-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo-test" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021" @@ -18,9 +18,7 @@ doctest = false crate-type = ["rlib"] [dependencies] -roqoqo = { version = "~1.16", path = "../roqoqo", features = [ - "serialize", -] } +roqoqo = { version = "~1.16", path = "../roqoqo", features = ["serialize"] } rand = "~0.8" nalgebra = "0.33.1" ndarray = { version = "0.15" } diff --git a/roqoqo/Cargo.toml b/roqoqo/Cargo.toml index 24015afd7..a3747a976 100644 --- a/roqoqo/Cargo.toml +++ b/roqoqo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "roqoqo" -version = "1.16.2" +version = "1.16.1" authors = ["HQS Quantum Simulations "] license = "Apache-2.0" edition = "2021"