From 6e9bc1cee1721358ef47254f612d506c9fa62d1e Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 11 Sep 2026 14:08:36 +0100 Subject: [PATCH 1/3] feat: added custom modifier page to docs --- pyproject.toml | 2 +- sphinx/language_guide/modifiers/custom.md | 384 ++++++++++++++++++ .../modifiers/modifiers_index.md | 3 +- uv.lock | 74 ++-- 4 files changed, 411 insertions(+), 52 deletions(-) create mode 100644 sphinx/language_guide/modifiers/custom.md diff --git a/pyproject.toml b/pyproject.toml index b3935b5..8992a4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ dependencies = [ prerelease = "allow" [tool.uv.sources] -# guppylang = { git = "https://github.com/quantinuum/guppylang/", rev = "2eadd459c9da4048c630150eae6e81c3282c5bf5", subdirectory = "guppylang" } +guppylang = { git = "https://github.com/quantinuum/guppylang/", rev = "7d91c17243becdc914e5d68da2b9b5325386ed66", subdirectory = "guppylang" } # hugr = { git = "https://github.com/quantinuum/hugr.git", rev = "fe98ba1", subdirectory = "hugr-py" } # tket2 = { git = "https://github.com/quantinuum/tket2", subdirectory = "tket2-py", rev = "309879e" } diff --git a/sphinx/language_guide/modifiers/custom.md b/sphinx/language_guide/modifiers/custom.md new file mode 100644 index 0000000..e1162f2 --- /dev/null +++ b/sphinx/language_guide/modifiers/custom.md @@ -0,0 +1,384 @@ +--- +file_format: mystnb +kernelspec: + name: python3 +--- + +# Custom Modifiers + +When a function is called inside a modifier block, Guppy normally generates its controlled or daggered implementation from the function body. +This requires the body to satisfy the restrictions described in [control](control.md), [dagger](dagger.md), and [function flags](functions.md). +For example, a runtime loop cannot be daggered automatically, even when we know how to write its inverse. + +Custom modifiers let us provide these implementations ourselves using `@guppy.unitary`. +This is also useful when we have a more efficient implementation than the one generated by the compiler. +Calls still use the usual modifier syntax; Guppy selects the custom implementation where one is available. + +## Syntax and Basic Behaviour + +We group the ordinary function and its modified implementations in a Python class decorated with `@guppy.unitary`. +The `__call__` method defines the ordinary operation, while the optional `daggered`, `controlled`, and `ctrl_daggered` methods define its daggered, controlled, and controlled-daggered versions. +Each method is decorated with `@guppy`. + +For example, the following function can be controlled, but its runtime loop prevents automatic daggering. + +```{code-cell} ipython3 +from guppylang import array, guppy +from guppylang.std.quantum import angle, qubit, rz + +@guppy(controllable=True) +def repeated_rz(q: qubit, a: angle, repetitions: int) -> None: + for _ in range(repetitions): + rz(q, a) + +repeated_rz.check() +``` + +To make this function fully unitary, we can define its daggered and controlled-daggered versions explicitly. +Both implementations undo the repeated rotations by negating the angle. +The forward loop can be controlled automatically, so we mark `__call__` as `controllable=True`: + +```{code-cell} ipython3 +from guppylang.std.builtins import control, dagger, nat + +@guppy.unitary +class repeated_rz: + @guppy(controllable=True) + def __call__(q: qubit, a: angle, repetitions: int) -> None: + for _ in range(repetitions): + rz(q, a) + + @guppy + def daggered(q: qubit, a: angle, repetitions: int) -> None: + for _ in range(repetitions): + rz(q, -a) + + @guppy + def ctrl_daggered[n: nat]( + q: qubit, a: angle, repetitions: int, controls: array[qubit, n] + ) -> None: + for _ in range(repetitions): + with control(controls): + rz(q, -a) + +@guppy +def use_repeated_rz(c: qubit, q: qubit, a: angle) -> None: + repeated_rz(q, a, 3) # Uses __call__. + with dagger: + repeated_rz(q, a, 3) # Uses daggered. + with control(c): + repeated_rz(q, a, 3) # Automatically synthesizes controlled version of __call__. + with control(c), dagger: + repeated_rz(q, a, 3) # Uses ctrl_daggered. + +use_repeated_rz.check() +``` + +Call `repeated_rz` like a function; the surrounding modifiers select the implementation. +Although the definition uses Python class syntax, it groups function implementations rather than defining objects. +There is no `self` parameter and no instance to construct. + +## Declaring a Custom Modifier + +A custom modifier declaration starts with a `__call__` method, which defines the operation performed by an ordinary function call. +This method is required, even if the operation will only be used inside modifier blocks. +We can then add `daggered`, `controlled`, and `ctrl_daggered` to supply whichever modified implementations we need, subject to the combinations described in the next section. +Each method is a separate Guppy function decorated with `@guppy`; none takes `self` or accesses instance state. + +The signatures describe different versions of the same operation, so they must agree: + +| Method | Required signature | +| --- | --- | +| `__call__` | The ordinary function signature. | +| `daggered` | The same input types, ownership annotations, type parameters, and return type as `__call__`. | +| `controlled` | The signature of `__call__`, with one additional final type parameter `n: nat` and final argument `controls: array[qubit, n]`. | +| `ctrl_daggered` | The same signature requirements as `controlled`. | + +Here is a complete declaration for the $S$ gate, with all three modified implementations supplied explicitly: + +```{code-cell} ipython3 +from guppylang.std.quantum import s, sdg + +@guppy.unitary +class custom_s: + @guppy + def __call__(q: qubit) -> None: + s(q) + + @guppy + def daggered(q: qubit) -> None: + sdg(q) + + @guppy + def controlled[n: nat](q: qubit, controls: array[qubit, n]) -> None: + with control(controls): + s(q) + + @guppy + def ctrl_daggered[n: nat](q: qubit, controls: array[qubit, n]) -> None: + with control(controls): + sdg(q) + +custom_s.check() +``` + +Here, `daggered` takes the same `q: qubit` argument and returns `None`, just like `__call__`. +Both controlled methods add `[n: nat]` and a final `controls: array[qubit, n]` argument. +This array is borrowed, so do not annotate it with `@owned`. +The generic length lets the same implementation handle one or several control qubits; calling `custom_s(q)` inside `control(c)` supplies an array of length one. + +A custom method cannot add ordinary arguments or change their types. +For example, this `daggered` method has an extra argument, so its signature is rejected: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class extra_dagger_argument: + @guppy + def __call__(q: qubit) -> None: + pass + + @guppy + def daggered(q: qubit, extra: int) -> None: + pass + +extra_dagger_argument.check() +``` + +A controlled implementation must preserve the original arguments before adding the control array. +Changing `q` from `qubit` to `int` is therefore also rejected: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class changed_control_argument: + @guppy + def __call__(q: qubit) -> None: + pass + + @guppy + def controlled[n: nat](q: int, controls: array[qubit, n]) -> None: + pass + +changed_control_argument.check() +``` + + +Only the four recognised methods are allowed inside the class. +Additional methods, class attributes such as `label = "rotation"`, and other class-body statements are rejected. +For example, defining a class attribute is invalid: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class class_attribute: + label = "rotation" + + @guppy + def __call__(q: qubit) -> None: + pass +``` + +An additional method is also invalid, even if it is decorated with `@guppy`: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class extra_method: + @guppy + def __call__(q: qubit) -> None: + pass + + @guppy + def helper(q: qubit) -> None: + pass +``` + +If an implementation needs a helper, define it outside the class, as with `controlled_h_body` below: + +```{code-cell} ipython3 +from guppylang.std.quantum import h + +@guppy +def controlled_h_body[n: nat](q: qubit, controls: array[qubit, n]) -> None: + with control(controls): + h(q) + +@guppy.unitary +class custom_h: + @guppy + def __call__(q: qubit) -> None: + h(q) + + @guppy + def controlled[n: nat](q: qubit, controls: array[qubit, n]) -> None: + controlled_h_body(q, controls) + +@guppy +def use_custom_h(c: qubit, q: qubit) -> None: + with control(c): + custom_h(q) + +use_custom_h.check() +``` + +### Using metadata with custom implementations + +Metadata and [function flags](functions.md) belong on `__call__`. +For example, this declaration sets an expected qubit count and allows automatic generation of all modified versions: + +```{code-cell} ipython3 +from guppylang.decorator import expected_qubits +from guppylang.std.quantum import x + +@guppy.unitary +class hinted_x: + @guppy(unitary=True) + @expected_qubits(1) + def __call__(q: qubit) -> None: + x(q) + +hinted_x.check() +``` + +Place `@expected_qubits` below `@guppy`, as shown above. +Custom methods cannot set their own expected qubit count: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class metadata_on_custom_method: + @guppy + def __call__(q: qubit) -> None: + x(q) + + @guppy + @expected_qubits(1) + def daggered(q: qubit) -> None: + x(q) +``` + +Likewise, setting a function flag on a custom method is rejected: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class flag_on_custom_method: + @guppy + def __call__(q: qubit) -> None: + x(q) + + @guppy(daggerable=True) + def daggered(q: qubit) -> None: + x(q) +``` + +The `@guppy.unitary` decorator itself takes no options, so flags cannot go there either: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary(unitary=True) +class flag_on_class: + @guppy + def __call__(q: qubit) -> None: + x(q) +``` + +Custom implementations are checked as ordinary Guppy functions, which is why `repeated_rz.daggered` can contain a loop. +You are responsible for implementing the correct controlled or inverse operation: here, negating the angle undoes the repeated rotations. +Guppy does not prove that the implementations match. + +## Custom and Default Implementations + +For each modifier combination, Guppy uses the matching custom method if present. +Otherwise, it generates that version from `__call__`, provided its declared flags allow it. +Flags still impose their usual restrictions on the body of `__call__`. + +For example, this operation has a custom inverse and uses automatic generation for both controlled versions: + +```{code-cell} ipython3 +@guppy.unitary +class phase_gate: + @guppy(unitary=True) + def __call__(q: qubit) -> None: + s(q) + + @guppy + def daggered(q: qubit) -> None: + sdg(q) + +@guppy +def use_phase_gate(c: qubit, q: qubit) -> None: + with dagger: + phase_gate(q) # Uses the custom daggered method. + with control(c): + phase_gate(q) # Controlled version of __call__ automatically. + +use_phase_gate.check() +``` + +Here, `unitary=True` permits both automatic transformations, whereas the earlier `repeated_rz` example supplied `ctrl_daggered` because its loop could not be daggered automatically. +Removing the flag from `phase_gate.__call__` would leave a valid declaration that supports only daggering, through its custom method. + +Capabilities are therefore partly inferred: `controlled` supplies controllability, and `daggered` supplies daggerability without requiring those flags on `__call__`. +The decorator's name alone does not enable either capability. + +Guppy checks that these capabilities form a complete set: + +- If both control and dagger are supported, through methods or flags, provide `ctrl_daggered` or declare `__call__` as `unitary=True`. + Guppy does not derive the combined version by controlling `daggered` or daggering `controlled`. +- If `ctrl_daggered` is provided, separate control and dagger support must also exist. + With no flags, supply both `controlled` and `daggered`; with only `controllable=True`, supply `daggered`; with only `daggerable=True`, supply `controlled`. + With `unitary=True`, either can be generated automatically. + +For example, `controllable=True` together with a custom `daggered` method is insufficient without a controlled-daggered implementation: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class missing_combined_version: + @guppy(controllable=True) + def __call__(q: qubit) -> None: + s(q) + + @guppy + def daggered(q: qubit) -> None: + sdg(q) +``` + +Add `ctrl_daggered`, or change the flag on `__call__` to `unitary=True`, to make this declaration valid. +Conversely, supplying only `ctrl_daggered` does not provide the separate controlled and daggered versions: + +```{code-cell} ipython3 +--- +tags: [raises-exception] +--- +@guppy.unitary +class missing_separate_versions: + @guppy + def __call__(q: qubit) -> None: + s(q) + + @guppy + def ctrl_daggered[n: nat](q: qubit, controls: array[qubit, n]) -> None: + with control(controls): + sdg(q) +``` + +Supply both missing methods, or enable their automatic generation with `unitary=True` on `__call__`. diff --git a/sphinx/language_guide/modifiers/modifiers_index.md b/sphinx/language_guide/modifiers/modifiers_index.md index 005b2b0..2dc8a0d 100644 --- a/sphinx/language_guide/modifiers/modifiers_index.md +++ b/sphinx/language_guide/modifiers/modifiers_index.md @@ -146,4 +146,5 @@ local_assignment.check() control.md dagger.md functions.md -``` \ No newline at end of file +custom.md +``` diff --git a/uv.lock b/uv.lock index 2bf9a0d..9f658c8 100644 --- a/uv.lock +++ b/uv.lock @@ -618,7 +618,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, { url = "https://files.pythonhosted.org/packages/43/ab/7ebfe34dce8b87be0d11dae91acbf76f7b8246bf9d6b319c741f99fa59c6/greenlet-3.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349345b770dc88f81506c6861d22a6ccd422207829d2c854ae2af8025af303e3", size = 597294, upload-time = "2025-12-04T14:50:06.847Z" }, { url = "https://files.pythonhosted.org/packages/a4/39/f1c8da50024feecd0793dbd5e08f526809b8ab5609224a2da40aad3a7641/greenlet-3.3.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8e18ed6995e9e2c0b4ed264d2cf89260ab3ac7e13555b8032b25a74c6d18655", size = 607742, upload-time = "2025-12-04T14:57:42.349Z" }, - { url = "https://files.pythonhosted.org/packages/77/cb/43692bcd5f7a0da6ec0ec6d58ee7cddb606d055ce94a62ac9b1aa481e969/greenlet-3.3.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c024b1e5696626890038e34f76140ed1daf858e37496d33f2af57f06189e70d7", size = 622297, upload-time = "2025-12-04T15:07:13.552Z" }, { url = "https://files.pythonhosted.org/packages/75/b0/6bde0b1011a60782108c01de5913c588cf51a839174538d266de15e4bf4d/greenlet-3.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:047ab3df20ede6a57c35c14bf5200fcf04039d50f908270d3f9a7a82064f543b", size = 609885, upload-time = "2025-12-04T14:26:02.368Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/49b46ac39f931f59f987b7cd9f34bfec8ef81d2a1e6e00682f55be5de9f4/greenlet-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d9ad37fc657b1102ec880e637cccf20191581f75c64087a549e66c57e1ceb53", size = 1567424, upload-time = "2025-12-04T15:04:23.757Z" }, { url = "https://files.pythonhosted.org/packages/05/f5/49a9ac2dff7f10091935def9165c90236d8f175afb27cbed38fb1d61ab6b/greenlet-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83cd0e36932e0e7f36a64b732a6f60c2fc2df28c351bae79fbaf4f8092fe7614", size = 1636017, upload-time = "2025-12-04T14:27:29.688Z" }, @@ -626,7 +625,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/2f/28592176381b9ab2cafa12829ba7b472d177f3acc35d8fbcf3673d966fff/greenlet-3.3.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a1e41a81c7e2825822f4e068c48cb2196002362619e2d70b148f20a831c00739", size = 275140, upload-time = "2025-12-04T14:23:01.282Z" }, { url = "https://files.pythonhosted.org/packages/2c/80/fbe937bf81e9fca98c981fe499e59a3f45df2a04da0baa5c2be0dca0d329/greenlet-3.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f515a47d02da4d30caaa85b69474cec77b7929b2e936ff7fb853d42f4bf8808", size = 599219, upload-time = "2025-12-04T14:50:08.309Z" }, { url = "https://files.pythonhosted.org/packages/c2/ff/7c985128f0514271b8268476af89aee6866df5eec04ac17dcfbc676213df/greenlet-3.3.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2d9fd66bfadf230b385fdc90426fcd6eb64db54b40c495b72ac0feb5766c54", size = 610211, upload-time = "2025-12-04T14:57:43.968Z" }, - { url = "https://files.pythonhosted.org/packages/79/07/c47a82d881319ec18a4510bb30463ed6891f2ad2c1901ed5ec23d3de351f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30a6e28487a790417d036088b3bcb3f3ac7d8babaa7d0139edbaddebf3af9492", size = 624311, upload-time = "2025-12-04T15:07:14.697Z" }, { url = "https://files.pythonhosted.org/packages/fd/8e/424b8c6e78bd9837d14ff7df01a9829fc883ba2ab4ea787d4f848435f23f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:087ea5e004437321508a8d6f20efc4cfec5e3c30118e1417ea96ed1d93950527", size = 612833, upload-time = "2025-12-04T14:26:03.669Z" }, { url = "https://files.pythonhosted.org/packages/b5/ba/56699ff9b7c76ca12f1cdc27a886d0f81f2189c3455ff9f65246780f713d/greenlet-3.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab97cf74045343f6c60a39913fa59710e4bd26a536ce7ab2397adf8b27e67c39", size = 1567256, upload-time = "2025-12-04T15:04:25.276Z" }, { url = "https://files.pythonhosted.org/packages/1e/37/f31136132967982d698c71a281a8901daf1a8fbab935dce7c0cf15f942cc/greenlet-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5375d2e23184629112ca1ea89a53389dddbffcf417dad40125713d88eb5f96e8", size = 1636483, upload-time = "2025-12-04T14:27:30.804Z" }, @@ -634,7 +632,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/7c/f0a6d0ede2c7bf092d00bc83ad5bafb7e6ec9b4aab2fbdfa6f134dc73327/greenlet-3.3.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:60c2ef0f578afb3c8d92ea07ad327f9a062547137afe91f38408f08aacab667f", size = 275671, upload-time = "2025-12-04T14:23:05.267Z" }, { url = "https://files.pythonhosted.org/packages/44/06/dac639ae1a50f5969d82d2e3dd9767d30d6dbdbab0e1a54010c8fe90263c/greenlet-3.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5d554d0712ba1de0a6c94c640f7aeba3f85b3a6e1f2899c11c2c0428da9365", size = 646360, upload-time = "2025-12-04T14:50:10.026Z" }, { url = "https://files.pythonhosted.org/packages/e0/94/0fb76fe6c5369fba9bf98529ada6f4c3a1adf19e406a47332245ef0eb357/greenlet-3.3.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3a898b1e9c5f7307ebbde4102908e6cbfcb9ea16284a3abe15cab996bee8b9b3", size = 658160, upload-time = "2025-12-04T14:57:45.41Z" }, - { url = "https://files.pythonhosted.org/packages/93/79/d2c70cae6e823fac36c3bbc9077962105052b7ef81db2f01ec3b9bf17e2b/greenlet-3.3.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dcd2bdbd444ff340e8d6bdf54d2f206ccddbb3ccfdcd3c25bf4afaa7b8f0cf45", size = 671388, upload-time = "2025-12-04T15:07:15.789Z" }, { url = "https://files.pythonhosted.org/packages/b8/14/bab308fc2c1b5228c3224ec2bf928ce2e4d21d8046c161e44a2012b5203e/greenlet-3.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5773edda4dc00e173820722711d043799d3adb4f01731f40619e07ea2750b955", size = 660166, upload-time = "2025-12-04T14:26:05.099Z" }, { url = "https://files.pythonhosted.org/packages/4b/d2/91465d39164eaa0085177f61983d80ffe746c5a1860f009811d498e7259c/greenlet-3.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac0549373982b36d5fd5d30beb8a7a33ee541ff98d2b502714a09f1169f31b55", size = 1615193, upload-time = "2025-12-04T15:04:27.041Z" }, { url = "https://files.pythonhosted.org/packages/42/1b/83d110a37044b92423084d52d5d5a3b3a73cafb51b547e6d7366ff62eff1/greenlet-3.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d198d2d977460358c3b3a4dc844f875d1adb33817f0613f663a656f463764ccc", size = 1683653, upload-time = "2025-12-04T14:27:32.366Z" }, @@ -642,7 +639,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/66/bd6317bc5932accf351fc19f177ffba53712a202f9df10587da8df257c7e/greenlet-3.3.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d6ed6f85fae6cdfdb9ce04c9bf7a08d666cfcfb914e7d006f44f840b46741931", size = 282638, upload-time = "2025-12-04T14:25:20.941Z" }, { url = "https://files.pythonhosted.org/packages/30/cf/cc81cb030b40e738d6e69502ccbd0dd1bced0588e958f9e757945de24404/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9125050fcf24554e69c4cacb086b87b3b55dc395a8b3ebe6487b045b2614388", size = 651145, upload-time = "2025-12-04T14:50:11.039Z" }, { url = "https://files.pythonhosted.org/packages/9c/ea/1020037b5ecfe95ca7df8d8549959baceb8186031da83d5ecceff8b08cd2/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:87e63ccfa13c0a0f6234ed0add552af24cc67dd886731f2261e46e241608bee3", size = 654236, upload-time = "2025-12-04T14:57:47.007Z" }, - { url = "https://files.pythonhosted.org/packages/69/cc/1e4bae2e45ca2fa55299f4e85854606a78ecc37fead20d69322f96000504/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2662433acbca297c9153a4023fe2161c8dcfdcc91f10433171cf7e7d94ba2221", size = 662506, upload-time = "2025-12-04T15:07:16.906Z" }, { url = "https://files.pythonhosted.org/packages/57/b9/f8025d71a6085c441a7eaff0fd928bbb275a6633773667023d19179fe815/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c6e9b9c1527a78520357de498b0e709fb9e2f49c3a513afd5a249007261911b", size = 653783, upload-time = "2025-12-04T14:26:06.225Z" }, { url = "https://files.pythonhosted.org/packages/f6/c7/876a8c7a7485d5d6b5c6821201d542ef28be645aa024cfe1145b35c120c1/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:286d093f95ec98fdd92fcb955003b8a3d054b4e2cab3e2707a5039e7b50520fd", size = 1614857, upload-time = "2025-12-04T15:04:28.484Z" }, { url = "https://files.pythonhosted.org/packages/4f/dc/041be1dff9f23dac5f48a43323cd0789cb798342011c19a248d9c9335536/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c10513330af5b8ae16f023e8ddbfb486ab355d04467c4679c5cfe4659975dd9", size = 1676034, upload-time = "2025-12-04T14:27:33.531Z" }, @@ -670,7 +666,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "furo", specifier = ">=2024.8.6" }, - { name = "guppylang", specifier = "==1.0.4" }, + { name = "guppylang", git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang&rev=7d91c17243becdc914e5d68da2b9b5325386ed66" }, { name = "jupyter", specifier = ">=1.1.0" }, { name = "matplotlib", specifier = ">=3.9.2" }, { name = "myst-nb", specifier = ">=1.1.2" }, @@ -688,8 +684,8 @@ docs = [] [[package]] name = "guppylang" -version = "1.0.4" -source = { registry = "https://pypi.org/simple" } +version = "1.1.0rc0" +source = { git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang&rev=7d91c17243becdc914e5d68da2b9b5325386ed66#7d91c17243becdc914e5d68da2b9b5325386ed66" } dependencies = [ { name = "guppylang-internals" }, { name = "numpy" }, @@ -699,27 +695,20 @@ dependencies = [ { name = "tqdm" }, { name = "types-tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e7/03/24d5a079e27e6ea1e5393ecbaa1ba0dce88ad2ac21d427f4ae42e00850e6/guppylang-1.0.4.tar.gz", hash = "sha256:633099d72b6a3ef5d4d6bcdd0b4941ff1e0f1ab4bed7645b258abc80cacaa0fc", size = 91223, upload-time = "2026-09-08T15:52:41.869Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/d9/b783e5cd4d064b6b3b8802dcca6cb61f50a0f83579f2cb8cc644c282cf9f/guppylang-1.0.4-py3-none-any.whl", hash = "sha256:8a49dc409f0d0adaf5f6e4a10b0c7646067d4165374304fb0919c9053c53344b", size = 88277, upload-time = "2026-09-08T15:52:40.51Z" }, -] [[package]] name = "guppylang-internals" -version = "1.0.4" -source = { registry = "https://pypi.org/simple" } +version = "1.1.0rc0" +source = { git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang-internals&rev=7d91c17243becdc914e5d68da2b9b5325386ed66#7d91c17243becdc914e5d68da2b9b5325386ed66" } dependencies = [ { name = "hugr" }, + { name = "networkx" }, { name = "pytket" }, { name = "tket", extra = ["pytket"] }, { name = "tket-exts" }, { name = "typing-extensions" }, { name = "wasmtime" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/83/d05917968a79573fc0e65a7e65a07435d4834309438d3a1b9d57de70606d/guppylang_internals-1.0.4.tar.gz", hash = "sha256:cd5676e62c952cc7868c72e467a787b8b06d1925e9daefd677936c46cd6523b3", size = 242189, upload-time = "2026-09-08T16:12:51.46Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/84/ef9e218954e24a921c0a549daa8d655c9e5faf5084180c23f8144a270022/guppylang_internals-1.0.4-py3-none-any.whl", hash = "sha256:54594ebde647d4eff42a48a806efb5a98590298ba1f445be10eae729e03fe026", size = 296938, upload-time = "2026-09-08T16:12:49.904Z" }, -] [[package]] name = "h11" @@ -2901,19 +2890,19 @@ wheels = [ [[package]] name = "selene-hugr-qis-compiler" -version = "0.4.3" +version = "0.5.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/8f/9e0bafa85e0ba170886f771a333fee4d28adc2a1264a27e30593ed4d527a/selene_hugr_qis_compiler-0.4.3-cp310-abi3-macosx_15_0_arm64.whl", hash = "sha256:be65ad772415daf5c57ccf0a9bb40abb503ca29b021e3e7301ed871490ab41f4", size = 24743713, upload-time = "2026-09-07T10:13:05.287Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b0/5cd13932db301a694c50ca48bf2aa06bb459aa477d5d2180987b74ffcf68/selene_hugr_qis_compiler-0.4.3-cp310-abi3-macosx_15_0_x86_64.whl", hash = "sha256:4dc92ab8a171f3de144e3af3963432e9540ae813440972ee68509ec7f0104b6a", size = 26298009, upload-time = "2026-09-07T10:13:08.003Z" }, - { url = "https://files.pythonhosted.org/packages/dd/03/e548a38b76e859d838e4ca9a88e7689fac1a7739b04f14d75718d0ab8120/selene_hugr_qis_compiler-0.4.3-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c193f04c968c485eea4432adcaf66f9a12c523cc5273cf504fbe1af0d6f4aef0", size = 33740177, upload-time = "2026-09-07T10:13:10.421Z" }, - { url = "https://files.pythonhosted.org/packages/42/e7/94833e2c7c189d6280583775e022c5bcde0cf1256918d8ca5469034a8109/selene_hugr_qis_compiler-0.4.3-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4ee51009bddaff8dd330e4abf99ecc48eebd4535b36e34118bbf5cae99dd379e", size = 34558873, upload-time = "2026-09-07T10:13:13.161Z" }, - { url = "https://files.pythonhosted.org/packages/4a/79/a9502cbfcdfd486f2b75b85ae9c0ba296db63db902de1ff3bb43fddd0e3d/selene_hugr_qis_compiler-0.4.3-cp310-abi3-win_amd64.whl", hash = "sha256:e20ae29860e47191885d5053d2815e21beabbd12ccb8ad012870af67b06e32a3", size = 24535671, upload-time = "2026-09-07T10:13:15.711Z" }, + { url = "https://files.pythonhosted.org/packages/0e/95/13a9c0def8fdaa2bd8bbdd2576595112d96b04b7bd42544ee1a2d6bdc222/selene_hugr_qis_compiler-0.5.0-cp310-abi3-macosx_15_0_arm64.whl", hash = "sha256:84d0df9ebbc4a39ab94aabe3453d26f086d8037f518bdd2150cacb1ad640fc2a", size = 25094323, upload-time = "2026-09-04T18:00:02.433Z" }, + { url = "https://files.pythonhosted.org/packages/09/c5/71cd3f3b4f54ee5635c4a6d2df04ce71fac0addb007a45719d1cb41869b3/selene_hugr_qis_compiler-0.5.0-cp310-abi3-macosx_15_0_x86_64.whl", hash = "sha256:79cdedc84502e71598f32d3c8ad31a0f518f428b21c2d33dd8435934ef923591", size = 26646686, upload-time = "2026-09-04T18:00:06.154Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/3c0e456b4f1fa1e7f679a26a442d0238c5f45835f4a4ff2db9a2ca791c5b/selene_hugr_qis_compiler-0.5.0-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dd2d8615c9c1236bff943622ad6a448527e8ff5233820d776a1ec6b1348b6425", size = 34121867, upload-time = "2026-09-04T18:00:10.188Z" }, + { url = "https://files.pythonhosted.org/packages/49/b7/9afa450ac4986143f09fcff2b43695be0364eab39914fc14e0ba7ea414c6/selene_hugr_qis_compiler-0.5.0-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:472aa6210a77ddb7415f580c274b622dde7d0b02dd5029173b7bef4519f641cb", size = 34890587, upload-time = "2026-09-04T18:00:15.128Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/9de490846c3ade96265ceaafaf2a7935a7393cbe7667bbd45fb45e7026c3/selene_hugr_qis_compiler-0.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:9b36046eb0e1eb5999057cbacc9c8bdb93cff5ec669883b52d3a5e513d3828d0", size = 25156431, upload-time = "2026-09-04T18:00:19.436Z" }, ] [[package]] name = "selene-sim" -version = "0.3.0a2" +version = "0.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2922,11 +2911,11 @@ dependencies = [ { name = "tqdm" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/54/2c/98835dc3c61e00a208e06297701cd60e78183e3d36216d98660750ac109a/selene_sim-0.3.0a2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:208864a46b190d89032153cf1653b42178bf7f3e3e9e59551f082dcadf0c940e", size = 5117464, upload-time = "2026-07-16T12:19:12.485Z" }, - { url = "https://files.pythonhosted.org/packages/45/a0/9b68aa051942e1c0bd47c66c82daaf9b5fc1297bcfa4be55f11ca3b49d39/selene_sim-0.3.0a2-py3-none-macosx_11_0_x86_64.whl", hash = "sha256:6b092404dd751b3583d575c04c593d44e6df2231f336588b0902ccbef47ef4a6", size = 5334925, upload-time = "2026-07-16T12:19:14.475Z" }, - { url = "https://files.pythonhosted.org/packages/64/da/64fce3d14d278d8cc8929a67f6caa5dbc06e34020273432df4c1c2e576d3/selene_sim-0.3.0a2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:07a4014cfd3c4928cfdae72b0961daf36ed8409ad4b45445c54b0fea655ef98d", size = 5161015, upload-time = "2026-07-16T12:19:15.973Z" }, - { url = "https://files.pythonhosted.org/packages/22/b6/3e0ea2ccb2c636a62634bc66781ca1cf7de2a5eaeced246cfccc60f5bcdc/selene_sim-0.3.0a2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cd69a1046918a1b953fa56f00088f9cbb6bb163ebd101ea14d9e60ab638ad189", size = 5361805, upload-time = "2026-07-16T12:19:17.729Z" }, - { url = "https://files.pythonhosted.org/packages/f0/a5/49e8bfcab422c51589818c3d39b2964e17f63f4670b1cc2b88d98aa3aac3/selene_sim-0.3.0a2-py3-none-win_amd64.whl", hash = "sha256:a051e2f6445a581812aff70ee3aad06eca4994f2aca5dd7b56d38adca6677276", size = 11271768, upload-time = "2026-07-16T12:19:19.53Z" }, + { url = "https://files.pythonhosted.org/packages/52/53/31e795309d5d8ed9a09e54a613794b40092cec4a0b64ade1d02d9cedc8a3/selene_sim-0.3.2-py3-none-macosx_12_0_arm64.whl", hash = "sha256:aa6786bf229149e78cf22264b418d310469c9b7cbb3aba56bd505fd3815747cb", size = 21080852, upload-time = "2026-09-09T19:44:34.111Z" }, + { url = "https://files.pythonhosted.org/packages/70/61/3b35bfb730d9e6e51df28dc9fca2f95201a1399531d8466d8ef43b31d3af/selene_sim-0.3.2-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:198d8294045a23e39d366e44dd1bbdf4c33c5de84b4445b2052138451fe9603a", size = 21711704, upload-time = "2026-09-09T19:44:36.777Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a1/e12170ee08721ca545e3dac99a3ccb16d962d911ae94e2248b4181741879/selene_sim-0.3.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ef3694e33ff779a9a7e33e2b9667bf8368f204dfbe82be6fb6fbca6271e3a90e", size = 8124318, upload-time = "2026-09-09T19:44:38.718Z" }, + { url = "https://files.pythonhosted.org/packages/52/ca/5c945b9ecc0fcc6fa9b563d43bef78c1e0bd154d78ceebe8fd71a2b55b30/selene_sim-0.3.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:ae5032894c7ee945ada6b053071b572959e4e25480cb4b22b89a9367c339e866", size = 8458825, upload-time = "2026-09-09T19:44:40.209Z" }, + { url = "https://files.pythonhosted.org/packages/9d/31/cda87763f2add735c88e48cd4f16bb6c3b14ab8dd9ac49ce06b392492b3c/selene_sim-0.3.2-py3-none-win_amd64.whl", hash = "sha256:a637db419f6aba2bb37f8cda5078071e85969b7e97b7d8ed67265665c2f0febb", size = 13730667, upload-time = "2026-09-09T19:44:41.905Z" }, ] [[package]] @@ -3364,14 +3353,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.68.4" +version = "4.70.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/5f/57ff8b434839e70dab45601284ea413e947a63799891b7553e5960a793a8/tqdm-4.68.4.tar.gz", hash = "sha256:19829c9673638f2a0b8617da4cdcb927e831cd88bcfcb6e78d42a4d1af131520", size = 792418, upload-time = "2026-07-07T09:58:18.369Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl", hash = "sha256:5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2", size = 676612, upload-time = "2026-07-07T09:58:16.256Z" }, + { url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" }, ] [[package]] @@ -3383,28 +3372,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] -[[package]] -name = "types-requests" -version = "2.32.4.20250913" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/36/27/489922f4505975b11de2b5ad07b4fe1dca0bca9be81a703f26c5f3acfce5/types_requests-2.32.4.20250913.tar.gz", hash = "sha256:abd6d4f9ce3a9383f269775a9835a4c24e5cd6b9f647d64f88aa4613c33def5d", size = 23113, upload-time = "2025-09-13T02:40:02.309Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/20/9a227ea57c1285986c4cf78400d0a91615d25b24e257fd9e2969606bdfae/types_requests-2.32.4.20250913-py3-none-any.whl", hash = "sha256:78c9c1fffebbe0fa487a418e0fa5252017e9c60d1a2da394077f1780f655d7e1", size = 20658, upload-time = "2025-09-13T02:40:01.115Z" }, -] - [[package]] name = "types-tqdm" -version = "4.67.0.20250809" +version = "4.70.0.20260906" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "types-requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fb/d0/cf498fc630d9fdaf2428b93e60b0e67b08008fec22b78716b8323cf644dc/types_tqdm-4.67.0.20250809.tar.gz", hash = "sha256:02bf7ab91256080b9c4c63f9f11b519c27baaf52718e5fdab9e9606da168d500", size = 17200, upload-time = "2025-08-09T03:17:43.489Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/92/517d71d5a399cd2f8ead3b4328d987262478f22fbbe7f8312360d4c321d0/types_tqdm-4.70.0.20260906.tar.gz", hash = "sha256:6581dc996152a87d51ce2ea169169187ffc0a96dacdb8adbdef29cbee8c1e631", size = 19309, upload-time = "2026-09-06T06:35:31.916Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/13/3ff0781445d7c12730befce0fddbbc7a76e56eb0e7029446f2853238360a/types_tqdm-4.67.0.20250809-py3-none-any.whl", hash = "sha256:1a73053b31fcabf3c1f3e2a9d5ecdba0f301bde47a418cd0e0bdf774827c5c57", size = 24020, upload-time = "2025-08-09T03:17:42.453Z" }, + { url = "https://files.pythonhosted.org/packages/81/ea/d12697988ab2c672877796ecaea69666e2379ee7b40f01f4540250d5a97b/types_tqdm-4.70.0.20260906-py3-none-any.whl", hash = "sha256:c3b88c694928515d601f73fa6646aa43adc0ef735bedbeebf0cc543f6a201ae8", size = 25181, upload-time = "2026-09-06T06:35:30.931Z" }, ] [[package]] From 148859167fa4ee5f4a32ad0757efc4fa43f84535 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 11 Sep 2026 14:10:24 +0100 Subject: [PATCH 2/3] fix: rename classes for clarity in custom modifiers documentation --- sphinx/language_guide/modifiers/custom.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sphinx/language_guide/modifiers/custom.md b/sphinx/language_guide/modifiers/custom.md index e1162f2..674fa67 100644 --- a/sphinx/language_guide/modifiers/custom.md +++ b/sphinx/language_guide/modifiers/custom.md @@ -352,7 +352,7 @@ For example, `controllable=True` together with a custom `daggered` method is ins tags: [raises-exception] --- @guppy.unitary -class missing_combined_version: +class missing_ctrl_daggered: @guppy(controllable=True) def __call__(q: qubit) -> None: s(q) @@ -370,7 +370,7 @@ Conversely, supplying only `ctrl_daggered` does not provide the separate control tags: [raises-exception] --- @guppy.unitary -class missing_separate_versions: +class missing_controlled_and_daggered: @guppy def __call__(q: qubit) -> None: s(q) From e1cdfc6a14f7bc43ae4124e9694ccf10e0fe9726 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Tue, 15 Sep 2026 14:43:39 +0100 Subject: [PATCH 3/3] undo toml changes --- pyproject.toml | 2 +- uv.lock | 74 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8992a4e..b3935b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ dependencies = [ prerelease = "allow" [tool.uv.sources] -guppylang = { git = "https://github.com/quantinuum/guppylang/", rev = "7d91c17243becdc914e5d68da2b9b5325386ed66", subdirectory = "guppylang" } +# guppylang = { git = "https://github.com/quantinuum/guppylang/", rev = "2eadd459c9da4048c630150eae6e81c3282c5bf5", subdirectory = "guppylang" } # hugr = { git = "https://github.com/quantinuum/hugr.git", rev = "fe98ba1", subdirectory = "hugr-py" } # tket2 = { git = "https://github.com/quantinuum/tket2", subdirectory = "tket2-py", rev = "309879e" } diff --git a/uv.lock b/uv.lock index 9f658c8..2bf9a0d 100644 --- a/uv.lock +++ b/uv.lock @@ -618,6 +618,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, { url = "https://files.pythonhosted.org/packages/43/ab/7ebfe34dce8b87be0d11dae91acbf76f7b8246bf9d6b319c741f99fa59c6/greenlet-3.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349345b770dc88f81506c6861d22a6ccd422207829d2c854ae2af8025af303e3", size = 597294, upload-time = "2025-12-04T14:50:06.847Z" }, { url = "https://files.pythonhosted.org/packages/a4/39/f1c8da50024feecd0793dbd5e08f526809b8ab5609224a2da40aad3a7641/greenlet-3.3.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8e18ed6995e9e2c0b4ed264d2cf89260ab3ac7e13555b8032b25a74c6d18655", size = 607742, upload-time = "2025-12-04T14:57:42.349Z" }, + { url = "https://files.pythonhosted.org/packages/77/cb/43692bcd5f7a0da6ec0ec6d58ee7cddb606d055ce94a62ac9b1aa481e969/greenlet-3.3.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c024b1e5696626890038e34f76140ed1daf858e37496d33f2af57f06189e70d7", size = 622297, upload-time = "2025-12-04T15:07:13.552Z" }, { url = "https://files.pythonhosted.org/packages/75/b0/6bde0b1011a60782108c01de5913c588cf51a839174538d266de15e4bf4d/greenlet-3.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:047ab3df20ede6a57c35c14bf5200fcf04039d50f908270d3f9a7a82064f543b", size = 609885, upload-time = "2025-12-04T14:26:02.368Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/49b46ac39f931f59f987b7cd9f34bfec8ef81d2a1e6e00682f55be5de9f4/greenlet-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d9ad37fc657b1102ec880e637cccf20191581f75c64087a549e66c57e1ceb53", size = 1567424, upload-time = "2025-12-04T15:04:23.757Z" }, { url = "https://files.pythonhosted.org/packages/05/f5/49a9ac2dff7f10091935def9165c90236d8f175afb27cbed38fb1d61ab6b/greenlet-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83cd0e36932e0e7f36a64b732a6f60c2fc2df28c351bae79fbaf4f8092fe7614", size = 1636017, upload-time = "2025-12-04T14:27:29.688Z" }, @@ -625,6 +626,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/2f/28592176381b9ab2cafa12829ba7b472d177f3acc35d8fbcf3673d966fff/greenlet-3.3.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a1e41a81c7e2825822f4e068c48cb2196002362619e2d70b148f20a831c00739", size = 275140, upload-time = "2025-12-04T14:23:01.282Z" }, { url = "https://files.pythonhosted.org/packages/2c/80/fbe937bf81e9fca98c981fe499e59a3f45df2a04da0baa5c2be0dca0d329/greenlet-3.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f515a47d02da4d30caaa85b69474cec77b7929b2e936ff7fb853d42f4bf8808", size = 599219, upload-time = "2025-12-04T14:50:08.309Z" }, { url = "https://files.pythonhosted.org/packages/c2/ff/7c985128f0514271b8268476af89aee6866df5eec04ac17dcfbc676213df/greenlet-3.3.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2d9fd66bfadf230b385fdc90426fcd6eb64db54b40c495b72ac0feb5766c54", size = 610211, upload-time = "2025-12-04T14:57:43.968Z" }, + { url = "https://files.pythonhosted.org/packages/79/07/c47a82d881319ec18a4510bb30463ed6891f2ad2c1901ed5ec23d3de351f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30a6e28487a790417d036088b3bcb3f3ac7d8babaa7d0139edbaddebf3af9492", size = 624311, upload-time = "2025-12-04T15:07:14.697Z" }, { url = "https://files.pythonhosted.org/packages/fd/8e/424b8c6e78bd9837d14ff7df01a9829fc883ba2ab4ea787d4f848435f23f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:087ea5e004437321508a8d6f20efc4cfec5e3c30118e1417ea96ed1d93950527", size = 612833, upload-time = "2025-12-04T14:26:03.669Z" }, { url = "https://files.pythonhosted.org/packages/b5/ba/56699ff9b7c76ca12f1cdc27a886d0f81f2189c3455ff9f65246780f713d/greenlet-3.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab97cf74045343f6c60a39913fa59710e4bd26a536ce7ab2397adf8b27e67c39", size = 1567256, upload-time = "2025-12-04T15:04:25.276Z" }, { url = "https://files.pythonhosted.org/packages/1e/37/f31136132967982d698c71a281a8901daf1a8fbab935dce7c0cf15f942cc/greenlet-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5375d2e23184629112ca1ea89a53389dddbffcf417dad40125713d88eb5f96e8", size = 1636483, upload-time = "2025-12-04T14:27:30.804Z" }, @@ -632,6 +634,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/7c/f0a6d0ede2c7bf092d00bc83ad5bafb7e6ec9b4aab2fbdfa6f134dc73327/greenlet-3.3.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:60c2ef0f578afb3c8d92ea07ad327f9a062547137afe91f38408f08aacab667f", size = 275671, upload-time = "2025-12-04T14:23:05.267Z" }, { url = "https://files.pythonhosted.org/packages/44/06/dac639ae1a50f5969d82d2e3dd9767d30d6dbdbab0e1a54010c8fe90263c/greenlet-3.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5d554d0712ba1de0a6c94c640f7aeba3f85b3a6e1f2899c11c2c0428da9365", size = 646360, upload-time = "2025-12-04T14:50:10.026Z" }, { url = "https://files.pythonhosted.org/packages/e0/94/0fb76fe6c5369fba9bf98529ada6f4c3a1adf19e406a47332245ef0eb357/greenlet-3.3.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3a898b1e9c5f7307ebbde4102908e6cbfcb9ea16284a3abe15cab996bee8b9b3", size = 658160, upload-time = "2025-12-04T14:57:45.41Z" }, + { url = "https://files.pythonhosted.org/packages/93/79/d2c70cae6e823fac36c3bbc9077962105052b7ef81db2f01ec3b9bf17e2b/greenlet-3.3.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dcd2bdbd444ff340e8d6bdf54d2f206ccddbb3ccfdcd3c25bf4afaa7b8f0cf45", size = 671388, upload-time = "2025-12-04T15:07:15.789Z" }, { url = "https://files.pythonhosted.org/packages/b8/14/bab308fc2c1b5228c3224ec2bf928ce2e4d21d8046c161e44a2012b5203e/greenlet-3.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5773edda4dc00e173820722711d043799d3adb4f01731f40619e07ea2750b955", size = 660166, upload-time = "2025-12-04T14:26:05.099Z" }, { url = "https://files.pythonhosted.org/packages/4b/d2/91465d39164eaa0085177f61983d80ffe746c5a1860f009811d498e7259c/greenlet-3.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac0549373982b36d5fd5d30beb8a7a33ee541ff98d2b502714a09f1169f31b55", size = 1615193, upload-time = "2025-12-04T15:04:27.041Z" }, { url = "https://files.pythonhosted.org/packages/42/1b/83d110a37044b92423084d52d5d5a3b3a73cafb51b547e6d7366ff62eff1/greenlet-3.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d198d2d977460358c3b3a4dc844f875d1adb33817f0613f663a656f463764ccc", size = 1683653, upload-time = "2025-12-04T14:27:32.366Z" }, @@ -639,6 +642,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/66/bd6317bc5932accf351fc19f177ffba53712a202f9df10587da8df257c7e/greenlet-3.3.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d6ed6f85fae6cdfdb9ce04c9bf7a08d666cfcfb914e7d006f44f840b46741931", size = 282638, upload-time = "2025-12-04T14:25:20.941Z" }, { url = "https://files.pythonhosted.org/packages/30/cf/cc81cb030b40e738d6e69502ccbd0dd1bced0588e958f9e757945de24404/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9125050fcf24554e69c4cacb086b87b3b55dc395a8b3ebe6487b045b2614388", size = 651145, upload-time = "2025-12-04T14:50:11.039Z" }, { url = "https://files.pythonhosted.org/packages/9c/ea/1020037b5ecfe95ca7df8d8549959baceb8186031da83d5ecceff8b08cd2/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:87e63ccfa13c0a0f6234ed0add552af24cc67dd886731f2261e46e241608bee3", size = 654236, upload-time = "2025-12-04T14:57:47.007Z" }, + { url = "https://files.pythonhosted.org/packages/69/cc/1e4bae2e45ca2fa55299f4e85854606a78ecc37fead20d69322f96000504/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2662433acbca297c9153a4023fe2161c8dcfdcc91f10433171cf7e7d94ba2221", size = 662506, upload-time = "2025-12-04T15:07:16.906Z" }, { url = "https://files.pythonhosted.org/packages/57/b9/f8025d71a6085c441a7eaff0fd928bbb275a6633773667023d19179fe815/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c6e9b9c1527a78520357de498b0e709fb9e2f49c3a513afd5a249007261911b", size = 653783, upload-time = "2025-12-04T14:26:06.225Z" }, { url = "https://files.pythonhosted.org/packages/f6/c7/876a8c7a7485d5d6b5c6821201d542ef28be645aa024cfe1145b35c120c1/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:286d093f95ec98fdd92fcb955003b8a3d054b4e2cab3e2707a5039e7b50520fd", size = 1614857, upload-time = "2025-12-04T15:04:28.484Z" }, { url = "https://files.pythonhosted.org/packages/4f/dc/041be1dff9f23dac5f48a43323cd0789cb798342011c19a248d9c9335536/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c10513330af5b8ae16f023e8ddbfb486ab355d04467c4679c5cfe4659975dd9", size = 1676034, upload-time = "2025-12-04T14:27:33.531Z" }, @@ -666,7 +670,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "furo", specifier = ">=2024.8.6" }, - { name = "guppylang", git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang&rev=7d91c17243becdc914e5d68da2b9b5325386ed66" }, + { name = "guppylang", specifier = "==1.0.4" }, { name = "jupyter", specifier = ">=1.1.0" }, { name = "matplotlib", specifier = ">=3.9.2" }, { name = "myst-nb", specifier = ">=1.1.2" }, @@ -684,8 +688,8 @@ docs = [] [[package]] name = "guppylang" -version = "1.1.0rc0" -source = { git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang&rev=7d91c17243becdc914e5d68da2b9b5325386ed66#7d91c17243becdc914e5d68da2b9b5325386ed66" } +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "guppylang-internals" }, { name = "numpy" }, @@ -695,20 +699,27 @@ dependencies = [ { name = "tqdm" }, { name = "types-tqdm" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/e7/03/24d5a079e27e6ea1e5393ecbaa1ba0dce88ad2ac21d427f4ae42e00850e6/guppylang-1.0.4.tar.gz", hash = "sha256:633099d72b6a3ef5d4d6bcdd0b4941ff1e0f1ab4bed7645b258abc80cacaa0fc", size = 91223, upload-time = "2026-09-08T15:52:41.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/d9/b783e5cd4d064b6b3b8802dcca6cb61f50a0f83579f2cb8cc644c282cf9f/guppylang-1.0.4-py3-none-any.whl", hash = "sha256:8a49dc409f0d0adaf5f6e4a10b0c7646067d4165374304fb0919c9053c53344b", size = 88277, upload-time = "2026-09-08T15:52:40.51Z" }, +] [[package]] name = "guppylang-internals" -version = "1.1.0rc0" -source = { git = "https://github.com/quantinuum/guppylang/?subdirectory=guppylang-internals&rev=7d91c17243becdc914e5d68da2b9b5325386ed66#7d91c17243becdc914e5d68da2b9b5325386ed66" } +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "hugr" }, - { name = "networkx" }, { name = "pytket" }, { name = "tket", extra = ["pytket"] }, { name = "tket-exts" }, { name = "typing-extensions" }, { name = "wasmtime" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/49/83/d05917968a79573fc0e65a7e65a07435d4834309438d3a1b9d57de70606d/guppylang_internals-1.0.4.tar.gz", hash = "sha256:cd5676e62c952cc7868c72e467a787b8b06d1925e9daefd677936c46cd6523b3", size = 242189, upload-time = "2026-09-08T16:12:51.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/84/ef9e218954e24a921c0a549daa8d655c9e5faf5084180c23f8144a270022/guppylang_internals-1.0.4-py3-none-any.whl", hash = "sha256:54594ebde647d4eff42a48a806efb5a98590298ba1f445be10eae729e03fe026", size = 296938, upload-time = "2026-09-08T16:12:49.904Z" }, +] [[package]] name = "h11" @@ -2890,19 +2901,19 @@ wheels = [ [[package]] name = "selene-hugr-qis-compiler" -version = "0.5.0" +version = "0.4.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/95/13a9c0def8fdaa2bd8bbdd2576595112d96b04b7bd42544ee1a2d6bdc222/selene_hugr_qis_compiler-0.5.0-cp310-abi3-macosx_15_0_arm64.whl", hash = "sha256:84d0df9ebbc4a39ab94aabe3453d26f086d8037f518bdd2150cacb1ad640fc2a", size = 25094323, upload-time = "2026-09-04T18:00:02.433Z" }, - { url = "https://files.pythonhosted.org/packages/09/c5/71cd3f3b4f54ee5635c4a6d2df04ce71fac0addb007a45719d1cb41869b3/selene_hugr_qis_compiler-0.5.0-cp310-abi3-macosx_15_0_x86_64.whl", hash = "sha256:79cdedc84502e71598f32d3c8ad31a0f518f428b21c2d33dd8435934ef923591", size = 26646686, upload-time = "2026-09-04T18:00:06.154Z" }, - { url = "https://files.pythonhosted.org/packages/d3/27/3c0e456b4f1fa1e7f679a26a442d0238c5f45835f4a4ff2db9a2ca791c5b/selene_hugr_qis_compiler-0.5.0-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dd2d8615c9c1236bff943622ad6a448527e8ff5233820d776a1ec6b1348b6425", size = 34121867, upload-time = "2026-09-04T18:00:10.188Z" }, - { url = "https://files.pythonhosted.org/packages/49/b7/9afa450ac4986143f09fcff2b43695be0364eab39914fc14e0ba7ea414c6/selene_hugr_qis_compiler-0.5.0-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:472aa6210a77ddb7415f580c274b622dde7d0b02dd5029173b7bef4519f641cb", size = 34890587, upload-time = "2026-09-04T18:00:15.128Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/9de490846c3ade96265ceaafaf2a7935a7393cbe7667bbd45fb45e7026c3/selene_hugr_qis_compiler-0.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:9b36046eb0e1eb5999057cbacc9c8bdb93cff5ec669883b52d3a5e513d3828d0", size = 25156431, upload-time = "2026-09-04T18:00:19.436Z" }, + { url = "https://files.pythonhosted.org/packages/42/8f/9e0bafa85e0ba170886f771a333fee4d28adc2a1264a27e30593ed4d527a/selene_hugr_qis_compiler-0.4.3-cp310-abi3-macosx_15_0_arm64.whl", hash = "sha256:be65ad772415daf5c57ccf0a9bb40abb503ca29b021e3e7301ed871490ab41f4", size = 24743713, upload-time = "2026-09-07T10:13:05.287Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b0/5cd13932db301a694c50ca48bf2aa06bb459aa477d5d2180987b74ffcf68/selene_hugr_qis_compiler-0.4.3-cp310-abi3-macosx_15_0_x86_64.whl", hash = "sha256:4dc92ab8a171f3de144e3af3963432e9540ae813440972ee68509ec7f0104b6a", size = 26298009, upload-time = "2026-09-07T10:13:08.003Z" }, + { url = "https://files.pythonhosted.org/packages/dd/03/e548a38b76e859d838e4ca9a88e7689fac1a7739b04f14d75718d0ab8120/selene_hugr_qis_compiler-0.4.3-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c193f04c968c485eea4432adcaf66f9a12c523cc5273cf504fbe1af0d6f4aef0", size = 33740177, upload-time = "2026-09-07T10:13:10.421Z" }, + { url = "https://files.pythonhosted.org/packages/42/e7/94833e2c7c189d6280583775e022c5bcde0cf1256918d8ca5469034a8109/selene_hugr_qis_compiler-0.4.3-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4ee51009bddaff8dd330e4abf99ecc48eebd4535b36e34118bbf5cae99dd379e", size = 34558873, upload-time = "2026-09-07T10:13:13.161Z" }, + { url = "https://files.pythonhosted.org/packages/4a/79/a9502cbfcdfd486f2b75b85ae9c0ba296db63db902de1ff3bb43fddd0e3d/selene_hugr_qis_compiler-0.4.3-cp310-abi3-win_amd64.whl", hash = "sha256:e20ae29860e47191885d5053d2815e21beabbd12ccb8ad012870af67b06e32a3", size = 24535671, upload-time = "2026-09-07T10:13:15.711Z" }, ] [[package]] name = "selene-sim" -version = "0.3.2" +version = "0.3.0a2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2911,11 +2922,11 @@ dependencies = [ { name = "tqdm" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/52/53/31e795309d5d8ed9a09e54a613794b40092cec4a0b64ade1d02d9cedc8a3/selene_sim-0.3.2-py3-none-macosx_12_0_arm64.whl", hash = "sha256:aa6786bf229149e78cf22264b418d310469c9b7cbb3aba56bd505fd3815747cb", size = 21080852, upload-time = "2026-09-09T19:44:34.111Z" }, - { url = "https://files.pythonhosted.org/packages/70/61/3b35bfb730d9e6e51df28dc9fca2f95201a1399531d8466d8ef43b31d3af/selene_sim-0.3.2-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:198d8294045a23e39d366e44dd1bbdf4c33c5de84b4445b2052138451fe9603a", size = 21711704, upload-time = "2026-09-09T19:44:36.777Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a1/e12170ee08721ca545e3dac99a3ccb16d962d911ae94e2248b4181741879/selene_sim-0.3.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ef3694e33ff779a9a7e33e2b9667bf8368f204dfbe82be6fb6fbca6271e3a90e", size = 8124318, upload-time = "2026-09-09T19:44:38.718Z" }, - { url = "https://files.pythonhosted.org/packages/52/ca/5c945b9ecc0fcc6fa9b563d43bef78c1e0bd154d78ceebe8fd71a2b55b30/selene_sim-0.3.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:ae5032894c7ee945ada6b053071b572959e4e25480cb4b22b89a9367c339e866", size = 8458825, upload-time = "2026-09-09T19:44:40.209Z" }, - { url = "https://files.pythonhosted.org/packages/9d/31/cda87763f2add735c88e48cd4f16bb6c3b14ab8dd9ac49ce06b392492b3c/selene_sim-0.3.2-py3-none-win_amd64.whl", hash = "sha256:a637db419f6aba2bb37f8cda5078071e85969b7e97b7d8ed67265665c2f0febb", size = 13730667, upload-time = "2026-09-09T19:44:41.905Z" }, + { url = "https://files.pythonhosted.org/packages/54/2c/98835dc3c61e00a208e06297701cd60e78183e3d36216d98660750ac109a/selene_sim-0.3.0a2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:208864a46b190d89032153cf1653b42178bf7f3e3e9e59551f082dcadf0c940e", size = 5117464, upload-time = "2026-07-16T12:19:12.485Z" }, + { url = "https://files.pythonhosted.org/packages/45/a0/9b68aa051942e1c0bd47c66c82daaf9b5fc1297bcfa4be55f11ca3b49d39/selene_sim-0.3.0a2-py3-none-macosx_11_0_x86_64.whl", hash = "sha256:6b092404dd751b3583d575c04c593d44e6df2231f336588b0902ccbef47ef4a6", size = 5334925, upload-time = "2026-07-16T12:19:14.475Z" }, + { url = "https://files.pythonhosted.org/packages/64/da/64fce3d14d278d8cc8929a67f6caa5dbc06e34020273432df4c1c2e576d3/selene_sim-0.3.0a2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:07a4014cfd3c4928cfdae72b0961daf36ed8409ad4b45445c54b0fea655ef98d", size = 5161015, upload-time = "2026-07-16T12:19:15.973Z" }, + { url = "https://files.pythonhosted.org/packages/22/b6/3e0ea2ccb2c636a62634bc66781ca1cf7de2a5eaeced246cfccc60f5bcdc/selene_sim-0.3.0a2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cd69a1046918a1b953fa56f00088f9cbb6bb163ebd101ea14d9e60ab638ad189", size = 5361805, upload-time = "2026-07-16T12:19:17.729Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a5/49e8bfcab422c51589818c3d39b2964e17f63f4670b1cc2b88d98aa3aac3/selene_sim-0.3.0a2-py3-none-win_amd64.whl", hash = "sha256:a051e2f6445a581812aff70ee3aad06eca4994f2aca5dd7b56d38adca6677276", size = 11271768, upload-time = "2026-07-16T12:19:19.53Z" }, ] [[package]] @@ -3353,14 +3364,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.70.1" +version = "4.68.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/5f/57ff8b434839e70dab45601284ea413e947a63799891b7553e5960a793a8/tqdm-4.68.4.tar.gz", hash = "sha256:19829c9673638f2a0b8617da4cdcb927e831cd88bcfcb6e78d42a4d1af131520", size = 792418, upload-time = "2026-07-07T09:58:18.369Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl", hash = "sha256:5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2", size = 676612, upload-time = "2026-07-07T09:58:16.256Z" }, ] [[package]] @@ -3372,13 +3383,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] +[[package]] +name = "types-requests" +version = "2.32.4.20250913" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/27/489922f4505975b11de2b5ad07b4fe1dca0bca9be81a703f26c5f3acfce5/types_requests-2.32.4.20250913.tar.gz", hash = "sha256:abd6d4f9ce3a9383f269775a9835a4c24e5cd6b9f647d64f88aa4613c33def5d", size = 23113, upload-time = "2025-09-13T02:40:02.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/20/9a227ea57c1285986c4cf78400d0a91615d25b24e257fd9e2969606bdfae/types_requests-2.32.4.20250913-py3-none-any.whl", hash = "sha256:78c9c1fffebbe0fa487a418e0fa5252017e9c60d1a2da394077f1780f655d7e1", size = 20658, upload-time = "2025-09-13T02:40:01.115Z" }, +] + [[package]] name = "types-tqdm" -version = "4.70.0.20260906" +version = "4.67.0.20250809" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/92/517d71d5a399cd2f8ead3b4328d987262478f22fbbe7f8312360d4c321d0/types_tqdm-4.70.0.20260906.tar.gz", hash = "sha256:6581dc996152a87d51ce2ea169169187ffc0a96dacdb8adbdef29cbee8c1e631", size = 19309, upload-time = "2026-09-06T06:35:31.916Z" } +dependencies = [ + { name = "types-requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/d0/cf498fc630d9fdaf2428b93e60b0e67b08008fec22b78716b8323cf644dc/types_tqdm-4.67.0.20250809.tar.gz", hash = "sha256:02bf7ab91256080b9c4c63f9f11b519c27baaf52718e5fdab9e9606da168d500", size = 17200, upload-time = "2025-08-09T03:17:43.489Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/ea/d12697988ab2c672877796ecaea69666e2379ee7b40f01f4540250d5a97b/types_tqdm-4.70.0.20260906-py3-none-any.whl", hash = "sha256:c3b88c694928515d601f73fa6646aa43adc0ef735bedbeebf0cc543f6a201ae8", size = 25181, upload-time = "2026-09-06T06:35:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/3f/13/3ff0781445d7c12730befce0fddbbc7a76e56eb0e7029446f2853238360a/types_tqdm-4.67.0.20250809-py3-none-any.whl", hash = "sha256:1a73053b31fcabf3c1f3e2a9d5ecdba0f301bde47a418cd0e0bdf774827c5c57", size = 24020, upload-time = "2025-08-09T03:17:42.453Z" }, ] [[package]]