@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.
Files changed (361) hide show
  1. package/.github/agents/boundary-mapper.agent.md +31 -0
  2. package/.github/agents/docs-scout.agent.md +29 -0
  3. package/.github/agents/plan-scout.agent.md +31 -0
  4. package/.github/agents/solid-split.agent.md +143 -0
  5. package/.github/copilot-instructions.md +119 -0
  6. package/.github/skills/solid-split-playbook/SKILL.md +220 -0
  7. package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
  8. package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
  9. package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
  10. package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
  11. package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
  12. package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
  13. package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
  14. package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
  15. package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
  16. package/package.json +7 -3
  17. package/plans/ES2023 migration +13 -8
  18. package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
  19. package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
  20. package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
  21. package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
  22. package/plans/Memory_Optimization.md +3 -3
  23. package/plans/README.md +63 -0
  24. package/plans/Roadmap.md +15 -3
  25. package/plans/asciiMaze_SOLID_split.done.md +130 -0
  26. package/plans/flappy_bird_SOLID_split.done.md +67 -0
  27. package/scripts/analyze-trace.ts +590 -0
  28. package/scripts/assets/theme.css +221 -34
  29. package/scripts/copy-examples.mjs +9 -5
  30. package/scripts/export-onnx.mjs +3 -3
  31. package/scripts/generate-bench-tables.mjs +10 -10
  32. package/scripts/generate-bench-tables.ts +10 -10
  33. package/scripts/generate-docs.ts +1415 -449
  34. package/scripts/render-docs-html.ts +15 -8
  35. package/src/README.md +127 -222
  36. package/src/architecture/README.md +117 -184
  37. package/src/architecture/architect.ts +6 -0
  38. package/src/architecture/layer/README.md +38 -38
  39. package/src/architecture/network/README.md +49 -31
  40. package/src/architecture/network/activate/README.md +77 -77
  41. package/src/architecture/network/connect/README.md +15 -13
  42. package/src/architecture/network/deterministic/README.md +7 -7
  43. package/src/architecture/network/evolve/README.md +44 -44
  44. package/src/architecture/network/gating/README.md +20 -20
  45. package/src/architecture/network/genetic/README.md +51 -51
  46. package/src/architecture/network/mutate/README.md +97 -97
  47. package/src/architecture/network/network.types.ts +39 -0
  48. package/src/architecture/network/onnx/README.md +264 -264
  49. package/src/architecture/network/prune/README.md +39 -39
  50. package/src/architecture/network/remove/README.md +26 -26
  51. package/src/architecture/network/serialize/README.md +56 -56
  52. package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
  53. package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
  54. package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
  55. package/src/architecture/network/slab/README.md +61 -61
  56. package/src/architecture/network/standalone/README.md +24 -24
  57. package/src/architecture/network/stats/README.md +9 -9
  58. package/src/architecture/network/topology/README.md +46 -46
  59. package/src/architecture/network/training/README.md +21 -21
  60. package/src/architecture/network.ts +114 -10
  61. package/src/methods/README.md +9 -87
  62. package/src/multithreading/README.md +8 -77
  63. package/src/multithreading/workers/README.md +2 -2
  64. package/src/multithreading/workers/browser/README.md +0 -6
  65. package/src/multithreading/workers/node/README.md +0 -3
  66. package/src/neat/README.md +623 -568
  67. package/src/neat/neat.evolve.population.utils.ts +29 -5
  68. package/src/neat/neat.helpers.ts +16 -0
  69. package/src/neat/neat.topology-intent.utils.ts +160 -0
  70. package/src/utils/README.md +18 -18
  71. package/test/examples/asciiMaze/README.md +59 -59
  72. package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
  73. package/test/examples/asciiMaze/browser-entry/README.md +196 -0
  74. package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
  75. package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
  76. package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
  77. package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
  78. package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
  79. package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
  80. package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
  81. package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
  82. package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
  83. package/test/examples/asciiMaze/browser-entry.ts +10 -576
  84. package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
  85. package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
  86. package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
  87. package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
  88. package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
  89. package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
  90. package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
  91. package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
  92. package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
  93. package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
  94. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
  95. package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
  96. package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
  97. package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
  98. package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
  99. package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
  100. package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
  101. package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
  102. package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
  103. package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
  104. package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
  105. package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
  106. package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
  107. package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
  108. package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
  109. package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
  110. package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
  111. package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
  112. package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
  113. package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
  114. package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
  115. package/test/examples/asciiMaze/fitness.ts +2 -2
  116. package/test/examples/asciiMaze/fitness.types.ts +65 -0
  117. package/test/examples/asciiMaze/interfaces.ts +64 -1352
  118. package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
  119. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
  120. package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
  121. package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
  122. package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
  123. package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
  124. package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
  125. package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
  126. package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
  127. package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
  128. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
  129. package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
  130. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
  131. package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
  132. package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
  133. package/test/examples/flappy_bird/README.md +193 -88
  134. package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
  135. package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
  136. package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
  137. package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
  138. package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
  139. package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
  140. package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
  141. package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
  142. package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
  143. package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
  144. package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
  145. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
  146. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
  147. package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
  148. package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
  149. package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
  150. package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
  151. package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
  152. package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
  153. package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
  154. package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
  155. package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
  156. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
  157. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
  158. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
  159. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
  160. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
  161. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
  162. package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
  163. package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
  164. package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
  165. package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
  166. package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
  167. package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
  168. package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
  169. package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
  170. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
  171. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
  172. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
  173. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
  174. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
  175. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
  176. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
  177. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
  178. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
  179. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
  180. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
  181. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
  182. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
  183. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
  184. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
  185. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
  186. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
  187. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
  188. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
  189. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
  190. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
  191. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
  192. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
  193. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
  194. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
  195. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
  196. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
  197. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
  198. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
  199. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
  200. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
  201. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
  202. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
  203. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
  204. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
  205. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
  206. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
  207. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
  208. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
  209. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
  210. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
  211. package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
  212. package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
  213. package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
  214. package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
  215. package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
  216. package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
  217. package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
  218. package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
  219. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
  220. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
  221. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
  222. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
  223. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
  224. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
  225. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
  226. package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
  227. package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
  228. package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
  229. package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
  230. package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
  231. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
  232. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
  233. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
  234. package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
  235. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
  236. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
  237. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
  238. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
  239. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
  240. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
  241. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
  242. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
  243. package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
  244. package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
  245. package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
  246. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
  247. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
  248. package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
  249. package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
  250. package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
  251. package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
  252. package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
  253. package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
  254. package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
  255. package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
  256. package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
  257. package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
  258. package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
  259. package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
  260. package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
  261. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
  262. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
  263. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
  264. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
  265. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
  266. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
  267. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
  268. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
  269. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
  270. package/test/examples/flappy_bird/constants/README.md +1163 -0
  271. package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
  272. package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
  273. package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
  274. package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
  275. package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
  276. package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
  277. package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
  278. package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
  279. package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
  280. package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
  281. package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
  282. package/test/examples/flappy_bird/constants/constants.ts +6 -0
  283. package/test/examples/flappy_bird/environment/README.md +182 -0
  284. package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
  285. package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
  286. package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
  287. package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
  288. package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
  289. package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
  290. package/test/examples/flappy_bird/evaluation/README.md +155 -0
  291. package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
  292. package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
  293. package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
  294. package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
  295. package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
  296. package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
  297. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
  298. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
  299. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
  300. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
  301. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
  302. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
  303. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
  304. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
  305. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
  306. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
  307. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
  308. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
  309. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
  310. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
  311. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
  312. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
  313. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
  314. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
  315. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
  316. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
  317. package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
  318. package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
  319. package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
  320. package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
  321. package/test/examples/flappy_bird/index.ts +8 -2
  322. package/test/examples/flappy_bird/rng.ts +10 -0
  323. package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
  324. package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
  325. package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
  326. package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
  327. package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
  328. package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
  329. package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
  330. package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
  331. package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
  332. package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
  333. package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
  334. package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
  335. package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
  336. package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
  337. package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
  338. package/test/examples/flappy_bird/trainer/README.md +676 -0
  339. package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
  340. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
  341. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
  342. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
  343. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
  344. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
  345. package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
  346. package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
  347. package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
  348. package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
  349. package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
  350. package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
  351. package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
  352. package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
  353. package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
  354. package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
  355. package/test/neat/neat.topology-intent.test.ts +129 -0
  356. package/test/network/network.topology-intent.test.ts +44 -0
  357. package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
  358. package/test/examples/flappy_bird/environment/environment.ts +0 -7
  359. package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
  360. package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
  361. package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Shared contracts for the ASCII maze evolution engine state boundary.
3
+ *
4
+ * This file owns the exported type surface consumed by the engine-state facade,
5
+ * telemetry helpers, sampling utilities, and RNG/timing adapters.
6
+ */
7
+
8
+ /**
9
+ * Centralised shared state for the ASCII maze evolution façade.
10
+ *
11
+ * Responsibilities:
12
+ * 1. Define the scratch-buffer schema consumed by telemetry, population, and inspection helpers.
13
+ * 2. Expose runtime toggle state (`EngineToggleState`) that drives optional phases and telemetry density.
14
+ * 3. Provide factory and maintenance helpers (`createEngineState`, `initialiseTelemetryScratch`, `ensureVisitedHashCapacity`, `ensureRngCacheBatch`, `reseedRngState`) that size buffers and keep deterministic RNG state in sync.
15
+ * 4. Export the project-wide singleton `engineState` so extracted modules can share the façade’s pooled resources while still accepting injected state for testing.
16
+ *
17
+ * Callers mutate the returned scratch instances in place to avoid per-generation allocations; higher-level modules should treat the helpers as the sole entry point for sizing or resetting shared buffers.
18
+ */
19
+ export interface EngineScratchState {
20
+ /** Softmax exponent scratch reused by telemetry entropy calculations. */
21
+ exps: Float64Array;
22
+ /** Mean accumulator reused for output bias statistics. */
23
+ means: Float64Array;
24
+ /** Standard deviation accumulator shared by telemetry computations. */
25
+ standardDeviations: Float64Array;
26
+ /** Bias scratch workspace reused for output-bias telemetry calculations. */
27
+ biasTelemetryScratch: Float64Array;
28
+ /** Optional kurtosis accumulator allocated when full telemetry is enabled. */
29
+ kurtosis?: Float64Array;
30
+ /** Second raw moment buffer for variance calculations. */
31
+ secondMomentRaw: Float64Array;
32
+ /** Optional third raw moment buffer for skewness metrics. */
33
+ thirdMomentRaw?: Float64Array;
34
+ /** Optional fourth raw moment buffer for kurtosis metrics. */
35
+ fourthMomentRaw?: Float64Array;
36
+ /** Directional move counters reused during exploration stats. */
37
+ moveCounts: Int32Array;
38
+ /** Open-address hash table used for visited coordinate detection. */
39
+ visitedHashTable: Int32Array;
40
+ /** Current load factor threshold guiding visited-hash resizes. */
41
+ visitedHashLoadFactor: number;
42
+ /** Species id scratch array reused by population sorting. */
43
+ speciesIds: Int32Array;
44
+ /** Species count scratch array kept parallel to {@link speciesIds}. */
45
+ speciesCounts: Int32Array;
46
+ /** Candidate connection objects pooled for pruning heuristics. */
47
+ connectionCandidates: Record<string, unknown>[];
48
+ /** Hidden-to-output connection list reused during inspection. */
49
+ hiddenToOutputConnections: Record<string, unknown>[];
50
+ /** Bit flags for connection enable/disable states. */
51
+ connectionFlags: Uint8Array;
52
+ /** Bitmap reused when detecting recurrent or gated connections. */
53
+ connectionFlagBitmap?: Int8Array;
54
+ /** Maze tail history reused to avoid reallocating per telemetry call. */
55
+ tailHistoryBuffer: Array<unknown>;
56
+ /** Sampled result buffer reused by array sampling helpers. */
57
+ sampleResultBuffer: Array<unknown>;
58
+ /** Sorted index scratch reused when ranking genomes. */
59
+ sortedIndexBuffer: number[];
60
+ /** Optional typed view of {@link sortedIndexBuffer} for faster sorts. */
61
+ sortedIndexTypedArray?: Int32Array;
62
+ /** Quicksort stack storing pending index ranges. */
63
+ quicksortStack: Int32Array;
64
+ /** Temporary population clone array used during expansion. */
65
+ populationCloneBuffer: Record<string, unknown>[];
66
+ /** Activation name buffer reused by inspection routines. */
67
+ activationNameBuffer: string[];
68
+ /** Node classification buckets reused by inspection routines. */
69
+ nodeBuckets: [
70
+ Record<string, unknown>[],
71
+ Record<string, unknown>[],
72
+ Record<string, unknown>[],
73
+ ];
74
+ /** Top entry objects reused when generating snapshots. */
75
+ snapshotTopEntries: Record<string, unknown>[];
76
+ /** Snapshot metadata object reused per persistence write. */
77
+ snapshotReusableObject: Record<string, unknown>;
78
+ /** Mutation operator index buffer shuffled each generation. */
79
+ mutationOperatorIndices: Uint16Array;
80
+ /** Object pool used when sampling individuals for telemetry. */
81
+ samplePool: Array<unknown>;
82
+ /** Character array reused when assembling debug strings. */
83
+ stringAssemblyBuffer: string[];
84
+ /** Small exploration table for low-cost duplicate detection. */
85
+ smallExploreTable: Int32Array;
86
+ /** Non-shared logits ring storing recent action logits. */
87
+ logitsRing: Float32Array[];
88
+ /** Write cursor for the non-shared logits ring. */
89
+ logitsRingWriteCursor: number;
90
+ /** Shared float buffer backing the logits ring when SAB is available. */
91
+ sharedLogits?: Float32Array;
92
+ /** Shared atomic write index for the SAB-backed logits ring. */
93
+ sharedLogitsWriteIndex?: Int32Array;
94
+ /** Scratch node index pool reused by topology inspection. */
95
+ nodeIndexBuffer: Int32Array;
96
+ /** Small profiling scratch buffer reused during timing accumulation. */
97
+ profilingScratch?: Float64Array;
98
+ /** Linear congruential RNG state preserved across cache refills. */
99
+ rngState: number;
100
+ /** Cached batch of uniform random numbers reused by the façade. */
101
+ rngCache: Float64Array;
102
+ /** Next unread index within {@link rngCache}. */
103
+ rngCacheIndex: number;
104
+ /** Allow additional properties for extensibility */
105
+ [key: string]: unknown;
106
+ }
107
+
108
+ /**
109
+ * Runtime switches that adjust telemetry verbosity and optional training phases.
110
+ */
111
+ export interface EngineToggleState {
112
+ /** Softens telemetry to a reduced metric set. */
113
+ reducedTelemetry: boolean;
114
+ /** Enables the most compact telemetry output footprint. */
115
+ telemetryMinimal: boolean;
116
+ /** Disables the Baldwin (Lamarckian) warm-start phase. */
117
+ disableBaldwinPhase: boolean;
118
+ }
119
+
120
+ /**
121
+ * Aggregated profiling configuration and accumulators shared across the evolution run.
122
+ */
123
+ export interface EngineProfilingState {
124
+ /** Indicates whether detailed profiling accumulation is active. */
125
+ detailsEnabled: boolean;
126
+ /** Rolling millisecond totals grouped by profiling segment key. */
127
+ accumulators: Record<string, number>;
128
+ }
129
+
130
+ /**
131
+ * Shared engine state instance combining pooled scratch buffers with toggle flags.
132
+ */
133
+ export interface EngineState {
134
+ /** Bundle of pooled scratch buffers shared by the façade. */
135
+ scratch: EngineScratchState;
136
+ /** Runtime toggles influencing telemetry and training behaviour. */
137
+ toggles: EngineToggleState;
138
+ /** Profiling configuration and accumulated timings. */
139
+ profiling: EngineProfilingState;
140
+ /** Indicates whether deterministic RNG mode is enabled. */
141
+ deterministicMode: boolean;
142
+ }
143
+
144
+ /**
145
+ * Configuration describing which telemetry scratch buffers require capacity guarantees.
146
+ */
147
+ export interface TelemetryScratchRequest {
148
+ /** Desired action dimensionality for logit statistics helpers. */
149
+ actionDimension?: number;
150
+ /** When true ensure higher-moment buffers (M3/M4/kurtosis) are allocated. */
151
+ includeHigherMoments?: boolean;
152
+ /** Number of output biases expected when formatting telemetry strings. */
153
+ biasCount?: number;
154
+ /** String assembly buffer length requirement (defaults to {@link biasCount}). */
155
+ stringBufferLength?: number;
156
+ }
157
+
158
+ /**
159
+ * Collection of scratch buffers handed back after initialisation for convenience.
160
+ */
161
+ export interface TelemetryScratchHandles {
162
+ /** Float64 scratch used for exponentiation during entropy calculations. */
163
+ exponentScratch: Float64Array;
164
+ /** Running mean accumulator workspace. */
165
+ meanScratch: Float64Array;
166
+ /** Population standard deviation workspace. */
167
+ standardDeviationScratch: Float64Array;
168
+ /** Second raw moment workspace. */
169
+ secondMomentScratch: Float64Array;
170
+ /** Optional third raw moment workspace (present when higher moments requested). */
171
+ thirdMomentScratch?: Float64Array;
172
+ /** Optional fourth raw moment workspace (present when higher moments requested). */
173
+ fourthMomentScratch?: Float64Array;
174
+ /** Optional kurtosis workspace (present when higher moments requested). */
175
+ kurtosisScratch?: Float64Array;
176
+ /** Bias accumulator buffer used by output-bias telemetry helpers. */
177
+ biasScratch: Float64Array;
178
+ /** Shared string assembly buffer reused across telemetry loggers. */
179
+ stringBuffer: string[];
180
+ }
181
+
182
+ /** Parameters controlling the RNG cache refill process. */
183
+ export interface RngCacheParameters {
184
+ /** Number of samples generated per congruential batch. */
185
+ batchSize: number;
186
+ /** Linear congruential multiplier component. */
187
+ multiplier: number;
188
+ /** Linear congruential increment component. */
189
+ increment: number;
190
+ /** Bit shift applied before scaling floats into [0,1). */
191
+ shift: number;
192
+ /** Scalar applied to produce [0,1) floats from shifted integers. */
193
+ scale: number;
194
+ }
195
+
196
+ /** Handles returned after ensuring the RNG cache is ready for consumption. */
197
+ export interface RngCacheHandles {
198
+ /** Cached uniform samples ready for reuse. */
199
+ cache: Float64Array;
200
+ /** Batch size associated with the cache. */
201
+ batchSize: number;
202
+ }
203
+
204
+ /**
205
+ * Handles exposed after ensuring the visited-coordinate hash table capacity.
206
+ */
207
+ export interface VisitedHashScratchHandles {
208
+ /** Cleared Int32Array hash table ready for inserts. */
209
+ table: Int32Array;
210
+ /** Bitmask used for wraparound during linear probing (table.length - 1). */
211
+ slotMask: number;
212
+ }
@@ -0,0 +1,301 @@
1
+ /**
2
+ * Pure utility helpers shared by the ASCII maze engine-state facade.
3
+ */
4
+
5
+ import type {
6
+ EngineScratchState,
7
+ TelemetryScratchHandles,
8
+ TelemetryScratchRequest,
9
+ } from './engineState.types';
10
+ import {
11
+ ACTION_OUTPUT_DIMENSION,
12
+ DEFAULT_LOGITS_RING_CAPACITY,
13
+ DEFAULT_RNG_CACHE_BATCH_SIZE,
14
+ DEFAULT_VISITED_HASH_LOAD_FACTOR,
15
+ MAX_VISITED_HASH_LOAD_FACTOR,
16
+ MIN_VISITED_HASH_LOAD_FACTOR,
17
+ RNG_GOLDEN_RATIO_SEED,
18
+ } from './engineState.constants';
19
+
20
+ interface TelemetryCapacityHints {
21
+ actionDimension: number;
22
+ requiresHigherMoments: boolean;
23
+ biasCount: number;
24
+ stringLength: number;
25
+ }
26
+
27
+ /**
28
+ * Build a logits ring sized to the requested default capacity.
29
+ * @returns Array of Float32Array rows sized to the action dimension.
30
+ */
31
+ export const createLogitsRing = (): Float32Array[] => {
32
+ const rows = new Array<Float32Array>(DEFAULT_LOGITS_RING_CAPACITY);
33
+ for (
34
+ let ringIndex = 0;
35
+ ringIndex < DEFAULT_LOGITS_RING_CAPACITY;
36
+ ringIndex++
37
+ ) {
38
+ rows[ringIndex] = new Float32Array(ACTION_OUTPUT_DIMENSION);
39
+ }
40
+ return rows;
41
+ };
42
+
43
+ /**
44
+ * Compute whether detailed profiling is enabled via the environment flag.
45
+ * @returns True when the profiling environment flag is set.
46
+ */
47
+ export const resolveProfilingEnabled = (): boolean => {
48
+ try {
49
+ return (
50
+ typeof process !== 'undefined' &&
51
+ process?.env?.ASCII_MAZE_PROFILE_DETAILS === '1'
52
+ );
53
+ } catch {
54
+ return false;
55
+ }
56
+ };
57
+
58
+ /**
59
+ * Build a fresh profiling accumulator map seeded with zero totals.
60
+ * @returns Accumulator record keyed by profiling segment name.
61
+ */
62
+ export const createProfilingAccumulators = (): Record<string, number> => ({
63
+ telemetry: 0,
64
+ simplify: 0,
65
+ snapshot: 0,
66
+ prune: 0,
67
+ });
68
+
69
+ /**
70
+ * Build the reusable snapshot metadata payload consumed by persistence helpers.
71
+ * @returns Snapshot placeholder populated with neutral defaults.
72
+ */
73
+ export const createSnapshotReusableObject = () => ({
74
+ generation: 0,
75
+ bestFitness: 0,
76
+ simplifyMode: false,
77
+ plateauCounter: 0,
78
+ timestamp: 0,
79
+ telemetryTail: undefined,
80
+ top: undefined,
81
+ });
82
+
83
+ /**
84
+ * Derive normalised capacity hints from the raw telemetry scratch request.
85
+ * @param request Raw capacity request supplied by callers.
86
+ * @returns Sanitised capacity values used during buffer initialisation.
87
+ */
88
+ export const normaliseTelemetryCapacityHints = (
89
+ request: TelemetryScratchRequest,
90
+ ): TelemetryCapacityHints => {
91
+ const normaliseSize = (value: number | undefined, fallback = 0): number => {
92
+ if (!Number.isFinite(value as number)) {
93
+ return Math.max(0, Math.floor(fallback));
94
+ }
95
+ return Math.max(0, Math.floor(value as number));
96
+ };
97
+
98
+ const biasCount = normaliseSize(request.biasCount);
99
+ return {
100
+ actionDimension: normaliseSize(request.actionDimension),
101
+ requiresHigherMoments: Boolean(request.includeHigherMoments),
102
+ biasCount,
103
+ stringLength: normaliseSize(request.stringBufferLength, biasCount),
104
+ };
105
+ };
106
+
107
+ /**
108
+ * Ensure all Float64 scratch pools required for telemetry are adequately sized.
109
+ * @param scratch Shared scratch state mutated in place.
110
+ * @param hints Normalised capacity hints.
111
+ * @returns void.
112
+ */
113
+ export const ensureTelemetryFloatPools = (
114
+ scratch: EngineScratchState,
115
+ hints: TelemetryCapacityHints,
116
+ ): void => {
117
+ const minActionDimension = Math.max(4, hints.actionDimension);
118
+ scratch.exps = ensureFloat64Pool(scratch.exps, minActionDimension, 4);
119
+ scratch.means = ensureFloat64Pool(scratch.means, hints.actionDimension, 1);
120
+ scratch.standardDeviations = ensureFloat64Pool(
121
+ scratch.standardDeviations,
122
+ hints.actionDimension,
123
+ 1,
124
+ );
125
+ scratch.secondMomentRaw = ensureFloat64Pool(
126
+ scratch.secondMomentRaw,
127
+ hints.actionDimension,
128
+ 1,
129
+ );
130
+ scratch.biasTelemetryScratch = ensureFloat64Pool(
131
+ scratch.biasTelemetryScratch,
132
+ hints.biasCount,
133
+ 1,
134
+ );
135
+
136
+ if (!hints.requiresHigherMoments) return;
137
+
138
+ scratch.thirdMomentRaw = ensureOptionalFloat64Pool(
139
+ scratch.thirdMomentRaw,
140
+ hints.actionDimension,
141
+ );
142
+ scratch.fourthMomentRaw = ensureOptionalFloat64Pool(
143
+ scratch.fourthMomentRaw,
144
+ hints.actionDimension,
145
+ );
146
+ scratch.kurtosis = ensureOptionalFloat64Pool(
147
+ scratch.kurtosis,
148
+ hints.actionDimension,
149
+ );
150
+ };
151
+
152
+ /**
153
+ * Ensure the reusable string assembly buffer has sufficient capacity.
154
+ * @param buffer Existing string buffer instance.
155
+ * @param required Minimum number of slots needed for upcoming telemetry joins.
156
+ * @returns Original buffer when large enough, otherwise a grown copy.
157
+ */
158
+ export const ensureTelemetryStringBuffer = (
159
+ buffer: string[],
160
+ required: number,
161
+ ): string[] => ensureArrayCapacity(buffer, required);
162
+
163
+ /**
164
+ * Build typed handles referencing the ensured telemetry scratch buffers.
165
+ * @param scratch Scratch state containing the prepared buffers.
166
+ * @returns Structured handles consumed by telemetry helpers.
167
+ */
168
+ export const buildTelemetryHandles = (
169
+ scratch: EngineScratchState,
170
+ ): TelemetryScratchHandles => ({
171
+ exponentScratch: scratch.exps,
172
+ meanScratch: scratch.means,
173
+ standardDeviationScratch: scratch.standardDeviations,
174
+ secondMomentScratch: scratch.secondMomentRaw,
175
+ thirdMomentScratch: scratch.thirdMomentRaw,
176
+ fourthMomentScratch: scratch.fourthMomentRaw,
177
+ kurtosisScratch: scratch.kurtosis,
178
+ biasScratch: scratch.biasTelemetryScratch,
179
+ stringBuffer: scratch.stringAssemblyBuffer,
180
+ });
181
+
182
+ /**
183
+ * Compute the next power-of-two for geometric growth.
184
+ * @param candidate Raw size candidate.
185
+ * @returns Smallest power-of-two greater than or equal to the candidate.
186
+ */
187
+ export const nextPowerOfTwo = (candidate: number): number => {
188
+ if (candidate <= 1) return 1;
189
+ return 1 << Math.ceil(Math.log2(candidate));
190
+ };
191
+
192
+ /**
193
+ * Clamp the requested target entry count to a non-negative integer.
194
+ * @param requestedEntries Raw target entry count supplied by callers.
195
+ * @returns Sanitised entry count used for capacity planning.
196
+ */
197
+ export const normaliseVisitedHashEntries = (
198
+ requestedEntries: number,
199
+ ): number => {
200
+ if (!Number.isFinite(requestedEntries)) return 0;
201
+ return Math.max(0, Math.floor(requestedEntries));
202
+ };
203
+
204
+ /**
205
+ * Ensure the visited hash load factor falls within a sensible range.
206
+ * @param requestedLoadFactor Proposed load factor from configuration or state.
207
+ * @returns Clamped load factor with a fallback to the project default.
208
+ */
209
+ export const normaliseVisitedHashLoad = (
210
+ requestedLoadFactor: number,
211
+ ): number => {
212
+ if (!Number.isFinite(requestedLoadFactor)) {
213
+ return DEFAULT_VISITED_HASH_LOAD_FACTOR;
214
+ }
215
+ if (
216
+ requestedLoadFactor <= MIN_VISITED_HASH_LOAD_FACTOR ||
217
+ requestedLoadFactor >= MAX_VISITED_HASH_LOAD_FACTOR
218
+ ) {
219
+ return DEFAULT_VISITED_HASH_LOAD_FACTOR;
220
+ }
221
+ return requestedLoadFactor;
222
+ };
223
+
224
+ /**
225
+ * Clamp the RNG cache batch size to a positive integer.
226
+ * @param requestedBatchSize Raw batch size requested by callers.
227
+ * @returns Valid batch size.
228
+ */
229
+ export const normaliseRngBatchSize = (requestedBatchSize: number): number => {
230
+ if (!Number.isFinite(requestedBatchSize)) {
231
+ return DEFAULT_RNG_CACHE_BATCH_SIZE;
232
+ }
233
+ return Math.max(1, Math.floor(requestedBatchSize));
234
+ };
235
+
236
+ /**
237
+ * Normalise a raw numeric seed into an unsigned 32-bit value.
238
+ * @param rawSeed Raw seed provided by the caller.
239
+ * @returns Unsigned 32-bit seed suitable for the congruential generator.
240
+ */
241
+ export const normaliseRngSeed = (rawSeed: number): number => {
242
+ const candidate = rawSeed >>> 0;
243
+ return candidate === 0 ? RNG_GOLDEN_RATIO_SEED : candidate;
244
+ };
245
+
246
+ /**
247
+ * Ensure a required Float64Array pool satisfies the requested capacity.
248
+ * @param buffer Existing Float64Array instance reused by the engine.
249
+ * @param required Minimum length the caller needs.
250
+ * @param minimum Optional lower bound applied before comparison.
251
+ * @returns Buffer with sufficient capacity.
252
+ */
253
+ const ensureFloat64Pool = (
254
+ buffer: Float64Array,
255
+ required: number,
256
+ minimum = 0,
257
+ ): Float64Array => {
258
+ const target = Math.max(required, minimum);
259
+ if (target <= 0 || buffer.length >= target) return buffer;
260
+ const nextSize = nextPowerOfTwo(target);
261
+ const next = new Float64Array(nextSize);
262
+ if (buffer.length > 0) {
263
+ next.set(buffer.subarray(0, Math.min(buffer.length, nextSize)));
264
+ }
265
+ return next;
266
+ };
267
+
268
+ /**
269
+ * Ensure an optional Float64Array is present and sized appropriately.
270
+ * @param buffer Optional Float64Array reference to validate.
271
+ * @param required Minimum required capacity.
272
+ * @returns Buffer with sufficient capacity or undefined when no allocation is required.
273
+ */
274
+ const ensureOptionalFloat64Pool = (
275
+ buffer: Float64Array | undefined,
276
+ required: number,
277
+ ): Float64Array | undefined => {
278
+ if (required <= 0) return buffer;
279
+ if (!buffer) return new Float64Array(nextPowerOfTwo(required));
280
+ if (buffer.length >= required) return buffer;
281
+ const nextSize = nextPowerOfTwo(required);
282
+ const next = new Float64Array(nextSize);
283
+ next.set(buffer.subarray(0, Math.min(buffer.length, nextSize)));
284
+ return next;
285
+ };
286
+
287
+ /**
288
+ * Ensure a generic Array buffer has enough slots.
289
+ * @param buffer Buffer instance to validate.
290
+ * @param required Minimum number of elements required.
291
+ * @returns Buffer with sufficient capacity.
292
+ */
293
+ const ensureArrayCapacity = <T>(buffer: T[], required: number): T[] => {
294
+ if (required <= 0 || buffer.length >= required) return buffer;
295
+ const nextSize = nextPowerOfTwo(required);
296
+ const grown = new Array<T>(nextSize);
297
+ for (let index = 0; index < buffer.length; index++) {
298
+ grown[index] = buffer[index];
299
+ }
300
+ return grown;
301
+ };