From fe3c028763e7d08078a31647620192944db19722 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:06:20 +0000 Subject: [PATCH 01/13] Migrate package configuration and CI to Spago --- .github/workflows/ci.yml | 37 +++++++++++++++++++-------------- .gitignore | 4 +++- .tidyrc.json | 10 +++++++++ CHANGELOG.md | 9 ++------ benchmark/spago.yaml | 27 ++++++++++++++++++++++++ bower.json | 45 ---------------------------------------- package.json | 20 +++++++++++------- spago.yaml | 36 ++++++++++++++++++++++++++++++++ 8 files changed, 111 insertions(+), 77 deletions(-) create mode 100644 .tidyrc.json create mode 100644 benchmark/spago.yaml delete mode 100644 bower.json create mode 100644 spago.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c69237a..f7d60ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,30 +6,35 @@ on: pull_request: branches: [master] +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - - uses: purescript-contrib/setup-purescript@main - with: - purescript: "unstable" - - - uses: actions/setup-node@v2 + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: - node-version: "14.x" + node-version: "24" - name: Install dependencies - run: | - npm install -g bower - npm install - bower install --production + run: npm install - name: Build source - run: npm run-script build + run: npm run build - name: Run tests - run: | - bower install - npm run-script test --if-present + run: npm test + + - name: Build benchmarks + run: npm run build:benchmark + + - name: Run benchmarks + run: npm run test:benchmark + + - name: Lint + run: npm run lint + + - name: Check formatting + run: npm run format:check diff --git a/.gitignore b/.gitignore index a6d3c15..043a700 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ /.* !/.gitignore !/.github/ +!/.tidyrc.json /bower_components/ /node_modules/ /output/ -package-lock.json +/package-lock.json +/spago.lock /tmp/ diff --git a/.tidyrc.json b/.tidyrc.json new file mode 100644 index 0000000..9e39cf1 --- /dev/null +++ b/.tidyrc.json @@ -0,0 +1,10 @@ +{ + "importSort": "ide", + "importWrap": "source", + "indent": 2, + "operatorsFile": null, + "ribbon": 1, + "typeArrowPlacement": "first", + "unicode": "never", + "width": null +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c198ea..29c8736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,10 @@ Notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] - -Breaking changes: - -New features: - -Bugfixes: +## [v7.1.1](https://github.com/purescript/purescript-free/releases/tag/v7.1.1) Other improvements: +- Migrate from Bower/Pulp to Spago, update CI and formatting, and restore the benchmark runner. ## [v7.1.0](https://github.com/purescript/purescript-free/releases/tag/v7.1.0) - 2023-09-05 diff --git a/benchmark/spago.yaml b/benchmark/spago.yaml new file mode 100644 index 0000000..be4cc52 --- /dev/null +++ b/benchmark/spago.yaml @@ -0,0 +1,27 @@ +package: + name: free-benchmark + build: + strict: true + pedanticPackages: true + run: + main: Benchmark.Main + dependencies: + - arrays: ">=7.0.0 <8.0.0" + - catenable-lists: ">=7.0.0 <8.0.0" + - control: ">=6.0.0 <7.0.0" + - effect: ">=4.0.0 <5.0.0" + - either: ">=6.0.0 <7.0.0" + - exists: ">=6.0.0 <7.0.0" + - foldable-traversable: ">=6.0.0 <7.0.0" + - free: "*" + - functors: ">=5.0.0 <6.0.0" + - identity: ">=6.0.0 <7.0.0" + - lazy: ">=6.0.0 <7.0.0" + - maybe: ">=6.0.0 <7.0.0" + - newtype: ">=5.0.0 <6.0.0" + - partial: ">=4.0.0 <5.0.0" + - prelude: ">=6.0.0 <7.0.0" + - tailrec: ">=6.0.0 <7.0.0" + - transformers: ">=6.0.0 <7.0.0" + - tuples: ">=7.0.0 <8.0.0" + - unsafe-coerce: ">=6.0.0 <7.0.0" diff --git a/bower.json b/bower.json deleted file mode 100644 index 08a9916..0000000 --- a/bower.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "purescript-free", - "homepage": "https://github.com/purescript/purescript-free", - "authors": [ - "Eric Thul ", - "Brian McKenna ", - "John A. De Goes (http://degoes.net)", - "Gary Burgess ", - "Phil Freeman " - ], - "license": "BSD-3-Clause", - "repository": { - "type": "git", - "url": "https://github.com/purescript/purescript-free.git" - }, - "ignore": [ - "**/.*", - "bower_components", - "node_modules", - "output", - "test", - "bower.json", - "package.json" - ], - "dependencies": { - "purescript-catenable-lists": "^7.0.0", - "purescript-control": "^6.0.0", - "purescript-distributive": "^6.0.0", - "purescript-either": "^6.0.0", - "purescript-exists": "^6.0.0", - "purescript-foldable-traversable": "^6.0.0", - "purescript-invariant": "^6.0.0", - "purescript-lazy": "^6.0.0", - "purescript-maybe": "^6.0.0", - "purescript-prelude": "^6.0.0", - "purescript-tailrec": "^6.0.0", - "purescript-transformers": "^6.0.0", - "purescript-tuples": "^7.0.0", - "purescript-unsafe-coerce": "^6.0.0" - }, - "devDependencies": { - "purescript-console": "^6.0.0", - "purescript-functors": "^5.0.0" - } -} diff --git a/package.json b/package.json index d28ee5d..ac7c4fe 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,20 @@ { "private": true, "scripts": { - "clean": "rimraf output && rimraf .pulp-cache", - "build": "pulp build -- --censor-lib --strict", - "build:benchmark": "pulp build --main 'Benchmark.Main' --include './benchmark' -- --censor-lib --strict", - "test": "pulp test", - "test:benchmark": "node -e \"require('./output/Benchmark.Main').main()\"" + "build": "spago build -p free", + "build:benchmark": "spago build -p free-benchmark", + "test": "spago test -p free", + "test:benchmark": "spago run -p free-benchmark", + "lint": "oxlint --deny-warnings benchmark/src", + "format": "purs-tidy format-in-place src test benchmark/src && oxfmt --write .", + "format:check": "purs-tidy check src test benchmark/src && oxfmt --check ." }, "devDependencies": { "benchmark": "^2.1.4", - "pulp": "16.0.0-0", - "purescript-psa": "^0.8.2", - "rimraf": "^3.0.2" + "oxfmt": "^0.73.0", + "oxlint": "^1.88.0", + "purescript": "^0.15.16", + "purs-tidy": "^0.11.1", + "spago": "^1.0.5" } } diff --git a/spago.yaml b/spago.yaml new file mode 100644 index 0000000..738ec45 --- /dev/null +++ b/spago.yaml @@ -0,0 +1,36 @@ +package: + name: free + description: Free monad, Cofree comonad, Yoneda and Coyoneda functors, and the Trampoline monad + build: + strict: true + pedanticPackages: true + publish: + version: 7.1.1 + license: BSD-3-Clause + location: + githubOwner: purescript + githubRepo: purescript-free + dependencies: + - catenable-lists: ">=7.0.0 <8.0.0" + - control: ">=6.0.0 <7.0.0" + - distributive: ">=6.0.0 <7.0.0" + - either: ">=6.0.0 <7.0.0" + - exists: ">=6.0.0 <7.0.0" + - foldable-traversable: ">=6.0.0 <7.0.0" + - invariant: ">=6.0.0 <7.0.0" + - lazy: ">=6.0.0 <7.0.0" + - maybe: ">=6.0.0 <7.0.0" + - prelude: ">=6.0.0 <7.0.0" + - tailrec: ">=6.0.0 <7.0.0" + - transformers: ">=6.0.0 <7.0.0" + - tuples: ">=7.0.0 <8.0.0" + - unsafe-coerce: ">=6.0.0 <7.0.0" + test: + main: Test.Main + strict: true + pedanticPackages: true + dependencies: + - console: ">=6.0.0 <7.0.0" + - effect: ">=4.0.0 <5.0.0" + - functors: ">=5.0.0 <6.0.0" +workspace: {} From 7175af0cc05023c9a9977f4222456de62252de32 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:07:57 +0000 Subject: [PATCH 02/13] Move benchmark sources into a workspace package and restore the runner --- README.md | 7 ++++ .../{ => src}/Benchmark/Free0df59c5.purs | 4 +-- .../{ => src}/Benchmark/Freef686f5f.purs | 0 benchmark/src/Benchmark/Harness.js | 36 +++++++++++++++++++ benchmark/src/Benchmark/Harness.purs | 30 ++++++++++++++++ benchmark/{ => src}/Benchmark/Main.purs | 13 ++++--- .../Benchmark/Trampoline0df59c5.purs | 2 +- .../Benchmark/Trampolinef686f5f.purs | 0 8 files changed, 82 insertions(+), 10 deletions(-) rename benchmark/{ => src}/Benchmark/Free0df59c5.purs (98%) rename benchmark/{ => src}/Benchmark/Freef686f5f.purs (100%) create mode 100644 benchmark/src/Benchmark/Harness.js create mode 100644 benchmark/src/Benchmark/Harness.purs rename benchmark/{ => src}/Benchmark/Main.purs (94%) rename benchmark/{ => src}/Benchmark/Trampoline0df59c5.purs (98%) rename benchmark/{ => src}/Benchmark/Trampolinef686f5f.purs (100%) diff --git a/README.md b/README.md index 7ef0fe4..b19211d 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,13 @@ Module documentation is [published on Pursuit](http://pursuit.purescript.org/pac ## Benchmarks +Run `npm run build:benchmark` and `npm run test:benchmark` to run all four workloads. +Results are written to `tmp/`. The runner uses Benchmark.js defaults and times a +batch of inputs, including both bind construction and trampoline execution, as +the original Benchotron harness did. Its deterministic zero-array inputs and +historical implementations are unchanged; measurements on the current compiler +and Node runtime are not directly comparable to the historical results below. + The following benchmarks compare the implementation at `v5.2.0` (commit f686f5fc07766f3ca9abc83b47b6ad3da326759a) with the implementation at `v0.6.1` (commit 0df59c5d459fed983131856886fc3a4b43234f1f), which used the `Gosub` technique to defer monadic binds. ![left-bind-small](benchmark/left-bind-small.png) diff --git a/benchmark/Benchmark/Free0df59c5.purs b/benchmark/src/Benchmark/Free0df59c5.purs similarity index 98% rename from benchmark/Benchmark/Free0df59c5.purs rename to benchmark/src/Benchmark/Free0df59c5.purs index 553089a..89569a7 100644 --- a/benchmark/Benchmark/Free0df59c5.purs +++ b/benchmark/src/Benchmark/Free0df59c5.purs @@ -33,7 +33,7 @@ import Data.Exists (Exists, mkExists, runExists) import Data.Functor.Coproduct.Inject (class Inject, inj) import Data.Identity (Identity(..)) import Data.Newtype (unwrap) -import Partial.Unsafe (unsafePartialBecause) +import Partial.Unsafe (unsafePartial) type Natural f g = forall a. f a -> g a @@ -157,7 +157,7 @@ resume :: forall f a. Functor f => Free f a -> Either (f (Free f a)) a resume f = case f of Pure x -> Right x Free x -> Left x - g -> unsafePartialBecause "Existing implementation." case resumeGosub g of + g -> unsafePartial case resumeGosub g of Left l -> Left l Right r -> resume r where diff --git a/benchmark/Benchmark/Freef686f5f.purs b/benchmark/src/Benchmark/Freef686f5f.purs similarity index 100% rename from benchmark/Benchmark/Freef686f5f.purs rename to benchmark/src/Benchmark/Freef686f5f.purs diff --git a/benchmark/src/Benchmark/Harness.js b/benchmark/src/Benchmark/Harness.js new file mode 100644 index 0000000..f6ed9d9 --- /dev/null +++ b/benchmark/src/Benchmark/Harness.js @@ -0,0 +1,36 @@ +import Benchmark from "benchmark"; +import { mkdirSync, writeFileSync } from "node:fs"; + +// Benchotron disabled decompilation because generated PureScript functions +// close over imported modules. Keep its Benchmark.js defaults and batch timing. +export const runSuiteImpl = map => suite => () => { + Benchmark.support.decompilation = false; + mkdirSync("tmp", { recursive: true }); + for (const benchmark of suite) { + const series = benchmark.functions.map(fn => ({ name: fn.name, results: [] })); + for (const size of benchmark.sizes) { + console.error(`${benchmark.slug}: n=${size}`); + // Generate the same shared batch before measuring any competitor. + const inputs = Array.from({ length: benchmark.inputsPerSize }, () => benchmark.gen(size)); + for (let i = 0; i < benchmark.functions.length; i++) { + const fn = benchmark.functions[i]; + const batch = map(fn.fn); + const measured = new Benchmark(() => batch(inputs)); + measured.run(); + if (measured.error) { + throw new Error(`While running ${fn.name} at n=${size}: ${measured.error}`); + } + series[i].results.push({ size, stats: measured.stats }); + } + } + const result = { + slug: benchmark.slug, + title: benchmark.title, + sizeInterpretation: benchmark.sizeInterpretation, + series + }; + const path = `tmp/${benchmark.slug}.json`; + writeFileSync(path, JSON.stringify(result)); + console.error(`Results written to ${path}`); + } +}; diff --git a/benchmark/src/Benchmark/Harness.purs b/benchmark/src/Benchmark/Harness.purs new file mode 100644 index 0000000..2a92e90 --- /dev/null +++ b/benchmark/src/Benchmark/Harness.purs @@ -0,0 +1,30 @@ +module Benchmark.Harness (Benchmark, benchFn, mkBenchmark, runSuite) where + +import Prelude + +import Effect (Effect) + +type Benchmark = + { slug :: String + , title :: String + , sizes :: Array Int + , sizeInterpretation :: String + , inputsPerSize :: Int + , gen :: Int -> Array Number + , functions :: Array { name :: String, fn :: Array Number -> Number } + } + +mkBenchmark :: Benchmark -> Benchmark +mkBenchmark = identity + +benchFn :: String -> (Array Number -> Number) -> { name :: String, fn :: Array Number -> Number } +benchFn name fn = { name, fn } + +-- Keep PureScript's batch map inside the timed operation, as in Benchotron. +runSuite :: Array Benchmark -> Effect Unit +runSuite = runSuiteImpl map + +foreign import runSuiteImpl + :: ((Array Number -> Number) -> Array (Array Number) -> Array Number) + -> Array Benchmark + -> Effect Unit diff --git a/benchmark/Benchmark/Main.purs b/benchmark/src/Benchmark/Main.purs similarity index 94% rename from benchmark/Benchmark/Main.purs rename to benchmark/src/Benchmark/Main.purs index 207faec..450365f 100644 --- a/benchmark/Benchmark/Main.purs +++ b/benchmark/src/Benchmark/Main.purs @@ -3,13 +3,12 @@ module Benchmark.Main (main) where import Prelude import Benchmark.Freef686f5f as Freef686f5f +import Benchmark.Harness (Benchmark, benchFn, mkBenchmark, runSuite) import Benchmark.Trampoline0df59c5 as Trampoline0df59c5 import Benchmark.Trampolinef686f5f as Trampolinef686f5f -import Benchotron.Core (Benchmark, benchFn, mkBenchmark) -import Benchotron.UI.Console (runSuite) +import Data.Array (replicate) import Data.Foldable (foldl) import Effect (Effect) -import Test.QuickCheck.Gen (vectorOf) main :: Effect Unit main = @@ -28,7 +27,7 @@ leftBindSmallBenchmark = , sizes: [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000] , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize - , gen: \n -> vectorOf n (pure 0.0) + , gen: \n -> replicate n 0.0 , functions: [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) @@ -58,7 +57,7 @@ rightBindSmallBenchmark = , sizes: [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000] , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize - , gen: \n -> vectorOf n (pure 0.0) + , gen: \n -> replicate n 0.0 , functions: [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) @@ -88,7 +87,7 @@ leftBindLargeBenchmark = , sizes: [1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize - , gen: \n -> vectorOf n (pure 0.0) + , gen: \n -> replicate n 0.0 , functions: [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) -- Disabled due to stack overflow @@ -119,7 +118,7 @@ rightBindLargeBenchmark = , sizes: [1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize - , gen: \n -> vectorOf n (pure 0.0) + , gen: \n -> replicate n 0.0 , functions: [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) diff --git a/benchmark/Benchmark/Trampoline0df59c5.purs b/benchmark/src/Benchmark/Trampoline0df59c5.purs similarity index 98% rename from benchmark/Benchmark/Trampoline0df59c5.purs rename to benchmark/src/Benchmark/Trampoline0df59c5.purs index 0bc2d48..dfeac53 100644 --- a/benchmark/Benchmark/Trampoline0df59c5.purs +++ b/benchmark/src/Benchmark/Trampoline0df59c5.purs @@ -3,7 +3,7 @@ -- | monadic computations. module Benchmark.Trampoline0df59c5 - ( Trampoline() + ( Trampoline , done , suspend , delay' diff --git a/benchmark/Benchmark/Trampolinef686f5f.purs b/benchmark/src/Benchmark/Trampolinef686f5f.purs similarity index 100% rename from benchmark/Benchmark/Trampolinef686f5f.purs rename to benchmark/src/Benchmark/Trampolinef686f5f.purs From b5e8e58cab261c6b66b50865149c6a10dae73ce7 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:09:16 +0000 Subject: [PATCH 03/13] Normalize Spago configuration and remove unused benchmark dependency --- benchmark/spago.yaml | 1 - spago.yaml | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/spago.yaml b/benchmark/spago.yaml index be4cc52..9f46454 100644 --- a/benchmark/spago.yaml +++ b/benchmark/spago.yaml @@ -8,7 +8,6 @@ package: dependencies: - arrays: ">=7.0.0 <8.0.0" - catenable-lists: ">=7.0.0 <8.0.0" - - control: ">=6.0.0 <7.0.0" - effect: ">=4.0.0 <5.0.0" - either: ">=6.0.0 <7.0.0" - exists: ">=6.0.0 <7.0.0" diff --git a/spago.yaml b/spago.yaml index 738ec45..e87874e 100644 --- a/spago.yaml +++ b/spago.yaml @@ -1,6 +1,7 @@ package: name: free - description: Free monad, Cofree comonad, Yoneda and Coyoneda functors, and the Trampoline monad + description: Free monad, Cofree comonad, Yoneda and Coyoneda functors, and the + Trampoline monad build: strict: true pedanticPackages: true From 5f108c03955c2b447dc08a936f6142b763e604ce Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:09:16 +0000 Subject: [PATCH 04/13] Keep batch mapping entirely within benchmark timing --- benchmark/src/Benchmark/Harness.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmark/src/Benchmark/Harness.js b/benchmark/src/Benchmark/Harness.js index f6ed9d9..1948812 100644 --- a/benchmark/src/Benchmark/Harness.js +++ b/benchmark/src/Benchmark/Harness.js @@ -14,8 +14,7 @@ export const runSuiteImpl = map => suite => () => { const inputs = Array.from({ length: benchmark.inputsPerSize }, () => benchmark.gen(size)); for (let i = 0; i < benchmark.functions.length; i++) { const fn = benchmark.functions[i]; - const batch = map(fn.fn); - const measured = new Benchmark(() => batch(inputs)); + const measured = new Benchmark(() => map(fn.fn)(inputs)); measured.run(); if (measured.error) { throw new Error(`While running ${fn.name} at n=${size}: ${measured.error}`); From 6aca8d2a989736110e0ce0dd89e7982793d071a8 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:09:16 +0000 Subject: [PATCH 05/13] Resolve benchmark kind and unused-binding warnings --- benchmark/src/Benchmark/Free0df59c5.purs | 6 ++++-- benchmark/src/Benchmark/Main.purs | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/benchmark/src/Benchmark/Free0df59c5.purs b/benchmark/src/Benchmark/Free0df59c5.purs index 89569a7..56a9ea3 100644 --- a/benchmark/src/Benchmark/Free0df59c5.purs +++ b/benchmark/src/Benchmark/Free0df59c5.purs @@ -35,6 +35,7 @@ import Data.Identity (Identity(..)) import Data.Newtype (unwrap) import Partial.Unsafe (unsafePartial) +type Natural :: forall k. (k -> Type) -> (k -> Type) -> Type type Natural f g = forall a. f a -> g a newtype GosubF f a i = GosubF { a :: Unit -> Free f i, f :: i -> Free f a } @@ -57,6 +58,7 @@ type FreeC f = Free (Coyoneda f) -- | actions described by a generating functor into a monad. -- | -- | The canonical instance of `MonadFree f` is `Free f`. +class MonadFree :: forall k. (Type -> Type) -> (k -> Type) -> Constraint class MonadFree f m where wrap :: forall a. f (m a) -> m a @@ -71,8 +73,8 @@ instance applicativeFree :: Functor f => Applicative (Free f) where pure = Pure instance bindFree :: Functor f => Bind (Free f) where - bind (Gosub g) k = runExists (\(GosubF v) -> gosub v.a (\x -> gosub (\unit -> v.f x) k)) g - bind a k = gosub (\unit -> a) k + bind (Gosub g) k = runExists (\(GosubF v) -> gosub v.a (\x -> gosub (\_ -> v.f x) k)) g + bind a k = gosub (\_ -> a) k instance monadFree :: Functor f => Monad (Free f) diff --git a/benchmark/src/Benchmark/Main.purs b/benchmark/src/Benchmark/Main.purs index 450365f..ec72b25 100644 --- a/benchmark/src/Benchmark/Main.purs +++ b/benchmark/src/Benchmark/Main.purs @@ -91,7 +91,7 @@ leftBindLargeBenchmark = , functions: [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) -- Disabled due to stack overflow - -- , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) + -- , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< _bindsT) ] } where @@ -104,8 +104,8 @@ leftBindLargeBenchmark = gen :: forall a. a -> Trampolinef686f5f.Trampoline a gen = Freef686f5f.suspendF <<< Trampolinef686f5f.done - bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number - bindsT as = foldl (\b a -> b >>= const (genT a)) (genT 0.0) as + _bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number + _bindsT as = foldl (\b a -> b >>= const (genT a)) (genT 0.0) as genT :: forall a. a -> Trampoline0df59c5.Trampoline a genT = Trampoline0df59c5.suspend <<< Trampoline0df59c5.done From e98206073c5c5df0e1e5ce8f9ca02cde6f83e5eb Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:10:31 +0000 Subject: [PATCH 06/13] Format PureScript and repository files --- CHANGELOG.md | 11 + benchmark/left-bind-large.json | 188 +++++- benchmark/left-bind-small.json | 633 ++++++++++++++++++- benchmark/right-bind-large.json | 188 +++++- benchmark/right-bind-small.json | 657 +++++++++++++++++++- benchmark/src/Benchmark/Free0df59c5.purs | 28 +- benchmark/src/Benchmark/Freef686f5f.purs | 4 +- benchmark/src/Benchmark/Harness.js | 6 +- benchmark/src/Benchmark/Main.purs | 28 +- src/Control/Comonad/Cofree.purs | 32 +- src/Control/Monad/Free.purs | 6 +- src/Control/Monad/Trampoline.purs | 1 - src/Data/Coyoneda.purs | 4 +- src/Data/Yoneda.purs | 1 - test/Test/Control/Monad/Free/Coproduct.purs | 4 +- test/Test/Control/Monad/Free/Teletype.purs | 2 +- 16 files changed, 1732 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29c8736..c5d0afb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,16 +5,19 @@ Notable changes to this project are documented in this file. The format is based ## [v7.1.1](https://github.com/purescript/purescript-free/releases/tag/v7.1.1) Other improvements: + - Migrate from Bower/Pulp to Spago, update CI and formatting, and restore the benchmark runner. ## [v7.1.0](https://github.com/purescript/purescript-free/releases/tag/v7.1.0) - 2023-09-05 New features: + - Added `FoldableWithIndex` and `TraversableWithIndex` instances for `Cofree` (#126 by @postsolar) ## [v7.0.0](https://github.com/purescript/purescript-free/releases/tag/v7.0.0) - 2022-04-27 Breaking changes: + - Update project and deps to PureScript v0.15.0 (#123 by @JordanMartinez) - Drop deprecated `MonadZero` instance (#122 by @JordanMartinez) - Drop deprecated `unfoldCofree`; use `buildCofree` instead (#124 by @JordanMartinez) @@ -28,30 +31,37 @@ Other improvements: ## [v6.2.0](https://github.com/purescript/purescript-free/releases/tag/v6.2.0) - 2021-11-19 New features: + - Added a `FunctorWithIndex` instance for `Cofree` (#118 by @mikesol) Other improvements: + - Split `LICENSE` into `LICENSE` and `LICENSE_THIRDPARTY` (#119 by @maxdeviant) ## [v6.1.0](https://github.com/purescript/purescript-free/releases/tag/v6.1.0) - 2021-09-09 New features: + - Added semigroup and monoid instances for `Cofree` (#116 by @mikesol) ## [v6.0.1](https://github.com/purescript/purescript-free/releases/tag/v6.0.1) - 2021-04-20 Bugfixes: + - Removed unused constraint from `Ord1` instance (#114 by @rintcius) Other improvements: + - Fixed warnings revealed by v0.14.1 PS release (#115 by @JordanMartinez) ## [v6.0.0](https://github.com/purescript/purescript-free/releases/tag/v6.0.0) - 2021-02-26 Breaking changes: + - Added support for PureScript 0.14 and dropped support for all previous versions (#106, #110) Other improvements: + - Migrated CI to GitHub Actions and updated installation instructions to use Spago (#108) - Added a CHANGELOG.md file and pull request template (#111, #112) - Updated benchmarks (#103) @@ -227,6 +237,7 @@ This release works with versions 0.7.\* of the PureScript compiler. It will not ## [v0.3.0](https://github.com/purescript/purescript-free/releases/tag/v0.3.0) - 2015-02-21 **This release requires PureScript v0.6.8 or later** + - Updated dependencies ## [v0.2.0](https://github.com/purescript/purescript-free/releases/tag/v0.2.0) - 2015-01-10 diff --git a/benchmark/left-bind-large.json b/benchmark/left-bind-large.json index 2346c7d..6808433 100644 --- a/benchmark/left-bind-large.json +++ b/benchmark/left-bind-large.json @@ -1 +1,187 @@ -{"slug":"left-bind-large","title":"Left associated binds (large - 1 input per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":100000,"stats":{"moe":0.2956101016555821,"rme":14.39112929360249,"sem":0.11497864708501832,"deviation":0.2816390166738393,"mean":2.0541133056666667,"variance":0.07932053571300712,"sample":[1.7958541160000001,1.872374945,2.288292841,2.511392654,1.954026152,1.902739126]}},{"size":500000,"stats":{"rme":12.595494771361663,"deviation":1.0926834185433445,"mean":10.769947354,"variance":1.1939570531595698,"moe":1.3565281558514735,"sem":0.4886628803499545,"sample":[9.71459062,10.96870124,10.954100764,12.402810162,9.809533984]}},{"size":1000000,"stats":{"rme":102.65855299659903,"deviation":32.67164802409972,"mean":39.5103032394,"variance":1067.4365846106589,"moe":40.560705590136436,"sem":14.61120518376673,"sample":[97.227805073,33.411728362,22.214333973,19.793394896,24.904253893]}},{"size":1500000,"stats":{"rme":91.58067102417942,"deviation":42.97479006541146,"mean":58.25650174980001,"variance":1846.8325811661878,"moe":53.351695217679676,"sem":19.21891038100853,"sample":[134.934246698,44.415789815,37.506067285,37.396271162,37.030133789]}},{"size":2000000,"stats":{"rme":40.897353243454894,"deviation":24.960889781868154,"mean":75.77035457179998,"variance":623.0460187025701,"moe":30.98806956304731,"sem":11.162849266227418,"sample":[119.192609228,62.194457431,74.893429245,62.286611382,60.284665573]}},{"size":2500000,"stats":{"rme":24.226438792294573,"deviation":15.148886076686232,"mean":77.62928395,"variance":229.48874936441797,"moe":18.806810961043304,"sem":6.774787810174101,"sample":[104.234941609,68.549368142,75.577693107,68.529232435,71.255184457]}},{"size":3000000,"stats":{"rme":0.9036291855144747,"deviation":0.5496231347585575,"mean":75.510824967,"variance":0.30208559026182347,"moe":0.6823378526245627,"sem":0.2457989382653324,"sample":[76.015258776,76.161614772,74.961221678,75.357864327,75.058165282]}}]},{"name":"Free v0.6.1","results":[{"size":100000,"stats":{"rme":13.464786421416749,"deviation":0.44150101594625923,"mean":4.0706775109999995,"variance":0.19492314708157904,"moe":0.5481080327607932,"sem":0.19744525675821084,"sample":[3.66077755,4.339257057,4.29966785,4.518401322,3.535283776]}},{"size":500000,"stats":{"rme":44.6759194868656,"deviation":24.372315398627084,"mean":67.726362319,"variance":594.0097578901549,"moe":30.257375101019324,"sem":10.899630800079008,"sample":[34.012386673,55.145016748,82.421494614,70.000856272,97.052057288]}},{"size":1000000,"stats":{"rme":17.61229588902891,"deviation":20.387979711109995,"mean":143.711882828,"variance":415.6697167006329,"moe":25.310962031361885,"sem":9.117781711585694,"sample":[107.627165983,157.551595375,150.54147385,152.756308747,150.082870185]}},{"size":1500000,"stats":{"rme":7.168686647443891,"deviation":12.729640772372832,"mean":220.45046057960002,"variance":162.0437541936568,"moe":15.803402731798345,"sem":5.692868419235715,"sample":[206.630076621,212.397207164,220.711863941,222.348590939,240.164564233]}},{"size":2000000,"stats":{"rme":11.062031748305523,"deviation":29.44693059250524,"mean":330.47574609820003,"variance":867.121721319821,"moe":36.55733195383244,"sem":13.169067706711974,"sample":[278.870463631,338.792022116,339.805939187,341.431522044,353.478783513]}},{"size":2500000,"stats":{"rme":3.244145393596063,"deviation":9.32213107277591,"mean":356.7379848668,"variance":86.90212773801416,"moe":11.573098903263713,"sem":4.168983754777995,"sample":[345.987214502,355.449872606,353.704699248,371.608380984,356.939756994]}},{"size":3000000,"stats":{"rme":5.2069916890538925,"deviation":17.865549890153357,"mean":425.9552380094,"variance":319.1778728775587,"moe":22.179453842239184,"sem":7.989716801959361,"sample":[423.433975557,438.419904645,436.876036402,395.799223561,435.247049882]}}]}]} +{ + "slug": "left-bind-large", + "title": "Left associated binds (large - 1 input per size)", + "sizeInterpretation": "Number of binds", + "series": [ + { + "name": "Free", + "results": [ + { + "size": 100000, + "stats": { + "moe": 0.2956101016555821, + "rme": 14.39112929360249, + "sem": 0.11497864708501832, + "deviation": 0.2816390166738393, + "mean": 2.0541133056666667, + "variance": 0.07932053571300712, + "sample": [ + 1.7958541160000001, 1.872374945, 2.288292841, 2.511392654, 1.954026152, 1.902739126 + ] + } + }, + { + "size": 500000, + "stats": { + "rme": 12.595494771361663, + "deviation": 1.0926834185433445, + "mean": 10.769947354, + "variance": 1.1939570531595698, + "moe": 1.3565281558514735, + "sem": 0.4886628803499545, + "sample": [9.71459062, 10.96870124, 10.954100764, 12.402810162, 9.809533984] + } + }, + { + "size": 1000000, + "stats": { + "rme": 102.65855299659903, + "deviation": 32.67164802409972, + "mean": 39.5103032394, + "variance": 1067.4365846106589, + "moe": 40.560705590136436, + "sem": 14.61120518376673, + "sample": [97.227805073, 33.411728362, 22.214333973, 19.793394896, 24.904253893] + } + }, + { + "size": 1500000, + "stats": { + "rme": 91.58067102417942, + "deviation": 42.97479006541146, + "mean": 58.25650174980001, + "variance": 1846.8325811661878, + "moe": 53.351695217679676, + "sem": 19.21891038100853, + "sample": [134.934246698, 44.415789815, 37.506067285, 37.396271162, 37.030133789] + } + }, + { + "size": 2000000, + "stats": { + "rme": 40.897353243454894, + "deviation": 24.960889781868154, + "mean": 75.77035457179998, + "variance": 623.0460187025701, + "moe": 30.98806956304731, + "sem": 11.162849266227418, + "sample": [119.192609228, 62.194457431, 74.893429245, 62.286611382, 60.284665573] + } + }, + { + "size": 2500000, + "stats": { + "rme": 24.226438792294573, + "deviation": 15.148886076686232, + "mean": 77.62928395, + "variance": 229.48874936441797, + "moe": 18.806810961043304, + "sem": 6.774787810174101, + "sample": [104.234941609, 68.549368142, 75.577693107, 68.529232435, 71.255184457] + } + }, + { + "size": 3000000, + "stats": { + "rme": 0.9036291855144747, + "deviation": 0.5496231347585575, + "mean": 75.510824967, + "variance": 0.30208559026182347, + "moe": 0.6823378526245627, + "sem": 0.2457989382653324, + "sample": [76.015258776, 76.161614772, 74.961221678, 75.357864327, 75.058165282] + } + } + ] + }, + { + "name": "Free v0.6.1", + "results": [ + { + "size": 100000, + "stats": { + "rme": 13.464786421416749, + "deviation": 0.44150101594625923, + "mean": 4.0706775109999995, + "variance": 0.19492314708157904, + "moe": 0.5481080327607932, + "sem": 0.19744525675821084, + "sample": [3.66077755, 4.339257057, 4.29966785, 4.518401322, 3.535283776] + } + }, + { + "size": 500000, + "stats": { + "rme": 44.6759194868656, + "deviation": 24.372315398627084, + "mean": 67.726362319, + "variance": 594.0097578901549, + "moe": 30.257375101019324, + "sem": 10.899630800079008, + "sample": [34.012386673, 55.145016748, 82.421494614, 70.000856272, 97.052057288] + } + }, + { + "size": 1000000, + "stats": { + "rme": 17.61229588902891, + "deviation": 20.387979711109995, + "mean": 143.711882828, + "variance": 415.6697167006329, + "moe": 25.310962031361885, + "sem": 9.117781711585694, + "sample": [107.627165983, 157.551595375, 150.54147385, 152.756308747, 150.082870185] + } + }, + { + "size": 1500000, + "stats": { + "rme": 7.168686647443891, + "deviation": 12.729640772372832, + "mean": 220.45046057960002, + "variance": 162.0437541936568, + "moe": 15.803402731798345, + "sem": 5.692868419235715, + "sample": [206.630076621, 212.397207164, 220.711863941, 222.348590939, 240.164564233] + } + }, + { + "size": 2000000, + "stats": { + "rme": 11.062031748305523, + "deviation": 29.44693059250524, + "mean": 330.47574609820003, + "variance": 867.121721319821, + "moe": 36.55733195383244, + "sem": 13.169067706711974, + "sample": [278.870463631, 338.792022116, 339.805939187, 341.431522044, 353.478783513] + } + }, + { + "size": 2500000, + "stats": { + "rme": 3.244145393596063, + "deviation": 9.32213107277591, + "mean": 356.7379848668, + "variance": 86.90212773801416, + "moe": 11.573098903263713, + "sem": 4.168983754777995, + "sample": [345.987214502, 355.449872606, 353.704699248, 371.608380984, 356.939756994] + } + }, + { + "size": 3000000, + "stats": { + "rme": 5.2069916890538925, + "deviation": 17.865549890153357, + "mean": 425.9552380094, + "variance": 319.1778728775587, + "moe": 22.179453842239184, + "sem": 7.989716801959361, + "sample": [423.433975557, 438.419904645, 436.876036402, 395.799223561, 435.247049882] + } + } + ] + } + ] +} diff --git a/benchmark/left-bind-small.json b/benchmark/left-bind-small.json index df1a9ce..1e8a8ce 100644 --- a/benchmark/left-bind-small.json +++ b/benchmark/left-bind-small.json @@ -1 +1,632 @@ -{"slug":"left-bind-small","title":"Left associated binds (small - 100 inputs per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":1,"stats":{"moe":0.0002552396452441629,"rme":10.488846513381104,"sem":0.00013022430879804228,"deviation":0.0010170843655850777,"mean":0.002433438652367941,"variance":0.0000010344606067176,"sample":[0.0039486718,0.0035355652,0.0036191946,0.0016963445,0.0016091770625,0.0018094969375,0.001768847888888889,0.0014602111388888888,0.0018064448055555556,0.0016578250555555557,0.0014646249166666665,0.0017390423333333333,0.0014830704444444445,0.0015771075277777778,0.001664818361111111,0.0015163020555555556,0.002596861638888889,0.0031630854444444443,0.003092734472222222,0.0029241114444444444,0.0028705598333333333,0.0016454055833333332,0.001711620861111111,0.0016900070833333334,0.0014959885555555557,0.0014836878333333334,0.0015052755833333334,0.001788427138888889,0.0014512297777777778,0.0014522022777777779,0.0019536894722222225,0.0024363785277777775,0.0029895754999999997,0.0037041276388888886,0.0034885652777777772,0.0030373121944444444,0.0024320685833333334,0.0029131954444444447,0.0026020054722222224,0.003052439472222222,0.0029362796111111113,0.003079990138888889,0.003035265194444444,0.006503356361111112,0.004779550083333333,0.004934420416666667,0.00323369375,0.0018781574722222224,0.0025841495833333335,0.00179031525,0.0017129315833333332,0.0018879475555555554,0.0015875140555555555,0.0017556328333333334,0.0017726653333333332,0.00164373475,0.0017631573333333334,0.0020732539166666668,0.0031871428333333333,0.003042760888888889,0.0034205391111111114]}},{"size":2,"stats":{"rme":13.273266950760515,"deviation":0.0021950139243280247,"mean":0.004331332343537417,"variance":0.000004818086127993915,"moe":0.0005749093044823528,"sem":0.0002933210737154861,"sample":[0.0039336455714285715,0.002869311523809524,0.0033681905714285716,0.004006681238095238,0.003035744857142857,0.0035403969047619046,0.004620695476190476,0.004139437285714286,0.005022591904761904,0.007341679428571429,0.009562048904761904,0.0064429179047619045,0.004964747,0.003206654095238095,0.003663248238095238,0.003422980238095238,0.003547155619047619,0.003276085761904762,0.003538400761904762,0.0034188595238095238,0.0035068348095238094,0.008298172714285715,0.01652297566666667,0.0033820317619047617,0.0034403469523809523,0.0029582179047619047,0.0029850279047619046,0.0033098496666666664,0.003237449904761905,0.0033115743333333334,0.003109104619047619,0.003008495904761905,0.0032912558095238094,0.003140042619047619,0.004436925952380952,0.005841434666666667,0.005683290190476191,0.005824430571428571,0.004936367,0.003123343904761905,0.003056350047619048,0.0031864456190476187,0.004215455142857143,0.004913718571428571,0.003412681571428571,0.0029259104761904763,0.0031821540476190476,0.0034887706666666663,0.003014242761904762,0.006136003428571428,0.006840230571428571,0.004696864619047619,0.0032181907142857145,0.0037648729999999997,0.002968609142857143,0.0032654651904761903]}},{"size":3,"stats":{"rme":6.470985918969754,"deviation":0.0015436796466411341,"mean":0.005712226152698048,"variance":0.000002382946851454097,"moe":0.00036963735000079844,"sem":0.00018859048469428493,"sample":[0.007778895,0.005844431846153846,0.005382359999999999,0.004743467846153846,0.007507394538461539,0.008426685692307692,0.004655098461538462,0.005786476384615384,0.004850101076923076,0.0050011261538461535,0.004712081384615385,0.004931171307692308,0.004543063,0.005600400769230769,0.004334335846153847,0.005518897461538461,0.005784022692307693,0.004827880923076923,0.004425803769230769,0.005326636230769231,0.004582035769230769,0.005139928615384615,0.008890097846153846,0.008353854769230768,0.00865039723076923,0.009909505538461538,0.005248373076923076,0.006083129230769231,0.004234217615384616,0.005030254999999999,0.005296868769230769,0.004742823461538461,0.004223510076923077,0.005023698769230769,0.004276470769230769,0.004699187923076923,0.004862148538461538,0.00637102,0.008056447384615384,0.008743886615384614,0.008585705461538461,0.007934472461538462,0.004897112538461539,0.003994243461538462,0.004390586615384615,0.004988542692307692,0.0046407471538461535,0.004183789692307692,0.005637116923076923,0.0038752725384615383,0.00452943023076923,0.004211434538461538,0.004948777692307693,0.004232149846153846,0.0063883213846153844,0.008749506846153847,0.008443853461538461,0.007229518923076924,0.005391123615384615,0.004077244307692308,0.004745374384615385,0.0051690306153846155,0.006065091230769231,0.006800881384615385,0.006884926230769231,0.004458918846153846,0.004867791769230769]}},{"size":4,"stats":{"rme":7.316025786941184,"deviation":0.0023496435575443117,"mean":0.0077483790912457945,"variance":0.000005520824847509489,"moe":0.0005668734123855013,"sem":0.0002892211287681129,"sample":[0.010926924666666666,0.015849782833333333,0.010118213833333334,0.010640174666666667,0.010602080333333333,0.006744016333333333,0.006256407,0.006167282111111111,0.006629436444444445,0.005880073222222223,0.0065147362222222225,0.006765934666666667,0.006359928666666666,0.007059587333333333,0.006296072888888889,0.0063365007,0.0097455376,0.0111037415,0.0119827152,0.010145258899999999,0.0089865379,0.006231237,0.0061933367000000005,0.0066719027,0.0069704704000000004,0.0059092401,0.0059322061,0.0055762401,0.0052496255,0.0062842995999999995,0.0057870191000000005,0.0052720451,0.0087759826,0.0102064389,0.0101803343,0.0119499673,0.0110047092,0.0082972498,0.0056388029999999995,0.0056457241,0.0068318124,0.0065510410000000005,0.0066950716,0.0063556251,0.005736691800000001,0.006300964300000001,0.0069151402,0.0077851488,0.0111336224,0.011790893600000001,0.0110446644,0.0108201519,0.0064478020999999995,0.0058321573,0.0053380637,0.00685978,0.0057740505999999995,0.0057251719,0.007094784,0.0057350451,0.0053049486,0.006681964899999999,0.0056606299,0.006800473999999999,0.0111638324,0.0101257134]}},{"size":5,"stats":{"rme":12.677671975985163,"deviation":0.0048132118594694994,"mean":0.009943917794642857,"variance":0.00002316700840413784,"moe":0.0012606572795664393,"sem":0.000643192489574714,"sample":[0.007136109,0.01001541525,0.006874251375,0.00657671925,0.007545646,0.00703617125,0.00797082275,0.006504831875,0.006653333875,0.0083824165,0.01348840475,0.027149076375,0.016645459,0.012295565875,0.008750754,0.008509081375,0.00863639375,0.01481984975,0.0113543905,0.0251242275,0.027828182625,0.0088383495,0.0084518575,0.00720552875,0.007547649875,0.00781369275,0.007629465125,0.006782815125,0.007626611625,0.00686263625,0.00865185,0.00765608975,0.006820999,0.01067880175,0.013389152625,0.012417540375,0.01283362775,0.013069722625,0.0085037835,0.007403853875,0.006577496875,0.007260755375,0.006406379375,0.006334173375,0.007226516625,0.0071006235,0.00658204275,0.007658963,0.007595737625,0.008369632875,0.01524457825,0.01443299125,0.011445071125,0.010447696625,0.007851224125,0.006844383375]}},{"size":10,"stats":{"rme":7.725102064182073,"deviation":0.005012722395663803,"mean":0.017809035980392157,"variance":0.000025127385815989456,"moe":0.0013757662061322025,"sem":0.0007019215337409196,"sample":[0.0153355876,0.0150565056,0.016687512800000002,0.0141886928,0.016017471,0.0252713694,0.0304281134,0.0241396694,0.0161108368,0.0140723834,0.0158514908,0.0138268142,0.0145183972,0.0129342854,0.015370398399999999,0.012952317999999999,0.015015609599999999,0.0135938712,0.021212686,0.025169208399999997,0.025974992600000003,0.0217217026,0.013928074200000001,0.013382038199999998,0.013754995,0.013072167,0.0201330126,0.018340424,0.014269800199999998,0.014669332600000001,0.0280230892,0.0212331338,0.0254651668,0.0262337508,0.0159697522,0.014009626399999999,0.0148521726,0.0150008298,0.016571361,0.0142225764,0.0150954334,0.015482556,0.024903210000000002,0.0255914266,0.027435404000000004,0.0208395636,0.0147164342,0.0139507414,0.015474164600000001,0.012805972600000002,0.0133847092]}},{"size":20,"stats":{"rme":7.706571550596003,"deviation":0.009618758998436368,"mean":0.03606907327173913,"variance":0.00009252052467000059,"moe":0.002779688939323475,"sem":0.0014182086425119772,"sample":[0.0535175065,0.0560606645,0.0439089795,0.0460493225,0.037472929,0.031148172,0.0305528595,0.031626917,0.026668294,0.031983636,0.026797478,0.0588438515,0.034806729,0.0398920685,0.0297911415,0.034529819,0.0267543685,0.0325386495,0.0290946105,0.030144112,0.028344417,0.0259824145,0.0270000555,0.026588971,0.048901875,0.0472573585,0.047387821,0.0396549675,0.028906752666666664,0.028451720666666666,0.03902135566666667,0.03340420166666667,0.027085803333333335,0.040464362,0.06007030333333333,0.034706196333333335,0.03168342133333333,0.031121557666666664,0.028060120999999997,0.029686122,0.028183035999999998,0.027468169333333334,0.027891482666666665,0.04315312033333333,0.04672263766666667,0.04979701833333333]}},{"size":30,"stats":{"rme":10.727464773354011,"deviation":0.017497098953260567,"mean":0.05328117231944445,"variance":0.00030614847178019207,"moe":0.005715718991398452,"sem":0.0029161831588767613,"sample":[0.0437583345,0.0563246925,0.077170353,0.0718714085,0.051097012,0.0435295165,0.0477552005,0.0441354615,0.0399841765,0.052155323,0.0822814725,0.054768652,0.044760656,0.0461335,0.0388777875,0.038741085,0.039999193,0.0406841055,0.0443862665,0.0732636355,0.077369141,0.040346191,0.0360389375,0.0543973315,0.052894189,0.0483386085,0.042633904,0.12246182,0.0477536585,0.0443786195,0.042991129,0.0488636735,0.0462491055,0.0400063175,0.0654493365,0.076272409]}},{"size":40,"stats":{"rme":10.154886280070158,"deviation":0.01795866409980932,"mean":0.06857997207142856,"variance":0.00032251361624978007,"moe":0.006964218174757446,"sem":0.0033938685062170786,"sample":[0.061948325,0.053533423,0.068941853,0.0521256985,0.0986347685,0.09762585,0.062746492,0.060164327,0.057635129,0.057103704,0.1023486995,0.08781686,0.0573581915,0.057519049,0.0562060315,0.055089347,0.0600607655,0.0996447495,0.0738273075,0.0547735765,0.0816252195,0.0602613015,0.059108246,0.112424379,0.059699418,0.0586908175,0.0557466835,0.0575790055]}},{"size":50,"stats":{"rme":9.50055320197502,"deviation":0.024013611717697836,"mean":0.08757692093750001,"variance":0.0005766535477283547,"moe":0.00832029196631879,"sem":0.004245046921591219,"sample":[0.079638462,0.06851665,0.07127316,0.074230355,0.070679754,0.112661168,0.092338965,0.141421397,0.086956681,0.104951542,0.104799999,0.117770659,0.124903024,0.106731623,0.07107002,0.073123102,0.070067264,0.062828854,0.063511946,0.096015056,0.131979576,0.078504255,0.065441019,0.098218105,0.068777288,0.077960162,0.078684761,0.141218883,0.0740446,0.063999425,0.060809417,0.069334298]}},{"size":100,"stats":{"rme":12.350350503376253,"deviation":0.044367325916488475,"mean":0.16812728559999998,"variance":0.0019684596089799096,"moe":0.02076430906341243,"sem":0.009920835672915638,"sample":[0.134376747,0.13782974,0.139861309,0.251633224,0.136193655,0.137276661,0.198575206,0.183625698,0.132277407,0.133466606,0.144596417,0.249094405,0.211936586,0.142706633,0.231570045,0.13319439,0.138165128,0.130450134,0.159511609,0.236204112]}},{"size":250,"stats":{"rme":13.589636274059865,"deviation":0.07939310774473976,"mean":0.4178953798999999,"variance":0.0063032655573678565,"moe":0.056790462134510666,"sem":0.025106305099253167,"sample":[0.348042196,0.415641228,0.498849248,0.318846263,0.384543239,0.542469935,0.341740948,0.462471858,0.5059616,0.360387284]}},{"size":500,"stats":{"rme":10.636435414630824,"deviation":0.09571277318851444,"mean":0.8322594625714286,"variance":0.009160934951436009,"moe":0.0885227402185636,"sem":0.03617602787844855,"sample":[0.907020954,0.795681981,0.700632592,0.891420737,0.936428737,0.713890966,0.880740271]}},{"size":1000,"stats":{"rme":4.591701253826344,"deviation":0.07444284597715682,"mean":1.7016717745,"variance":0.005541737317178694,"moe":0.07813568420572552,"sem":0.030391164607438938,"sample":[1.7039705029999999,1.697325038,1.741995438,1.651626935,1.8159186470000002,1.599194086]}}]},{"name":"Free v0.6.1","results":[{"size":1,"stats":{"rme":8.735495607850144,"deviation":0.0009566537064906855,"mean":0.0026223211565734547,"variance":9.151863141423666e-7,"moe":0.00022907274945619923,"sem":0.00011687385176336695,"sample":[0.0020955884444444446,0.0018656194074074073,0.002529691259259259,0.0021241020344827588,0.0020203787586206895,0.002130749620689655,0.002371468068965517,0.0019209316206896551,0.0020771012068965516,0.002195536379310345,0.002683446551724138,0.00276548675862069,0.003850824068965517,0.005843688344827586,0.0033190352413793108,0.002710146896551724,0.0018057851724137932,0.0021272292068965516,0.0021996894827586207,0.002130506655172414,0.0023403379655172413,0.0021488980344827584,0.0021472244827586205,0.0018417698965517242,0.0020753954137931034,0.0023167177586206895,0.0021568740344827587,0.002185456482758621,0.002152681103448276,0.004005337482758621,0.004282362,0.004819472448275862,0.003409247724137931,0.0018264066551724138,0.002665114896551724,0.0021419237931034484,0.0019223060689655173,0.0020705038275862066,0.0021531744827586207,0.0023007536896551724,0.0022768282068965514,0.002136213620689655,0.0020925898620689654,0.002168903689655172,0.002200590655172414,0.0027934569310344827,0.0035478274827586203,0.0038080423793103446,0.004510914379310345,0.0022261902758620687,0.0019695676896551726,0.002158820068965517,0.0025900539655172414,0.002469301793103448,0.002252531344827586,0.002262223931034483,0.0023901802758620693,0.0018454185862068965,0.0026553313103448275,0.002307572655172414,0.0018179567931034483,0.0020985635862068967,0.006788606655172414,0.003389774344827586,0.0038639349999999998,0.003183958689655172,0.0021611998965517243]}},{"size":2,"stats":{"rme":7.425364870592388,"deviation":0.001389851269889524,"mean":0.004992403978557506,"variance":0.0000019316865524135227,"moe":0.0003707042112218658,"sem":0.0001891348016438091,"sample":[0.00433391447368421,0.0036924764736842104,0.005039807263157894,0.0038711637894736843,0.003785189157894737,0.004665331631578948,0.0038113532631578943,0.006948522684210527,0.008406592368421053,0.007226863947368421,0.005908266578947369,0.004034722947368422,0.004613224210526315,0.004631820578947368,0.0039423023157894735,0.003959305631578948,0.0041707787368421055,0.006683196157894736,0.005235866263157894,0.007722273947368421,0.0077517455263157896,0.007535821,0.0040905918421052625,0.004090406315789474,0.004850734947368421,0.004123789947368421,0.0047673881052631584,0.003976588368421053,0.003910656526315789,0.003802081789473684,0.0040315394736842106,0.0043445310000000004,0.006752901315789473,0.006806834842105263,0.004385266052631579,0.0047505942105263155,0.004526033789473684,0.0038881441052631576,0.004701974473684211,0.0038686012105263157,0.004726458105263158,0.004186599684210527,0.0037967417368421053,0.004304542105263158,0.003780593631578947,0.004321067684210526,0.004803945947368421,0.008202262578947368,0.0075778706842105255,0.007233411684210527,0.0041867741052631574,0.004817490157894737,0.003955017263157895,0.004057842210526316]}},{"size":3,"stats":{"rme":7.818079311734423,"deviation":0.0024533241683735835,"mean":0.008293342320661156,"variance":0.000006018799475125935,"moe":0.0006483800802229254,"sem":0.00033080616337904353,"sample":[0.007715665272727273,0.006691219909090909,0.009536494909090908,0.012466559727272728,0.015551666363636363,0.008428253454545455,0.006497179363636364,0.006676447454545455,0.007738683,0.006424513181818182,0.006203786454545454,0.006773426181818182,0.006854815181818182,0.006623254818181818,0.007836115818181819,0.006735657272727272,0.012413788727272728,0.011738470272727274,0.011840136272727274,0.009564534454545455,0.006523656545454545,0.006773622454545455,0.007748262909090909,0.006434551,0.0062835010909090905,0.008475440363636365,0.009960866454545454,0.007531812,0.01247630309090909,0.012289372545454546,0.011580511909090908,0.005559322272727273,0.0067570220000000005,0.007853614181818182,0.007566773,0.006594065272727273,0.007756785454545454,0.006505442454545454,0.006439621545454546,0.006725699000000001,0.006427980636363636,0.006781947636363636,0.014187253363636364,0.011818953363636364,0.01339631409090909,0.005994947818181818,0.006187887636363637,0.007747282818181819,0.006794653727272727,0.006239835454545455,0.007556421999999999,0.0065077268181818184,0.008079023636363637,0.007585268272727272,0.008681416727272727]}},{"size":4,"stats":{"rme":12.701169866061129,"deviation":0.0062609242448788014,"mean":0.01409294857011145,"variance":0.00003919917240011119,"moe":0.0017899693370264883,"sem":0.0009132496617482083,"sample":[0.016302299,0.0153141902,0.018691561666666665,0.021726643166666667,0.02383374016666667,0.022520573833333335,0.012472651500000001,0.010737822833333334,0.032378145500000004,0.024453183,0.013092010333333334,0.008409251833333334,0.010042404999999999,0.008730090333333334,0.011367661142857142,0.009380696142857142,0.008572485285714285,0.009742792857142857,0.0087843215,0.010408286375,0.010425794125,0.016534163125,0.018967704875,0.015998863375,0.009054976375,0.00882403525,0.00873378675,0.0091692505,0.00969626775,0.01707087425,0.014366886125,0.012181811375,0.01665274925,0.020540483375,0.013379976,0.009518771875,0.010260218875,0.008866679625,0.00915245325,0.017044609375,0.009406062875,0.00949480225,0.01163353925,0.009095463125,0.02950122675,0.029605849875,0.0102304715]}},{"size":5,"stats":{"rme":8.212406091520275,"deviation":0.004054273117530343,"mean":0.01411398747416413,"variance":0.00001643713051152921,"moe":0.0011590979670846636,"sem":0.0005913765138187059,"sample":[0.011628745142857142,0.011060291428571428,0.012645932,0.011123363857142857,0.013624806714285715,0.012481165857142857,0.010848137999999998,0.019532232142857143,0.019588146,0.022096629714285713,0.011688781714285714,0.011006496285714287,0.00989549442857143,0.010210010571428571,0.012205640142857143,0.012532384428571427,0.01038633757142857,0.010618129142857143,0.010454493714285714,0.022168221285714284,0.023165689,0.021356801285714287,0.010841319142857143,0.011466057714285714,0.013299938428571427,0.012848861285714287,0.011210453714285714,0.012468572571428572,0.011814883714285714,0.013782243285714285,0.022042676714285715,0.020105443857142857,0.018435007,0.010751906285714286,0.012512181428571429,0.01200722957142857,0.010977499142857143,0.010876453714285713,0.011031800714285714,0.011455988571428571,0.011939975142857143,0.015216491142857143,0.019556211142857143,0.019726451142857145,0.017603454571428572,0.013664983285714286,0.017403397571428572]}},{"size":10,"stats":{"rme":7.947330558829363,"deviation":0.00812604676526758,"mean":0.029232447773049647,"variance":0.0000660326360313157,"moe":0.002323199254961408,"sem":0.0011853057423272491,"sample":[0.023793245666666667,0.022935259,0.04110835166666667,0.04466183466666667,0.043419083,0.028256005333333334,0.032543671,0.034962919,0.026909962,0.019311464333333334,0.024704298333333333,0.023482615,0.023595377666666667,0.042146038999999996,0.04136304166666666,0.041781387333333336,0.022579242,0.023910048333333333,0.023442612,0.022252115666666666,0.022434303,0.022368066000000002,0.023281198,0.023745237333333336,0.027218427,0.04140027266666667,0.047759237333333336,0.03658436633333333,0.027291862,0.024005816333333332,0.024051928,0.024838596666666667,0.024482752333333333,0.025980266333333335,0.023756612333333333,0.028870564666666668,0.04294748566666667,0.04240571333333334,0.03841554966666667,0.022181169333333334,0.022309317999999998,0.02362528,0.023840755666666668,0.028913448999999997,0.022075289666666668,0.024863383,0.027119572999999998]}},{"size":20,"stats":{"rme":9.735594210810671,"deviation":0.016351752905118123,"mean":0.05730611321212121,"variance":0.000267379823070039,"moe":0.005579090640319881,"sem":0.0028464748164897355,"sample":[0.047023444,0.046665262,0.0410628815,0.054078925,0.0827015895,0.092110298,0.0444540465,0.0499588435,0.0510650785,0.050105707,0.054908508,0.0423508335,0.0808035785,0.088324452,0.0435506655,0.046656712,0.048802216,0.046574263,0.04706927,0.047818905,0.0819365365,0.089234723,0.0451651,0.051703877,0.0505865645,0.04421551,0.0548140045,0.072237225,0.0869740025,0.065018285,0.047280471,0.048760993,0.047088965]}},{"size":30,"stats":{"rme":13.16248123472712,"deviation":0.031191444258079452,"mean":0.08691057238709678,"variance":0.0009729061949048777,"moe":0.011439587781445543,"sem":0.005602148766623675,"sample":[0.11926241,0.067748954,0.061724908,0.072512068,0.070728528,0.103643227,0.197218609,0.05899976,0.071443569,0.071475331,0.066897424,0.069460348,0.123696606,0.13447981,0.067805337,0.077600224,0.069551614,0.066981554,0.078830698,0.068518609,0.136488067,0.108775969,0.071753832,0.088489817,0.070683602,0.057028387,0.074017175,0.103509191,0.127321987,0.072954395,0.064625734]}},{"size":40,"stats":{"rme":10.160949974211668,"deviation":0.029674049844853164,"mean":0.11798398346153846,"variance":0.0008805492341948301,"moe":0.01198829353710909,"sem":0.005819559969470432,"sample":[0.106159246,0.170857273,0.16779246,0.080159511,0.096521862,0.112620671,0.10880461,0.159199304,0.104848399,0.099269197,0.101624198,0.111553043,0.130396229,0.15776688,0.083418699,0.095085137,0.092582159,0.09259612,0.146446048,0.159002953,0.098240989,0.103568975,0.103764356,0.085972297,0.171940048,0.127392906]}},{"size":50,"stats":{"rme":14.783163333725607,"deviation":0.048424507340925654,"mean":0.14910853128571433,"variance":0.0023449329112113625,"moe":0.022042957724486497,"sem":0.010567093827654122,"sample":[0.121349164,0.287252768,0.12214752,0.117203518,0.132483847,0.149707656,0.219795889,0.128877257,0.122001759,0.118606955,0.167654218,0.180322859,0.104897646,0.103980143,0.106387738,0.222442909,0.113075679,0.117344618,0.136293826,0.156353086,0.203100102]}},{"size":100,"stats":{"rme":16.58436723404181,"deviation":0.08135815857088013,"mean":0.28319914492857146,"variance":0.0066191499660444774,"moe":0.04696678619862058,"sem":0.021743882499361378,"sample":[0.241140618,0.522856359,0.255340978,0.403915428,0.226795616,0.273281908,0.24798883,0.238580854,0.244519068,0.243925316,0.279532547,0.24996972,0.254406424,0.282534363]}},{"size":250,"stats":{"rme":15.127904640763463,"deviation":0.12337313508844795,"mean":0.6819114366249999,"variance":0.015220930461552427,"moe":0.10315891186709016,"sem":0.04361899021864277,"sample":[0.580810989,0.623433496,0.566602574,0.638241133,0.597745983,0.831866849,0.718333754,0.898256715]}},{"size":500,"stats":{"rme":5.927369456192178,"deviation":0.07762787557965846,"mean":1.374618405666667,"variance":0.0060260870670109335,"moe":0.08147871151668191,"sem":0.03169144749773703,"sample":[1.437946988,1.457550383,1.236967027,1.365965037,1.385114976,1.3641660230000001]}},{"size":1000,"stats":{"rme":4.371357697406755,"deviation":0.10690735268748533,"mean":3.036167239,"variance":0.011429182058646377,"moe":0.13272173030816867,"sem":0.0478104215807524,"sample":[3.189855874,3.038351118,3.07570966,2.911676746,2.965242797]}}]}]} \ No newline at end of file +{ + "slug": "left-bind-small", + "title": "Left associated binds (small - 100 inputs per size)", + "sizeInterpretation": "Number of binds", + "series": [ + { + "name": "Free", + "results": [ + { + "size": 1, + "stats": { + "moe": 0.0002552396452441629, + "rme": 10.488846513381104, + "sem": 0.00013022430879804228, + "deviation": 0.0010170843655850777, + "mean": 0.002433438652367941, + "variance": 0.0000010344606067176, + "sample": [ + 0.0039486718, 0.0035355652, 0.0036191946, 0.0016963445, 0.0016091770625, + 0.0018094969375, 0.001768847888888889, 0.0014602111388888888, 0.0018064448055555556, + 0.0016578250555555557, 0.0014646249166666665, 0.0017390423333333333, + 0.0014830704444444445, 0.0015771075277777778, 0.001664818361111111, + 0.0015163020555555556, 0.002596861638888889, 0.0031630854444444443, + 0.003092734472222222, 0.0029241114444444444, 0.0028705598333333333, + 0.0016454055833333332, 0.001711620861111111, 0.0016900070833333334, + 0.0014959885555555557, 0.0014836878333333334, 0.0015052755833333334, + 0.001788427138888889, 0.0014512297777777778, 0.0014522022777777779, + 0.0019536894722222225, 0.0024363785277777775, 0.0029895754999999997, + 0.0037041276388888886, 0.0034885652777777772, 0.0030373121944444444, + 0.0024320685833333334, 0.0029131954444444447, 0.0026020054722222224, + 0.003052439472222222, 0.0029362796111111113, 0.003079990138888889, + 0.003035265194444444, 0.006503356361111112, 0.004779550083333333, + 0.004934420416666667, 0.00323369375, 0.0018781574722222224, 0.0025841495833333335, + 0.00179031525, 0.0017129315833333332, 0.0018879475555555554, 0.0015875140555555555, + 0.0017556328333333334, 0.0017726653333333332, 0.00164373475, 0.0017631573333333334, + 0.0020732539166666668, 0.0031871428333333333, 0.003042760888888889, + 0.0034205391111111114 + ] + } + }, + { + "size": 2, + "stats": { + "rme": 13.273266950760515, + "deviation": 0.0021950139243280247, + "mean": 0.004331332343537417, + "variance": 0.000004818086127993915, + "moe": 0.0005749093044823528, + "sem": 0.0002933210737154861, + "sample": [ + 0.0039336455714285715, 0.002869311523809524, 0.0033681905714285716, + 0.004006681238095238, 0.003035744857142857, 0.0035403969047619046, + 0.004620695476190476, 0.004139437285714286, 0.005022591904761904, + 0.007341679428571429, 0.009562048904761904, 0.0064429179047619045, 0.004964747, + 0.003206654095238095, 0.003663248238095238, 0.003422980238095238, + 0.003547155619047619, 0.003276085761904762, 0.003538400761904762, + 0.0034188595238095238, 0.0035068348095238094, 0.008298172714285715, + 0.01652297566666667, 0.0033820317619047617, 0.0034403469523809523, + 0.0029582179047619047, 0.0029850279047619046, 0.0033098496666666664, + 0.003237449904761905, 0.0033115743333333334, 0.003109104619047619, + 0.003008495904761905, 0.0032912558095238094, 0.003140042619047619, + 0.004436925952380952, 0.005841434666666667, 0.005683290190476191, + 0.005824430571428571, 0.004936367, 0.003123343904761905, 0.003056350047619048, + 0.0031864456190476187, 0.004215455142857143, 0.004913718571428571, + 0.003412681571428571, 0.0029259104761904763, 0.0031821540476190476, + 0.0034887706666666663, 0.003014242761904762, 0.006136003428571428, + 0.006840230571428571, 0.004696864619047619, 0.0032181907142857145, + 0.0037648729999999997, 0.002968609142857143, 0.0032654651904761903 + ] + } + }, + { + "size": 3, + "stats": { + "rme": 6.470985918969754, + "deviation": 0.0015436796466411341, + "mean": 0.005712226152698048, + "variance": 0.000002382946851454097, + "moe": 0.00036963735000079844, + "sem": 0.00018859048469428493, + "sample": [ + 0.007778895, 0.005844431846153846, 0.005382359999999999, 0.004743467846153846, + 0.007507394538461539, 0.008426685692307692, 0.004655098461538462, + 0.005786476384615384, 0.004850101076923076, 0.0050011261538461535, + 0.004712081384615385, 0.004931171307692308, 0.004543063, 0.005600400769230769, + 0.004334335846153847, 0.005518897461538461, 0.005784022692307693, + 0.004827880923076923, 0.004425803769230769, 0.005326636230769231, + 0.004582035769230769, 0.005139928615384615, 0.008890097846153846, + 0.008353854769230768, 0.00865039723076923, 0.009909505538461538, 0.005248373076923076, + 0.006083129230769231, 0.004234217615384616, 0.005030254999999999, + 0.005296868769230769, 0.004742823461538461, 0.004223510076923077, + 0.005023698769230769, 0.004276470769230769, 0.004699187923076923, + 0.004862148538461538, 0.00637102, 0.008056447384615384, 0.008743886615384614, + 0.008585705461538461, 0.007934472461538462, 0.004897112538461539, + 0.003994243461538462, 0.004390586615384615, 0.004988542692307692, + 0.0046407471538461535, 0.004183789692307692, 0.005637116923076923, + 0.0038752725384615383, 0.00452943023076923, 0.004211434538461538, + 0.004948777692307693, 0.004232149846153846, 0.0063883213846153844, + 0.008749506846153847, 0.008443853461538461, 0.007229518923076924, + 0.005391123615384615, 0.004077244307692308, 0.004745374384615385, + 0.0051690306153846155, 0.006065091230769231, 0.006800881384615385, + 0.006884926230769231, 0.004458918846153846, 0.004867791769230769 + ] + } + }, + { + "size": 4, + "stats": { + "rme": 7.316025786941184, + "deviation": 0.0023496435575443117, + "mean": 0.0077483790912457945, + "variance": 0.000005520824847509489, + "moe": 0.0005668734123855013, + "sem": 0.0002892211287681129, + "sample": [ + 0.010926924666666666, 0.015849782833333333, 0.010118213833333334, + 0.010640174666666667, 0.010602080333333333, 0.006744016333333333, 0.006256407, + 0.006167282111111111, 0.006629436444444445, 0.005880073222222223, + 0.0065147362222222225, 0.006765934666666667, 0.006359928666666666, + 0.007059587333333333, 0.006296072888888889, 0.0063365007, 0.0097455376, 0.0111037415, + 0.0119827152, 0.010145258899999999, 0.0089865379, 0.006231237, 0.0061933367000000005, + 0.0066719027, 0.0069704704000000004, 0.0059092401, 0.0059322061, 0.0055762401, + 0.0052496255, 0.0062842995999999995, 0.0057870191000000005, 0.0052720451, + 0.0087759826, 0.0102064389, 0.0101803343, 0.0119499673, 0.0110047092, 0.0082972498, + 0.0056388029999999995, 0.0056457241, 0.0068318124, 0.0065510410000000005, + 0.0066950716, 0.0063556251, 0.005736691800000001, 0.006300964300000001, 0.0069151402, + 0.0077851488, 0.0111336224, 0.011790893600000001, 0.0110446644, 0.0108201519, + 0.0064478020999999995, 0.0058321573, 0.0053380637, 0.00685978, 0.0057740505999999995, + 0.0057251719, 0.007094784, 0.0057350451, 0.0053049486, 0.006681964899999999, + 0.0056606299, 0.006800473999999999, 0.0111638324, 0.0101257134 + ] + } + }, + { + "size": 5, + "stats": { + "rme": 12.677671975985163, + "deviation": 0.0048132118594694994, + "mean": 0.009943917794642857, + "variance": 0.00002316700840413784, + "moe": 0.0012606572795664393, + "sem": 0.000643192489574714, + "sample": [ + 0.007136109, 0.01001541525, 0.006874251375, 0.00657671925, 0.007545646, 0.00703617125, + 0.00797082275, 0.006504831875, 0.006653333875, 0.0083824165, 0.01348840475, + 0.027149076375, 0.016645459, 0.012295565875, 0.008750754, 0.008509081375, + 0.00863639375, 0.01481984975, 0.0113543905, 0.0251242275, 0.027828182625, + 0.0088383495, 0.0084518575, 0.00720552875, 0.007547649875, 0.00781369275, + 0.007629465125, 0.006782815125, 0.007626611625, 0.00686263625, 0.00865185, + 0.00765608975, 0.006820999, 0.01067880175, 0.013389152625, 0.012417540375, + 0.01283362775, 0.013069722625, 0.0085037835, 0.007403853875, 0.006577496875, + 0.007260755375, 0.006406379375, 0.006334173375, 0.007226516625, 0.0071006235, + 0.00658204275, 0.007658963, 0.007595737625, 0.008369632875, 0.01524457825, + 0.01443299125, 0.011445071125, 0.010447696625, 0.007851224125, 0.006844383375 + ] + } + }, + { + "size": 10, + "stats": { + "rme": 7.725102064182073, + "deviation": 0.005012722395663803, + "mean": 0.017809035980392157, + "variance": 0.000025127385815989456, + "moe": 0.0013757662061322025, + "sem": 0.0007019215337409196, + "sample": [ + 0.0153355876, 0.0150565056, 0.016687512800000002, 0.0141886928, 0.016017471, + 0.0252713694, 0.0304281134, 0.0241396694, 0.0161108368, 0.0140723834, 0.0158514908, + 0.0138268142, 0.0145183972, 0.0129342854, 0.015370398399999999, 0.012952317999999999, + 0.015015609599999999, 0.0135938712, 0.021212686, 0.025169208399999997, + 0.025974992600000003, 0.0217217026, 0.013928074200000001, 0.013382038199999998, + 0.013754995, 0.013072167, 0.0201330126, 0.018340424, 0.014269800199999998, + 0.014669332600000001, 0.0280230892, 0.0212331338, 0.0254651668, 0.0262337508, + 0.0159697522, 0.014009626399999999, 0.0148521726, 0.0150008298, 0.016571361, + 0.0142225764, 0.0150954334, 0.015482556, 0.024903210000000002, 0.0255914266, + 0.027435404000000004, 0.0208395636, 0.0147164342, 0.0139507414, 0.015474164600000001, + 0.012805972600000002, 0.0133847092 + ] + } + }, + { + "size": 20, + "stats": { + "rme": 7.706571550596003, + "deviation": 0.009618758998436368, + "mean": 0.03606907327173913, + "variance": 0.00009252052467000059, + "moe": 0.002779688939323475, + "sem": 0.0014182086425119772, + "sample": [ + 0.0535175065, 0.0560606645, 0.0439089795, 0.0460493225, 0.037472929, 0.031148172, + 0.0305528595, 0.031626917, 0.026668294, 0.031983636, 0.026797478, 0.0588438515, + 0.034806729, 0.0398920685, 0.0297911415, 0.034529819, 0.0267543685, 0.0325386495, + 0.0290946105, 0.030144112, 0.028344417, 0.0259824145, 0.0270000555, 0.026588971, + 0.048901875, 0.0472573585, 0.047387821, 0.0396549675, 0.028906752666666664, + 0.028451720666666666, 0.03902135566666667, 0.03340420166666667, 0.027085803333333335, + 0.040464362, 0.06007030333333333, 0.034706196333333335, 0.03168342133333333, + 0.031121557666666664, 0.028060120999999997, 0.029686122, 0.028183035999999998, + 0.027468169333333334, 0.027891482666666665, 0.04315312033333333, 0.04672263766666667, + 0.04979701833333333 + ] + } + }, + { + "size": 30, + "stats": { + "rme": 10.727464773354011, + "deviation": 0.017497098953260567, + "mean": 0.05328117231944445, + "variance": 0.00030614847178019207, + "moe": 0.005715718991398452, + "sem": 0.0029161831588767613, + "sample": [ + 0.0437583345, 0.0563246925, 0.077170353, 0.0718714085, 0.051097012, 0.0435295165, + 0.0477552005, 0.0441354615, 0.0399841765, 0.052155323, 0.0822814725, 0.054768652, + 0.044760656, 0.0461335, 0.0388777875, 0.038741085, 0.039999193, 0.0406841055, + 0.0443862665, 0.0732636355, 0.077369141, 0.040346191, 0.0360389375, 0.0543973315, + 0.052894189, 0.0483386085, 0.042633904, 0.12246182, 0.0477536585, 0.0443786195, + 0.042991129, 0.0488636735, 0.0462491055, 0.0400063175, 0.0654493365, 0.076272409 + ] + } + }, + { + "size": 40, + "stats": { + "rme": 10.154886280070158, + "deviation": 0.01795866409980932, + "mean": 0.06857997207142856, + "variance": 0.00032251361624978007, + "moe": 0.006964218174757446, + "sem": 0.0033938685062170786, + "sample": [ + 0.061948325, 0.053533423, 0.068941853, 0.0521256985, 0.0986347685, 0.09762585, + 0.062746492, 0.060164327, 0.057635129, 0.057103704, 0.1023486995, 0.08781686, + 0.0573581915, 0.057519049, 0.0562060315, 0.055089347, 0.0600607655, 0.0996447495, + 0.0738273075, 0.0547735765, 0.0816252195, 0.0602613015, 0.059108246, 0.112424379, + 0.059699418, 0.0586908175, 0.0557466835, 0.0575790055 + ] + } + }, + { + "size": 50, + "stats": { + "rme": 9.50055320197502, + "deviation": 0.024013611717697836, + "mean": 0.08757692093750001, + "variance": 0.0005766535477283547, + "moe": 0.00832029196631879, + "sem": 0.004245046921591219, + "sample": [ + 0.079638462, 0.06851665, 0.07127316, 0.074230355, 0.070679754, 0.112661168, + 0.092338965, 0.141421397, 0.086956681, 0.104951542, 0.104799999, 0.117770659, + 0.124903024, 0.106731623, 0.07107002, 0.073123102, 0.070067264, 0.062828854, + 0.063511946, 0.096015056, 0.131979576, 0.078504255, 0.065441019, 0.098218105, + 0.068777288, 0.077960162, 0.078684761, 0.141218883, 0.0740446, 0.063999425, + 0.060809417, 0.069334298 + ] + } + }, + { + "size": 100, + "stats": { + "rme": 12.350350503376253, + "deviation": 0.044367325916488475, + "mean": 0.16812728559999998, + "variance": 0.0019684596089799096, + "moe": 0.02076430906341243, + "sem": 0.009920835672915638, + "sample": [ + 0.134376747, 0.13782974, 0.139861309, 0.251633224, 0.136193655, 0.137276661, + 0.198575206, 0.183625698, 0.132277407, 0.133466606, 0.144596417, 0.249094405, + 0.211936586, 0.142706633, 0.231570045, 0.13319439, 0.138165128, 0.130450134, + 0.159511609, 0.236204112 + ] + } + }, + { + "size": 250, + "stats": { + "rme": 13.589636274059865, + "deviation": 0.07939310774473976, + "mean": 0.4178953798999999, + "variance": 0.0063032655573678565, + "moe": 0.056790462134510666, + "sem": 0.025106305099253167, + "sample": [ + 0.348042196, 0.415641228, 0.498849248, 0.318846263, 0.384543239, 0.542469935, + 0.341740948, 0.462471858, 0.5059616, 0.360387284 + ] + } + }, + { + "size": 500, + "stats": { + "rme": 10.636435414630824, + "deviation": 0.09571277318851444, + "mean": 0.8322594625714286, + "variance": 0.009160934951436009, + "moe": 0.0885227402185636, + "sem": 0.03617602787844855, + "sample": [ + 0.907020954, 0.795681981, 0.700632592, 0.891420737, 0.936428737, 0.713890966, + 0.880740271 + ] + } + }, + { + "size": 1000, + "stats": { + "rme": 4.591701253826344, + "deviation": 0.07444284597715682, + "mean": 1.7016717745, + "variance": 0.005541737317178694, + "moe": 0.07813568420572552, + "sem": 0.030391164607438938, + "sample": [ + 1.7039705029999999, 1.697325038, 1.741995438, 1.651626935, 1.8159186470000002, + 1.599194086 + ] + } + } + ] + }, + { + "name": "Free v0.6.1", + "results": [ + { + "size": 1, + "stats": { + "rme": 8.735495607850144, + "deviation": 0.0009566537064906855, + "mean": 0.0026223211565734547, + "variance": 9.151863141423666e-7, + "moe": 0.00022907274945619923, + "sem": 0.00011687385176336695, + "sample": [ + 0.0020955884444444446, 0.0018656194074074073, 0.002529691259259259, + 0.0021241020344827588, 0.0020203787586206895, 0.002130749620689655, + 0.002371468068965517, 0.0019209316206896551, 0.0020771012068965516, + 0.002195536379310345, 0.002683446551724138, 0.00276548675862069, 0.003850824068965517, + 0.005843688344827586, 0.0033190352413793108, 0.002710146896551724, + 0.0018057851724137932, 0.0021272292068965516, 0.0021996894827586207, + 0.002130506655172414, 0.0023403379655172413, 0.0021488980344827584, + 0.0021472244827586205, 0.0018417698965517242, 0.0020753954137931034, + 0.0023167177586206895, 0.0021568740344827587, 0.002185456482758621, + 0.002152681103448276, 0.004005337482758621, 0.004282362, 0.004819472448275862, + 0.003409247724137931, 0.0018264066551724138, 0.002665114896551724, + 0.0021419237931034484, 0.0019223060689655173, 0.0020705038275862066, + 0.0021531744827586207, 0.0023007536896551724, 0.0022768282068965514, + 0.002136213620689655, 0.0020925898620689654, 0.002168903689655172, + 0.002200590655172414, 0.0027934569310344827, 0.0035478274827586203, + 0.0038080423793103446, 0.004510914379310345, 0.0022261902758620687, + 0.0019695676896551726, 0.002158820068965517, 0.0025900539655172414, + 0.002469301793103448, 0.002252531344827586, 0.002262223931034483, + 0.0023901802758620693, 0.0018454185862068965, 0.0026553313103448275, + 0.002307572655172414, 0.0018179567931034483, 0.0020985635862068967, + 0.006788606655172414, 0.003389774344827586, 0.0038639349999999998, + 0.003183958689655172, 0.0021611998965517243 + ] + } + }, + { + "size": 2, + "stats": { + "rme": 7.425364870592388, + "deviation": 0.001389851269889524, + "mean": 0.004992403978557506, + "variance": 0.0000019316865524135227, + "moe": 0.0003707042112218658, + "sem": 0.0001891348016438091, + "sample": [ + 0.00433391447368421, 0.0036924764736842104, 0.005039807263157894, + 0.0038711637894736843, 0.003785189157894737, 0.004665331631578948, + 0.0038113532631578943, 0.006948522684210527, 0.008406592368421053, + 0.007226863947368421, 0.005908266578947369, 0.004034722947368422, + 0.004613224210526315, 0.004631820578947368, 0.0039423023157894735, + 0.003959305631578948, 0.0041707787368421055, 0.006683196157894736, + 0.005235866263157894, 0.007722273947368421, 0.0077517455263157896, 0.007535821, + 0.0040905918421052625, 0.004090406315789474, 0.004850734947368421, + 0.004123789947368421, 0.0047673881052631584, 0.003976588368421053, + 0.003910656526315789, 0.003802081789473684, 0.0040315394736842106, + 0.0043445310000000004, 0.006752901315789473, 0.006806834842105263, + 0.004385266052631579, 0.0047505942105263155, 0.004526033789473684, + 0.0038881441052631576, 0.004701974473684211, 0.0038686012105263157, + 0.004726458105263158, 0.004186599684210527, 0.0037967417368421053, + 0.004304542105263158, 0.003780593631578947, 0.004321067684210526, + 0.004803945947368421, 0.008202262578947368, 0.0075778706842105255, + 0.007233411684210527, 0.0041867741052631574, 0.004817490157894737, + 0.003955017263157895, 0.004057842210526316 + ] + } + }, + { + "size": 3, + "stats": { + "rme": 7.818079311734423, + "deviation": 0.0024533241683735835, + "mean": 0.008293342320661156, + "variance": 0.000006018799475125935, + "moe": 0.0006483800802229254, + "sem": 0.00033080616337904353, + "sample": [ + 0.007715665272727273, 0.006691219909090909, 0.009536494909090908, + 0.012466559727272728, 0.015551666363636363, 0.008428253454545455, + 0.006497179363636364, 0.006676447454545455, 0.007738683, 0.006424513181818182, + 0.006203786454545454, 0.006773426181818182, 0.006854815181818182, + 0.006623254818181818, 0.007836115818181819, 0.006735657272727272, + 0.012413788727272728, 0.011738470272727274, 0.011840136272727274, + 0.009564534454545455, 0.006523656545454545, 0.006773622454545455, + 0.007748262909090909, 0.006434551, 0.0062835010909090905, 0.008475440363636365, + 0.009960866454545454, 0.007531812, 0.01247630309090909, 0.012289372545454546, + 0.011580511909090908, 0.005559322272727273, 0.0067570220000000005, + 0.007853614181818182, 0.007566773, 0.006594065272727273, 0.007756785454545454, + 0.006505442454545454, 0.006439621545454546, 0.006725699000000001, + 0.006427980636363636, 0.006781947636363636, 0.014187253363636364, + 0.011818953363636364, 0.01339631409090909, 0.005994947818181818, 0.006187887636363637, + 0.007747282818181819, 0.006794653727272727, 0.006239835454545455, + 0.007556421999999999, 0.0065077268181818184, 0.008079023636363637, + 0.007585268272727272, 0.008681416727272727 + ] + } + }, + { + "size": 4, + "stats": { + "rme": 12.701169866061129, + "deviation": 0.0062609242448788014, + "mean": 0.01409294857011145, + "variance": 0.00003919917240011119, + "moe": 0.0017899693370264883, + "sem": 0.0009132496617482083, + "sample": [ + 0.016302299, 0.0153141902, 0.018691561666666665, 0.021726643166666667, + 0.02383374016666667, 0.022520573833333335, 0.012472651500000001, 0.010737822833333334, + 0.032378145500000004, 0.024453183, 0.013092010333333334, 0.008409251833333334, + 0.010042404999999999, 0.008730090333333334, 0.011367661142857142, + 0.009380696142857142, 0.008572485285714285, 0.009742792857142857, 0.0087843215, + 0.010408286375, 0.010425794125, 0.016534163125, 0.018967704875, 0.015998863375, + 0.009054976375, 0.00882403525, 0.00873378675, 0.0091692505, 0.00969626775, + 0.01707087425, 0.014366886125, 0.012181811375, 0.01665274925, 0.020540483375, + 0.013379976, 0.009518771875, 0.010260218875, 0.008866679625, 0.00915245325, + 0.017044609375, 0.009406062875, 0.00949480225, 0.01163353925, 0.009095463125, + 0.02950122675, 0.029605849875, 0.0102304715 + ] + } + }, + { + "size": 5, + "stats": { + "rme": 8.212406091520275, + "deviation": 0.004054273117530343, + "mean": 0.01411398747416413, + "variance": 0.00001643713051152921, + "moe": 0.0011590979670846636, + "sem": 0.0005913765138187059, + "sample": [ + 0.011628745142857142, 0.011060291428571428, 0.012645932, 0.011123363857142857, + 0.013624806714285715, 0.012481165857142857, 0.010848137999999998, + 0.019532232142857143, 0.019588146, 0.022096629714285713, 0.011688781714285714, + 0.011006496285714287, 0.00989549442857143, 0.010210010571428571, 0.012205640142857143, + 0.012532384428571427, 0.01038633757142857, 0.010618129142857143, 0.010454493714285714, + 0.022168221285714284, 0.023165689, 0.021356801285714287, 0.010841319142857143, + 0.011466057714285714, 0.013299938428571427, 0.012848861285714287, + 0.011210453714285714, 0.012468572571428572, 0.011814883714285714, + 0.013782243285714285, 0.022042676714285715, 0.020105443857142857, 0.018435007, + 0.010751906285714286, 0.012512181428571429, 0.01200722957142857, 0.010977499142857143, + 0.010876453714285713, 0.011031800714285714, 0.011455988571428571, + 0.011939975142857143, 0.015216491142857143, 0.019556211142857143, + 0.019726451142857145, 0.017603454571428572, 0.013664983285714286, 0.017403397571428572 + ] + } + }, + { + "size": 10, + "stats": { + "rme": 7.947330558829363, + "deviation": 0.00812604676526758, + "mean": 0.029232447773049647, + "variance": 0.0000660326360313157, + "moe": 0.002323199254961408, + "sem": 0.0011853057423272491, + "sample": [ + 0.023793245666666667, 0.022935259, 0.04110835166666667, 0.04466183466666667, + 0.043419083, 0.028256005333333334, 0.032543671, 0.034962919, 0.026909962, + 0.019311464333333334, 0.024704298333333333, 0.023482615, 0.023595377666666667, + 0.042146038999999996, 0.04136304166666666, 0.041781387333333336, 0.022579242, + 0.023910048333333333, 0.023442612, 0.022252115666666666, 0.022434303, + 0.022368066000000002, 0.023281198, 0.023745237333333336, 0.027218427, + 0.04140027266666667, 0.047759237333333336, 0.03658436633333333, 0.027291862, + 0.024005816333333332, 0.024051928, 0.024838596666666667, 0.024482752333333333, + 0.025980266333333335, 0.023756612333333333, 0.028870564666666668, 0.04294748566666667, + 0.04240571333333334, 0.03841554966666667, 0.022181169333333334, 0.022309317999999998, + 0.02362528, 0.023840755666666668, 0.028913448999999997, 0.022075289666666668, + 0.024863383, 0.027119572999999998 + ] + } + }, + { + "size": 20, + "stats": { + "rme": 9.735594210810671, + "deviation": 0.016351752905118123, + "mean": 0.05730611321212121, + "variance": 0.000267379823070039, + "moe": 0.005579090640319881, + "sem": 0.0028464748164897355, + "sample": [ + 0.047023444, 0.046665262, 0.0410628815, 0.054078925, 0.0827015895, 0.092110298, + 0.0444540465, 0.0499588435, 0.0510650785, 0.050105707, 0.054908508, 0.0423508335, + 0.0808035785, 0.088324452, 0.0435506655, 0.046656712, 0.048802216, 0.046574263, + 0.04706927, 0.047818905, 0.0819365365, 0.089234723, 0.0451651, 0.051703877, + 0.0505865645, 0.04421551, 0.0548140045, 0.072237225, 0.0869740025, 0.065018285, + 0.047280471, 0.048760993, 0.047088965 + ] + } + }, + { + "size": 30, + "stats": { + "rme": 13.16248123472712, + "deviation": 0.031191444258079452, + "mean": 0.08691057238709678, + "variance": 0.0009729061949048777, + "moe": 0.011439587781445543, + "sem": 0.005602148766623675, + "sample": [ + 0.11926241, 0.067748954, 0.061724908, 0.072512068, 0.070728528, 0.103643227, + 0.197218609, 0.05899976, 0.071443569, 0.071475331, 0.066897424, 0.069460348, + 0.123696606, 0.13447981, 0.067805337, 0.077600224, 0.069551614, 0.066981554, + 0.078830698, 0.068518609, 0.136488067, 0.108775969, 0.071753832, 0.088489817, + 0.070683602, 0.057028387, 0.074017175, 0.103509191, 0.127321987, 0.072954395, + 0.064625734 + ] + } + }, + { + "size": 40, + "stats": { + "rme": 10.160949974211668, + "deviation": 0.029674049844853164, + "mean": 0.11798398346153846, + "variance": 0.0008805492341948301, + "moe": 0.01198829353710909, + "sem": 0.005819559969470432, + "sample": [ + 0.106159246, 0.170857273, 0.16779246, 0.080159511, 0.096521862, 0.112620671, + 0.10880461, 0.159199304, 0.104848399, 0.099269197, 0.101624198, 0.111553043, + 0.130396229, 0.15776688, 0.083418699, 0.095085137, 0.092582159, 0.09259612, + 0.146446048, 0.159002953, 0.098240989, 0.103568975, 0.103764356, 0.085972297, + 0.171940048, 0.127392906 + ] + } + }, + { + "size": 50, + "stats": { + "rme": 14.783163333725607, + "deviation": 0.048424507340925654, + "mean": 0.14910853128571433, + "variance": 0.0023449329112113625, + "moe": 0.022042957724486497, + "sem": 0.010567093827654122, + "sample": [ + 0.121349164, 0.287252768, 0.12214752, 0.117203518, 0.132483847, 0.149707656, + 0.219795889, 0.128877257, 0.122001759, 0.118606955, 0.167654218, 0.180322859, + 0.104897646, 0.103980143, 0.106387738, 0.222442909, 0.113075679, 0.117344618, + 0.136293826, 0.156353086, 0.203100102 + ] + } + }, + { + "size": 100, + "stats": { + "rme": 16.58436723404181, + "deviation": 0.08135815857088013, + "mean": 0.28319914492857146, + "variance": 0.0066191499660444774, + "moe": 0.04696678619862058, + "sem": 0.021743882499361378, + "sample": [ + 0.241140618, 0.522856359, 0.255340978, 0.403915428, 0.226795616, 0.273281908, + 0.24798883, 0.238580854, 0.244519068, 0.243925316, 0.279532547, 0.24996972, + 0.254406424, 0.282534363 + ] + } + }, + { + "size": 250, + "stats": { + "rme": 15.127904640763463, + "deviation": 0.12337313508844795, + "mean": 0.6819114366249999, + "variance": 0.015220930461552427, + "moe": 0.10315891186709016, + "sem": 0.04361899021864277, + "sample": [ + 0.580810989, 0.623433496, 0.566602574, 0.638241133, 0.597745983, 0.831866849, + 0.718333754, 0.898256715 + ] + } + }, + { + "size": 500, + "stats": { + "rme": 5.927369456192178, + "deviation": 0.07762787557965846, + "mean": 1.374618405666667, + "variance": 0.0060260870670109335, + "moe": 0.08147871151668191, + "sem": 0.03169144749773703, + "sample": [ + 1.437946988, 1.457550383, 1.236967027, 1.365965037, 1.385114976, 1.3641660230000001 + ] + } + }, + { + "size": 1000, + "stats": { + "rme": 4.371357697406755, + "deviation": 0.10690735268748533, + "mean": 3.036167239, + "variance": 0.011429182058646377, + "moe": 0.13272173030816867, + "sem": 0.0478104215807524, + "sample": [3.189855874, 3.038351118, 3.07570966, 2.911676746, 2.965242797] + } + } + ] + } + ] +} diff --git a/benchmark/right-bind-large.json b/benchmark/right-bind-large.json index 037a784..3e45d11 100644 --- a/benchmark/right-bind-large.json +++ b/benchmark/right-bind-large.json @@ -1 +1,187 @@ -{"slug":"right-bind-large","title":"Right associated binds (large - 1 input per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":100000,"stats":{"rme":54.087295923035704,"deviation":1.8690243264338895,"mean":3.6269881435,"variance":3.4932519328016545,"moe":1.9617398102682642,"sem":0.7630259861020086,"sample":[5.281779364,3.876533873,4.146684662,5.69766806,1.437201473,1.3220614290000001]}},{"size":500000,"stats":{"rme":9.095733345571979,"deviation":0.4832989570916459,"mean":6.5964852806,"variance":0.2335778819258726,"moe":0.5999987113032814,"sem":0.21613786430233484,"sample":[6.668239242,6.455364192,6.189816145,6.273004219,7.396002605]}},{"size":1000000,"stats":{"rme":106.2412908346505,"deviation":29.723291913434345,"mean":34.732658606600005,"variance":883.4740821712314,"moe":36.90042484484418,"sem":13.292660246701796,"sample":[86.417579438,26.53633886,30.405841321,12.933476041,17.370057373]}},{"size":1500000,"stats":{"rme":80.78978903813764,"deviation":22.862576656977367,"mean":35.1320231442,"variance":522.6974113961664,"moe":28.38308738302887,"sem":10.224455109160257,"sample":[75.986347276,26.652435758,24.502746679,23.814094452,24.704491556]}},{"size":2000000,"stats":{"rme":110.06860459297802,"deviation":48.66134956373595,"mean":54.88518701019999,"variance":2367.9269413641055,"moe":60.41135947037357,"sem":21.762017100278666,"sample":[141.928692781,32.633208799,33.335225074,32.686487232,33.842321165]}},{"size":2500000,"stats":{"rme":19.896515123974336,"deviation":10.768351141944862,"mean":67.1903111322,"variance":115.95738631622523,"moe":13.368530416263583,"sem":4.815753031795239,"sample":[86.415585599,61.944501873,62.188354209,63.532956893,61.870157087]}},{"size":3000000,"stats":{"rme":23.62213954568086,"deviation":14.3778362784687,"mean":75.5629253404,"variance":206.72217605045068,"moe":17.849579668707932,"sem":6.429963857603722,"sample":[101.218426417,69.005205535,68.416595675,68.323939027,70.850460048]}}]},{"name":"Free v0.6.1","results":[{"size":100000,"stats":{"rme":18.878076393195613,"deviation":0.4188978423226622,"mean":2.7547668221999997,"variance":0.17547540230258196,"moe":0.5200469851493231,"sem":0.1873368102122922,"sample":[2.554999252,3.373539042,2.994936612,2.470887744,2.379471461]}},{"size":500000,"stats":{"rme":51.34404443791469,"deviation":13.82934089387188,"mean":33.4384290648,"variance":191.25066955891708,"moe":17.168641878371492,"sem":6.184669264543046,"sample":[22.457426975,18.358243998,31.781299748,43.417530726,51.177643877]}},{"size":1000000,"stats":{"rme":41.69794488612991,"deviation":37.64926458466703,"mean":112.0924356536,"variance":1417.467123766263,"moe":46.740242040358766,"sem":16.837262982838173,"sample":[60.66906026,106.215801135,163.490892977,127.922547106,102.16387679]}},{"size":1500000,"stats":{"rme":37.776962318228655,"deviation":44.32251312700119,"mean":145.6571486226,"variance":1964.4851698931925,"moe":55.024846148965906,"sem":19.821630457120285,"sample":[114.222053676,185.001896583,112.832185496,202.465123576,113.764483782]}},{"size":2000000,"stats":{"rme":2.687159022907891,"deviation":4.5836016441445055,"mean":211.7619648372,"variance":21.009404032204213,"moe":5.690380745209855,"sem":2.049848971617383,"sample":[206.129960633,218.619070512,211.290322438,212.933128983,209.83734162]}},{"size":2500000,"stats":{"rme":12.091860499318567,"deviation":28.917991358352097,"mean":296.8994923542,"variance":836.2502242017266,"moe":35.90067243865486,"sem":12.932518890005353,"sample":[247.527512002,310.007200229,323.042127184,301.276455565,302.644166791]}},{"size":3000000,"stats":{"rme":20.086417850008097,"deviation":70.01060986055948,"mean":432.7088995982,"variance":4901.4854930474685,"moe":86.91571764746647,"sem":31.309696558885616,"sample":[368.304993303,502.205225384,389.881487887,515.145993456,388.006797961]}}]}]} +{ + "slug": "right-bind-large", + "title": "Right associated binds (large - 1 input per size)", + "sizeInterpretation": "Number of binds", + "series": [ + { + "name": "Free", + "results": [ + { + "size": 100000, + "stats": { + "rme": 54.087295923035704, + "deviation": 1.8690243264338895, + "mean": 3.6269881435, + "variance": 3.4932519328016545, + "moe": 1.9617398102682642, + "sem": 0.7630259861020086, + "sample": [ + 5.281779364, 3.876533873, 4.146684662, 5.69766806, 1.437201473, 1.3220614290000001 + ] + } + }, + { + "size": 500000, + "stats": { + "rme": 9.095733345571979, + "deviation": 0.4832989570916459, + "mean": 6.5964852806, + "variance": 0.2335778819258726, + "moe": 0.5999987113032814, + "sem": 0.21613786430233484, + "sample": [6.668239242, 6.455364192, 6.189816145, 6.273004219, 7.396002605] + } + }, + { + "size": 1000000, + "stats": { + "rme": 106.2412908346505, + "deviation": 29.723291913434345, + "mean": 34.732658606600005, + "variance": 883.4740821712314, + "moe": 36.90042484484418, + "sem": 13.292660246701796, + "sample": [86.417579438, 26.53633886, 30.405841321, 12.933476041, 17.370057373] + } + }, + { + "size": 1500000, + "stats": { + "rme": 80.78978903813764, + "deviation": 22.862576656977367, + "mean": 35.1320231442, + "variance": 522.6974113961664, + "moe": 28.38308738302887, + "sem": 10.224455109160257, + "sample": [75.986347276, 26.652435758, 24.502746679, 23.814094452, 24.704491556] + } + }, + { + "size": 2000000, + "stats": { + "rme": 110.06860459297802, + "deviation": 48.66134956373595, + "mean": 54.88518701019999, + "variance": 2367.9269413641055, + "moe": 60.41135947037357, + "sem": 21.762017100278666, + "sample": [141.928692781, 32.633208799, 33.335225074, 32.686487232, 33.842321165] + } + }, + { + "size": 2500000, + "stats": { + "rme": 19.896515123974336, + "deviation": 10.768351141944862, + "mean": 67.1903111322, + "variance": 115.95738631622523, + "moe": 13.368530416263583, + "sem": 4.815753031795239, + "sample": [86.415585599, 61.944501873, 62.188354209, 63.532956893, 61.870157087] + } + }, + { + "size": 3000000, + "stats": { + "rme": 23.62213954568086, + "deviation": 14.3778362784687, + "mean": 75.5629253404, + "variance": 206.72217605045068, + "moe": 17.849579668707932, + "sem": 6.429963857603722, + "sample": [101.218426417, 69.005205535, 68.416595675, 68.323939027, 70.850460048] + } + } + ] + }, + { + "name": "Free v0.6.1", + "results": [ + { + "size": 100000, + "stats": { + "rme": 18.878076393195613, + "deviation": 0.4188978423226622, + "mean": 2.7547668221999997, + "variance": 0.17547540230258196, + "moe": 0.5200469851493231, + "sem": 0.1873368102122922, + "sample": [2.554999252, 3.373539042, 2.994936612, 2.470887744, 2.379471461] + } + }, + { + "size": 500000, + "stats": { + "rme": 51.34404443791469, + "deviation": 13.82934089387188, + "mean": 33.4384290648, + "variance": 191.25066955891708, + "moe": 17.168641878371492, + "sem": 6.184669264543046, + "sample": [22.457426975, 18.358243998, 31.781299748, 43.417530726, 51.177643877] + } + }, + { + "size": 1000000, + "stats": { + "rme": 41.69794488612991, + "deviation": 37.64926458466703, + "mean": 112.0924356536, + "variance": 1417.467123766263, + "moe": 46.740242040358766, + "sem": 16.837262982838173, + "sample": [60.66906026, 106.215801135, 163.490892977, 127.922547106, 102.16387679] + } + }, + { + "size": 1500000, + "stats": { + "rme": 37.776962318228655, + "deviation": 44.32251312700119, + "mean": 145.6571486226, + "variance": 1964.4851698931925, + "moe": 55.024846148965906, + "sem": 19.821630457120285, + "sample": [114.222053676, 185.001896583, 112.832185496, 202.465123576, 113.764483782] + } + }, + { + "size": 2000000, + "stats": { + "rme": 2.687159022907891, + "deviation": 4.5836016441445055, + "mean": 211.7619648372, + "variance": 21.009404032204213, + "moe": 5.690380745209855, + "sem": 2.049848971617383, + "sample": [206.129960633, 218.619070512, 211.290322438, 212.933128983, 209.83734162] + } + }, + { + "size": 2500000, + "stats": { + "rme": 12.091860499318567, + "deviation": 28.917991358352097, + "mean": 296.8994923542, + "variance": 836.2502242017266, + "moe": 35.90067243865486, + "sem": 12.932518890005353, + "sample": [247.527512002, 310.007200229, 323.042127184, 301.276455565, 302.644166791] + } + }, + { + "size": 3000000, + "stats": { + "rme": 20.086417850008097, + "deviation": 70.01060986055948, + "mean": 432.7088995982, + "variance": 4901.4854930474685, + "moe": 86.91571764746647, + "sem": 31.309696558885616, + "sample": [368.304993303, 502.205225384, 389.881487887, 515.145993456, 388.006797961] + } + } + ] + } + ] +} diff --git a/benchmark/right-bind-small.json b/benchmark/right-bind-small.json index 9e6f054..2514242 100644 --- a/benchmark/right-bind-small.json +++ b/benchmark/right-bind-small.json @@ -1 +1,656 @@ -{"slug":"right-bind-small","title":"Right associated binds (small - 100 inputs per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":1,"stats":{"rme":7.704460777626861,"deviation":0.0007505377155810193,"mean":0.0022195783701898755,"variance":5.633068625095749e-7,"moe":0.00017100654495996848,"sem":0.00008724823722447371,"sample":[0.0035089712352941176,0.003134843705882353,0.0030993049411764707,0.003162290823529412,0.0031066262352941174,0.003283377117647059,0.0024244792272727273,0.0025544020454545454,0.0019203925625,0.00164292096875,0.00184587978125,0.00176719078125,0.0017404609375,0.00206512325,0.00172203125,0.0017758324375,0.0030416393125,0.0032566055,0.00303043171875,0.00524580328125,0.00194093696875,0.00165668909375,0.0017035624375,0.00169564909375,0.0019969241875,0.00165752775,0.00195390546875,0.00168574865625,0.00158028315625,0.0016063041875,0.0018594273125,0.0016014646875,0.0016703321875,0.0015883225625,0.002160341,0.003133980125,0.003121307375,0.00354297946875,0.0031388316875,0.0025274413125,0.00166572265625,0.00192044334375,0.001697606125,0.001602374125,0.00168569746875,0.00282055840625,0.00237691709375,0.001832713125,0.00200375040625,0.0017499844375,0.00169691584375,0.00171004571875,0.00364988628125,0.0031790318125,0.00363037075,0.00209988009375,0.0020072328125,0.00182352865625,0.00170472853125,0.0020416220625,0.0017288809375,0.00159235465625,0.00161850296875,0.0016176331875,0.001862903125,0.00160569353125,0.0015903550625,0.00158980853125,0.00182953125,0.00160286703125,0.00158748296875,0.0016396495625,0.00318921284375,0.00314434815625]}},{"size":2,"stats":{"rme":8.797687508591961,"deviation":0.0011581096613747077,"mean":0.0033878426206896553,"variance":0.00000134121798776944,"moe":0.0002980518070511684,"sem":0.00015206724849549407,"sample":[0.003018620346153846,0.002941966730769231,0.0028795218076923075,0.0026594295,0.0029657726923076927,0.002284440923076923,0.0026264388076923076,0.002719698346153846,0.0023031183846153845,0.0025259361923076922,0.0028332740769230766,0.0036052478461538464,0.004728487730769231,0.004805714730769231,0.004911727846153846,0.005518223769230769,0.002938460846153846,0.003085229,0.002497338692307692,0.002720285769230769,0.003094409269230769,0.0025067452307692304,0.0027481880000000004,0.0031060203076923075,0.0024519119230769233,0.004792431038461538,0.0049648078461538465,0.0046106870000000005,0.0047739035769230765,0.002656160423076923,0.002274262230769231,0.002615494230769231,0.002536907153846154,0.0026237140384615387,0.002513045653846154,0.0025459897692307696,0.002596843192307692,0.002618533769230769,0.002760327576923077,0.0022718257307692306,0.003028585961538461,0.005038789423076923,0.004790715192307692,0.004844190038461539,0.0042751497307692305,0.0025491355384615385,0.002855123269230769,0.002458791846153846,0.0035457120769230768,0.004178023038461539,0.0025913085000000002,0.0025461178076923077,0.0032069025,0.0024854294615384615,0.003670297846153846,0.007154756230769231,0.0067633436153846154,0.004881357923076923]}},{"size":3,"stats":{"rme":7.605326051920093,"deviation":0.0013123583184039905,"mean":0.004440957993965517,"variance":0.0000017222843558841498,"moe":0.00033774933526988746,"sem":0.00017232108942341197,"sample":[0.0043592054,0.00380170085,0.0042836932,0.0037151070500000003,0.00394893745,0.0034724023499999998,0.0034517388500000003,0.0038941532,0.0064975968,0.00667859435,0.006524074100000001,0.00628962775,0.0033668863,0.0036153677,0.0033223579500000003,0.0035956029,0.00332458255,0.00376543215,0.00301945115,0.0033958192999999997,0.0032351356,0.0033458061,0.0044855949499999995,0.006451159099999999,0.0066386281,0.006883821850000001,0.006955210450000001,0.0038363952,0.00405262195,0.0036161781,0.0041636683,0.0036449583,0.0041571238500000005,0.0032904237500000003,0.0032482004000000003,0.00417390115,0.006826109049999999,0.0067577780500000005,0.00619859625,0.00482228935,0.0035014736499999997,0.0037568839,0.0034094402500000004,0.0034927013,0.0033515988500000004,0.00391500935,0.0033213555499999998,0.0036374898,0.00302672005,0.0033730903,0.00550067485,0.00647791035,0.006676509799999999,0.0065860188,0.0044068202,0.00338411645,0.00388374045,0.004768078550000001]}},{"size":4,"stats":{"rme":7.490313749546636,"deviation":0.0015340695773533586,"mean":0.005412772505882353,"variance":0.0000023533694681611124,"moe":0.0004054336432397859,"sem":0.00020685389961213566,"sample":[0.00548032094117647,0.004205924764705883,0.004538072058823529,0.0070462041764705885,0.008133751411764705,0.007223730823529412,0.005418183,0.004413393,0.004467297352941177,0.0042981795294117645,0.004940822882352942,0.0040322380000000005,0.004768893647058824,0.0043468259411764704,0.004776258294117647,0.004164356882352942,0.004690594529411765,0.00783709505882353,0.008658761823529412,0.00788729805882353,0.0067524785294117646,0.004080025588235294,0.004593448941176471,0.004202069235294118,0.004644605411764706,0.004095442470588235,0.004650374411764706,0.00409692205882353,0.004851706235294117,0.004117511411764706,0.005270940823529411,0.007817452823529412,0.008732942529411765,0.008813404235294118,0.007022877941176471,0.0044720488235294115,0.005136848470588235,0.004520101411764706,0.005064210529411765,0.004433721117647059,0.004648721235294118,0.004454701764705882,0.00475238705882353,0.0068690546470588235,0.008396555529411764,0.00807476282352941,0.0073270962352941175,0.0044509717647058826,0.0042523544117647055,0.0044374034705882345,0.004249918294117647,0.004157248058823529,0.004364183647058824,0.004299000941176471,0.004270792764705883]}},{"size":5,"stats":{"rme":8.973520990063651,"deviation":0.002564253303266562,"mean":0.006947002156177156,"variance":0.000006575395003313474,"moe":0.0006233906966647315,"sem":0.0003180564778901691,"sample":[0.011425768000000001,0.009587194333333333,0.006069359636363636,0.005399457727272727,0.0055667952727272724,0.004729869818181818,0.004901619181818182,0.0055265158181818175,0.005071994090909091,0.005655958909090909,0.005330675272727272,0.0047710770909090905,0.005165559363636363,0.005235509545454545,0.011767157636363636,0.010928307,0.01748420609090909,0.00622441,0.005886449181818182,0.0060287149090909094,0.005256574181818182,0.006112790909090909,0.005401489181818182,0.005765665272727274,0.006268045363636363,0.006031130272727273,0.006123097272727273,0.004867904545454545,0.0051422940909090905,0.010322879727272728,0.010203017363636364,0.010562950636363637,0.010065044181818182,0.00645070890909091,0.005378691,0.004780349636363636,0.005590243,0.005331323090909091,0.005587577272727273,0.005226731636363636,0.0047914814545454544,0.005043236,0.0050886765454545456,0.006283568272727274,0.004740854545454545,0.0059524975454545445,0.010459980636363636,0.009383456545454546,0.011655961727272728,0.010279216090909092,0.006469623181818182,0.005923633818181818,0.006034323727272728,0.006109150545454545,0.005451708363636364,0.005225693909090909,0.006082058,0.0051885636363636365,0.0060923264545454546,0.00598305890909091,0.005408644181818182,0.010415841818181818,0.009432808272727272,0.010788063909090909,0.010045605636363636]}},{"size":10,"stats":{"rme":8.243987229853005,"deviation":0.004069835733822465,"mean":0.012288526118279566,"variance":0.000016563562900298246,"moe":0.0010130645239281185,"sem":0.0005168696550653666,"sample":[0.010427078166666666,0.009699611833333333,0.0097266475,0.011078544333333334,0.009968352,0.010317109833333333,0.008972092666666666,0.009821328833333334,0.014142923166666667,0.0169461855,0.019127543,0.018799904166666666,0.014861192166666667,0.009797956,0.010555280166666667,0.0087135815,0.008678274833333334,0.010587038333333333,0.008766382166666666,0.010457045833333333,0.009957088333333334,0.010473930166666666,0.009701571666666667,0.013528087166666668,0.025919854000000003,0.013914227500000001,0.019232438833333334,0.009325588000000001,0.011599775666666666,0.0106954305,0.011087367333333334,0.010654643833333333,0.012434296833333332,0.009349475833333334,0.010592363,0.010270395,0.008900962333333333,0.010197332333333333,0.010174104833333334,0.019437778666666666,0.018550473833333334,0.020893846999999997,0.01625391,0.009212485666666667,0.009997678,0.009275375333333334,0.010771366833333332,0.010796766833333332,0.0102907295,0.009842959833333333,0.0114099365,0.008713104666666667,0.008748367666666666,0.0102321875,0.013038761666666667,0.019204465166666667,0.02030639366666667,0.0226447005,0.011732622333333333,0.012304725,0.009354576166666666,0.009422401833333333]}},{"size":20,"stats":{"rme":9.971814530996312,"deviation":0.009177502528283773,"mean":0.02410529098214286,"variance":0.00008422655265665503,"moe":0.0024037349088962654,"sem":0.001226395361681768,"sample":[0.025246188,0.018536792666666666,0.022383540666666663,0.037464779,0.038880633,0.029770390666666664,0.019568938,0.02080895,0.021160976666666668,0.021826842,0.022767613000000003,0.021377315999999997,0.02163701733333333,0.017960504999999998,0.019600624,0.018452517666666664,0.019591975333333334,0.03258337066666667,0.03672714433333333,0.032812186,0.030603583333333333,0.018715184,0.019588279,0.019621269,0.019543332666666666,0.019752623333333334,0.019593460666666666,0.018789024666666668,0.023986285333333333,0.01995129,0.03157523366666667,0.052520737000000005,0.06409276900000001,0.02192390666666667,0.018697601333333334,0.018229182,0.018232671333333336,0.018082944666666666,0.018026357666666666,0.019154498,0.017366062666666664,0.018345623666666668,0.017839880333333332,0.030149543666666667,0.03533089266666667,0.03520396333333333,0.035792827,0.01679248066666667,0.018900740333333332,0.021403931666666667,0.016670619333333334,0.019516000333333335,0.016712015333333333,0.01939898866666667,0.0203158545,0.0203183375]}},{"size":30,"stats":{"rme":8.88051971142423,"deviation":0.010580491567385459,"mean":0.03561142122480619,"variance":0.0001119468018075148,"moe":0.0031624792813872257,"sem":0.0016135098374424621,"sample":[0.05021942,0.059386974,0.054334604,0.0298808465,0.028166503,0.0258802115,0.0444307025,0.032558055,0.035071534,0.0304158905,0.031151268,0.052188048,0.0545426285,0.0296259405,0.030747472,0.031411287,0.0265221135,0.0250144675,0.028966891999999998,0.02442775833333333,0.025922848999999998,0.028052504333333336,0.05188005666666667,0.050788968999999996,0.03785630833333333,0.028009071333333333,0.030665226333333333,0.026646518999999997,0.028059162666666665,0.029551870999999997,0.031688878999999996,0.04475686833333333,0.05894428733333334,0.03831296033333333,0.029153989333333335,0.026364612,0.029429788999999998,0.03245890766666667,0.027197067000000002,0.028124913666666668,0.028211313666666668,0.04697510933333333,0.047297262]}},{"size":40,"stats":{"rme":9.0107428201209,"deviation":0.013293909781262674,"mean":0.04572126190000001,"variance":0.0001767280372723514,"moe":0.004119825323922924,"sem":0.0021019516958790427,"sample":[0.057775949,0.040375939,0.0381016985,0.0337914865,0.038737636,0.066665047,0.06479226,0.0424483095,0.033935284,0.0396928495,0.048854401,0.034705951,0.041926193,0.0361393875,0.0749938005,0.0666354635,0.0408895535,0.0382929815,0.0342886275,0.038884756,0.0368584585,0.034259232,0.039120847,0.0348063175,0.06487681,0.064570578,0.061574217,0.0378892525,0.035346552,0.034917172,0.0375259565,0.0349591165,0.059620324,0.0651945875,0.0784410655,0.043160427,0.0365856765,0.0414708065,0.0393388825,0.036406623]}},{"size":50,"stats":{"rme":9.856656434903488,"deviation":0.01699660092223415,"mean":0.05796276189705882,"variance":0.00028888444290969074,"moe":0.005713190300374235,"sem":0.0029148930103950177,"sample":[0.0799070955,0.08635615,0.043826863,0.048286937,0.049039318,0.046135064,0.048054149,0.0392158185,0.08080838,0.080535742,0.0432076985,0.059749639,0.057265324,0.051472864,0.046661772,0.088893283,0.082193643,0.0439753385,0.0481696355,0.0453956165,0.044717335,0.049758077,0.043736013,0.0862403235,0.082229993,0.049849956,0.0484996945,0.0405229395,0.0435427665,0.0621417375,0.059570232,0.092393926,0.0474217955,0.0509587845]}},{"size":100,"stats":{"rme":10.598729540513759,"deviation":0.02888947285348556,"mean":0.11012003830769229,"variance":0.0008346016417522792,"moe":0.01167132503014245,"sem":0.005665691762205073,"sample":[0.109795123,0.093012896,0.087663311,0.079467221,0.085467714,0.099061999,0.172106353,0.147022522,0.097199154,0.103231442,0.093896955,0.1296147,0.171625715,0.098705321,0.086099783,0.085575579,0.086617461,0.088275248,0.166416994,0.102815137,0.085632,0.094097981,0.133649684,0.12552322,0.144130033,0.09641745]}},{"size":250,"stats":{"rme":15.101156319616905,"deviation":0.07527989917267376,"mean":0.287778642,"variance":0.005667063219447928,"moe":0.0434579025828907,"sem":0.02011939934393088,"sample":[0.211692694,0.404948578,0.257337788,0.397895768,0.216839293,0.223181616,0.331340933,0.272198181,0.396144407,0.239161019,0.212903094,0.274909739,0.225289073,0.365058805]}},{"size":500,"stats":{"rme":18.044132743426726,"deviation":0.13709837680181677,"mean":0.5840289128888889,"variance":0.018795964921692932,"moe":0.10538295230166317,"sem":0.045699458933938925,"sample":[0.689517485,0.692970613,0.472270853,0.434486908,0.480063827,0.439246742,0.636238883,0.586570984,0.824893921]}},{"size":1000,"stats":{"rme":6.496402235977254,"deviation":0.0803545247623788,"mean":1.1439903975714285,"variance":0.006456849649787746,"moe":0.07431821776719537,"sem":0.0303711556057194,"sample":[1.139697177,0.993256243,1.195161198,1.259478571,1.140791752,1.139525828,1.140022014]}}]},{"name":"Free v0.6.1","results":[{"size":1,"stats":{"rme":9.613658371050049,"deviation":0.0010749209423115723,"mean":0.00273939036214754,"variance":0.0000011554550322199985,"moe":0.0002633556308663352,"sem":0.00013436511778894654,"sample":[0.0037082834375,0.003701989,0.004635319125,0.002062978724137931,0.002443546724137931,0.0020033744333333332,0.002021608066666667,0.002031163533333333,0.0021761443666666667,0.0019822987,0.0027873866,0.0031259976,0.0040078426666666665,0.003911531766666667,0.0034621040666666667,0.0022085286,0.002207278433333333,0.0023458284333333335,0.0021427892666666666,0.0021702572999999998,0.0022148137999999998,0.0019326648333333333,0.0023351148000000004,0.0022226091,0.0022465554,0.0017879954,0.0023828854,0.0021368836333333337,0.0020358154666666665,0.0064218699333333336,0.007266162166666667,0.0031631039666666664,0.0021360349333333336,0.0018508254666666666,0.0021720829333333335,0.002576340166666667,0.002008591,0.0018215091333333333,0.0020289265,0.0021360366666666668,0.002415817633333333,0.0017858457666666667,0.0020520711666666665,0.0021950445666666664,0.0037144032666666664,0.0038083430333333335,0.0046919363,0.0038749341,0.0022128940333333335,0.0024803662666666665,0.0021749080999999997,0.0022040420000000002,0.0022189427,0.0026992027333333337,0.0018618762666666666,0.0023034347333333333,0.0022740441333333333,0.0021370366333333334,0.0024034543000000003,0.0021774283666666666,0.0036712344666666665,0.003902593666666667,0.0042732760666666664,0.003774781333333333]}},{"size":2,"stats":{"rme":8.455770984978919,"deviation":0.0015425742450916992,"mean":0.004735997969529086,"variance":0.0000023795353016202258,"moe":0.0004004651421566312,"sem":0.0002043189500799139,"sample":[0.0036838340526315788,0.0036435319999999997,0.004198971052631579,0.0035189243684210524,0.0035057362631578945,0.0043451110000000005,0.0034827415789473685,0.0034486474736842108,0.004076672684210527,0.0035691638947368417,0.006395003947368421,0.006499386789473684,0.0073645238947368415,0.006081677631578947,0.0034641115263157893,0.004295117736842105,0.0034752512631578947,0.00344631752631579,0.003473312947368421,0.004025883315789474,0.003474183052631579,0.004201358736842105,0.005862774578947369,0.004427326421052632,0.008639059631578946,0.008711315736842105,0.008930553368421053,0.005219452526315789,0.003857061789473684,0.004454497473684211,0.003926733,0.0037995672631578946,0.0036816082631578946,0.004461839368421053,0.003624827157894737,0.0037279981052631577,0.004534339947368421,0.0064037226842105265,0.0064480751578947365,0.006524146526315789,0.006742737947368421,0.0034218112105263154,0.003408390105263158,0.004706893,0.0036068474210526314,0.0034592013684210526,0.003732261052631579,0.004317923315789473,0.0037500614736842106,0.0035765266842105264,0.00408530047368421,0.0077742528947368425,0.0070205664736842106,0.006344141842105263,0.005543513631578948,0.0038053284210526317,0.0037517652105263162]}},{"size":3,"stats":{"rme":6.977711829294028,"deviation":0.0018159607251741349,"mean":0.006376164401055194,"variance":0.0000032977133553749697,"moe":0.000444910377667663,"sem":0.00022699509064676686,"sample":[0.007791250285714286,0.0057302656,0.005955891600000001,0.0046359876363636365,0.0057374976363636365,0.005971971909090909,0.009393352454545454,0.012225832909090907,0.007997887181818182,0.005129655727272728,0.005881702,0.005792999454545455,0.0046406572727272725,0.006632019833333333,0.00518598425,0.005474065833333333,0.005868163666666666,0.004364178333333334,0.005035146,0.005021951,0.006427210583333333,0.00770999175,0.009398500416666667,0.009434215083333334,0.00993773075,0.006733167333333334,0.0042212598333333335,0.004546032333333333,0.00488258325,0.005072707166666667,0.00504859625,0.006244229083333334,0.004886489083333333,0.00652319325,0.006600234,0.006297584166666666,0.00739177575,0.01023594025,0.010415289416666666,0.007917727583333334,0.00463449325,0.0054609077500000006,0.005541690166666666,0.005133023333333334,0.005920562083333333,0.005468931416666666,0.006614353333333333,0.005020635916666667,0.005551371666666667,0.005432412333333333,0.0053018246666666664,0.005535603833333333,0.00788988775,0.009413588083333334,0.009949873083333333,0.008522146333333333,0.00715048925,0.00501447325,0.004775002333333334,0.0050043015,0.0051339551666666665,0.006025050583333334,0.004945049333333333,0.0042439773333333335]}},{"size":4,"stats":{"rme":7.654687952096323,"deviation":0.0023986995742144883,"mean":0.008774177144557822,"variance":0.000005753759647336768,"moe":0.0006716358807800567,"sem":0.0003426713677449269,"sample":[0.005919865166666666,0.008638576416666667,0.011685135749999999,0.012766955750000001,0.012311272333333333,0.007214813666666667,0.008799654083333334,0.009890395416666666,0.007699369166666667,0.007738654583333333,0.0077013605,0.00768514775,0.010449397249999999,0.012475633916666666,0.012818777083333335,0.007581962166666667,0.0071447015,0.006141286,0.006204397166666667,0.007524832249999999,0.00694773675,0.007099915583333334,0.00609552725,0.006503490333333334,0.007597213833333334,0.012938935916666667,0.013176669916666666,0.011849662249999999,0.006076784416666667,0.0072469284999999994,0.0071794827500000005,0.007032100833333333,0.0063913184166666664,0.008422973583333333,0.010286095833333333,0.007565921083333333,0.013196458416666668,0.010250147083333333,0.0134116685,0.011580852916666667,0.007518711500000001,0.008127966166666667,0.006562821083333333,0.006470882833333334,0.007134807833333333,0.00711419975,0.007111905250000001,0.008964926333333333,0.01168638725]}},{"size":5,"stats":{"rme":9.52037752197625,"deviation":0.003816417864863873,"mean":0.010499383709821435,"variance":0.000014565045319252124,"moe":0.0009995809666558761,"sem":0.0005099902891101409,"sample":[0.008031596,0.007685084625,0.007895775875,0.008814380875,0.007781476625,0.00834147675,0.0078922675,0.007759284125,0.00901751625,0.00919485925,0.014820293375,0.0168079665,0.01499817175,0.0120778815,0.007439651875,0.0117342735,0.011032389375,0.007002096125,0.008829999125,0.00923036825,0.00696490775,0.008657353875,0.0099752875,0.01627379575,0.02016829975,0.0247943575,0.008620245875,0.00833597975,0.01008704675,0.00807138075,0.00798438475,0.008509658125,0.00776553025,0.007976304375,0.008620475625,0.0083661655,0.017773805625,0.015501594,0.016437187,0.01350572075,0.008209159,0.007840654625,0.007756832375,0.00907693325,0.008164562125,0.009714954875,0.01555168275,0.009538311375,0.008751425125,0.0133825385,0.016285443125,0.01026284025,0.007816044,0.008443154125,0.0088471795,0.00754748225]}},{"size":10,"stats":{"rme":7.780389964740491,"deviation":0.005755712245712285,"mean":0.019731354524691363,"variance":0.00003312822345544236,"moe":0.0015351763273464554,"sem":0.0007832532282379875,"sample":[0.017977490333333335,0.016726447,0.01649168625,0.016816579,0.01514478675,0.02478397925,0.03388453175,0.02858941775,0.024750388,0.01590586675,0.01492488525,0.0150450745,0.01832058425,0.015077879,0.0160043655,0.0149558035,0.01497906225,0.0178637255,0.01499162475,0.0279998135,0.029077341,0.02879436675,0.02565806025,0.01619816725,0.022144534,0.02273929325,0.016223262,0.01376872725,0.01704118875,0.01654834425,0.017254895,0.017580728,0.024547456,0.0381836615,0.015944874,0.0161631025,0.0170630615,0.01595540475,0.0163674615,0.01914966625,0.01640987675,0.017151954,0.015301133,0.01523653275,0.01982030175,0.02348433225,0.02843705775,0.02955323075,0.02888334275,0.01585042225,0.01256129,0.01651324625,0.01873350575,0.01991933175]}},{"size":20,"stats":{"rme":9.200007574749973,"deviation":0.013072982389780956,"mean":0.04062502428723404,"variance":0.00017090286856352298,"moe":0.0037375053116695477,"sem":0.0019068904651375245,"sample":[0.053437106,0.055375818,0.081357722,0.061454097,0.040864535,0.031765732,0.032419249,0.032809429,0.0322497495,0.04061526,0.035340808,0.044202469,0.0569939185,0.0590301865,0.048673595,0.030339932,0.0267235905,0.0296490705,0.0306588285,0.02998253,0.035527273,0.0292072165,0.029793383,0.047716143,0.049222537,0.064000956,0.0566774295,0.04940418,0.032196465,0.035229687,0.0316403545,0.032114071,0.026134304,0.0329598915,0.06141801,0.0608211085,0.0466867525,0.030995951,0.029491277,0.0290619155,0.0293045425,0.0353293095,0.0296777175,0.0321526185,0.0298275115,0.0333823315,0.055459579]}},{"size":30,"stats":{"rme":10.196572911452558,"deviation":0.016950882253511955,"mean":0.05672012503030303,"variance":0.0002873324091724266,"moe":0.0057835089041819,"sem":0.002950769849072398,"sample":[0.074887433,0.0445944795,0.044674446,0.043556634,0.0443823625,0.043829276,0.0858092705,0.103504815,0.048014488,0.047890404,0.048966602,0.05002043,0.043563613,0.061443108,0.0841160365,0.06535325,0.045085154,0.0448393195,0.0439392025,0.0500291445,0.043515649,0.06409846,0.0922059635,0.0861639335,0.0566648975,0.0511201985,0.04770912,0.0489836645,0.047320121,0.0755704225,0.0476051575,0.0476457385,0.0446613315]}},{"size":40,"stats":{"rme":9.930646162682553,"deviation":0.023668284995469045,"mean":0.07679704181081082,"variance":0.0005601877146267451,"moe":0.007626442485639001,"sem":0.0038910420845096943,"sample":[0.052143771,0.069434919,0.058731688,0.114251402,0.11239274,0.058346858,0.05844314,0.059102826,0.06997728,0.058053769,0.069167853,0.062955236,0.119299588,0.129202811,0.065879631,0.066996705,0.063619309,0.05215786,0.070642053,0.060865257,0.111688204,0.112988049,0.110367724,0.062337581,0.060540493,0.061912282,0.06006606,0.070275507,0.05811019,0.109416035,0.111275031,0.107556884,0.080654523,0.065482641,0.066745946,0.063019478,0.057389223]}},{"size":50,"stats":{"rme":11.73302462038882,"deviation":0.030362559243494545,"mean":0.09490810106451614,"variance":0.000921885003814716,"moe":0.011135590864643182,"sem":0.005453276623233684,"sample":[0.088460392,0.083883499,0.080107714,0.077599468,0.148116763,0.157023449,0.071369693,0.067788856,0.080461149,0.071978216,0.067765264,0.11421297,0.160781147,0.073002688,0.073215338,0.084701256,0.075969303,0.081854793,0.12403599,0.150864601,0.076944106,0.076671633,0.081869227,0.082000742,0.067108813,0.082105339,0.148075904,0.140384757,0.076174001,0.088273427,0.089350635]}},{"size":100,"stats":{"rme":15.002716363446192,"deviation":0.0566192924627138,"mean":0.18768983044444446,"variance":0.00320574427897832,"moe":0.02815857290461308,"sem":0.013345295215456436,"sample":[0.163826084,0.145625548,0.281165284,0.145850567,0.150691297,0.190054167,0.189516084,0.161830323,0.156829129,0.281492724,0.13414889,0.156941707,0.160614052,0.287491174,0.165815161,0.163703051,0.298996685,0.143825021]}},{"size":250,"stats":{"rme":20.27634381770261,"deviation":0.1430509010198173,"mean":0.5046538042,"variance":0.02046356028258156,"moe":0.10232534042870772,"sem":0.045236666856192626,"sample":[0.395821402,0.390206412,0.642675487,0.500978927,0.38455247,0.596436916,0.602246083,0.362449302,0.392620335,0.778550708]}},{"size":500,"stats":{"rme":12.81937909717097,"deviation":0.1395040115871502,"mean":1.0064788542857144,"variance":0.019461369248907737,"moe":0.12902433986374873,"sem":0.052727560222210354,"sample":[0.959229338,1.2283453930000001,0.833027396,1.034469704,1.070045114,0.845875176,1.074359859]}},{"size":1000,"stats":{"rme":2.0049090098654823,"deviation":0.03926800948024038,"mean":2.0557517616666665,"variance":0.0015419765685402483,"moe":0.04121595229012337,"sem":0.0160310977402269,"sample":[2.022743171,2.096036793,2.083418595,2.035792053,2.091395433,2.005124525]}}]}]} \ No newline at end of file +{ + "slug": "right-bind-small", + "title": "Right associated binds (small - 100 inputs per size)", + "sizeInterpretation": "Number of binds", + "series": [ + { + "name": "Free", + "results": [ + { + "size": 1, + "stats": { + "rme": 7.704460777626861, + "deviation": 0.0007505377155810193, + "mean": 0.0022195783701898755, + "variance": 5.633068625095749e-7, + "moe": 0.00017100654495996848, + "sem": 0.00008724823722447371, + "sample": [ + 0.0035089712352941176, 0.003134843705882353, 0.0030993049411764707, + 0.003162290823529412, 0.0031066262352941174, 0.003283377117647059, + 0.0024244792272727273, 0.0025544020454545454, 0.0019203925625, 0.00164292096875, + 0.00184587978125, 0.00176719078125, 0.0017404609375, 0.00206512325, 0.00172203125, + 0.0017758324375, 0.0030416393125, 0.0032566055, 0.00303043171875, 0.00524580328125, + 0.00194093696875, 0.00165668909375, 0.0017035624375, 0.00169564909375, + 0.0019969241875, 0.00165752775, 0.00195390546875, 0.00168574865625, 0.00158028315625, + 0.0016063041875, 0.0018594273125, 0.0016014646875, 0.0016703321875, 0.0015883225625, + 0.002160341, 0.003133980125, 0.003121307375, 0.00354297946875, 0.0031388316875, + 0.0025274413125, 0.00166572265625, 0.00192044334375, 0.001697606125, 0.001602374125, + 0.00168569746875, 0.00282055840625, 0.00237691709375, 0.001832713125, + 0.00200375040625, 0.0017499844375, 0.00169691584375, 0.00171004571875, + 0.00364988628125, 0.0031790318125, 0.00363037075, 0.00209988009375, 0.0020072328125, + 0.00182352865625, 0.00170472853125, 0.0020416220625, 0.0017288809375, + 0.00159235465625, 0.00161850296875, 0.0016176331875, 0.001862903125, 0.00160569353125, + 0.0015903550625, 0.00158980853125, 0.00182953125, 0.00160286703125, 0.00158748296875, + 0.0016396495625, 0.00318921284375, 0.00314434815625 + ] + } + }, + { + "size": 2, + "stats": { + "rme": 8.797687508591961, + "deviation": 0.0011581096613747077, + "mean": 0.0033878426206896553, + "variance": 0.00000134121798776944, + "moe": 0.0002980518070511684, + "sem": 0.00015206724849549407, + "sample": [ + 0.003018620346153846, 0.002941966730769231, 0.0028795218076923075, 0.0026594295, + 0.0029657726923076927, 0.002284440923076923, 0.0026264388076923076, + 0.002719698346153846, 0.0023031183846153845, 0.0025259361923076922, + 0.0028332740769230766, 0.0036052478461538464, 0.004728487730769231, + 0.004805714730769231, 0.004911727846153846, 0.005518223769230769, + 0.002938460846153846, 0.003085229, 0.002497338692307692, 0.002720285769230769, + 0.003094409269230769, 0.0025067452307692304, 0.0027481880000000004, + 0.0031060203076923075, 0.0024519119230769233, 0.004792431038461538, + 0.0049648078461538465, 0.0046106870000000005, 0.0047739035769230765, + 0.002656160423076923, 0.002274262230769231, 0.002615494230769231, + 0.002536907153846154, 0.0026237140384615387, 0.002513045653846154, + 0.0025459897692307696, 0.002596843192307692, 0.002618533769230769, + 0.002760327576923077, 0.0022718257307692306, 0.003028585961538461, + 0.005038789423076923, 0.004790715192307692, 0.004844190038461539, + 0.0042751497307692305, 0.0025491355384615385, 0.002855123269230769, + 0.002458791846153846, 0.0035457120769230768, 0.004178023038461539, + 0.0025913085000000002, 0.0025461178076923077, 0.0032069025, 0.0024854294615384615, + 0.003670297846153846, 0.007154756230769231, 0.0067633436153846154, + 0.004881357923076923 + ] + } + }, + { + "size": 3, + "stats": { + "rme": 7.605326051920093, + "deviation": 0.0013123583184039905, + "mean": 0.004440957993965517, + "variance": 0.0000017222843558841498, + "moe": 0.00033774933526988746, + "sem": 0.00017232108942341197, + "sample": [ + 0.0043592054, 0.00380170085, 0.0042836932, 0.0037151070500000003, 0.00394893745, + 0.0034724023499999998, 0.0034517388500000003, 0.0038941532, 0.0064975968, + 0.00667859435, 0.006524074100000001, 0.00628962775, 0.0033668863, 0.0036153677, + 0.0033223579500000003, 0.0035956029, 0.00332458255, 0.00376543215, 0.00301945115, + 0.0033958192999999997, 0.0032351356, 0.0033458061, 0.0044855949499999995, + 0.006451159099999999, 0.0066386281, 0.006883821850000001, 0.006955210450000001, + 0.0038363952, 0.00405262195, 0.0036161781, 0.0041636683, 0.0036449583, + 0.0041571238500000005, 0.0032904237500000003, 0.0032482004000000003, 0.00417390115, + 0.006826109049999999, 0.0067577780500000005, 0.00619859625, 0.00482228935, + 0.0035014736499999997, 0.0037568839, 0.0034094402500000004, 0.0034927013, + 0.0033515988500000004, 0.00391500935, 0.0033213555499999998, 0.0036374898, + 0.00302672005, 0.0033730903, 0.00550067485, 0.00647791035, 0.006676509799999999, + 0.0065860188, 0.0044068202, 0.00338411645, 0.00388374045, 0.004768078550000001 + ] + } + }, + { + "size": 4, + "stats": { + "rme": 7.490313749546636, + "deviation": 0.0015340695773533586, + "mean": 0.005412772505882353, + "variance": 0.0000023533694681611124, + "moe": 0.0004054336432397859, + "sem": 0.00020685389961213566, + "sample": [ + 0.00548032094117647, 0.004205924764705883, 0.004538072058823529, + 0.0070462041764705885, 0.008133751411764705, 0.007223730823529412, 0.005418183, + 0.004413393, 0.004467297352941177, 0.0042981795294117645, 0.004940822882352942, + 0.0040322380000000005, 0.004768893647058824, 0.0043468259411764704, + 0.004776258294117647, 0.004164356882352942, 0.004690594529411765, 0.00783709505882353, + 0.008658761823529412, 0.00788729805882353, 0.0067524785294117646, + 0.004080025588235294, 0.004593448941176471, 0.004202069235294118, + 0.004644605411764706, 0.004095442470588235, 0.004650374411764706, 0.00409692205882353, + 0.004851706235294117, 0.004117511411764706, 0.005270940823529411, + 0.007817452823529412, 0.008732942529411765, 0.008813404235294118, + 0.007022877941176471, 0.0044720488235294115, 0.005136848470588235, + 0.004520101411764706, 0.005064210529411765, 0.004433721117647059, + 0.004648721235294118, 0.004454701764705882, 0.00475238705882353, + 0.0068690546470588235, 0.008396555529411764, 0.00807476282352941, + 0.0073270962352941175, 0.0044509717647058826, 0.0042523544117647055, + 0.0044374034705882345, 0.004249918294117647, 0.004157248058823529, + 0.004364183647058824, 0.004299000941176471, 0.004270792764705883 + ] + } + }, + { + "size": 5, + "stats": { + "rme": 8.973520990063651, + "deviation": 0.002564253303266562, + "mean": 0.006947002156177156, + "variance": 0.000006575395003313474, + "moe": 0.0006233906966647315, + "sem": 0.0003180564778901691, + "sample": [ + 0.011425768000000001, 0.009587194333333333, 0.006069359636363636, + 0.005399457727272727, 0.0055667952727272724, 0.004729869818181818, + 0.004901619181818182, 0.0055265158181818175, 0.005071994090909091, + 0.005655958909090909, 0.005330675272727272, 0.0047710770909090905, + 0.005165559363636363, 0.005235509545454545, 0.011767157636363636, 0.010928307, + 0.01748420609090909, 0.00622441, 0.005886449181818182, 0.0060287149090909094, + 0.005256574181818182, 0.006112790909090909, 0.005401489181818182, + 0.005765665272727274, 0.006268045363636363, 0.006031130272727273, + 0.006123097272727273, 0.004867904545454545, 0.0051422940909090905, + 0.010322879727272728, 0.010203017363636364, 0.010562950636363637, + 0.010065044181818182, 0.00645070890909091, 0.005378691, 0.004780349636363636, + 0.005590243, 0.005331323090909091, 0.005587577272727273, 0.005226731636363636, + 0.0047914814545454544, 0.005043236, 0.0050886765454545456, 0.006283568272727274, + 0.004740854545454545, 0.0059524975454545445, 0.010459980636363636, + 0.009383456545454546, 0.011655961727272728, 0.010279216090909092, + 0.006469623181818182, 0.005923633818181818, 0.006034323727272728, + 0.006109150545454545, 0.005451708363636364, 0.005225693909090909, 0.006082058, + 0.0051885636363636365, 0.0060923264545454546, 0.00598305890909091, + 0.005408644181818182, 0.010415841818181818, 0.009432808272727272, + 0.010788063909090909, 0.010045605636363636 + ] + } + }, + { + "size": 10, + "stats": { + "rme": 8.243987229853005, + "deviation": 0.004069835733822465, + "mean": 0.012288526118279566, + "variance": 0.000016563562900298246, + "moe": 0.0010130645239281185, + "sem": 0.0005168696550653666, + "sample": [ + 0.010427078166666666, 0.009699611833333333, 0.0097266475, 0.011078544333333334, + 0.009968352, 0.010317109833333333, 0.008972092666666666, 0.009821328833333334, + 0.014142923166666667, 0.0169461855, 0.019127543, 0.018799904166666666, + 0.014861192166666667, 0.009797956, 0.010555280166666667, 0.0087135815, + 0.008678274833333334, 0.010587038333333333, 0.008766382166666666, + 0.010457045833333333, 0.009957088333333334, 0.010473930166666666, + 0.009701571666666667, 0.013528087166666668, 0.025919854000000003, + 0.013914227500000001, 0.019232438833333334, 0.009325588000000001, + 0.011599775666666666, 0.0106954305, 0.011087367333333334, 0.010654643833333333, + 0.012434296833333332, 0.009349475833333334, 0.010592363, 0.010270395, + 0.008900962333333333, 0.010197332333333333, 0.010174104833333334, + 0.019437778666666666, 0.018550473833333334, 0.020893846999999997, 0.01625391, + 0.009212485666666667, 0.009997678, 0.009275375333333334, 0.010771366833333332, + 0.010796766833333332, 0.0102907295, 0.009842959833333333, 0.0114099365, + 0.008713104666666667, 0.008748367666666666, 0.0102321875, 0.013038761666666667, + 0.019204465166666667, 0.02030639366666667, 0.0226447005, 0.011732622333333333, + 0.012304725, 0.009354576166666666, 0.009422401833333333 + ] + } + }, + { + "size": 20, + "stats": { + "rme": 9.971814530996312, + "deviation": 0.009177502528283773, + "mean": 0.02410529098214286, + "variance": 0.00008422655265665503, + "moe": 0.0024037349088962654, + "sem": 0.001226395361681768, + "sample": [ + 0.025246188, 0.018536792666666666, 0.022383540666666663, 0.037464779, 0.038880633, + 0.029770390666666664, 0.019568938, 0.02080895, 0.021160976666666668, 0.021826842, + 0.022767613000000003, 0.021377315999999997, 0.02163701733333333, 0.017960504999999998, + 0.019600624, 0.018452517666666664, 0.019591975333333334, 0.03258337066666667, + 0.03672714433333333, 0.032812186, 0.030603583333333333, 0.018715184, 0.019588279, + 0.019621269, 0.019543332666666666, 0.019752623333333334, 0.019593460666666666, + 0.018789024666666668, 0.023986285333333333, 0.01995129, 0.03157523366666667, + 0.052520737000000005, 0.06409276900000001, 0.02192390666666667, 0.018697601333333334, + 0.018229182, 0.018232671333333336, 0.018082944666666666, 0.018026357666666666, + 0.019154498, 0.017366062666666664, 0.018345623666666668, 0.017839880333333332, + 0.030149543666666667, 0.03533089266666667, 0.03520396333333333, 0.035792827, + 0.01679248066666667, 0.018900740333333332, 0.021403931666666667, 0.016670619333333334, + 0.019516000333333335, 0.016712015333333333, 0.01939898866666667, 0.0203158545, + 0.0203183375 + ] + } + }, + { + "size": 30, + "stats": { + "rme": 8.88051971142423, + "deviation": 0.010580491567385459, + "mean": 0.03561142122480619, + "variance": 0.0001119468018075148, + "moe": 0.0031624792813872257, + "sem": 0.0016135098374424621, + "sample": [ + 0.05021942, 0.059386974, 0.054334604, 0.0298808465, 0.028166503, 0.0258802115, + 0.0444307025, 0.032558055, 0.035071534, 0.0304158905, 0.031151268, 0.052188048, + 0.0545426285, 0.0296259405, 0.030747472, 0.031411287, 0.0265221135, 0.0250144675, + 0.028966891999999998, 0.02442775833333333, 0.025922848999999998, 0.028052504333333336, + 0.05188005666666667, 0.050788968999999996, 0.03785630833333333, 0.028009071333333333, + 0.030665226333333333, 0.026646518999999997, 0.028059162666666665, + 0.029551870999999997, 0.031688878999999996, 0.04475686833333333, 0.05894428733333334, + 0.03831296033333333, 0.029153989333333335, 0.026364612, 0.029429788999999998, + 0.03245890766666667, 0.027197067000000002, 0.028124913666666668, 0.028211313666666668, + 0.04697510933333333, 0.047297262 + ] + } + }, + { + "size": 40, + "stats": { + "rme": 9.0107428201209, + "deviation": 0.013293909781262674, + "mean": 0.04572126190000001, + "variance": 0.0001767280372723514, + "moe": 0.004119825323922924, + "sem": 0.0021019516958790427, + "sample": [ + 0.057775949, 0.040375939, 0.0381016985, 0.0337914865, 0.038737636, 0.066665047, + 0.06479226, 0.0424483095, 0.033935284, 0.0396928495, 0.048854401, 0.034705951, + 0.041926193, 0.0361393875, 0.0749938005, 0.0666354635, 0.0408895535, 0.0382929815, + 0.0342886275, 0.038884756, 0.0368584585, 0.034259232, 0.039120847, 0.0348063175, + 0.06487681, 0.064570578, 0.061574217, 0.0378892525, 0.035346552, 0.034917172, + 0.0375259565, 0.0349591165, 0.059620324, 0.0651945875, 0.0784410655, 0.043160427, + 0.0365856765, 0.0414708065, 0.0393388825, 0.036406623 + ] + } + }, + { + "size": 50, + "stats": { + "rme": 9.856656434903488, + "deviation": 0.01699660092223415, + "mean": 0.05796276189705882, + "variance": 0.00028888444290969074, + "moe": 0.005713190300374235, + "sem": 0.0029148930103950177, + "sample": [ + 0.0799070955, 0.08635615, 0.043826863, 0.048286937, 0.049039318, 0.046135064, + 0.048054149, 0.0392158185, 0.08080838, 0.080535742, 0.0432076985, 0.059749639, + 0.057265324, 0.051472864, 0.046661772, 0.088893283, 0.082193643, 0.0439753385, + 0.0481696355, 0.0453956165, 0.044717335, 0.049758077, 0.043736013, 0.0862403235, + 0.082229993, 0.049849956, 0.0484996945, 0.0405229395, 0.0435427665, 0.0621417375, + 0.059570232, 0.092393926, 0.0474217955, 0.0509587845 + ] + } + }, + { + "size": 100, + "stats": { + "rme": 10.598729540513759, + "deviation": 0.02888947285348556, + "mean": 0.11012003830769229, + "variance": 0.0008346016417522792, + "moe": 0.01167132503014245, + "sem": 0.005665691762205073, + "sample": [ + 0.109795123, 0.093012896, 0.087663311, 0.079467221, 0.085467714, 0.099061999, + 0.172106353, 0.147022522, 0.097199154, 0.103231442, 0.093896955, 0.1296147, + 0.171625715, 0.098705321, 0.086099783, 0.085575579, 0.086617461, 0.088275248, + 0.166416994, 0.102815137, 0.085632, 0.094097981, 0.133649684, 0.12552322, 0.144130033, + 0.09641745 + ] + } + }, + { + "size": 250, + "stats": { + "rme": 15.101156319616905, + "deviation": 0.07527989917267376, + "mean": 0.287778642, + "variance": 0.005667063219447928, + "moe": 0.0434579025828907, + "sem": 0.02011939934393088, + "sample": [ + 0.211692694, 0.404948578, 0.257337788, 0.397895768, 0.216839293, 0.223181616, + 0.331340933, 0.272198181, 0.396144407, 0.239161019, 0.212903094, 0.274909739, + 0.225289073, 0.365058805 + ] + } + }, + { + "size": 500, + "stats": { + "rme": 18.044132743426726, + "deviation": 0.13709837680181677, + "mean": 0.5840289128888889, + "variance": 0.018795964921692932, + "moe": 0.10538295230166317, + "sem": 0.045699458933938925, + "sample": [ + 0.689517485, 0.692970613, 0.472270853, 0.434486908, 0.480063827, 0.439246742, + 0.636238883, 0.586570984, 0.824893921 + ] + } + }, + { + "size": 1000, + "stats": { + "rme": 6.496402235977254, + "deviation": 0.0803545247623788, + "mean": 1.1439903975714285, + "variance": 0.006456849649787746, + "moe": 0.07431821776719537, + "sem": 0.0303711556057194, + "sample": [ + 1.139697177, 0.993256243, 1.195161198, 1.259478571, 1.140791752, 1.139525828, + 1.140022014 + ] + } + } + ] + }, + { + "name": "Free v0.6.1", + "results": [ + { + "size": 1, + "stats": { + "rme": 9.613658371050049, + "deviation": 0.0010749209423115723, + "mean": 0.00273939036214754, + "variance": 0.0000011554550322199985, + "moe": 0.0002633556308663352, + "sem": 0.00013436511778894654, + "sample": [ + 0.0037082834375, 0.003701989, 0.004635319125, 0.002062978724137931, + 0.002443546724137931, 0.0020033744333333332, 0.002021608066666667, + 0.002031163533333333, 0.0021761443666666667, 0.0019822987, 0.0027873866, 0.0031259976, + 0.0040078426666666665, 0.003911531766666667, 0.0034621040666666667, 0.0022085286, + 0.002207278433333333, 0.0023458284333333335, 0.0021427892666666666, + 0.0021702572999999998, 0.0022148137999999998, 0.0019326648333333333, + 0.0023351148000000004, 0.0022226091, 0.0022465554, 0.0017879954, 0.0023828854, + 0.0021368836333333337, 0.0020358154666666665, 0.0064218699333333336, + 0.007266162166666667, 0.0031631039666666664, 0.0021360349333333336, + 0.0018508254666666666, 0.0021720829333333335, 0.002576340166666667, 0.002008591, + 0.0018215091333333333, 0.0020289265, 0.0021360366666666668, 0.002415817633333333, + 0.0017858457666666667, 0.0020520711666666665, 0.0021950445666666664, + 0.0037144032666666664, 0.0038083430333333335, 0.0046919363, 0.0038749341, + 0.0022128940333333335, 0.0024803662666666665, 0.0021749080999999997, + 0.0022040420000000002, 0.0022189427, 0.0026992027333333337, 0.0018618762666666666, + 0.0023034347333333333, 0.0022740441333333333, 0.0021370366333333334, + 0.0024034543000000003, 0.0021774283666666666, 0.0036712344666666665, + 0.003902593666666667, 0.0042732760666666664, 0.003774781333333333 + ] + } + }, + { + "size": 2, + "stats": { + "rme": 8.455770984978919, + "deviation": 0.0015425742450916992, + "mean": 0.004735997969529086, + "variance": 0.0000023795353016202258, + "moe": 0.0004004651421566312, + "sem": 0.0002043189500799139, + "sample": [ + 0.0036838340526315788, 0.0036435319999999997, 0.004198971052631579, + 0.0035189243684210524, 0.0035057362631578945, 0.0043451110000000005, + 0.0034827415789473685, 0.0034486474736842108, 0.004076672684210527, + 0.0035691638947368417, 0.006395003947368421, 0.006499386789473684, + 0.0073645238947368415, 0.006081677631578947, 0.0034641115263157893, + 0.004295117736842105, 0.0034752512631578947, 0.00344631752631579, + 0.003473312947368421, 0.004025883315789474, 0.003474183052631579, + 0.004201358736842105, 0.005862774578947369, 0.004427326421052632, + 0.008639059631578946, 0.008711315736842105, 0.008930553368421053, + 0.005219452526315789, 0.003857061789473684, 0.004454497473684211, 0.003926733, + 0.0037995672631578946, 0.0036816082631578946, 0.004461839368421053, + 0.003624827157894737, 0.0037279981052631577, 0.004534339947368421, + 0.0064037226842105265, 0.0064480751578947365, 0.006524146526315789, + 0.006742737947368421, 0.0034218112105263154, 0.003408390105263158, 0.004706893, + 0.0036068474210526314, 0.0034592013684210526, 0.003732261052631579, + 0.004317923315789473, 0.0037500614736842106, 0.0035765266842105264, + 0.00408530047368421, 0.0077742528947368425, 0.0070205664736842106, + 0.006344141842105263, 0.005543513631578948, 0.0038053284210526317, + 0.0037517652105263162 + ] + } + }, + { + "size": 3, + "stats": { + "rme": 6.977711829294028, + "deviation": 0.0018159607251741349, + "mean": 0.006376164401055194, + "variance": 0.0000032977133553749697, + "moe": 0.000444910377667663, + "sem": 0.00022699509064676686, + "sample": [ + 0.007791250285714286, 0.0057302656, 0.005955891600000001, 0.0046359876363636365, + 0.0057374976363636365, 0.005971971909090909, 0.009393352454545454, + 0.012225832909090907, 0.007997887181818182, 0.005129655727272728, 0.005881702, + 0.005792999454545455, 0.0046406572727272725, 0.006632019833333333, 0.00518598425, + 0.005474065833333333, 0.005868163666666666, 0.004364178333333334, 0.005035146, + 0.005021951, 0.006427210583333333, 0.00770999175, 0.009398500416666667, + 0.009434215083333334, 0.00993773075, 0.006733167333333334, 0.0042212598333333335, + 0.004546032333333333, 0.00488258325, 0.005072707166666667, 0.00504859625, + 0.006244229083333334, 0.004886489083333333, 0.00652319325, 0.006600234, + 0.006297584166666666, 0.00739177575, 0.01023594025, 0.010415289416666666, + 0.007917727583333334, 0.00463449325, 0.0054609077500000006, 0.005541690166666666, + 0.005133023333333334, 0.005920562083333333, 0.005468931416666666, + 0.006614353333333333, 0.005020635916666667, 0.005551371666666667, + 0.005432412333333333, 0.0053018246666666664, 0.005535603833333333, 0.00788988775, + 0.009413588083333334, 0.009949873083333333, 0.008522146333333333, 0.00715048925, + 0.00501447325, 0.004775002333333334, 0.0050043015, 0.0051339551666666665, + 0.006025050583333334, 0.004945049333333333, 0.0042439773333333335 + ] + } + }, + { + "size": 4, + "stats": { + "rme": 7.654687952096323, + "deviation": 0.0023986995742144883, + "mean": 0.008774177144557822, + "variance": 0.000005753759647336768, + "moe": 0.0006716358807800567, + "sem": 0.0003426713677449269, + "sample": [ + 0.005919865166666666, 0.008638576416666667, 0.011685135749999999, + 0.012766955750000001, 0.012311272333333333, 0.007214813666666667, + 0.008799654083333334, 0.009890395416666666, 0.007699369166666667, + 0.007738654583333333, 0.0077013605, 0.00768514775, 0.010449397249999999, + 0.012475633916666666, 0.012818777083333335, 0.007581962166666667, 0.0071447015, + 0.006141286, 0.006204397166666667, 0.007524832249999999, 0.00694773675, + 0.007099915583333334, 0.00609552725, 0.006503490333333334, 0.007597213833333334, + 0.012938935916666667, 0.013176669916666666, 0.011849662249999999, + 0.006076784416666667, 0.0072469284999999994, 0.0071794827500000005, + 0.007032100833333333, 0.0063913184166666664, 0.008422973583333333, + 0.010286095833333333, 0.007565921083333333, 0.013196458416666668, + 0.010250147083333333, 0.0134116685, 0.011580852916666667, 0.007518711500000001, + 0.008127966166666667, 0.006562821083333333, 0.006470882833333334, + 0.007134807833333333, 0.00711419975, 0.007111905250000001, 0.008964926333333333, + 0.01168638725 + ] + } + }, + { + "size": 5, + "stats": { + "rme": 9.52037752197625, + "deviation": 0.003816417864863873, + "mean": 0.010499383709821435, + "variance": 0.000014565045319252124, + "moe": 0.0009995809666558761, + "sem": 0.0005099902891101409, + "sample": [ + 0.008031596, 0.007685084625, 0.007895775875, 0.008814380875, 0.007781476625, + 0.00834147675, 0.0078922675, 0.007759284125, 0.00901751625, 0.00919485925, + 0.014820293375, 0.0168079665, 0.01499817175, 0.0120778815, 0.007439651875, + 0.0117342735, 0.011032389375, 0.007002096125, 0.008829999125, 0.00923036825, + 0.00696490775, 0.008657353875, 0.0099752875, 0.01627379575, 0.02016829975, + 0.0247943575, 0.008620245875, 0.00833597975, 0.01008704675, 0.00807138075, + 0.00798438475, 0.008509658125, 0.00776553025, 0.007976304375, 0.008620475625, + 0.0083661655, 0.017773805625, 0.015501594, 0.016437187, 0.01350572075, 0.008209159, + 0.007840654625, 0.007756832375, 0.00907693325, 0.008164562125, 0.009714954875, + 0.01555168275, 0.009538311375, 0.008751425125, 0.0133825385, 0.016285443125, + 0.01026284025, 0.007816044, 0.008443154125, 0.0088471795, 0.00754748225 + ] + } + }, + { + "size": 10, + "stats": { + "rme": 7.780389964740491, + "deviation": 0.005755712245712285, + "mean": 0.019731354524691363, + "variance": 0.00003312822345544236, + "moe": 0.0015351763273464554, + "sem": 0.0007832532282379875, + "sample": [ + 0.017977490333333335, 0.016726447, 0.01649168625, 0.016816579, 0.01514478675, + 0.02478397925, 0.03388453175, 0.02858941775, 0.024750388, 0.01590586675, + 0.01492488525, 0.0150450745, 0.01832058425, 0.015077879, 0.0160043655, 0.0149558035, + 0.01497906225, 0.0178637255, 0.01499162475, 0.0279998135, 0.029077341, 0.02879436675, + 0.02565806025, 0.01619816725, 0.022144534, 0.02273929325, 0.016223262, 0.01376872725, + 0.01704118875, 0.01654834425, 0.017254895, 0.017580728, 0.024547456, 0.0381836615, + 0.015944874, 0.0161631025, 0.0170630615, 0.01595540475, 0.0163674615, 0.01914966625, + 0.01640987675, 0.017151954, 0.015301133, 0.01523653275, 0.01982030175, 0.02348433225, + 0.02843705775, 0.02955323075, 0.02888334275, 0.01585042225, 0.01256129, 0.01651324625, + 0.01873350575, 0.01991933175 + ] + } + }, + { + "size": 20, + "stats": { + "rme": 9.200007574749973, + "deviation": 0.013072982389780956, + "mean": 0.04062502428723404, + "variance": 0.00017090286856352298, + "moe": 0.0037375053116695477, + "sem": 0.0019068904651375245, + "sample": [ + 0.053437106, 0.055375818, 0.081357722, 0.061454097, 0.040864535, 0.031765732, + 0.032419249, 0.032809429, 0.0322497495, 0.04061526, 0.035340808, 0.044202469, + 0.0569939185, 0.0590301865, 0.048673595, 0.030339932, 0.0267235905, 0.0296490705, + 0.0306588285, 0.02998253, 0.035527273, 0.0292072165, 0.029793383, 0.047716143, + 0.049222537, 0.064000956, 0.0566774295, 0.04940418, 0.032196465, 0.035229687, + 0.0316403545, 0.032114071, 0.026134304, 0.0329598915, 0.06141801, 0.0608211085, + 0.0466867525, 0.030995951, 0.029491277, 0.0290619155, 0.0293045425, 0.0353293095, + 0.0296777175, 0.0321526185, 0.0298275115, 0.0333823315, 0.055459579 + ] + } + }, + { + "size": 30, + "stats": { + "rme": 10.196572911452558, + "deviation": 0.016950882253511955, + "mean": 0.05672012503030303, + "variance": 0.0002873324091724266, + "moe": 0.0057835089041819, + "sem": 0.002950769849072398, + "sample": [ + 0.074887433, 0.0445944795, 0.044674446, 0.043556634, 0.0443823625, 0.043829276, + 0.0858092705, 0.103504815, 0.048014488, 0.047890404, 0.048966602, 0.05002043, + 0.043563613, 0.061443108, 0.0841160365, 0.06535325, 0.045085154, 0.0448393195, + 0.0439392025, 0.0500291445, 0.043515649, 0.06409846, 0.0922059635, 0.0861639335, + 0.0566648975, 0.0511201985, 0.04770912, 0.0489836645, 0.047320121, 0.0755704225, + 0.0476051575, 0.0476457385, 0.0446613315 + ] + } + }, + { + "size": 40, + "stats": { + "rme": 9.930646162682553, + "deviation": 0.023668284995469045, + "mean": 0.07679704181081082, + "variance": 0.0005601877146267451, + "moe": 0.007626442485639001, + "sem": 0.0038910420845096943, + "sample": [ + 0.052143771, 0.069434919, 0.058731688, 0.114251402, 0.11239274, 0.058346858, + 0.05844314, 0.059102826, 0.06997728, 0.058053769, 0.069167853, 0.062955236, + 0.119299588, 0.129202811, 0.065879631, 0.066996705, 0.063619309, 0.05215786, + 0.070642053, 0.060865257, 0.111688204, 0.112988049, 0.110367724, 0.062337581, + 0.060540493, 0.061912282, 0.06006606, 0.070275507, 0.05811019, 0.109416035, + 0.111275031, 0.107556884, 0.080654523, 0.065482641, 0.066745946, 0.063019478, + 0.057389223 + ] + } + }, + { + "size": 50, + "stats": { + "rme": 11.73302462038882, + "deviation": 0.030362559243494545, + "mean": 0.09490810106451614, + "variance": 0.000921885003814716, + "moe": 0.011135590864643182, + "sem": 0.005453276623233684, + "sample": [ + 0.088460392, 0.083883499, 0.080107714, 0.077599468, 0.148116763, 0.157023449, + 0.071369693, 0.067788856, 0.080461149, 0.071978216, 0.067765264, 0.11421297, + 0.160781147, 0.073002688, 0.073215338, 0.084701256, 0.075969303, 0.081854793, + 0.12403599, 0.150864601, 0.076944106, 0.076671633, 0.081869227, 0.082000742, + 0.067108813, 0.082105339, 0.148075904, 0.140384757, 0.076174001, 0.088273427, + 0.089350635 + ] + } + }, + { + "size": 100, + "stats": { + "rme": 15.002716363446192, + "deviation": 0.0566192924627138, + "mean": 0.18768983044444446, + "variance": 0.00320574427897832, + "moe": 0.02815857290461308, + "sem": 0.013345295215456436, + "sample": [ + 0.163826084, 0.145625548, 0.281165284, 0.145850567, 0.150691297, 0.190054167, + 0.189516084, 0.161830323, 0.156829129, 0.281492724, 0.13414889, 0.156941707, + 0.160614052, 0.287491174, 0.165815161, 0.163703051, 0.298996685, 0.143825021 + ] + } + }, + { + "size": 250, + "stats": { + "rme": 20.27634381770261, + "deviation": 0.1430509010198173, + "mean": 0.5046538042, + "variance": 0.02046356028258156, + "moe": 0.10232534042870772, + "sem": 0.045236666856192626, + "sample": [ + 0.395821402, 0.390206412, 0.642675487, 0.500978927, 0.38455247, 0.596436916, + 0.602246083, 0.362449302, 0.392620335, 0.778550708 + ] + } + }, + { + "size": 500, + "stats": { + "rme": 12.81937909717097, + "deviation": 0.1395040115871502, + "mean": 1.0064788542857144, + "variance": 0.019461369248907737, + "moe": 0.12902433986374873, + "sem": 0.052727560222210354, + "sample": [ + 0.959229338, 1.2283453930000001, 0.833027396, 1.034469704, 1.070045114, 0.845875176, + 1.074359859 + ] + } + }, + { + "size": 1000, + "stats": { + "rme": 2.0049090098654823, + "deviation": 0.03926800948024038, + "mean": 2.0557517616666665, + "variance": 0.0015419765685402483, + "moe": 0.04121595229012337, + "sem": 0.0160310977402269, + "sample": [2.022743171, 2.096036793, 2.083418595, 2.035792053, 2.091395433, 2.005124525] + } + } + ] + } + ] +} diff --git a/benchmark/src/Benchmark/Free0df59c5.purs b/benchmark/src/Benchmark/Free0df59c5.purs index 56a9ea3..80525fb 100644 --- a/benchmark/src/Benchmark/Free0df59c5.purs +++ b/benchmark/src/Benchmark/Free0df59c5.purs @@ -41,15 +41,16 @@ type Natural f g = forall a. f a -> g a newtype GosubF f a i = GosubF { a :: Unit -> Free f i, f :: i -> Free f a } gosub :: forall f a i. (Unit -> Free f i) -> (i -> Free f a) -> Free f a -gosub a f = Gosub $ mkExists $ GosubF { a: a, f: f} +gosub a f = Gosub $ mkExists $ GosubF { a: a, f: f } -- | The free `Monad` for a `Functor`. -- | -- | The implementation defers the evaluation of monadic binds so that it -- | is safe to use monadic tail recursion, for example. -data Free f a = Pure a - | Free (f (Free f a)) - | Gosub (Exists (GosubF f a)) +data Free f a + = Pure a + | Free (f (Free f a)) + | Gosub (Exists (GosubF f a)) -- | The free `Monad` for an arbitrary type constructor. type FreeC f = Free (Coyoneda f) @@ -74,7 +75,7 @@ instance applicativeFree :: Functor f => Applicative (Free f) where instance bindFree :: Functor f => Bind (Free f) where bind (Gosub g) k = runExists (\(GosubF v) -> gosub v.a (\x -> gosub (\_ -> v.f x) k)) g - bind a k = gosub (\_ -> a) k + bind a k = gosub (\_ -> a) k instance monadFree :: Functor f => Monad (Free f) @@ -88,12 +89,12 @@ instance monadFreeFree :: Functor f => MonadFree f (Free f) where instance monadRecFree :: Functor f => MonadRec (Free f) where tailRecM f u = f u >>= \o -> case o of - Loop a -> tailRecM f a - Done b -> pure b + Loop a -> tailRecM f a + Done b -> pure b -- | Lift an action described by the generating functor `f` into the monad `m` -- | (usually `Free f`). -liftF :: forall f m a. Functor f => Monad m => MonadFree f m => f a -> m a +liftF :: forall f m a. Functor f => Monad m => MonadFree f m => f a -> m a liftF = wrap <<< map pure -- | Lift an action described by the generating type constructor `f` into @@ -165,10 +166,13 @@ resume f = case f of where resumeGosub :: Partial => Free f a -> Either (f (Free f a)) (Free f a) resumeGosub (Gosub g) = - runExists (\(GosubF v) -> case v.a unit of - Pure a -> Right (v.f a) - Free t -> Left ((\h -> h >>= v.f) <$> t) - Gosub h -> runExists (\(GosubF w) -> Right (w.a unit >>= (\z -> w.f z >>= v.f))) h) g + runExists + ( \(GosubF v) -> case v.a unit of + Pure a -> Right (v.f a) + Free t -> Left ((\h -> h >>= v.f) <$> t) + Gosub h -> runExists (\(GosubF w) -> Right (w.a unit >>= (\z -> w.f z >>= v.f))) h + ) + g -- | `runFree` runs a computation of type `Free f a`, using a function which unwraps a single layer of -- | the functor `f` at a time. diff --git a/benchmark/src/Benchmark/Freef686f5f.purs b/benchmark/src/Benchmark/Freef686f5f.purs index 82245f9..39ed5d6 100644 --- a/benchmark/src/Benchmark/Freef686f5f.purs +++ b/benchmark/src/Benchmark/Freef686f5f.purs @@ -17,7 +17,6 @@ import Prelude import Control.Apply (lift2) import Control.Monad.Rec.Class (class MonadRec, Step(..), tailRecM) import Control.Monad.Trans.Class (class MonadTrans) - import Data.CatList (CatList, empty, snoc, uncons) import Data.Either (Either(..)) import Data.Eq (class Eq1, eq1) @@ -26,7 +25,6 @@ import Data.Maybe (Maybe(..)) import Data.Ord (class Ord1, compare1) import Data.Traversable (class Traversable, traverse) import Data.Tuple (Tuple(..)) - import Unsafe.Coerce (unsafeCoerce) -- | The free monad for a type constructor `f`. @@ -95,7 +93,7 @@ instance foldableFree :: (Functor f, Foldable f) => Foldable (Free f) where Right a -> f a foldl f = go where - go r = resume >>> case _ of + go r = resume >>> case _ of Left fa -> foldl go r fa Right a -> f r a foldr f = go diff --git a/benchmark/src/Benchmark/Harness.js b/benchmark/src/Benchmark/Harness.js index 1948812..4b4f944 100644 --- a/benchmark/src/Benchmark/Harness.js +++ b/benchmark/src/Benchmark/Harness.js @@ -3,11 +3,11 @@ import { mkdirSync, writeFileSync } from "node:fs"; // Benchotron disabled decompilation because generated PureScript functions // close over imported modules. Keep its Benchmark.js defaults and batch timing. -export const runSuiteImpl = map => suite => () => { +export const runSuiteImpl = (map) => (suite) => () => { Benchmark.support.decompilation = false; mkdirSync("tmp", { recursive: true }); for (const benchmark of suite) { - const series = benchmark.functions.map(fn => ({ name: fn.name, results: [] })); + const series = benchmark.functions.map((fn) => ({ name: fn.name, results: [] })); for (const size of benchmark.sizes) { console.error(`${benchmark.slug}: n=${size}`); // Generate the same shared batch before measuring any competitor. @@ -26,7 +26,7 @@ export const runSuiteImpl = map => suite => () => { slug: benchmark.slug, title: benchmark.title, sizeInterpretation: benchmark.sizeInterpretation, - series + series, }; const path = `tmp/${benchmark.slug}.json`; writeFileSync(path, JSON.stringify(result)); diff --git a/benchmark/src/Benchmark/Main.purs b/benchmark/src/Benchmark/Main.purs index ec72b25..ba3298d 100644 --- a/benchmark/src/Benchmark/Main.purs +++ b/benchmark/src/Benchmark/Main.purs @@ -24,7 +24,7 @@ leftBindSmallBenchmark = mkBenchmark { slug: "left-bind-small" , title: "Left associated binds (small - " <> show inputsPerSize <> " inputs per size)" - , sizes: [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000] + , sizes: [ 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000 ] , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize , gen: \n -> replicate n 0.0 @@ -52,17 +52,17 @@ leftBindSmallBenchmark = rightBindSmallBenchmark :: Benchmark rightBindSmallBenchmark = mkBenchmark - { slug: "right-bind-small" - , title: "Right associated binds (small - " <> show inputsPerSize <> " inputs per size)" - , sizes: [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000] - , sizeInterpretation: "Number of binds" - , inputsPerSize: inputsPerSize - , gen: \n -> replicate n 0.0 - , functions: - [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) - , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) - ] - } + { slug: "right-bind-small" + , title: "Right associated binds (small - " <> show inputsPerSize <> " inputs per size)" + , sizes: [ 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000 ] + , sizeInterpretation: "Number of binds" + , inputsPerSize: inputsPerSize + , gen: \n -> replicate n 0.0 + , functions: + [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) + , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) + ] + } where inputsPerSize :: Int inputsPerSize = 100 @@ -84,7 +84,7 @@ leftBindLargeBenchmark = mkBenchmark { slug: "left-bind-large" , title: "Left associated binds (large - " <> show inputsPerSize <> " input per size)" - , sizes: [1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) + , sizes: [ 1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize , gen: \n -> replicate n 0.0 @@ -115,7 +115,7 @@ rightBindLargeBenchmark = mkBenchmark { slug: "right-bind-large" , title: "Right associated binds (large - " <> show inputsPerSize <> " input per size)" - , sizes: [1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) + , sizes: [ 1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) , sizeInterpretation: "Number of binds" , inputsPerSize: inputsPerSize , gen: \n -> replicate n 0.0 diff --git a/src/Control/Comonad/Cofree.purs b/src/Control/Comonad/Cofree.purs index 711ecf2..4fd0e33 100644 --- a/src/Control/Comonad/Cofree.purs +++ b/src/Control/Comonad/Cofree.purs @@ -3,7 +3,8 @@ module Control.Comonad.Cofree ( Cofree , deferCofree - , mkCofree, (:<) + , mkCofree + , (:<) , head , tail , hoistCofree @@ -13,7 +14,8 @@ module Control.Comonad.Cofree ) where import Prelude -import Control.Alternative (class Alternative, (<|>), empty) + +import Control.Alternative (class Alternative, empty, (<|>)) import Control.Comonad (class Comonad, extract) import Control.Extend (class Extend) import Control.Lazy as Z @@ -21,10 +23,10 @@ import Control.Monad.Free (Free, runFreeM) import Control.Monad.Rec.Class (class MonadRec) import Control.Monad.State (State, StateT(..), runState, runStateT, state) import Data.Eq (class Eq1, eq1) +import Data.Foldable (class Foldable, foldMap, foldl, foldr) import Data.FoldableWithIndex (class FoldableWithIndex) import Data.FunctorWithIndex (class FunctorWithIndex) -import Data.Foldable (class Foldable, foldr, foldl, foldMap) -import Data.Lazy (Lazy, force, defer) +import Data.Lazy (Lazy, defer, force) import Data.Ord (class Ord1, compare1) import Data.Traversable (class Traversable, traverse) import Data.TraversableWithIndex (class TraversableWithIndex) @@ -86,11 +88,11 @@ explore -> Cofree g a -> b explore pair m w = - case runState (runFreeM step m) w of - Tuple f cof -> f (extract cof) + case runState (runFreeM step m) w of + Tuple f cof -> f (extract cof) where - step :: f (Free f (a -> b)) -> State (Cofree g a) (Free f (a -> b)) - step ff = state \cof -> pair (map Tuple ff) (tail cof) + step :: f (Free f (a -> b)) -> State (Cofree g a) (Free f (a -> b)) + step ff = state \cof -> pair (map Tuple ff) (tail cof) exploreM :: forall f g a b m @@ -104,11 +106,11 @@ exploreM exploreM pair m w = eval <$> runStateT (runFreeM step m) w where - step :: f (Free f (a -> b)) -> StateT (Cofree g a) m (Free f (a -> b)) - step ff = StateT \cof -> pair (map Tuple ff) (tail cof) + step :: f (Free f (a -> b)) -> StateT (Cofree g a) m (Free f (a -> b)) + step ff = StateT \cof -> pair (map Tuple ff) (tail cof) - eval :: forall x y. Tuple (x -> y) (Cofree g x) -> y - eval (Tuple f cof) = f (extract cof) + eval :: forall x y. Tuple (x -> y) (Cofree g x) -> y + eval (Tuple f cof) = f (extract cof) instance semigroupCofree :: (Apply f, Semigroup a) => Semigroup (Cofree f a) where append x y = deferCofree \_ -> Tuple (head x <> head y) (append <$> tail x <*> tail y) @@ -196,8 +198,10 @@ instance bindCofree :: Alternative f => Bind (Cofree f) where bind fa f = loop fa where loop fa' = - let fh = f (head fa') - in mkCofree (head fh) ((tail fh) <|> (loop <$> tail fa')) + let + fh = f (head fa') + in + mkCofree (head fh) ((tail fh) <|> (loop <$> tail fa')) instance monadCofree :: Alternative f => Monad (Cofree f) diff --git a/src/Control/Monad/Free.purs b/src/Control/Monad/Free.purs index bd2f94e..5061ba0 100644 --- a/src/Control/Monad/Free.purs +++ b/src/Control/Monad/Free.purs @@ -17,7 +17,6 @@ import Prelude import Control.Apply (lift2) import Control.Monad.Rec.Class (class MonadRec, Step(..), tailRecM) import Control.Monad.Trans.Class (class MonadTrans) - import Data.CatList (CatList, empty, snoc, uncons) import Data.Either (Either(..)) import Data.Eq (class Eq1, eq1) @@ -26,7 +25,6 @@ import Data.Maybe (Maybe(..)) import Data.Ord (class Ord1, compare1) import Data.Traversable (class Traversable, traverse) import Data.Tuple (Tuple(..)) - import Unsafe.Coerce (unsafeCoerce) -- | The free monad for a type constructor `f`. @@ -95,7 +93,7 @@ instance foldableFree :: (Functor f, Foldable f) => Foldable (Free f) where Right a -> f a foldl f = go where - go r = resume >>> case _ of + go r = resume >>> case _ of Left fa -> foldl go r fa Right a -> f r a foldr f = go @@ -117,7 +115,7 @@ instance semigroupFree :: Semigroup a => Semigroup (Free f a) where instance monoidFree :: Monoid a => Monoid (Free f a) where mempty = pure mempty - + -- | Lift an impure value described by the generating type constructor `f` into -- | the free monad. liftF :: forall f. f ~> Free f diff --git a/src/Control/Monad/Trampoline.purs b/src/Control/Monad/Trampoline.purs index 6634ca2..44d3306 100644 --- a/src/Control/Monad/Trampoline.purs +++ b/src/Control/Monad/Trampoline.purs @@ -13,7 +13,6 @@ import Prelude import Control.Monad.Free (Free, liftF, runFree) - -- | The `Trampoline` monad -- | -- | A computation of type `Trampoline a` consists of zero or more lazy diff --git a/src/Data/Coyoneda.purs b/src/Data/Coyoneda.purs index 9614ee0..12d5b3c 100644 --- a/src/Data/Coyoneda.purs +++ b/src/Data/Coyoneda.purs @@ -18,11 +18,11 @@ import Control.Monad.Trans.Class (class MonadTrans) import Control.MonadPlus (class MonadPlus) import Data.Distributive (class Distributive, collect) import Data.Eq (class Eq1, eq1) -import Data.Exists (Exists, runExists, mkExists) +import Data.Exists (Exists, mkExists, runExists) import Data.Foldable (class Foldable, foldMap, foldl, foldr) import Data.Functor.Invariant (class Invariant, imapF) import Data.Ord (class Ord1, compare1) -import Data.Semigroup.Foldable (class Foldable1, foldMap1, foldr1Default, foldl1Default) +import Data.Semigroup.Foldable (class Foldable1, foldMap1, foldl1Default, foldr1Default) import Data.Semigroup.Traversable (class Traversable1, sequence1, traverse1) import Data.Traversable (class Traversable, traverse) diff --git a/src/Data/Yoneda.purs b/src/Data/Yoneda.purs index 1aab85a..801d63c 100644 --- a/src/Data/Yoneda.purs +++ b/src/Data/Yoneda.purs @@ -11,7 +11,6 @@ import Prelude import Control.Comonad (class Comonad, extract) import Control.Extend (class Extend, (<<=)) import Control.Monad.Trans.Class (class MonadTrans) - import Data.Eq (class Eq1, eq1) import Data.Ord (class Ord1, compare1) diff --git a/test/Test/Control/Monad/Free/Coproduct.purs b/test/Test/Control/Monad/Free/Coproduct.purs index e65826b..cbdf9fb 100644 --- a/test/Test/Control/Monad/Free/Coproduct.purs +++ b/test/Test/Control/Monad/Free/Coproduct.purs @@ -2,7 +2,7 @@ module Test.Control.Monad.Free.Coproduct where import Prelude -import Control.Monad.Free (Free, liftF, hoistFree, foldFree) +import Control.Monad.Free (Free, foldFree, hoistFree, liftF) import Data.Functor.Coproduct (Coproduct, coproduct, left, right) import Effect (Effect) import Effect.Console (log) @@ -42,7 +42,7 @@ t :: T Unit t = hoistFree (right <<< right) (print3 "3") u :: T Unit -u = r *> s *> t +u = r *> s *> t teletype1N :: Teletype1F ~> Effect teletype1N (Print1 x a) = const a <$> log ("teletype1: " <> x) diff --git a/test/Test/Control/Monad/Free/Teletype.purs b/test/Test/Control/Monad/Free/Teletype.purs index 469b3b0..edd2f3b 100644 --- a/test/Test/Control/Monad/Free/Teletype.purs +++ b/test/Test/Control/Monad/Free/Teletype.purs @@ -2,9 +2,9 @@ module Test.Control.Monad.Free.Teletype where import Prelude +import Control.Monad.Free (Free, foldFree, liftF) import Effect (Effect) import Effect.Console (log) -import Control.Monad.Free (Free, foldFree, liftF) data TeletypeF a = PutStrLn String a | GetLine (String -> a) From 50c6cc0496d442adfaedbc090a710ac561cd412e Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:17:25 +0000 Subject: [PATCH 07/13] Credit migration pull request in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5d0afb..cba469f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Notable changes to this project are documented in this file. The format is based Other improvements: -- Migrate from Bower/Pulp to Spago, update CI and formatting, and restore the benchmark runner. +- Migrate from Bower/Pulp to Spago, update CI and formatting, and restore the benchmark runner (#129 by @thomashoneyman). ## [v7.1.0](https://github.com/purescript/purescript-free/releases/tag/v7.1.0) - 2023-09-05 From 0be614e59b128dfc587e12c9a70068bd691ead45 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 18:20:54 +0000 Subject: [PATCH 08/13] Allow the full benchmark workloads a larger Node heap --- README.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b19211d..94beaa4 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Module documentation is [published on Pursuit](http://pursuit.purescript.org/pac ## Benchmarks Run `npm run build:benchmark` and `npm run test:benchmark` to run all four workloads. +The runner allows a 3 GiB Node heap for the three-million-bind cases. Results are written to `tmp/`. The runner uses Benchmark.js defaults and times a batch of inputs, including both bind construction and trampoline execution, as the original Benchotron harness did. Its deterministic zero-array inputs and diff --git a/package.json b/package.json index ac7c4fe..2ff7ea9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "build": "spago build -p free", "build:benchmark": "spago build -p free-benchmark", "test": "spago test -p free", - "test:benchmark": "spago run -p free-benchmark", + "test:benchmark": "node --max-old-space-size=3072 --input-type=module -e \"import { main } from './output/Benchmark.Main/index.js'; main()\"", "lint": "oxlint --deny-warnings benchmark/src", "format": "purs-tidy format-in-place src test benchmark/src && oxfmt --write .", "format:check": "purs-tidy check src test benchmark/src && oxfmt --check ." From 11bb1a148cfea1cacbc134978d34841973037e3c Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 20:14:43 +0000 Subject: [PATCH 09/13] Leave generated benchmark JSON unformatted --- .gitignore | 1 + .oxfmtrc.json | 3 + benchmark/left-bind-large.json | 188 +-------- benchmark/left-bind-small.json | 633 +----------------------------- benchmark/right-bind-large.json | 188 +-------- benchmark/right-bind-small.json | 657 +------------------------------- 6 files changed, 8 insertions(+), 1662 deletions(-) create mode 100644 .oxfmtrc.json diff --git a/.gitignore b/.gitignore index 043a700..d695234 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ !/.gitignore !/.github/ !/.tidyrc.json +!/.oxfmtrc.json /bower_components/ /node_modules/ /output/ diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..a05a653 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,3 @@ +{ + "ignorePatterns": ["benchmark/*.json"] +} diff --git a/benchmark/left-bind-large.json b/benchmark/left-bind-large.json index 6808433..2346c7d 100644 --- a/benchmark/left-bind-large.json +++ b/benchmark/left-bind-large.json @@ -1,187 +1 @@ -{ - "slug": "left-bind-large", - "title": "Left associated binds (large - 1 input per size)", - "sizeInterpretation": "Number of binds", - "series": [ - { - "name": "Free", - "results": [ - { - "size": 100000, - "stats": { - "moe": 0.2956101016555821, - "rme": 14.39112929360249, - "sem": 0.11497864708501832, - "deviation": 0.2816390166738393, - "mean": 2.0541133056666667, - "variance": 0.07932053571300712, - "sample": [ - 1.7958541160000001, 1.872374945, 2.288292841, 2.511392654, 1.954026152, 1.902739126 - ] - } - }, - { - "size": 500000, - "stats": { - "rme": 12.595494771361663, - "deviation": 1.0926834185433445, - "mean": 10.769947354, - "variance": 1.1939570531595698, - "moe": 1.3565281558514735, - "sem": 0.4886628803499545, - "sample": [9.71459062, 10.96870124, 10.954100764, 12.402810162, 9.809533984] - } - }, - { - "size": 1000000, - "stats": { - "rme": 102.65855299659903, - "deviation": 32.67164802409972, - "mean": 39.5103032394, - "variance": 1067.4365846106589, - "moe": 40.560705590136436, - "sem": 14.61120518376673, - "sample": [97.227805073, 33.411728362, 22.214333973, 19.793394896, 24.904253893] - } - }, - { - "size": 1500000, - "stats": { - "rme": 91.58067102417942, - "deviation": 42.97479006541146, - "mean": 58.25650174980001, - "variance": 1846.8325811661878, - "moe": 53.351695217679676, - "sem": 19.21891038100853, - "sample": [134.934246698, 44.415789815, 37.506067285, 37.396271162, 37.030133789] - } - }, - { - "size": 2000000, - "stats": { - "rme": 40.897353243454894, - "deviation": 24.960889781868154, - "mean": 75.77035457179998, - "variance": 623.0460187025701, - "moe": 30.98806956304731, - "sem": 11.162849266227418, - "sample": [119.192609228, 62.194457431, 74.893429245, 62.286611382, 60.284665573] - } - }, - { - "size": 2500000, - "stats": { - "rme": 24.226438792294573, - "deviation": 15.148886076686232, - "mean": 77.62928395, - "variance": 229.48874936441797, - "moe": 18.806810961043304, - "sem": 6.774787810174101, - "sample": [104.234941609, 68.549368142, 75.577693107, 68.529232435, 71.255184457] - } - }, - { - "size": 3000000, - "stats": { - "rme": 0.9036291855144747, - "deviation": 0.5496231347585575, - "mean": 75.510824967, - "variance": 0.30208559026182347, - "moe": 0.6823378526245627, - "sem": 0.2457989382653324, - "sample": [76.015258776, 76.161614772, 74.961221678, 75.357864327, 75.058165282] - } - } - ] - }, - { - "name": "Free v0.6.1", - "results": [ - { - "size": 100000, - "stats": { - "rme": 13.464786421416749, - "deviation": 0.44150101594625923, - "mean": 4.0706775109999995, - "variance": 0.19492314708157904, - "moe": 0.5481080327607932, - "sem": 0.19744525675821084, - "sample": [3.66077755, 4.339257057, 4.29966785, 4.518401322, 3.535283776] - } - }, - { - "size": 500000, - "stats": { - "rme": 44.6759194868656, - "deviation": 24.372315398627084, - "mean": 67.726362319, - "variance": 594.0097578901549, - "moe": 30.257375101019324, - "sem": 10.899630800079008, - "sample": [34.012386673, 55.145016748, 82.421494614, 70.000856272, 97.052057288] - } - }, - { - "size": 1000000, - "stats": { - "rme": 17.61229588902891, - "deviation": 20.387979711109995, - "mean": 143.711882828, - "variance": 415.6697167006329, - "moe": 25.310962031361885, - "sem": 9.117781711585694, - "sample": [107.627165983, 157.551595375, 150.54147385, 152.756308747, 150.082870185] - } - }, - { - "size": 1500000, - "stats": { - "rme": 7.168686647443891, - "deviation": 12.729640772372832, - "mean": 220.45046057960002, - "variance": 162.0437541936568, - "moe": 15.803402731798345, - "sem": 5.692868419235715, - "sample": [206.630076621, 212.397207164, 220.711863941, 222.348590939, 240.164564233] - } - }, - { - "size": 2000000, - "stats": { - "rme": 11.062031748305523, - "deviation": 29.44693059250524, - "mean": 330.47574609820003, - "variance": 867.121721319821, - "moe": 36.55733195383244, - "sem": 13.169067706711974, - "sample": [278.870463631, 338.792022116, 339.805939187, 341.431522044, 353.478783513] - } - }, - { - "size": 2500000, - "stats": { - "rme": 3.244145393596063, - "deviation": 9.32213107277591, - "mean": 356.7379848668, - "variance": 86.90212773801416, - "moe": 11.573098903263713, - "sem": 4.168983754777995, - "sample": [345.987214502, 355.449872606, 353.704699248, 371.608380984, 356.939756994] - } - }, - { - "size": 3000000, - "stats": { - "rme": 5.2069916890538925, - "deviation": 17.865549890153357, - "mean": 425.9552380094, - "variance": 319.1778728775587, - "moe": 22.179453842239184, - "sem": 7.989716801959361, - "sample": [423.433975557, 438.419904645, 436.876036402, 395.799223561, 435.247049882] - } - } - ] - } - ] -} +{"slug":"left-bind-large","title":"Left associated binds (large - 1 input per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":100000,"stats":{"moe":0.2956101016555821,"rme":14.39112929360249,"sem":0.11497864708501832,"deviation":0.2816390166738393,"mean":2.0541133056666667,"variance":0.07932053571300712,"sample":[1.7958541160000001,1.872374945,2.288292841,2.511392654,1.954026152,1.902739126]}},{"size":500000,"stats":{"rme":12.595494771361663,"deviation":1.0926834185433445,"mean":10.769947354,"variance":1.1939570531595698,"moe":1.3565281558514735,"sem":0.4886628803499545,"sample":[9.71459062,10.96870124,10.954100764,12.402810162,9.809533984]}},{"size":1000000,"stats":{"rme":102.65855299659903,"deviation":32.67164802409972,"mean":39.5103032394,"variance":1067.4365846106589,"moe":40.560705590136436,"sem":14.61120518376673,"sample":[97.227805073,33.411728362,22.214333973,19.793394896,24.904253893]}},{"size":1500000,"stats":{"rme":91.58067102417942,"deviation":42.97479006541146,"mean":58.25650174980001,"variance":1846.8325811661878,"moe":53.351695217679676,"sem":19.21891038100853,"sample":[134.934246698,44.415789815,37.506067285,37.396271162,37.030133789]}},{"size":2000000,"stats":{"rme":40.897353243454894,"deviation":24.960889781868154,"mean":75.77035457179998,"variance":623.0460187025701,"moe":30.98806956304731,"sem":11.162849266227418,"sample":[119.192609228,62.194457431,74.893429245,62.286611382,60.284665573]}},{"size":2500000,"stats":{"rme":24.226438792294573,"deviation":15.148886076686232,"mean":77.62928395,"variance":229.48874936441797,"moe":18.806810961043304,"sem":6.774787810174101,"sample":[104.234941609,68.549368142,75.577693107,68.529232435,71.255184457]}},{"size":3000000,"stats":{"rme":0.9036291855144747,"deviation":0.5496231347585575,"mean":75.510824967,"variance":0.30208559026182347,"moe":0.6823378526245627,"sem":0.2457989382653324,"sample":[76.015258776,76.161614772,74.961221678,75.357864327,75.058165282]}}]},{"name":"Free v0.6.1","results":[{"size":100000,"stats":{"rme":13.464786421416749,"deviation":0.44150101594625923,"mean":4.0706775109999995,"variance":0.19492314708157904,"moe":0.5481080327607932,"sem":0.19744525675821084,"sample":[3.66077755,4.339257057,4.29966785,4.518401322,3.535283776]}},{"size":500000,"stats":{"rme":44.6759194868656,"deviation":24.372315398627084,"mean":67.726362319,"variance":594.0097578901549,"moe":30.257375101019324,"sem":10.899630800079008,"sample":[34.012386673,55.145016748,82.421494614,70.000856272,97.052057288]}},{"size":1000000,"stats":{"rme":17.61229588902891,"deviation":20.387979711109995,"mean":143.711882828,"variance":415.6697167006329,"moe":25.310962031361885,"sem":9.117781711585694,"sample":[107.627165983,157.551595375,150.54147385,152.756308747,150.082870185]}},{"size":1500000,"stats":{"rme":7.168686647443891,"deviation":12.729640772372832,"mean":220.45046057960002,"variance":162.0437541936568,"moe":15.803402731798345,"sem":5.692868419235715,"sample":[206.630076621,212.397207164,220.711863941,222.348590939,240.164564233]}},{"size":2000000,"stats":{"rme":11.062031748305523,"deviation":29.44693059250524,"mean":330.47574609820003,"variance":867.121721319821,"moe":36.55733195383244,"sem":13.169067706711974,"sample":[278.870463631,338.792022116,339.805939187,341.431522044,353.478783513]}},{"size":2500000,"stats":{"rme":3.244145393596063,"deviation":9.32213107277591,"mean":356.7379848668,"variance":86.90212773801416,"moe":11.573098903263713,"sem":4.168983754777995,"sample":[345.987214502,355.449872606,353.704699248,371.608380984,356.939756994]}},{"size":3000000,"stats":{"rme":5.2069916890538925,"deviation":17.865549890153357,"mean":425.9552380094,"variance":319.1778728775587,"moe":22.179453842239184,"sem":7.989716801959361,"sample":[423.433975557,438.419904645,436.876036402,395.799223561,435.247049882]}}]}]} diff --git a/benchmark/left-bind-small.json b/benchmark/left-bind-small.json index 1e8a8ce..df1a9ce 100644 --- a/benchmark/left-bind-small.json +++ b/benchmark/left-bind-small.json @@ -1,632 +1 @@ -{ - "slug": "left-bind-small", - "title": "Left associated binds (small - 100 inputs per size)", - "sizeInterpretation": "Number of binds", - "series": [ - { - "name": "Free", - "results": [ - { - "size": 1, - "stats": { - "moe": 0.0002552396452441629, - "rme": 10.488846513381104, - "sem": 0.00013022430879804228, - "deviation": 0.0010170843655850777, - "mean": 0.002433438652367941, - "variance": 0.0000010344606067176, - "sample": [ - 0.0039486718, 0.0035355652, 0.0036191946, 0.0016963445, 0.0016091770625, - 0.0018094969375, 0.001768847888888889, 0.0014602111388888888, 0.0018064448055555556, - 0.0016578250555555557, 0.0014646249166666665, 0.0017390423333333333, - 0.0014830704444444445, 0.0015771075277777778, 0.001664818361111111, - 0.0015163020555555556, 0.002596861638888889, 0.0031630854444444443, - 0.003092734472222222, 0.0029241114444444444, 0.0028705598333333333, - 0.0016454055833333332, 0.001711620861111111, 0.0016900070833333334, - 0.0014959885555555557, 0.0014836878333333334, 0.0015052755833333334, - 0.001788427138888889, 0.0014512297777777778, 0.0014522022777777779, - 0.0019536894722222225, 0.0024363785277777775, 0.0029895754999999997, - 0.0037041276388888886, 0.0034885652777777772, 0.0030373121944444444, - 0.0024320685833333334, 0.0029131954444444447, 0.0026020054722222224, - 0.003052439472222222, 0.0029362796111111113, 0.003079990138888889, - 0.003035265194444444, 0.006503356361111112, 0.004779550083333333, - 0.004934420416666667, 0.00323369375, 0.0018781574722222224, 0.0025841495833333335, - 0.00179031525, 0.0017129315833333332, 0.0018879475555555554, 0.0015875140555555555, - 0.0017556328333333334, 0.0017726653333333332, 0.00164373475, 0.0017631573333333334, - 0.0020732539166666668, 0.0031871428333333333, 0.003042760888888889, - 0.0034205391111111114 - ] - } - }, - { - "size": 2, - "stats": { - "rme": 13.273266950760515, - "deviation": 0.0021950139243280247, - "mean": 0.004331332343537417, - "variance": 0.000004818086127993915, - "moe": 0.0005749093044823528, - "sem": 0.0002933210737154861, - "sample": [ - 0.0039336455714285715, 0.002869311523809524, 0.0033681905714285716, - 0.004006681238095238, 0.003035744857142857, 0.0035403969047619046, - 0.004620695476190476, 0.004139437285714286, 0.005022591904761904, - 0.007341679428571429, 0.009562048904761904, 0.0064429179047619045, 0.004964747, - 0.003206654095238095, 0.003663248238095238, 0.003422980238095238, - 0.003547155619047619, 0.003276085761904762, 0.003538400761904762, - 0.0034188595238095238, 0.0035068348095238094, 0.008298172714285715, - 0.01652297566666667, 0.0033820317619047617, 0.0034403469523809523, - 0.0029582179047619047, 0.0029850279047619046, 0.0033098496666666664, - 0.003237449904761905, 0.0033115743333333334, 0.003109104619047619, - 0.003008495904761905, 0.0032912558095238094, 0.003140042619047619, - 0.004436925952380952, 0.005841434666666667, 0.005683290190476191, - 0.005824430571428571, 0.004936367, 0.003123343904761905, 0.003056350047619048, - 0.0031864456190476187, 0.004215455142857143, 0.004913718571428571, - 0.003412681571428571, 0.0029259104761904763, 0.0031821540476190476, - 0.0034887706666666663, 0.003014242761904762, 0.006136003428571428, - 0.006840230571428571, 0.004696864619047619, 0.0032181907142857145, - 0.0037648729999999997, 0.002968609142857143, 0.0032654651904761903 - ] - } - }, - { - "size": 3, - "stats": { - "rme": 6.470985918969754, - "deviation": 0.0015436796466411341, - "mean": 0.005712226152698048, - "variance": 0.000002382946851454097, - "moe": 0.00036963735000079844, - "sem": 0.00018859048469428493, - "sample": [ - 0.007778895, 0.005844431846153846, 0.005382359999999999, 0.004743467846153846, - 0.007507394538461539, 0.008426685692307692, 0.004655098461538462, - 0.005786476384615384, 0.004850101076923076, 0.0050011261538461535, - 0.004712081384615385, 0.004931171307692308, 0.004543063, 0.005600400769230769, - 0.004334335846153847, 0.005518897461538461, 0.005784022692307693, - 0.004827880923076923, 0.004425803769230769, 0.005326636230769231, - 0.004582035769230769, 0.005139928615384615, 0.008890097846153846, - 0.008353854769230768, 0.00865039723076923, 0.009909505538461538, 0.005248373076923076, - 0.006083129230769231, 0.004234217615384616, 0.005030254999999999, - 0.005296868769230769, 0.004742823461538461, 0.004223510076923077, - 0.005023698769230769, 0.004276470769230769, 0.004699187923076923, - 0.004862148538461538, 0.00637102, 0.008056447384615384, 0.008743886615384614, - 0.008585705461538461, 0.007934472461538462, 0.004897112538461539, - 0.003994243461538462, 0.004390586615384615, 0.004988542692307692, - 0.0046407471538461535, 0.004183789692307692, 0.005637116923076923, - 0.0038752725384615383, 0.00452943023076923, 0.004211434538461538, - 0.004948777692307693, 0.004232149846153846, 0.0063883213846153844, - 0.008749506846153847, 0.008443853461538461, 0.007229518923076924, - 0.005391123615384615, 0.004077244307692308, 0.004745374384615385, - 0.0051690306153846155, 0.006065091230769231, 0.006800881384615385, - 0.006884926230769231, 0.004458918846153846, 0.004867791769230769 - ] - } - }, - { - "size": 4, - "stats": { - "rme": 7.316025786941184, - "deviation": 0.0023496435575443117, - "mean": 0.0077483790912457945, - "variance": 0.000005520824847509489, - "moe": 0.0005668734123855013, - "sem": 0.0002892211287681129, - "sample": [ - 0.010926924666666666, 0.015849782833333333, 0.010118213833333334, - 0.010640174666666667, 0.010602080333333333, 0.006744016333333333, 0.006256407, - 0.006167282111111111, 0.006629436444444445, 0.005880073222222223, - 0.0065147362222222225, 0.006765934666666667, 0.006359928666666666, - 0.007059587333333333, 0.006296072888888889, 0.0063365007, 0.0097455376, 0.0111037415, - 0.0119827152, 0.010145258899999999, 0.0089865379, 0.006231237, 0.0061933367000000005, - 0.0066719027, 0.0069704704000000004, 0.0059092401, 0.0059322061, 0.0055762401, - 0.0052496255, 0.0062842995999999995, 0.0057870191000000005, 0.0052720451, - 0.0087759826, 0.0102064389, 0.0101803343, 0.0119499673, 0.0110047092, 0.0082972498, - 0.0056388029999999995, 0.0056457241, 0.0068318124, 0.0065510410000000005, - 0.0066950716, 0.0063556251, 0.005736691800000001, 0.006300964300000001, 0.0069151402, - 0.0077851488, 0.0111336224, 0.011790893600000001, 0.0110446644, 0.0108201519, - 0.0064478020999999995, 0.0058321573, 0.0053380637, 0.00685978, 0.0057740505999999995, - 0.0057251719, 0.007094784, 0.0057350451, 0.0053049486, 0.006681964899999999, - 0.0056606299, 0.006800473999999999, 0.0111638324, 0.0101257134 - ] - } - }, - { - "size": 5, - "stats": { - "rme": 12.677671975985163, - "deviation": 0.0048132118594694994, - "mean": 0.009943917794642857, - "variance": 0.00002316700840413784, - "moe": 0.0012606572795664393, - "sem": 0.000643192489574714, - "sample": [ - 0.007136109, 0.01001541525, 0.006874251375, 0.00657671925, 0.007545646, 0.00703617125, - 0.00797082275, 0.006504831875, 0.006653333875, 0.0083824165, 0.01348840475, - 0.027149076375, 0.016645459, 0.012295565875, 0.008750754, 0.008509081375, - 0.00863639375, 0.01481984975, 0.0113543905, 0.0251242275, 0.027828182625, - 0.0088383495, 0.0084518575, 0.00720552875, 0.007547649875, 0.00781369275, - 0.007629465125, 0.006782815125, 0.007626611625, 0.00686263625, 0.00865185, - 0.00765608975, 0.006820999, 0.01067880175, 0.013389152625, 0.012417540375, - 0.01283362775, 0.013069722625, 0.0085037835, 0.007403853875, 0.006577496875, - 0.007260755375, 0.006406379375, 0.006334173375, 0.007226516625, 0.0071006235, - 0.00658204275, 0.007658963, 0.007595737625, 0.008369632875, 0.01524457825, - 0.01443299125, 0.011445071125, 0.010447696625, 0.007851224125, 0.006844383375 - ] - } - }, - { - "size": 10, - "stats": { - "rme": 7.725102064182073, - "deviation": 0.005012722395663803, - "mean": 0.017809035980392157, - "variance": 0.000025127385815989456, - "moe": 0.0013757662061322025, - "sem": 0.0007019215337409196, - "sample": [ - 0.0153355876, 0.0150565056, 0.016687512800000002, 0.0141886928, 0.016017471, - 0.0252713694, 0.0304281134, 0.0241396694, 0.0161108368, 0.0140723834, 0.0158514908, - 0.0138268142, 0.0145183972, 0.0129342854, 0.015370398399999999, 0.012952317999999999, - 0.015015609599999999, 0.0135938712, 0.021212686, 0.025169208399999997, - 0.025974992600000003, 0.0217217026, 0.013928074200000001, 0.013382038199999998, - 0.013754995, 0.013072167, 0.0201330126, 0.018340424, 0.014269800199999998, - 0.014669332600000001, 0.0280230892, 0.0212331338, 0.0254651668, 0.0262337508, - 0.0159697522, 0.014009626399999999, 0.0148521726, 0.0150008298, 0.016571361, - 0.0142225764, 0.0150954334, 0.015482556, 0.024903210000000002, 0.0255914266, - 0.027435404000000004, 0.0208395636, 0.0147164342, 0.0139507414, 0.015474164600000001, - 0.012805972600000002, 0.0133847092 - ] - } - }, - { - "size": 20, - "stats": { - "rme": 7.706571550596003, - "deviation": 0.009618758998436368, - "mean": 0.03606907327173913, - "variance": 0.00009252052467000059, - "moe": 0.002779688939323475, - "sem": 0.0014182086425119772, - "sample": [ - 0.0535175065, 0.0560606645, 0.0439089795, 0.0460493225, 0.037472929, 0.031148172, - 0.0305528595, 0.031626917, 0.026668294, 0.031983636, 0.026797478, 0.0588438515, - 0.034806729, 0.0398920685, 0.0297911415, 0.034529819, 0.0267543685, 0.0325386495, - 0.0290946105, 0.030144112, 0.028344417, 0.0259824145, 0.0270000555, 0.026588971, - 0.048901875, 0.0472573585, 0.047387821, 0.0396549675, 0.028906752666666664, - 0.028451720666666666, 0.03902135566666667, 0.03340420166666667, 0.027085803333333335, - 0.040464362, 0.06007030333333333, 0.034706196333333335, 0.03168342133333333, - 0.031121557666666664, 0.028060120999999997, 0.029686122, 0.028183035999999998, - 0.027468169333333334, 0.027891482666666665, 0.04315312033333333, 0.04672263766666667, - 0.04979701833333333 - ] - } - }, - { - "size": 30, - "stats": { - "rme": 10.727464773354011, - "deviation": 0.017497098953260567, - "mean": 0.05328117231944445, - "variance": 0.00030614847178019207, - "moe": 0.005715718991398452, - "sem": 0.0029161831588767613, - "sample": [ - 0.0437583345, 0.0563246925, 0.077170353, 0.0718714085, 0.051097012, 0.0435295165, - 0.0477552005, 0.0441354615, 0.0399841765, 0.052155323, 0.0822814725, 0.054768652, - 0.044760656, 0.0461335, 0.0388777875, 0.038741085, 0.039999193, 0.0406841055, - 0.0443862665, 0.0732636355, 0.077369141, 0.040346191, 0.0360389375, 0.0543973315, - 0.052894189, 0.0483386085, 0.042633904, 0.12246182, 0.0477536585, 0.0443786195, - 0.042991129, 0.0488636735, 0.0462491055, 0.0400063175, 0.0654493365, 0.076272409 - ] - } - }, - { - "size": 40, - "stats": { - "rme": 10.154886280070158, - "deviation": 0.01795866409980932, - "mean": 0.06857997207142856, - "variance": 0.00032251361624978007, - "moe": 0.006964218174757446, - "sem": 0.0033938685062170786, - "sample": [ - 0.061948325, 0.053533423, 0.068941853, 0.0521256985, 0.0986347685, 0.09762585, - 0.062746492, 0.060164327, 0.057635129, 0.057103704, 0.1023486995, 0.08781686, - 0.0573581915, 0.057519049, 0.0562060315, 0.055089347, 0.0600607655, 0.0996447495, - 0.0738273075, 0.0547735765, 0.0816252195, 0.0602613015, 0.059108246, 0.112424379, - 0.059699418, 0.0586908175, 0.0557466835, 0.0575790055 - ] - } - }, - { - "size": 50, - "stats": { - "rme": 9.50055320197502, - "deviation": 0.024013611717697836, - "mean": 0.08757692093750001, - "variance": 0.0005766535477283547, - "moe": 0.00832029196631879, - "sem": 0.004245046921591219, - "sample": [ - 0.079638462, 0.06851665, 0.07127316, 0.074230355, 0.070679754, 0.112661168, - 0.092338965, 0.141421397, 0.086956681, 0.104951542, 0.104799999, 0.117770659, - 0.124903024, 0.106731623, 0.07107002, 0.073123102, 0.070067264, 0.062828854, - 0.063511946, 0.096015056, 0.131979576, 0.078504255, 0.065441019, 0.098218105, - 0.068777288, 0.077960162, 0.078684761, 0.141218883, 0.0740446, 0.063999425, - 0.060809417, 0.069334298 - ] - } - }, - { - "size": 100, - "stats": { - "rme": 12.350350503376253, - "deviation": 0.044367325916488475, - "mean": 0.16812728559999998, - "variance": 0.0019684596089799096, - "moe": 0.02076430906341243, - "sem": 0.009920835672915638, - "sample": [ - 0.134376747, 0.13782974, 0.139861309, 0.251633224, 0.136193655, 0.137276661, - 0.198575206, 0.183625698, 0.132277407, 0.133466606, 0.144596417, 0.249094405, - 0.211936586, 0.142706633, 0.231570045, 0.13319439, 0.138165128, 0.130450134, - 0.159511609, 0.236204112 - ] - } - }, - { - "size": 250, - "stats": { - "rme": 13.589636274059865, - "deviation": 0.07939310774473976, - "mean": 0.4178953798999999, - "variance": 0.0063032655573678565, - "moe": 0.056790462134510666, - "sem": 0.025106305099253167, - "sample": [ - 0.348042196, 0.415641228, 0.498849248, 0.318846263, 0.384543239, 0.542469935, - 0.341740948, 0.462471858, 0.5059616, 0.360387284 - ] - } - }, - { - "size": 500, - "stats": { - "rme": 10.636435414630824, - "deviation": 0.09571277318851444, - "mean": 0.8322594625714286, - "variance": 0.009160934951436009, - "moe": 0.0885227402185636, - "sem": 0.03617602787844855, - "sample": [ - 0.907020954, 0.795681981, 0.700632592, 0.891420737, 0.936428737, 0.713890966, - 0.880740271 - ] - } - }, - { - "size": 1000, - "stats": { - "rme": 4.591701253826344, - "deviation": 0.07444284597715682, - "mean": 1.7016717745, - "variance": 0.005541737317178694, - "moe": 0.07813568420572552, - "sem": 0.030391164607438938, - "sample": [ - 1.7039705029999999, 1.697325038, 1.741995438, 1.651626935, 1.8159186470000002, - 1.599194086 - ] - } - } - ] - }, - { - "name": "Free v0.6.1", - "results": [ - { - "size": 1, - "stats": { - "rme": 8.735495607850144, - "deviation": 0.0009566537064906855, - "mean": 0.0026223211565734547, - "variance": 9.151863141423666e-7, - "moe": 0.00022907274945619923, - "sem": 0.00011687385176336695, - "sample": [ - 0.0020955884444444446, 0.0018656194074074073, 0.002529691259259259, - 0.0021241020344827588, 0.0020203787586206895, 0.002130749620689655, - 0.002371468068965517, 0.0019209316206896551, 0.0020771012068965516, - 0.002195536379310345, 0.002683446551724138, 0.00276548675862069, 0.003850824068965517, - 0.005843688344827586, 0.0033190352413793108, 0.002710146896551724, - 0.0018057851724137932, 0.0021272292068965516, 0.0021996894827586207, - 0.002130506655172414, 0.0023403379655172413, 0.0021488980344827584, - 0.0021472244827586205, 0.0018417698965517242, 0.0020753954137931034, - 0.0023167177586206895, 0.0021568740344827587, 0.002185456482758621, - 0.002152681103448276, 0.004005337482758621, 0.004282362, 0.004819472448275862, - 0.003409247724137931, 0.0018264066551724138, 0.002665114896551724, - 0.0021419237931034484, 0.0019223060689655173, 0.0020705038275862066, - 0.0021531744827586207, 0.0023007536896551724, 0.0022768282068965514, - 0.002136213620689655, 0.0020925898620689654, 0.002168903689655172, - 0.002200590655172414, 0.0027934569310344827, 0.0035478274827586203, - 0.0038080423793103446, 0.004510914379310345, 0.0022261902758620687, - 0.0019695676896551726, 0.002158820068965517, 0.0025900539655172414, - 0.002469301793103448, 0.002252531344827586, 0.002262223931034483, - 0.0023901802758620693, 0.0018454185862068965, 0.0026553313103448275, - 0.002307572655172414, 0.0018179567931034483, 0.0020985635862068967, - 0.006788606655172414, 0.003389774344827586, 0.0038639349999999998, - 0.003183958689655172, 0.0021611998965517243 - ] - } - }, - { - "size": 2, - "stats": { - "rme": 7.425364870592388, - "deviation": 0.001389851269889524, - "mean": 0.004992403978557506, - "variance": 0.0000019316865524135227, - "moe": 0.0003707042112218658, - "sem": 0.0001891348016438091, - "sample": [ - 0.00433391447368421, 0.0036924764736842104, 0.005039807263157894, - 0.0038711637894736843, 0.003785189157894737, 0.004665331631578948, - 0.0038113532631578943, 0.006948522684210527, 0.008406592368421053, - 0.007226863947368421, 0.005908266578947369, 0.004034722947368422, - 0.004613224210526315, 0.004631820578947368, 0.0039423023157894735, - 0.003959305631578948, 0.0041707787368421055, 0.006683196157894736, - 0.005235866263157894, 0.007722273947368421, 0.0077517455263157896, 0.007535821, - 0.0040905918421052625, 0.004090406315789474, 0.004850734947368421, - 0.004123789947368421, 0.0047673881052631584, 0.003976588368421053, - 0.003910656526315789, 0.003802081789473684, 0.0040315394736842106, - 0.0043445310000000004, 0.006752901315789473, 0.006806834842105263, - 0.004385266052631579, 0.0047505942105263155, 0.004526033789473684, - 0.0038881441052631576, 0.004701974473684211, 0.0038686012105263157, - 0.004726458105263158, 0.004186599684210527, 0.0037967417368421053, - 0.004304542105263158, 0.003780593631578947, 0.004321067684210526, - 0.004803945947368421, 0.008202262578947368, 0.0075778706842105255, - 0.007233411684210527, 0.0041867741052631574, 0.004817490157894737, - 0.003955017263157895, 0.004057842210526316 - ] - } - }, - { - "size": 3, - "stats": { - "rme": 7.818079311734423, - "deviation": 0.0024533241683735835, - "mean": 0.008293342320661156, - "variance": 0.000006018799475125935, - "moe": 0.0006483800802229254, - "sem": 0.00033080616337904353, - "sample": [ - 0.007715665272727273, 0.006691219909090909, 0.009536494909090908, - 0.012466559727272728, 0.015551666363636363, 0.008428253454545455, - 0.006497179363636364, 0.006676447454545455, 0.007738683, 0.006424513181818182, - 0.006203786454545454, 0.006773426181818182, 0.006854815181818182, - 0.006623254818181818, 0.007836115818181819, 0.006735657272727272, - 0.012413788727272728, 0.011738470272727274, 0.011840136272727274, - 0.009564534454545455, 0.006523656545454545, 0.006773622454545455, - 0.007748262909090909, 0.006434551, 0.0062835010909090905, 0.008475440363636365, - 0.009960866454545454, 0.007531812, 0.01247630309090909, 0.012289372545454546, - 0.011580511909090908, 0.005559322272727273, 0.0067570220000000005, - 0.007853614181818182, 0.007566773, 0.006594065272727273, 0.007756785454545454, - 0.006505442454545454, 0.006439621545454546, 0.006725699000000001, - 0.006427980636363636, 0.006781947636363636, 0.014187253363636364, - 0.011818953363636364, 0.01339631409090909, 0.005994947818181818, 0.006187887636363637, - 0.007747282818181819, 0.006794653727272727, 0.006239835454545455, - 0.007556421999999999, 0.0065077268181818184, 0.008079023636363637, - 0.007585268272727272, 0.008681416727272727 - ] - } - }, - { - "size": 4, - "stats": { - "rme": 12.701169866061129, - "deviation": 0.0062609242448788014, - "mean": 0.01409294857011145, - "variance": 0.00003919917240011119, - "moe": 0.0017899693370264883, - "sem": 0.0009132496617482083, - "sample": [ - 0.016302299, 0.0153141902, 0.018691561666666665, 0.021726643166666667, - 0.02383374016666667, 0.022520573833333335, 0.012472651500000001, 0.010737822833333334, - 0.032378145500000004, 0.024453183, 0.013092010333333334, 0.008409251833333334, - 0.010042404999999999, 0.008730090333333334, 0.011367661142857142, - 0.009380696142857142, 0.008572485285714285, 0.009742792857142857, 0.0087843215, - 0.010408286375, 0.010425794125, 0.016534163125, 0.018967704875, 0.015998863375, - 0.009054976375, 0.00882403525, 0.00873378675, 0.0091692505, 0.00969626775, - 0.01707087425, 0.014366886125, 0.012181811375, 0.01665274925, 0.020540483375, - 0.013379976, 0.009518771875, 0.010260218875, 0.008866679625, 0.00915245325, - 0.017044609375, 0.009406062875, 0.00949480225, 0.01163353925, 0.009095463125, - 0.02950122675, 0.029605849875, 0.0102304715 - ] - } - }, - { - "size": 5, - "stats": { - "rme": 8.212406091520275, - "deviation": 0.004054273117530343, - "mean": 0.01411398747416413, - "variance": 0.00001643713051152921, - "moe": 0.0011590979670846636, - "sem": 0.0005913765138187059, - "sample": [ - 0.011628745142857142, 0.011060291428571428, 0.012645932, 0.011123363857142857, - 0.013624806714285715, 0.012481165857142857, 0.010848137999999998, - 0.019532232142857143, 0.019588146, 0.022096629714285713, 0.011688781714285714, - 0.011006496285714287, 0.00989549442857143, 0.010210010571428571, 0.012205640142857143, - 0.012532384428571427, 0.01038633757142857, 0.010618129142857143, 0.010454493714285714, - 0.022168221285714284, 0.023165689, 0.021356801285714287, 0.010841319142857143, - 0.011466057714285714, 0.013299938428571427, 0.012848861285714287, - 0.011210453714285714, 0.012468572571428572, 0.011814883714285714, - 0.013782243285714285, 0.022042676714285715, 0.020105443857142857, 0.018435007, - 0.010751906285714286, 0.012512181428571429, 0.01200722957142857, 0.010977499142857143, - 0.010876453714285713, 0.011031800714285714, 0.011455988571428571, - 0.011939975142857143, 0.015216491142857143, 0.019556211142857143, - 0.019726451142857145, 0.017603454571428572, 0.013664983285714286, 0.017403397571428572 - ] - } - }, - { - "size": 10, - "stats": { - "rme": 7.947330558829363, - "deviation": 0.00812604676526758, - "mean": 0.029232447773049647, - "variance": 0.0000660326360313157, - "moe": 0.002323199254961408, - "sem": 0.0011853057423272491, - "sample": [ - 0.023793245666666667, 0.022935259, 0.04110835166666667, 0.04466183466666667, - 0.043419083, 0.028256005333333334, 0.032543671, 0.034962919, 0.026909962, - 0.019311464333333334, 0.024704298333333333, 0.023482615, 0.023595377666666667, - 0.042146038999999996, 0.04136304166666666, 0.041781387333333336, 0.022579242, - 0.023910048333333333, 0.023442612, 0.022252115666666666, 0.022434303, - 0.022368066000000002, 0.023281198, 0.023745237333333336, 0.027218427, - 0.04140027266666667, 0.047759237333333336, 0.03658436633333333, 0.027291862, - 0.024005816333333332, 0.024051928, 0.024838596666666667, 0.024482752333333333, - 0.025980266333333335, 0.023756612333333333, 0.028870564666666668, 0.04294748566666667, - 0.04240571333333334, 0.03841554966666667, 0.022181169333333334, 0.022309317999999998, - 0.02362528, 0.023840755666666668, 0.028913448999999997, 0.022075289666666668, - 0.024863383, 0.027119572999999998 - ] - } - }, - { - "size": 20, - "stats": { - "rme": 9.735594210810671, - "deviation": 0.016351752905118123, - "mean": 0.05730611321212121, - "variance": 0.000267379823070039, - "moe": 0.005579090640319881, - "sem": 0.0028464748164897355, - "sample": [ - 0.047023444, 0.046665262, 0.0410628815, 0.054078925, 0.0827015895, 0.092110298, - 0.0444540465, 0.0499588435, 0.0510650785, 0.050105707, 0.054908508, 0.0423508335, - 0.0808035785, 0.088324452, 0.0435506655, 0.046656712, 0.048802216, 0.046574263, - 0.04706927, 0.047818905, 0.0819365365, 0.089234723, 0.0451651, 0.051703877, - 0.0505865645, 0.04421551, 0.0548140045, 0.072237225, 0.0869740025, 0.065018285, - 0.047280471, 0.048760993, 0.047088965 - ] - } - }, - { - "size": 30, - "stats": { - "rme": 13.16248123472712, - "deviation": 0.031191444258079452, - "mean": 0.08691057238709678, - "variance": 0.0009729061949048777, - "moe": 0.011439587781445543, - "sem": 0.005602148766623675, - "sample": [ - 0.11926241, 0.067748954, 0.061724908, 0.072512068, 0.070728528, 0.103643227, - 0.197218609, 0.05899976, 0.071443569, 0.071475331, 0.066897424, 0.069460348, - 0.123696606, 0.13447981, 0.067805337, 0.077600224, 0.069551614, 0.066981554, - 0.078830698, 0.068518609, 0.136488067, 0.108775969, 0.071753832, 0.088489817, - 0.070683602, 0.057028387, 0.074017175, 0.103509191, 0.127321987, 0.072954395, - 0.064625734 - ] - } - }, - { - "size": 40, - "stats": { - "rme": 10.160949974211668, - "deviation": 0.029674049844853164, - "mean": 0.11798398346153846, - "variance": 0.0008805492341948301, - "moe": 0.01198829353710909, - "sem": 0.005819559969470432, - "sample": [ - 0.106159246, 0.170857273, 0.16779246, 0.080159511, 0.096521862, 0.112620671, - 0.10880461, 0.159199304, 0.104848399, 0.099269197, 0.101624198, 0.111553043, - 0.130396229, 0.15776688, 0.083418699, 0.095085137, 0.092582159, 0.09259612, - 0.146446048, 0.159002953, 0.098240989, 0.103568975, 0.103764356, 0.085972297, - 0.171940048, 0.127392906 - ] - } - }, - { - "size": 50, - "stats": { - "rme": 14.783163333725607, - "deviation": 0.048424507340925654, - "mean": 0.14910853128571433, - "variance": 0.0023449329112113625, - "moe": 0.022042957724486497, - "sem": 0.010567093827654122, - "sample": [ - 0.121349164, 0.287252768, 0.12214752, 0.117203518, 0.132483847, 0.149707656, - 0.219795889, 0.128877257, 0.122001759, 0.118606955, 0.167654218, 0.180322859, - 0.104897646, 0.103980143, 0.106387738, 0.222442909, 0.113075679, 0.117344618, - 0.136293826, 0.156353086, 0.203100102 - ] - } - }, - { - "size": 100, - "stats": { - "rme": 16.58436723404181, - "deviation": 0.08135815857088013, - "mean": 0.28319914492857146, - "variance": 0.0066191499660444774, - "moe": 0.04696678619862058, - "sem": 0.021743882499361378, - "sample": [ - 0.241140618, 0.522856359, 0.255340978, 0.403915428, 0.226795616, 0.273281908, - 0.24798883, 0.238580854, 0.244519068, 0.243925316, 0.279532547, 0.24996972, - 0.254406424, 0.282534363 - ] - } - }, - { - "size": 250, - "stats": { - "rme": 15.127904640763463, - "deviation": 0.12337313508844795, - "mean": 0.6819114366249999, - "variance": 0.015220930461552427, - "moe": 0.10315891186709016, - "sem": 0.04361899021864277, - "sample": [ - 0.580810989, 0.623433496, 0.566602574, 0.638241133, 0.597745983, 0.831866849, - 0.718333754, 0.898256715 - ] - } - }, - { - "size": 500, - "stats": { - "rme": 5.927369456192178, - "deviation": 0.07762787557965846, - "mean": 1.374618405666667, - "variance": 0.0060260870670109335, - "moe": 0.08147871151668191, - "sem": 0.03169144749773703, - "sample": [ - 1.437946988, 1.457550383, 1.236967027, 1.365965037, 1.385114976, 1.3641660230000001 - ] - } - }, - { - "size": 1000, - "stats": { - "rme": 4.371357697406755, - "deviation": 0.10690735268748533, - "mean": 3.036167239, - "variance": 0.011429182058646377, - "moe": 0.13272173030816867, - "sem": 0.0478104215807524, - "sample": [3.189855874, 3.038351118, 3.07570966, 2.911676746, 2.965242797] - } - } - ] - } - ] -} +{"slug":"left-bind-small","title":"Left associated binds (small - 100 inputs per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":1,"stats":{"moe":0.0002552396452441629,"rme":10.488846513381104,"sem":0.00013022430879804228,"deviation":0.0010170843655850777,"mean":0.002433438652367941,"variance":0.0000010344606067176,"sample":[0.0039486718,0.0035355652,0.0036191946,0.0016963445,0.0016091770625,0.0018094969375,0.001768847888888889,0.0014602111388888888,0.0018064448055555556,0.0016578250555555557,0.0014646249166666665,0.0017390423333333333,0.0014830704444444445,0.0015771075277777778,0.001664818361111111,0.0015163020555555556,0.002596861638888889,0.0031630854444444443,0.003092734472222222,0.0029241114444444444,0.0028705598333333333,0.0016454055833333332,0.001711620861111111,0.0016900070833333334,0.0014959885555555557,0.0014836878333333334,0.0015052755833333334,0.001788427138888889,0.0014512297777777778,0.0014522022777777779,0.0019536894722222225,0.0024363785277777775,0.0029895754999999997,0.0037041276388888886,0.0034885652777777772,0.0030373121944444444,0.0024320685833333334,0.0029131954444444447,0.0026020054722222224,0.003052439472222222,0.0029362796111111113,0.003079990138888889,0.003035265194444444,0.006503356361111112,0.004779550083333333,0.004934420416666667,0.00323369375,0.0018781574722222224,0.0025841495833333335,0.00179031525,0.0017129315833333332,0.0018879475555555554,0.0015875140555555555,0.0017556328333333334,0.0017726653333333332,0.00164373475,0.0017631573333333334,0.0020732539166666668,0.0031871428333333333,0.003042760888888889,0.0034205391111111114]}},{"size":2,"stats":{"rme":13.273266950760515,"deviation":0.0021950139243280247,"mean":0.004331332343537417,"variance":0.000004818086127993915,"moe":0.0005749093044823528,"sem":0.0002933210737154861,"sample":[0.0039336455714285715,0.002869311523809524,0.0033681905714285716,0.004006681238095238,0.003035744857142857,0.0035403969047619046,0.004620695476190476,0.004139437285714286,0.005022591904761904,0.007341679428571429,0.009562048904761904,0.0064429179047619045,0.004964747,0.003206654095238095,0.003663248238095238,0.003422980238095238,0.003547155619047619,0.003276085761904762,0.003538400761904762,0.0034188595238095238,0.0035068348095238094,0.008298172714285715,0.01652297566666667,0.0033820317619047617,0.0034403469523809523,0.0029582179047619047,0.0029850279047619046,0.0033098496666666664,0.003237449904761905,0.0033115743333333334,0.003109104619047619,0.003008495904761905,0.0032912558095238094,0.003140042619047619,0.004436925952380952,0.005841434666666667,0.005683290190476191,0.005824430571428571,0.004936367,0.003123343904761905,0.003056350047619048,0.0031864456190476187,0.004215455142857143,0.004913718571428571,0.003412681571428571,0.0029259104761904763,0.0031821540476190476,0.0034887706666666663,0.003014242761904762,0.006136003428571428,0.006840230571428571,0.004696864619047619,0.0032181907142857145,0.0037648729999999997,0.002968609142857143,0.0032654651904761903]}},{"size":3,"stats":{"rme":6.470985918969754,"deviation":0.0015436796466411341,"mean":0.005712226152698048,"variance":0.000002382946851454097,"moe":0.00036963735000079844,"sem":0.00018859048469428493,"sample":[0.007778895,0.005844431846153846,0.005382359999999999,0.004743467846153846,0.007507394538461539,0.008426685692307692,0.004655098461538462,0.005786476384615384,0.004850101076923076,0.0050011261538461535,0.004712081384615385,0.004931171307692308,0.004543063,0.005600400769230769,0.004334335846153847,0.005518897461538461,0.005784022692307693,0.004827880923076923,0.004425803769230769,0.005326636230769231,0.004582035769230769,0.005139928615384615,0.008890097846153846,0.008353854769230768,0.00865039723076923,0.009909505538461538,0.005248373076923076,0.006083129230769231,0.004234217615384616,0.005030254999999999,0.005296868769230769,0.004742823461538461,0.004223510076923077,0.005023698769230769,0.004276470769230769,0.004699187923076923,0.004862148538461538,0.00637102,0.008056447384615384,0.008743886615384614,0.008585705461538461,0.007934472461538462,0.004897112538461539,0.003994243461538462,0.004390586615384615,0.004988542692307692,0.0046407471538461535,0.004183789692307692,0.005637116923076923,0.0038752725384615383,0.00452943023076923,0.004211434538461538,0.004948777692307693,0.004232149846153846,0.0063883213846153844,0.008749506846153847,0.008443853461538461,0.007229518923076924,0.005391123615384615,0.004077244307692308,0.004745374384615385,0.0051690306153846155,0.006065091230769231,0.006800881384615385,0.006884926230769231,0.004458918846153846,0.004867791769230769]}},{"size":4,"stats":{"rme":7.316025786941184,"deviation":0.0023496435575443117,"mean":0.0077483790912457945,"variance":0.000005520824847509489,"moe":0.0005668734123855013,"sem":0.0002892211287681129,"sample":[0.010926924666666666,0.015849782833333333,0.010118213833333334,0.010640174666666667,0.010602080333333333,0.006744016333333333,0.006256407,0.006167282111111111,0.006629436444444445,0.005880073222222223,0.0065147362222222225,0.006765934666666667,0.006359928666666666,0.007059587333333333,0.006296072888888889,0.0063365007,0.0097455376,0.0111037415,0.0119827152,0.010145258899999999,0.0089865379,0.006231237,0.0061933367000000005,0.0066719027,0.0069704704000000004,0.0059092401,0.0059322061,0.0055762401,0.0052496255,0.0062842995999999995,0.0057870191000000005,0.0052720451,0.0087759826,0.0102064389,0.0101803343,0.0119499673,0.0110047092,0.0082972498,0.0056388029999999995,0.0056457241,0.0068318124,0.0065510410000000005,0.0066950716,0.0063556251,0.005736691800000001,0.006300964300000001,0.0069151402,0.0077851488,0.0111336224,0.011790893600000001,0.0110446644,0.0108201519,0.0064478020999999995,0.0058321573,0.0053380637,0.00685978,0.0057740505999999995,0.0057251719,0.007094784,0.0057350451,0.0053049486,0.006681964899999999,0.0056606299,0.006800473999999999,0.0111638324,0.0101257134]}},{"size":5,"stats":{"rme":12.677671975985163,"deviation":0.0048132118594694994,"mean":0.009943917794642857,"variance":0.00002316700840413784,"moe":0.0012606572795664393,"sem":0.000643192489574714,"sample":[0.007136109,0.01001541525,0.006874251375,0.00657671925,0.007545646,0.00703617125,0.00797082275,0.006504831875,0.006653333875,0.0083824165,0.01348840475,0.027149076375,0.016645459,0.012295565875,0.008750754,0.008509081375,0.00863639375,0.01481984975,0.0113543905,0.0251242275,0.027828182625,0.0088383495,0.0084518575,0.00720552875,0.007547649875,0.00781369275,0.007629465125,0.006782815125,0.007626611625,0.00686263625,0.00865185,0.00765608975,0.006820999,0.01067880175,0.013389152625,0.012417540375,0.01283362775,0.013069722625,0.0085037835,0.007403853875,0.006577496875,0.007260755375,0.006406379375,0.006334173375,0.007226516625,0.0071006235,0.00658204275,0.007658963,0.007595737625,0.008369632875,0.01524457825,0.01443299125,0.011445071125,0.010447696625,0.007851224125,0.006844383375]}},{"size":10,"stats":{"rme":7.725102064182073,"deviation":0.005012722395663803,"mean":0.017809035980392157,"variance":0.000025127385815989456,"moe":0.0013757662061322025,"sem":0.0007019215337409196,"sample":[0.0153355876,0.0150565056,0.016687512800000002,0.0141886928,0.016017471,0.0252713694,0.0304281134,0.0241396694,0.0161108368,0.0140723834,0.0158514908,0.0138268142,0.0145183972,0.0129342854,0.015370398399999999,0.012952317999999999,0.015015609599999999,0.0135938712,0.021212686,0.025169208399999997,0.025974992600000003,0.0217217026,0.013928074200000001,0.013382038199999998,0.013754995,0.013072167,0.0201330126,0.018340424,0.014269800199999998,0.014669332600000001,0.0280230892,0.0212331338,0.0254651668,0.0262337508,0.0159697522,0.014009626399999999,0.0148521726,0.0150008298,0.016571361,0.0142225764,0.0150954334,0.015482556,0.024903210000000002,0.0255914266,0.027435404000000004,0.0208395636,0.0147164342,0.0139507414,0.015474164600000001,0.012805972600000002,0.0133847092]}},{"size":20,"stats":{"rme":7.706571550596003,"deviation":0.009618758998436368,"mean":0.03606907327173913,"variance":0.00009252052467000059,"moe":0.002779688939323475,"sem":0.0014182086425119772,"sample":[0.0535175065,0.0560606645,0.0439089795,0.0460493225,0.037472929,0.031148172,0.0305528595,0.031626917,0.026668294,0.031983636,0.026797478,0.0588438515,0.034806729,0.0398920685,0.0297911415,0.034529819,0.0267543685,0.0325386495,0.0290946105,0.030144112,0.028344417,0.0259824145,0.0270000555,0.026588971,0.048901875,0.0472573585,0.047387821,0.0396549675,0.028906752666666664,0.028451720666666666,0.03902135566666667,0.03340420166666667,0.027085803333333335,0.040464362,0.06007030333333333,0.034706196333333335,0.03168342133333333,0.031121557666666664,0.028060120999999997,0.029686122,0.028183035999999998,0.027468169333333334,0.027891482666666665,0.04315312033333333,0.04672263766666667,0.04979701833333333]}},{"size":30,"stats":{"rme":10.727464773354011,"deviation":0.017497098953260567,"mean":0.05328117231944445,"variance":0.00030614847178019207,"moe":0.005715718991398452,"sem":0.0029161831588767613,"sample":[0.0437583345,0.0563246925,0.077170353,0.0718714085,0.051097012,0.0435295165,0.0477552005,0.0441354615,0.0399841765,0.052155323,0.0822814725,0.054768652,0.044760656,0.0461335,0.0388777875,0.038741085,0.039999193,0.0406841055,0.0443862665,0.0732636355,0.077369141,0.040346191,0.0360389375,0.0543973315,0.052894189,0.0483386085,0.042633904,0.12246182,0.0477536585,0.0443786195,0.042991129,0.0488636735,0.0462491055,0.0400063175,0.0654493365,0.076272409]}},{"size":40,"stats":{"rme":10.154886280070158,"deviation":0.01795866409980932,"mean":0.06857997207142856,"variance":0.00032251361624978007,"moe":0.006964218174757446,"sem":0.0033938685062170786,"sample":[0.061948325,0.053533423,0.068941853,0.0521256985,0.0986347685,0.09762585,0.062746492,0.060164327,0.057635129,0.057103704,0.1023486995,0.08781686,0.0573581915,0.057519049,0.0562060315,0.055089347,0.0600607655,0.0996447495,0.0738273075,0.0547735765,0.0816252195,0.0602613015,0.059108246,0.112424379,0.059699418,0.0586908175,0.0557466835,0.0575790055]}},{"size":50,"stats":{"rme":9.50055320197502,"deviation":0.024013611717697836,"mean":0.08757692093750001,"variance":0.0005766535477283547,"moe":0.00832029196631879,"sem":0.004245046921591219,"sample":[0.079638462,0.06851665,0.07127316,0.074230355,0.070679754,0.112661168,0.092338965,0.141421397,0.086956681,0.104951542,0.104799999,0.117770659,0.124903024,0.106731623,0.07107002,0.073123102,0.070067264,0.062828854,0.063511946,0.096015056,0.131979576,0.078504255,0.065441019,0.098218105,0.068777288,0.077960162,0.078684761,0.141218883,0.0740446,0.063999425,0.060809417,0.069334298]}},{"size":100,"stats":{"rme":12.350350503376253,"deviation":0.044367325916488475,"mean":0.16812728559999998,"variance":0.0019684596089799096,"moe":0.02076430906341243,"sem":0.009920835672915638,"sample":[0.134376747,0.13782974,0.139861309,0.251633224,0.136193655,0.137276661,0.198575206,0.183625698,0.132277407,0.133466606,0.144596417,0.249094405,0.211936586,0.142706633,0.231570045,0.13319439,0.138165128,0.130450134,0.159511609,0.236204112]}},{"size":250,"stats":{"rme":13.589636274059865,"deviation":0.07939310774473976,"mean":0.4178953798999999,"variance":0.0063032655573678565,"moe":0.056790462134510666,"sem":0.025106305099253167,"sample":[0.348042196,0.415641228,0.498849248,0.318846263,0.384543239,0.542469935,0.341740948,0.462471858,0.5059616,0.360387284]}},{"size":500,"stats":{"rme":10.636435414630824,"deviation":0.09571277318851444,"mean":0.8322594625714286,"variance":0.009160934951436009,"moe":0.0885227402185636,"sem":0.03617602787844855,"sample":[0.907020954,0.795681981,0.700632592,0.891420737,0.936428737,0.713890966,0.880740271]}},{"size":1000,"stats":{"rme":4.591701253826344,"deviation":0.07444284597715682,"mean":1.7016717745,"variance":0.005541737317178694,"moe":0.07813568420572552,"sem":0.030391164607438938,"sample":[1.7039705029999999,1.697325038,1.741995438,1.651626935,1.8159186470000002,1.599194086]}}]},{"name":"Free v0.6.1","results":[{"size":1,"stats":{"rme":8.735495607850144,"deviation":0.0009566537064906855,"mean":0.0026223211565734547,"variance":9.151863141423666e-7,"moe":0.00022907274945619923,"sem":0.00011687385176336695,"sample":[0.0020955884444444446,0.0018656194074074073,0.002529691259259259,0.0021241020344827588,0.0020203787586206895,0.002130749620689655,0.002371468068965517,0.0019209316206896551,0.0020771012068965516,0.002195536379310345,0.002683446551724138,0.00276548675862069,0.003850824068965517,0.005843688344827586,0.0033190352413793108,0.002710146896551724,0.0018057851724137932,0.0021272292068965516,0.0021996894827586207,0.002130506655172414,0.0023403379655172413,0.0021488980344827584,0.0021472244827586205,0.0018417698965517242,0.0020753954137931034,0.0023167177586206895,0.0021568740344827587,0.002185456482758621,0.002152681103448276,0.004005337482758621,0.004282362,0.004819472448275862,0.003409247724137931,0.0018264066551724138,0.002665114896551724,0.0021419237931034484,0.0019223060689655173,0.0020705038275862066,0.0021531744827586207,0.0023007536896551724,0.0022768282068965514,0.002136213620689655,0.0020925898620689654,0.002168903689655172,0.002200590655172414,0.0027934569310344827,0.0035478274827586203,0.0038080423793103446,0.004510914379310345,0.0022261902758620687,0.0019695676896551726,0.002158820068965517,0.0025900539655172414,0.002469301793103448,0.002252531344827586,0.002262223931034483,0.0023901802758620693,0.0018454185862068965,0.0026553313103448275,0.002307572655172414,0.0018179567931034483,0.0020985635862068967,0.006788606655172414,0.003389774344827586,0.0038639349999999998,0.003183958689655172,0.0021611998965517243]}},{"size":2,"stats":{"rme":7.425364870592388,"deviation":0.001389851269889524,"mean":0.004992403978557506,"variance":0.0000019316865524135227,"moe":0.0003707042112218658,"sem":0.0001891348016438091,"sample":[0.00433391447368421,0.0036924764736842104,0.005039807263157894,0.0038711637894736843,0.003785189157894737,0.004665331631578948,0.0038113532631578943,0.006948522684210527,0.008406592368421053,0.007226863947368421,0.005908266578947369,0.004034722947368422,0.004613224210526315,0.004631820578947368,0.0039423023157894735,0.003959305631578948,0.0041707787368421055,0.006683196157894736,0.005235866263157894,0.007722273947368421,0.0077517455263157896,0.007535821,0.0040905918421052625,0.004090406315789474,0.004850734947368421,0.004123789947368421,0.0047673881052631584,0.003976588368421053,0.003910656526315789,0.003802081789473684,0.0040315394736842106,0.0043445310000000004,0.006752901315789473,0.006806834842105263,0.004385266052631579,0.0047505942105263155,0.004526033789473684,0.0038881441052631576,0.004701974473684211,0.0038686012105263157,0.004726458105263158,0.004186599684210527,0.0037967417368421053,0.004304542105263158,0.003780593631578947,0.004321067684210526,0.004803945947368421,0.008202262578947368,0.0075778706842105255,0.007233411684210527,0.0041867741052631574,0.004817490157894737,0.003955017263157895,0.004057842210526316]}},{"size":3,"stats":{"rme":7.818079311734423,"deviation":0.0024533241683735835,"mean":0.008293342320661156,"variance":0.000006018799475125935,"moe":0.0006483800802229254,"sem":0.00033080616337904353,"sample":[0.007715665272727273,0.006691219909090909,0.009536494909090908,0.012466559727272728,0.015551666363636363,0.008428253454545455,0.006497179363636364,0.006676447454545455,0.007738683,0.006424513181818182,0.006203786454545454,0.006773426181818182,0.006854815181818182,0.006623254818181818,0.007836115818181819,0.006735657272727272,0.012413788727272728,0.011738470272727274,0.011840136272727274,0.009564534454545455,0.006523656545454545,0.006773622454545455,0.007748262909090909,0.006434551,0.0062835010909090905,0.008475440363636365,0.009960866454545454,0.007531812,0.01247630309090909,0.012289372545454546,0.011580511909090908,0.005559322272727273,0.0067570220000000005,0.007853614181818182,0.007566773,0.006594065272727273,0.007756785454545454,0.006505442454545454,0.006439621545454546,0.006725699000000001,0.006427980636363636,0.006781947636363636,0.014187253363636364,0.011818953363636364,0.01339631409090909,0.005994947818181818,0.006187887636363637,0.007747282818181819,0.006794653727272727,0.006239835454545455,0.007556421999999999,0.0065077268181818184,0.008079023636363637,0.007585268272727272,0.008681416727272727]}},{"size":4,"stats":{"rme":12.701169866061129,"deviation":0.0062609242448788014,"mean":0.01409294857011145,"variance":0.00003919917240011119,"moe":0.0017899693370264883,"sem":0.0009132496617482083,"sample":[0.016302299,0.0153141902,0.018691561666666665,0.021726643166666667,0.02383374016666667,0.022520573833333335,0.012472651500000001,0.010737822833333334,0.032378145500000004,0.024453183,0.013092010333333334,0.008409251833333334,0.010042404999999999,0.008730090333333334,0.011367661142857142,0.009380696142857142,0.008572485285714285,0.009742792857142857,0.0087843215,0.010408286375,0.010425794125,0.016534163125,0.018967704875,0.015998863375,0.009054976375,0.00882403525,0.00873378675,0.0091692505,0.00969626775,0.01707087425,0.014366886125,0.012181811375,0.01665274925,0.020540483375,0.013379976,0.009518771875,0.010260218875,0.008866679625,0.00915245325,0.017044609375,0.009406062875,0.00949480225,0.01163353925,0.009095463125,0.02950122675,0.029605849875,0.0102304715]}},{"size":5,"stats":{"rme":8.212406091520275,"deviation":0.004054273117530343,"mean":0.01411398747416413,"variance":0.00001643713051152921,"moe":0.0011590979670846636,"sem":0.0005913765138187059,"sample":[0.011628745142857142,0.011060291428571428,0.012645932,0.011123363857142857,0.013624806714285715,0.012481165857142857,0.010848137999999998,0.019532232142857143,0.019588146,0.022096629714285713,0.011688781714285714,0.011006496285714287,0.00989549442857143,0.010210010571428571,0.012205640142857143,0.012532384428571427,0.01038633757142857,0.010618129142857143,0.010454493714285714,0.022168221285714284,0.023165689,0.021356801285714287,0.010841319142857143,0.011466057714285714,0.013299938428571427,0.012848861285714287,0.011210453714285714,0.012468572571428572,0.011814883714285714,0.013782243285714285,0.022042676714285715,0.020105443857142857,0.018435007,0.010751906285714286,0.012512181428571429,0.01200722957142857,0.010977499142857143,0.010876453714285713,0.011031800714285714,0.011455988571428571,0.011939975142857143,0.015216491142857143,0.019556211142857143,0.019726451142857145,0.017603454571428572,0.013664983285714286,0.017403397571428572]}},{"size":10,"stats":{"rme":7.947330558829363,"deviation":0.00812604676526758,"mean":0.029232447773049647,"variance":0.0000660326360313157,"moe":0.002323199254961408,"sem":0.0011853057423272491,"sample":[0.023793245666666667,0.022935259,0.04110835166666667,0.04466183466666667,0.043419083,0.028256005333333334,0.032543671,0.034962919,0.026909962,0.019311464333333334,0.024704298333333333,0.023482615,0.023595377666666667,0.042146038999999996,0.04136304166666666,0.041781387333333336,0.022579242,0.023910048333333333,0.023442612,0.022252115666666666,0.022434303,0.022368066000000002,0.023281198,0.023745237333333336,0.027218427,0.04140027266666667,0.047759237333333336,0.03658436633333333,0.027291862,0.024005816333333332,0.024051928,0.024838596666666667,0.024482752333333333,0.025980266333333335,0.023756612333333333,0.028870564666666668,0.04294748566666667,0.04240571333333334,0.03841554966666667,0.022181169333333334,0.022309317999999998,0.02362528,0.023840755666666668,0.028913448999999997,0.022075289666666668,0.024863383,0.027119572999999998]}},{"size":20,"stats":{"rme":9.735594210810671,"deviation":0.016351752905118123,"mean":0.05730611321212121,"variance":0.000267379823070039,"moe":0.005579090640319881,"sem":0.0028464748164897355,"sample":[0.047023444,0.046665262,0.0410628815,0.054078925,0.0827015895,0.092110298,0.0444540465,0.0499588435,0.0510650785,0.050105707,0.054908508,0.0423508335,0.0808035785,0.088324452,0.0435506655,0.046656712,0.048802216,0.046574263,0.04706927,0.047818905,0.0819365365,0.089234723,0.0451651,0.051703877,0.0505865645,0.04421551,0.0548140045,0.072237225,0.0869740025,0.065018285,0.047280471,0.048760993,0.047088965]}},{"size":30,"stats":{"rme":13.16248123472712,"deviation":0.031191444258079452,"mean":0.08691057238709678,"variance":0.0009729061949048777,"moe":0.011439587781445543,"sem":0.005602148766623675,"sample":[0.11926241,0.067748954,0.061724908,0.072512068,0.070728528,0.103643227,0.197218609,0.05899976,0.071443569,0.071475331,0.066897424,0.069460348,0.123696606,0.13447981,0.067805337,0.077600224,0.069551614,0.066981554,0.078830698,0.068518609,0.136488067,0.108775969,0.071753832,0.088489817,0.070683602,0.057028387,0.074017175,0.103509191,0.127321987,0.072954395,0.064625734]}},{"size":40,"stats":{"rme":10.160949974211668,"deviation":0.029674049844853164,"mean":0.11798398346153846,"variance":0.0008805492341948301,"moe":0.01198829353710909,"sem":0.005819559969470432,"sample":[0.106159246,0.170857273,0.16779246,0.080159511,0.096521862,0.112620671,0.10880461,0.159199304,0.104848399,0.099269197,0.101624198,0.111553043,0.130396229,0.15776688,0.083418699,0.095085137,0.092582159,0.09259612,0.146446048,0.159002953,0.098240989,0.103568975,0.103764356,0.085972297,0.171940048,0.127392906]}},{"size":50,"stats":{"rme":14.783163333725607,"deviation":0.048424507340925654,"mean":0.14910853128571433,"variance":0.0023449329112113625,"moe":0.022042957724486497,"sem":0.010567093827654122,"sample":[0.121349164,0.287252768,0.12214752,0.117203518,0.132483847,0.149707656,0.219795889,0.128877257,0.122001759,0.118606955,0.167654218,0.180322859,0.104897646,0.103980143,0.106387738,0.222442909,0.113075679,0.117344618,0.136293826,0.156353086,0.203100102]}},{"size":100,"stats":{"rme":16.58436723404181,"deviation":0.08135815857088013,"mean":0.28319914492857146,"variance":0.0066191499660444774,"moe":0.04696678619862058,"sem":0.021743882499361378,"sample":[0.241140618,0.522856359,0.255340978,0.403915428,0.226795616,0.273281908,0.24798883,0.238580854,0.244519068,0.243925316,0.279532547,0.24996972,0.254406424,0.282534363]}},{"size":250,"stats":{"rme":15.127904640763463,"deviation":0.12337313508844795,"mean":0.6819114366249999,"variance":0.015220930461552427,"moe":0.10315891186709016,"sem":0.04361899021864277,"sample":[0.580810989,0.623433496,0.566602574,0.638241133,0.597745983,0.831866849,0.718333754,0.898256715]}},{"size":500,"stats":{"rme":5.927369456192178,"deviation":0.07762787557965846,"mean":1.374618405666667,"variance":0.0060260870670109335,"moe":0.08147871151668191,"sem":0.03169144749773703,"sample":[1.437946988,1.457550383,1.236967027,1.365965037,1.385114976,1.3641660230000001]}},{"size":1000,"stats":{"rme":4.371357697406755,"deviation":0.10690735268748533,"mean":3.036167239,"variance":0.011429182058646377,"moe":0.13272173030816867,"sem":0.0478104215807524,"sample":[3.189855874,3.038351118,3.07570966,2.911676746,2.965242797]}}]}]} \ No newline at end of file diff --git a/benchmark/right-bind-large.json b/benchmark/right-bind-large.json index 3e45d11..037a784 100644 --- a/benchmark/right-bind-large.json +++ b/benchmark/right-bind-large.json @@ -1,187 +1 @@ -{ - "slug": "right-bind-large", - "title": "Right associated binds (large - 1 input per size)", - "sizeInterpretation": "Number of binds", - "series": [ - { - "name": "Free", - "results": [ - { - "size": 100000, - "stats": { - "rme": 54.087295923035704, - "deviation": 1.8690243264338895, - "mean": 3.6269881435, - "variance": 3.4932519328016545, - "moe": 1.9617398102682642, - "sem": 0.7630259861020086, - "sample": [ - 5.281779364, 3.876533873, 4.146684662, 5.69766806, 1.437201473, 1.3220614290000001 - ] - } - }, - { - "size": 500000, - "stats": { - "rme": 9.095733345571979, - "deviation": 0.4832989570916459, - "mean": 6.5964852806, - "variance": 0.2335778819258726, - "moe": 0.5999987113032814, - "sem": 0.21613786430233484, - "sample": [6.668239242, 6.455364192, 6.189816145, 6.273004219, 7.396002605] - } - }, - { - "size": 1000000, - "stats": { - "rme": 106.2412908346505, - "deviation": 29.723291913434345, - "mean": 34.732658606600005, - "variance": 883.4740821712314, - "moe": 36.90042484484418, - "sem": 13.292660246701796, - "sample": [86.417579438, 26.53633886, 30.405841321, 12.933476041, 17.370057373] - } - }, - { - "size": 1500000, - "stats": { - "rme": 80.78978903813764, - "deviation": 22.862576656977367, - "mean": 35.1320231442, - "variance": 522.6974113961664, - "moe": 28.38308738302887, - "sem": 10.224455109160257, - "sample": [75.986347276, 26.652435758, 24.502746679, 23.814094452, 24.704491556] - } - }, - { - "size": 2000000, - "stats": { - "rme": 110.06860459297802, - "deviation": 48.66134956373595, - "mean": 54.88518701019999, - "variance": 2367.9269413641055, - "moe": 60.41135947037357, - "sem": 21.762017100278666, - "sample": [141.928692781, 32.633208799, 33.335225074, 32.686487232, 33.842321165] - } - }, - { - "size": 2500000, - "stats": { - "rme": 19.896515123974336, - "deviation": 10.768351141944862, - "mean": 67.1903111322, - "variance": 115.95738631622523, - "moe": 13.368530416263583, - "sem": 4.815753031795239, - "sample": [86.415585599, 61.944501873, 62.188354209, 63.532956893, 61.870157087] - } - }, - { - "size": 3000000, - "stats": { - "rme": 23.62213954568086, - "deviation": 14.3778362784687, - "mean": 75.5629253404, - "variance": 206.72217605045068, - "moe": 17.849579668707932, - "sem": 6.429963857603722, - "sample": [101.218426417, 69.005205535, 68.416595675, 68.323939027, 70.850460048] - } - } - ] - }, - { - "name": "Free v0.6.1", - "results": [ - { - "size": 100000, - "stats": { - "rme": 18.878076393195613, - "deviation": 0.4188978423226622, - "mean": 2.7547668221999997, - "variance": 0.17547540230258196, - "moe": 0.5200469851493231, - "sem": 0.1873368102122922, - "sample": [2.554999252, 3.373539042, 2.994936612, 2.470887744, 2.379471461] - } - }, - { - "size": 500000, - "stats": { - "rme": 51.34404443791469, - "deviation": 13.82934089387188, - "mean": 33.4384290648, - "variance": 191.25066955891708, - "moe": 17.168641878371492, - "sem": 6.184669264543046, - "sample": [22.457426975, 18.358243998, 31.781299748, 43.417530726, 51.177643877] - } - }, - { - "size": 1000000, - "stats": { - "rme": 41.69794488612991, - "deviation": 37.64926458466703, - "mean": 112.0924356536, - "variance": 1417.467123766263, - "moe": 46.740242040358766, - "sem": 16.837262982838173, - "sample": [60.66906026, 106.215801135, 163.490892977, 127.922547106, 102.16387679] - } - }, - { - "size": 1500000, - "stats": { - "rme": 37.776962318228655, - "deviation": 44.32251312700119, - "mean": 145.6571486226, - "variance": 1964.4851698931925, - "moe": 55.024846148965906, - "sem": 19.821630457120285, - "sample": [114.222053676, 185.001896583, 112.832185496, 202.465123576, 113.764483782] - } - }, - { - "size": 2000000, - "stats": { - "rme": 2.687159022907891, - "deviation": 4.5836016441445055, - "mean": 211.7619648372, - "variance": 21.009404032204213, - "moe": 5.690380745209855, - "sem": 2.049848971617383, - "sample": [206.129960633, 218.619070512, 211.290322438, 212.933128983, 209.83734162] - } - }, - { - "size": 2500000, - "stats": { - "rme": 12.091860499318567, - "deviation": 28.917991358352097, - "mean": 296.8994923542, - "variance": 836.2502242017266, - "moe": 35.90067243865486, - "sem": 12.932518890005353, - "sample": [247.527512002, 310.007200229, 323.042127184, 301.276455565, 302.644166791] - } - }, - { - "size": 3000000, - "stats": { - "rme": 20.086417850008097, - "deviation": 70.01060986055948, - "mean": 432.7088995982, - "variance": 4901.4854930474685, - "moe": 86.91571764746647, - "sem": 31.309696558885616, - "sample": [368.304993303, 502.205225384, 389.881487887, 515.145993456, 388.006797961] - } - } - ] - } - ] -} +{"slug":"right-bind-large","title":"Right associated binds (large - 1 input per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":100000,"stats":{"rme":54.087295923035704,"deviation":1.8690243264338895,"mean":3.6269881435,"variance":3.4932519328016545,"moe":1.9617398102682642,"sem":0.7630259861020086,"sample":[5.281779364,3.876533873,4.146684662,5.69766806,1.437201473,1.3220614290000001]}},{"size":500000,"stats":{"rme":9.095733345571979,"deviation":0.4832989570916459,"mean":6.5964852806,"variance":0.2335778819258726,"moe":0.5999987113032814,"sem":0.21613786430233484,"sample":[6.668239242,6.455364192,6.189816145,6.273004219,7.396002605]}},{"size":1000000,"stats":{"rme":106.2412908346505,"deviation":29.723291913434345,"mean":34.732658606600005,"variance":883.4740821712314,"moe":36.90042484484418,"sem":13.292660246701796,"sample":[86.417579438,26.53633886,30.405841321,12.933476041,17.370057373]}},{"size":1500000,"stats":{"rme":80.78978903813764,"deviation":22.862576656977367,"mean":35.1320231442,"variance":522.6974113961664,"moe":28.38308738302887,"sem":10.224455109160257,"sample":[75.986347276,26.652435758,24.502746679,23.814094452,24.704491556]}},{"size":2000000,"stats":{"rme":110.06860459297802,"deviation":48.66134956373595,"mean":54.88518701019999,"variance":2367.9269413641055,"moe":60.41135947037357,"sem":21.762017100278666,"sample":[141.928692781,32.633208799,33.335225074,32.686487232,33.842321165]}},{"size":2500000,"stats":{"rme":19.896515123974336,"deviation":10.768351141944862,"mean":67.1903111322,"variance":115.95738631622523,"moe":13.368530416263583,"sem":4.815753031795239,"sample":[86.415585599,61.944501873,62.188354209,63.532956893,61.870157087]}},{"size":3000000,"stats":{"rme":23.62213954568086,"deviation":14.3778362784687,"mean":75.5629253404,"variance":206.72217605045068,"moe":17.849579668707932,"sem":6.429963857603722,"sample":[101.218426417,69.005205535,68.416595675,68.323939027,70.850460048]}}]},{"name":"Free v0.6.1","results":[{"size":100000,"stats":{"rme":18.878076393195613,"deviation":0.4188978423226622,"mean":2.7547668221999997,"variance":0.17547540230258196,"moe":0.5200469851493231,"sem":0.1873368102122922,"sample":[2.554999252,3.373539042,2.994936612,2.470887744,2.379471461]}},{"size":500000,"stats":{"rme":51.34404443791469,"deviation":13.82934089387188,"mean":33.4384290648,"variance":191.25066955891708,"moe":17.168641878371492,"sem":6.184669264543046,"sample":[22.457426975,18.358243998,31.781299748,43.417530726,51.177643877]}},{"size":1000000,"stats":{"rme":41.69794488612991,"deviation":37.64926458466703,"mean":112.0924356536,"variance":1417.467123766263,"moe":46.740242040358766,"sem":16.837262982838173,"sample":[60.66906026,106.215801135,163.490892977,127.922547106,102.16387679]}},{"size":1500000,"stats":{"rme":37.776962318228655,"deviation":44.32251312700119,"mean":145.6571486226,"variance":1964.4851698931925,"moe":55.024846148965906,"sem":19.821630457120285,"sample":[114.222053676,185.001896583,112.832185496,202.465123576,113.764483782]}},{"size":2000000,"stats":{"rme":2.687159022907891,"deviation":4.5836016441445055,"mean":211.7619648372,"variance":21.009404032204213,"moe":5.690380745209855,"sem":2.049848971617383,"sample":[206.129960633,218.619070512,211.290322438,212.933128983,209.83734162]}},{"size":2500000,"stats":{"rme":12.091860499318567,"deviation":28.917991358352097,"mean":296.8994923542,"variance":836.2502242017266,"moe":35.90067243865486,"sem":12.932518890005353,"sample":[247.527512002,310.007200229,323.042127184,301.276455565,302.644166791]}},{"size":3000000,"stats":{"rme":20.086417850008097,"deviation":70.01060986055948,"mean":432.7088995982,"variance":4901.4854930474685,"moe":86.91571764746647,"sem":31.309696558885616,"sample":[368.304993303,502.205225384,389.881487887,515.145993456,388.006797961]}}]}]} diff --git a/benchmark/right-bind-small.json b/benchmark/right-bind-small.json index 2514242..9e6f054 100644 --- a/benchmark/right-bind-small.json +++ b/benchmark/right-bind-small.json @@ -1,656 +1 @@ -{ - "slug": "right-bind-small", - "title": "Right associated binds (small - 100 inputs per size)", - "sizeInterpretation": "Number of binds", - "series": [ - { - "name": "Free", - "results": [ - { - "size": 1, - "stats": { - "rme": 7.704460777626861, - "deviation": 0.0007505377155810193, - "mean": 0.0022195783701898755, - "variance": 5.633068625095749e-7, - "moe": 0.00017100654495996848, - "sem": 0.00008724823722447371, - "sample": [ - 0.0035089712352941176, 0.003134843705882353, 0.0030993049411764707, - 0.003162290823529412, 0.0031066262352941174, 0.003283377117647059, - 0.0024244792272727273, 0.0025544020454545454, 0.0019203925625, 0.00164292096875, - 0.00184587978125, 0.00176719078125, 0.0017404609375, 0.00206512325, 0.00172203125, - 0.0017758324375, 0.0030416393125, 0.0032566055, 0.00303043171875, 0.00524580328125, - 0.00194093696875, 0.00165668909375, 0.0017035624375, 0.00169564909375, - 0.0019969241875, 0.00165752775, 0.00195390546875, 0.00168574865625, 0.00158028315625, - 0.0016063041875, 0.0018594273125, 0.0016014646875, 0.0016703321875, 0.0015883225625, - 0.002160341, 0.003133980125, 0.003121307375, 0.00354297946875, 0.0031388316875, - 0.0025274413125, 0.00166572265625, 0.00192044334375, 0.001697606125, 0.001602374125, - 0.00168569746875, 0.00282055840625, 0.00237691709375, 0.001832713125, - 0.00200375040625, 0.0017499844375, 0.00169691584375, 0.00171004571875, - 0.00364988628125, 0.0031790318125, 0.00363037075, 0.00209988009375, 0.0020072328125, - 0.00182352865625, 0.00170472853125, 0.0020416220625, 0.0017288809375, - 0.00159235465625, 0.00161850296875, 0.0016176331875, 0.001862903125, 0.00160569353125, - 0.0015903550625, 0.00158980853125, 0.00182953125, 0.00160286703125, 0.00158748296875, - 0.0016396495625, 0.00318921284375, 0.00314434815625 - ] - } - }, - { - "size": 2, - "stats": { - "rme": 8.797687508591961, - "deviation": 0.0011581096613747077, - "mean": 0.0033878426206896553, - "variance": 0.00000134121798776944, - "moe": 0.0002980518070511684, - "sem": 0.00015206724849549407, - "sample": [ - 0.003018620346153846, 0.002941966730769231, 0.0028795218076923075, 0.0026594295, - 0.0029657726923076927, 0.002284440923076923, 0.0026264388076923076, - 0.002719698346153846, 0.0023031183846153845, 0.0025259361923076922, - 0.0028332740769230766, 0.0036052478461538464, 0.004728487730769231, - 0.004805714730769231, 0.004911727846153846, 0.005518223769230769, - 0.002938460846153846, 0.003085229, 0.002497338692307692, 0.002720285769230769, - 0.003094409269230769, 0.0025067452307692304, 0.0027481880000000004, - 0.0031060203076923075, 0.0024519119230769233, 0.004792431038461538, - 0.0049648078461538465, 0.0046106870000000005, 0.0047739035769230765, - 0.002656160423076923, 0.002274262230769231, 0.002615494230769231, - 0.002536907153846154, 0.0026237140384615387, 0.002513045653846154, - 0.0025459897692307696, 0.002596843192307692, 0.002618533769230769, - 0.002760327576923077, 0.0022718257307692306, 0.003028585961538461, - 0.005038789423076923, 0.004790715192307692, 0.004844190038461539, - 0.0042751497307692305, 0.0025491355384615385, 0.002855123269230769, - 0.002458791846153846, 0.0035457120769230768, 0.004178023038461539, - 0.0025913085000000002, 0.0025461178076923077, 0.0032069025, 0.0024854294615384615, - 0.003670297846153846, 0.007154756230769231, 0.0067633436153846154, - 0.004881357923076923 - ] - } - }, - { - "size": 3, - "stats": { - "rme": 7.605326051920093, - "deviation": 0.0013123583184039905, - "mean": 0.004440957993965517, - "variance": 0.0000017222843558841498, - "moe": 0.00033774933526988746, - "sem": 0.00017232108942341197, - "sample": [ - 0.0043592054, 0.00380170085, 0.0042836932, 0.0037151070500000003, 0.00394893745, - 0.0034724023499999998, 0.0034517388500000003, 0.0038941532, 0.0064975968, - 0.00667859435, 0.006524074100000001, 0.00628962775, 0.0033668863, 0.0036153677, - 0.0033223579500000003, 0.0035956029, 0.00332458255, 0.00376543215, 0.00301945115, - 0.0033958192999999997, 0.0032351356, 0.0033458061, 0.0044855949499999995, - 0.006451159099999999, 0.0066386281, 0.006883821850000001, 0.006955210450000001, - 0.0038363952, 0.00405262195, 0.0036161781, 0.0041636683, 0.0036449583, - 0.0041571238500000005, 0.0032904237500000003, 0.0032482004000000003, 0.00417390115, - 0.006826109049999999, 0.0067577780500000005, 0.00619859625, 0.00482228935, - 0.0035014736499999997, 0.0037568839, 0.0034094402500000004, 0.0034927013, - 0.0033515988500000004, 0.00391500935, 0.0033213555499999998, 0.0036374898, - 0.00302672005, 0.0033730903, 0.00550067485, 0.00647791035, 0.006676509799999999, - 0.0065860188, 0.0044068202, 0.00338411645, 0.00388374045, 0.004768078550000001 - ] - } - }, - { - "size": 4, - "stats": { - "rme": 7.490313749546636, - "deviation": 0.0015340695773533586, - "mean": 0.005412772505882353, - "variance": 0.0000023533694681611124, - "moe": 0.0004054336432397859, - "sem": 0.00020685389961213566, - "sample": [ - 0.00548032094117647, 0.004205924764705883, 0.004538072058823529, - 0.0070462041764705885, 0.008133751411764705, 0.007223730823529412, 0.005418183, - 0.004413393, 0.004467297352941177, 0.0042981795294117645, 0.004940822882352942, - 0.0040322380000000005, 0.004768893647058824, 0.0043468259411764704, - 0.004776258294117647, 0.004164356882352942, 0.004690594529411765, 0.00783709505882353, - 0.008658761823529412, 0.00788729805882353, 0.0067524785294117646, - 0.004080025588235294, 0.004593448941176471, 0.004202069235294118, - 0.004644605411764706, 0.004095442470588235, 0.004650374411764706, 0.00409692205882353, - 0.004851706235294117, 0.004117511411764706, 0.005270940823529411, - 0.007817452823529412, 0.008732942529411765, 0.008813404235294118, - 0.007022877941176471, 0.0044720488235294115, 0.005136848470588235, - 0.004520101411764706, 0.005064210529411765, 0.004433721117647059, - 0.004648721235294118, 0.004454701764705882, 0.00475238705882353, - 0.0068690546470588235, 0.008396555529411764, 0.00807476282352941, - 0.0073270962352941175, 0.0044509717647058826, 0.0042523544117647055, - 0.0044374034705882345, 0.004249918294117647, 0.004157248058823529, - 0.004364183647058824, 0.004299000941176471, 0.004270792764705883 - ] - } - }, - { - "size": 5, - "stats": { - "rme": 8.973520990063651, - "deviation": 0.002564253303266562, - "mean": 0.006947002156177156, - "variance": 0.000006575395003313474, - "moe": 0.0006233906966647315, - "sem": 0.0003180564778901691, - "sample": [ - 0.011425768000000001, 0.009587194333333333, 0.006069359636363636, - 0.005399457727272727, 0.0055667952727272724, 0.004729869818181818, - 0.004901619181818182, 0.0055265158181818175, 0.005071994090909091, - 0.005655958909090909, 0.005330675272727272, 0.0047710770909090905, - 0.005165559363636363, 0.005235509545454545, 0.011767157636363636, 0.010928307, - 0.01748420609090909, 0.00622441, 0.005886449181818182, 0.0060287149090909094, - 0.005256574181818182, 0.006112790909090909, 0.005401489181818182, - 0.005765665272727274, 0.006268045363636363, 0.006031130272727273, - 0.006123097272727273, 0.004867904545454545, 0.0051422940909090905, - 0.010322879727272728, 0.010203017363636364, 0.010562950636363637, - 0.010065044181818182, 0.00645070890909091, 0.005378691, 0.004780349636363636, - 0.005590243, 0.005331323090909091, 0.005587577272727273, 0.005226731636363636, - 0.0047914814545454544, 0.005043236, 0.0050886765454545456, 0.006283568272727274, - 0.004740854545454545, 0.0059524975454545445, 0.010459980636363636, - 0.009383456545454546, 0.011655961727272728, 0.010279216090909092, - 0.006469623181818182, 0.005923633818181818, 0.006034323727272728, - 0.006109150545454545, 0.005451708363636364, 0.005225693909090909, 0.006082058, - 0.0051885636363636365, 0.0060923264545454546, 0.00598305890909091, - 0.005408644181818182, 0.010415841818181818, 0.009432808272727272, - 0.010788063909090909, 0.010045605636363636 - ] - } - }, - { - "size": 10, - "stats": { - "rme": 8.243987229853005, - "deviation": 0.004069835733822465, - "mean": 0.012288526118279566, - "variance": 0.000016563562900298246, - "moe": 0.0010130645239281185, - "sem": 0.0005168696550653666, - "sample": [ - 0.010427078166666666, 0.009699611833333333, 0.0097266475, 0.011078544333333334, - 0.009968352, 0.010317109833333333, 0.008972092666666666, 0.009821328833333334, - 0.014142923166666667, 0.0169461855, 0.019127543, 0.018799904166666666, - 0.014861192166666667, 0.009797956, 0.010555280166666667, 0.0087135815, - 0.008678274833333334, 0.010587038333333333, 0.008766382166666666, - 0.010457045833333333, 0.009957088333333334, 0.010473930166666666, - 0.009701571666666667, 0.013528087166666668, 0.025919854000000003, - 0.013914227500000001, 0.019232438833333334, 0.009325588000000001, - 0.011599775666666666, 0.0106954305, 0.011087367333333334, 0.010654643833333333, - 0.012434296833333332, 0.009349475833333334, 0.010592363, 0.010270395, - 0.008900962333333333, 0.010197332333333333, 0.010174104833333334, - 0.019437778666666666, 0.018550473833333334, 0.020893846999999997, 0.01625391, - 0.009212485666666667, 0.009997678, 0.009275375333333334, 0.010771366833333332, - 0.010796766833333332, 0.0102907295, 0.009842959833333333, 0.0114099365, - 0.008713104666666667, 0.008748367666666666, 0.0102321875, 0.013038761666666667, - 0.019204465166666667, 0.02030639366666667, 0.0226447005, 0.011732622333333333, - 0.012304725, 0.009354576166666666, 0.009422401833333333 - ] - } - }, - { - "size": 20, - "stats": { - "rme": 9.971814530996312, - "deviation": 0.009177502528283773, - "mean": 0.02410529098214286, - "variance": 0.00008422655265665503, - "moe": 0.0024037349088962654, - "sem": 0.001226395361681768, - "sample": [ - 0.025246188, 0.018536792666666666, 0.022383540666666663, 0.037464779, 0.038880633, - 0.029770390666666664, 0.019568938, 0.02080895, 0.021160976666666668, 0.021826842, - 0.022767613000000003, 0.021377315999999997, 0.02163701733333333, 0.017960504999999998, - 0.019600624, 0.018452517666666664, 0.019591975333333334, 0.03258337066666667, - 0.03672714433333333, 0.032812186, 0.030603583333333333, 0.018715184, 0.019588279, - 0.019621269, 0.019543332666666666, 0.019752623333333334, 0.019593460666666666, - 0.018789024666666668, 0.023986285333333333, 0.01995129, 0.03157523366666667, - 0.052520737000000005, 0.06409276900000001, 0.02192390666666667, 0.018697601333333334, - 0.018229182, 0.018232671333333336, 0.018082944666666666, 0.018026357666666666, - 0.019154498, 0.017366062666666664, 0.018345623666666668, 0.017839880333333332, - 0.030149543666666667, 0.03533089266666667, 0.03520396333333333, 0.035792827, - 0.01679248066666667, 0.018900740333333332, 0.021403931666666667, 0.016670619333333334, - 0.019516000333333335, 0.016712015333333333, 0.01939898866666667, 0.0203158545, - 0.0203183375 - ] - } - }, - { - "size": 30, - "stats": { - "rme": 8.88051971142423, - "deviation": 0.010580491567385459, - "mean": 0.03561142122480619, - "variance": 0.0001119468018075148, - "moe": 0.0031624792813872257, - "sem": 0.0016135098374424621, - "sample": [ - 0.05021942, 0.059386974, 0.054334604, 0.0298808465, 0.028166503, 0.0258802115, - 0.0444307025, 0.032558055, 0.035071534, 0.0304158905, 0.031151268, 0.052188048, - 0.0545426285, 0.0296259405, 0.030747472, 0.031411287, 0.0265221135, 0.0250144675, - 0.028966891999999998, 0.02442775833333333, 0.025922848999999998, 0.028052504333333336, - 0.05188005666666667, 0.050788968999999996, 0.03785630833333333, 0.028009071333333333, - 0.030665226333333333, 0.026646518999999997, 0.028059162666666665, - 0.029551870999999997, 0.031688878999999996, 0.04475686833333333, 0.05894428733333334, - 0.03831296033333333, 0.029153989333333335, 0.026364612, 0.029429788999999998, - 0.03245890766666667, 0.027197067000000002, 0.028124913666666668, 0.028211313666666668, - 0.04697510933333333, 0.047297262 - ] - } - }, - { - "size": 40, - "stats": { - "rme": 9.0107428201209, - "deviation": 0.013293909781262674, - "mean": 0.04572126190000001, - "variance": 0.0001767280372723514, - "moe": 0.004119825323922924, - "sem": 0.0021019516958790427, - "sample": [ - 0.057775949, 0.040375939, 0.0381016985, 0.0337914865, 0.038737636, 0.066665047, - 0.06479226, 0.0424483095, 0.033935284, 0.0396928495, 0.048854401, 0.034705951, - 0.041926193, 0.0361393875, 0.0749938005, 0.0666354635, 0.0408895535, 0.0382929815, - 0.0342886275, 0.038884756, 0.0368584585, 0.034259232, 0.039120847, 0.0348063175, - 0.06487681, 0.064570578, 0.061574217, 0.0378892525, 0.035346552, 0.034917172, - 0.0375259565, 0.0349591165, 0.059620324, 0.0651945875, 0.0784410655, 0.043160427, - 0.0365856765, 0.0414708065, 0.0393388825, 0.036406623 - ] - } - }, - { - "size": 50, - "stats": { - "rme": 9.856656434903488, - "deviation": 0.01699660092223415, - "mean": 0.05796276189705882, - "variance": 0.00028888444290969074, - "moe": 0.005713190300374235, - "sem": 0.0029148930103950177, - "sample": [ - 0.0799070955, 0.08635615, 0.043826863, 0.048286937, 0.049039318, 0.046135064, - 0.048054149, 0.0392158185, 0.08080838, 0.080535742, 0.0432076985, 0.059749639, - 0.057265324, 0.051472864, 0.046661772, 0.088893283, 0.082193643, 0.0439753385, - 0.0481696355, 0.0453956165, 0.044717335, 0.049758077, 0.043736013, 0.0862403235, - 0.082229993, 0.049849956, 0.0484996945, 0.0405229395, 0.0435427665, 0.0621417375, - 0.059570232, 0.092393926, 0.0474217955, 0.0509587845 - ] - } - }, - { - "size": 100, - "stats": { - "rme": 10.598729540513759, - "deviation": 0.02888947285348556, - "mean": 0.11012003830769229, - "variance": 0.0008346016417522792, - "moe": 0.01167132503014245, - "sem": 0.005665691762205073, - "sample": [ - 0.109795123, 0.093012896, 0.087663311, 0.079467221, 0.085467714, 0.099061999, - 0.172106353, 0.147022522, 0.097199154, 0.103231442, 0.093896955, 0.1296147, - 0.171625715, 0.098705321, 0.086099783, 0.085575579, 0.086617461, 0.088275248, - 0.166416994, 0.102815137, 0.085632, 0.094097981, 0.133649684, 0.12552322, 0.144130033, - 0.09641745 - ] - } - }, - { - "size": 250, - "stats": { - "rme": 15.101156319616905, - "deviation": 0.07527989917267376, - "mean": 0.287778642, - "variance": 0.005667063219447928, - "moe": 0.0434579025828907, - "sem": 0.02011939934393088, - "sample": [ - 0.211692694, 0.404948578, 0.257337788, 0.397895768, 0.216839293, 0.223181616, - 0.331340933, 0.272198181, 0.396144407, 0.239161019, 0.212903094, 0.274909739, - 0.225289073, 0.365058805 - ] - } - }, - { - "size": 500, - "stats": { - "rme": 18.044132743426726, - "deviation": 0.13709837680181677, - "mean": 0.5840289128888889, - "variance": 0.018795964921692932, - "moe": 0.10538295230166317, - "sem": 0.045699458933938925, - "sample": [ - 0.689517485, 0.692970613, 0.472270853, 0.434486908, 0.480063827, 0.439246742, - 0.636238883, 0.586570984, 0.824893921 - ] - } - }, - { - "size": 1000, - "stats": { - "rme": 6.496402235977254, - "deviation": 0.0803545247623788, - "mean": 1.1439903975714285, - "variance": 0.006456849649787746, - "moe": 0.07431821776719537, - "sem": 0.0303711556057194, - "sample": [ - 1.139697177, 0.993256243, 1.195161198, 1.259478571, 1.140791752, 1.139525828, - 1.140022014 - ] - } - } - ] - }, - { - "name": "Free v0.6.1", - "results": [ - { - "size": 1, - "stats": { - "rme": 9.613658371050049, - "deviation": 0.0010749209423115723, - "mean": 0.00273939036214754, - "variance": 0.0000011554550322199985, - "moe": 0.0002633556308663352, - "sem": 0.00013436511778894654, - "sample": [ - 0.0037082834375, 0.003701989, 0.004635319125, 0.002062978724137931, - 0.002443546724137931, 0.0020033744333333332, 0.002021608066666667, - 0.002031163533333333, 0.0021761443666666667, 0.0019822987, 0.0027873866, 0.0031259976, - 0.0040078426666666665, 0.003911531766666667, 0.0034621040666666667, 0.0022085286, - 0.002207278433333333, 0.0023458284333333335, 0.0021427892666666666, - 0.0021702572999999998, 0.0022148137999999998, 0.0019326648333333333, - 0.0023351148000000004, 0.0022226091, 0.0022465554, 0.0017879954, 0.0023828854, - 0.0021368836333333337, 0.0020358154666666665, 0.0064218699333333336, - 0.007266162166666667, 0.0031631039666666664, 0.0021360349333333336, - 0.0018508254666666666, 0.0021720829333333335, 0.002576340166666667, 0.002008591, - 0.0018215091333333333, 0.0020289265, 0.0021360366666666668, 0.002415817633333333, - 0.0017858457666666667, 0.0020520711666666665, 0.0021950445666666664, - 0.0037144032666666664, 0.0038083430333333335, 0.0046919363, 0.0038749341, - 0.0022128940333333335, 0.0024803662666666665, 0.0021749080999999997, - 0.0022040420000000002, 0.0022189427, 0.0026992027333333337, 0.0018618762666666666, - 0.0023034347333333333, 0.0022740441333333333, 0.0021370366333333334, - 0.0024034543000000003, 0.0021774283666666666, 0.0036712344666666665, - 0.003902593666666667, 0.0042732760666666664, 0.003774781333333333 - ] - } - }, - { - "size": 2, - "stats": { - "rme": 8.455770984978919, - "deviation": 0.0015425742450916992, - "mean": 0.004735997969529086, - "variance": 0.0000023795353016202258, - "moe": 0.0004004651421566312, - "sem": 0.0002043189500799139, - "sample": [ - 0.0036838340526315788, 0.0036435319999999997, 0.004198971052631579, - 0.0035189243684210524, 0.0035057362631578945, 0.0043451110000000005, - 0.0034827415789473685, 0.0034486474736842108, 0.004076672684210527, - 0.0035691638947368417, 0.006395003947368421, 0.006499386789473684, - 0.0073645238947368415, 0.006081677631578947, 0.0034641115263157893, - 0.004295117736842105, 0.0034752512631578947, 0.00344631752631579, - 0.003473312947368421, 0.004025883315789474, 0.003474183052631579, - 0.004201358736842105, 0.005862774578947369, 0.004427326421052632, - 0.008639059631578946, 0.008711315736842105, 0.008930553368421053, - 0.005219452526315789, 0.003857061789473684, 0.004454497473684211, 0.003926733, - 0.0037995672631578946, 0.0036816082631578946, 0.004461839368421053, - 0.003624827157894737, 0.0037279981052631577, 0.004534339947368421, - 0.0064037226842105265, 0.0064480751578947365, 0.006524146526315789, - 0.006742737947368421, 0.0034218112105263154, 0.003408390105263158, 0.004706893, - 0.0036068474210526314, 0.0034592013684210526, 0.003732261052631579, - 0.004317923315789473, 0.0037500614736842106, 0.0035765266842105264, - 0.00408530047368421, 0.0077742528947368425, 0.0070205664736842106, - 0.006344141842105263, 0.005543513631578948, 0.0038053284210526317, - 0.0037517652105263162 - ] - } - }, - { - "size": 3, - "stats": { - "rme": 6.977711829294028, - "deviation": 0.0018159607251741349, - "mean": 0.006376164401055194, - "variance": 0.0000032977133553749697, - "moe": 0.000444910377667663, - "sem": 0.00022699509064676686, - "sample": [ - 0.007791250285714286, 0.0057302656, 0.005955891600000001, 0.0046359876363636365, - 0.0057374976363636365, 0.005971971909090909, 0.009393352454545454, - 0.012225832909090907, 0.007997887181818182, 0.005129655727272728, 0.005881702, - 0.005792999454545455, 0.0046406572727272725, 0.006632019833333333, 0.00518598425, - 0.005474065833333333, 0.005868163666666666, 0.004364178333333334, 0.005035146, - 0.005021951, 0.006427210583333333, 0.00770999175, 0.009398500416666667, - 0.009434215083333334, 0.00993773075, 0.006733167333333334, 0.0042212598333333335, - 0.004546032333333333, 0.00488258325, 0.005072707166666667, 0.00504859625, - 0.006244229083333334, 0.004886489083333333, 0.00652319325, 0.006600234, - 0.006297584166666666, 0.00739177575, 0.01023594025, 0.010415289416666666, - 0.007917727583333334, 0.00463449325, 0.0054609077500000006, 0.005541690166666666, - 0.005133023333333334, 0.005920562083333333, 0.005468931416666666, - 0.006614353333333333, 0.005020635916666667, 0.005551371666666667, - 0.005432412333333333, 0.0053018246666666664, 0.005535603833333333, 0.00788988775, - 0.009413588083333334, 0.009949873083333333, 0.008522146333333333, 0.00715048925, - 0.00501447325, 0.004775002333333334, 0.0050043015, 0.0051339551666666665, - 0.006025050583333334, 0.004945049333333333, 0.0042439773333333335 - ] - } - }, - { - "size": 4, - "stats": { - "rme": 7.654687952096323, - "deviation": 0.0023986995742144883, - "mean": 0.008774177144557822, - "variance": 0.000005753759647336768, - "moe": 0.0006716358807800567, - "sem": 0.0003426713677449269, - "sample": [ - 0.005919865166666666, 0.008638576416666667, 0.011685135749999999, - 0.012766955750000001, 0.012311272333333333, 0.007214813666666667, - 0.008799654083333334, 0.009890395416666666, 0.007699369166666667, - 0.007738654583333333, 0.0077013605, 0.00768514775, 0.010449397249999999, - 0.012475633916666666, 0.012818777083333335, 0.007581962166666667, 0.0071447015, - 0.006141286, 0.006204397166666667, 0.007524832249999999, 0.00694773675, - 0.007099915583333334, 0.00609552725, 0.006503490333333334, 0.007597213833333334, - 0.012938935916666667, 0.013176669916666666, 0.011849662249999999, - 0.006076784416666667, 0.0072469284999999994, 0.0071794827500000005, - 0.007032100833333333, 0.0063913184166666664, 0.008422973583333333, - 0.010286095833333333, 0.007565921083333333, 0.013196458416666668, - 0.010250147083333333, 0.0134116685, 0.011580852916666667, 0.007518711500000001, - 0.008127966166666667, 0.006562821083333333, 0.006470882833333334, - 0.007134807833333333, 0.00711419975, 0.007111905250000001, 0.008964926333333333, - 0.01168638725 - ] - } - }, - { - "size": 5, - "stats": { - "rme": 9.52037752197625, - "deviation": 0.003816417864863873, - "mean": 0.010499383709821435, - "variance": 0.000014565045319252124, - "moe": 0.0009995809666558761, - "sem": 0.0005099902891101409, - "sample": [ - 0.008031596, 0.007685084625, 0.007895775875, 0.008814380875, 0.007781476625, - 0.00834147675, 0.0078922675, 0.007759284125, 0.00901751625, 0.00919485925, - 0.014820293375, 0.0168079665, 0.01499817175, 0.0120778815, 0.007439651875, - 0.0117342735, 0.011032389375, 0.007002096125, 0.008829999125, 0.00923036825, - 0.00696490775, 0.008657353875, 0.0099752875, 0.01627379575, 0.02016829975, - 0.0247943575, 0.008620245875, 0.00833597975, 0.01008704675, 0.00807138075, - 0.00798438475, 0.008509658125, 0.00776553025, 0.007976304375, 0.008620475625, - 0.0083661655, 0.017773805625, 0.015501594, 0.016437187, 0.01350572075, 0.008209159, - 0.007840654625, 0.007756832375, 0.00907693325, 0.008164562125, 0.009714954875, - 0.01555168275, 0.009538311375, 0.008751425125, 0.0133825385, 0.016285443125, - 0.01026284025, 0.007816044, 0.008443154125, 0.0088471795, 0.00754748225 - ] - } - }, - { - "size": 10, - "stats": { - "rme": 7.780389964740491, - "deviation": 0.005755712245712285, - "mean": 0.019731354524691363, - "variance": 0.00003312822345544236, - "moe": 0.0015351763273464554, - "sem": 0.0007832532282379875, - "sample": [ - 0.017977490333333335, 0.016726447, 0.01649168625, 0.016816579, 0.01514478675, - 0.02478397925, 0.03388453175, 0.02858941775, 0.024750388, 0.01590586675, - 0.01492488525, 0.0150450745, 0.01832058425, 0.015077879, 0.0160043655, 0.0149558035, - 0.01497906225, 0.0178637255, 0.01499162475, 0.0279998135, 0.029077341, 0.02879436675, - 0.02565806025, 0.01619816725, 0.022144534, 0.02273929325, 0.016223262, 0.01376872725, - 0.01704118875, 0.01654834425, 0.017254895, 0.017580728, 0.024547456, 0.0381836615, - 0.015944874, 0.0161631025, 0.0170630615, 0.01595540475, 0.0163674615, 0.01914966625, - 0.01640987675, 0.017151954, 0.015301133, 0.01523653275, 0.01982030175, 0.02348433225, - 0.02843705775, 0.02955323075, 0.02888334275, 0.01585042225, 0.01256129, 0.01651324625, - 0.01873350575, 0.01991933175 - ] - } - }, - { - "size": 20, - "stats": { - "rme": 9.200007574749973, - "deviation": 0.013072982389780956, - "mean": 0.04062502428723404, - "variance": 0.00017090286856352298, - "moe": 0.0037375053116695477, - "sem": 0.0019068904651375245, - "sample": [ - 0.053437106, 0.055375818, 0.081357722, 0.061454097, 0.040864535, 0.031765732, - 0.032419249, 0.032809429, 0.0322497495, 0.04061526, 0.035340808, 0.044202469, - 0.0569939185, 0.0590301865, 0.048673595, 0.030339932, 0.0267235905, 0.0296490705, - 0.0306588285, 0.02998253, 0.035527273, 0.0292072165, 0.029793383, 0.047716143, - 0.049222537, 0.064000956, 0.0566774295, 0.04940418, 0.032196465, 0.035229687, - 0.0316403545, 0.032114071, 0.026134304, 0.0329598915, 0.06141801, 0.0608211085, - 0.0466867525, 0.030995951, 0.029491277, 0.0290619155, 0.0293045425, 0.0353293095, - 0.0296777175, 0.0321526185, 0.0298275115, 0.0333823315, 0.055459579 - ] - } - }, - { - "size": 30, - "stats": { - "rme": 10.196572911452558, - "deviation": 0.016950882253511955, - "mean": 0.05672012503030303, - "variance": 0.0002873324091724266, - "moe": 0.0057835089041819, - "sem": 0.002950769849072398, - "sample": [ - 0.074887433, 0.0445944795, 0.044674446, 0.043556634, 0.0443823625, 0.043829276, - 0.0858092705, 0.103504815, 0.048014488, 0.047890404, 0.048966602, 0.05002043, - 0.043563613, 0.061443108, 0.0841160365, 0.06535325, 0.045085154, 0.0448393195, - 0.0439392025, 0.0500291445, 0.043515649, 0.06409846, 0.0922059635, 0.0861639335, - 0.0566648975, 0.0511201985, 0.04770912, 0.0489836645, 0.047320121, 0.0755704225, - 0.0476051575, 0.0476457385, 0.0446613315 - ] - } - }, - { - "size": 40, - "stats": { - "rme": 9.930646162682553, - "deviation": 0.023668284995469045, - "mean": 0.07679704181081082, - "variance": 0.0005601877146267451, - "moe": 0.007626442485639001, - "sem": 0.0038910420845096943, - "sample": [ - 0.052143771, 0.069434919, 0.058731688, 0.114251402, 0.11239274, 0.058346858, - 0.05844314, 0.059102826, 0.06997728, 0.058053769, 0.069167853, 0.062955236, - 0.119299588, 0.129202811, 0.065879631, 0.066996705, 0.063619309, 0.05215786, - 0.070642053, 0.060865257, 0.111688204, 0.112988049, 0.110367724, 0.062337581, - 0.060540493, 0.061912282, 0.06006606, 0.070275507, 0.05811019, 0.109416035, - 0.111275031, 0.107556884, 0.080654523, 0.065482641, 0.066745946, 0.063019478, - 0.057389223 - ] - } - }, - { - "size": 50, - "stats": { - "rme": 11.73302462038882, - "deviation": 0.030362559243494545, - "mean": 0.09490810106451614, - "variance": 0.000921885003814716, - "moe": 0.011135590864643182, - "sem": 0.005453276623233684, - "sample": [ - 0.088460392, 0.083883499, 0.080107714, 0.077599468, 0.148116763, 0.157023449, - 0.071369693, 0.067788856, 0.080461149, 0.071978216, 0.067765264, 0.11421297, - 0.160781147, 0.073002688, 0.073215338, 0.084701256, 0.075969303, 0.081854793, - 0.12403599, 0.150864601, 0.076944106, 0.076671633, 0.081869227, 0.082000742, - 0.067108813, 0.082105339, 0.148075904, 0.140384757, 0.076174001, 0.088273427, - 0.089350635 - ] - } - }, - { - "size": 100, - "stats": { - "rme": 15.002716363446192, - "deviation": 0.0566192924627138, - "mean": 0.18768983044444446, - "variance": 0.00320574427897832, - "moe": 0.02815857290461308, - "sem": 0.013345295215456436, - "sample": [ - 0.163826084, 0.145625548, 0.281165284, 0.145850567, 0.150691297, 0.190054167, - 0.189516084, 0.161830323, 0.156829129, 0.281492724, 0.13414889, 0.156941707, - 0.160614052, 0.287491174, 0.165815161, 0.163703051, 0.298996685, 0.143825021 - ] - } - }, - { - "size": 250, - "stats": { - "rme": 20.27634381770261, - "deviation": 0.1430509010198173, - "mean": 0.5046538042, - "variance": 0.02046356028258156, - "moe": 0.10232534042870772, - "sem": 0.045236666856192626, - "sample": [ - 0.395821402, 0.390206412, 0.642675487, 0.500978927, 0.38455247, 0.596436916, - 0.602246083, 0.362449302, 0.392620335, 0.778550708 - ] - } - }, - { - "size": 500, - "stats": { - "rme": 12.81937909717097, - "deviation": 0.1395040115871502, - "mean": 1.0064788542857144, - "variance": 0.019461369248907737, - "moe": 0.12902433986374873, - "sem": 0.052727560222210354, - "sample": [ - 0.959229338, 1.2283453930000001, 0.833027396, 1.034469704, 1.070045114, 0.845875176, - 1.074359859 - ] - } - }, - { - "size": 1000, - "stats": { - "rme": 2.0049090098654823, - "deviation": 0.03926800948024038, - "mean": 2.0557517616666665, - "variance": 0.0015419765685402483, - "moe": 0.04121595229012337, - "sem": 0.0160310977402269, - "sample": [2.022743171, 2.096036793, 2.083418595, 2.035792053, 2.091395433, 2.005124525] - } - } - ] - } - ] -} +{"slug":"right-bind-small","title":"Right associated binds (small - 100 inputs per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":1,"stats":{"rme":7.704460777626861,"deviation":0.0007505377155810193,"mean":0.0022195783701898755,"variance":5.633068625095749e-7,"moe":0.00017100654495996848,"sem":0.00008724823722447371,"sample":[0.0035089712352941176,0.003134843705882353,0.0030993049411764707,0.003162290823529412,0.0031066262352941174,0.003283377117647059,0.0024244792272727273,0.0025544020454545454,0.0019203925625,0.00164292096875,0.00184587978125,0.00176719078125,0.0017404609375,0.00206512325,0.00172203125,0.0017758324375,0.0030416393125,0.0032566055,0.00303043171875,0.00524580328125,0.00194093696875,0.00165668909375,0.0017035624375,0.00169564909375,0.0019969241875,0.00165752775,0.00195390546875,0.00168574865625,0.00158028315625,0.0016063041875,0.0018594273125,0.0016014646875,0.0016703321875,0.0015883225625,0.002160341,0.003133980125,0.003121307375,0.00354297946875,0.0031388316875,0.0025274413125,0.00166572265625,0.00192044334375,0.001697606125,0.001602374125,0.00168569746875,0.00282055840625,0.00237691709375,0.001832713125,0.00200375040625,0.0017499844375,0.00169691584375,0.00171004571875,0.00364988628125,0.0031790318125,0.00363037075,0.00209988009375,0.0020072328125,0.00182352865625,0.00170472853125,0.0020416220625,0.0017288809375,0.00159235465625,0.00161850296875,0.0016176331875,0.001862903125,0.00160569353125,0.0015903550625,0.00158980853125,0.00182953125,0.00160286703125,0.00158748296875,0.0016396495625,0.00318921284375,0.00314434815625]}},{"size":2,"stats":{"rme":8.797687508591961,"deviation":0.0011581096613747077,"mean":0.0033878426206896553,"variance":0.00000134121798776944,"moe":0.0002980518070511684,"sem":0.00015206724849549407,"sample":[0.003018620346153846,0.002941966730769231,0.0028795218076923075,0.0026594295,0.0029657726923076927,0.002284440923076923,0.0026264388076923076,0.002719698346153846,0.0023031183846153845,0.0025259361923076922,0.0028332740769230766,0.0036052478461538464,0.004728487730769231,0.004805714730769231,0.004911727846153846,0.005518223769230769,0.002938460846153846,0.003085229,0.002497338692307692,0.002720285769230769,0.003094409269230769,0.0025067452307692304,0.0027481880000000004,0.0031060203076923075,0.0024519119230769233,0.004792431038461538,0.0049648078461538465,0.0046106870000000005,0.0047739035769230765,0.002656160423076923,0.002274262230769231,0.002615494230769231,0.002536907153846154,0.0026237140384615387,0.002513045653846154,0.0025459897692307696,0.002596843192307692,0.002618533769230769,0.002760327576923077,0.0022718257307692306,0.003028585961538461,0.005038789423076923,0.004790715192307692,0.004844190038461539,0.0042751497307692305,0.0025491355384615385,0.002855123269230769,0.002458791846153846,0.0035457120769230768,0.004178023038461539,0.0025913085000000002,0.0025461178076923077,0.0032069025,0.0024854294615384615,0.003670297846153846,0.007154756230769231,0.0067633436153846154,0.004881357923076923]}},{"size":3,"stats":{"rme":7.605326051920093,"deviation":0.0013123583184039905,"mean":0.004440957993965517,"variance":0.0000017222843558841498,"moe":0.00033774933526988746,"sem":0.00017232108942341197,"sample":[0.0043592054,0.00380170085,0.0042836932,0.0037151070500000003,0.00394893745,0.0034724023499999998,0.0034517388500000003,0.0038941532,0.0064975968,0.00667859435,0.006524074100000001,0.00628962775,0.0033668863,0.0036153677,0.0033223579500000003,0.0035956029,0.00332458255,0.00376543215,0.00301945115,0.0033958192999999997,0.0032351356,0.0033458061,0.0044855949499999995,0.006451159099999999,0.0066386281,0.006883821850000001,0.006955210450000001,0.0038363952,0.00405262195,0.0036161781,0.0041636683,0.0036449583,0.0041571238500000005,0.0032904237500000003,0.0032482004000000003,0.00417390115,0.006826109049999999,0.0067577780500000005,0.00619859625,0.00482228935,0.0035014736499999997,0.0037568839,0.0034094402500000004,0.0034927013,0.0033515988500000004,0.00391500935,0.0033213555499999998,0.0036374898,0.00302672005,0.0033730903,0.00550067485,0.00647791035,0.006676509799999999,0.0065860188,0.0044068202,0.00338411645,0.00388374045,0.004768078550000001]}},{"size":4,"stats":{"rme":7.490313749546636,"deviation":0.0015340695773533586,"mean":0.005412772505882353,"variance":0.0000023533694681611124,"moe":0.0004054336432397859,"sem":0.00020685389961213566,"sample":[0.00548032094117647,0.004205924764705883,0.004538072058823529,0.0070462041764705885,0.008133751411764705,0.007223730823529412,0.005418183,0.004413393,0.004467297352941177,0.0042981795294117645,0.004940822882352942,0.0040322380000000005,0.004768893647058824,0.0043468259411764704,0.004776258294117647,0.004164356882352942,0.004690594529411765,0.00783709505882353,0.008658761823529412,0.00788729805882353,0.0067524785294117646,0.004080025588235294,0.004593448941176471,0.004202069235294118,0.004644605411764706,0.004095442470588235,0.004650374411764706,0.00409692205882353,0.004851706235294117,0.004117511411764706,0.005270940823529411,0.007817452823529412,0.008732942529411765,0.008813404235294118,0.007022877941176471,0.0044720488235294115,0.005136848470588235,0.004520101411764706,0.005064210529411765,0.004433721117647059,0.004648721235294118,0.004454701764705882,0.00475238705882353,0.0068690546470588235,0.008396555529411764,0.00807476282352941,0.0073270962352941175,0.0044509717647058826,0.0042523544117647055,0.0044374034705882345,0.004249918294117647,0.004157248058823529,0.004364183647058824,0.004299000941176471,0.004270792764705883]}},{"size":5,"stats":{"rme":8.973520990063651,"deviation":0.002564253303266562,"mean":0.006947002156177156,"variance":0.000006575395003313474,"moe":0.0006233906966647315,"sem":0.0003180564778901691,"sample":[0.011425768000000001,0.009587194333333333,0.006069359636363636,0.005399457727272727,0.0055667952727272724,0.004729869818181818,0.004901619181818182,0.0055265158181818175,0.005071994090909091,0.005655958909090909,0.005330675272727272,0.0047710770909090905,0.005165559363636363,0.005235509545454545,0.011767157636363636,0.010928307,0.01748420609090909,0.00622441,0.005886449181818182,0.0060287149090909094,0.005256574181818182,0.006112790909090909,0.005401489181818182,0.005765665272727274,0.006268045363636363,0.006031130272727273,0.006123097272727273,0.004867904545454545,0.0051422940909090905,0.010322879727272728,0.010203017363636364,0.010562950636363637,0.010065044181818182,0.00645070890909091,0.005378691,0.004780349636363636,0.005590243,0.005331323090909091,0.005587577272727273,0.005226731636363636,0.0047914814545454544,0.005043236,0.0050886765454545456,0.006283568272727274,0.004740854545454545,0.0059524975454545445,0.010459980636363636,0.009383456545454546,0.011655961727272728,0.010279216090909092,0.006469623181818182,0.005923633818181818,0.006034323727272728,0.006109150545454545,0.005451708363636364,0.005225693909090909,0.006082058,0.0051885636363636365,0.0060923264545454546,0.00598305890909091,0.005408644181818182,0.010415841818181818,0.009432808272727272,0.010788063909090909,0.010045605636363636]}},{"size":10,"stats":{"rme":8.243987229853005,"deviation":0.004069835733822465,"mean":0.012288526118279566,"variance":0.000016563562900298246,"moe":0.0010130645239281185,"sem":0.0005168696550653666,"sample":[0.010427078166666666,0.009699611833333333,0.0097266475,0.011078544333333334,0.009968352,0.010317109833333333,0.008972092666666666,0.009821328833333334,0.014142923166666667,0.0169461855,0.019127543,0.018799904166666666,0.014861192166666667,0.009797956,0.010555280166666667,0.0087135815,0.008678274833333334,0.010587038333333333,0.008766382166666666,0.010457045833333333,0.009957088333333334,0.010473930166666666,0.009701571666666667,0.013528087166666668,0.025919854000000003,0.013914227500000001,0.019232438833333334,0.009325588000000001,0.011599775666666666,0.0106954305,0.011087367333333334,0.010654643833333333,0.012434296833333332,0.009349475833333334,0.010592363,0.010270395,0.008900962333333333,0.010197332333333333,0.010174104833333334,0.019437778666666666,0.018550473833333334,0.020893846999999997,0.01625391,0.009212485666666667,0.009997678,0.009275375333333334,0.010771366833333332,0.010796766833333332,0.0102907295,0.009842959833333333,0.0114099365,0.008713104666666667,0.008748367666666666,0.0102321875,0.013038761666666667,0.019204465166666667,0.02030639366666667,0.0226447005,0.011732622333333333,0.012304725,0.009354576166666666,0.009422401833333333]}},{"size":20,"stats":{"rme":9.971814530996312,"deviation":0.009177502528283773,"mean":0.02410529098214286,"variance":0.00008422655265665503,"moe":0.0024037349088962654,"sem":0.001226395361681768,"sample":[0.025246188,0.018536792666666666,0.022383540666666663,0.037464779,0.038880633,0.029770390666666664,0.019568938,0.02080895,0.021160976666666668,0.021826842,0.022767613000000003,0.021377315999999997,0.02163701733333333,0.017960504999999998,0.019600624,0.018452517666666664,0.019591975333333334,0.03258337066666667,0.03672714433333333,0.032812186,0.030603583333333333,0.018715184,0.019588279,0.019621269,0.019543332666666666,0.019752623333333334,0.019593460666666666,0.018789024666666668,0.023986285333333333,0.01995129,0.03157523366666667,0.052520737000000005,0.06409276900000001,0.02192390666666667,0.018697601333333334,0.018229182,0.018232671333333336,0.018082944666666666,0.018026357666666666,0.019154498,0.017366062666666664,0.018345623666666668,0.017839880333333332,0.030149543666666667,0.03533089266666667,0.03520396333333333,0.035792827,0.01679248066666667,0.018900740333333332,0.021403931666666667,0.016670619333333334,0.019516000333333335,0.016712015333333333,0.01939898866666667,0.0203158545,0.0203183375]}},{"size":30,"stats":{"rme":8.88051971142423,"deviation":0.010580491567385459,"mean":0.03561142122480619,"variance":0.0001119468018075148,"moe":0.0031624792813872257,"sem":0.0016135098374424621,"sample":[0.05021942,0.059386974,0.054334604,0.0298808465,0.028166503,0.0258802115,0.0444307025,0.032558055,0.035071534,0.0304158905,0.031151268,0.052188048,0.0545426285,0.0296259405,0.030747472,0.031411287,0.0265221135,0.0250144675,0.028966891999999998,0.02442775833333333,0.025922848999999998,0.028052504333333336,0.05188005666666667,0.050788968999999996,0.03785630833333333,0.028009071333333333,0.030665226333333333,0.026646518999999997,0.028059162666666665,0.029551870999999997,0.031688878999999996,0.04475686833333333,0.05894428733333334,0.03831296033333333,0.029153989333333335,0.026364612,0.029429788999999998,0.03245890766666667,0.027197067000000002,0.028124913666666668,0.028211313666666668,0.04697510933333333,0.047297262]}},{"size":40,"stats":{"rme":9.0107428201209,"deviation":0.013293909781262674,"mean":0.04572126190000001,"variance":0.0001767280372723514,"moe":0.004119825323922924,"sem":0.0021019516958790427,"sample":[0.057775949,0.040375939,0.0381016985,0.0337914865,0.038737636,0.066665047,0.06479226,0.0424483095,0.033935284,0.0396928495,0.048854401,0.034705951,0.041926193,0.0361393875,0.0749938005,0.0666354635,0.0408895535,0.0382929815,0.0342886275,0.038884756,0.0368584585,0.034259232,0.039120847,0.0348063175,0.06487681,0.064570578,0.061574217,0.0378892525,0.035346552,0.034917172,0.0375259565,0.0349591165,0.059620324,0.0651945875,0.0784410655,0.043160427,0.0365856765,0.0414708065,0.0393388825,0.036406623]}},{"size":50,"stats":{"rme":9.856656434903488,"deviation":0.01699660092223415,"mean":0.05796276189705882,"variance":0.00028888444290969074,"moe":0.005713190300374235,"sem":0.0029148930103950177,"sample":[0.0799070955,0.08635615,0.043826863,0.048286937,0.049039318,0.046135064,0.048054149,0.0392158185,0.08080838,0.080535742,0.0432076985,0.059749639,0.057265324,0.051472864,0.046661772,0.088893283,0.082193643,0.0439753385,0.0481696355,0.0453956165,0.044717335,0.049758077,0.043736013,0.0862403235,0.082229993,0.049849956,0.0484996945,0.0405229395,0.0435427665,0.0621417375,0.059570232,0.092393926,0.0474217955,0.0509587845]}},{"size":100,"stats":{"rme":10.598729540513759,"deviation":0.02888947285348556,"mean":0.11012003830769229,"variance":0.0008346016417522792,"moe":0.01167132503014245,"sem":0.005665691762205073,"sample":[0.109795123,0.093012896,0.087663311,0.079467221,0.085467714,0.099061999,0.172106353,0.147022522,0.097199154,0.103231442,0.093896955,0.1296147,0.171625715,0.098705321,0.086099783,0.085575579,0.086617461,0.088275248,0.166416994,0.102815137,0.085632,0.094097981,0.133649684,0.12552322,0.144130033,0.09641745]}},{"size":250,"stats":{"rme":15.101156319616905,"deviation":0.07527989917267376,"mean":0.287778642,"variance":0.005667063219447928,"moe":0.0434579025828907,"sem":0.02011939934393088,"sample":[0.211692694,0.404948578,0.257337788,0.397895768,0.216839293,0.223181616,0.331340933,0.272198181,0.396144407,0.239161019,0.212903094,0.274909739,0.225289073,0.365058805]}},{"size":500,"stats":{"rme":18.044132743426726,"deviation":0.13709837680181677,"mean":0.5840289128888889,"variance":0.018795964921692932,"moe":0.10538295230166317,"sem":0.045699458933938925,"sample":[0.689517485,0.692970613,0.472270853,0.434486908,0.480063827,0.439246742,0.636238883,0.586570984,0.824893921]}},{"size":1000,"stats":{"rme":6.496402235977254,"deviation":0.0803545247623788,"mean":1.1439903975714285,"variance":0.006456849649787746,"moe":0.07431821776719537,"sem":0.0303711556057194,"sample":[1.139697177,0.993256243,1.195161198,1.259478571,1.140791752,1.139525828,1.140022014]}}]},{"name":"Free v0.6.1","results":[{"size":1,"stats":{"rme":9.613658371050049,"deviation":0.0010749209423115723,"mean":0.00273939036214754,"variance":0.0000011554550322199985,"moe":0.0002633556308663352,"sem":0.00013436511778894654,"sample":[0.0037082834375,0.003701989,0.004635319125,0.002062978724137931,0.002443546724137931,0.0020033744333333332,0.002021608066666667,0.002031163533333333,0.0021761443666666667,0.0019822987,0.0027873866,0.0031259976,0.0040078426666666665,0.003911531766666667,0.0034621040666666667,0.0022085286,0.002207278433333333,0.0023458284333333335,0.0021427892666666666,0.0021702572999999998,0.0022148137999999998,0.0019326648333333333,0.0023351148000000004,0.0022226091,0.0022465554,0.0017879954,0.0023828854,0.0021368836333333337,0.0020358154666666665,0.0064218699333333336,0.007266162166666667,0.0031631039666666664,0.0021360349333333336,0.0018508254666666666,0.0021720829333333335,0.002576340166666667,0.002008591,0.0018215091333333333,0.0020289265,0.0021360366666666668,0.002415817633333333,0.0017858457666666667,0.0020520711666666665,0.0021950445666666664,0.0037144032666666664,0.0038083430333333335,0.0046919363,0.0038749341,0.0022128940333333335,0.0024803662666666665,0.0021749080999999997,0.0022040420000000002,0.0022189427,0.0026992027333333337,0.0018618762666666666,0.0023034347333333333,0.0022740441333333333,0.0021370366333333334,0.0024034543000000003,0.0021774283666666666,0.0036712344666666665,0.003902593666666667,0.0042732760666666664,0.003774781333333333]}},{"size":2,"stats":{"rme":8.455770984978919,"deviation":0.0015425742450916992,"mean":0.004735997969529086,"variance":0.0000023795353016202258,"moe":0.0004004651421566312,"sem":0.0002043189500799139,"sample":[0.0036838340526315788,0.0036435319999999997,0.004198971052631579,0.0035189243684210524,0.0035057362631578945,0.0043451110000000005,0.0034827415789473685,0.0034486474736842108,0.004076672684210527,0.0035691638947368417,0.006395003947368421,0.006499386789473684,0.0073645238947368415,0.006081677631578947,0.0034641115263157893,0.004295117736842105,0.0034752512631578947,0.00344631752631579,0.003473312947368421,0.004025883315789474,0.003474183052631579,0.004201358736842105,0.005862774578947369,0.004427326421052632,0.008639059631578946,0.008711315736842105,0.008930553368421053,0.005219452526315789,0.003857061789473684,0.004454497473684211,0.003926733,0.0037995672631578946,0.0036816082631578946,0.004461839368421053,0.003624827157894737,0.0037279981052631577,0.004534339947368421,0.0064037226842105265,0.0064480751578947365,0.006524146526315789,0.006742737947368421,0.0034218112105263154,0.003408390105263158,0.004706893,0.0036068474210526314,0.0034592013684210526,0.003732261052631579,0.004317923315789473,0.0037500614736842106,0.0035765266842105264,0.00408530047368421,0.0077742528947368425,0.0070205664736842106,0.006344141842105263,0.005543513631578948,0.0038053284210526317,0.0037517652105263162]}},{"size":3,"stats":{"rme":6.977711829294028,"deviation":0.0018159607251741349,"mean":0.006376164401055194,"variance":0.0000032977133553749697,"moe":0.000444910377667663,"sem":0.00022699509064676686,"sample":[0.007791250285714286,0.0057302656,0.005955891600000001,0.0046359876363636365,0.0057374976363636365,0.005971971909090909,0.009393352454545454,0.012225832909090907,0.007997887181818182,0.005129655727272728,0.005881702,0.005792999454545455,0.0046406572727272725,0.006632019833333333,0.00518598425,0.005474065833333333,0.005868163666666666,0.004364178333333334,0.005035146,0.005021951,0.006427210583333333,0.00770999175,0.009398500416666667,0.009434215083333334,0.00993773075,0.006733167333333334,0.0042212598333333335,0.004546032333333333,0.00488258325,0.005072707166666667,0.00504859625,0.006244229083333334,0.004886489083333333,0.00652319325,0.006600234,0.006297584166666666,0.00739177575,0.01023594025,0.010415289416666666,0.007917727583333334,0.00463449325,0.0054609077500000006,0.005541690166666666,0.005133023333333334,0.005920562083333333,0.005468931416666666,0.006614353333333333,0.005020635916666667,0.005551371666666667,0.005432412333333333,0.0053018246666666664,0.005535603833333333,0.00788988775,0.009413588083333334,0.009949873083333333,0.008522146333333333,0.00715048925,0.00501447325,0.004775002333333334,0.0050043015,0.0051339551666666665,0.006025050583333334,0.004945049333333333,0.0042439773333333335]}},{"size":4,"stats":{"rme":7.654687952096323,"deviation":0.0023986995742144883,"mean":0.008774177144557822,"variance":0.000005753759647336768,"moe":0.0006716358807800567,"sem":0.0003426713677449269,"sample":[0.005919865166666666,0.008638576416666667,0.011685135749999999,0.012766955750000001,0.012311272333333333,0.007214813666666667,0.008799654083333334,0.009890395416666666,0.007699369166666667,0.007738654583333333,0.0077013605,0.00768514775,0.010449397249999999,0.012475633916666666,0.012818777083333335,0.007581962166666667,0.0071447015,0.006141286,0.006204397166666667,0.007524832249999999,0.00694773675,0.007099915583333334,0.00609552725,0.006503490333333334,0.007597213833333334,0.012938935916666667,0.013176669916666666,0.011849662249999999,0.006076784416666667,0.0072469284999999994,0.0071794827500000005,0.007032100833333333,0.0063913184166666664,0.008422973583333333,0.010286095833333333,0.007565921083333333,0.013196458416666668,0.010250147083333333,0.0134116685,0.011580852916666667,0.007518711500000001,0.008127966166666667,0.006562821083333333,0.006470882833333334,0.007134807833333333,0.00711419975,0.007111905250000001,0.008964926333333333,0.01168638725]}},{"size":5,"stats":{"rme":9.52037752197625,"deviation":0.003816417864863873,"mean":0.010499383709821435,"variance":0.000014565045319252124,"moe":0.0009995809666558761,"sem":0.0005099902891101409,"sample":[0.008031596,0.007685084625,0.007895775875,0.008814380875,0.007781476625,0.00834147675,0.0078922675,0.007759284125,0.00901751625,0.00919485925,0.014820293375,0.0168079665,0.01499817175,0.0120778815,0.007439651875,0.0117342735,0.011032389375,0.007002096125,0.008829999125,0.00923036825,0.00696490775,0.008657353875,0.0099752875,0.01627379575,0.02016829975,0.0247943575,0.008620245875,0.00833597975,0.01008704675,0.00807138075,0.00798438475,0.008509658125,0.00776553025,0.007976304375,0.008620475625,0.0083661655,0.017773805625,0.015501594,0.016437187,0.01350572075,0.008209159,0.007840654625,0.007756832375,0.00907693325,0.008164562125,0.009714954875,0.01555168275,0.009538311375,0.008751425125,0.0133825385,0.016285443125,0.01026284025,0.007816044,0.008443154125,0.0088471795,0.00754748225]}},{"size":10,"stats":{"rme":7.780389964740491,"deviation":0.005755712245712285,"mean":0.019731354524691363,"variance":0.00003312822345544236,"moe":0.0015351763273464554,"sem":0.0007832532282379875,"sample":[0.017977490333333335,0.016726447,0.01649168625,0.016816579,0.01514478675,0.02478397925,0.03388453175,0.02858941775,0.024750388,0.01590586675,0.01492488525,0.0150450745,0.01832058425,0.015077879,0.0160043655,0.0149558035,0.01497906225,0.0178637255,0.01499162475,0.0279998135,0.029077341,0.02879436675,0.02565806025,0.01619816725,0.022144534,0.02273929325,0.016223262,0.01376872725,0.01704118875,0.01654834425,0.017254895,0.017580728,0.024547456,0.0381836615,0.015944874,0.0161631025,0.0170630615,0.01595540475,0.0163674615,0.01914966625,0.01640987675,0.017151954,0.015301133,0.01523653275,0.01982030175,0.02348433225,0.02843705775,0.02955323075,0.02888334275,0.01585042225,0.01256129,0.01651324625,0.01873350575,0.01991933175]}},{"size":20,"stats":{"rme":9.200007574749973,"deviation":0.013072982389780956,"mean":0.04062502428723404,"variance":0.00017090286856352298,"moe":0.0037375053116695477,"sem":0.0019068904651375245,"sample":[0.053437106,0.055375818,0.081357722,0.061454097,0.040864535,0.031765732,0.032419249,0.032809429,0.0322497495,0.04061526,0.035340808,0.044202469,0.0569939185,0.0590301865,0.048673595,0.030339932,0.0267235905,0.0296490705,0.0306588285,0.02998253,0.035527273,0.0292072165,0.029793383,0.047716143,0.049222537,0.064000956,0.0566774295,0.04940418,0.032196465,0.035229687,0.0316403545,0.032114071,0.026134304,0.0329598915,0.06141801,0.0608211085,0.0466867525,0.030995951,0.029491277,0.0290619155,0.0293045425,0.0353293095,0.0296777175,0.0321526185,0.0298275115,0.0333823315,0.055459579]}},{"size":30,"stats":{"rme":10.196572911452558,"deviation":0.016950882253511955,"mean":0.05672012503030303,"variance":0.0002873324091724266,"moe":0.0057835089041819,"sem":0.002950769849072398,"sample":[0.074887433,0.0445944795,0.044674446,0.043556634,0.0443823625,0.043829276,0.0858092705,0.103504815,0.048014488,0.047890404,0.048966602,0.05002043,0.043563613,0.061443108,0.0841160365,0.06535325,0.045085154,0.0448393195,0.0439392025,0.0500291445,0.043515649,0.06409846,0.0922059635,0.0861639335,0.0566648975,0.0511201985,0.04770912,0.0489836645,0.047320121,0.0755704225,0.0476051575,0.0476457385,0.0446613315]}},{"size":40,"stats":{"rme":9.930646162682553,"deviation":0.023668284995469045,"mean":0.07679704181081082,"variance":0.0005601877146267451,"moe":0.007626442485639001,"sem":0.0038910420845096943,"sample":[0.052143771,0.069434919,0.058731688,0.114251402,0.11239274,0.058346858,0.05844314,0.059102826,0.06997728,0.058053769,0.069167853,0.062955236,0.119299588,0.129202811,0.065879631,0.066996705,0.063619309,0.05215786,0.070642053,0.060865257,0.111688204,0.112988049,0.110367724,0.062337581,0.060540493,0.061912282,0.06006606,0.070275507,0.05811019,0.109416035,0.111275031,0.107556884,0.080654523,0.065482641,0.066745946,0.063019478,0.057389223]}},{"size":50,"stats":{"rme":11.73302462038882,"deviation":0.030362559243494545,"mean":0.09490810106451614,"variance":0.000921885003814716,"moe":0.011135590864643182,"sem":0.005453276623233684,"sample":[0.088460392,0.083883499,0.080107714,0.077599468,0.148116763,0.157023449,0.071369693,0.067788856,0.080461149,0.071978216,0.067765264,0.11421297,0.160781147,0.073002688,0.073215338,0.084701256,0.075969303,0.081854793,0.12403599,0.150864601,0.076944106,0.076671633,0.081869227,0.082000742,0.067108813,0.082105339,0.148075904,0.140384757,0.076174001,0.088273427,0.089350635]}},{"size":100,"stats":{"rme":15.002716363446192,"deviation":0.0566192924627138,"mean":0.18768983044444446,"variance":0.00320574427897832,"moe":0.02815857290461308,"sem":0.013345295215456436,"sample":[0.163826084,0.145625548,0.281165284,0.145850567,0.150691297,0.190054167,0.189516084,0.161830323,0.156829129,0.281492724,0.13414889,0.156941707,0.160614052,0.287491174,0.165815161,0.163703051,0.298996685,0.143825021]}},{"size":250,"stats":{"rme":20.27634381770261,"deviation":0.1430509010198173,"mean":0.5046538042,"variance":0.02046356028258156,"moe":0.10232534042870772,"sem":0.045236666856192626,"sample":[0.395821402,0.390206412,0.642675487,0.500978927,0.38455247,0.596436916,0.602246083,0.362449302,0.392620335,0.778550708]}},{"size":500,"stats":{"rme":12.81937909717097,"deviation":0.1395040115871502,"mean":1.0064788542857144,"variance":0.019461369248907737,"moe":0.12902433986374873,"sem":0.052727560222210354,"sample":[0.959229338,1.2283453930000001,0.833027396,1.034469704,1.070045114,0.845875176,1.074359859]}},{"size":1000,"stats":{"rme":2.0049090098654823,"deviation":0.03926800948024038,"mean":2.0557517616666665,"variance":0.0015419765685402483,"moe":0.04121595229012337,"sem":0.0160310977402269,"sample":[2.022743171,2.096036793,2.083418595,2.035792053,2.091395433,2.005124525]}}]}]} \ No newline at end of file From b7c940ff0603c191cf2c269272869db6aefd48dd Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 20:14:44 +0000 Subject: [PATCH 10/13] Use Minibench with a PureScript benchmark runner --- .github/workflows/ci.yml | 3 -- README.md | 17 ++++--- benchmark/spago.yaml | 6 +++ benchmark/src/Benchmark/Harness.js | 35 -------------- benchmark/src/Benchmark/Harness.purs | 69 +++++++++++++++++++++++++--- package.json | 5 +- 6 files changed, 81 insertions(+), 54 deletions(-) delete mode 100644 benchmark/src/Benchmark/Harness.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7d60ea..3c355fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,8 +33,5 @@ jobs: - name: Run benchmarks run: npm run test:benchmark - - name: Lint - run: npm run lint - - name: Check formatting run: npm run format:check diff --git a/README.md b/README.md index 94beaa4..9bea622 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,17 @@ Module documentation is [published on Pursuit](http://pursuit.purescript.org/pac ## Benchmarks Run `npm run build:benchmark` and `npm run test:benchmark` to run all four workloads. -The runner allows a 3 GiB Node heap for the three-million-bind cases. -Results are written to `tmp/`. The runner uses Benchmark.js defaults and times a -batch of inputs, including both bind construction and trampoline execution, as -the original Benchotron harness did. Its deterministic zero-array inputs and -historical implementations are unchanged; measurements on the current compiler -and Node runtime are not directly comparable to the historical results below. +The runner uses Minibench with garbage collection before each measurement series +and allows a 2.5 GiB old-generation Node heap for the three-million-bind cases. +To save JSON results, run +`npm run --silent test:benchmark > /tmp/free-benchmarks.json`; progress goes to stderr. +Timings include both bind construction and trampoline execution over each input +batch. Short cases group repeated batches to reduce timing noise. Results record +sample, warm-up and repetition counts, with timings normalized to seconds per +batch; the deviation and min/max describe these normalized samples. +The deterministic zero-array inputs and historical implementations are unchanged. +The sampling method differs from Benchotron, so these measurements are not directly +comparable to the historical results below. The following benchmarks compare the implementation at `v5.2.0` (commit f686f5fc07766f3ca9abc83b47b6ad3da326759a) with the implementation at `v0.6.1` (commit 0df59c5d459fed983131856886fc3a4b43234f1f), which used the `Gosub` technique to defer monadic binds. diff --git a/benchmark/spago.yaml b/benchmark/spago.yaml index 9f46454..1b88325 100644 --- a/benchmark/spago.yaml +++ b/benchmark/spago.yaml @@ -6,8 +6,11 @@ package: run: main: Benchmark.Main dependencies: + - argonaut-codecs: ">=9.1.0 <10.0.0" + - argonaut-core: ">=7.0.0 <8.0.0" - arrays: ">=7.0.0 <8.0.0" - catenable-lists: ">=7.0.0 <8.0.0" + - console: ">=6.0.0 <7.0.0" - effect: ">=4.0.0 <5.0.0" - either: ">=6.0.0 <7.0.0" - exists: ">=6.0.0 <7.0.0" @@ -15,9 +18,12 @@ package: - free: "*" - functors: ">=5.0.0 <6.0.0" - identity: ">=6.0.0 <7.0.0" + - integers: ">=6.0.0 <7.0.0" - lazy: ">=6.0.0 <7.0.0" - maybe: ">=6.0.0 <7.0.0" + - minibench: ">=4.0.1 <5.0.0" - newtype: ">=5.0.0 <6.0.0" + - numbers: ">=9.0.0 <10.0.0" - partial: ">=4.0.0 <5.0.0" - prelude: ">=6.0.0 <7.0.0" - tailrec: ">=6.0.0 <7.0.0" diff --git a/benchmark/src/Benchmark/Harness.js b/benchmark/src/Benchmark/Harness.js deleted file mode 100644 index 4b4f944..0000000 --- a/benchmark/src/Benchmark/Harness.js +++ /dev/null @@ -1,35 +0,0 @@ -import Benchmark from "benchmark"; -import { mkdirSync, writeFileSync } from "node:fs"; - -// Benchotron disabled decompilation because generated PureScript functions -// close over imported modules. Keep its Benchmark.js defaults and batch timing. -export const runSuiteImpl = (map) => (suite) => () => { - Benchmark.support.decompilation = false; - mkdirSync("tmp", { recursive: true }); - for (const benchmark of suite) { - const series = benchmark.functions.map((fn) => ({ name: fn.name, results: [] })); - for (const size of benchmark.sizes) { - console.error(`${benchmark.slug}: n=${size}`); - // Generate the same shared batch before measuring any competitor. - const inputs = Array.from({ length: benchmark.inputsPerSize }, () => benchmark.gen(size)); - for (let i = 0; i < benchmark.functions.length; i++) { - const fn = benchmark.functions[i]; - const measured = new Benchmark(() => map(fn.fn)(inputs)); - measured.run(); - if (measured.error) { - throw new Error(`While running ${fn.name} at n=${size}: ${measured.error}`); - } - series[i].results.push({ size, stats: measured.stats }); - } - } - const result = { - slug: benchmark.slug, - title: benchmark.title, - sizeInterpretation: benchmark.sizeInterpretation, - series, - }; - const path = `tmp/${benchmark.slug}.json`; - writeFileSync(path, JSON.stringify(result)); - console.error(`Results written to ${path}`); - } -}; diff --git a/benchmark/src/Benchmark/Harness.purs b/benchmark/src/Benchmark/Harness.purs index 2a92e90..c7efd3b 100644 --- a/benchmark/src/Benchmark/Harness.purs +++ b/benchmark/src/Benchmark/Harness.purs @@ -2,7 +2,16 @@ module Benchmark.Harness (Benchmark, benchFn, mkBenchmark, runSuite) where import Prelude +import Data.Argonaut.Core (stringify) +import Data.Argonaut.Encode (encodeJson) +import Data.Array (replicate) +import Data.Foldable (foldl) +import Data.Int (toNumber) +import Data.Number (sqrt) +import Data.Traversable (traverse) import Effect (Effect) +import Effect.Console (error, log) +import Performance.Minibench (benchWith') type Benchmark = { slug :: String @@ -20,11 +29,59 @@ mkBenchmark = identity benchFn :: String -> (Array Number -> Number) -> { name :: String, fn :: Array Number -> Number } benchFn name fn = { name, fn } --- Keep PureScript's batch map inside the timed operation, as in Benchotron. +-- Keep input generation outside timing and batch mapping inside it. runSuite :: Array Benchmark -> Effect Unit -runSuite = runSuiteImpl map +runSuite suite = do + reports <- traverse runBenchmark suite + log (stringify (encodeJson reports)) + where + runBenchmark benchmark = do + measurements <- traverse (measureSize benchmark) benchmark.sizes + pure + { slug: benchmark.slug + , title: benchmark.title + , sizeInterpretation: benchmark.sizeInterpretation + , unit: "seconds per input batch" + , inputsPerSize: benchmark.inputsPerSize + , measurements + } -foreign import runSuiteImpl - :: ((Array Number -> Number) -> Array (Array Number) -> Array Number) - -> Array Benchmark - -> Effect Unit + measureSize benchmark size = do + error (benchmark.slug <> ": n=" <> show size) + let + inputs = map (\_ -> benchmark.gen size) (replicate benchmark.inputsPerSize unit) + sampleCount = if size <= 5 then 1000 else if size <= 1000 then 100 else 5 + warmupCount = if size <= 1000 then 100 else 1 + iterationsPerSample = if size <= 5 then 100 else 1 + repetitions = replicate iterationsPerSample unit + results <- traverse + ( \fn -> do + let + runBatch _ = + if iterationsPerSample == 1 then + map fn.fn inputs + else + foldl (\_ _ -> map fn.fn inputs) [] repetitions + -- Let the runtime optimize the small cases before collecting statistics. + _ <- benchWith' warmupCount runBatch + measured <- benchWith' sampleCount runBatch + let + divisor = 1.0e9 * toNumber iterationsPerSample + mean = measured.mean / divisor + deviation = measured.stdDev / divisor + sem = deviation / sqrt (toNumber sampleCount) + pure + { name: fn.name + , sampleCount + , warmupCount + , iterationsPerSample + , mean + , deviation + , sem + , relativeStandardErrorPercent: 100.0 * sem / mean + , min: measured.min / divisor + , max: measured.max / divisor + } + ) + benchmark.functions + pure { size, results } diff --git a/package.json b/package.json index 2ff7ea9..8294f57 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,12 @@ "build": "spago build -p free", "build:benchmark": "spago build -p free-benchmark", "test": "spago test -p free", - "test:benchmark": "node --max-old-space-size=3072 --input-type=module -e \"import { main } from './output/Benchmark.Main/index.js'; main()\"", - "lint": "oxlint --deny-warnings benchmark/src", + "test:benchmark": "node --expose-gc --max-old-space-size=2560 --max-semi-space-size=8 --input-type=module -e \"import { main } from './output/Benchmark.Main/index.js'; main()\"", "format": "purs-tidy format-in-place src test benchmark/src && oxfmt --write .", "format:check": "purs-tidy check src test benchmark/src && oxfmt --check ." }, "devDependencies": { - "benchmark": "^2.1.4", "oxfmt": "^0.73.0", - "oxlint": "^1.88.0", "purescript": "^0.15.16", "purs-tidy": "^0.11.1", "spago": "^1.0.5" From 5019ddc4caf1380cd9b664fc24d03e4229fb3680 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 21:19:10 +0000 Subject: [PATCH 11/13] Run benchmarks through Spago --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8294f57..b25c609 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "build": "spago build -p free", "build:benchmark": "spago build -p free-benchmark", "test": "spago test -p free", - "test:benchmark": "node --expose-gc --max-old-space-size=2560 --max-semi-space-size=8 --input-type=module -e \"import { main } from './output/Benchmark.Main/index.js'; main()\"", + "test:benchmark": "NODE_OPTIONS='--expose-gc --max-old-space-size=2560' spago run -p free-benchmark", "format": "purs-tidy format-in-place src test benchmark/src && oxfmt --write .", "format:check": "purs-tidy check src test benchmark/src && oxfmt --check ." }, From 83f7a528a9b7bdca3ab1c3244dbe607e21f5391f Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Thu, 15 Oct 2026 21:31:52 +0000 Subject: [PATCH 12/13] Retain Unreleased section and date the planned release --- CHANGELOG.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cba469f..10a0bb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,17 @@ Notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [v7.1.1](https://github.com/purescript/purescript-free/releases/tag/v7.1.1) +## [Unreleased] + +Breaking changes: + +New features: + +Bugfixes: + +Other improvements: + +## [v7.1.1](https://github.com/purescript/purescript-free/releases/tag/v7.1.1) - 2026-10-17 Other improvements: From afe9164db619d82fb4f143da90af0a6b961ec4d0 Mon Sep 17 00:00:00 2001 From: Thomas Honeyman Date: Fri, 16 Oct 2026 00:54:48 +0000 Subject: [PATCH 13/13] Remove the free benchmarks --- .github/workflows/ci.yml | 6 - .gitignore | 1 - .oxfmtrc.json | 3 - CHANGELOG.md | 2 +- README.md | 25 -- benchmark/left-bind-large.json | 1 - benchmark/left-bind-large.png | Bin 49371 -> 0 bytes benchmark/left-bind-small.json | 1 - benchmark/left-bind-small.png | Bin 48120 -> 0 bytes benchmark/right-bind-large.json | 1 - benchmark/right-bind-large.png | Bin 50523 -> 0 bytes benchmark/right-bind-small.json | 1 - benchmark/right-bind-small.png | Bin 52101 -> 0 bytes benchmark/spago.yaml | 32 --- benchmark/src/Benchmark/Free0df59c5.purs | 198 -------------- benchmark/src/Benchmark/Freef686f5f.purs | 243 ------------------ benchmark/src/Benchmark/Harness.purs | 87 ------- benchmark/src/Benchmark/Main.purs | 141 ---------- .../src/Benchmark/Trampoline0df59c5.purs | 43 ---- .../src/Benchmark/Trampolinef686f5f.purs | 31 --- package.json | 6 +- 21 files changed, 3 insertions(+), 819 deletions(-) delete mode 100644 .oxfmtrc.json delete mode 100644 benchmark/left-bind-large.json delete mode 100644 benchmark/left-bind-large.png delete mode 100644 benchmark/left-bind-small.json delete mode 100644 benchmark/left-bind-small.png delete mode 100644 benchmark/right-bind-large.json delete mode 100644 benchmark/right-bind-large.png delete mode 100644 benchmark/right-bind-small.json delete mode 100644 benchmark/right-bind-small.png delete mode 100644 benchmark/spago.yaml delete mode 100644 benchmark/src/Benchmark/Free0df59c5.purs delete mode 100644 benchmark/src/Benchmark/Freef686f5f.purs delete mode 100644 benchmark/src/Benchmark/Harness.purs delete mode 100644 benchmark/src/Benchmark/Main.purs delete mode 100644 benchmark/src/Benchmark/Trampoline0df59c5.purs delete mode 100644 benchmark/src/Benchmark/Trampolinef686f5f.purs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c355fd..a4f213f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,11 +27,5 @@ jobs: - name: Run tests run: npm test - - name: Build benchmarks - run: npm run build:benchmark - - - name: Run benchmarks - run: npm run test:benchmark - - name: Check formatting run: npm run format:check diff --git a/.gitignore b/.gitignore index d695234..043a700 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ !/.gitignore !/.github/ !/.tidyrc.json -!/.oxfmtrc.json /bower_components/ /node_modules/ /output/ diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index a05a653..0000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignorePatterns": ["benchmark/*.json"] -} diff --git a/CHANGELOG.md b/CHANGELOG.md index 10a0bb4..a266d9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ Other improvements: Other improvements: -- Migrate from Bower/Pulp to Spago, update CI and formatting, and restore the benchmark runner (#129 by @thomashoneyman). +- Migrate from Bower/Pulp to Spago, update CI and formatting, and remove the benchmarks (#129 by @thomashoneyman). ## [v7.1.0](https://github.com/purescript/purescript-free/releases/tag/v7.1.0) - 2023-09-05 diff --git a/README.md b/README.md index 9bea622..7927b52 100644 --- a/README.md +++ b/README.md @@ -21,28 +21,3 @@ spago install free ## Documentation Module documentation is [published on Pursuit](http://pursuit.purescript.org/packages/purescript-free). - -## Benchmarks - -Run `npm run build:benchmark` and `npm run test:benchmark` to run all four workloads. -The runner uses Minibench with garbage collection before each measurement series -and allows a 2.5 GiB old-generation Node heap for the three-million-bind cases. -To save JSON results, run -`npm run --silent test:benchmark > /tmp/free-benchmarks.json`; progress goes to stderr. -Timings include both bind construction and trampoline execution over each input -batch. Short cases group repeated batches to reduce timing noise. Results record -sample, warm-up and repetition counts, with timings normalized to seconds per -batch; the deviation and min/max describe these normalized samples. -The deterministic zero-array inputs and historical implementations are unchanged. -The sampling method differs from Benchotron, so these measurements are not directly -comparable to the historical results below. - -The following benchmarks compare the implementation at `v5.2.0` (commit f686f5fc07766f3ca9abc83b47b6ad3da326759a) with the implementation at `v0.6.1` (commit 0df59c5d459fed983131856886fc3a4b43234f1f), which used the `Gosub` technique to defer monadic binds. - -![left-bind-small](benchmark/left-bind-small.png) - -![left-bind-large](benchmark/left-bind-large.png) - -![right-bind-small](benchmark/right-bind-small.png) - -![right-bind-large](benchmark/right-bind-large.png) diff --git a/benchmark/left-bind-large.json b/benchmark/left-bind-large.json deleted file mode 100644 index 2346c7d..0000000 --- a/benchmark/left-bind-large.json +++ /dev/null @@ -1 +0,0 @@ -{"slug":"left-bind-large","title":"Left associated binds (large - 1 input per size)","sizeInterpretation":"Number of binds","series":[{"name":"Free","results":[{"size":100000,"stats":{"moe":0.2956101016555821,"rme":14.39112929360249,"sem":0.11497864708501832,"deviation":0.2816390166738393,"mean":2.0541133056666667,"variance":0.07932053571300712,"sample":[1.7958541160000001,1.872374945,2.288292841,2.511392654,1.954026152,1.902739126]}},{"size":500000,"stats":{"rme":12.595494771361663,"deviation":1.0926834185433445,"mean":10.769947354,"variance":1.1939570531595698,"moe":1.3565281558514735,"sem":0.4886628803499545,"sample":[9.71459062,10.96870124,10.954100764,12.402810162,9.809533984]}},{"size":1000000,"stats":{"rme":102.65855299659903,"deviation":32.67164802409972,"mean":39.5103032394,"variance":1067.4365846106589,"moe":40.560705590136436,"sem":14.61120518376673,"sample":[97.227805073,33.411728362,22.214333973,19.793394896,24.904253893]}},{"size":1500000,"stats":{"rme":91.58067102417942,"deviation":42.97479006541146,"mean":58.25650174980001,"variance":1846.8325811661878,"moe":53.351695217679676,"sem":19.21891038100853,"sample":[134.934246698,44.415789815,37.506067285,37.396271162,37.030133789]}},{"size":2000000,"stats":{"rme":40.897353243454894,"deviation":24.960889781868154,"mean":75.77035457179998,"variance":623.0460187025701,"moe":30.98806956304731,"sem":11.162849266227418,"sample":[119.192609228,62.194457431,74.893429245,62.286611382,60.284665573]}},{"size":2500000,"stats":{"rme":24.226438792294573,"deviation":15.148886076686232,"mean":77.62928395,"variance":229.48874936441797,"moe":18.806810961043304,"sem":6.774787810174101,"sample":[104.234941609,68.549368142,75.577693107,68.529232435,71.255184457]}},{"size":3000000,"stats":{"rme":0.9036291855144747,"deviation":0.5496231347585575,"mean":75.510824967,"variance":0.30208559026182347,"moe":0.6823378526245627,"sem":0.2457989382653324,"sample":[76.015258776,76.161614772,74.961221678,75.357864327,75.058165282]}}]},{"name":"Free v0.6.1","results":[{"size":100000,"stats":{"rme":13.464786421416749,"deviation":0.44150101594625923,"mean":4.0706775109999995,"variance":0.19492314708157904,"moe":0.5481080327607932,"sem":0.19744525675821084,"sample":[3.66077755,4.339257057,4.29966785,4.518401322,3.535283776]}},{"size":500000,"stats":{"rme":44.6759194868656,"deviation":24.372315398627084,"mean":67.726362319,"variance":594.0097578901549,"moe":30.257375101019324,"sem":10.899630800079008,"sample":[34.012386673,55.145016748,82.421494614,70.000856272,97.052057288]}},{"size":1000000,"stats":{"rme":17.61229588902891,"deviation":20.387979711109995,"mean":143.711882828,"variance":415.6697167006329,"moe":25.310962031361885,"sem":9.117781711585694,"sample":[107.627165983,157.551595375,150.54147385,152.756308747,150.082870185]}},{"size":1500000,"stats":{"rme":7.168686647443891,"deviation":12.729640772372832,"mean":220.45046057960002,"variance":162.0437541936568,"moe":15.803402731798345,"sem":5.692868419235715,"sample":[206.630076621,212.397207164,220.711863941,222.348590939,240.164564233]}},{"size":2000000,"stats":{"rme":11.062031748305523,"deviation":29.44693059250524,"mean":330.47574609820003,"variance":867.121721319821,"moe":36.55733195383244,"sem":13.169067706711974,"sample":[278.870463631,338.792022116,339.805939187,341.431522044,353.478783513]}},{"size":2500000,"stats":{"rme":3.244145393596063,"deviation":9.32213107277591,"mean":356.7379848668,"variance":86.90212773801416,"moe":11.573098903263713,"sem":4.168983754777995,"sample":[345.987214502,355.449872606,353.704699248,371.608380984,356.939756994]}},{"size":3000000,"stats":{"rme":5.2069916890538925,"deviation":17.865549890153357,"mean":425.9552380094,"variance":319.1778728775587,"moe":22.179453842239184,"sem":7.989716801959361,"sample":[423.433975557,438.419904645,436.876036402,395.799223561,435.247049882]}}]}]} diff --git a/benchmark/left-bind-large.png b/benchmark/left-bind-large.png deleted file mode 100644 index fc979b89fc1fe7b06610b89c8eded6980aed0357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49371 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
)cC*THUi~^qYHy|$h4w!ze)ZrHe;_UPu+MRj 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 ZrOU~ZQ5^d$N(TQFuHLwkC2i>Q{{UvEe6|1p diff --git a/benchmark/spago.yaml b/benchmark/spago.yaml deleted file mode 100644 index 1b88325..0000000 --- a/benchmark/spago.yaml +++ /dev/null @@ -1,32 +0,0 @@ -package: - name: free-benchmark - build: - strict: true - pedanticPackages: true - run: - main: Benchmark.Main - dependencies: - - argonaut-codecs: ">=9.1.0 <10.0.0" - - argonaut-core: ">=7.0.0 <8.0.0" - - arrays: ">=7.0.0 <8.0.0" - - catenable-lists: ">=7.0.0 <8.0.0" - - console: ">=6.0.0 <7.0.0" - - effect: ">=4.0.0 <5.0.0" - - either: ">=6.0.0 <7.0.0" - - exists: ">=6.0.0 <7.0.0" - - foldable-traversable: ">=6.0.0 <7.0.0" - - free: "*" - - functors: ">=5.0.0 <6.0.0" - - identity: ">=6.0.0 <7.0.0" - - integers: ">=6.0.0 <7.0.0" - - lazy: ">=6.0.0 <7.0.0" - - maybe: ">=6.0.0 <7.0.0" - - minibench: ">=4.0.1 <5.0.0" - - newtype: ">=5.0.0 <6.0.0" - - numbers: ">=9.0.0 <10.0.0" - - partial: ">=4.0.0 <5.0.0" - - prelude: ">=6.0.0 <7.0.0" - - tailrec: ">=6.0.0 <7.0.0" - - transformers: ">=6.0.0 <7.0.0" - - tuples: ">=7.0.0 <8.0.0" - - unsafe-coerce: ">=6.0.0 <7.0.0" diff --git a/benchmark/src/Benchmark/Free0df59c5.purs b/benchmark/src/Benchmark/Free0df59c5.purs deleted file mode 100644 index 80525fb..0000000 --- a/benchmark/src/Benchmark/Free0df59c5.purs +++ /dev/null @@ -1,198 +0,0 @@ -module Benchmark.Free0df59c5 - ( Free(..) - , GosubF - , FreeC(..) - , class MonadFree - , wrap - , Natural - , liftF - , liftFI - , liftFC - , liftFCI - , pureF - , pureFC - , mapF - , mapFC - , bindF - , bindFC - , injF - , injFC - , runFree - , runFreeM - , runFreeC - , runFreeCM - ) where - -import Prelude - -import Control.Monad.Rec.Class (class MonadRec, Step(..), tailRecM) -import Control.Monad.Trans.Class (class MonadTrans) -import Data.Coyoneda (Coyoneda, hoistCoyoneda, liftCoyoneda, lowerCoyoneda) -import Data.Either (Either(..), either) -import Data.Exists (Exists, mkExists, runExists) -import Data.Functor.Coproduct.Inject (class Inject, inj) -import Data.Identity (Identity(..)) -import Data.Newtype (unwrap) -import Partial.Unsafe (unsafePartial) - -type Natural :: forall k. (k -> Type) -> (k -> Type) -> Type -type Natural f g = forall a. f a -> g a - -newtype GosubF f a i = GosubF { a :: Unit -> Free f i, f :: i -> Free f a } - -gosub :: forall f a i. (Unit -> Free f i) -> (i -> Free f a) -> Free f a -gosub a f = Gosub $ mkExists $ GosubF { a: a, f: f } - --- | The free `Monad` for a `Functor`. --- | --- | The implementation defers the evaluation of monadic binds so that it --- | is safe to use monadic tail recursion, for example. -data Free f a - = Pure a - | Free (f (Free f a)) - | Gosub (Exists (GosubF f a)) - --- | The free `Monad` for an arbitrary type constructor. -type FreeC f = Free (Coyoneda f) - --- | The `MonadFree` class provides the `wrap` function, which lifts --- | actions described by a generating functor into a monad. --- | --- | The canonical instance of `MonadFree f` is `Free f`. -class MonadFree :: forall k. (Type -> Type) -> (k -> Type) -> Constraint -class MonadFree f m where - wrap :: forall a. f (m a) -> m a - -instance functorFree :: Functor f => Functor (Free f) where - map f (Pure a) = Pure (f a) - map f g = liftA1 f g - -instance applyFree :: Functor f => Apply (Free f) where - apply = ap - -instance applicativeFree :: Functor f => Applicative (Free f) where - pure = Pure - -instance bindFree :: Functor f => Bind (Free f) where - bind (Gosub g) k = runExists (\(GosubF v) -> gosub v.a (\x -> gosub (\_ -> v.f x) k)) g - bind a k = gosub (\_ -> a) k - -instance monadFree :: Functor f => Monad (Free f) - -instance monadTransFree :: MonadTrans Free where - lift f = Free $ do - a <- f - pure (Pure a) - -instance monadFreeFree :: Functor f => MonadFree f (Free f) where - wrap = Free - -instance monadRecFree :: Functor f => MonadRec (Free f) where - tailRecM f u = f u >>= \o -> case o of - Loop a -> tailRecM f a - Done b -> pure b - --- | Lift an action described by the generating functor `f` into the monad `m` --- | (usually `Free f`). -liftF :: forall f m a. Functor f => Monad m => MonadFree f m => f a -> m a -liftF = wrap <<< map pure - --- | Lift an action described by the generating type constructor `f` into --- | `Free g` using `Inject` to go from `f` to `g`. -liftFI :: forall f g a. Inject f g => Functor g => f a -> Free g a -liftFI fa = liftF (inj fa :: g a) - --- | Lift an action described by the generating type constructor `f` into the monad --- | `FreeC f`. -liftFC :: forall f a. f a -> FreeC f a -liftFC = liftF <<< liftCoyoneda - --- | Lift an action described by the generating type constructor `f` into --- | `FreeC g` using `Inject` to go from `f` to `g`. -liftFCI :: forall f g a. Inject f g => f a -> FreeC g a -liftFCI fa = liftFC (inj fa :: g a) - --- | An implementation of `pure` for the `Free` monad. -pureF :: forall f a. Applicative f => a -> Free f a -pureF = Free <<< pure <<< Pure - --- | An implementation of `pure` for the `FreeC` monad. -pureFC :: forall f a. Applicative f => a -> FreeC f a -pureFC = liftFC <<< pure - --- | Use a natural transformation to change the generating functor of a `Free` monad. -mapF :: forall f g a. Functor f => Functor g => Natural f g -> Free f a -> Free g a -mapF t fa = either (\s -> Free <<< t $ mapF t <$> s) Pure (resume fa) - --- | Use a natural transformation to change the generating type constructor of --- | a `FreeC` monad to another functor. -mapFC :: forall f g a. Functor g => Natural f g -> FreeC f a -> Free g a -mapFC t = mapF (lowerCoyoneda <<< hoistCoyoneda t) - --- | Use a natural transformation to interpret one `Free` monad as another. -bindF :: forall f g a. Functor f => Functor g => Free f a -> Natural f (Free g) -> Free g a -bindF fa t = either (\m -> t m >>= \fa' -> bindF fa' t) Pure (resume fa) - --- | Use a natural transformation to interpret a `FreeC` monad as a different --- | `Free` monad. -bindFC :: forall f g a. Functor g => FreeC f a -> Natural f (Free g) -> Free g a -bindFC fa t = bindF fa (lowerCoyoneda <<< hoistCoyoneda t) - --- | Embed computations in one `Free` monad as computations in the `Free` monad for --- | a coproduct type constructor. --- | --- | This construction allows us to write computations which are polymorphic in the --- | particular `Free` monad we use, allowing us to extend the functionality of --- | our monad later. -injF :: forall f g a. Functor f => Functor g => Inject f g => Free f a -> Free g a -injF = mapF inj - --- | Embed computations in one `FreeC` monad as computations in the `FreeC` monad for --- | a coproduct type constructor. --- | --- | This construction allows us to write computations which are polymorphic in the --- | particular `Free` monad we use, allowing us to extend the functionality of --- | our monad later. -injFC :: forall f g a. Inject f g => FreeC f a -> FreeC g a -injFC = mapF (hoistCoyoneda inj) - -resume :: forall f a. Functor f => Free f a -> Either (f (Free f a)) a -resume f = case f of - Pure x -> Right x - Free x -> Left x - g -> unsafePartial case resumeGosub g of - Left l -> Left l - Right r -> resume r - where - resumeGosub :: Partial => Free f a -> Either (f (Free f a)) (Free f a) - resumeGosub (Gosub g) = - runExists - ( \(GosubF v) -> case v.a unit of - Pure a -> Right (v.f a) - Free t -> Left ((\h -> h >>= v.f) <$> t) - Gosub h -> runExists (\(GosubF w) -> Right (w.a unit >>= (\z -> w.f z >>= v.f))) h - ) - g - --- | `runFree` runs a computation of type `Free f a`, using a function which unwraps a single layer of --- | the functor `f` at a time. -runFree :: forall f a. Functor f => (f (Free f a) -> Free f a) -> Free f a -> a -runFree fn = unwrap <<< runFreeM (Identity <<< fn) - --- | `runFreeM` runs a compuation of type `Free f a` in any `Monad` which supports tail recursion. --- | See the `MonadRec` type class for more details. -runFreeM :: forall f m a. Functor f => MonadRec m => (f (Free f a) -> m (Free f a)) -> Free f a -> m a -runFreeM fn = tailRecM \f -> - case resume f of - Left fs -> Loop <$> fn fs - Right a -> pure (Done a) - --- | `runFreeC` is the equivalent of `runFree` for type constructors transformed with `Coyoneda`, --- | hence we have no requirement that `f` be a `Functor`. -runFreeC :: forall f a. (forall b. f b -> b) -> FreeC f a -> a -runFreeC nat = unwrap <<< runFreeCM (Identity <<< nat) - --- | `runFreeCM` is the equivalent of `runFreeM` for type constructors transformed with `Coyoneda`, --- | hence we have no requirement that `f` be a `Functor`. -runFreeCM :: forall f m a. (MonadRec m) => Natural f m -> FreeC f a -> m a -runFreeCM nat = runFreeM (lowerCoyoneda <<< hoistCoyoneda nat) diff --git a/benchmark/src/Benchmark/Freef686f5f.purs b/benchmark/src/Benchmark/Freef686f5f.purs deleted file mode 100644 index 39ed5d6..0000000 --- a/benchmark/src/Benchmark/Freef686f5f.purs +++ /dev/null @@ -1,243 +0,0 @@ -module Benchmark.Freef686f5f - ( Free - , suspendF - , wrap - , liftF - , hoistFree - , foldFree - , substFree - , runFree - , runFreeM - , resume - , resume' - ) where - -import Prelude - -import Control.Apply (lift2) -import Control.Monad.Rec.Class (class MonadRec, Step(..), tailRecM) -import Control.Monad.Trans.Class (class MonadTrans) -import Data.CatList (CatList, empty, snoc, uncons) -import Data.Either (Either(..)) -import Data.Eq (class Eq1, eq1) -import Data.Foldable (class Foldable, foldMap, foldl, foldr) -import Data.Maybe (Maybe(..)) -import Data.Ord (class Ord1, compare1) -import Data.Traversable (class Traversable, traverse) -import Data.Tuple (Tuple(..)) -import Unsafe.Coerce (unsafeCoerce) - --- | The free monad for a type constructor `f`. --- | --- | Implemented in the spirit of [Reflection without Remorse](http://okmij.org/ftp/Haskell/zseq.pdf), --- | the free monad is represented using a sequential data structure in --- | order to overcome the quadratic complexity of left-associated binds --- | and traversal through the free monad structure. -data Free f a = Free (FreeView f Val Val) (CatList (ExpF f)) - -newtype ExpF f = ExpF (Val -> Free f Val) - -data FreeView f a b = Return a | Bind (f b) (b -> Free f a) - -data Val - -instance eqFree :: (Functor f, Eq1 f, Eq a) => Eq (Free f a) where - eq x y = case resume x, resume y of - Left fa, Left fb -> eq1 fa fb - Right a, Right b -> a == b - _, _ -> false - -instance eq1Free :: (Functor f, Eq1 f) => Eq1 (Free f) where - eq1 = eq - -instance ordFree :: (Functor f, Ord1 f, Ord a) => Ord (Free f a) where - compare x y = case resume x, resume y of - Left fa, Left fb -> compare1 fa fb - Left _, _ -> LT - _, Left _ -> GT - Right a, Right b -> compare a b - -instance ord1Free :: (Functor f, Ord1 f, Ord a) => Ord1 (Free f) where - compare1 = compare - -instance freeFunctor :: Functor (Free f) where - map k f = pure <<< k =<< f - -instance freeBind :: Bind (Free f) where - bind (Free v s) k = Free v (snoc s (ExpF (unsafeCoerceBind k))) - where - unsafeCoerceBind :: forall a b. (a -> Free f b) -> Val -> Free f Val - unsafeCoerceBind = unsafeCoerce - -instance freeApplicative :: Applicative (Free f) where - pure = fromView <<< Return - -instance freeApply :: Apply (Free f) where - apply = ap - -instance freeMonad :: Monad (Free f) - -instance freeMonadTrans :: MonadTrans Free where - lift = liftF - -instance freeMonadRec :: MonadRec (Free f) where - tailRecM k a = k a >>= case _ of - Loop b -> tailRecM k b - Done r -> pure r - -instance foldableFree :: (Functor f, Foldable f) => Foldable (Free f) where - foldMap f = go - where - go = resume >>> case _ of - Left fa -> foldMap go fa - Right a -> f a - foldl f = go - where - go r = resume >>> case _ of - Left fa -> foldl go r fa - Right a -> f r a - foldr f = go - where - go r = resume >>> case _ of - Left fa -> foldr (flip go) r fa - Right a -> f a r - -instance traversableFree :: Traversable f => Traversable (Free f) where - traverse f = go - where - go = resume >>> case _ of - Left fa -> join <<< liftF <$> traverse go fa - Right a -> pure <$> f a - sequence tma = traverse identity tma - -instance semigroupFree :: Semigroup a => Semigroup (Free f a) where - append = lift2 append - -instance monoidFree :: Monoid a => Monoid (Free f a) where - mempty = pure mempty - --- | Lift an impure value described by the generating type constructor `f` into --- | the free monad. -liftF :: forall f. f ~> Free f -liftF f = fromView (Bind (unsafeCoerceF f) (pure <<< unsafeCoerceVal)) - where - unsafeCoerceF :: forall a. f a -> f Val - unsafeCoerceF = unsafeCoerce - - unsafeCoerceVal :: forall a. Val -> a - unsafeCoerceVal = unsafeCoerce - --- | Add a layer. -wrap :: forall f a. f (Free f a) -> Free f a -wrap f = fromView (Bind (unsafeCoerceF f) unsafeCoerceVal) - where - unsafeCoerceF :: forall b. f (Free f b) -> f Val - unsafeCoerceF = unsafeCoerce - - unsafeCoerceVal :: forall b. Val -> Free f b - unsafeCoerceVal = unsafeCoerce - --- | Suspend a value given the applicative functor `f` into the free monad. -suspendF :: forall f. Applicative f => Free f ~> Free f -suspendF f = wrap (pure f) - --- | Use a natural transformation to change the generating type constructor of a --- | free monad. -hoistFree :: forall f g. (f ~> g) -> Free f ~> Free g -hoistFree k = substFree (liftF <<< k) - --- | Run a free monad with a natural transformation from the type constructor `f` --- | to the tail-recursive monad `m`. See the `MonadRec` type class for more --- | details. -foldFree :: forall f m. MonadRec m => (f ~> m) -> Free f ~> m -foldFree k = tailRecM go - where - go :: forall a. Free f a -> m (Step (Free f a) a) - go f = case toView f of - Return a -> Done <$> pure a - Bind g i -> (Loop <<< i) <$> k g - --- | Like `foldFree`, but for folding into some other Free monad without the --- | overhead that `MonadRec` incurs. -substFree :: forall f g. (f ~> Free g) -> Free f ~> Free g -substFree k = go - where - go :: Free f ~> Free g - go f = case toView f of - Return a -> pure a - Bind g i -> k g >>= go <$> i - --- | Run a free monad with a function that unwraps a single layer of the functor --- | `f` at a time. -runFree :: forall f a. Functor f => (f (Free f a) -> Free f a) -> Free f a -> a -runFree k = go - where - go :: Free f a -> a - go f = case toView f of - Return a -> a - Bind g i -> go (k (i <$> g)) - --- | Run a free monad with a function mapping a functor `f` to a tail-recursive --- | monad `m`. See the `MonadRec` type class for more details. -runFreeM - :: forall f m a - . Functor f - => MonadRec m - => (f (Free f a) -> m (Free f a)) - -> Free f a - -> m a -runFreeM k = tailRecM go - where - go :: Free f a -> m (Step (Free f a) a) - go f = case toView f of - Return a -> Done <$> pure a - Bind g i -> Loop <$> k (i <$> g) - --- | Unwraps a single layer of the functor `f`. -resume - :: forall f a - . Functor f - => Free f a - -> Either (f (Free f a)) a -resume = resume' (\g i -> Left (i <$> g)) Right - --- | Unwraps a single layer of `f`, providing the continuation. -resume' - :: forall f a r - . (forall b. f b -> (b -> Free f a) -> r) - -> (a -> r) - -> Free f a - -> r -resume' k j f = case toView f of - Return a -> j a - Bind g i -> k g i - -fromView :: forall f a. FreeView f a Val -> Free f a -fromView f = Free (unsafeCoerceFreeView f) empty - where - unsafeCoerceFreeView :: FreeView f a Val -> FreeView f Val Val - unsafeCoerceFreeView = unsafeCoerce - -toView :: forall f a. Free f a -> FreeView f a Val -toView (Free v s) = - case v of - Return a -> - case uncons s of - Nothing -> - Return (unsafeCoerceVal a) - Just (Tuple h t) -> - toView (unsafeCoerceFree (concatF ((runExpF h) a) t)) - Bind f k -> - Bind f (\a -> unsafeCoerceFree (concatF (k a) s)) - where - concatF :: Free f Val -> CatList (ExpF f) -> Free f Val - concatF (Free v' l) r = Free v' (l <> r) - - runExpF :: ExpF f -> (Val -> Free f Val) - runExpF (ExpF k) = k - - unsafeCoerceFree :: Free f Val -> Free f a - unsafeCoerceFree = unsafeCoerce - - unsafeCoerceVal :: Val -> a - unsafeCoerceVal = unsafeCoerce diff --git a/benchmark/src/Benchmark/Harness.purs b/benchmark/src/Benchmark/Harness.purs deleted file mode 100644 index c7efd3b..0000000 --- a/benchmark/src/Benchmark/Harness.purs +++ /dev/null @@ -1,87 +0,0 @@ -module Benchmark.Harness (Benchmark, benchFn, mkBenchmark, runSuite) where - -import Prelude - -import Data.Argonaut.Core (stringify) -import Data.Argonaut.Encode (encodeJson) -import Data.Array (replicate) -import Data.Foldable (foldl) -import Data.Int (toNumber) -import Data.Number (sqrt) -import Data.Traversable (traverse) -import Effect (Effect) -import Effect.Console (error, log) -import Performance.Minibench (benchWith') - -type Benchmark = - { slug :: String - , title :: String - , sizes :: Array Int - , sizeInterpretation :: String - , inputsPerSize :: Int - , gen :: Int -> Array Number - , functions :: Array { name :: String, fn :: Array Number -> Number } - } - -mkBenchmark :: Benchmark -> Benchmark -mkBenchmark = identity - -benchFn :: String -> (Array Number -> Number) -> { name :: String, fn :: Array Number -> Number } -benchFn name fn = { name, fn } - --- Keep input generation outside timing and batch mapping inside it. -runSuite :: Array Benchmark -> Effect Unit -runSuite suite = do - reports <- traverse runBenchmark suite - log (stringify (encodeJson reports)) - where - runBenchmark benchmark = do - measurements <- traverse (measureSize benchmark) benchmark.sizes - pure - { slug: benchmark.slug - , title: benchmark.title - , sizeInterpretation: benchmark.sizeInterpretation - , unit: "seconds per input batch" - , inputsPerSize: benchmark.inputsPerSize - , measurements - } - - measureSize benchmark size = do - error (benchmark.slug <> ": n=" <> show size) - let - inputs = map (\_ -> benchmark.gen size) (replicate benchmark.inputsPerSize unit) - sampleCount = if size <= 5 then 1000 else if size <= 1000 then 100 else 5 - warmupCount = if size <= 1000 then 100 else 1 - iterationsPerSample = if size <= 5 then 100 else 1 - repetitions = replicate iterationsPerSample unit - results <- traverse - ( \fn -> do - let - runBatch _ = - if iterationsPerSample == 1 then - map fn.fn inputs - else - foldl (\_ _ -> map fn.fn inputs) [] repetitions - -- Let the runtime optimize the small cases before collecting statistics. - _ <- benchWith' warmupCount runBatch - measured <- benchWith' sampleCount runBatch - let - divisor = 1.0e9 * toNumber iterationsPerSample - mean = measured.mean / divisor - deviation = measured.stdDev / divisor - sem = deviation / sqrt (toNumber sampleCount) - pure - { name: fn.name - , sampleCount - , warmupCount - , iterationsPerSample - , mean - , deviation - , sem - , relativeStandardErrorPercent: 100.0 * sem / mean - , min: measured.min / divisor - , max: measured.max / divisor - } - ) - benchmark.functions - pure { size, results } diff --git a/benchmark/src/Benchmark/Main.purs b/benchmark/src/Benchmark/Main.purs deleted file mode 100644 index ba3298d..0000000 --- a/benchmark/src/Benchmark/Main.purs +++ /dev/null @@ -1,141 +0,0 @@ -module Benchmark.Main (main) where - -import Prelude - -import Benchmark.Freef686f5f as Freef686f5f -import Benchmark.Harness (Benchmark, benchFn, mkBenchmark, runSuite) -import Benchmark.Trampoline0df59c5 as Trampoline0df59c5 -import Benchmark.Trampolinef686f5f as Trampolinef686f5f -import Data.Array (replicate) -import Data.Foldable (foldl) -import Effect (Effect) - -main :: Effect Unit -main = - runSuite - [ leftBindSmallBenchmark - , rightBindSmallBenchmark - , leftBindLargeBenchmark - , rightBindLargeBenchmark - ] - -leftBindSmallBenchmark :: Benchmark -leftBindSmallBenchmark = - mkBenchmark - { slug: "left-bind-small" - , title: "Left associated binds (small - " <> show inputsPerSize <> " inputs per size)" - , sizes: [ 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000 ] - , sizeInterpretation: "Number of binds" - , inputsPerSize: inputsPerSize - , gen: \n -> replicate n 0.0 - , functions: - [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) - , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) - ] - } - where - inputsPerSize :: Int - inputsPerSize = 100 - - binds :: Array Number -> Trampolinef686f5f.Trampoline Number - binds as = foldl (\b a -> b >>= const (gen a)) (gen 0.0) as - - gen :: forall a. a -> Trampolinef686f5f.Trampoline a - gen = Freef686f5f.suspendF <<< Trampolinef686f5f.done - - bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number - bindsT as = foldl (\b a -> b >>= const (genT a)) (genT 0.0) as - - genT :: forall a. a -> Trampoline0df59c5.Trampoline a - genT = Trampoline0df59c5.suspend <<< Trampoline0df59c5.done - -rightBindSmallBenchmark :: Benchmark -rightBindSmallBenchmark = - mkBenchmark - { slug: "right-bind-small" - , title: "Right associated binds (small - " <> show inputsPerSize <> " inputs per size)" - , sizes: [ 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 250, 500, 1000 ] - , sizeInterpretation: "Number of binds" - , inputsPerSize: inputsPerSize - , gen: \n -> replicate n 0.0 - , functions: - [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) - , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) - ] - } - where - inputsPerSize :: Int - inputsPerSize = 100 - - binds :: Array Number -> Trampolinef686f5f.Trampoline Number - binds as = foldl (\b a -> gen a >>= const b) (gen 0.0) as - - gen :: forall a. a -> Trampolinef686f5f.Trampoline a - gen = Freef686f5f.suspendF <<< Trampolinef686f5f.done - - bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number - bindsT as = foldl (\b a -> genT a >>= const b) (genT 0.0) as - - genT :: forall a. a -> Trampoline0df59c5.Trampoline a - genT = Trampoline0df59c5.suspend <<< Trampoline0df59c5.done - -leftBindLargeBenchmark :: Benchmark -leftBindLargeBenchmark = - mkBenchmark - { slug: "left-bind-large" - , title: "Left associated binds (large - " <> show inputsPerSize <> " input per size)" - , sizes: [ 1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) - , sizeInterpretation: "Number of binds" - , inputsPerSize: inputsPerSize - , gen: \n -> replicate n 0.0 - , functions: - [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) - -- Disabled due to stack overflow - -- , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< _bindsT) - ] - } - where - inputsPerSize :: Int - inputsPerSize = 1 - - binds :: Array Number -> Trampolinef686f5f.Trampoline Number - binds as = foldl (\b a -> b >>= const (gen a)) (gen 0.0) as - - gen :: forall a. a -> Trampolinef686f5f.Trampoline a - gen = Freef686f5f.suspendF <<< Trampolinef686f5f.done - - _bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number - _bindsT as = foldl (\b a -> b >>= const (genT a)) (genT 0.0) as - - genT :: forall a. a -> Trampoline0df59c5.Trampoline a - genT = Trampoline0df59c5.suspend <<< Trampoline0df59c5.done - -rightBindLargeBenchmark :: Benchmark -rightBindLargeBenchmark = - mkBenchmark - { slug: "right-bind-large" - , title: "Right associated binds (large - " <> show inputsPerSize <> " input per size)" - , sizes: [ 1, 5, 10, 15, 20, 25, 30 ] <#> (_ * 100_000) - , sizeInterpretation: "Number of binds" - , inputsPerSize: inputsPerSize - , gen: \n -> replicate n 0.0 - , functions: - [ benchFn "Free v5.2.0" (Trampolinef686f5f.runTrampoline <<< binds) - , benchFn "Free v0.6.1" (Trampoline0df59c5.runTrampoline <<< bindsT) - ] - } - where - inputsPerSize :: Int - inputsPerSize = 1 - - binds :: Array Number -> Trampolinef686f5f.Trampoline Number - binds as = foldl (\b a -> gen a >>= const b) (gen 0.0) as - - gen :: forall a. a -> Trampolinef686f5f.Trampoline a - gen = Freef686f5f.suspendF <<< Trampolinef686f5f.done - - bindsT :: Array Number -> Trampoline0df59c5.Trampoline Number - bindsT as = foldl (\b a -> genT a >>= const b) (genT 0.0) as - - genT :: forall a. a -> Trampoline0df59c5.Trampoline a - genT = Trampoline0df59c5.suspend <<< Trampoline0df59c5.done diff --git a/benchmark/src/Benchmark/Trampoline0df59c5.purs b/benchmark/src/Benchmark/Trampoline0df59c5.purs deleted file mode 100644 index dfeac53..0000000 --- a/benchmark/src/Benchmark/Trampoline0df59c5.purs +++ /dev/null @@ -1,43 +0,0 @@ --- | A _trampoline_ monad, which can be used at the bottom of --- | a monad transformer stack to avoid stack overflows in large --- | monadic computations. - -module Benchmark.Trampoline0df59c5 - ( Trampoline - , done - , suspend - , delay' - , delay - , runTrampoline - ) where - -import Prelude - -import Benchmark.Free0df59c5 (Free(..), runFree) -import Data.Lazy (Lazy, defer, force) - --- | The `Trampoline` monad --- | --- | A computation of type `Trampoline a` consists of zero or more lazy --- | suspensions before a value is returned. -type Trampoline = Free Lazy - --- | Return a value immediately -done :: forall a. a -> Trampoline a -done = pure - --- | Suspend a computation by one step. -suspend :: forall a. Trampoline a -> Trampoline a -suspend t = Free (defer (const t)) - --- | Use the `Trampoline` monad to represent a `Lazy` value. -delay' :: forall a. Lazy a -> Trampoline a -delay' a = Free (done <$> a) - --- | Use the `Trampoline` monad to represent the delayed evaluation of a value. -delay :: forall a. (Unit -> a) -> Trampoline a -delay = delay' <<< defer - --- | Run a computation in the `Trampoline` monad. -runTrampoline :: forall a. Trampoline a -> a -runTrampoline = runFree force diff --git a/benchmark/src/Benchmark/Trampolinef686f5f.purs b/benchmark/src/Benchmark/Trampolinef686f5f.purs deleted file mode 100644 index 90dd73c..0000000 --- a/benchmark/src/Benchmark/Trampolinef686f5f.purs +++ /dev/null @@ -1,31 +0,0 @@ --- | A _trampoline_ monad, which can be used at the bottom of --- | a monad transformer stack to avoid stack overflows in large --- | monadic computations. -module Benchmark.Trampolinef686f5f - ( Trampoline - , done - , delay - , runTrampoline - ) where - -import Prelude - -import Benchmark.Freef686f5f (Free, liftF, runFree) - --- | The `Trampoline` monad --- | --- | A computation of type `Trampoline a` consists of zero or more lazy --- | suspensions before a value is returned. -type Trampoline = Free ((->) Unit) - --- | Return a value immediately -done :: forall a. a -> Trampoline a -done = pure - --- | Use the `Trampoline` monad to represent the delayed evaluation of a value. -delay :: forall a. (Unit -> a) -> Trampoline a -delay = liftF - --- | Run a computation in the `Trampoline` monad. -runTrampoline :: forall a. Trampoline a -> a -runTrampoline = runFree (_ $ unit) diff --git a/package.json b/package.json index b25c609..e577dda 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,9 @@ "private": true, "scripts": { "build": "spago build -p free", - "build:benchmark": "spago build -p free-benchmark", "test": "spago test -p free", - "test:benchmark": "NODE_OPTIONS='--expose-gc --max-old-space-size=2560' spago run -p free-benchmark", - "format": "purs-tidy format-in-place src test benchmark/src && oxfmt --write .", - "format:check": "purs-tidy check src test benchmark/src && oxfmt --check ." + "format": "purs-tidy format-in-place src test && oxfmt --write .", + "format:check": "purs-tidy check src test && oxfmt --check ." }, "devDependencies": { "oxfmt": "^0.73.0",