@reicek/neataptic-ts 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/agents/boundary-mapper.agent.md +31 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +31 -0
- package/.github/agents/solid-split.agent.md +143 -0
- package/.github/copilot-instructions.md +119 -0
- package/.github/skills/solid-split-playbook/SKILL.md +220 -0
- package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
- package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
- package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
- package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
- package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
- package/package.json +7 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
- package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
- package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
- package/plans/Memory_Optimization.md +3 -3
- package/plans/README.md +63 -0
- package/plans/Roadmap.md +15 -3
- package/plans/asciiMaze_SOLID_split.done.md +130 -0
- package/plans/flappy_bird_SOLID_split.done.md +67 -0
- package/scripts/analyze-trace.ts +590 -0
- package/scripts/assets/theme.css +221 -34
- package/scripts/copy-examples.mjs +9 -5
- package/scripts/export-onnx.mjs +3 -3
- package/scripts/generate-bench-tables.mjs +10 -10
- package/scripts/generate-bench-tables.ts +10 -10
- package/scripts/generate-docs.ts +1415 -449
- package/scripts/render-docs-html.ts +15 -8
- package/src/README.md +127 -222
- package/src/architecture/README.md +117 -184
- package/src/architecture/architect.ts +6 -0
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +49 -31
- package/src/architecture/network/activate/README.md +77 -77
- package/src/architecture/network/connect/README.md +15 -13
- package/src/architecture/network/deterministic/README.md +7 -7
- package/src/architecture/network/evolve/README.md +44 -44
- package/src/architecture/network/gating/README.md +20 -20
- package/src/architecture/network/genetic/README.md +51 -51
- package/src/architecture/network/mutate/README.md +97 -97
- package/src/architecture/network/network.types.ts +39 -0
- package/src/architecture/network/onnx/README.md +264 -264
- package/src/architecture/network/prune/README.md +39 -39
- package/src/architecture/network/remove/README.md +26 -26
- package/src/architecture/network/serialize/README.md +56 -56
- package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
- package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
- package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
- package/src/architecture/network/slab/README.md +61 -61
- package/src/architecture/network/standalone/README.md +24 -24
- package/src/architecture/network/stats/README.md +9 -9
- package/src/architecture/network/topology/README.md +46 -46
- package/src/architecture/network/training/README.md +21 -21
- package/src/architecture/network.ts +114 -10
- package/src/methods/README.md +9 -87
- package/src/multithreading/README.md +8 -77
- package/src/multithreading/workers/README.md +2 -2
- package/src/multithreading/workers/browser/README.md +0 -6
- package/src/multithreading/workers/node/README.md +0 -3
- package/src/neat/README.md +623 -568
- package/src/neat/neat.evolve.population.utils.ts +29 -5
- package/src/neat/neat.helpers.ts +16 -0
- package/src/neat/neat.topology-intent.utils.ts +160 -0
- package/src/utils/README.md +18 -18
- package/test/examples/asciiMaze/README.md +59 -59
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
- package/test/examples/asciiMaze/browser-entry/README.md +196 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
- package/test/examples/asciiMaze/browser-entry.ts +10 -576
- package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
- package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
- package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
- package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
- package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
- package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
- package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
- package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
- package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
- package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
- package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
- package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
- package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
- package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
- package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
- package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
- package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
- package/test/examples/asciiMaze/fitness.ts +2 -2
- package/test/examples/asciiMaze/fitness.types.ts +65 -0
- package/test/examples/asciiMaze/interfaces.ts +64 -1352
- package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
- package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
- package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
- package/test/examples/flappy_bird/README.md +193 -88
- package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
- package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
- package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
- package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
- package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
- package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
- package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
- package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
- package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
- package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
- package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
- package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
- package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
- package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
- package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
- package/test/examples/flappy_bird/constants/README.md +1163 -0
- package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
- package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
- package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
- package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
- package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
- package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
- package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/constants/constants.ts +6 -0
- package/test/examples/flappy_bird/environment/README.md +182 -0
- package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
- package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
- package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
- package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
- package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
- package/test/examples/flappy_bird/evaluation/README.md +155 -0
- package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
- package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
- package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
- package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
- package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
- package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
- package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
- package/test/examples/flappy_bird/index.ts +8 -2
- package/test/examples/flappy_bird/rng.ts +10 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
- package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
- package/test/examples/flappy_bird/trainer/README.md +676 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
- package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
- package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
- package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
- package/test/neat/neat.topology-intent.test.ts +129 -0
- package/test/network/network.topology-intent.test.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
- package/test/examples/flappy_bird/environment/environment.ts +0 -7
- package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
- package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
|
@@ -3,12 +3,22 @@ import type {
|
|
|
3
3
|
FlappyRolloutOptions,
|
|
4
4
|
} from '../flappyEvaluation';
|
|
5
5
|
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Network shape expected by the Flappy trainer.
|
|
8
|
+
*
|
|
9
|
+
* The trainer only needs the evaluation-facing subset of a full network plus an
|
|
10
|
+
* optional score field used by staged ranking helpers.
|
|
11
|
+
*/
|
|
7
12
|
export interface FlappyTrainerNetwork extends FlappyNetworkLike {
|
|
8
13
|
score?: number;
|
|
9
14
|
}
|
|
10
15
|
|
|
11
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Local typed view for population-level fitness mode used by this trainer.
|
|
18
|
+
*
|
|
19
|
+
* This is intentionally narrower than the full `Neat` runtime API. The trainer
|
|
20
|
+
* documents only the methods and mutable options it actually depends on.
|
|
21
|
+
*/
|
|
12
22
|
export interface FlappyTrainerNeatController {
|
|
13
23
|
generation: number;
|
|
14
24
|
options: {
|
|
@@ -21,7 +31,13 @@ export interface FlappyTrainerNeatController {
|
|
|
21
31
|
restoreRNGState(seed: number): void;
|
|
22
32
|
}
|
|
23
33
|
|
|
24
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Compact generation report used for training logs.
|
|
36
|
+
*
|
|
37
|
+
* The report is shaped for longitudinal monitoring rather than raw storage. It
|
|
38
|
+
* collects the distribution and best-run details needed to judge whether a
|
|
39
|
+
* generation improved robustly.
|
|
40
|
+
*/
|
|
25
41
|
export interface FlappyGenerationReport {
|
|
26
42
|
generationIndex: number;
|
|
27
43
|
difficultyScale: number;
|
|
@@ -41,13 +57,23 @@ export interface FlappyGenerationReport {
|
|
|
41
57
|
bestFramesSurvived: number;
|
|
42
58
|
}
|
|
43
59
|
|
|
44
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Trainer runtime state shared by orchestration helpers.
|
|
62
|
+
*
|
|
63
|
+
* Only mutable cross-step values live here: stop intent and the most recent
|
|
64
|
+
* generation report.
|
|
65
|
+
*/
|
|
45
66
|
export interface FlappyTrainerRuntimeState {
|
|
46
67
|
shouldStop: boolean;
|
|
47
68
|
latestGenerationReport?: FlappyGenerationReport;
|
|
48
69
|
}
|
|
49
70
|
|
|
50
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Immutable trainer setup values.
|
|
73
|
+
*
|
|
74
|
+
* These values define the static training shape before runtime state and staged
|
|
75
|
+
* evaluation are attached.
|
|
76
|
+
*/
|
|
51
77
|
export interface FlappyTrainerSetup {
|
|
52
78
|
inputSize: number;
|
|
53
79
|
outputSize: number;
|
|
@@ -55,7 +81,13 @@ export interface FlappyTrainerSetup {
|
|
|
55
81
|
elitismCount: number;
|
|
56
82
|
}
|
|
57
83
|
|
|
58
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Generation-level rollout plans for staged evaluation.
|
|
86
|
+
*
|
|
87
|
+
* Each generation resolves one plan that answers three questions: how strong is
|
|
88
|
+
* the current mutation schedule, which shared seeds belong to each stage, and
|
|
89
|
+
* what rollout budget each stage is allowed to spend.
|
|
90
|
+
*/
|
|
59
91
|
export interface FlappyGenerationEvaluationPlan {
|
|
60
92
|
generationIndex: number;
|
|
61
93
|
mutationRate: number;
|
|
@@ -69,7 +101,12 @@ export interface FlappyGenerationEvaluationPlan {
|
|
|
69
101
|
reevaluationRolloutOptions: FlappyRolloutOptions;
|
|
70
102
|
}
|
|
71
103
|
|
|
72
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Score carrier used for deterministic ordering helpers.
|
|
106
|
+
*
|
|
107
|
+
* Wrapping a genome together with its score makes ranking utilities easier to
|
|
108
|
+
* write and keeps tie-breaking logic explicit.
|
|
109
|
+
*/
|
|
73
110
|
export interface ScoredGenomeEntry {
|
|
74
111
|
genome: FlappyTrainerNetwork;
|
|
75
112
|
score: number;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import Neat from '../../src/neat';
|
|
2
|
+
import Network from '../../src/architecture/network';
|
|
3
|
+
import * as methods from '../../src/methods/methods';
|
|
4
|
+
|
|
5
|
+
type FastSlabPredicate = (training: boolean) => boolean;
|
|
6
|
+
|
|
7
|
+
const getFastSlabPredicate = (network: Network): FastSlabPredicate => {
|
|
8
|
+
return Reflect.get(network, '_canUseFastSlab') as FastSlabPredicate;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
describe('Neat topology intent', () => {
|
|
12
|
+
it('promotes fresh FFW populations to feed-forward intent', () => {
|
|
13
|
+
// Arrange
|
|
14
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
15
|
+
popsize: 1,
|
|
16
|
+
mutation: methods.mutation.FFW,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Act
|
|
20
|
+
const topologyIntent = neat.population[0].getTopologyIntent();
|
|
21
|
+
|
|
22
|
+
// Assert
|
|
23
|
+
expect(topologyIntent).toBe('feed-forward');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('promotes nested FFW mutation wrappers to feed-forward intent', () => {
|
|
27
|
+
// Arrange
|
|
28
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
29
|
+
popsize: 1,
|
|
30
|
+
mutation: [methods.mutation.FFW],
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Act
|
|
34
|
+
const topologyIntent = neat.population[0].getTopologyIntent();
|
|
35
|
+
|
|
36
|
+
// Assert
|
|
37
|
+
expect(topologyIntent).toBe('feed-forward');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('restores fast slab eligibility for fresh FFW populations after activation prepares topology', () => {
|
|
41
|
+
// Arrange
|
|
42
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
43
|
+
popsize: 1,
|
|
44
|
+
mutation: methods.mutation.FFW,
|
|
45
|
+
});
|
|
46
|
+
const genome = neat.population[0];
|
|
47
|
+
genome.activate([0, 0]);
|
|
48
|
+
|
|
49
|
+
// Act
|
|
50
|
+
const canUseFastSlab = getFastSlabPredicate(genome).call(genome, false);
|
|
51
|
+
|
|
52
|
+
// Assert
|
|
53
|
+
expect(canUseFastSlab).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('promotes eligible seed networks to feed-forward intent when FFW is configured', () => {
|
|
57
|
+
// Arrange
|
|
58
|
+
const seedNetwork = new Network(2, 1);
|
|
59
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
60
|
+
popsize: 1,
|
|
61
|
+
network: seedNetwork,
|
|
62
|
+
mutation: methods.mutation.FFW,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Act
|
|
66
|
+
const topologyIntent = neat.population[0].getTopologyIntent();
|
|
67
|
+
|
|
68
|
+
// Assert
|
|
69
|
+
expect(topologyIntent).toBe('feed-forward');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('does not promote recurrent seed networks to feed-forward intent', () => {
|
|
73
|
+
// Arrange
|
|
74
|
+
const seedNetwork = new Network(2, 1);
|
|
75
|
+
const outputNode = seedNetwork.nodes.find((node) => node.type === 'output');
|
|
76
|
+
if (!outputNode) {
|
|
77
|
+
throw new Error('Expected an output node for recurrent seed setup');
|
|
78
|
+
}
|
|
79
|
+
seedNetwork.connect(outputNode, outputNode, 1);
|
|
80
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
81
|
+
popsize: 1,
|
|
82
|
+
network: seedNetwork,
|
|
83
|
+
mutation: methods.mutation.FFW,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Act
|
|
87
|
+
const topologyIntent = neat.population[0].getTopologyIntent();
|
|
88
|
+
|
|
89
|
+
// Assert
|
|
90
|
+
expect(topologyIntent).toBe('unconstrained');
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('promotes fresh provenance genomes to feed-forward intent when FFW is configured', async () => {
|
|
94
|
+
// Arrange
|
|
95
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
96
|
+
popsize: 2,
|
|
97
|
+
provenance: 1,
|
|
98
|
+
mutation: methods.mutation.FFW,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Act
|
|
102
|
+
await neat.evolve();
|
|
103
|
+
const topologyIntent = neat.population[0].getTopologyIntent();
|
|
104
|
+
|
|
105
|
+
// Assert
|
|
106
|
+
expect(topologyIntent).toBe('feed-forward');
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('restores fast slab eligibility for fresh provenance genomes after activation prepares topology', async () => {
|
|
110
|
+
// Arrange
|
|
111
|
+
const neat = new Neat(2, 1, () => 0, {
|
|
112
|
+
popsize: 2,
|
|
113
|
+
provenance: 1,
|
|
114
|
+
mutation: methods.mutation.FFW,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Act
|
|
118
|
+
await neat.evolve();
|
|
119
|
+
const provenanceGenome = neat.population[0];
|
|
120
|
+
provenanceGenome.activate([0, 0]);
|
|
121
|
+
const canUseFastSlab = getFastSlabPredicate(provenanceGenome).call(
|
|
122
|
+
provenanceGenome,
|
|
123
|
+
false,
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// Assert
|
|
127
|
+
expect(canUseFastSlab).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Architect, Network } from '../../src/neataptic';
|
|
2
|
+
|
|
3
|
+
describe('Network topology intent', () => {
|
|
4
|
+
it('marks perceptron builders as feed-forward intent', () => {
|
|
5
|
+
const network = Architect.perceptron(3, 4, 1);
|
|
6
|
+
|
|
7
|
+
expect(network.getTopologyIntent()).toBe('feed-forward');
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('enables acyclic enforcement for perceptron builders', () => {
|
|
11
|
+
const network = Architect.perceptron(3, 4, 1);
|
|
12
|
+
|
|
13
|
+
expect(Reflect.get(network, '_enforceAcyclic')).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('accepts feed-forward intent through the public constructor', () => {
|
|
17
|
+
const network = new Network(2, 1, { topologyIntent: 'feed-forward' });
|
|
18
|
+
|
|
19
|
+
expect(network.getTopologyIntent()).toBe('feed-forward');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('serializes topology intent in JSON payloads', () => {
|
|
23
|
+
const network = Architect.perceptron(2, 3, 1);
|
|
24
|
+
const jsonPayload = network.toJSON() as { topologyIntent?: string };
|
|
25
|
+
|
|
26
|
+
expect(jsonPayload.topologyIntent).toBe('feed-forward');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('restores topology intent during JSON deserialization', () => {
|
|
30
|
+
const network = Architect.perceptron(2, 3, 1);
|
|
31
|
+
const rebuiltNetwork = Network.fromJSON(
|
|
32
|
+
network.toJSON() as Record<string, unknown>,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
expect(rebuiltNetwork.getTopologyIntent()).toBe('feed-forward');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('keeps the legacy acyclic setter aligned with topology intent', () => {
|
|
39
|
+
const network = new Network(2, 1);
|
|
40
|
+
network.setEnforceAcyclic(true);
|
|
41
|
+
|
|
42
|
+
expect(network.getTopologyIntent()).toBe('feed-forward');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export * from './browser-entry.math.utils';
|
|
2
|
-
export * from './browser-entry.host.utils';
|
|
3
|
-
export * from './browser-entry.network-view.utils';
|
|
4
|
-
export * from './browser-entry.observation.utils';
|
|
5
|
-
export * from './browser-entry.playback.utils';
|
|
6
|
-
export * from './browser-entry.spawn.utils';
|
|
7
|
-
export * from './browser-entry.stats.utils';
|
|
8
|
-
export * from './browser-entry.telemetry.utils';
|
|
9
|
-
export * from './browser-entry.text-frame.utils';
|
|
10
|
-
export * from './browser-entry.viewport.utils';
|
|
11
|
-
export * from './browser-entry.visualization.utils';
|
|
12
|
-
export * from './browser-entry.worker-channel.utils';
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared simulation public entry.
|
|
3
|
-
*
|
|
4
|
-
* This compatibility façade re-exports shared simulation utilities while
|
|
5
|
-
* `flappy.simulation.shared.utils.ts` is decomposed into focused modules.
|
|
6
|
-
*/
|
|
7
|
-
export * from './simulation-shared.constants';
|
|
8
|
-
export * from './simulation-shared.control.utils';
|
|
9
|
-
export * from './simulation-shared.difficulty.utils';
|
|
10
|
-
export * from './simulation-shared.errors';
|
|
11
|
-
export * from './simulation-shared.math.utils';
|
|
12
|
-
export * from './simulation-shared.memory.utils';
|
|
13
|
-
export * from './simulation-shared.observation.utils';
|
|
14
|
-
export * from './simulation-shared.spawn.utils';
|
|
15
|
-
export * from './simulation-shared.types';
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { clampValue } from '../flappy.simulation.shared.utils';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Computes the arithmetic mean of numeric samples.
|
|
5
|
-
*
|
|
6
|
-
* @param values - Numeric samples.
|
|
7
|
-
* @returns Arithmetic mean.
|
|
8
|
-
*/
|
|
9
|
-
export function computeMean(values: readonly number[]): number {
|
|
10
|
-
if (values.length === 0) return 0;
|
|
11
|
-
return (
|
|
12
|
-
values.reduce(function accumulate(sumValue, currentValue): number {
|
|
13
|
-
return sumValue + currentValue;
|
|
14
|
-
}, 0) / values.length
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Computes population standard deviation from numeric samples.
|
|
20
|
-
*
|
|
21
|
-
* @param values - Numeric samples.
|
|
22
|
-
* @param meanValue - Precomputed mean.
|
|
23
|
-
* @returns Population standard deviation.
|
|
24
|
-
*/
|
|
25
|
-
export function computePopulationStandardDeviation(
|
|
26
|
-
values: readonly number[],
|
|
27
|
-
meanValue: number,
|
|
28
|
-
): number {
|
|
29
|
-
if (values.length === 0) return 0;
|
|
30
|
-
|
|
31
|
-
const variance =
|
|
32
|
-
values.reduce(function accumulateVariance(sumValue, currentValue): number {
|
|
33
|
-
const deltaFromMean = currentValue - meanValue;
|
|
34
|
-
return sumValue + deltaFromMean * deltaFromMean;
|
|
35
|
-
}, 0) / values.length;
|
|
36
|
-
|
|
37
|
-
return Math.sqrt(Math.max(0, variance));
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Computes an interpolated percentile value.
|
|
42
|
-
*
|
|
43
|
-
* @param values - Numeric samples.
|
|
44
|
-
* @param percentile - Percentile in [0, 1].
|
|
45
|
-
* @returns Interpolated percentile value.
|
|
46
|
-
*/
|
|
47
|
-
export function computePercentile(
|
|
48
|
-
values: readonly number[],
|
|
49
|
-
percentile: number,
|
|
50
|
-
): number {
|
|
51
|
-
if (values.length === 0) return Number.NaN;
|
|
52
|
-
|
|
53
|
-
const sortedValues = values.toSorted(compareNumbersAscending);
|
|
54
|
-
|
|
55
|
-
const clampedPercentile = clampValue(percentile, 0, 1);
|
|
56
|
-
const percentileIndex = clampedPercentile * (sortedValues.length - 1);
|
|
57
|
-
const lowerIndex = Math.floor(percentileIndex);
|
|
58
|
-
const upperIndex = Math.ceil(percentileIndex);
|
|
59
|
-
const interpolationWeight = percentileIndex - lowerIndex;
|
|
60
|
-
|
|
61
|
-
const lowerValue = sortedValues[lowerIndex] ?? sortedValues[0] ?? Number.NaN;
|
|
62
|
-
const upperValue = sortedValues[upperIndex] ?? lowerValue;
|
|
63
|
-
return lowerValue + (upperValue - lowerValue) * interpolationWeight;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Numeric ascending comparator.
|
|
68
|
-
*
|
|
69
|
-
* @param leftValue - Left numeric value.
|
|
70
|
-
* @param rightValue - Right numeric value.
|
|
71
|
-
* @returns Ascending comparator delta.
|
|
72
|
-
*/
|
|
73
|
-
export function compareNumbersAscending(
|
|
74
|
-
leftValue: number,
|
|
75
|
-
rightValue: number,
|
|
76
|
-
): number {
|
|
77
|
-
return leftValue - rightValue;
|
|
78
|
-
}
|