diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 1e7dc7a..8e411b3 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -10,7 +10,7 @@ "rollForward": false }, "fable": { - "version": "5.6.0", + "version": "5.8.0", "commands": [ "fable" ], diff --git a/justfile b/justfile index 30dce85..f2889a1 100644 --- a/justfile +++ b/justfile @@ -49,6 +49,10 @@ test: build pyright: build uv run pyright +# SPIKE: run the Scriptorium (Nib + Quill) test suite compiled to Python +spike-scriptorium: + {{fable}} spike/scriptorium --lang python -o spike/scriptorium/build --run uv run python spike/scriptorium/build/main.py + # Create NuGet package with version from CHANGELOG.md pack: #!/usr/bin/env bash diff --git a/pyproject.toml b/pyproject.toml index 0032ade..8807c72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ requires-python = ">= 3.12, < 4" readme = "README.md" license = "MIT" dependencies = [ - "fable-library==5.6.0", + "fable-library==5.8.0", "pyright>=1.1.411", ] diff --git a/spike/scriptorium/Main.fs b/spike/scriptorium/Main.fs new file mode 100644 index 0000000..f069a96 --- /dev/null +++ b/spike/scriptorium/Main.fs @@ -0,0 +1,46 @@ +module SpikeMain + +// SPIKE: prove Scriptorium's Nib assertions + Quill runner compile to Python via +// Fable.Python and can test real Fable.Python bindings. + +open Scriptorium.Quill +open Scriptorium.Nib.Assertion + +open type Scriptorium.Quill.Test +open type Scriptorium.Quill.Runner + +open Fable.Python.Math + +let tests = + [ + // Plain F# values through the Nib fluent assertion chain. + testList ( + "Nib basics", + [ + test ("isEqualTo passes", fun _ -> assertThat 42 (isEqualTo 42)) + test ( + "chained assertions", + fun _ -> assertThat 42 (isEqualTo 42 >> isGreaterThan 40 >> isLessThan 50) + ) + test ("strings", fun _ -> assertThat "hello" (isEqualTo "hello")) + test ("booleans", fun _ -> assertThat (1 = 1) isTrue) + ] + ) + + // Exercise actual Fable.Python stdlib bindings (Python's math module) and + // assert the results with Nib. This runs on real CPython at test time. + testList ( + "Fable.Python.Math bindings", + [ + test ("math.sqrt", fun _ -> assertThat (math.sqrt 9.0) (isEqualTo 3.0)) + test ("math.factorial", fun _ -> assertThat (math.factorial 5) (isEqualTo 120)) + test ("math.gcd", fun _ -> assertThat (math.gcd (12, 8)) (isEqualTo 4)) + test ("math.floor", fun _ -> assertThat (math.floor 2.9) (isEqualTo 2)) + ] + ) + ] + +// Fable 5.8.0+ emits `sys.exit(int(main(...)))`, so the entry point's int return +// propagates to the process exit code (1 on failure) with no extra plumbing. +[] +let main _ = runTests tests diff --git a/spike/scriptorium/README.md b/spike/scriptorium/README.md new file mode 100644 index 0000000..f04e09c --- /dev/null +++ b/spike/scriptorium/README.md @@ -0,0 +1,71 @@ +# Spike: Scriptorium on Fable.Python + +**Question:** Can [Scriptorium](https://github.com/fable-hub/Scriptorium) (Maxime Mangel's +F#/Fable testing stack — Nib assertions + Quill runner) be used to write and run tests for +Fable.Python, compiled to Python? + +**Answer: Yes.** It works out of the box, because Scriptorium already ships explicit +`#if FABLE_COMPILER_PYTHON` support. + +## What this spike contains + +- `Spike.fsproj` — an `Exe` project referencing the local `../../../Scriptorium` checkout + (Quill, which transitively pulls in Nib, Ink, Parchment) **and** the real `Fable.Python` + bindings. +- `Main.fs` — a small Quill/Nib suite that exercises plain F# assertions **and** actual + `Fable.Python.Math` bindings, then exits with the runner's status code. + +## Run it + +```bash +just spike-scriptorium +# or directly: +dotnet fable spike/scriptorium --lang python -o spike/scriptorium/build \ + --run uv run python spike/scriptorium/build/main.py +``` + +Expected output: Quill's colored reporter, `8 passed (8)`, exit code 0. Break an assertion +and the suite reports a colored diff with a clickable `Main.fs:NN` source link and exits 1. + +## Findings + +1. **Scriptorium compiles cleanly to Python.** All of Ink, Parchment, Nib, Quill and Quill's + DSL compiled via `--lang python` with no errors. The maintainer already guards every + platform-specific spot (`cwd` → `os.getcwd()`, stopwatch → `time.perf_counter()`, + stdout → `sys.stdout.write`, `isCI`, etc.) behind `FABLE_COMPILER_PYTHON`. The JS-only + `performance.now()` / `setTimeout` emits sit in dead branches gated by `Compiler.isJavaScript` + and are eliminated for Python. + +2. **The runner works on real CPython** — colored dots, per-test timing, a summary table, and + a proper failure report with a unified diff and OSC-8 source hyperlink. + +3. **Exit-code gotcha (now fixed upstream in Fable 5.8.0).** Quill correctly *returns* exit code + 1 on failure, but Fable's Python backend used to emit `main(sys.argv)` and **ignore the return + value**, so the process always exited 0 — CI would never see failures. This spike originally + carried a `Fable.Python.Sys.sys.exit exitCode` shim to work around it. Fable 5.8.0 fixes it: + the generated entry point now emits `sys.exit(int(main(...)))` (the `int(...)` coercion matters + because fable-library-python's `Int32` is not an `int` subclass), so the shim was removed and + `Main.fs` is now just `let main _ = runTests tests`. Verified: passing suite exits 0, a failing + assertion exits 1. + +4. **Snapshot / Browser / Hedgehog are out of scope / blocked.** `Nib.Browser` is Playwright + (JS-only). Scriptorium's own `fable-repros/` notes that `Nib.Snapshot` and `Hedgehog.Derive` + hit fable-library-python runtime gaps (Hedgehog: 13/21 tests fail on Python). For Fable.Python + the useful surface is **Nib + Quill** (+ Ink/Parchment). + +## How this compares to the current test setup + +Today `test/` uses a home-grown `Fable.Python.Testing` module (`[]` + `equal`/`throws*`) +compiled to Python and run under **pytest**. Scriptorium is a different execution model: it is +its own runner with an `[]`, run as `python main.py` (not pytest). Migrating the +suite would mean rewriting `[]` functions into `test(...)`/`testList(...)` trees and +swapping `equal`/`throws*` for Nib's `assertThat ... (isEqualTo ...)` combinators. This spike +proves that path is viable before committing to it. + +## Notes for productionizing (not done in this spike) + +- Reference published NuGet packages (`Scriptorium.Quill` etc.) via paket instead of the local + source checkout, once the versions with Python support are on nuget.org. +- Decide runner strategy: keep pytest for existing tests and add Scriptorium alongside, or + migrate wholesale. Losing pytest means losing its discovery/reporting/CI integrations, so the + `sys.exit` propagation above is the minimum needed for CI. diff --git a/spike/scriptorium/Spike.fsproj b/spike/scriptorium/Spike.fsproj new file mode 100644 index 0000000..d6755d7 --- /dev/null +++ b/spike/scriptorium/Spike.fsproj @@ -0,0 +1,31 @@ + + + + + + net9.0 + Exe + false + preview + + + + + + + + + + + + + + diff --git a/uv.lock b/uv.lock index 7c445c6..41318f6 100644 --- a/uv.lock +++ b/uv.lock @@ -97,64 +97,64 @@ wheels = [ [[package]] name = "fable-library" -version = "5.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/18/90eb2ef279d76b145cc3a86faa9016537ed67345f375127dca2f3409743e/fable_library-5.6.0.tar.gz", hash = "sha256:102ec5c2a940e1d97a475b0bade88d1ddfa629f368a6027c4aca8849ab4a3c7c", size = 225783, upload-time = "2026-07-05T12:45:28.511Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/ad/b649f42d94d0809bea05008a0528d97add995a44806e146f6d6938bb8d3e/fable_library-5.6.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3fc1f1619f41858811dbaf519c8fb6cd82b625ea5e5b0641c5244b9b12f8586c", size = 1709694, upload-time = "2026-07-05T12:43:44.403Z" }, - { url = "https://files.pythonhosted.org/packages/66/44/ddf67317e7fef49a54c56bb776aa76883e48be122c9072f8ecbc289f1c04/fable_library-5.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc14874868b1e04519061c874ee60f1366181d13176cca8e4ea4b179a340344d", size = 1625510, upload-time = "2026-07-05T12:43:45.862Z" }, - { url = "https://files.pythonhosted.org/packages/0e/5e/2ccafd297100d3007e320903c6aa7c732c4d08a8151bf39b4aaf42e89105/fable_library-5.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3567582b2cfb079a34dc7cc9d3e9d0142af0b6ca60f66cae91f8c84841544453", size = 1741782, upload-time = "2026-07-05T12:43:47.504Z" }, - { url = "https://files.pythonhosted.org/packages/b5/61/d362ff73811afd5179840f52c9a85f62097641619a129c05e270167a7c50/fable_library-5.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d4685d38148b886835604dd601eab1306a78ccbbf8125c4a7172a1d2d102e6d", size = 1703711, upload-time = "2026-07-05T12:43:49.115Z" }, - { url = "https://files.pythonhosted.org/packages/fa/12/2a2c0a817a72ca593dcb736e3532e78a526c2b21a5d0fe0d6fe15a6c272d/fable_library-5.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffcc96c1c43b44cd759a633ff8b0619f8b7d938acbf3dbefb59264a03c387427", size = 1915199, upload-time = "2026-07-05T12:43:50.604Z" }, - { url = "https://files.pythonhosted.org/packages/03/fe/154d7876677830bf468330fac1fc5aa7a7d460e528cd31b6eb4baef6cc9d/fable_library-5.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:918bb0d92d019e1d8066d80eee2ead18e8ebc4a116729ee4b16e3d7a15bbd62c", size = 1849072, upload-time = "2026-07-05T12:43:51.908Z" }, - { url = "https://files.pythonhosted.org/packages/50/a0/a1bd2b1beb5e10fc8a30eb2bfef8aba6124f215a9b6f7c46c5ad36b66ff6/fable_library-5.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4f514e0b869ff26556cafbe6b753b304a777a6a5a4cd87782dd9c3e1f04fde9", size = 1753509, upload-time = "2026-07-05T12:43:53.168Z" }, - { url = "https://files.pythonhosted.org/packages/38/90/9ae9f0d80044ea3658bfc490d0538e5808000939e3fefed794a0ac45741d/fable_library-5.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d16e2051bfe88b6159907e81c4915bd3ea584c9cb3ed9fea0e7f70a445456a7", size = 1843240, upload-time = "2026-07-05T12:43:54.798Z" }, - { url = "https://files.pythonhosted.org/packages/e1/0d/bacecb248e784f16a2259506953b62a8ebf48763de251abc0acd925d32cf/fable_library-5.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:31ceda59abad1a2557444744772e673ce0616347800fd9ce3443a79326f95691", size = 1921474, upload-time = "2026-07-05T12:43:56.598Z" }, - { url = "https://files.pythonhosted.org/packages/09/0f/df83ef7d14e4975f03792994538651f1406daa1b0895f43a7290b2b045e8/fable_library-5.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7961b6f9d76f58d3926f529944452a05835c3385d0f078f50b28a5e5aa4683f9", size = 1979935, upload-time = "2026-07-05T12:43:58.141Z" }, - { url = "https://files.pythonhosted.org/packages/57/e2/6d13ea7302c798681443595cc78c6bddcd91475a76f429f98ddcf1fda724/fable_library-5.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2f916c1771a2c22e721bf8dfadf0e737a06fab245430109e2568cb739c9c5e88", size = 1997492, upload-time = "2026-07-05T12:43:59.443Z" }, - { url = "https://files.pythonhosted.org/packages/55/1a/f5492bb24576c0ea2a0432115f1d59d795159e73e86df7323099acc60c51/fable_library-5.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5115049cbc360631ba5caf9cca82defb1c9547fa722e3989fa411a074e36fff5", size = 2017603, upload-time = "2026-07-05T12:44:00.872Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/547ea24b994f2dabc5d45cdd1b337805019ff29af11b6dc26e95c419b48a/fable_library-5.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:4a454ec1201c575cb239973f32c792445f73a08bf953499a33f008c1e742c331", size = 1482495, upload-time = "2026-07-05T12:44:02.607Z" }, - { url = "https://files.pythonhosted.org/packages/34/78/ab1c34f6f97b362043fba373992b52eb910f8e38b2b993f4843c14e9573c/fable_library-5.6.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6192cfe981d152c03378b7519e728a1d029b318156414c348fd431a2c84cf960", size = 1709695, upload-time = "2026-07-05T12:44:04.119Z" }, - { url = "https://files.pythonhosted.org/packages/4c/28/b27e268e9eb0f04432fc1b6f480b39836b6a7e13ab7a7508d26b99b01ce5/fable_library-5.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:263de7bc2f2eee32d8734437edca9116a58044b4edd825efb3ddf11387c4a55f", size = 1626027, upload-time = "2026-07-05T12:44:05.574Z" }, - { url = "https://files.pythonhosted.org/packages/0c/f9/8442202715bfa1ed39c579c1a071b2b434a73245357f00a5d87a5721a5b1/fable_library-5.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0739802502e9298d7f5df12794118a72e6b34bbc495b69fb6022a26fb2c002", size = 1741261, upload-time = "2026-07-05T12:44:07.179Z" }, - { url = "https://files.pythonhosted.org/packages/ce/cf/571eba0b5844ff7a91b537ad9cda7c29dc2bcea5f6a1874937299caba445/fable_library-5.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:287106b17ace8730500527adce595d94cb8735d2da210c37251ec534dffa054d", size = 1703091, upload-time = "2026-07-05T12:44:08.767Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e1/03b43a8b98ad261234a764ad3de54e43ad034ba0cec79edc794a2cae5cf4/fable_library-5.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1515f334f6e198afd968a5eca6c9644821e3600a3beb69f5ea351c73d6812b3a", size = 1914896, upload-time = "2026-07-05T12:44:11.062Z" }, - { url = "https://files.pythonhosted.org/packages/11/d0/a6cda2c375dc7b3dab8534d4bde234445aa186ef3a330c5815c81738d478/fable_library-5.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7462c31b8f4a11bf7970d1deb4fe42638207fb6a63d57a029b73a6d7326acc59", size = 1848837, upload-time = "2026-07-05T12:44:12.588Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/f5e69184d3a0594a37f3f268510ce4fc45cadc0cb68e93302da4b0b82ed9/fable_library-5.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c3e7f541a88e6f7374364cfcf4118e78127dba907ba112cc1e96e5fa9189516", size = 1752643, upload-time = "2026-07-05T12:44:14.025Z" }, - { url = "https://files.pythonhosted.org/packages/e7/6c/de37fc9f7fa82b3cd295acbb0ad1530211c6d239c736e5e49959e7c4422d/fable_library-5.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4ea5126ae2b87363b33c03a9c9a3db36fb6eea03473e64be0da0d1921e3d065", size = 1843520, upload-time = "2026-07-05T12:44:15.492Z" }, - { url = "https://files.pythonhosted.org/packages/0c/08/8ecd080abe9f1a19a222ea3ab6de0d060008f83603286bda9d8288031eeb/fable_library-5.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:958db1940a085eb2e4a0d4bbbdf185f2ce266a533777bb96db8ff2ab54caab43", size = 1921746, upload-time = "2026-07-05T12:44:18.179Z" }, - { url = "https://files.pythonhosted.org/packages/0f/60/82caca4a05391519bbca66a2412ebd8c171a0bb2179eb6a63f49a4b3e8c4/fable_library-5.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:64a8706bc2aa43eec976fe55f72f36f0f256325087c37ffda7d8e52b40a86f91", size = 1979701, upload-time = "2026-07-05T12:44:19.688Z" }, - { url = "https://files.pythonhosted.org/packages/26/2c/9914b29f2dfc428398b591e31dc0169a8ccc8c50495a2dcb78eee0875f9a/fable_library-5.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:430fa2bc066be4c502a2d5dbb45dd016570a0941fd5c7da2f3c46eb8066b501b", size = 1997599, upload-time = "2026-07-05T12:44:21.131Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9c/c19bfa2075657f0d1a997e11a13f4750a919db8437713acb2fc8ee584721/fable_library-5.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:908437d643ae0b680ca42bd7e78c4bedde692556e97e1cf5d233992b40c53489", size = 2017223, upload-time = "2026-07-05T12:44:22.688Z" }, - { url = "https://files.pythonhosted.org/packages/e4/eb/a1b1c6599b0f95ae97291efc434e5b76749aab14694c67d9e1801aa6ac83/fable_library-5.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:664e743541370a51b7ccb2a3d3bc3e69986f2381c961e6369e4e9eae0fe73dca", size = 1482211, upload-time = "2026-07-05T12:44:24.06Z" }, - { url = "https://files.pythonhosted.org/packages/d7/eb/f1593c99087a47bd876aee7d534d0e0ac7662e602563210112da889b5170/fable_library-5.6.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3e365e38c1080305333397dcece4079978fa913b0e89005cad12c07d757c829e", size = 1710365, upload-time = "2026-07-05T12:44:25.592Z" }, - { url = "https://files.pythonhosted.org/packages/d6/94/258ccea49774477669ca1159b60d4e4c5200ca3675e1dcb1d88ca153f3e4/fable_library-5.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c0e62d6b8958dd019f966825bb234f857477ff956210e538698311e3b3381a9a", size = 1627520, upload-time = "2026-07-05T12:44:27.851Z" }, - { url = "https://files.pythonhosted.org/packages/61/2c/eac7c44565e1b9fe9c90b75dafe4711d19b57905925a5e72aa960426b6e1/fable_library-5.6.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac5233fca30423ba7588cc25a3cb7a42f14d5b0645d4d4b6761f585ed870088a", size = 1741334, upload-time = "2026-07-05T12:44:29.492Z" }, - { url = "https://files.pythonhosted.org/packages/47/3a/7629a67a0026762cee9d57850b183523c614c114e3b192222033a23299a1/fable_library-5.6.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9fb39a09e88988a89437c57b4bfac06aefdd78e6b9a9b8a8bacb74ec177ad7c", size = 1706119, upload-time = "2026-07-05T12:44:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/78/d9/9779310eb57d322db3baf0dc01e797444a906e7adf5939a7983812fc77e0/fable_library-5.6.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6adced2a547df50f328527db2eca7be13ab579b32e0b34e87b3100e9661a28a", size = 1911320, upload-time = "2026-07-05T12:44:32.581Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b2/05f4921f554aa4d0893606304674facc8585ecbc3de06546140fe5b994b1/fable_library-5.6.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf42d8e06a48f85e8a8bf91a392e2c3fb630af2805dccb9f46b60891e06415a", size = 1844726, upload-time = "2026-07-05T12:44:34.302Z" }, - { url = "https://files.pythonhosted.org/packages/49/b0/f10c845c5805fa2faaefb801f463fa33ef45b11f66710df0aae59f638ca1/fable_library-5.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff8bb2d1cd03536be8a76e28cb3498f0a5f6c9d34611e6a76e16b85a4c2dfa83", size = 1755248, upload-time = "2026-07-05T12:44:35.912Z" }, - { url = "https://files.pythonhosted.org/packages/2b/a1/7c4ba287eac73468fe5fdf1281b353707f821d15a20d1cea68f3ba4e279d/fable_library-5.6.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0aaa9f40aa56adabbf305ad19cffa3f4a09ca56db047cdcf4a7df2d6ec1c2b21", size = 1847005, upload-time = "2026-07-05T12:44:37.529Z" }, - { url = "https://files.pythonhosted.org/packages/c4/db/9449f5cd9b751a54c2f7e110b7745d808968c3bb211cb15548de169743a0/fable_library-5.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4601b9adb51b089f16ba39cd769dc1f06da975652532f0420e84e0f209f13f6f", size = 1921639, upload-time = "2026-07-05T12:44:39.06Z" }, - { url = "https://files.pythonhosted.org/packages/2b/10/d1475bdc8fe7497831a7d7f5e70295cf16f98c2e8c15bdefdbb82caffe89/fable_library-5.6.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:071158cd3e771fb1726b79afbdf82c646de5f6f733e7b405bd9d9be878da911f", size = 1982152, upload-time = "2026-07-05T12:44:40.55Z" }, - { url = "https://files.pythonhosted.org/packages/87/5a/97208a25cb2c599292e7122e1617bf46926fe57ad0b550b95cd803b58988/fable_library-5.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:714e3805291a160f4d25e4504eb1e8b2114e5817b607cf8833ee9403d3a8af54", size = 2001526, upload-time = "2026-07-05T12:44:42.058Z" }, - { url = "https://files.pythonhosted.org/packages/f0/17/60a418b051cc49cf3811a3ded2fa004cfae22a52507b58b781ec478fd198/fable_library-5.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1f730a5d6bc2a29a9a8d43d475eb97c94b7306e505388de7c3dd1d2bdbcff1d7", size = 2018458, upload-time = "2026-07-05T12:44:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/63/c6/6f67bde864b558b9bf6f1c8dadfbdf0e81df758afe569d0df65582cb5351/fable_library-5.6.0-cp314-cp314-win32.whl", hash = "sha256:e39f1046b34a95d9f617623446c826b46ff8713380e0df1a863ffe8a22552df2", size = 1329883, upload-time = "2026-07-05T12:44:45.038Z" }, - { url = "https://files.pythonhosted.org/packages/f4/d7/a181a27aaec87caacfb6dbbe260a175660544783fd5db92b0cf9839a2b7b/fable_library-5.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:f35ea68247e61e1ee2d9b9278a12c75f6bbf62096b364a165f4718d2b91864eb", size = 1483541, upload-time = "2026-07-05T12:44:46.494Z" }, - { url = "https://files.pythonhosted.org/packages/7c/8a/5a6b4b8f71a49528f93aa8432ac5592c7ee884d942f40974206ef18d5641/fable_library-5.6.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:939b511c7d979fff1760b4aa871148984d54eeaee8448aa46b5d2a5d0b4f602d", size = 1757479, upload-time = "2026-07-05T12:44:48.024Z" }, - { url = "https://files.pythonhosted.org/packages/c7/58/1c4ec402fd0878ac2f89ccd96b2aaaf372fcefb9ad449e01cad8ca06a8e6/fable_library-5.6.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7424e51515f985b44c7f53a4b196e13e34ef913d75138af18def986303a7081c", size = 1725425, upload-time = "2026-07-05T12:44:49.439Z" }, - { url = "https://files.pythonhosted.org/packages/f1/cc/6142aa3f904884e00bff095fbc9ebc853bb505876f035d089f483938b450/fable_library-5.6.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a28bfc4884d8b1f6b805ea83964d9b3fcd1e6c0b292093a779116bc27fd81428", size = 1933093, upload-time = "2026-07-05T12:44:51.163Z" }, - { url = "https://files.pythonhosted.org/packages/3c/ed/1ac4c7cc47e88746535df29335374f51c59b8d182659b68ec6d9b010f160/fable_library-5.6.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a55d784f39fafa0f62d97cef6c68cacb8cc212a29c00a0f49b03ddccedb50ff7", size = 1871681, upload-time = "2026-07-05T12:44:52.663Z" }, - { url = "https://files.pythonhosted.org/packages/12/20/0ba05f9bcba1a49075eba1746d5e11bf136e8ffb96859153ea617cf4237e/fable_library-5.6.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292b35a7e8164abb3f0e9e7394da5d304d7d58ae6b0226ba76e404bdf7cdec54", size = 1776523, upload-time = "2026-07-05T12:44:54.123Z" }, - { url = "https://files.pythonhosted.org/packages/50/e2/5217b1e2eee083686e19f2daafa2a34d17ff60fa48a7b0809a4aa7dcbca1/fable_library-5.6.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4459b06f1ba9410985d5084ffc2f16c354e700b9c914408934f51d31d6b0475d", size = 1869920, upload-time = "2026-07-05T12:44:55.942Z" }, - { url = "https://files.pythonhosted.org/packages/76/9c/17969a5d7e5b21e84045165c5c49fa43e5429179cf82df16b2260dff6a4b/fable_library-5.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b5a912df44172d91799cdbbf87893868b06efa70bf3be81f7302d6df13c98797", size = 1937195, upload-time = "2026-07-05T12:44:57.926Z" }, - { url = "https://files.pythonhosted.org/packages/de/e1/d60b6a4f323d3b57f332378a56f302631f082287537dc9b6a400094d3d8c/fable_library-5.6.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:9c59e53ddd44a7ed50063c034bf35b554c75bdd025bf9917ee098860ac2070ab", size = 2001384, upload-time = "2026-07-05T12:44:59.564Z" }, - { url = "https://files.pythonhosted.org/packages/0b/68/da5a4140e2d0d1c8314c1a9dd9bf4c2cd0ebca83543158ce609d73068e11/fable_library-5.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:4fd99928a3194b8148c7226c4eec02ea8ef073757456d1c3f9657ebeabbabc38", size = 2021714, upload-time = "2026-07-05T12:45:01.226Z" }, - { url = "https://files.pythonhosted.org/packages/4a/71/82da905cb3e1560c1dc9c512576fc6b260be5bd6bdb68f5ef5c4c0dba279/fable_library-5.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d21796a4419bb1fe7756c1a91e72bc79c305579cf38c5567b2fab2e438f06130", size = 2040035, upload-time = "2026-07-05T12:45:02.653Z" }, - { url = "https://files.pythonhosted.org/packages/33/7f/4dc4e65eaa915e6dd512c89f3ea9af4ba5b93b50f7a4398a0fd2175a2bc9/fable_library-5.6.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32c3fc705b4920a7b58ac164f8ab40ebd8d9f83fd2dcf64c79c90fc7fb632ba6", size = 1755535, upload-time = "2026-07-05T12:45:04.347Z" }, - { url = "https://files.pythonhosted.org/packages/69/b9/46ea8116284b4cf5c9465a9032cdd44542c0616115c18814031d6a7b7eef/fable_library-5.6.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:473be433d827fa5c2f4b6b6ab4d5806040f6c73890d3a813bba9d6ce88aa8ca1", size = 1847256, upload-time = "2026-07-05T12:45:06.009Z" }, - { url = "https://files.pythonhosted.org/packages/da/4b/f6ff5de7622bc51d75e681d2f91649198293266b3702d6820f6fa9542983/fable_library-5.6.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a04806701c0a41e5f477b20cd3516311517e05cbfd16546d904e7f3219a116b", size = 1776535, upload-time = "2026-07-05T12:45:07.579Z" }, - { url = "https://files.pythonhosted.org/packages/d3/c7/c2fe16d323a4f173b54be43309eaf4b92fa92b4a588fbb1cb3c75e773372/fable_library-5.6.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33c913eaf08d42aa52a45651243578c372071cbef168ee97dfe03a0adbbe6382", size = 1871221, upload-time = "2026-07-05T12:45:09.395Z" }, +version = "5.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/57/36a61ac6a7e1a1474ee49164a161b94cbeb3bd23a69d90fdd8812ed474d5/fable_library-5.8.0.tar.gz", hash = "sha256:0cd63bd47aa00db80852ac2a1bb076e83dee86e3763332fecb89db6e28d21b52", size = 237395, upload-time = "2026-07-11T19:47:42.165Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/88/2da40920039960d7184f8c5e7f624f347529f898e0d40eea970d95ae6dee/fable_library-5.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4eb750c640ff09055c3a9654c2e32fb6c547efeb5c9bf50ee63d82f97eb81183", size = 1390724, upload-time = "2026-07-11T19:46:06.895Z" }, + { url = "https://files.pythonhosted.org/packages/c7/1e/a061fa6eff4404db0560e40464cd7422902a2df75dc1c69e4979775aebe9/fable_library-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e30fc235367a01a394f4b7d2776c32b28af5bfd0e205d6aef4fec8441c2fda3c", size = 1298512, upload-time = "2026-07-11T19:46:08.161Z" }, + { url = "https://files.pythonhosted.org/packages/43/46/e51f1ab295047ff458ab1c1dbdc84e68d1ea31780562aa2e21ed6b051669/fable_library-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b94a2364244d802cc27083cd12f37b0870434fb028db8ed2b8a9455d032019b", size = 1344913, upload-time = "2026-07-11T19:46:09.502Z" }, + { url = "https://files.pythonhosted.org/packages/c4/73/addca29c3753c1b34d647a91b53380c41d0e8dde9164303be649b21d22e8/fable_library-5.8.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:838a7653a3c43ac418f5e8ece070f64a75a97740f77336a45fd15b41054560de", size = 1328420, upload-time = "2026-07-11T19:46:10.955Z" }, + { url = "https://files.pythonhosted.org/packages/d4/41/3ef4923b70d1f2a7b2b185c63af87961f73f8ff2e393264e1082e1fd4290/fable_library-5.8.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a78f64e4441bf4acda08ee6cf2f251a1fb7dc1970f3cdaed035bdb5c4a48dbbe", size = 1468417, upload-time = "2026-07-11T19:46:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f8/16a7d96fc809ace01c42cd3e61f63beb01130757b5d0795940b6e38a4717/fable_library-5.8.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd51c2342bf2fa4a8297f118f0b9568f7ae96273112b3def1b4d889941bb737c", size = 1478165, upload-time = "2026-07-11T19:46:13.749Z" }, + { url = "https://files.pythonhosted.org/packages/b4/cb/db9582dc004bcd1d9fc54082769c8d8d34056dd4a2b99d89ebd2c8e620d1/fable_library-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95804f99b62b7ee8c8066600e0445c77a0e0ad6b9a43046f1fcfc49e9c29bfa", size = 1415752, upload-time = "2026-07-11T19:46:14.97Z" }, + { url = "https://files.pythonhosted.org/packages/16/a4/d07e6f420318ce908e6b60b18962c35c128c4024dd55718bbc323d679825/fable_library-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ccb924ab492ce0aa40197368115c73ad3c91abaf2fd3edab8e804160e616c412", size = 1446723, upload-time = "2026-07-11T19:46:16.449Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6d/e7873d330e650d8a56d68855bbe8246fd0355996ecafac9893a4d84e912f/fable_library-5.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3ddecee74bf7d8f136613939915551c68dc99923433285388d6b481b95df1c8", size = 1522466, upload-time = "2026-07-11T19:46:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/40/1b/638efcdd7ef8969ae7eb512bd4071c32e9d1c50c5771014c57f164930b72/fable_library-5.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:17c29706cbe8a4c38c72637cdcf8d2b6beb7ac82dba463e3cd5faac7bcea1015", size = 1604594, upload-time = "2026-07-11T19:46:19.53Z" }, + { url = "https://files.pythonhosted.org/packages/85/88/b1fcd00e29dd3fa1e1d9e3d0156d157dafefcb1d8943077e3f604ad577ac/fable_library-5.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0cbb28d0719c0778397e4274c50f34581cf452568cf118a6ed07b30e790771c3", size = 1628789, upload-time = "2026-07-11T19:46:21.263Z" }, + { url = "https://files.pythonhosted.org/packages/44/1c/b29ae724f1cf8dfee19362c27e0eae42dffa406ff612c02c3aa80e296edf/fable_library-5.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6d94d9465b7be4403c395a360e1d137e349cf38ba96f2c80c72b2101974eec78", size = 1645212, upload-time = "2026-07-11T19:46:22.658Z" }, + { url = "https://files.pythonhosted.org/packages/8e/58/99f95b2a959eee63b7eee49b370a43f824bbcbd24360ef4f99cc81ed17a0/fable_library-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:0e350e955331f7b3b92775b2e468605299dd85b6c2acfb2bcdbd813c2f720578", size = 1403141, upload-time = "2026-07-11T19:46:24.039Z" }, + { url = "https://files.pythonhosted.org/packages/41/8a/7d84dbd5b4d04f7eeb8fafb53b592bf69c698d86b749df446d2c5456429b/fable_library-5.8.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1071daf3fcc4b3b131976edaa62f411f093256b989b6cc10484202150b0338e9", size = 1391552, upload-time = "2026-07-11T19:46:25.717Z" }, + { url = "https://files.pythonhosted.org/packages/80/1c/9b47f0b486b154a57da1e579bd32c3ed397e13d1e46651a364a07ce388d7/fable_library-5.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6ba9a306d22885ba167a417cda477b7def7c3fc7ecf60a80de64cdb00d3cd848", size = 1298803, upload-time = "2026-07-11T19:46:26.994Z" }, + { url = "https://files.pythonhosted.org/packages/86/0d/64996d8f56a8b261c914fa7e555d288623513c2cdd4d2693c8c4c6497609/fable_library-5.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d07f17fe88c0c7907ef1d522918b0e254ee3b7c8b393012f95c2cd277de9d8d", size = 1345440, upload-time = "2026-07-11T19:46:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/68/6c/09b95a2fb8c0174e4d4cc7e560186e1edf1ac2b5d6fcc90659232a62fcc2/fable_library-5.8.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb6f3a1bbdb2c2179c2e376c8095356a18a9453eea591a350625c897ffba6e23", size = 1329523, upload-time = "2026-07-11T19:46:30.14Z" }, + { url = "https://files.pythonhosted.org/packages/74/e1/c77a13aabdf4f023a903efef1511ecbf14aba0e6738c7fe81ed36878176a/fable_library-5.8.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f52c8d2f9806665f64e3dd86538ecad7ef9d64d19b1255b76f32259b4895b8c1", size = 1468545, upload-time = "2026-07-11T19:46:31.698Z" }, + { url = "https://files.pythonhosted.org/packages/38/41/feb63f599a4ab95b3759f2f6bcbf76bba64607630856ea94d5c5cce7d4e0/fable_library-5.8.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d1d69ae48db8d8d9a91aa431998d597496865e225bd02e9785ea4ccafd5150a", size = 1478427, upload-time = "2026-07-11T19:46:33.162Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f0/702073794e31f7f75aee77c6efd6cfce516bf71f1562b2b693016ff335ac/fable_library-5.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf641faa63d148a69df39e70b811144236e47c221832ff4a3d90886571863f0e", size = 1416238, upload-time = "2026-07-11T19:46:34.82Z" }, + { url = "https://files.pythonhosted.org/packages/63/9c/cfb89c2f6b20c4393d970b45ad7740ec10cc5b361023bb44749e552461c1/fable_library-5.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:debf70a65babf174d8175af8cfbe0224117b0d6ec51bd12ceda37adf623cb841", size = 1446998, upload-time = "2026-07-11T19:46:36.715Z" }, + { url = "https://files.pythonhosted.org/packages/cb/62/7887a8e73a7c3f20508461412a190b3c5fe4fe84fc7939d41c64220e4d90/fable_library-5.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ada866c56645d5433d1ddaaaa79e9a4d9a6e2038c11b109dc7be82d3d0a85221", size = 1522658, upload-time = "2026-07-11T19:46:38.124Z" }, + { url = "https://files.pythonhosted.org/packages/56/e0/8b406e598240e72f4d2a26cbdbb8344bd55a8486ac46bc22860b99da41a1/fable_library-5.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e8c4ff40ae28e3ecaa94aa4356d8624d3dd4a7c2e134a3a349bb2647338775b", size = 1605850, upload-time = "2026-07-11T19:46:39.882Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c6/7ffacbe7381a7084c1f3746fb76f6fcaf066ad5ed2fd456ece8c3b69634f/fable_library-5.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:65c52120924679af63de79ec14922f0ee904c6d864448bd86942676af795c037", size = 1628774, upload-time = "2026-07-11T19:46:41.337Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e4/7638662bca21909862c67beb0d279590a730cc80d2b582c2793c5069c1bd/fable_library-5.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b892535519c7ab762deb18e08617a9415899017ca169755752bc0fc847cc488", size = 1645827, upload-time = "2026-07-11T19:46:42.795Z" }, + { url = "https://files.pythonhosted.org/packages/fe/51/826ce1cab0ed84ce13e82a03b4f0223a8858b12be51e0c7c42b8623beb6e/fable_library-5.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22660d0c43bb08e32664a3a5ad56e4b46a62daebe260d2abff296632ec35648", size = 1403599, upload-time = "2026-07-11T19:46:44.154Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3c/8e5e24810416afb6c69188b12e9ebd62a46e2dbb85643909f777e860eeed/fable_library-5.8.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6a57ac8f7ef9a30a5333685b3bf75de20b5e02a6906c42c6d2bb57829e1fa86d", size = 1391154, upload-time = "2026-07-11T19:46:45.416Z" }, + { url = "https://files.pythonhosted.org/packages/0a/06/4adee609d1485c8eb3e68fd8d2c6000d9b414fbee04f744d144e5a00eb9f/fable_library-5.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dfedd6449c2019e771965fa4f18b63fdfdb94ff2770774699816c39fb449ccf8", size = 1298106, upload-time = "2026-07-11T19:46:46.831Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4d/95d469648135322211b8b03f8022de42f83036ab1a081e4316f10bae28e0/fable_library-5.8.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:728ea025a334424167b5fd4428b7984d9c8088e5c2a5659276ab401bdeea8b88", size = 1344836, upload-time = "2026-07-11T19:46:48.155Z" }, + { url = "https://files.pythonhosted.org/packages/94/c7/2dad7406c47b529c2e7a973b688376ebb81b8619c93c7c0c6dfcf134de1d/fable_library-5.8.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7d25bce8635807770ab6b65119d34073f170fdaa7c2c1fe20ec9bdd7d27c0e3", size = 1331108, upload-time = "2026-07-11T19:46:49.568Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b2/bed2a6799fea2d45039efdb95bcd2f66f2630ce5102da101b5c74143afcb/fable_library-5.8.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0552ad9fa3ebd9764d570976289fff4863d96d6efb6a68b46dc1b0ee501144c", size = 1468772, upload-time = "2026-07-11T19:46:51.041Z" }, + { url = "https://files.pythonhosted.org/packages/79/79/0f68019dce5a158957f004c15d11b288745dfb3d184379679837d9712625/fable_library-5.8.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:925f62fca1eb3308713c426954dbeb616b656c6f200fa5a87b3acac2b35da397", size = 1478702, upload-time = "2026-07-11T19:46:52.55Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5e/f268fe33ef2a489718e276d9b69791efcde6bd08d3d894010f07163b9df2/fable_library-5.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49ee86d64a8b4eeaab828180ca10083d1cfb2e904463accf4b357f3a7e08ed8b", size = 1416430, upload-time = "2026-07-11T19:46:54.02Z" }, + { url = "https://files.pythonhosted.org/packages/dc/71/a16470c6fb15134031825ff6504c512a8bd46f271d4555c1d129a34d3efb/fable_library-5.8.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b4de5d40ace28e497d7632196dfe59e9e273b90290e4df14c240b30463b0d8df", size = 1447757, upload-time = "2026-07-11T19:46:55.633Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b5/a55156273138fb051278fb5ec904e87d793e4f059443ef20b72293eb010f/fable_library-5.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:58ba7876ccd895a907c55cce23c7bacca41f3f26cdf2475f6bb95f925846dc4d", size = 1522385, upload-time = "2026-07-11T19:46:57.171Z" }, + { url = "https://files.pythonhosted.org/packages/ae/26/ab7689b6c95144fa3a0a610efeea80767c9b67462450f6587ba24b9fee4c/fable_library-5.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8aa12005f8b323be274da6e21adeb8093975cb5446e588f8286a779471dd7801", size = 1607515, upload-time = "2026-07-11T19:46:58.542Z" }, + { url = "https://files.pythonhosted.org/packages/ab/79/7667c6635caf79f31afaaed9290c8379d347b29f394ca6e03757fb4f9742/fable_library-5.8.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:98c06d877599cd2af90b901e4b9db1d7f2f29be61c95be8db5e91d70847fd5ce", size = 1629201, upload-time = "2026-07-11T19:47:00.497Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fa/677e4c7c1b45df919690906600e8a5b44ef41c7cf2d0bc3843801ea91dd1/fable_library-5.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e045a9687335a1157533457c073e897b107159ecce6fa4ebf5c7bca8b5b9a7e", size = 1645961, upload-time = "2026-07-11T19:47:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/4f/7a/f2e0aea7ce7e6561865e9edc95ea05bfdf2ac50bd567c9410ffbad960558/fable_library-5.8.0-cp314-cp314-win32.whl", hash = "sha256:a68231660aa850de3c2c262fd620ae452f1bd21f701680b6fcda3baca6ccc72a", size = 1245216, upload-time = "2026-07-11T19:47:03.534Z" }, + { url = "https://files.pythonhosted.org/packages/f3/74/102580c1e9502a306a3870ad3fac84b480662ddac91264a53dde8b85de12/fable_library-5.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:a83a193291ca5ead06f1ada8bfb6e45ac105e966398c7be5a958ba626e42f375", size = 1403171, upload-time = "2026-07-11T19:47:04.918Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2a/6cb7d7b79d15ce070bf751898c993897e0e7e871357f3ca0e6b107a114dc/fable_library-5.8.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07c6fc1fe1c1e8e5b9922f9c915a971c76bf9fbfc075c306b525d1c61378e00c", size = 1350624, upload-time = "2026-07-11T19:47:06.258Z" }, + { url = "https://files.pythonhosted.org/packages/5c/aa/7c9d85afa2b906a161ebd0e0b4764e4c0a12a016454535cecfb5d4a66a67/fable_library-5.8.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab60fed2393d31022445309fe0a0540bdc29cc14fc4d2a14a80fd4a099fec28c", size = 1329219, upload-time = "2026-07-11T19:47:07.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/98/94f9f1378aa42def0bb7514e68f7a14417387c9a3cee1be0549b364fd604/fable_library-5.8.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:caf921794292aee35f5fc7537ba46883c9ce930072a3a408036791d763e967bb", size = 1476682, upload-time = "2026-07-11T19:47:09.074Z" }, + { url = "https://files.pythonhosted.org/packages/d3/60/efdc3c9771644eda8313fee0210b2812d9999a60276d86e95f4baf00bd59/fable_library-5.8.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c1d9040e0b1dd72d945382928e57a6c53aa1e20d806ce2f54d9a0a0b2bc1392", size = 1489146, upload-time = "2026-07-11T19:47:10.647Z" }, + { url = "https://files.pythonhosted.org/packages/44/3e/b5d0d750650637a1bc4860e96b95916e8642eb485867c8c56e9a65131999/fable_library-5.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3ebf39009f8698d5326bd634bea795635d682d1e050a03d903a45d9d78c2a2", size = 1427095, upload-time = "2026-07-11T19:47:12.135Z" }, + { url = "https://files.pythonhosted.org/packages/ae/dc/d060fc2c88059705d104e43bcc5c75f0262e041c1f0b2d7e819ac056d8c1/fable_library-5.8.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42be424d865d88eb6a62c03aa6f2b4bca39cd3c8124961fd74121446af60a445", size = 1451970, upload-time = "2026-07-11T19:47:13.576Z" }, + { url = "https://files.pythonhosted.org/packages/25/41/a800593fcba0961f6f331a63027bb9e335b8f3da79af97cb69d75353f1de/fable_library-5.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2017799040aa1c9f0cffd8a7253ddb1f5e08e13423e5d7a1f3944d3bfdf5b7c6", size = 1528404, upload-time = "2026-07-11T19:47:15.134Z" }, + { url = "https://files.pythonhosted.org/packages/0c/50/0e710d75f912cddb29991336e9004161b5cfb3a8db9f60331ac23dc4e2a6/fable_library-5.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d1e2fce01ad3732dbddae6e95ba599c3e4bd4be1693331a67eec17bb32fd6536", size = 1606007, upload-time = "2026-07-11T19:47:16.592Z" }, + { url = "https://files.pythonhosted.org/packages/2e/0c/850091064578da5e69377b8a6f5834eae77406d0be11dcc417c2bceaa6d0/fable_library-5.8.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:1f5fb0d466e9fcb888c83817b4af23f6225727670455346765c31fea60119766", size = 1638730, upload-time = "2026-07-11T19:47:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/21/0b/320029584fc58e1d038542467fd26730f7fbf0a2a6b5d7b0c6aed25270e6/fable_library-5.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e0fb418488ab46e1d5cef2a6bbea47665e819cf6fce8df16b27ec0d0aaca942", size = 1656431, upload-time = "2026-07-11T19:47:19.559Z" }, + { url = "https://files.pythonhosted.org/packages/6b/03/4fde71dc6324ace73a3c4703342fcd04a3ea639f12e3e2b60756abd141c8/fable_library-5.8.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb0ed5bfcc5ce3e1b6c1e0a6bc6f9f78a9cec428910e633ef03b042194f2db58", size = 1416178, upload-time = "2026-07-11T19:47:21.012Z" }, + { url = "https://files.pythonhosted.org/packages/66/e1/9f35bae00f45921a9b200bf9fe7a594fe451ea37109c898d8713bdc9d613/fable_library-5.8.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bc9afe531032d6f102fbdd2175e12a3ef336e50e7df87b82965a58f66ecd0a37", size = 1447921, upload-time = "2026-07-11T19:47:22.436Z" }, + { url = "https://files.pythonhosted.org/packages/21/09/10e4ab11640a0ddd0df7e1c67296cd244c8d4a053854cfbb417eafe1e7b7/fable_library-5.8.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c0bc9b39a8d37021d782d2fc5bccb7ffae674fcfba57e81c262f1a25f3cb48", size = 1426890, upload-time = "2026-07-11T19:47:23.959Z" }, + { url = "https://files.pythonhosted.org/packages/a5/f1/b892abb5bdb8a1397bc16fa4fb3b0814a7147bff0902a8216dda8bb5c9d4/fable_library-5.8.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c2f1c1bf787e90ad556a52b7aa09555e9564873f5ee5c662bc47bcee0c939d91", size = 1452144, upload-time = "2026-07-11T19:47:25.332Z" }, ] [[package]] @@ -195,7 +195,7 @@ flask = [ [package.metadata] requires-dist = [ - { name = "fable-library", specifier = "==5.6.0" }, + { name = "fable-library", specifier = "==5.8.0" }, { name = "pyright", specifier = ">=1.1.411" }, ]