From 1ea0e5741ecc77f569c16aca2e496375729ed950 Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Sun, 11 Oct 2026 18:26:50 +0200 Subject: [PATCH 1/2] refactor: use upstream async runtime fixes --- src/Fable.Actor/Actor.fs | 22 +++----- src/Fable.Actor/Lifecycle.fs | 106 +++-------------------------------- src/Fable.Actor/Platform.fs | 63 +++------------------ test/Helpers.fs | 5 +- test/LifecycleTests.fs | 22 +++++--- 5 files changed, 39 insertions(+), 179 deletions(-) diff --git a/src/Fable.Actor/Actor.fs b/src/Fable.Actor/Actor.fs index 42d3473..d1dcd13 100644 --- a/src/Fable.Actor/Actor.fs +++ b/src/Fable.Actor/Actor.fs @@ -162,13 +162,10 @@ type Actor<'Msg> internal (mb: MailboxProcessor<'Msg>, cts: System.Threading.Can member _.Post(msg: 'Msg) = lifetime.Post(fun () -> mb.Post msg) type ActorBuilder() = - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 - // Revisit the extra delayed binder and Lifetime.guard calls after portable Bind/Delay - // stop on cancellation. Keep actor startup/late-callback cancellation regressions. // decision: delays portable user binders so a cancelled continuation cannot execute user code before its next token check member _.Bind(op: Async<'T>, f: 'T -> Async<'U>) : Async<'U> = #if FABLE_COMPILER - async.Bind(op, fun value -> Lifetime.guard (fun () -> f value)) + async.Bind(op, fun value -> async.Delay(fun () -> f value)) #else // invariant: resource-producing binders enter their finalizer before the next cancellation check async.Bind(op, f) @@ -178,10 +175,10 @@ type ActorBuilder() = member _.ReturnFrom(op: Async<'T>) : Async<'T> = async.ReturnFrom(op) member _.Zero() : Async = async.Zero() - /// Guard the user expression even on runtimes whose cancellation callback falls through into computation code. + /// Delay the user expression until its actor continuation runs. /// /// invariant: an already cancelled actor continuation does not evaluate its delayed user expression - member _.Delay(f: unit -> Async<'T>) : Async<'T> = Lifetime.guard f + member _.Delay(f: unit -> Async<'T>) : Async<'T> = async.Delay f member _.Combine(first: Async, second: Async<'T>) : Async<'T> = async.Combine(first, async.Delay(fun () -> second)) @@ -190,10 +187,7 @@ type ActorBuilder() = /// Run cleanup once and preserve its failure, including during cancellation. /// - /// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 - /// Revisit the duplicate-terminal guard after the delay fix, but retain cleanup failure - /// reporting: standard Async preserves cancellation even when its finalizer throws. - /// Actor.stop must still report that cleanup failure, including on .NET. + /// invariant: duplicate terminal callbacks from supplied Async work cannot repeat cleanup /// /// decision: routes cleanup exceptions explicitly because standard Async finalizers can lose failures during cancellation member _.TryFinally(body: Async<'T>, compensation: unit -> unit) : Async<'T> = @@ -526,7 +520,7 @@ module Actor = lifetime.AddResource(Lifetime.cancellation token lifetime.RequestStop) attach inbox - let workflow = Lifetime.guard (fun () -> body inbox) + let workflow = async.Delay(fun () -> body inbox) let start () = Async.StartWithContinuations( @@ -588,7 +582,7 @@ module Actor = if cleanupDeadline <= 0 then invalidArg "cleanupDeadline" "Cleanup deadline must be positive" - Lifetime.guard (fun () -> + async.Delay(fun () -> Lifetime.withContext (fun ((ok, _, cancelled), token) -> let pending = Lifetime.Pending(fun result -> @@ -661,7 +655,7 @@ module Actor = /// Await a reply without a reply deadline, preserving rc.11's default. Target shutdown and caller cancellation settle the wait. let call target msg : ActorOp<'Reply> = - Lifetime.guard (fun () -> + async.Delay(fun () -> async { let! result = callCore None System.Threading.CancellationToken.None target msg return replyOrRaise result @@ -674,7 +668,7 @@ module Actor = if deadline <= 0 then invalidArg "deadline" "Reply deadline must be positive" - Lifetime.guard (fun () -> + async.Delay(fun () -> async { let! result = callCore (Some deadline) System.Threading.CancellationToken.None target msg diff --git a/src/Fable.Actor/Lifecycle.fs b/src/Fable.Actor/Lifecycle.fs index 42b571b..6018402 100644 --- a/src/Fable.Actor/Lifecycle.fs +++ b/src/Fable.Actor/Lifecycle.fs @@ -6,35 +6,18 @@ open System open System.Threading open Fable.Actor.Types -// TODO(upstream): retire the marked adapters only after the pinned compiler and runtime -// include the referenced fixes and the four-target suite passes without those adapters. +// decision: delegates synchronization, cancellation registration, and delay settlement to Fable's fixed runtime +// assumption: the compiler and runtime include https://github.com/fable-compiler/Fable/pull/5035, https://github.com/fable-compiler/Fable/pull/5036, https://github.com/fable-compiler/Fable/pull/5037, and https://github.com/fable-compiler/Fable/pull/5038 // Pending settlement and ActorLifetime ownership remain library responsibilities. module internal Lifetime = -#if FABLE_COMPILER_PYTHON - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5035 - // Replace this Python gate branch with obj()/lock and remove Platform's gate helpers - // once the published Python runtime shares a stable lock per object. - let newGate = Platform.newGate - // decision: owns a stable RLock because fable-library 5.19 util.lock creates a fresh lock for each invocation - let synchronize gate action = - Platform.enterGate gate - - try - action () - finally - Platform.leaveGate gate -#else let newGate () = obj () let synchronize gate action = lock gate action -#endif let withContext body : Async<'T> = #if FABLE_COMPILER_PYTHON || FABLE_COMPILER_JAVASCRIPT - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 - // and https://github.com/fable-compiler/Fable/pull/5038 - // Retire the Python adapter after unit continuations and terminal cancellation are fixed. - // TODO(upstream): native JS TryFinally also checks cancellation before installing - // compensation. Retire this adapter only when cancelled resource acquisition disposes. + // TODO(upstream): native JS/Python TryFinally checks cancellation before installing + // compensation. Retire this adapter only when cancelled acquisition still disposes + // and actor cleanup failures remain observable. Platform.fromContext body #else async { @@ -89,43 +72,6 @@ module internal Lifetime = ) #endif - let guard (expression: unit -> Async<'T>) : Async<'T> = -#if FABLE_COMPILER_PYTHON - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 - // Collapse this Python guard to async.Delay after cancelled Delay/Bind no longer - // run user work or receive a second terminal callback from a cancelled delay. - withContextRun (fun ((ok, error, cancelled), token) run -> - let gate = newGate () - let mutable finished = false - - let finish next value = - let run = - synchronize gate (fun () -> - if finished then - false - else - finished <- true - true) - - if run then - next value - - if token.IsCancellationRequested then - finish cancelled (OperationCanceledException()) - else - let operation = - try - Choice1Of2(expression ()) - with ex -> - Choice2Of2 ex - - match operation with - | Choice2Of2 ex -> finish error ex - | Choice1Of2 op -> run op (finish ok, finish error, finish cancelled)) -#else - async.Delay expression -#endif - let disposable f = { new IDisposable with member _.Dispose() = f () @@ -177,54 +123,16 @@ module internal Lifetime = notify |> Option.iter (fun f -> f value) let cancellation (token: CancellationToken) callback = -#if FABLE_COMPILER_PYTHON - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5036 - // Use token.Register like the other targets once it returns a disposable handle - // and safely handles disposal during cancellation; delete the listener-field adapters. - let id = Platform.addCancellationListener token callback - - let registration = - disposable (fun () -> synchronize (Platform.cancellationGate token) (fun () -> Platform.removeCancellationListener token id)) -#else - let registration = token.Register(Action callback) :> IDisposable -#endif - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5036 - // Remove the post-registration inspection once published JS/Python Register invokes - // already-cancelled callbacks immediately; keep the pending operation's settlement gate. - // Fable JS/Python Register does not invoke an already-cancelled token's callback. - // invariant: registration followed by inspection covers cancellation before and during acquisition - if token.IsCancellationRequested then - callback () - - registration + token.Register(Action callback) :> IDisposable let deadline (ms: int) callback = -#if FABLE_COMPILER_PYTHON - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 - // Reuse the CTS/Async.Sleep branch once cancellation retires the Python timer - // and listener exactly once; remove Platform.startDeadline/cancelDeadline with it. - let handle = Platform.startDeadline ms callback - disposable (fun () -> Platform.cancelDeadline handle) -#else let cts = new CancellationTokenSource() - Async.StartWithContinuations( - async { do! Async.Sleep ms }, - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 - // This explicit value parameter avoids unit callbacks whose captured default - // gets overwritten by None in Python; simplify only after generated-code validation. - (fun value -> - ignore value - callback ()), - (fun _ -> ()), - (fun _ -> ()), - cts.Token - ) + Async.StartWithContinuations(async { do! Async.Sleep ms }, (fun () -> callback ()), (fun _ -> ()), (fun _ -> ()), cts.Token) disposable (fun () -> cts.Cancel() cts.Dispose()) -#endif /// Internal state shared by handles for one emulated actor generation. /// diff --git a/src/Fable.Actor/Platform.fs b/src/Fable.Actor/Platform.fs index 1c576b4..5b2d53f 100644 --- a/src/Fable.Actor/Platform.fs +++ b/src/Fable.Actor/Platform.fs @@ -170,48 +170,6 @@ let stopProcess (pid: Pid<'Msg>) (deadline: int) : bool = #endif -#if FABLE_COMPILER_PYTHON - -open Fable.Core - -// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5036 -// Replace addCancellationListener/removeCancellationListener/cancellationGate with the -// public disposable token.Register API when Lifetime.cancellation retires its Python branch. -// decision: uses native registration handles because fable-library 5.19 Register omits its return value -// decision: replaces the listener dictionary on removal so disposal during Cancel does not mutate its live iterator -// invariant: removing an actor registration leaves other token listeners installed -[] -let addCancellationListener (token: System.Threading.CancellationToken) (callback: unit -> unit) : int = nativeOnly - -[] -let removeCancellationListener (token: System.Threading.CancellationToken) (id: int) : unit = nativeOnly - -// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5035 -// Delete newGate/enterGate/leaveGate when Lifetime.synchronize uses the fixed runtime lock. -[] -let newGate () : obj = nativeOnly - -[] -let enterGate (gate: obj) : unit = nativeOnly - -[] -let leaveGate (gate: obj) : unit = nativeOnly - -[] -let cancellationGate (token: System.Threading.CancellationToken) : obj = nativeOnly - -// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 -// Delete startDeadline/cancelDeadline after Lifetime.deadline uses fixed Async.Sleep; -// retain positive deadlines and disposal of the actor-owned timer on every settlement. -// decision: retains the asyncio timer handle so settlement cancels the timer rather than only suppressing its callback -[] -let startDeadline (ms: int) (callback: unit -> unit) : obj = nativeOnly - -[] -let cancelDeadline (handle: obj) : unit = nativeOnly - -#endif - #if FABLE_COMPILER_BEAM let exitReason (reason: obj) : ActorExit = @@ -264,15 +222,13 @@ open Fable.Core /// Build a context-aware Async without a preceding cancellation checkpoint. /// -/// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 -/// and https://github.com/fable-compiler/Fable/pull/5038 -/// Delete the Python branch when Lifetime.withContext uses standard Async on Python. -/// TODO(upstream): retire the JS branch once native TryFinally installs compensation -/// before checking cancellation; the resource-acquisition regressions must still pass. +/// TODO(upstream): retire the JS/Python branches only when native TryFinally installs +/// compensation before its cancellation checkpoint and actor cleanup failures remain observable. /// /// decision: hands cancellation to the actor settlement gate so acquired resources receive cleanup even when their token is already cancelled #if FABLE_COMPILER_PYTHON -[] +// invariant: an erased F# unit success supplies None to the Python context callback +[] #else [ $0([[ctx.onSuccess, ctx.onError, ctx.onCancel], ctx.cancelToken])")>] #endif @@ -287,17 +243,14 @@ let fromContext /// Run a nested Async using the incoming trampoline and guarded continuations. /// -/// TODO(upstream): https://github.com/fable-compiler/Fable/pull/5038 -/// Delete the Python branch with the guard/finalizer adapters once native Delay/Bind -/// and TryFinally preserve cancellation and exactly-once cleanup, and Receive uses -/// the native mailbox workflow without a separate async root. -/// TODO(upstream): retire the JS branch when native TryFinally installs cleanup before -/// cancellation and Receive honors owned cancellation without its current wrapper. +/// TODO(upstream): retire these context adapters when native mailbox cancellation and +/// finalizers meet the actor contract without creating a separate Async trampoline. /// /// decision: preserves the incoming trampoline so immediately completed actor steps still yield before exhausting the stack /// invariant: terminal continuation chains also yield through the shared trampoline #if FABLE_COMPILER_PYTHON -[] +// invariant: an erased F# unit success supplies None to the Python context callback +[] #else [ $0([[ctx.onSuccess, ctx.onError, ctx.onCancel], ctx.cancelToken], op => cs => { const callbacks = cs.map(next => value => { const resume = () => next(value); if (ctx.trampoline.incrementAndCheck()) ctx.trampoline.hijack(resume); else resume(); }); op({...ctx, onSuccess: callbacks[0], onError: callbacks[1], onCancel: callbacks[2]}); })")>] #endif diff --git a/test/Helpers.fs b/test/Helpers.fs index de0a895..9332d3a 100644 --- a/test/Helpers.fs +++ b/test/Helpers.fs @@ -105,10 +105,7 @@ module Helpers = Lifetime.Pending(fun result -> match result with | Some ex -> error ex - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 - // Replace the dummy int with unit once Python unit continuations - // accept ok (); retain this independent observed-exit barrier. - | None -> ok 1) + | None -> ok ()) pending.Add( Lifetime.deadline 2000 (fun () -> pending.Settle(Some(System.TimeoutException "Worker exit was not observed"))) diff --git a/test/LifecycleTests.fs b/test/LifecycleTests.fs index e360bc1..dbd3448 100644 --- a/test/LifecycleTests.fs +++ b/test/LifecycleTests.fs @@ -558,6 +558,18 @@ let tests = ) ) #if !FABLE_COMPILER_BEAM + testAsync ( + "pre-cancelled lifetime registration invokes its callback once", + fun _ -> + async { + use source = new CancellationTokenSource() + source.Cancel() + let mutable calls = 0 + use registration = Lifetime.cancellation source.Token (fun () -> calls <- calls + 1) + source.Cancel() + assertThat calls (isEqualTo 1) + } + ) testAsync ( "cancellation during resource acquisition still disposes once", fun _ -> @@ -632,7 +644,7 @@ let tests = actor { let! _ = Async.FromContinuations(fun (ok, _, _) -> - Actor.cast releaseHandle (Some(Some(fun () -> ok 1))) + Actor.cast releaseHandle (Some(Some(fun () -> ok ()))) Actor.cast started Signal) return () @@ -670,9 +682,7 @@ let tests = try let! _ = Async.FromContinuations(fun (ok, _, _) -> - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 - // Use ok () after the unit-continuation fix; keep the release barrier. - Actor.cast releaseHandle (Some(Some(fun () -> ok 1))) + Actor.cast releaseHandle (Some(Some(fun () -> ok ()))) Actor.cast started Signal) return () @@ -751,14 +761,12 @@ let tests = try let! _ = Async.FromContinuations(fun (ok, _, cancelled) -> - // TODO(upstream): https://github.com/fable-compiler/Fable/pull/5037 - // Use a unit success payload after the fix; keep the duplicate-callback probe. Actor.cast callbacks (Some( Some( (fun () -> cancelled (System.OperationCanceledException())), - (fun () -> ok 1) + (fun () -> ok ()) ) )) From 84769fc893a318168805f327dedc04a07c6624d0 Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Mon, 12 Oct 2026 18:22:29 +0200 Subject: [PATCH 2/2] chore: adopt released Fable 5.20.1 runtime fixes --- .config/dotnet-tools.json | 2 +- examples/timeflies-python/pyproject.toml | 2 +- examples/timeflies-python/uv.lock | 114 +++++++++++------------ pyproject.toml | 2 +- src/Fable.Actor/Lifecycle.fs | 2 +- uv.lock | 114 +++++++++++------------ 6 files changed, 118 insertions(+), 118 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 5d59160..726a695 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "fable": { - "version": "5.20.0", + "version": "5.20.1", "commands": [ "fable" ], diff --git a/examples/timeflies-python/pyproject.toml b/examples/timeflies-python/pyproject.toml index 467b508..8785122 100644 --- a/examples/timeflies-python/pyproject.toml +++ b/examples/timeflies-python/pyproject.toml @@ -3,6 +3,6 @@ name = "timeflies-python" version = "0.1.0" requires-python = ">= 3.12" dependencies = [ - "fable-library>=5.20.0", + "fable-library>=5.20.1", "tk>=0.1.0", ] diff --git a/examples/timeflies-python/uv.lock b/examples/timeflies-python/uv.lock index 4a7d146..289cb7f 100644 --- a/examples/timeflies-python/uv.lock +++ b/examples/timeflies-python/uv.lock @@ -4,64 +4,64 @@ requires-python = ">=3.12" [[package]] name = "fable-library" -version = "5.20.0" +version = "5.20.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/0c/173e9c4bbd22d3063a0d451b739080d7de7e655215779e921b61141ea493/fable_library-5.20.0.tar.gz", hash = "sha256:272552e27f8904a0de70e2c0c90cf6b10709687d4ebf04e3e1aeb0409de5bd47", size = 249921, upload-time = "2026-10-07T19:25:32.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/90/e6e6e736b9605247a0b624c4f9c20375a4feec0322aad5f124fa40526dd7/fable_library-5.20.1.tar.gz", hash = "sha256:6519ad56db080126eaf5f59b272e3f98c2e1b30ae0ae13785b67e0962d349511", size = 251409, upload-time = "2026-10-12T16:07:00.834Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/b5/400accc83a35e0995278971676443d70fc1e051dcf70b2fca604ef9a951e/fable_library-5.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d70d58ed49e466c1ba6f1a11d25585efaeac61f8583d9b917cb6e71c1fabbe42", size = 1407799, upload-time = "2026-10-07T19:23:59.042Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ec/245070a43c6a834092322f9117f582f204725a4c097a75e48012fbe3412e/fable_library-5.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5255205b5008cfcbbd1e107b309ef1f75ae245d158a25b2714d717afc5959135", size = 1314966, upload-time = "2026-10-07T19:24:00.781Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8a/03b8a6cad1f32a94ae7856e677ed918026a4f9007b90380544f80de1282c/fable_library-5.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65a3a9a18b4ab21e4393c9fcd1e7d60f84907bb9d11d464c986ca4d28991b1c4", size = 1352618, upload-time = "2026-10-07T19:24:02.078Z" }, - { url = "https://files.pythonhosted.org/packages/a2/4e/d831079e77b9919876d61544ea297e433faad679c80283cff5f8ebc60a81/fable_library-5.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:997efaa7facac6339d5c86a36be17fa81552a6a318222200772dc129d515b741", size = 1335977, upload-time = "2026-10-07T19:24:03.557Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/ff832df1ba6d8b8a1275a288d6b8802d2e780ab25f3e18e0798ab0d202e1/fable_library-5.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92f0f2974d5105c4f2c0dd1dd16aa51623e2877faba9669e32bd8ceafe3b165b", size = 1476936, upload-time = "2026-10-07T19:24:04.871Z" }, - { url = "https://files.pythonhosted.org/packages/d2/12/053d725ec71d9231aadb7a5f90ee0cf7e055edf156c5ff0c9a3acf9a0ca7/fable_library-5.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc1fbc53b201f3eef3649383b6a843f9302fb2fdbd6ebc360ddbd68c40d3a2d", size = 1502273, upload-time = "2026-10-07T19:24:06.112Z" }, - { url = "https://files.pythonhosted.org/packages/25/14/dd65aee75acc31a92ef00c9b008742e3d724459936bc0a50cb744ece7e5a/fable_library-5.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb8107a9ef013320f307d7018f7c6d55cf3284701c79159a3df68248ab29adb", size = 1425546, upload-time = "2026-10-07T19:24:07.335Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ed/105a2e4a90429c4d2b11b4ed6d8b354a1477894fe521823f6f3dfc695566/fable_library-5.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a09158bf708a9e3497198ae24b3d694d8f6a50ad3f588fd1b585a8cd26bda72", size = 1454778, upload-time = "2026-10-07T19:24:08.674Z" }, - { url = "https://files.pythonhosted.org/packages/f3/4e/d395185ac64d3c97e8a55d4d280c76502a6e860705679d8b298d64ee70f7/fable_library-5.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ff97dde35a3a0a81d0ce48d484f7f9f2ea8246da464aa313260264c5c317112c", size = 1532365, upload-time = "2026-10-07T19:24:10.076Z" }, - { url = "https://files.pythonhosted.org/packages/fe/73/6e9baa090e1d05f47ca9e9b45615cde70680d10aefd765ed436447b256a5/fable_library-5.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ba7a681b4b7ecb3605d5110bb95d05b9ae67e7ccf0647ba32fc4594e7f3b5fb0", size = 1612668, upload-time = "2026-10-07T19:24:12.466Z" }, - { url = "https://files.pythonhosted.org/packages/6e/5f/78d95a5d7fca36c270c27668fed2f1ef358729232abef0675a265c0ca480/fable_library-5.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d00c355c4a676d12c2a1e5999ba856fca9e11f4d3b0bdcd30022c96c581f6507", size = 1637435, upload-time = "2026-10-07T19:24:13.786Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a7/dd5b89bf6af2d7985864a75252bd8a12da7d019a4c17888865477409f2f9/fable_library-5.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad78a8620725eac2d06cd6f0c642bc6eb1ba9996df7341ce00ac8c871e25622", size = 1652776, upload-time = "2026-10-07T19:24:15.447Z" }, - { url = "https://files.pythonhosted.org/packages/8b/10/0a02c5f667765dfc9aeb4949b0b51feebafa1b029b85a9406fe1e21f8c87/fable_library-5.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:28defcbced4cd79cc3be2b3b1a2050ffdd00a0f702175e00429fffb6faa62883", size = 1420302, upload-time = "2026-10-07T19:24:16.73Z" }, - { url = "https://files.pythonhosted.org/packages/d9/d4/e2978a1125867be5f0b435b835ce9f33dd1ce8eeb91282dac5e6829e49fe/fable_library-5.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:c21552441ac8f53527296ce383ef06d57d70060a62c620a1f28233c9aa201a78", size = 1408350, upload-time = "2026-10-07T19:24:18.42Z" }, - { url = "https://files.pythonhosted.org/packages/5b/87/85048f60f8e3013834ff3b35b5fd3e17699b7db14c02862ca80feadccd20/fable_library-5.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37766d01f16d53ab70a5d1013d3679f7a1c3e784b1e58c9a1d1834bd564950bc", size = 1315084, upload-time = "2026-10-07T19:24:19.68Z" }, - { url = "https://files.pythonhosted.org/packages/6b/30/e151eefd2065a0d41032a05b3ac9e21b0ed894d6cd49c87cfc7437b1adb7/fable_library-5.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f63455785516f86f62d905bd71478caf303a048a95856cedea47674ee93a086", size = 1353372, upload-time = "2026-10-07T19:24:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/7c/34/9f73c363e0273ff41fc1d0b3501cc8dfa5111a84df16d2377187801a645a/fable_library-5.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d991b100a01f8dbe7b1dd51b7d90d7ae96e15cbbf67bbf2b7cab6fff9765277", size = 1336327, upload-time = "2026-10-07T19:24:22.575Z" }, - { url = "https://files.pythonhosted.org/packages/e2/58/d989f1620289a87b9e2565f9f9b775ab76529d3b0cad834f896e2b667c53/fable_library-5.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e701a1ac4f34e70dde66936c0b4d6a3d48036f608a3e82f044d8a6bfcf1007cf", size = 1477249, upload-time = "2026-10-07T19:24:23.703Z" }, - { url = "https://files.pythonhosted.org/packages/c0/62/380bbb786757134ba9d66c582458cf3e78ed47f86a14c89af3374e36ed8b/fable_library-5.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ed6797a966abf4bc13578edd77c5359673f652f9935cce3138cf151557079a", size = 1502207, upload-time = "2026-10-07T19:24:25.102Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d5/28d4292627dded733451df00bbe66065fee18b1942613f84f0522f5c8045/fable_library-5.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf14117916320aa0f7a36ea686dad83fa695304b4ec4048d5d3aca5d27032149", size = 1426673, upload-time = "2026-10-07T19:24:26.443Z" }, - { url = "https://files.pythonhosted.org/packages/0a/39/3e3d12e2f5fb9553c5ffccf79b9899ad5389d803e41617374737fda9b16a/fable_library-5.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:638aa9e6bcef1b150f4153315160a7696fd17ac227c9562146f19a7fd163a6e9", size = 1455072, upload-time = "2026-10-07T19:24:27.787Z" }, - { url = "https://files.pythonhosted.org/packages/e9/8c/62751a8b4c7f6b0ca1ddfd3b73f1c89594ad024af746029e8cd75cdb41b7/fable_library-5.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7299c910f92f27075569ba7d144388e64017256dc746b218bed927aff2a6f6df", size = 1532844, upload-time = "2026-10-07T19:24:29.4Z" }, - { url = "https://files.pythonhosted.org/packages/0d/a8/f87f8840da6dfb97539e755f142efbcd4e94baf602c4724fac149696fcf2/fable_library-5.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:068728ed7b261180a4e41fff0ae7c24987462f5691233d653cdc7c58cdb4f881", size = 1613153, upload-time = "2026-10-07T19:24:30.609Z" }, - { url = "https://files.pythonhosted.org/packages/11/b3/a9fdb2cc71ae36625154e6230dd25d725baedd3a9da66f2a35c0adb60e28/fable_library-5.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a89aadd0e9aacc2ba19efe81964fb3541f66e8714803cb4ccb6b92e12707b0e5", size = 1639779, upload-time = "2026-10-07T19:24:32.096Z" }, - { url = "https://files.pythonhosted.org/packages/5e/5c/71ca69e1ddc477f25a5f52f33fd8151c5db933de4c238bcda5795441eca6/fable_library-5.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd9bfba7d7fa6846a52a3829847bbe86818e0472ef9154a5b669892975f03bba", size = 1653037, upload-time = "2026-10-07T19:24:33.551Z" }, - { url = "https://files.pythonhosted.org/packages/4e/cf/9a77128bd39f13de243f70bde475d6a1b90d8848dc8454f517b8b2191f23/fable_library-5.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:48206f76e82b0d02498441482249274bbee3514f881a74748ad6f1189b0c82b5", size = 1424105, upload-time = "2026-10-07T19:24:34.883Z" }, - { url = "https://files.pythonhosted.org/packages/49/ea/9857d6ec641215dca309d486c13c685379db193d62140968dc660b2f7427/fable_library-5.20.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:7a04f941dc97086b8fe23e224ce26e99a589accaa82bc42720aab4e130de1577", size = 1409381, upload-time = "2026-10-07T19:24:36.251Z" }, - { url = "https://files.pythonhosted.org/packages/db/d8/1d3659f337611f906da86ca8106d7b4e2c3035e3a773ae9982c40542a78f/fable_library-5.20.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:94013816261225bd391dfaa77e50f82494a6cfe7043dedc4127cf559f75b0aff", size = 1315033, upload-time = "2026-10-07T19:24:37.618Z" }, - { url = "https://files.pythonhosted.org/packages/39/f0/db07443d6cbd77b1d732ec3aafba8e252c535db5d9d62a074999fd459aa8/fable_library-5.20.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c344eeb77ddbdef16a0c86facf5e84f3c699809bede49813c54d4b12ec967a6", size = 1353372, upload-time = "2026-10-07T19:24:38.994Z" }, - { url = "https://files.pythonhosted.org/packages/e0/57/d3a1c61653753e6a60b05a38b408a0e0084c9026c3062a6099dab1ca525c/fable_library-5.20.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:960b6cb402a82a6e782f637d02d22bed798d639122ed7c660cdce14f3d6d6edc", size = 1336325, upload-time = "2026-10-07T19:24:40.842Z" }, - { url = "https://files.pythonhosted.org/packages/62/aa/b07e52ce28350c77bcb3fc39291ae3d06a055a2acd521978ce21dce889f6/fable_library-5.20.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bb7ff803fabb4406f0dcf54a52c463f573fb303254b765c7ffacefaa23d5991", size = 1477594, upload-time = "2026-10-07T19:24:42.307Z" }, - { url = "https://files.pythonhosted.org/packages/b4/1b/ff3ece0033c8506cc2be7247a94bc48585f6486e7e77e2f09b6e477af930/fable_library-5.20.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53eea51f349411bc3f6992fd4478f19c6cee599e503bfce9d23a75d7c3952fc7", size = 1502648, upload-time = "2026-10-07T19:24:43.589Z" }, - { url = "https://files.pythonhosted.org/packages/8b/1a/17df484530538a2d838dda053fd372fcd08ca653e4935eac206ef04c9d9c/fable_library-5.20.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8b345b9ee771c8dcfeca272c4b839a1d97e18feb6b2ebd8874f45182816598", size = 1427704, upload-time = "2026-10-07T19:24:44.968Z" }, - { url = "https://files.pythonhosted.org/packages/24/5f/578cb984c9b33169a3fcf4c6a5e7ff46238ad78e1be8e3554a0b17dbad33/fable_library-5.20.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ac20bae56fc8bf433fef00712d80005a7fdd39ac0e2ba88ffb6d241b0db6975", size = 1456108, upload-time = "2026-10-07T19:24:46.353Z" }, - { url = "https://files.pythonhosted.org/packages/11/c1/155b47fed0c54f6ae0eb9d5a11b37314c6757d7f9264525cfbda95ff86df/fable_library-5.20.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:44395d698b297d713918c47d3f93ca69f40d325d5a75971920de716160886112", size = 1532947, upload-time = "2026-10-07T19:24:47.852Z" }, - { url = "https://files.pythonhosted.org/packages/26/77/8e65028860a3a485d364f2e9cb98f0a5ea5254cbdc7881f51ccfc101ec99/fable_library-5.20.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b64f282cfe0647502014179e797d0a671b8312a22e3a8f58dd453cf0de3b2ac6", size = 1613436, upload-time = "2026-10-07T19:24:49.29Z" }, - { url = "https://files.pythonhosted.org/packages/a7/91/ac73344253b251eb4adfc821f44424dde2f4264b78a13a28e5d4542a0e09/fable_library-5.20.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0aa8149589eabe2359f88cbfba0f2ea6f25111be1b3a3059f3bcc958b9ece57f", size = 1640423, upload-time = "2026-10-07T19:24:50.623Z" }, - { url = "https://files.pythonhosted.org/packages/af/58/2f3530da6b52921b6ffb97f998eab668e3f4a80bf855249c3cf397ec7673/fable_library-5.20.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c85016cd58f9b1e004cc73bdbb12c54a7243e9a390abc83739ea9ef9e50ecd93", size = 1654267, upload-time = "2026-10-07T19:24:51.951Z" }, - { url = "https://files.pythonhosted.org/packages/9f/af/d2c7907359b79027f18e783c2aea6fbe255f9cdeefdf0990caaad1cb2eae/fable_library-5.20.0-cp314-cp314-win32.whl", hash = "sha256:42d4a4f9457965ea5e6e8eec1ee9af7c6e797dd9db0acabe9384dbf6018717ee", size = 1272901, upload-time = "2026-10-07T19:24:53.256Z" }, - { url = "https://files.pythonhosted.org/packages/3f/a7/cf750a16e457a8742a60a69a75dc152d84ed32d4679e5de93afc8d2ba923/fable_library-5.20.0-cp314-cp314-win_amd64.whl", hash = "sha256:2459d92a29861daa47932d42b9a49977072ac332c134a2db43d2796720663a55", size = 1422801, upload-time = "2026-10-07T19:24:54.553Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a1/833471d38aac5125baba25713dc7223c43b0c40debebb70506a756980653/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3dac1e26946b0af60434173bb99b8ccb9be7fc74dd8616a0e54b31b3623001", size = 1357901, upload-time = "2026-10-07T19:24:55.836Z" }, - { url = "https://files.pythonhosted.org/packages/26/ab/03477b3374e3629c7c61ca00ed181ad868f74f45585a07752dfde3669cb0/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a002ade4239208b5339b64cf2077c19e08a521bd046a622d7668805ae56a6ea", size = 1336928, upload-time = "2026-10-07T19:24:57.28Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ac/fb7dfc503fb7bc78fc6bbdf27c038cb187bd922275ce8db7b12a469b96ba/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fe823224930b48023b0a1ec5e73bcdef447e75962b7b482aec0c6c7543f0b0f", size = 1484663, upload-time = "2026-10-07T19:24:58.664Z" }, - { url = "https://files.pythonhosted.org/packages/5a/14/1d8bf70266ef689982be587bc1952df05711a72feff989335a55600e86dc/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:664eb37ed462f73b962e0b4e8bd4cb74398444d0064d114f3125daf237b2f35b", size = 1508936, upload-time = "2026-10-07T19:25:00.106Z" }, - { url = "https://files.pythonhosted.org/packages/4c/b9/104ade01570d0a48ef44cfaa808f73686325256927055a5422e40d260698/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308bafd52c146440cd009f120a85af5aa2bc9305f9ff960d89727781713b45af", size = 1433339, upload-time = "2026-10-07T19:25:01.561Z" }, - { url = "https://files.pythonhosted.org/packages/c6/41/0fb962ae656ab632d30317891d02b7c2953aed087921b53be6d46828bc7d/fable_library-5.20.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d0d11d8522474774cae83450590a0c5ed184136140241d5e25cad6863297bb", size = 1459854, upload-time = "2026-10-07T19:25:03.042Z" }, - { url = "https://files.pythonhosted.org/packages/f9/93/3efe6072aacca9e3c83548e56f3942b065d53b88d1759e5ee5e15efebcf4/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:10a362dc1f9489a1a49ad428e1df5f41d63c90ffb3e2d166881f7a392a12c40a", size = 1536798, upload-time = "2026-10-07T19:25:04.442Z" }, - { url = "https://files.pythonhosted.org/packages/1c/16/dce645517db18c5c240211fb86f4d5b25dd2bed86c44ce6b6d1fb6da6bdf/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:19276d4d62bc3f5886361562a769f0f0fdcd656defa627fcc3d237c17e0c32c1", size = 1614056, upload-time = "2026-10-07T19:25:05.982Z" }, - { url = "https://files.pythonhosted.org/packages/73/70/281155eaf45dd6a279719bc8e26dc77bafe2ccc68e8121737e77562c0580/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c4c8dfcf2e43477bda501eb70de9fe72a860f4b42552da74c7fc4428c715c55c", size = 1648575, upload-time = "2026-10-07T19:25:07.914Z" }, - { url = "https://files.pythonhosted.org/packages/34/39/900d01ccd07d8ca9e04cd7ababf61ef6eb4a726527df42edd7e47f968c2c/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f7c284a4fcfd70aa12825a04dba618c4be0464916c93d757668303d12f6dbf90", size = 1661981, upload-time = "2026-10-07T19:25:09.661Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ab/2cd2dabe3c4e2637f059696eacc91f4a1cddee55d0881653ab0d83985ba3/fable_library-5.20.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd3db710267c896c1e4da0245bd4e225694112c04a6ce770f064f525ad15a35f", size = 1427524, upload-time = "2026-10-07T19:25:11.304Z" }, - { url = "https://files.pythonhosted.org/packages/16/c1/90d6df951464147ae4de031f2d3ca18ad004285a682f3a718bf99050c94b/fable_library-5.20.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d511bac7fc9e1ed78b8762acf6a2de63788a2c94fbf80509a8551df8fc8ce2b0", size = 1456400, upload-time = "2026-10-07T19:25:12.736Z" }, - { url = "https://files.pythonhosted.org/packages/be/18/b069f9e5ae8f572eccaefe1062f940dea8b7b8dbf42829efab2253875a39/fable_library-5.20.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d4fb7363204ef55694eb8cbeff37342a5c8fd3aed0bab0df802145f92faa12", size = 1433375, upload-time = "2026-10-07T19:25:14.105Z" }, - { url = "https://files.pythonhosted.org/packages/57/c8/2939792c7689edbe09fe1f4542a216199dc8049ff674bad08ce948e0b2cf/fable_library-5.20.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fe71c28a143120d421fd3d7cc783535dde071dfe9b6ef6e386c17280871a2c7", size = 1460078, upload-time = "2026-10-07T19:25:15.543Z" }, + { url = "https://files.pythonhosted.org/packages/07/32/f9e4c4f41e1acb85aa15dc8dabc35c6c965a3614869f625060989df9026a/fable_library-5.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fa086b4bfd8592baf00a110aabcc405774aa6302201c8c52587aee3b1b6c8c0f", size = 1409196, upload-time = "2026-10-12T16:05:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/20/1a/fac9ac9f4fbff99f02b135d35b146f55e8bb3c6df59790e86c3b431b4ca0/fable_library-5.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d82dad2f6246fa329da9da5505127afe253b9c53bed7499583d8837c9fb97fc", size = 1316361, upload-time = "2026-10-12T16:05:26.937Z" }, + { url = "https://files.pythonhosted.org/packages/1d/18/ea99aad8fb345a65ffc6d584e12cc8c7c4cf40109720da38e698d3659b67/fable_library-5.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6ef2dd4919d9bbc58a5fbd286516d432465619396e98eeca529aa0398c7dd6e", size = 1354020, upload-time = "2026-10-12T16:05:28.194Z" }, + { url = "https://files.pythonhosted.org/packages/11/cf/72dea3a384b6f11a1d886d81e7b12357412029fb91aa36663e5f12940b71/fable_library-5.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca89705988c787637658bd7f1878441f8205a47e98a9c217f8898770fde7079a", size = 1337373, upload-time = "2026-10-12T16:05:29.625Z" }, + { url = "https://files.pythonhosted.org/packages/10/18/eb6666704dc4b2954313f879f71e2b170a799bec6d03580998bc460856ee/fable_library-5.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcd96354d221586c834be0fb4acfeaa97abb8487a31e2389c117ed2c74bba6c", size = 1478332, upload-time = "2026-10-12T16:05:30.879Z" }, + { url = "https://files.pythonhosted.org/packages/f8/46/e8f266604a2e728c7f58c3b36d43e77224855488c732704d2c880040c8a9/fable_library-5.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5227adf0de0e93e5f22885806ca9749d8df62eb0c9c5a71b996e5f4f74f234ed", size = 1503670, upload-time = "2026-10-12T16:05:32.114Z" }, + { url = "https://files.pythonhosted.org/packages/68/7e/7973111f4f09d3e49814d9b377f21a53670b514718c2bbb25f384a08b44f/fable_library-5.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6171b3a6194c057d131b930da3bb370d3662c809acd33c80c308d020c8818ef", size = 1426941, upload-time = "2026-10-12T16:05:33.382Z" }, + { url = "https://files.pythonhosted.org/packages/44/0b/1d2173b2e7418e2756df6b911b77c453d0e469f526fa303ce98c07e066c1/fable_library-5.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:201843238d2d717efe70f22075eaabbd325429381613b3866dea973558cc67b8", size = 1456174, upload-time = "2026-10-12T16:05:34.633Z" }, + { url = "https://files.pythonhosted.org/packages/e7/df/9aa67c41d8256336afbe69b036c9657b818714eca2be6620439e2a7ea1ff/fable_library-5.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:77833e0a9b0e6520b4091a72cd3ef585225e1dbe27ec76a118cdfd7639f6c261", size = 1533763, upload-time = "2026-10-12T16:05:36.322Z" }, + { url = "https://files.pythonhosted.org/packages/70/cd/8f90d1378c1cb0dbd22e0778c15ff2f3ffdc7dc9a88e90a9ad468298b571/fable_library-5.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9c3671e0eacf190beacfe39ea9897c6d47e8a91eaf76086c8f8960759cc8b0fa", size = 1614064, upload-time = "2026-10-12T16:05:37.788Z" }, + { url = "https://files.pythonhosted.org/packages/81/94/0a33974f22ff750f1d5843433557f368c4ba9c45f5b23436888a6994ac16/fable_library-5.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3340c1b9ca1933a391c1f253cc1c4ead4ae93997b821d806efea24d6d20ceb60", size = 1638830, upload-time = "2026-10-12T16:05:39.245Z" }, + { url = "https://files.pythonhosted.org/packages/54/23/f66eb2a97c950ba29ffb3b717df032ae2d212066ec4fec398f4c2d7e5412/fable_library-5.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e387677b4f4031c27c3b6c1d9a986ee9ab2a1494c536befb42c4b0916cf03f95", size = 1654175, upload-time = "2026-10-12T16:05:40.569Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/ce8ed29682c871eeb495a0a344b2dc86e41527ce989092c5567ac90f05dd/fable_library-5.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:175451f79f51434e8e2f7d2700133c064e0e09267039a7a73ccace0d216c8f9b", size = 1421698, upload-time = "2026-10-12T16:05:41.846Z" }, + { url = "https://files.pythonhosted.org/packages/e9/73/89532018b966f6e92e8372a891bb6fa6b748527e2d82a90c94501f3cb820/fable_library-5.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ce889002195fce4c1e169320d166ee360690cd0decfd16e9f21168c48d47ef0e", size = 1409747, upload-time = "2026-10-12T16:05:43.225Z" }, + { url = "https://files.pythonhosted.org/packages/52/f1/f7888ac08d88ad859524d8394ba69fb5bd2ac6ecabad978f94a23b2aecba/fable_library-5.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:32dd6c6c676a216248f8e7440fbf6fadec4c9c0ce6436bc16077ab5bf4c08469", size = 1316480, upload-time = "2026-10-12T16:05:44.467Z" }, + { url = "https://files.pythonhosted.org/packages/fb/86/95f574165c5cd8704998093a5f077a119e580c4f0b7207c1e858eb3befc1/fable_library-5.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84b33763763816318e9a6d54be35a2ddcab9d80908715a3219f61dc6ed92b05c", size = 1354773, upload-time = "2026-10-12T16:05:46.03Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a0/2a3fb85264f4f9a4bce66e85c8994cae02389dae1f9d3fbccd0e2c237c67/fable_library-5.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5471efd64f499e2f4682852d9e4f294f2b4af13e0dddbb017e188afe4a8afdd6", size = 1337724, upload-time = "2026-10-12T16:05:47.352Z" }, + { url = "https://files.pythonhosted.org/packages/ba/87/b81a972f55a4234a07c2f3e0f212dbce0af4a090b1fae87061ed11a6ca89/fable_library-5.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ddfd574d242b3e650c5fa2855208f6a82f2730ea36098b320a5228123522dc2", size = 1478645, upload-time = "2026-10-12T16:05:48.776Z" }, + { url = "https://files.pythonhosted.org/packages/b6/fe/e98b8b3d41bbaba32e40dfd3c1c2bb59f32183d66f95e03a1230a5fb652b/fable_library-5.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b7a89916d1276dd2728acfcb69572a8914f566bcf874bd7acdd32c608a3c49a", size = 1503606, upload-time = "2026-10-12T16:05:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/be/7d/f694dbd7ff767a077d592e1778c945c892de6d858b6bcbf6c5fab4b35cf6/fable_library-5.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f615f053fd537ba1d9e3e6fac780f7bf245db5c197b6d8928a9c0833c1f6dd", size = 1428069, upload-time = "2026-10-12T16:05:51.251Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b4/ff34fc29d48785aa575a35353ba0b762965e1fd32296fc279f04ec86a504/fable_library-5.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a13b658a31eb4f58cef6cfa3537451781ccd7e2c85d963a3e419d1f95d56eba1", size = 1456468, upload-time = "2026-10-12T16:05:52.593Z" }, + { url = "https://files.pythonhosted.org/packages/c1/af/c9e024d7f0a9cfbb57fb34821d8b320cce392833a2cc7f6b78cea49a9e2c/fable_library-5.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a2c08401ba3613f4cabe37620cc956808a8690327deea2111ca488280db78a0", size = 1534241, upload-time = "2026-10-12T16:05:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c1/3fe19162f3adac33b4de22774e082f2ff9865244ef9a46627f8225231957/fable_library-5.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:74465862f73a61964aee48308d9189e841aeeac9eeaa24305cbad28509332992", size = 1614550, upload-time = "2026-10-12T16:05:55.456Z" }, + { url = "https://files.pythonhosted.org/packages/88/96/efde4a8e340d6f3a1039748418557443067b5b749548082a266e674428d0/fable_library-5.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3713ddf30022993e19ae8c8d0269b0f300c07aad6f6aecbe72fb51555cb0df20", size = 1641174, upload-time = "2026-10-12T16:05:56.77Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c3/c3e7ca2c4c8d9dc43c8f55ba955da206ec695df1d5d2a48eadb1432b39ff/fable_library-5.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e38f27ca471689670c48e2d3c34902cfa2890666e58d05efdefe0ce888f06dea", size = 1654432, upload-time = "2026-10-12T16:05:58.071Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1e/9519abd276bf5a95b07d3d1c471d8b53487c0a38fcfa477ce328f6f1bdec/fable_library-5.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:06bd68677d743c079d1c44f27e10dc3b00478e8ede6cbc3f834c540ba70f3dee", size = 1425503, upload-time = "2026-10-12T16:05:59.488Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/7cff9237540cbed6856a08f21cbe802ad137bb1a58e61b3e3f10d6f1b35a/fable_library-5.20.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:60c0d2c2fd42a593fde24a947c83bef619d98c4188760c4029e64a57b380db4b", size = 1410777, upload-time = "2026-10-12T16:06:00.95Z" }, + { url = "https://files.pythonhosted.org/packages/69/01/2bea08f4cfac231dcc2d27c59d3802eae9ce8a594e4f23a5af767754f1f6/fable_library-5.20.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2c118fa3f2f44fae1134561748c68e39388d535cd08caeac3d089504551df8fa", size = 1316428, upload-time = "2026-10-12T16:06:02.259Z" }, + { url = "https://files.pythonhosted.org/packages/d6/cb/a2538d41e84ee6f86f82513ad4551808204847aeb86ef6f407ea5c709f15/fable_library-5.20.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d04be150ab61ad245121a39fdb7fb89dc8da42b934cfd1becad7f7ad41b16e6", size = 1354773, upload-time = "2026-10-12T16:06:03.952Z" }, + { url = "https://files.pythonhosted.org/packages/d8/29/d4ea3159ff787d07830de6d7dd5599a713d4485c03d9bc6832b7dbbbf3b8/fable_library-5.20.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d462f95ea087e55c2fabd01d5b99bcadfdad958c227cf43543c88401a817e78", size = 1337722, upload-time = "2026-10-12T16:06:05.779Z" }, + { url = "https://files.pythonhosted.org/packages/a4/01/0bafd26490fe315e4e1c950babef8b7acef031aa698d7427b29bbc793532/fable_library-5.20.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03cac17ea9fa6f07502177d67e0c909484d87e6da04a2f80556c545b5bf518c1", size = 1478990, upload-time = "2026-10-12T16:06:07.144Z" }, + { url = "https://files.pythonhosted.org/packages/26/9e/6e645ad5cbf76526ddd7dce6b90a4debff6941c509b36112c095e6d8a9ba/fable_library-5.20.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:904e865b6cec53d326a295262c0969c29208c9a6a39a43f1525ead8568817f31", size = 1504045, upload-time = "2026-10-12T16:06:08.596Z" }, + { url = "https://files.pythonhosted.org/packages/48/b9/efcb0f41c5167318a8a838529093dfa1f59f50af898aed08c720ce0858ac/fable_library-5.20.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435257db36425a91f28bde8d401874aca3e4ce7fc2b8760ecc19edd22c1b52e", size = 1429100, upload-time = "2026-10-12T16:06:10.284Z" }, + { url = "https://files.pythonhosted.org/packages/31/37/74e67ce8479d1e1bd7228c75df8feea3389ad01597876aed64d9dfc8ae77/fable_library-5.20.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f7864b9ee2b216a3893a703bb9777da33abb34f3a512fe457bc4cd0e725730f1", size = 1457506, upload-time = "2026-10-12T16:06:11.641Z" }, + { url = "https://files.pythonhosted.org/packages/a8/54/285d1f195b79990f07d8a1559276520297b4395c7aca8cccd2c55b88feaa/fable_library-5.20.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:82410e233c51de01d9b222b1f7d06146f0da6e8754033c2b42dc4982a6124d71", size = 1534344, upload-time = "2026-10-12T16:06:13.849Z" }, + { url = "https://files.pythonhosted.org/packages/47/e5/6fcf0460398a552eddc6915dfd33c6a15a291a647998b968d970fe8a1ecc/fable_library-5.20.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:52c299643d1121605a7b4e8285b46ba573fb544c2c9a476c069a2ae390cd2b9c", size = 1614830, upload-time = "2026-10-12T16:06:15.681Z" }, + { url = "https://files.pythonhosted.org/packages/69/81/7746f6b5c050d2a808b6993d0474b61c18df39ba694546776b9b8ecd39b0/fable_library-5.20.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:68059d89f84e125c6f02dda964c4acc648a95f6dda69cd3cbde169e8f9abec49", size = 1641819, upload-time = "2026-10-12T16:06:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/813705547e8293f1364d9094919c589493fd349b64b88a9a2f5d78874079/fable_library-5.20.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9721005dc92b09a8548b931fc269bb2ee41218871bea9efc4373fd29814ceebc", size = 1655664, upload-time = "2026-10-12T16:06:18.571Z" }, + { url = "https://files.pythonhosted.org/packages/23/14/6ea45cc89dc414adca00dc887e906ad016d600f8a905f353e2b0495e0461/fable_library-5.20.1-cp314-cp314-win_amd64.whl", hash = "sha256:c47c5ab9a7e74836dd34be73fa45c846b282b52f626c8d0ce5b28827eba00318", size = 1424197, upload-time = "2026-10-12T16:06:20.433Z" }, + { url = "https://files.pythonhosted.org/packages/03/ee/f72eec3254e5dfe73d87b20465d1d7eba51d287f4988d7f4427afff93eaf/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7caeabccff136be7f269d962e6026e71608321cb7725cce9891731001c5214b2", size = 1359304, upload-time = "2026-10-12T16:06:21.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b7/d7adff4b25e19789f290c73e365baba9c73fb58fbd06c3ec882f99378a51/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ce0aefcb9281e25fa2817db0d17dcd2d59cf442b93e61581fe75e0f0f5b8eaf", size = 1338322, upload-time = "2026-10-12T16:06:23.248Z" }, + { url = "https://files.pythonhosted.org/packages/54/7c/90d8b78c7cc6506ca51e45ab9eb316d2c6945f2622056c70de73defb8ef6/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:100c984350ce97012ec270ccad330cac3b8f1c968ca4ff9ebb99cb0ed00834c7", size = 1486060, upload-time = "2026-10-12T16:06:24.768Z" }, + { url = "https://files.pythonhosted.org/packages/17/95/d658fa9c82a9d3890f932b99db198fe914f7792caa6912f8ac3e432bdb44/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:367ecc88c88c969a4f1a3fd368a21502ecc1c8e55b61053cba72c07d6a2230b4", size = 1510336, upload-time = "2026-10-12T16:06:26.198Z" }, + { url = "https://files.pythonhosted.org/packages/4c/5d/974d6b577430fdd47808946273b49ef67556d6abd5d6c07a8ed9047b9ce0/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50e006dee9acc3dd6a8081bf8b728aaaaa98fcd7ea1c612a6d5424ce65f6c7f", size = 1434735, upload-time = "2026-10-12T16:06:27.575Z" }, + { url = "https://files.pythonhosted.org/packages/51/53/9d028ae51d02ee841e1d48865c596cb5bdf2b85528b3710f3aaaae0f38b6/fable_library-5.20.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:091d35c3c6056ad8a4f57a88dd08b354dc647c10d32fa3adc97ec50fca43b8e7", size = 1461251, upload-time = "2026-10-12T16:06:29.002Z" }, + { url = "https://files.pythonhosted.org/packages/c9/95/73c4b844f684dc1b748dbef08d5e91fb76e842345c63eba2e8b990d220e3/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b737c093ac65d94d80bf8e388bc6763a94b3225c2f660ed5c3bf33536fc231fd", size = 1538192, upload-time = "2026-10-12T16:06:30.411Z" }, + { url = "https://files.pythonhosted.org/packages/ed/be/f7842e1ec4ac111cf56d5ff1fdac9c5c9f32870b67632b10e24c3a5839c1/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:16a583b15edd52fb832082ed770ec9424821518acdd526734b600d9a7c4ff935", size = 1615451, upload-time = "2026-10-12T16:06:32.062Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9d/a96f74e940c822f39c5089069b25e561f781fde6f8afa9af59b7361a15dc/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:aa473a39b8991468f9c941890bfc7f8718554ab2f9524694458be35c07811ad4", size = 1649972, upload-time = "2026-10-12T16:06:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/36/e6/a9b3cc828fe3743aead186ecd5ea1dfeb7c13cf27992242fb49badcd2233/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1322aae86c06cc6683e1a680df86b12a35008c0615e8d9aaeb0d829367e55d96", size = 1663379, upload-time = "2026-10-12T16:06:35.266Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/b158490fc78c47d7fbb48167b4ec16fec0532155edd23f9d5fed5dad4967/fable_library-5.20.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:debea3a58a130356a464e60a8ab4cfa8a716d9f6fb3e22b9dcfba0a6ba564700", size = 1428920, upload-time = "2026-10-12T16:06:36.659Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d3/02221691eccd009f09c88a8df04ba6b699db8f9241c2d0c3be831ce51f8f/fable_library-5.20.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dc6c132754c946598c1a2fa09cf37e3b0911cda9dff20b012ac3591b07e11c3", size = 1457797, upload-time = "2026-10-12T16:06:38.096Z" }, + { url = "https://files.pythonhosted.org/packages/26/71/32fdb9a49d495cb6e767d0b93550f8f9aed554721dd62417e68e96c2d525/fable_library-5.20.1-cp315-cp315-win32.whl", hash = "sha256:1532269dbb3431fbb2c3f16138c0c9a1251db152ec3252b7a787918c71effc6e", size = 1274404, upload-time = "2026-10-12T16:06:39.928Z" }, + { url = "https://files.pythonhosted.org/packages/6f/06/8c022bd616fd3fda9c1b4331dc9006f29580407141483ae7ae9de0b16a05/fable_library-5.20.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a788c7a89d667ef06fbfa9921b97f3ac928e9569d946d8690b9b55a72f1d122", size = 1434773, upload-time = "2026-10-12T16:06:41.345Z" }, + { url = "https://files.pythonhosted.org/packages/54/cf/bc229fc42656ea9c82ab602e3cc78d39fb90bf98e9ee63f1637fcb0c8bd9/fable_library-5.20.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c23ea79b2a5d0a4dd8ff487c88e2ddbada162a3a2d15a3f9b03098cb7f5dbf76", size = 1461475, upload-time = "2026-10-12T16:06:43.112Z" }, ] [[package]] @@ -75,7 +75,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "fable-library", specifier = ">=5.20.0" }, + { name = "fable-library", specifier = ">=5.20.1" }, { name = "tk", specifier = ">=0.1.0" }, ] diff --git a/pyproject.toml b/pyproject.toml index 2082b0e..e64fc1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,5 +3,5 @@ name = "fable-actor" version = "0.1.0" requires-python = ">= 3.12" dependencies = [ - "fable-library>=5.20.0", + "fable-library>=5.20.1", ] diff --git a/src/Fable.Actor/Lifecycle.fs b/src/Fable.Actor/Lifecycle.fs index 6018402..028acd9 100644 --- a/src/Fable.Actor/Lifecycle.fs +++ b/src/Fable.Actor/Lifecycle.fs @@ -7,7 +7,7 @@ open System.Threading open Fable.Actor.Types // decision: delegates synchronization, cancellation registration, and delay settlement to Fable's fixed runtime -// assumption: the compiler and runtime include https://github.com/fable-compiler/Fable/pull/5035, https://github.com/fable-compiler/Fable/pull/5036, https://github.com/fable-compiler/Fable/pull/5037, and https://github.com/fable-compiler/Fable/pull/5038 +// assumption: Fable compiler and runtime 5.20.1 or later include https://github.com/fable-compiler/Fable/pull/5035, https://github.com/fable-compiler/Fable/pull/5036, https://github.com/fable-compiler/Fable/pull/5037, and https://github.com/fable-compiler/Fable/pull/5038 // Pending settlement and ActorLifetime ownership remain library responsibilities. module internal Lifetime = let newGate () = obj () diff --git a/uv.lock b/uv.lock index 34f6451..e93550b 100644 --- a/uv.lock +++ b/uv.lock @@ -11,66 +11,66 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "fable-library", specifier = ">=5.20.0" }] +requires-dist = [{ name = "fable-library", specifier = ">=5.20.1" }] [[package]] name = "fable-library" -version = "5.20.0" +version = "5.20.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/0c/173e9c4bbd22d3063a0d451b739080d7de7e655215779e921b61141ea493/fable_library-5.20.0.tar.gz", hash = "sha256:272552e27f8904a0de70e2c0c90cf6b10709687d4ebf04e3e1aeb0409de5bd47", size = 249921, upload-time = "2026-10-07T19:25:32.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/90/e6e6e736b9605247a0b624c4f9c20375a4feec0322aad5f124fa40526dd7/fable_library-5.20.1.tar.gz", hash = "sha256:6519ad56db080126eaf5f59b272e3f98c2e1b30ae0ae13785b67e0962d349511", size = 251409, upload-time = "2026-10-12T16:07:00.834Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/b5/400accc83a35e0995278971676443d70fc1e051dcf70b2fca604ef9a951e/fable_library-5.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d70d58ed49e466c1ba6f1a11d25585efaeac61f8583d9b917cb6e71c1fabbe42", size = 1407799, upload-time = "2026-10-07T19:23:59.042Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ec/245070a43c6a834092322f9117f582f204725a4c097a75e48012fbe3412e/fable_library-5.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5255205b5008cfcbbd1e107b309ef1f75ae245d158a25b2714d717afc5959135", size = 1314966, upload-time = "2026-10-07T19:24:00.781Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8a/03b8a6cad1f32a94ae7856e677ed918026a4f9007b90380544f80de1282c/fable_library-5.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65a3a9a18b4ab21e4393c9fcd1e7d60f84907bb9d11d464c986ca4d28991b1c4", size = 1352618, upload-time = "2026-10-07T19:24:02.078Z" }, - { url = "https://files.pythonhosted.org/packages/a2/4e/d831079e77b9919876d61544ea297e433faad679c80283cff5f8ebc60a81/fable_library-5.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:997efaa7facac6339d5c86a36be17fa81552a6a318222200772dc129d515b741", size = 1335977, upload-time = "2026-10-07T19:24:03.557Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/ff832df1ba6d8b8a1275a288d6b8802d2e780ab25f3e18e0798ab0d202e1/fable_library-5.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92f0f2974d5105c4f2c0dd1dd16aa51623e2877faba9669e32bd8ceafe3b165b", size = 1476936, upload-time = "2026-10-07T19:24:04.871Z" }, - { url = "https://files.pythonhosted.org/packages/d2/12/053d725ec71d9231aadb7a5f90ee0cf7e055edf156c5ff0c9a3acf9a0ca7/fable_library-5.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc1fbc53b201f3eef3649383b6a843f9302fb2fdbd6ebc360ddbd68c40d3a2d", size = 1502273, upload-time = "2026-10-07T19:24:06.112Z" }, - { url = "https://files.pythonhosted.org/packages/25/14/dd65aee75acc31a92ef00c9b008742e3d724459936bc0a50cb744ece7e5a/fable_library-5.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb8107a9ef013320f307d7018f7c6d55cf3284701c79159a3df68248ab29adb", size = 1425546, upload-time = "2026-10-07T19:24:07.335Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ed/105a2e4a90429c4d2b11b4ed6d8b354a1477894fe521823f6f3dfc695566/fable_library-5.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a09158bf708a9e3497198ae24b3d694d8f6a50ad3f588fd1b585a8cd26bda72", size = 1454778, upload-time = "2026-10-07T19:24:08.674Z" }, - { url = "https://files.pythonhosted.org/packages/f3/4e/d395185ac64d3c97e8a55d4d280c76502a6e860705679d8b298d64ee70f7/fable_library-5.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ff97dde35a3a0a81d0ce48d484f7f9f2ea8246da464aa313260264c5c317112c", size = 1532365, upload-time = "2026-10-07T19:24:10.076Z" }, - { url = "https://files.pythonhosted.org/packages/fe/73/6e9baa090e1d05f47ca9e9b45615cde70680d10aefd765ed436447b256a5/fable_library-5.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ba7a681b4b7ecb3605d5110bb95d05b9ae67e7ccf0647ba32fc4594e7f3b5fb0", size = 1612668, upload-time = "2026-10-07T19:24:12.466Z" }, - { url = "https://files.pythonhosted.org/packages/6e/5f/78d95a5d7fca36c270c27668fed2f1ef358729232abef0675a265c0ca480/fable_library-5.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d00c355c4a676d12c2a1e5999ba856fca9e11f4d3b0bdcd30022c96c581f6507", size = 1637435, upload-time = "2026-10-07T19:24:13.786Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a7/dd5b89bf6af2d7985864a75252bd8a12da7d019a4c17888865477409f2f9/fable_library-5.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad78a8620725eac2d06cd6f0c642bc6eb1ba9996df7341ce00ac8c871e25622", size = 1652776, upload-time = "2026-10-07T19:24:15.447Z" }, - { url = "https://files.pythonhosted.org/packages/8b/10/0a02c5f667765dfc9aeb4949b0b51feebafa1b029b85a9406fe1e21f8c87/fable_library-5.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:28defcbced4cd79cc3be2b3b1a2050ffdd00a0f702175e00429fffb6faa62883", size = 1420302, upload-time = "2026-10-07T19:24:16.73Z" }, - { url = "https://files.pythonhosted.org/packages/d9/d4/e2978a1125867be5f0b435b835ce9f33dd1ce8eeb91282dac5e6829e49fe/fable_library-5.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:c21552441ac8f53527296ce383ef06d57d70060a62c620a1f28233c9aa201a78", size = 1408350, upload-time = "2026-10-07T19:24:18.42Z" }, - { url = "https://files.pythonhosted.org/packages/5b/87/85048f60f8e3013834ff3b35b5fd3e17699b7db14c02862ca80feadccd20/fable_library-5.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37766d01f16d53ab70a5d1013d3679f7a1c3e784b1e58c9a1d1834bd564950bc", size = 1315084, upload-time = "2026-10-07T19:24:19.68Z" }, - { url = "https://files.pythonhosted.org/packages/6b/30/e151eefd2065a0d41032a05b3ac9e21b0ed894d6cd49c87cfc7437b1adb7/fable_library-5.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f63455785516f86f62d905bd71478caf303a048a95856cedea47674ee93a086", size = 1353372, upload-time = "2026-10-07T19:24:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/7c/34/9f73c363e0273ff41fc1d0b3501cc8dfa5111a84df16d2377187801a645a/fable_library-5.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d991b100a01f8dbe7b1dd51b7d90d7ae96e15cbbf67bbf2b7cab6fff9765277", size = 1336327, upload-time = "2026-10-07T19:24:22.575Z" }, - { url = "https://files.pythonhosted.org/packages/e2/58/d989f1620289a87b9e2565f9f9b775ab76529d3b0cad834f896e2b667c53/fable_library-5.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e701a1ac4f34e70dde66936c0b4d6a3d48036f608a3e82f044d8a6bfcf1007cf", size = 1477249, upload-time = "2026-10-07T19:24:23.703Z" }, - { url = "https://files.pythonhosted.org/packages/c0/62/380bbb786757134ba9d66c582458cf3e78ed47f86a14c89af3374e36ed8b/fable_library-5.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ed6797a966abf4bc13578edd77c5359673f652f9935cce3138cf151557079a", size = 1502207, upload-time = "2026-10-07T19:24:25.102Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d5/28d4292627dded733451df00bbe66065fee18b1942613f84f0522f5c8045/fable_library-5.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf14117916320aa0f7a36ea686dad83fa695304b4ec4048d5d3aca5d27032149", size = 1426673, upload-time = "2026-10-07T19:24:26.443Z" }, - { url = "https://files.pythonhosted.org/packages/0a/39/3e3d12e2f5fb9553c5ffccf79b9899ad5389d803e41617374737fda9b16a/fable_library-5.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:638aa9e6bcef1b150f4153315160a7696fd17ac227c9562146f19a7fd163a6e9", size = 1455072, upload-time = "2026-10-07T19:24:27.787Z" }, - { url = "https://files.pythonhosted.org/packages/e9/8c/62751a8b4c7f6b0ca1ddfd3b73f1c89594ad024af746029e8cd75cdb41b7/fable_library-5.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7299c910f92f27075569ba7d144388e64017256dc746b218bed927aff2a6f6df", size = 1532844, upload-time = "2026-10-07T19:24:29.4Z" }, - { url = "https://files.pythonhosted.org/packages/0d/a8/f87f8840da6dfb97539e755f142efbcd4e94baf602c4724fac149696fcf2/fable_library-5.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:068728ed7b261180a4e41fff0ae7c24987462f5691233d653cdc7c58cdb4f881", size = 1613153, upload-time = "2026-10-07T19:24:30.609Z" }, - { url = "https://files.pythonhosted.org/packages/11/b3/a9fdb2cc71ae36625154e6230dd25d725baedd3a9da66f2a35c0adb60e28/fable_library-5.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a89aadd0e9aacc2ba19efe81964fb3541f66e8714803cb4ccb6b92e12707b0e5", size = 1639779, upload-time = "2026-10-07T19:24:32.096Z" }, - { url = "https://files.pythonhosted.org/packages/5e/5c/71ca69e1ddc477f25a5f52f33fd8151c5db933de4c238bcda5795441eca6/fable_library-5.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd9bfba7d7fa6846a52a3829847bbe86818e0472ef9154a5b669892975f03bba", size = 1653037, upload-time = "2026-10-07T19:24:33.551Z" }, - { url = "https://files.pythonhosted.org/packages/4e/cf/9a77128bd39f13de243f70bde475d6a1b90d8848dc8454f517b8b2191f23/fable_library-5.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:48206f76e82b0d02498441482249274bbee3514f881a74748ad6f1189b0c82b5", size = 1424105, upload-time = "2026-10-07T19:24:34.883Z" }, - { url = "https://files.pythonhosted.org/packages/49/ea/9857d6ec641215dca309d486c13c685379db193d62140968dc660b2f7427/fable_library-5.20.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:7a04f941dc97086b8fe23e224ce26e99a589accaa82bc42720aab4e130de1577", size = 1409381, upload-time = "2026-10-07T19:24:36.251Z" }, - { url = "https://files.pythonhosted.org/packages/db/d8/1d3659f337611f906da86ca8106d7b4e2c3035e3a773ae9982c40542a78f/fable_library-5.20.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:94013816261225bd391dfaa77e50f82494a6cfe7043dedc4127cf559f75b0aff", size = 1315033, upload-time = "2026-10-07T19:24:37.618Z" }, - { url = "https://files.pythonhosted.org/packages/39/f0/db07443d6cbd77b1d732ec3aafba8e252c535db5d9d62a074999fd459aa8/fable_library-5.20.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c344eeb77ddbdef16a0c86facf5e84f3c699809bede49813c54d4b12ec967a6", size = 1353372, upload-time = "2026-10-07T19:24:38.994Z" }, - { url = "https://files.pythonhosted.org/packages/e0/57/d3a1c61653753e6a60b05a38b408a0e0084c9026c3062a6099dab1ca525c/fable_library-5.20.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:960b6cb402a82a6e782f637d02d22bed798d639122ed7c660cdce14f3d6d6edc", size = 1336325, upload-time = "2026-10-07T19:24:40.842Z" }, - { url = "https://files.pythonhosted.org/packages/62/aa/b07e52ce28350c77bcb3fc39291ae3d06a055a2acd521978ce21dce889f6/fable_library-5.20.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bb7ff803fabb4406f0dcf54a52c463f573fb303254b765c7ffacefaa23d5991", size = 1477594, upload-time = "2026-10-07T19:24:42.307Z" }, - { url = "https://files.pythonhosted.org/packages/b4/1b/ff3ece0033c8506cc2be7247a94bc48585f6486e7e77e2f09b6e477af930/fable_library-5.20.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53eea51f349411bc3f6992fd4478f19c6cee599e503bfce9d23a75d7c3952fc7", size = 1502648, upload-time = "2026-10-07T19:24:43.589Z" }, - { url = "https://files.pythonhosted.org/packages/8b/1a/17df484530538a2d838dda053fd372fcd08ca653e4935eac206ef04c9d9c/fable_library-5.20.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8b345b9ee771c8dcfeca272c4b839a1d97e18feb6b2ebd8874f45182816598", size = 1427704, upload-time = "2026-10-07T19:24:44.968Z" }, - { url = "https://files.pythonhosted.org/packages/24/5f/578cb984c9b33169a3fcf4c6a5e7ff46238ad78e1be8e3554a0b17dbad33/fable_library-5.20.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ac20bae56fc8bf433fef00712d80005a7fdd39ac0e2ba88ffb6d241b0db6975", size = 1456108, upload-time = "2026-10-07T19:24:46.353Z" }, - { url = "https://files.pythonhosted.org/packages/11/c1/155b47fed0c54f6ae0eb9d5a11b37314c6757d7f9264525cfbda95ff86df/fable_library-5.20.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:44395d698b297d713918c47d3f93ca69f40d325d5a75971920de716160886112", size = 1532947, upload-time = "2026-10-07T19:24:47.852Z" }, - { url = "https://files.pythonhosted.org/packages/26/77/8e65028860a3a485d364f2e9cb98f0a5ea5254cbdc7881f51ccfc101ec99/fable_library-5.20.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b64f282cfe0647502014179e797d0a671b8312a22e3a8f58dd453cf0de3b2ac6", size = 1613436, upload-time = "2026-10-07T19:24:49.29Z" }, - { url = "https://files.pythonhosted.org/packages/a7/91/ac73344253b251eb4adfc821f44424dde2f4264b78a13a28e5d4542a0e09/fable_library-5.20.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0aa8149589eabe2359f88cbfba0f2ea6f25111be1b3a3059f3bcc958b9ece57f", size = 1640423, upload-time = "2026-10-07T19:24:50.623Z" }, - { url = "https://files.pythonhosted.org/packages/af/58/2f3530da6b52921b6ffb97f998eab668e3f4a80bf855249c3cf397ec7673/fable_library-5.20.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c85016cd58f9b1e004cc73bdbb12c54a7243e9a390abc83739ea9ef9e50ecd93", size = 1654267, upload-time = "2026-10-07T19:24:51.951Z" }, - { url = "https://files.pythonhosted.org/packages/9f/af/d2c7907359b79027f18e783c2aea6fbe255f9cdeefdf0990caaad1cb2eae/fable_library-5.20.0-cp314-cp314-win32.whl", hash = "sha256:42d4a4f9457965ea5e6e8eec1ee9af7c6e797dd9db0acabe9384dbf6018717ee", size = 1272901, upload-time = "2026-10-07T19:24:53.256Z" }, - { url = "https://files.pythonhosted.org/packages/3f/a7/cf750a16e457a8742a60a69a75dc152d84ed32d4679e5de93afc8d2ba923/fable_library-5.20.0-cp314-cp314-win_amd64.whl", hash = "sha256:2459d92a29861daa47932d42b9a49977072ac332c134a2db43d2796720663a55", size = 1422801, upload-time = "2026-10-07T19:24:54.553Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a1/833471d38aac5125baba25713dc7223c43b0c40debebb70506a756980653/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3dac1e26946b0af60434173bb99b8ccb9be7fc74dd8616a0e54b31b3623001", size = 1357901, upload-time = "2026-10-07T19:24:55.836Z" }, - { url = "https://files.pythonhosted.org/packages/26/ab/03477b3374e3629c7c61ca00ed181ad868f74f45585a07752dfde3669cb0/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a002ade4239208b5339b64cf2077c19e08a521bd046a622d7668805ae56a6ea", size = 1336928, upload-time = "2026-10-07T19:24:57.28Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ac/fb7dfc503fb7bc78fc6bbdf27c038cb187bd922275ce8db7b12a469b96ba/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fe823224930b48023b0a1ec5e73bcdef447e75962b7b482aec0c6c7543f0b0f", size = 1484663, upload-time = "2026-10-07T19:24:58.664Z" }, - { url = "https://files.pythonhosted.org/packages/5a/14/1d8bf70266ef689982be587bc1952df05711a72feff989335a55600e86dc/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:664eb37ed462f73b962e0b4e8bd4cb74398444d0064d114f3125daf237b2f35b", size = 1508936, upload-time = "2026-10-07T19:25:00.106Z" }, - { url = "https://files.pythonhosted.org/packages/4c/b9/104ade01570d0a48ef44cfaa808f73686325256927055a5422e40d260698/fable_library-5.20.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308bafd52c146440cd009f120a85af5aa2bc9305f9ff960d89727781713b45af", size = 1433339, upload-time = "2026-10-07T19:25:01.561Z" }, - { url = "https://files.pythonhosted.org/packages/c6/41/0fb962ae656ab632d30317891d02b7c2953aed087921b53be6d46828bc7d/fable_library-5.20.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d0d11d8522474774cae83450590a0c5ed184136140241d5e25cad6863297bb", size = 1459854, upload-time = "2026-10-07T19:25:03.042Z" }, - { url = "https://files.pythonhosted.org/packages/f9/93/3efe6072aacca9e3c83548e56f3942b065d53b88d1759e5ee5e15efebcf4/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:10a362dc1f9489a1a49ad428e1df5f41d63c90ffb3e2d166881f7a392a12c40a", size = 1536798, upload-time = "2026-10-07T19:25:04.442Z" }, - { url = "https://files.pythonhosted.org/packages/1c/16/dce645517db18c5c240211fb86f4d5b25dd2bed86c44ce6b6d1fb6da6bdf/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:19276d4d62bc3f5886361562a769f0f0fdcd656defa627fcc3d237c17e0c32c1", size = 1614056, upload-time = "2026-10-07T19:25:05.982Z" }, - { url = "https://files.pythonhosted.org/packages/73/70/281155eaf45dd6a279719bc8e26dc77bafe2ccc68e8121737e77562c0580/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c4c8dfcf2e43477bda501eb70de9fe72a860f4b42552da74c7fc4428c715c55c", size = 1648575, upload-time = "2026-10-07T19:25:07.914Z" }, - { url = "https://files.pythonhosted.org/packages/34/39/900d01ccd07d8ca9e04cd7ababf61ef6eb4a726527df42edd7e47f968c2c/fable_library-5.20.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f7c284a4fcfd70aa12825a04dba618c4be0464916c93d757668303d12f6dbf90", size = 1661981, upload-time = "2026-10-07T19:25:09.661Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ab/2cd2dabe3c4e2637f059696eacc91f4a1cddee55d0881653ab0d83985ba3/fable_library-5.20.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd3db710267c896c1e4da0245bd4e225694112c04a6ce770f064f525ad15a35f", size = 1427524, upload-time = "2026-10-07T19:25:11.304Z" }, - { url = "https://files.pythonhosted.org/packages/16/c1/90d6df951464147ae4de031f2d3ca18ad004285a682f3a718bf99050c94b/fable_library-5.20.0-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d511bac7fc9e1ed78b8762acf6a2de63788a2c94fbf80509a8551df8fc8ce2b0", size = 1456400, upload-time = "2026-10-07T19:25:12.736Z" }, - { url = "https://files.pythonhosted.org/packages/be/18/b069f9e5ae8f572eccaefe1062f940dea8b7b8dbf42829efab2253875a39/fable_library-5.20.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d4fb7363204ef55694eb8cbeff37342a5c8fd3aed0bab0df802145f92faa12", size = 1433375, upload-time = "2026-10-07T19:25:14.105Z" }, - { url = "https://files.pythonhosted.org/packages/57/c8/2939792c7689edbe09fe1f4542a216199dc8049ff674bad08ce948e0b2cf/fable_library-5.20.0-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fe71c28a143120d421fd3d7cc783535dde071dfe9b6ef6e386c17280871a2c7", size = 1460078, upload-time = "2026-10-07T19:25:15.543Z" }, + { url = "https://files.pythonhosted.org/packages/07/32/f9e4c4f41e1acb85aa15dc8dabc35c6c965a3614869f625060989df9026a/fable_library-5.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fa086b4bfd8592baf00a110aabcc405774aa6302201c8c52587aee3b1b6c8c0f", size = 1409196, upload-time = "2026-10-12T16:05:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/20/1a/fac9ac9f4fbff99f02b135d35b146f55e8bb3c6df59790e86c3b431b4ca0/fable_library-5.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d82dad2f6246fa329da9da5505127afe253b9c53bed7499583d8837c9fb97fc", size = 1316361, upload-time = "2026-10-12T16:05:26.937Z" }, + { url = "https://files.pythonhosted.org/packages/1d/18/ea99aad8fb345a65ffc6d584e12cc8c7c4cf40109720da38e698d3659b67/fable_library-5.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6ef2dd4919d9bbc58a5fbd286516d432465619396e98eeca529aa0398c7dd6e", size = 1354020, upload-time = "2026-10-12T16:05:28.194Z" }, + { url = "https://files.pythonhosted.org/packages/11/cf/72dea3a384b6f11a1d886d81e7b12357412029fb91aa36663e5f12940b71/fable_library-5.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca89705988c787637658bd7f1878441f8205a47e98a9c217f8898770fde7079a", size = 1337373, upload-time = "2026-10-12T16:05:29.625Z" }, + { url = "https://files.pythonhosted.org/packages/10/18/eb6666704dc4b2954313f879f71e2b170a799bec6d03580998bc460856ee/fable_library-5.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcd96354d221586c834be0fb4acfeaa97abb8487a31e2389c117ed2c74bba6c", size = 1478332, upload-time = "2026-10-12T16:05:30.879Z" }, + { url = "https://files.pythonhosted.org/packages/f8/46/e8f266604a2e728c7f58c3b36d43e77224855488c732704d2c880040c8a9/fable_library-5.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5227adf0de0e93e5f22885806ca9749d8df62eb0c9c5a71b996e5f4f74f234ed", size = 1503670, upload-time = "2026-10-12T16:05:32.114Z" }, + { url = "https://files.pythonhosted.org/packages/68/7e/7973111f4f09d3e49814d9b377f21a53670b514718c2bbb25f384a08b44f/fable_library-5.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6171b3a6194c057d131b930da3bb370d3662c809acd33c80c308d020c8818ef", size = 1426941, upload-time = "2026-10-12T16:05:33.382Z" }, + { url = "https://files.pythonhosted.org/packages/44/0b/1d2173b2e7418e2756df6b911b77c453d0e469f526fa303ce98c07e066c1/fable_library-5.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:201843238d2d717efe70f22075eaabbd325429381613b3866dea973558cc67b8", size = 1456174, upload-time = "2026-10-12T16:05:34.633Z" }, + { url = "https://files.pythonhosted.org/packages/e7/df/9aa67c41d8256336afbe69b036c9657b818714eca2be6620439e2a7ea1ff/fable_library-5.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:77833e0a9b0e6520b4091a72cd3ef585225e1dbe27ec76a118cdfd7639f6c261", size = 1533763, upload-time = "2026-10-12T16:05:36.322Z" }, + { url = "https://files.pythonhosted.org/packages/70/cd/8f90d1378c1cb0dbd22e0778c15ff2f3ffdc7dc9a88e90a9ad468298b571/fable_library-5.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9c3671e0eacf190beacfe39ea9897c6d47e8a91eaf76086c8f8960759cc8b0fa", size = 1614064, upload-time = "2026-10-12T16:05:37.788Z" }, + { url = "https://files.pythonhosted.org/packages/81/94/0a33974f22ff750f1d5843433557f368c4ba9c45f5b23436888a6994ac16/fable_library-5.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3340c1b9ca1933a391c1f253cc1c4ead4ae93997b821d806efea24d6d20ceb60", size = 1638830, upload-time = "2026-10-12T16:05:39.245Z" }, + { url = "https://files.pythonhosted.org/packages/54/23/f66eb2a97c950ba29ffb3b717df032ae2d212066ec4fec398f4c2d7e5412/fable_library-5.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e387677b4f4031c27c3b6c1d9a986ee9ab2a1494c536befb42c4b0916cf03f95", size = 1654175, upload-time = "2026-10-12T16:05:40.569Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/ce8ed29682c871eeb495a0a344b2dc86e41527ce989092c5567ac90f05dd/fable_library-5.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:175451f79f51434e8e2f7d2700133c064e0e09267039a7a73ccace0d216c8f9b", size = 1421698, upload-time = "2026-10-12T16:05:41.846Z" }, + { url = "https://files.pythonhosted.org/packages/e9/73/89532018b966f6e92e8372a891bb6fa6b748527e2d82a90c94501f3cb820/fable_library-5.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ce889002195fce4c1e169320d166ee360690cd0decfd16e9f21168c48d47ef0e", size = 1409747, upload-time = "2026-10-12T16:05:43.225Z" }, + { url = "https://files.pythonhosted.org/packages/52/f1/f7888ac08d88ad859524d8394ba69fb5bd2ac6ecabad978f94a23b2aecba/fable_library-5.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:32dd6c6c676a216248f8e7440fbf6fadec4c9c0ce6436bc16077ab5bf4c08469", size = 1316480, upload-time = "2026-10-12T16:05:44.467Z" }, + { url = "https://files.pythonhosted.org/packages/fb/86/95f574165c5cd8704998093a5f077a119e580c4f0b7207c1e858eb3befc1/fable_library-5.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84b33763763816318e9a6d54be35a2ddcab9d80908715a3219f61dc6ed92b05c", size = 1354773, upload-time = "2026-10-12T16:05:46.03Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a0/2a3fb85264f4f9a4bce66e85c8994cae02389dae1f9d3fbccd0e2c237c67/fable_library-5.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5471efd64f499e2f4682852d9e4f294f2b4af13e0dddbb017e188afe4a8afdd6", size = 1337724, upload-time = "2026-10-12T16:05:47.352Z" }, + { url = "https://files.pythonhosted.org/packages/ba/87/b81a972f55a4234a07c2f3e0f212dbce0af4a090b1fae87061ed11a6ca89/fable_library-5.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ddfd574d242b3e650c5fa2855208f6a82f2730ea36098b320a5228123522dc2", size = 1478645, upload-time = "2026-10-12T16:05:48.776Z" }, + { url = "https://files.pythonhosted.org/packages/b6/fe/e98b8b3d41bbaba32e40dfd3c1c2bb59f32183d66f95e03a1230a5fb652b/fable_library-5.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b7a89916d1276dd2728acfcb69572a8914f566bcf874bd7acdd32c608a3c49a", size = 1503606, upload-time = "2026-10-12T16:05:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/be/7d/f694dbd7ff767a077d592e1778c945c892de6d858b6bcbf6c5fab4b35cf6/fable_library-5.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f615f053fd537ba1d9e3e6fac780f7bf245db5c197b6d8928a9c0833c1f6dd", size = 1428069, upload-time = "2026-10-12T16:05:51.251Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b4/ff34fc29d48785aa575a35353ba0b762965e1fd32296fc279f04ec86a504/fable_library-5.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a13b658a31eb4f58cef6cfa3537451781ccd7e2c85d963a3e419d1f95d56eba1", size = 1456468, upload-time = "2026-10-12T16:05:52.593Z" }, + { url = "https://files.pythonhosted.org/packages/c1/af/c9e024d7f0a9cfbb57fb34821d8b320cce392833a2cc7f6b78cea49a9e2c/fable_library-5.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a2c08401ba3613f4cabe37620cc956808a8690327deea2111ca488280db78a0", size = 1534241, upload-time = "2026-10-12T16:05:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c1/3fe19162f3adac33b4de22774e082f2ff9865244ef9a46627f8225231957/fable_library-5.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:74465862f73a61964aee48308d9189e841aeeac9eeaa24305cbad28509332992", size = 1614550, upload-time = "2026-10-12T16:05:55.456Z" }, + { url = "https://files.pythonhosted.org/packages/88/96/efde4a8e340d6f3a1039748418557443067b5b749548082a266e674428d0/fable_library-5.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3713ddf30022993e19ae8c8d0269b0f300c07aad6f6aecbe72fb51555cb0df20", size = 1641174, upload-time = "2026-10-12T16:05:56.77Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c3/c3e7ca2c4c8d9dc43c8f55ba955da206ec695df1d5d2a48eadb1432b39ff/fable_library-5.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e38f27ca471689670c48e2d3c34902cfa2890666e58d05efdefe0ce888f06dea", size = 1654432, upload-time = "2026-10-12T16:05:58.071Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1e/9519abd276bf5a95b07d3d1c471d8b53487c0a38fcfa477ce328f6f1bdec/fable_library-5.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:06bd68677d743c079d1c44f27e10dc3b00478e8ede6cbc3f834c540ba70f3dee", size = 1425503, upload-time = "2026-10-12T16:05:59.488Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/7cff9237540cbed6856a08f21cbe802ad137bb1a58e61b3e3f10d6f1b35a/fable_library-5.20.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:60c0d2c2fd42a593fde24a947c83bef619d98c4188760c4029e64a57b380db4b", size = 1410777, upload-time = "2026-10-12T16:06:00.95Z" }, + { url = "https://files.pythonhosted.org/packages/69/01/2bea08f4cfac231dcc2d27c59d3802eae9ce8a594e4f23a5af767754f1f6/fable_library-5.20.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2c118fa3f2f44fae1134561748c68e39388d535cd08caeac3d089504551df8fa", size = 1316428, upload-time = "2026-10-12T16:06:02.259Z" }, + { url = "https://files.pythonhosted.org/packages/d6/cb/a2538d41e84ee6f86f82513ad4551808204847aeb86ef6f407ea5c709f15/fable_library-5.20.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d04be150ab61ad245121a39fdb7fb89dc8da42b934cfd1becad7f7ad41b16e6", size = 1354773, upload-time = "2026-10-12T16:06:03.952Z" }, + { url = "https://files.pythonhosted.org/packages/d8/29/d4ea3159ff787d07830de6d7dd5599a713d4485c03d9bc6832b7dbbbf3b8/fable_library-5.20.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d462f95ea087e55c2fabd01d5b99bcadfdad958c227cf43543c88401a817e78", size = 1337722, upload-time = "2026-10-12T16:06:05.779Z" }, + { url = "https://files.pythonhosted.org/packages/a4/01/0bafd26490fe315e4e1c950babef8b7acef031aa698d7427b29bbc793532/fable_library-5.20.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03cac17ea9fa6f07502177d67e0c909484d87e6da04a2f80556c545b5bf518c1", size = 1478990, upload-time = "2026-10-12T16:06:07.144Z" }, + { url = "https://files.pythonhosted.org/packages/26/9e/6e645ad5cbf76526ddd7dce6b90a4debff6941c509b36112c095e6d8a9ba/fable_library-5.20.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:904e865b6cec53d326a295262c0969c29208c9a6a39a43f1525ead8568817f31", size = 1504045, upload-time = "2026-10-12T16:06:08.596Z" }, + { url = "https://files.pythonhosted.org/packages/48/b9/efcb0f41c5167318a8a838529093dfa1f59f50af898aed08c720ce0858ac/fable_library-5.20.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435257db36425a91f28bde8d401874aca3e4ce7fc2b8760ecc19edd22c1b52e", size = 1429100, upload-time = "2026-10-12T16:06:10.284Z" }, + { url = "https://files.pythonhosted.org/packages/31/37/74e67ce8479d1e1bd7228c75df8feea3389ad01597876aed64d9dfc8ae77/fable_library-5.20.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f7864b9ee2b216a3893a703bb9777da33abb34f3a512fe457bc4cd0e725730f1", size = 1457506, upload-time = "2026-10-12T16:06:11.641Z" }, + { url = "https://files.pythonhosted.org/packages/a8/54/285d1f195b79990f07d8a1559276520297b4395c7aca8cccd2c55b88feaa/fable_library-5.20.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:82410e233c51de01d9b222b1f7d06146f0da6e8754033c2b42dc4982a6124d71", size = 1534344, upload-time = "2026-10-12T16:06:13.849Z" }, + { url = "https://files.pythonhosted.org/packages/47/e5/6fcf0460398a552eddc6915dfd33c6a15a291a647998b968d970fe8a1ecc/fable_library-5.20.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:52c299643d1121605a7b4e8285b46ba573fb544c2c9a476c069a2ae390cd2b9c", size = 1614830, upload-time = "2026-10-12T16:06:15.681Z" }, + { url = "https://files.pythonhosted.org/packages/69/81/7746f6b5c050d2a808b6993d0474b61c18df39ba694546776b9b8ecd39b0/fable_library-5.20.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:68059d89f84e125c6f02dda964c4acc648a95f6dda69cd3cbde169e8f9abec49", size = 1641819, upload-time = "2026-10-12T16:06:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/813705547e8293f1364d9094919c589493fd349b64b88a9a2f5d78874079/fable_library-5.20.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9721005dc92b09a8548b931fc269bb2ee41218871bea9efc4373fd29814ceebc", size = 1655664, upload-time = "2026-10-12T16:06:18.571Z" }, + { url = "https://files.pythonhosted.org/packages/23/14/6ea45cc89dc414adca00dc887e906ad016d600f8a905f353e2b0495e0461/fable_library-5.20.1-cp314-cp314-win_amd64.whl", hash = "sha256:c47c5ab9a7e74836dd34be73fa45c846b282b52f626c8d0ce5b28827eba00318", size = 1424197, upload-time = "2026-10-12T16:06:20.433Z" }, + { url = "https://files.pythonhosted.org/packages/03/ee/f72eec3254e5dfe73d87b20465d1d7eba51d287f4988d7f4427afff93eaf/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7caeabccff136be7f269d962e6026e71608321cb7725cce9891731001c5214b2", size = 1359304, upload-time = "2026-10-12T16:06:21.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b7/d7adff4b25e19789f290c73e365baba9c73fb58fbd06c3ec882f99378a51/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ce0aefcb9281e25fa2817db0d17dcd2d59cf442b93e61581fe75e0f0f5b8eaf", size = 1338322, upload-time = "2026-10-12T16:06:23.248Z" }, + { url = "https://files.pythonhosted.org/packages/54/7c/90d8b78c7cc6506ca51e45ab9eb316d2c6945f2622056c70de73defb8ef6/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:100c984350ce97012ec270ccad330cac3b8f1c968ca4ff9ebb99cb0ed00834c7", size = 1486060, upload-time = "2026-10-12T16:06:24.768Z" }, + { url = "https://files.pythonhosted.org/packages/17/95/d658fa9c82a9d3890f932b99db198fe914f7792caa6912f8ac3e432bdb44/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:367ecc88c88c969a4f1a3fd368a21502ecc1c8e55b61053cba72c07d6a2230b4", size = 1510336, upload-time = "2026-10-12T16:06:26.198Z" }, + { url = "https://files.pythonhosted.org/packages/4c/5d/974d6b577430fdd47808946273b49ef67556d6abd5d6c07a8ed9047b9ce0/fable_library-5.20.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50e006dee9acc3dd6a8081bf8b728aaaaa98fcd7ea1c612a6d5424ce65f6c7f", size = 1434735, upload-time = "2026-10-12T16:06:27.575Z" }, + { url = "https://files.pythonhosted.org/packages/51/53/9d028ae51d02ee841e1d48865c596cb5bdf2b85528b3710f3aaaae0f38b6/fable_library-5.20.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:091d35c3c6056ad8a4f57a88dd08b354dc647c10d32fa3adc97ec50fca43b8e7", size = 1461251, upload-time = "2026-10-12T16:06:29.002Z" }, + { url = "https://files.pythonhosted.org/packages/c9/95/73c4b844f684dc1b748dbef08d5e91fb76e842345c63eba2e8b990d220e3/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b737c093ac65d94d80bf8e388bc6763a94b3225c2f660ed5c3bf33536fc231fd", size = 1538192, upload-time = "2026-10-12T16:06:30.411Z" }, + { url = "https://files.pythonhosted.org/packages/ed/be/f7842e1ec4ac111cf56d5ff1fdac9c5c9f32870b67632b10e24c3a5839c1/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:16a583b15edd52fb832082ed770ec9424821518acdd526734b600d9a7c4ff935", size = 1615451, upload-time = "2026-10-12T16:06:32.062Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9d/a96f74e940c822f39c5089069b25e561f781fde6f8afa9af59b7361a15dc/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:aa473a39b8991468f9c941890bfc7f8718554ab2f9524694458be35c07811ad4", size = 1649972, upload-time = "2026-10-12T16:06:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/36/e6/a9b3cc828fe3743aead186ecd5ea1dfeb7c13cf27992242fb49badcd2233/fable_library-5.20.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1322aae86c06cc6683e1a680df86b12a35008c0615e8d9aaeb0d829367e55d96", size = 1663379, upload-time = "2026-10-12T16:06:35.266Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/b158490fc78c47d7fbb48167b4ec16fec0532155edd23f9d5fed5dad4967/fable_library-5.20.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:debea3a58a130356a464e60a8ab4cfa8a716d9f6fb3e22b9dcfba0a6ba564700", size = 1428920, upload-time = "2026-10-12T16:06:36.659Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d3/02221691eccd009f09c88a8df04ba6b699db8f9241c2d0c3be831ce51f8f/fable_library-5.20.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dc6c132754c946598c1a2fa09cf37e3b0911cda9dff20b012ac3591b07e11c3", size = 1457797, upload-time = "2026-10-12T16:06:38.096Z" }, + { url = "https://files.pythonhosted.org/packages/26/71/32fdb9a49d495cb6e767d0b93550f8f9aed554721dd62417e68e96c2d525/fable_library-5.20.1-cp315-cp315-win32.whl", hash = "sha256:1532269dbb3431fbb2c3f16138c0c9a1251db152ec3252b7a787918c71effc6e", size = 1274404, upload-time = "2026-10-12T16:06:39.928Z" }, + { url = "https://files.pythonhosted.org/packages/6f/06/8c022bd616fd3fda9c1b4331dc9006f29580407141483ae7ae9de0b16a05/fable_library-5.20.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a788c7a89d667ef06fbfa9921b97f3ac928e9569d946d8690b9b55a72f1d122", size = 1434773, upload-time = "2026-10-12T16:06:41.345Z" }, + { url = "https://files.pythonhosted.org/packages/54/cf/bc229fc42656ea9c82ab602e3cc78d39fb90bf98e9ee63f1637fcb0c8bd9/fable_library-5.20.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c23ea79b2a5d0a4dd8ff487c88e2ddbada162a3a2d15a3f9b03098cb7f5dbf76", size = 1461475, upload-time = "2026-10-12T16:06:43.112Z" }, ]