redscript-mc 3.0.1 → 3.0.2

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 (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,177 @@
1
+ # Bossbar
2
+
3
+ > Auto-generated from `src/stdlib/bossbar.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [create_timer_bar](#create-timer-bar)
8
+ - [create_health_bar](#create-health-bar)
9
+ - [create_progress_bar](#create-progress-bar)
10
+ - [update_bar](#update-bar)
11
+ - [hide_bar](#hide-bar)
12
+ - [show_bar](#show-bar)
13
+ - [remove_bar](#remove-bar)
14
+ - [update_bar_color](#update-bar-color)
15
+
16
+ ---
17
+
18
+ ## `create_timer_bar`
19
+
20
+ Creates a visible timer bossbar for all players.
21
+ The bossbar max and current value are initialized to `max_seconds * 20`
22
+ so callers can update it directly in game ticks.
23
+
24
+ ```redscript
25
+ fn create_timer_bar(id: string, name: string, max_seconds: int)
26
+ ```
27
+
28
+ **Parameters**
29
+
30
+ | Parameter | Description |
31
+ |-----------|-------------|
32
+ | `id` | Bossbar identifier, usually `<namespace>:<name>` |
33
+ | `name` | Display name shown on the bossbar |
34
+ | `max_seconds` | Duration in seconds; converted to ticks internally |
35
+
36
+ **Example**
37
+
38
+ ```redscript
39
+ create_timer_bar("game:round", "Round Timer", 90)
40
+ ```
41
+
42
+ ---
43
+
44
+ ## `create_health_bar`
45
+
46
+ Creates a visible red bossbar initialized at full value.
47
+ Useful for boss HP or shared health objectives.
48
+
49
+ ```redscript
50
+ fn create_health_bar(id: string, name: string, max_val: int)
51
+ ```
52
+
53
+ **Parameters**
54
+
55
+ | Parameter | Description |
56
+ |-----------|-------------|
57
+ | `id` | Bossbar identifier, usually `<namespace>:<name>` |
58
+ | `name` | Display name shown on the bossbar |
59
+ | `max_val` | Maximum value and initial value of the bar |
60
+
61
+ **Example**
62
+
63
+ ```redscript
64
+ create_health_bar("raid:boss_hp", "Warden", 500)
65
+ ```
66
+
67
+ ---
68
+
69
+ ## `create_progress_bar`
70
+
71
+ Creates a visible blue progress bossbar starting at zero.
72
+ Useful for charge bars, capture progress, or phase tracking.
73
+
74
+ ```redscript
75
+ fn create_progress_bar(id: string, name: string, max_val: int)
76
+ ```
77
+
78
+ **Parameters**
79
+
80
+ | Parameter | Description |
81
+ |-----------|-------------|
82
+ | `id` | Bossbar identifier, usually `<namespace>:<name>` |
83
+ | `name` | Display name shown on the bossbar |
84
+ | `max_val` | Maximum progress value |
85
+
86
+ **Example**
87
+
88
+ ```redscript
89
+ create_progress_bar("game:capture", "Capture", 100)
90
+ ```
91
+
92
+ ---
93
+
94
+ ## `update_bar`
95
+
96
+ Sets the current value of an existing bossbar.
97
+ RedScript does not clamp the value; Minecraft handles display behavior.
98
+
99
+ ```redscript
100
+ fn update_bar(id: string, value: int)
101
+ ```
102
+
103
+ **Parameters**
104
+
105
+ | Parameter | Description |
106
+ |-----------|-------------|
107
+ | `id` | Bossbar identifier |
108
+ | `value` | New current value |
109
+
110
+ ---
111
+
112
+ ## `hide_bar`
113
+
114
+ Hides an existing bossbar from all assigned players.
115
+
116
+ ```redscript
117
+ fn hide_bar(id: string)
118
+ ```
119
+
120
+ **Parameters**
121
+
122
+ | Parameter | Description |
123
+ |-----------|-------------|
124
+ | `id` | Bossbar identifier |
125
+
126
+ ---
127
+
128
+ ## `show_bar`
129
+
130
+ Shows an existing bossbar to all assigned players.
131
+
132
+ ```redscript
133
+ fn show_bar(id: string)
134
+ ```
135
+
136
+ **Parameters**
137
+
138
+ | Parameter | Description |
139
+ |-----------|-------------|
140
+ | `id` | Bossbar identifier |
141
+
142
+ ---
143
+
144
+ ## `remove_bar`
145
+
146
+ Removes an existing bossbar entirely.
147
+ After removal, the same `id` must be recreated before reuse.
148
+
149
+ ```redscript
150
+ fn remove_bar(id: string)
151
+ ```
152
+
153
+ **Parameters**
154
+
155
+ | Parameter | Description |
156
+ |-----------|-------------|
157
+ | `id` | Bossbar identifier |
158
+
159
+ ---
160
+
161
+ ## `update_bar_color`
162
+
163
+ Updates the bossbar color from a percentage threshold.
164
+ Values above 66 use green, above 33 use yellow, otherwise red.
165
+
166
+ ```redscript
167
+ fn update_bar_color(id: string, percent: int)
168
+ ```
169
+
170
+ **Parameters**
171
+
172
+ | Parameter | Description |
173
+ |-----------|-------------|
174
+ | `id` | Bossbar identifier |
175
+ | `percent` | Percentage in the expected 0-100 range |
176
+
177
+ ---
@@ -0,0 +1,289 @@
1
+ # Calculus
2
+
3
+ > Auto-generated from `src/stdlib/calculus.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [deriv_forward](#deriv-forward)
8
+ - [deriv_central](#deriv-central)
9
+ - [second_deriv](#second-deriv)
10
+ - [integrate_trapezoid](#integrate-trapezoid)
11
+ - [integrate_simpson](#integrate-simpson)
12
+ - [riemann_left](#riemann-left)
13
+ - [riemann_right](#riemann-right)
14
+ - [riemann_mid](#riemann-mid)
15
+ - [curve_length_2d](#curve-length-2d)
16
+ - [running_mean](#running-mean)
17
+ - [running_m2](#running-m2)
18
+ - [variance_from_m2](#variance-from-m2)
19
+ - [std_dev_approx](#std-dev-approx)
20
+
21
+ ---
22
+
23
+ ## `deriv_forward` <Badge type="info" text="v1.3.0" />
24
+
25
+ Forward-difference derivative: (f(x+h) − f(x)) / h.
26
+
27
+ ```redscript
28
+ fn deriv_forward(f1: int, f0: int, h_fx: int): int
29
+ ```
30
+
31
+ **Parameters**
32
+
33
+ | Parameter | Description |
34
+ |-----------|-------------|
35
+ | `f1` | f(x + h) × 10000 |
36
+ | `f0` | f(x) × 10000 |
37
+ | `h_fx` | Step size × 10000 (must not be zero) |
38
+
39
+ **Returns:** df/dx × 10000; returns 0 if h_fx == 0
40
+
41
+ ---
42
+
43
+ ## `deriv_central` <Badge type="info" text="v1.3.0" />
44
+
45
+ Central-difference derivative: (f(x+h) − f(x−h)) / (2h). More accurate than forward difference.
46
+
47
+ ```redscript
48
+ fn deriv_central(f_plus: int, f_minus: int, h_fx: int): int
49
+ ```
50
+
51
+ **Parameters**
52
+
53
+ | Parameter | Description |
54
+ |-----------|-------------|
55
+ | `f_plus` | f(x + h) × 10000 |
56
+ | `f_minus` | f(x − h) × 10000 |
57
+ | `h_fx` | Step size × 10000 (must not be zero) |
58
+
59
+ **Returns:** df/dx × 10000; returns 0 if h_fx == 0
60
+
61
+ ---
62
+
63
+ ## `second_deriv` <Badge type="info" text="v1.3.0" />
64
+
65
+ Second derivative via the central finite-difference formula: (f(x+h) − 2f(x) + f(x−h)) / h².
66
+
67
+ ```redscript
68
+ fn second_deriv(f_plus: int, f0: int, f_minus: int, h_fx: int): int
69
+ ```
70
+
71
+ **Parameters**
72
+
73
+ | Parameter | Description |
74
+ |-----------|-------------|
75
+ | `f_plus` | f(x + h) × 10000 |
76
+ | `f0` | f(x) × 10000 |
77
+ | `f_minus` | f(x − h) × 10000 |
78
+ | `h_fx` | Step size × 10000 (must not be zero) |
79
+
80
+ **Returns:** d²f/dx² × 10000; returns 0 if h_fx == 0
81
+
82
+ ---
83
+
84
+ ## `integrate_trapezoid` <Badge type="info" text="v1.3.0" />
85
+
86
+ Numerical integration using the trapezoidal rule.
87
+
88
+ ```redscript
89
+ fn integrate_trapezoid(vals: int[], n: int, h_fx: int): int
90
+ ```
91
+
92
+ **Parameters**
93
+
94
+ | Parameter | Description |
95
+ |-----------|-------------|
96
+ | `vals` | Array of n function values × 10000 at equally spaced points |
97
+ | `n` | Number of sample points (must be ≥ 2) |
98
+ | `h_fx` | Step width between samples × 10000 |
99
+
100
+ **Returns:** Approximate integral × 10000 (area under the curve)
101
+
102
+ **Example**
103
+
104
+ ```redscript
105
+ let ys: int[] = [0, 5000, 10000]; // f(0)=0, f(0.5)=0.5, f(1)=1 (linear)
106
+ let area: int = integrate_trapezoid(ys, 3, 5000); // ≈ 5000 (∫₀¹ x dx = 0.5)
107
+ ```
108
+
109
+ ---
110
+
111
+ ## `integrate_simpson` <Badge type="info" text="v1.3.0" />
112
+
113
+ Numerical integration using Simpson's 1/3 rule (more accurate than trapezoid for smooth functions).
114
+ Uses n−1 intervals if n is even. Requires n ≥ 3.
115
+
116
+ ```redscript
117
+ fn integrate_simpson(vals: int[], n: int, h_fx: int): int
118
+ ```
119
+
120
+ **Parameters**
121
+
122
+ | Parameter | Description |
123
+ |-----------|-------------|
124
+ | `vals` | Array of n function values × 10000 at equally spaced points |
125
+ | `n` | Number of sample points (should be odd and ≥ 3) |
126
+ | `h_fx` | Step width × 10000 |
127
+
128
+ **Returns:** Approximate integral × 10000
129
+
130
+ ---
131
+
132
+ ## `riemann_left` <Badge type="info" text="v1.3.0" />
133
+
134
+ Left Riemann sum: sum of f(x_i) × h for i = 0 … n−2.
135
+
136
+ ```redscript
137
+ fn riemann_left(vals: int[], n: int, h_fx: int): int
138
+ ```
139
+
140
+ **Parameters**
141
+
142
+ | Parameter | Description |
143
+ |-----------|-------------|
144
+ | `vals` | Array of n function values × 10000 |
145
+ | `n` | Number of sample points |
146
+ | `h_fx` | Step width × 10000 |
147
+
148
+ **Returns:** Approximate integral × 10000
149
+
150
+ ---
151
+
152
+ ## `riemann_right` <Badge type="info" text="v1.3.0" />
153
+
154
+ Right Riemann sum: sum of f(x_i) × h for i = 1 … n−1.
155
+
156
+ ```redscript
157
+ fn riemann_right(vals: int[], n: int, h_fx: int): int
158
+ ```
159
+
160
+ **Parameters**
161
+
162
+ | Parameter | Description |
163
+ |-----------|-------------|
164
+ | `vals` | Array of n function values × 10000 |
165
+ | `n` | Number of sample points |
166
+ | `h_fx` | Step width × 10000 |
167
+
168
+ **Returns:** Approximate integral × 10000
169
+
170
+ ---
171
+
172
+ ## `riemann_mid` <Badge type="info" text="v1.3.0" />
173
+
174
+ Midpoint Riemann sum using precomputed midpoint values.
175
+
176
+ ```redscript
177
+ fn riemann_mid(vals: int[], n: int, h_fx: int): int
178
+ ```
179
+
180
+ **Parameters**
181
+
182
+ | Parameter | Description |
183
+ |-----------|-------------|
184
+ | `vals` | Array of n midpoint values × 10000 (one per interval) |
185
+ | `n` | Number of intervals (i.e. length of vals) |
186
+ | `h_fx` | Step width × 10000 |
187
+
188
+ **Returns:** Approximate integral × 10000
189
+
190
+ ---
191
+
192
+ ## `curve_length_2d` <Badge type="info" text="v1.3.0" />
193
+
194
+ Approximate arc length of a 2-D polyline through n points using the Euclidean distance between consecutive points.
195
+
196
+ ```redscript
197
+ fn curve_length_2d(xs: int[], ys: int[], n: int): int
198
+ ```
199
+
200
+ **Parameters**
201
+
202
+ | Parameter | Description |
203
+ |-----------|-------------|
204
+ | `xs` | X coordinates × 10000 of the n points |
205
+ | `ys` | Y coordinates × 10000 of the n points |
206
+ | `n` | Number of points (must be ≥ 2) |
207
+
208
+ **Returns:** Approximate arc length × 10000
209
+
210
+ ---
211
+
212
+ ## `running_mean` <Badge type="info" text="v1.3.0" />
213
+
214
+ Welford's online algorithm: update a running mean with a new sample.
215
+
216
+ ```redscript
217
+ fn running_mean(prev_mean: int, new_val: int, n: int): int
218
+ ```
219
+
220
+ **Parameters**
221
+
222
+ | Parameter | Description |
223
+ |-----------|-------------|
224
+ | `prev_mean` | Previous mean × 10000 |
225
+ | `new_val` | New sample value × 10000 |
226
+ | `n` | Total count after adding the new sample (n ≥ 1) |
227
+
228
+ **Returns:** Updated mean × 10000
229
+
230
+ ---
231
+
232
+ ## `running_m2` <Badge type="info" text="v1.3.0" />
233
+
234
+ Welford's online algorithm: update the M2 accumulator used to compute variance.
235
+ Variance = running_m2 / (n − 1) after n samples.
236
+
237
+ ```redscript
238
+ fn running_m2(prev_m2: int, prev_mean: int, new_mean: int, new_val: int): int
239
+ ```
240
+
241
+ **Parameters**
242
+
243
+ | Parameter | Description |
244
+ |-----------|-------------|
245
+ | `prev_m2` | Previous M2 accumulator × 10000 |
246
+ | `prev_mean` | Mean before adding the new sample × 10000 |
247
+ | `new_mean` | Mean after adding the new sample × 10000 |
248
+ | `new_val` | New sample value × 10000 |
249
+
250
+ **Returns:** Updated M2 accumulator × 10000
251
+
252
+ ---
253
+
254
+ ## `variance_from_m2` <Badge type="info" text="v1.3.0" />
255
+
256
+ Compute sample variance from a Welford M2 accumulator and sample count.
257
+
258
+ ```redscript
259
+ fn variance_from_m2(m2: int, n: int): int
260
+ ```
261
+
262
+ **Parameters**
263
+
264
+ | Parameter | Description |
265
+ |-----------|-------------|
266
+ | `m2` | M2 accumulator from `running_m2` × 10000 |
267
+ | `n` | Number of samples collected |
268
+
269
+ **Returns:** Sample variance × 10000; returns 0 for n ≤ 1
270
+
271
+ ---
272
+
273
+ ## `std_dev_approx` <Badge type="info" text="v1.3.0" />
274
+
275
+ Approximate standard deviation as the integer square root of the variance.
276
+
277
+ ```redscript
278
+ fn std_dev_approx(variance_fx: int): int
279
+ ```
280
+
281
+ **Parameters**
282
+
283
+ | Parameter | Description |
284
+ |-----------|-------------|
285
+ | `variance_fx` | Variance × 10000 (e.g. from `variance_from_m2`) |
286
+
287
+ **Returns:** √variance × 10000; returns 0 for non-positive input
288
+
289
+ ---