woxi 0.1.0__tar.gz

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 (255) hide show
  1. woxi-0.1.0/.config/nextest.toml +63 -0
  2. woxi-0.1.0/.dockerignore +30 -0
  3. woxi-0.1.0/.envrc +1 -0
  4. woxi-0.1.0/.gitignore +17 -0
  5. woxi-0.1.0/.pre-commit-config.yaml +14 -0
  6. woxi-0.1.0/AGENTS.md +57 -0
  7. woxi-0.1.0/CLAUDE.md +57 -0
  8. woxi-0.1.0/Cargo.lock +7192 -0
  9. woxi-0.1.0/Cargo.toml +221 -0
  10. woxi-0.1.0/LICENSE +661 -0
  11. woxi-0.1.0/PKG-INFO +103 -0
  12. woxi-0.1.0/benches/interpreter.rs +248 -0
  13. woxi-0.1.0/build.rs +37 -0
  14. woxi-0.1.0/changelog.md +438 -0
  15. woxi-0.1.0/functions.csv +6286 -0
  16. woxi-0.1.0/improve-compile-time.md +129 -0
  17. woxi-0.1.0/license.txt +661 -0
  18. woxi-0.1.0/makefile +411 -0
  19. woxi-0.1.0/pyproject.toml +46 -0
  20. woxi-0.1.0/python/woxi/__init__.py +56 -0
  21. woxi-0.1.0/python/woxi/__main__.py +134 -0
  22. woxi-0.1.0/python/woxi/_woxi.pyi +30 -0
  23. woxi-0.1.0/python/woxi/py.typed +0 -0
  24. woxi-0.1.0/readme.md +178 -0
  25. woxi-0.1.0/resources/AtkinsonHyperlegibleMono-VariableFont_wght.ttf +0 -0
  26. woxi-0.1.0/resources/AtkinsonHyperlegibleNext-VariableFont_wght.ttf +0 -0
  27. woxi-0.1.0/resources/dictionary_words.txt.gz +0 -0
  28. woxi-0.1.0/resources/leland/FONTLOG.txt +213 -0
  29. woxi-0.1.0/resources/leland/LICENSE.txt +93 -0
  30. woxi-0.1.0/resources/leland/Leland.otf +0 -0
  31. woxi-0.1.0/resources/ne_110m_countries.bin +0 -0
  32. woxi-0.1.0/rustfmt.toml +5 -0
  33. woxi-0.1.0/scripts-todo.md +377 -0
  34. woxi-0.1.0/src/bin/diff_fuzz.rs +1455 -0
  35. woxi-0.1.0/src/evaluator/assignment.rs +3648 -0
  36. woxi-0.1.0/src/evaluator/attributes.rs +685 -0
  37. woxi-0.1.0/src/evaluator/binary_ops.rs +373 -0
  38. woxi-0.1.0/src/evaluator/core_eval.rs +3651 -0
  39. woxi-0.1.0/src/evaluator/dispatch/arg_count.rs +1612 -0
  40. woxi-0.1.0/src/evaluator/dispatch/association_functions.rs +185 -0
  41. woxi-0.1.0/src/evaluator/dispatch/attributes.rs +349 -0
  42. woxi-0.1.0/src/evaluator/dispatch/audio_functions.rs +55 -0
  43. woxi-0.1.0/src/evaluator/dispatch/boolean_functions.rs +156 -0
  44. woxi-0.1.0/src/evaluator/dispatch/calculus_functions.rs +6897 -0
  45. woxi-0.1.0/src/evaluator/dispatch/complex_and_special.rs +14518 -0
  46. woxi-0.1.0/src/evaluator/dispatch/datetime_functions.rs +650 -0
  47. woxi-0.1.0/src/evaluator/dispatch/evaluation_control.rs +1396 -0
  48. woxi-0.1.0/src/evaluator/dispatch/image_functions.rs +1189 -0
  49. woxi-0.1.0/src/evaluator/dispatch/interval_functions.rs +26 -0
  50. woxi-0.1.0/src/evaluator/dispatch/io_functions.rs +3720 -0
  51. woxi-0.1.0/src/evaluator/dispatch/linear_algebra_functions.rs +5254 -0
  52. woxi-0.1.0/src/evaluator/dispatch/list_operations.rs +9059 -0
  53. woxi-0.1.0/src/evaluator/dispatch/math_functions.rs +8385 -0
  54. woxi-0.1.0/src/evaluator/dispatch/mod.rs +13087 -0
  55. woxi-0.1.0/src/evaluator/dispatch/music_functions.rs +72 -0
  56. woxi-0.1.0/src/evaluator/dispatch/plotting.rs +585 -0
  57. woxi-0.1.0/src/evaluator/dispatch/polynomial_functions.rs +1296 -0
  58. woxi-0.1.0/src/evaluator/dispatch/predicate_functions.rs +2017 -0
  59. woxi-0.1.0/src/evaluator/dispatch/quantity_functions.rs +38 -0
  60. woxi-0.1.0/src/evaluator/dispatch/string_functions.rs +507 -0
  61. woxi-0.1.0/src/evaluator/dispatch/structural.rs +107 -0
  62. woxi-0.1.0/src/evaluator/dispatch/timeseries_functions.rs +59 -0
  63. woxi-0.1.0/src/evaluator/dispatch/wavelet_functions.rs +72 -0
  64. woxi-0.1.0/src/evaluator/function_application.rs +2249 -0
  65. woxi-0.1.0/src/evaluator/listable.rs +1465 -0
  66. woxi-0.1.0/src/evaluator/mod.rs +142 -0
  67. woxi-0.1.0/src/evaluator/part_extraction.rs +780 -0
  68. woxi-0.1.0/src/evaluator/pattern_functions.rs +129 -0
  69. woxi-0.1.0/src/evaluator/pattern_matching.rs +4093 -0
  70. woxi-0.1.0/src/evaluator/scoping.rs +1342 -0
  71. woxi-0.1.0/src/evaluator/string_replace.rs +341 -0
  72. woxi-0.1.0/src/evaluator/type_helpers.rs +86 -0
  73. woxi-0.1.0/src/expr_list.rs +653 -0
  74. woxi-0.1.0/src/functions/assessment_ast.rs +193 -0
  75. woxi-0.1.0/src/functions/assessment_render.rs +237 -0
  76. woxi-0.1.0/src/functions/association_ast.rs +1088 -0
  77. woxi-0.1.0/src/functions/audio_ast/edit.rs +263 -0
  78. woxi-0.1.0/src/functions/audio_ast/filters.rs +354 -0
  79. woxi-0.1.0/src/functions/audio_ast/measure.rs +437 -0
  80. woxi-0.1.0/src/functions/audio_ast/mod.rs +508 -0
  81. woxi-0.1.0/src/functions/audio_ast/spectral.rs +581 -0
  82. woxi-0.1.0/src/functions/boolean_ast.rs +3537 -0
  83. woxi-0.1.0/src/functions/calculus_ast.rs +19376 -0
  84. woxi-0.1.0/src/functions/cellular_automaton_ast.rs +523 -0
  85. woxi-0.1.0/src/functions/chart.rs +2967 -0
  86. woxi-0.1.0/src/functions/control_flow_ast.rs +470 -0
  87. woxi-0.1.0/src/functions/convolve_ast.rs +312 -0
  88. woxi-0.1.0/src/functions/count_roots_ast.rs +516 -0
  89. woxi-0.1.0/src/functions/country_data.rs +465 -0
  90. woxi-0.1.0/src/functions/csv_ast.rs +459 -0
  91. woxi-0.1.0/src/functions/dataset_ast.rs +226 -0
  92. woxi-0.1.0/src/functions/datetime_ast.rs +4446 -0
  93. woxi-0.1.0/src/functions/dendrogram.rs +625 -0
  94. woxi-0.1.0/src/functions/dirichlet_ast.rs +1058 -0
  95. woxi-0.1.0/src/functions/element_data.rs +2780 -0
  96. woxi-0.1.0/src/functions/entity_ast.rs +1135 -0
  97. woxi-0.1.0/src/functions/expr_form.rs +535 -0
  98. woxi-0.1.0/src/functions/field_plot.rs +2000 -0
  99. woxi-0.1.0/src/functions/function_range_ast.rs +226 -0
  100. woxi-0.1.0/src/functions/geo_math.rs +659 -0
  101. woxi-0.1.0/src/functions/geographics.rs +1878 -0
  102. woxi-0.1.0/src/functions/geometric_test_ast.rs +880 -0
  103. woxi-0.1.0/src/functions/graph.rs +5984 -0
  104. woxi-0.1.0/src/functions/graphics.rs +13813 -0
  105. woxi-0.1.0/src/functions/graphicsbox.rs +294 -0
  106. woxi-0.1.0/src/functions/groebner_ast.rs +694 -0
  107. woxi-0.1.0/src/functions/http_ast.rs +1069 -0
  108. woxi-0.1.0/src/functions/image_ast.rs +7643 -0
  109. woxi-0.1.0/src/functions/information_render.rs +216 -0
  110. woxi-0.1.0/src/functions/interval_ast.rs +1284 -0
  111. woxi-0.1.0/src/functions/linear_algebra_ast.rs +10785 -0
  112. woxi-0.1.0/src/functions/list_helpers_ast/aggregation.rs +3706 -0
  113. woxi-0.1.0/src/functions/list_helpers_ast/combinatorics.rs +974 -0
  114. woxi-0.1.0/src/functions/list_helpers_ast/construction.rs +2846 -0
  115. woxi-0.1.0/src/functions/list_helpers_ast/element_access.rs +2348 -0
  116. woxi-0.1.0/src/functions/list_helpers_ast/filtering.rs +2647 -0
  117. woxi-0.1.0/src/functions/list_helpers_ast/functional.rs +1781 -0
  118. woxi-0.1.0/src/functions/list_helpers_ast/mapping.rs +1661 -0
  119. woxi-0.1.0/src/functions/list_helpers_ast/mod.rs +35 -0
  120. woxi-0.1.0/src/functions/list_helpers_ast/properties.rs +939 -0
  121. woxi-0.1.0/src/functions/list_helpers_ast/restructuring.rs +2146 -0
  122. woxi-0.1.0/src/functions/list_helpers_ast/set_operations.rs +1148 -0
  123. woxi-0.1.0/src/functions/list_helpers_ast/sorting.rs +1555 -0
  124. woxi-0.1.0/src/functions/list_helpers_ast/summation.rs +5195 -0
  125. woxi-0.1.0/src/functions/list_helpers_ast/utilities.rs +290 -0
  126. woxi-0.1.0/src/functions/list_plot.rs +811 -0
  127. woxi-0.1.0/src/functions/math_ast/airy.rs +713 -0
  128. woxi-0.1.0/src/functions/math_ast/arithmetic.rs +11628 -0
  129. woxi-0.1.0/src/functions/math_ast/bessel.rs +2098 -0
  130. woxi-0.1.0/src/functions/math_ast/carlson.rs +265 -0
  131. woxi-0.1.0/src/functions/math_ast/complex.rs +2275 -0
  132. woxi-0.1.0/src/functions/math_ast/coordinate_arrays.rs +377 -0
  133. woxi-0.1.0/src/functions/math_ast/digits.rs +4448 -0
  134. woxi-0.1.0/src/functions/math_ast/distributions.rs +19094 -0
  135. woxi-0.1.0/src/functions/math_ast/elementary.rs +4305 -0
  136. woxi-0.1.0/src/functions/math_ast/elliptic.rs +1727 -0
  137. woxi-0.1.0/src/functions/math_ast/gamma.rs +2392 -0
  138. woxi-0.1.0/src/functions/math_ast/hypergeometric.rs +3279 -0
  139. woxi-0.1.0/src/functions/math_ast/integrals.rs +1164 -0
  140. woxi-0.1.0/src/functions/math_ast/jacobi.rs +1324 -0
  141. woxi-0.1.0/src/functions/math_ast/mathieu.rs +139 -0
  142. woxi-0.1.0/src/functions/math_ast/misc_special.rs +3693 -0
  143. woxi-0.1.0/src/functions/math_ast/mod.rs +94 -0
  144. woxi-0.1.0/src/functions/math_ast/number_theory.rs +9857 -0
  145. woxi-0.1.0/src/functions/math_ast/numeric_utils.rs +1430 -0
  146. woxi-0.1.0/src/functions/math_ast/numerical.rs +7433 -0
  147. woxi-0.1.0/src/functions/math_ast/orthogonal_polynomials.rs +4461 -0
  148. woxi-0.1.0/src/functions/math_ast/polylog.rs +559 -0
  149. woxi-0.1.0/src/functions/math_ast/random.rs +1901 -0
  150. woxi-0.1.0/src/functions/math_ast/statistics.rs +10167 -0
  151. woxi-0.1.0/src/functions/math_ast/triangles.rs +531 -0
  152. woxi-0.1.0/src/functions/math_ast/trigonometric.rs +6335 -0
  153. woxi-0.1.0/src/functions/math_ast/weierstrass.rs +411 -0
  154. woxi-0.1.0/src/functions/math_ast/zeta_functions.rs +2241 -0
  155. woxi-0.1.0/src/functions/memory.rs +371 -0
  156. woxi-0.1.0/src/functions/mod.rs +104 -0
  157. woxi-0.1.0/src/functions/molecule_ast.rs +1047 -0
  158. woxi-0.1.0/src/functions/molecule_render.rs +670 -0
  159. woxi-0.1.0/src/functions/music_ast.rs +2910 -0
  160. woxi-0.1.0/src/functions/music_font.rs +224 -0
  161. woxi-0.1.0/src/functions/music_midi.rs +350 -0
  162. woxi-0.1.0/src/functions/music_render.rs +1565 -0
  163. woxi-0.1.0/src/functions/number_line_plot.rs +718 -0
  164. woxi-0.1.0/src/functions/ode_ast.rs +3512 -0
  165. woxi-0.1.0/src/functions/parametric_plot.rs +425 -0
  166. woxi-0.1.0/src/functions/periodic_table_plot.rs +539 -0
  167. woxi-0.1.0/src/functions/plot.rs +6449 -0
  168. woxi-0.1.0/src/functions/plot3d.rs +5541 -0
  169. woxi-0.1.0/src/functions/plot_epilog.rs +495 -0
  170. woxi-0.1.0/src/functions/polyhedron_data.rs +383 -0
  171. woxi-0.1.0/src/functions/polynomial_ast/apart.rs +1734 -0
  172. woxi-0.1.0/src/functions/polynomial_ast/cancel.rs +924 -0
  173. woxi-0.1.0/src/functions/polynomial_ast/coefficient.rs +1479 -0
  174. woxi-0.1.0/src/functions/polynomial_ast/collect.rs +790 -0
  175. woxi-0.1.0/src/functions/polynomial_ast/cyclotomic.rs +177 -0
  176. woxi-0.1.0/src/functions/polynomial_ast/decompose.rs +556 -0
  177. woxi-0.1.0/src/functions/polynomial_ast/discriminant.rs +133 -0
  178. woxi-0.1.0/src/functions/polynomial_ast/eliminate.rs +861 -0
  179. woxi-0.1.0/src/functions/polynomial_ast/expand.rs +1886 -0
  180. woxi-0.1.0/src/functions/polynomial_ast/exponent.rs +696 -0
  181. woxi-0.1.0/src/functions/polynomial_ast/factor.rs +4605 -0
  182. woxi-0.1.0/src/functions/polynomial_ast/function_expand.rs +464 -0
  183. woxi-0.1.0/src/functions/polynomial_ast/gf_factor.rs +606 -0
  184. woxi-0.1.0/src/functions/polynomial_ast/helpers.rs +221 -0
  185. woxi-0.1.0/src/functions/polynomial_ast/horner.rs +235 -0
  186. woxi-0.1.0/src/functions/polynomial_ast/interpolating_polynomial.rs +144 -0
  187. woxi-0.1.0/src/functions/polynomial_ast/minimal_polynomial.rs +2138 -0
  188. woxi-0.1.0/src/functions/polynomial_ast/mod.rs +64 -0
  189. woxi-0.1.0/src/functions/polynomial_ast/polynomial_division.rs +455 -0
  190. woxi-0.1.0/src/functions/polynomial_ast/polynomial_extended_gcd.rs +184 -0
  191. woxi-0.1.0/src/functions/polynomial_ast/polynomial_gcd.rs +607 -0
  192. woxi-0.1.0/src/functions/polynomial_ast/polynomial_mod.rs +155 -0
  193. woxi-0.1.0/src/functions/polynomial_ast/polynomial_q.rs +240 -0
  194. woxi-0.1.0/src/functions/polynomial_ast/reduce.rs +3141 -0
  195. woxi-0.1.0/src/functions/polynomial_ast/resultant.rs +1190 -0
  196. woxi-0.1.0/src/functions/polynomial_ast/simplify.rs +9392 -0
  197. woxi-0.1.0/src/functions/polynomial_ast/solve.rs +10004 -0
  198. woxi-0.1.0/src/functions/polynomial_ast/symmetric_reduction.rs +309 -0
  199. woxi-0.1.0/src/functions/polynomial_ast/to_radicals.rs +603 -0
  200. woxi-0.1.0/src/functions/polynomial_ast/together.rs +2313 -0
  201. woxi-0.1.0/src/functions/polynomial_ast/zassenhaus.rs +435 -0
  202. woxi-0.1.0/src/functions/predicate_ast.rs +3197 -0
  203. woxi-0.1.0/src/functions/quantity_ast.rs +2981 -0
  204. woxi-0.1.0/src/functions/query_ast.rs +116 -0
  205. woxi-0.1.0/src/functions/region.rs +286 -0
  206. woxi-0.1.0/src/functions/resolve_ast.rs +725 -0
  207. woxi-0.1.0/src/functions/root_ast.rs +1582 -0
  208. woxi-0.1.0/src/functions/rsolve_ast.rs +1590 -0
  209. woxi-0.1.0/src/functions/scoping.rs +17 -0
  210. woxi-0.1.0/src/functions/sound.rs +352 -0
  211. woxi-0.1.0/src/functions/string_ast.rs +12510 -0
  212. woxi-0.1.0/src/functions/sum_convergence_ast.rs +337 -0
  213. woxi-0.1.0/src/functions/tabular_ast.rs +417 -0
  214. woxi-0.1.0/src/functions/ternary_list_plot.rs +320 -0
  215. woxi-0.1.0/src/functions/timeline_plot.rs +489 -0
  216. woxi-0.1.0/src/functions/timeseries_ast.rs +754 -0
  217. woxi-0.1.0/src/functions/transliterate_ast.rs +598 -0
  218. woxi-0.1.0/src/functions/tree_form.rs +653 -0
  219. woxi-0.1.0/src/functions/trig_factor_ast.rs +384 -0
  220. woxi-0.1.0/src/functions/turing_machine_ast.rs +286 -0
  221. woxi-0.1.0/src/functions/txt_ast.rs +130 -0
  222. woxi-0.1.0/src/functions/voronoi.rs +989 -0
  223. woxi-0.1.0/src/functions/wavelet_ast/continuous.rs +843 -0
  224. woxi-0.1.0/src/functions/wavelet_ast/data.rs +1750 -0
  225. woxi-0.1.0/src/functions/wavelet_ast/filters.rs +666 -0
  226. woxi-0.1.0/src/functions/wavelet_ast/mod.rs +386 -0
  227. woxi-0.1.0/src/functions/wavelet_ast/phipsi.rs +329 -0
  228. woxi-0.1.0/src/functions/wavelet_ast/plots.rs +397 -0
  229. woxi-0.1.0/src/functions/wavelet_ast/tables.rs +549 -0
  230. woxi-0.1.0/src/functions/wavelet_ast/transforms.rs +959 -0
  231. woxi-0.1.0/src/functions/wikidata_ast.rs +768 -0
  232. woxi-0.1.0/src/functions/wl_serialize.rs +248 -0
  233. woxi-0.1.0/src/functions/wxf_ast.rs +652 -0
  234. woxi-0.1.0/src/functions/xlsx_ast.rs +292 -0
  235. woxi-0.1.0/src/functions/ztransform_ast.rs +1475 -0
  236. woxi-0.1.0/src/jupyter.rs +378 -0
  237. woxi-0.1.0/src/lib.rs +4919 -0
  238. woxi-0.1.0/src/main.rs +316 -0
  239. woxi-0.1.0/src/notebook.rs +2109 -0
  240. woxi-0.1.0/src/repl.rs +265 -0
  241. woxi-0.1.0/src/syntax.rs +13944 -0
  242. woxi-0.1.0/src/utils.rs +33 -0
  243. woxi-0.1.0/src/wasm.rs +629 -0
  244. woxi-0.1.0/src/wolfram.pest +748 -0
  245. woxi-0.1.0/tests/SUMMARY.md +1562 -0
  246. woxi-0.1.0/tests/cli_tests.rs +311 -0
  247. woxi-0.1.0/tests/interpreter_tests.rs +1392 -0
  248. woxi-0.1.0/tests/miscellaneous_tests.rs +8 -0
  249. woxi-0.1.0/tests/script_snapshot_tests.rs +1562 -0
  250. woxi-0.1.0/woxi-py/.gitignore +6 -0
  251. woxi-0.1.0/woxi-py/Cargo.toml +29 -0
  252. woxi-0.1.0/woxi-py/LICENSE +661 -0
  253. woxi-0.1.0/woxi-py/readme.md +81 -0
  254. woxi-0.1.0/woxi-py/src/lib.rs +212 -0
  255. woxi-0.1.0/woxi-py/tests/test_woxi.py +138 -0
@@ -0,0 +1,63 @@
1
+ [profile.default]
2
+ # Fail any individual test that takes longer than 20 seconds.
3
+ slow-timeout = { period = "20s", terminate-after = 1 }
4
+
5
+ # NOTE: nextest applies the FIRST matching override for a given setting.
6
+ # The most specific overrides must therefore come BEFORE the broad
7
+ # `/^script_/` rule below, or they will be shadowed by it.
8
+
9
+ # `D[x^x, {x, 10}]` is intentionally a heavy regression test for the Plus
10
+ # comparator panic — order 10 matches the originally panicking input. It
11
+ # takes ~10s standalone in debug builds and can brush against the default
12
+ # 20s timeout under full parallel load. Give it a wider window.
13
+ [[profile.default.overrides]]
14
+ filter = 'test(high_order_derivative_of_x_x_does_not_panic)'
15
+ slow-timeout = { period = "60s", terminate-after = 1 }
16
+
17
+ # `fourier_matrix_boundary_materializes` materializes a large matrix and is
18
+ # allocation-heavy: ~10s solo, but it exceeds the 20s default timeout under the
19
+ # parallel contention of a full CI run (the job otherwise fails here). Give it
20
+ # a wider window.
21
+ [[profile.default.overrides]]
22
+ filter = 'test(fourier_matrix_boundary_materializes)'
23
+ slow-timeout = { period = "90s", terminate-after = 1 }
24
+
25
+ # The remaining (non-`#[ignore]`d) RosettaCode script snapshots run a few
26
+ # seconds in debug builds; under full parallel load they can brush past the
27
+ # default 20s timeout. Give them a safety ceiling. The genuinely heavy
28
+ # scripts (tens of seconds each in debug) are marked `#[ignore]` via the
29
+ # `slow_script_test!` macro and run only via `make test-slow` under the
30
+ # `slow` profile below — they never run during `make test`.
31
+ [[profile.default.overrides]]
32
+ filter = 'test(/^script_/)'
33
+ slow-timeout = { period = "120s", terminate-after = 1 }
34
+
35
+ # Profile for `make test-slow` (`cargo nextest run --features slow-tests
36
+ # --profile slow --run-ignored only`). The heavy `#[ignore]`d scripts run with heavy
37
+ # mutual CPU contention and are ~270s+ standalone in debug builds, so give
38
+ # every test a very wide window.
39
+ #
40
+ # NOTE: a custom profile inherits `[[profile.default.overrides]]`, and the
41
+ # active profile's own overrides are evaluated *before* the inherited ones.
42
+ # Without the explicit `script_` override below, the default profile's
43
+ # 120s `/^script_/` rule would shadow this profile's 900s base and the
44
+ # heavy scripts would (wrongly) time out at 120s.
45
+ [profile.slow]
46
+ slow-timeout = { period = "900s", terminate-after = 1 }
47
+
48
+ # `script_egyptian_fractions` is allocation-throughput-bound (~330s standalone
49
+ # in debug). Run concurrently with the other ~23 heavy scripts, the shared
50
+ # allocator / memory-bandwidth contention on a CI runner pushes it past the
51
+ # 900s ceiling and the job fails. Reserve all test threads so it runs in
52
+ # isolation — its wall time then stays close to standalone — and give it a wide
53
+ # timeout for the slower-than-local CI hardware. This override must precede the
54
+ # broad `/^script_/` rule below, since nextest applies the FIRST matching
55
+ # override for a given setting.
56
+ [[profile.slow.overrides]]
57
+ filter = 'test(script_egyptian_fractions)'
58
+ threads-required = 'num-cpus'
59
+ slow-timeout = { period = "1800s", terminate-after = 1 }
60
+
61
+ [[profile.slow.overrides]]
62
+ filter = 'test(/^script_/)'
63
+ slow-timeout = { period = "900s", terminate-after = 1 }
@@ -0,0 +1,30 @@
1
+ # Keep the build context small and reproducible. Anything not needed
2
+ # to compile + test the Rust code is excluded.
3
+
4
+ .git
5
+ .direnv
6
+ .env
7
+ .DS_Store
8
+ target
9
+ node_modules
10
+ tests/book
11
+ tests/jupyterlite
12
+ tests/playground/pkg
13
+ tests/_*
14
+ tests/scripts/_*
15
+
16
+ # Generated artefacts and scratch files
17
+ factorials
18
+ mathics
19
+ examples
20
+ *-checkpoint.ipynb
21
+ .jupyterlite.doit.db
22
+ sample.txt
23
+
24
+ # Editor / IDE state
25
+ .idea
26
+ .vscode
27
+
28
+ # Don't ship the Dockerfile itself into the build context
29
+ Dockerfile
30
+ .dockerignore
woxi-0.1.0/.envrc ADDED
@@ -0,0 +1 @@
1
+ use flake
woxi-0.1.0/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ .DS_Store
2
+ /.claude
3
+ /*-checkpoint.ipynb
4
+ /.direnv
5
+ /.env
6
+ /.jupyterlite.doit.db
7
+ /examples
8
+ /mathics
9
+ /node_modules
10
+ /target
11
+ /tests/_*
12
+ /tests/book
13
+ /tests/jupyterlite
14
+ /tests/playground/pkg
15
+ /tests/playground/vendor
16
+ /tests/scripts/_*
17
+ /todos.md
@@ -0,0 +1,14 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ - id: clippy-fix
5
+ name: Clippy Fix
6
+ language: unsupported
7
+ entry: cargo clippy --fix --allow-dirty
8
+ pass_filenames: false
9
+
10
+ - id: cargo-fmt
11
+ name: Cargo Format
12
+ language: unsupported
13
+ entry: cargo fmt
14
+ pass_filenames: false
woxi-0.1.0/AGENTS.md ADDED
@@ -0,0 +1,57 @@
1
+ ## Scope
2
+
3
+ This repo contains several related sub-projects:
4
+
5
+ - Woxi
6
+ - Interpreter for a subset of the Wolfram Language
7
+ - Is a computer algebra system (CAS) and therefore all computations must be solved symbolically
8
+ - Woxi Playground
9
+ - A simple playground to try out Woxi in the browser (tests/playground)
10
+ - Woxi JupyterLite
11
+ - JupyterLite instance with an integrated Woxi kernel (tests/jupyterlite)
12
+ - Woxi Studio
13
+ - A native notebook editor for Wolfram Language `.nb` files, built with `iced` (woxi-studio)
14
+ - Woxi for Python
15
+ - PyO3/maturin-based Python package wrapping the interpreter,
16
+ published to PyPI as `woxi` (woxi-py)
17
+
18
+
19
+ ## Environment
20
+
21
+ Nix Flake is used to manage system dependencies.
22
+ Therefore, some tools in the path are the GNU versions.
23
+ E.g. GNU sed, GNU make, GNU coreutils, and GNU bash.
24
+
25
+
26
+ ## Development
27
+
28
+ There is 3 levels of tests:
29
+
30
+ 1. Unit tests in ./tests/*.rs files.
31
+ They are the fastest to execute and
32
+ there should be a unit test for every feature / language construct here.
33
+ 2. Snapshots tests in ./tests/scripts/*.wls files
34
+ They ensure the code also works in files and
35
+ has exactly the same output when run with `wolframscript`.
36
+ 3. Documentation tests in ./tests/cli/*.md files.
37
+ Serves as documentation and also ensures `woxi` and `wolframscript`
38
+ have the same output for shorter and more diverse code snippets.
39
+ Those tests should be less comprehensive than the unit tests and
40
+ focus on illustrative examples.
41
+
42
+ **Follow those rules:**
43
+
44
+ - Whenever you change something, add unit tests for it.
45
+ - When fixing a bug, always add a regression test so the bug wont't occur again.
46
+ - Always run `make test` after any changes to rule out any regressions.
47
+ - Never implement features or tests only for special cases like e.g. one specific number.
48
+ Make sure to implement it for all possible cases!
49
+ - Use `wolframscript -code 'Plus[1, 2]'` to verify the output of Wolfram Language code.
50
+ The output of Woxi must 100% match the output of wolframscript.
51
+ - Do not write code to temporary files. Simply use `cargo run -- eval '<code>'`.
52
+ - If you stumble upon a pre-existing issue, do not try to ignore it or work around it,
53
+ but rather fix it right away.
54
+ - After implementing a new function, make sure to update functions.csv
55
+ including a description and an effect_level.
56
+ - To see the graphical output of expressions wrap them with:
57
+ `ExportString[<expression>, "SVG"]`
woxi-0.1.0/CLAUDE.md ADDED
@@ -0,0 +1,57 @@
1
+ ## Scope
2
+
3
+ This repo contains several related sub-projects:
4
+
5
+ - Woxi
6
+ - Interpreter for a subset of the Wolfram Language
7
+ - Is a computer algebra system (CAS) and therefore all computations must be solved symbolically
8
+ - Woxi Playground
9
+ - A simple playground to try out Woxi in the browser (tests/playground)
10
+ - Woxi JupyterLite
11
+ - JupyterLite instance with an integrated Woxi kernel (tests/jupyterlite)
12
+ - Woxi Studio
13
+ - A native notebook editor for Wolfram Language `.nb` files, built with `iced` (woxi-studio)
14
+ - Woxi for Python
15
+ - PyO3/maturin-based Python package wrapping the interpreter,
16
+ published to PyPI as `woxi` (woxi-py)
17
+
18
+
19
+ ## Environment
20
+
21
+ Nix Flake is used to manage system dependencies.
22
+ Therefore, some tools in the path are the GNU versions.
23
+ E.g. GNU sed, GNU make, GNU coreutils, and GNU bash.
24
+
25
+
26
+ ## Development
27
+
28
+ There is 3 levels of tests:
29
+
30
+ 1. Unit tests in ./tests/*.rs files.
31
+ They are the fastest to execute and
32
+ there should be a unit test for every feature / language construct here.
33
+ 2. Snapshots tests in ./tests/scripts/*.wls files
34
+ They ensure the code also works in files and
35
+ has exactly the same output when run with `wolframscript`.
36
+ 3. Documentation tests in ./tests/cli/*.md files.
37
+ Serves as documentation and also ensures `woxi` and `wolframscript`
38
+ have the same output for shorter and more diverse code snippets.
39
+ Those tests should be less comprehensive than the unit tests and
40
+ focus on illustrative examples.
41
+
42
+ **Follow those rules:**
43
+
44
+ - Whenever you change something, add unit tests for it.
45
+ - When fixing a bug, always add a regression test so the bug wont't occur again.
46
+ - Always run `make test` after any changes to rule out any regressions.
47
+ - Never implement features or tests only for special cases like e.g. one specific number.
48
+ Make sure to implement it for all possible cases!
49
+ - Use `wolframscript -code 'Plus[1, 2]'` to verify the output of Wolfram Language code.
50
+ The output of Woxi must 100% match the output of wolframscript.
51
+ - Do not write code to temporary files. Simply use `cargo run -- eval '<code>'`.
52
+ - If you stumble upon a pre-existing issue, do not try to ignore it or work around it,
53
+ but rather fix it right away.
54
+ - After implementing a new function, make sure to update functions.csv
55
+ including a description and an effect_level.
56
+ - To see the graphical output of expressions wrap them with:
57
+ `ExportString[<expression>, "SVG"]`