@cortex-js/compute-engine 0.55.4 → 0.55.6

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 (258) hide show
  1. package/dist/compile.esm.js +137 -545
  2. package/dist/compile.min.esm.js +60 -430
  3. package/dist/compile.min.umd.cjs +66 -436
  4. package/dist/compile.umd.cjs +137 -545
  5. package/dist/compute-engine.esm.js +227 -563
  6. package/dist/compute-engine.min.esm.js +68 -437
  7. package/dist/compute-engine.min.umd.cjs +68 -437
  8. package/dist/compute-engine.umd.cjs +227 -563
  9. package/dist/core.esm.js +225 -562
  10. package/dist/core.min.esm.js +67 -436
  11. package/dist/core.min.umd.cjs +67 -436
  12. package/dist/core.umd.cjs +225 -562
  13. package/dist/interval.esm.js +136 -60
  14. package/dist/interval.min.esm.js +7 -7
  15. package/dist/interval.min.umd.cjs +7 -7
  16. package/dist/interval.umd.cjs +136 -60
  17. package/dist/latex-syntax.esm.js +219 -74
  18. package/dist/latex-syntax.min.esm.js +7 -6
  19. package/dist/latex-syntax.min.umd.cjs +7 -6
  20. package/dist/latex-syntax.umd.cjs +219 -74
  21. package/dist/math-json.esm.js +2 -2
  22. package/dist/math-json.min.esm.js +2 -2
  23. package/dist/math-json.min.umd.cjs +2 -2
  24. package/dist/math-json.umd.cjs +2 -2
  25. package/dist/numerics.esm.js +2 -2
  26. package/dist/numerics.min.esm.js +2 -2
  27. package/dist/numerics.min.umd.cjs +2 -2
  28. package/dist/numerics.umd.cjs +2 -2
  29. package/dist/types/big-decimal/big-decimal.d.ts +1 -1
  30. package/dist/types/big-decimal/index.d.ts +1 -1
  31. package/dist/types/big-decimal/transcendentals.d.ts +1 -1
  32. package/dist/types/big-decimal/utils.d.ts +1 -1
  33. package/dist/types/common/ansi-codes.d.ts +1 -1
  34. package/dist/types/common/configuration-change.d.ts +1 -1
  35. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  36. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  37. package/dist/types/common/interruptible.d.ts +1 -1
  38. package/dist/types/common/one-of.d.ts +1 -1
  39. package/dist/types/common/signals.d.ts +1 -1
  40. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  41. package/dist/types/common/type/boxed-type.d.ts +1 -1
  42. package/dist/types/common/type/lexer.d.ts +1 -1
  43. package/dist/types/common/type/parse.d.ts +1 -1
  44. package/dist/types/common/type/parser.d.ts +1 -1
  45. package/dist/types/common/type/primitive.d.ts +1 -1
  46. package/dist/types/common/type/reduce.d.ts +1 -1
  47. package/dist/types/common/type/serialize.d.ts +1 -1
  48. package/dist/types/common/type/subtype.d.ts +1 -1
  49. package/dist/types/common/type/type-builder.d.ts +1 -1
  50. package/dist/types/common/type/types.d.ts +1 -1
  51. package/dist/types/common/type/utils.d.ts +1 -1
  52. package/dist/types/common/utils.d.ts +1 -1
  53. package/dist/types/compile.d.ts +1 -1
  54. package/dist/types/compute-engine/assume.d.ts +1 -1
  55. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
  56. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
  69. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  71. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  72. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  73. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  74. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  75. package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
  76. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  77. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  78. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  79. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  80. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  81. package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
  82. package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
  83. package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
  84. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  85. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  86. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  87. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  88. package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
  89. package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
  90. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  91. package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
  92. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  93. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  94. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  95. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  96. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
  97. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  98. package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
  99. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  100. package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
  101. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  102. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  103. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  104. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  105. package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  108. package/dist/types/compute-engine/compilation/gpu-target.d.ts +1 -47
  109. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
  110. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/types.d.ts +1 -48
  113. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  114. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  115. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  116. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  117. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  118. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  119. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  120. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  121. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  132. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  133. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  134. package/dist/types/compute-engine/global-types.d.ts +1 -1
  135. package/dist/types/compute-engine/index.d.ts +2 -1
  136. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  137. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  138. package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
  139. package/dist/types/compute-engine/interval/index.d.ts +1 -1
  140. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  141. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  142. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  143. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  144. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  145. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  146. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  147. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  148. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  149. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  150. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  151. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +4 -2
  168. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  171. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  172. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  173. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  174. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  175. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  176. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  177. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  178. package/dist/types/compute-engine/library/core.d.ts +1 -1
  179. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  180. package/dist/types/compute-engine/library/library.d.ts +1 -1
  181. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  182. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  183. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  184. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  185. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  186. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  187. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  188. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  189. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  190. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  191. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  192. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  193. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  194. package/dist/types/compute-engine/library/units.d.ts +1 -1
  195. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  196. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  197. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  198. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  199. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  200. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  201. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  202. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  203. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  204. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  205. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  206. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  207. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  208. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  209. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  211. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  217. package/dist/types/compute-engine/oeis.d.ts +1 -1
  218. package/dist/types/compute-engine/sequence.d.ts +1 -1
  219. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  220. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  221. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  222. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  223. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  224. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  225. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  226. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  227. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  228. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  229. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  230. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  238. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  239. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  240. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  241. package/dist/types/compute-engine/types-engine.d.ts +1 -1
  242. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  243. package/dist/types/compute-engine/types-expression.d.ts +1 -1
  244. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
  245. package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
  246. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  247. package/dist/types/compute-engine/types.d.ts +1 -1
  248. package/dist/types/compute-engine.d.ts +2 -1
  249. package/dist/types/core.d.ts +1 -1
  250. package/dist/types/interval.d.ts +1 -1
  251. package/dist/types/latex-syntax.d.ts +2 -2
  252. package/dist/types/math-json/symbols.d.ts +1 -1
  253. package/dist/types/math-json/types.d.ts +1 -1
  254. package/dist/types/math-json/utils.d.ts +1 -1
  255. package/dist/types/math-json.d.ts +2 -2
  256. package/dist/types/numerics.d.ts +1 -1
  257. package/package.json +1 -1
  258. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +0 -13
@@ -1,4 +1,4 @@
1
- /** Compute Engine 0.55.4 */
1
+ /** Compute Engine 0.55.6 */
2
2
 
3
3
  // node_modules/complex-esm/dist/src/complex.js
4
4
  var cosh = Math.cosh || function(x) {
@@ -11037,10 +11037,6 @@ var DEFINITIONS_CORE = [
11037
11037
  // Lagrange notation
11038
11038
  {
11039
11039
  name: "Derivative",
11040
- // @todo: Leibniz notation: {% latex " \\frac{d^n}{dx^n} f(x)" %}
11041
- // @todo: Euler modified notation: This notation is used by Mathematica. The Euler notation uses `D` instead of
11042
- // `\partial`: `\partial_{x} f`, `\partial_{x,y} f`
11043
- // Newton notation (\dot{v}, \ddot{v}) is implemented below
11044
11040
  serialize: (serializer, expr2) => {
11045
11041
  const degree = machineValue(operand(expr2, 2)) ?? 1;
11046
11042
  const base = serializer.serialize(operand(expr2, 1));
@@ -12078,14 +12074,18 @@ var DEFINITIONS_SETS = [
12078
12074
  return ["Complement", lhs];
12079
12075
  }
12080
12076
  // precedence: 240,
12081
- // @todo: serialize for the multiple argument case
12082
12077
  },
12083
12078
  {
12084
12079
  name: "Complement",
12085
12080
  latexTrigger: ["^", "<{>", "\\complement", "<}>"],
12086
- kind: "postfix"
12081
+ kind: "postfix",
12087
12082
  // precedence: 240,
12088
- // @todo: serialize for the multiple argument case
12083
+ serialize: (serializer, expr2) => {
12084
+ return joinLatex([
12085
+ serializer.serialize(operand(expr2, 1)),
12086
+ "^\\complement"
12087
+ ]);
12088
+ }
12089
12089
  },
12090
12090
  {
12091
12091
  name: "Intersection",
@@ -12172,7 +12172,6 @@ var DEFINITIONS_SETS = [
12172
12172
  // commands like \rbrack a, b \rbrack which are unambiguous.
12173
12173
  {
12174
12174
  name: "Multiple",
12175
- // @todo: parse
12176
12175
  serialize: serializeSet
12177
12176
  },
12178
12177
  {
@@ -12181,14 +12180,28 @@ var DEFINITIONS_SETS = [
12181
12180
  kind: "infix",
12182
12181
  precedence: 350
12183
12182
  },
12183
+ // \mid as a separator/operator (used in set-builder notation: {x \mid x > 0})
12184
+ // Low precedence so it binds loosely — everything on each side is parsed first
12185
+ {
12186
+ name: "Divides",
12187
+ latexTrigger: ["\\mid"],
12188
+ kind: "infix",
12189
+ precedence: 160
12190
+ },
12184
12191
  {
12185
12192
  name: "Set",
12186
12193
  kind: "matchfix",
12187
12194
  openTrigger: "{",
12188
12195
  closeTrigger: "}",
12189
- // @todo: the set syntax can also include conditions...
12190
12196
  parse: (_parser, body) => {
12191
12197
  if (isEmptySequence(body)) return "EmptySet";
12198
+ const h = operator(body);
12199
+ if (h === "Divides" || h === "Colon") {
12200
+ const expr2 = operand(body, 1);
12201
+ const condition = operand(body, 2);
12202
+ if (expr2 !== null && condition !== null)
12203
+ return ["Set", expr2, ["Condition", condition]];
12204
+ }
12192
12205
  if (operator(body) == "Delimiter" && stringValue(operand(body, 2)) === ",") {
12193
12206
  body = operand(body, 1);
12194
12207
  }
@@ -12196,6 +12209,17 @@ var DEFINITIONS_SETS = [
12196
12209
  return ["Set", ...operands(body)];
12197
12210
  },
12198
12211
  serialize: (serializer, expr2) => {
12212
+ if (nops(expr2) === 2 && operator(operand(expr2, 2)) === "Condition") {
12213
+ const condition = operand(expr2, 2);
12214
+ return joinLatex([
12215
+ "\\lbrace",
12216
+ serializer.serialize(operand(expr2, 1)),
12217
+ "\\mid",
12218
+ // Serialize the inner expression of the Condition wrapper
12219
+ serializer.serialize(operand(condition, 1)),
12220
+ "\\rbrace"
12221
+ ]);
12222
+ }
12199
12223
  return joinLatex([
12200
12224
  "\\lbrace",
12201
12225
  operands(expr2).map((x) => serializer.serialize(x)).join(", "),
@@ -12362,23 +12386,6 @@ function serializeSet(serializer, expr2) {
12362
12386
  if (expr2 === null) return "";
12363
12387
  const h = operator(expr2);
12364
12388
  if (!h) return "";
12365
- if (h === "Set") {
12366
- if (nops(expr2) === 0) return "\\emptyset";
12367
- if (nops(expr2) === 2 && operator(operand(expr2, 2)) === "Condition") {
12368
- return joinLatex([
12369
- "\\left\\lbrace",
12370
- serializer.serialize(operand(expr2, 1)),
12371
- "\\middle\\mid",
12372
- serializer.serialize(operand(expr2, 2)),
12373
- "\\right\\rbrace"
12374
- ]);
12375
- }
12376
- return joinLatex([
12377
- "\\left\\lbrace",
12378
- ...operands(expr2).map((x) => serializer.serialize(x) + " ,"),
12379
- "\\right\\rbrace"
12380
- ]);
12381
- }
12382
12389
  if (h === "Multiple") {
12383
12390
  }
12384
12391
  if (h === "Range") {
@@ -13526,11 +13533,13 @@ var DEFINITIONS_ARITHMETIC = [
13526
13533
  if (!parser.match("_")) return null;
13527
13534
  const base = parser.parseGroup();
13528
13535
  if (operator(base) !== "To") return null;
13529
- const expr2 = parser.parseArguments("implicit");
13536
+ const expr2 = parser.parseExpression({
13537
+ minPrec: MULTIPLICATION_PRECEDENCE
13538
+ });
13530
13539
  if (!expr2) return null;
13531
13540
  return [
13532
13541
  "Limit",
13533
- ["Function", expr2[0], operand(base, 1)],
13542
+ ["Function", expr2, operand(base, 1)],
13534
13543
  operand(base, 2)
13535
13544
  ];
13536
13545
  },
@@ -15827,12 +15836,52 @@ var DEFINITIONS_UNITS = [
15827
15836
  ];
15828
15837
 
15829
15838
  // src/compute-engine/latex-syntax/dictionary/definitions-other.ts
15839
+ var TEX_UNITS = [
15840
+ "pt",
15841
+ "em",
15842
+ "mu",
15843
+ "ex",
15844
+ "mm",
15845
+ "cm",
15846
+ "in",
15847
+ "bp",
15848
+ "sp",
15849
+ "dd",
15850
+ "cc",
15851
+ "pc",
15852
+ "nc",
15853
+ "nd"
15854
+ ];
15855
+ function skipTexDimension(parser) {
15856
+ parser.skipSpace();
15857
+ if (parser.peek === "-" || parser.peek === "+") parser.nextToken();
15858
+ while (/^[\d.]$/.test(parser.peek)) parser.nextToken();
15859
+ for (const unit of TEX_UNITS) {
15860
+ if (parser.matchAll([...unit])) return;
15861
+ }
15862
+ }
15830
15863
  function parseSingleArg(cmd) {
15831
15864
  return (parser) => {
15832
15865
  const arg = parser.parseGroup();
15833
15866
  return arg === null ? [cmd] : [cmd, arg];
15834
15867
  };
15835
15868
  }
15869
+ function parseMathStyleSwitch(mathStyle) {
15870
+ return (parser) => {
15871
+ const body = parser.parseExpression();
15872
+ if (body !== null && !isEmptySequence(body))
15873
+ return ["Annotated", body, { dict: { mathStyle } }];
15874
+ return "Nothing";
15875
+ };
15876
+ }
15877
+ function parseSizeSwitch(size) {
15878
+ return (parser) => {
15879
+ const body = parser.parseExpression();
15880
+ if (body !== null && !isEmptySequence(body))
15881
+ return ["Annotated", body, { dict: { size } }];
15882
+ return "Nothing";
15883
+ };
15884
+ }
15836
15885
  var DEFINITIONS_OTHERS = [
15837
15886
  {
15838
15887
  name: "Overscript",
@@ -16072,80 +16121,71 @@ var DEFINITIONS_OTHERS = [
16072
16121
  },
16073
16122
  {
16074
16123
  latexTrigger: ["\\displaystyle"],
16075
- parse: () => "Nothing"
16076
- // @todo: parse as ['Annotated'...]
16124
+ parse: parseMathStyleSwitch("normal")
16077
16125
  },
16078
16126
  {
16079
16127
  latexTrigger: ["\\textstyle"],
16080
- parse: () => "Nothing"
16081
- // @todo: parse as ['Annotated'...]
16128
+ parse: parseMathStyleSwitch("compact")
16082
16129
  },
16083
16130
  {
16084
16131
  latexTrigger: ["\\scriptstyle"],
16085
- parse: () => "Nothing"
16086
- // @todo: parse as ['Annotated'...]
16132
+ parse: parseMathStyleSwitch("script")
16087
16133
  },
16088
16134
  {
16089
16135
  latexTrigger: ["\\scriptscriptstyle"],
16090
- parse: () => "Nothing"
16091
- // @todo: parse as ['Annotated'...]
16136
+ parse: parseMathStyleSwitch("scriptscript")
16092
16137
  },
16093
16138
  {
16094
16139
  latexTrigger: ["\\color"],
16095
16140
  parse: (parser) => {
16096
- parser.parseGroup();
16141
+ const color = parser.parseStringGroup();
16142
+ if (color !== null) {
16143
+ const body = parser.parseExpression();
16144
+ if (body !== null && !isEmptySequence(body))
16145
+ return ["Annotated", body, { dict: { color } }];
16146
+ }
16097
16147
  return "Nothing";
16098
16148
  }
16099
16149
  },
16100
16150
  {
16101
16151
  latexTrigger: ["\\tiny"],
16102
- parse: () => "Nothing"
16103
- // @todo: parse as ['Annotated'...]
16152
+ parse: parseSizeSwitch(1)
16104
16153
  },
16105
16154
  {
16106
16155
  latexTrigger: ["\\scriptsize"],
16107
- parse: () => "Nothing"
16108
- // @todo: parse as ['Annotated'...]
16156
+ parse: parseSizeSwitch(2)
16109
16157
  },
16110
16158
  {
16111
16159
  latexTrigger: ["\\footnotesize"],
16112
- parse: () => "Nothing"
16113
- // @todo: parse as ['Annotated'...]
16160
+ parse: parseSizeSwitch(3)
16114
16161
  },
16115
16162
  {
16116
16163
  latexTrigger: ["\\small"],
16117
- parse: () => "Nothing"
16118
- // @todo: parse as ['Annotated'...]
16164
+ parse: parseSizeSwitch(4)
16119
16165
  },
16120
16166
  {
16121
16167
  latexTrigger: ["\\normalsize"],
16122
- parse: () => "Nothing"
16123
- // @todo: parse as ['Annotated'...]
16168
+ parse: parseSizeSwitch(5)
16124
16169
  },
16125
16170
  {
16126
16171
  latexTrigger: ["\\large"],
16127
- parse: () => "Nothing"
16128
- // @todo: parse as ['Annotated'...]
16172
+ parse: parseSizeSwitch(6)
16129
16173
  },
16130
16174
  {
16131
16175
  latexTrigger: ["\\Large"],
16132
- parse: () => "Nothing"
16133
- // @todo: parse as ['Annotated'...]
16176
+ parse: parseSizeSwitch(7)
16134
16177
  },
16135
16178
  {
16136
16179
  latexTrigger: ["\\LARGE"],
16137
- parse: () => "Nothing"
16138
- // @todo: parse as ['Annotated'...]
16180
+ parse: parseSizeSwitch(8)
16139
16181
  },
16140
16182
  {
16141
16183
  latexTrigger: ["\\huge"],
16142
- parse: () => "Nothing"
16143
- // @todo: parse as ['Annotated'...]
16184
+ parse: parseSizeSwitch(9)
16144
16185
  },
16145
16186
  {
16146
16187
  latexTrigger: ["\\Huge"],
16147
- parse: () => "Nothing"
16148
- // @todo: parse as ['Annotated'...]
16188
+ parse: parseSizeSwitch(10)
16149
16189
  },
16150
16190
  {
16151
16191
  name: "Annotated",
@@ -16157,6 +16197,10 @@ var DEFINITIONS_OTHERS = [
16157
16197
  result = joinLatex(["{\\displaystyle", result, "}"]);
16158
16198
  else if (dict.dict.mathStyle === "compact")
16159
16199
  result = joinLatex(["{\\textstyle", result, "}"]);
16200
+ else if (dict.dict.mathStyle === "script")
16201
+ result = joinLatex(["{\\scriptstyle", result, "}"]);
16202
+ else if (dict.dict.mathStyle === "scriptscript")
16203
+ result = joinLatex(["{\\scriptscriptstyle", result, "}"]);
16160
16204
  const v = dict.dict.size;
16161
16205
  if (v !== null && v >= 1 && v <= 10) {
16162
16206
  result = joinLatex([
@@ -16244,6 +16288,28 @@ var DEFINITIONS_OTHERS = [
16244
16288
  latexTrigger: ["\\enspace"],
16245
16289
  parse: () => ["HorizontalSpacing", 9]
16246
16290
  },
16291
+ {
16292
+ latexTrigger: ["\\hspace"],
16293
+ parse: (parser) => {
16294
+ if (parser.peek === "*") parser.nextToken();
16295
+ parser.parseStringGroup();
16296
+ return ["HorizontalSpacing", 0];
16297
+ }
16298
+ },
16299
+ {
16300
+ latexTrigger: ["\\hskip"],
16301
+ parse: (parser) => {
16302
+ skipTexDimension(parser);
16303
+ return ["HorizontalSpacing", 0];
16304
+ }
16305
+ },
16306
+ {
16307
+ latexTrigger: ["\\kern"],
16308
+ parse: (parser) => {
16309
+ skipTexDimension(parser);
16310
+ return ["HorizontalSpacing", 0];
16311
+ }
16312
+ },
16247
16313
  {
16248
16314
  latexTrigger: ["\\phantom"],
16249
16315
  parse: (parser) => {
@@ -16294,7 +16360,17 @@ var DEFINITIONS_OTHERS = [
16294
16360
  // `["HorizontalSpacing", expr, 'op'|'bin'|rel]` -> indicate a spacing around and expression, i.e. `\mathbin{x}`, etc...
16295
16361
  serialize: (serializer, expr2) => {
16296
16362
  if (operand(expr2, 2) !== null) {
16297
- return serializer.serialize(operand(expr2, 1));
16363
+ const cls = stringValue(operand(expr2, 2));
16364
+ const inner = serializer.serialize(operand(expr2, 1));
16365
+ if (cls === "bin") return `\\mathbin{${inner}}`;
16366
+ if (cls === "op") return `\\mathop{${inner}}`;
16367
+ if (cls === "rel") return `\\mathrel{${inner}}`;
16368
+ if (cls === "ord") return `\\mathord{${inner}}`;
16369
+ if (cls === "open") return `\\mathopen{${inner}}`;
16370
+ if (cls === "close") return `\\mathclose{${inner}}`;
16371
+ if (cls === "punct") return `\\mathpunct{${inner}}`;
16372
+ if (cls === "inner") return `\\mathinner{${inner}}`;
16373
+ return inner;
16298
16374
  }
16299
16375
  const v = machineValue(operand(expr2, 1));
16300
16376
  if (v === null) return "";
@@ -16685,25 +16761,47 @@ function makeIndexedEntry(entry, onError) {
16685
16761
  result.arguments = entry.arguments;
16686
16762
  return result;
16687
16763
  }
16764
+ function serializeTabularBody(serializer, body) {
16765
+ if (!body) return "";
16766
+ if (operator(body) !== "List") return serializer.serialize(body);
16767
+ const rows = operands(body);
16768
+ if (rows.length === 0) return "";
16769
+ if (!rows.every((row) => operator(row) === "List"))
16770
+ return serializer.serialize(body);
16771
+ return rows.map(
16772
+ (row) => operands(row).map((cell) => serializer.serialize(cell)).join(" & ")
16773
+ ).join(" \\\\\n");
16774
+ }
16688
16775
  function makeSerializeHandler(entry, latexTrigger, idTrigger) {
16689
16776
  if (typeof entry.serialize === "function") return entry.serialize;
16690
16777
  const kind = entry["kind"] ?? "expression";
16691
16778
  if (kind === "environment") {
16692
16779
  const envName = entry["symbolTrigger"] ?? entry.name ?? "unknown";
16693
- return (serializer, expr2) => joinLatex([
16694
- `\\begin{${envName}}`,
16695
- serializer.serialize(operand(expr2, 1)),
16696
- `\\end{${envName}}`
16697
- ]);
16780
+ return (serializer, expr2) => {
16781
+ const body = operand(expr2, 1);
16782
+ return joinLatex([
16783
+ `\\begin{${envName}}`,
16784
+ serializeTabularBody(serializer, body),
16785
+ `\\end{${envName}}`
16786
+ ]);
16787
+ };
16698
16788
  }
16699
16789
  if (isMatchfixEntry(entry)) {
16700
16790
  const openDelim = typeof entry.openTrigger === "string" ? DEFAULT_DELIMITER[entry.openTrigger] : tokensToString(entry.openTrigger);
16701
16791
  const closeDelim = typeof entry.closeTrigger === "string" ? DEFAULT_DELIMITER[entry.closeTrigger] : tokensToString(entry.closeTrigger);
16702
- return (serializer, expr2) => joinLatex([
16703
- openDelim,
16704
- serializer.serialize(operand(expr2, 1)),
16705
- closeDelim
16706
- ]);
16792
+ return (serializer, expr2) => {
16793
+ const style = serializer.groupStyle(expr2, serializer.level + 1);
16794
+ const inner = serializer.serialize(operand(expr2, 1));
16795
+ if (style === "scaled")
16796
+ return joinLatex([`\\left${openDelim}`, inner, `\\right${closeDelim}`]);
16797
+ if (style === "big")
16798
+ return joinLatex([
16799
+ `\\Bigl${openDelim}`,
16800
+ inner,
16801
+ `\\Bigr${closeDelim}`
16802
+ ]);
16803
+ return joinLatex([openDelim, inner, closeDelim]);
16804
+ };
16707
16805
  }
16708
16806
  let latex = entry.serialize;
16709
16807
  if (latex === void 0 && latexTrigger) latex = tokensToString(latexTrigger);
@@ -17588,6 +17686,16 @@ function parseNumber(parser, fmt) {
17588
17686
  }
17589
17687
 
17590
17688
  // src/compute-engine/latex-syntax/parse.ts
17689
+ var _symbolToUnicode = null;
17690
+ function getSymbolToUnicode() {
17691
+ if (!_symbolToUnicode) {
17692
+ _symbolToUnicode = /* @__PURE__ */ new Map();
17693
+ for (const [, latex, codepoint] of SYMBOLS2) {
17694
+ _symbolToUnicode.set(latex, String.fromCodePoint(codepoint));
17695
+ }
17696
+ }
17697
+ return _symbolToUnicode;
17698
+ }
17591
17699
  var DELIMITER_SHORTHAND2 = {
17592
17700
  "(": ["\\lparen", "("],
17593
17701
  ")": ["\\rparen", ")"],
@@ -18035,6 +18143,35 @@ var _Parser = class __Parser {
18035
18143
  this.nextToken();
18036
18144
  this.skipVisualSpace();
18037
18145
  }
18146
+ if (this.match("\\hspace")) {
18147
+ this.match("*");
18148
+ this.parseStringGroup();
18149
+ this.skipVisualSpace();
18150
+ }
18151
+ if (this.match("\\hskip") || this.match("\\kern")) {
18152
+ this.skipSpace();
18153
+ this.match("-") || this.match("+");
18154
+ while (/^[\d.]$/.test(this.peek)) this.nextToken();
18155
+ for (const unit of [
18156
+ "pt",
18157
+ "em",
18158
+ "mu",
18159
+ "ex",
18160
+ "mm",
18161
+ "cm",
18162
+ "in",
18163
+ "bp",
18164
+ "sp",
18165
+ "dd",
18166
+ "cc",
18167
+ "pc",
18168
+ "nc",
18169
+ "nd"
18170
+ ]) {
18171
+ if (this.matchAll([...unit])) break;
18172
+ }
18173
+ this.skipVisualSpace();
18174
+ }
18038
18175
  this.skipSpace();
18039
18176
  }
18040
18177
  match(token) {
@@ -18372,7 +18509,8 @@ var _Parser = class __Parser {
18372
18509
  } else if (token === "<space>") {
18373
18510
  result += " ";
18374
18511
  } else if (token[0] === "\\") {
18375
- result += token;
18512
+ const unicode = getSymbolToUnicode().get(token);
18513
+ result += unicode ?? token;
18376
18514
  } else {
18377
18515
  result += token;
18378
18516
  }
@@ -19732,7 +19870,7 @@ var STYLE_MODIFIERS = {
19732
19870
  sansserif: (s) => `\\mathsf{${s}}`,
19733
19871
  monospace: (s) => `\\mathtt{${s}}`
19734
19872
  };
19735
- var Serializer4 = class {
19873
+ var Serializer5 = class {
19736
19874
  options;
19737
19875
  dictionary;
19738
19876
  level = -1;
@@ -19747,11 +19885,18 @@ var Serializer4 = class {
19747
19885
  /**
19748
19886
  * Serialize the expression, and if the expression is an operator
19749
19887
  * of precedence less than or equal to prec, wrap it in some parens.
19750
- * @todo: don't wrap Abs, Floor, Ceil, Delimiter
19888
+ *
19889
+ * Skip wrapping for matchfix operators (Abs, Floor, Ceil, Norm, etc.)
19890
+ * and Delimiter since they already have visible delimiters.
19751
19891
  */
19752
19892
  wrap(expr2, prec) {
19753
19893
  if (expr2 === null || expr2 === void 0) return "";
19754
19894
  if (prec === void 0) {
19895
+ const name2 = operator(expr2);
19896
+ if (name2) {
19897
+ const def = this.dictionary.ids.get(name2);
19898
+ if (def?.kind === "matchfix") return this.serialize(expr2);
19899
+ }
19755
19900
  return this.wrapString(
19756
19901
  this.serialize(expr2),
19757
19902
  this.options.groupStyle(expr2, this.level + 1)
@@ -20045,7 +20190,7 @@ function serializeSymbol2(s, style = "auto") {
20045
20190
  return body;
20046
20191
  }
20047
20192
  function serializeLatex(expr2, dict, options) {
20048
- const serializer = new Serializer4(dict, options);
20193
+ const serializer = new Serializer5(dict, options);
20049
20194
  return serializer.serialize(expr2);
20050
20195
  }
20051
20196
 
@@ -42084,12 +42229,14 @@ var CONTROL_STRUCTURES_LIBRARY = [
42084
42229
  canonical: canonicalBlock,
42085
42230
  evaluate: evaluateBlock
42086
42231
  },
42087
- // A condition expression tests for one or more conditions of an expression
42088
- // ['Condition', value, "positive"]
42232
+ // A condition expression tests for one or more conditions of an expression.
42233
+ // Two forms:
42234
+ // ['Condition', value, "positive"] — tests value against named condition(s)
42235
+ // ['Condition', predicate] — set-builder predicate (e.g. x > 0)
42089
42236
  Condition: {
42090
42237
  description: "Test whether a value satisfies one or more conditions.",
42091
42238
  lazy: true,
42092
- signature: "(value, symbol) -> boolean",
42239
+ signature: "(expression, symbol?) -> boolean",
42093
42240
  evaluate: ([value, conds], { engine }) => {
42094
42241
  let conditions = [];
42095
42242
  if (isSymbol2(conds)) {
@@ -61263,33 +61410,6 @@ function fibonacci(n) {
61263
61410
  return b;
61264
61411
  }
61265
61412
 
61266
- // src/compute-engine/compilation/fractal-orbit.ts
61267
- function computeReferenceOrbit(center, maxIter, precision) {
61268
- const prevPrecision = BigDecimal.precision;
61269
- BigDecimal.precision = precision;
61270
- try {
61271
- const cr = new BigDecimal(center[0]);
61272
- const ci = new BigDecimal(center[1]);
61273
- let zr = BigDecimal.ZERO;
61274
- let zi = BigDecimal.ZERO;
61275
- const ESCAPE = new BigDecimal(256);
61276
- const points = [];
61277
- for (let i = 0; i < maxIter; i++) {
61278
- points.push(zr.toNumber(), zi.toNumber());
61279
- const zr2 = zr.mul(zr).toPrecision(precision);
61280
- const zi2 = zi.mul(zi).toPrecision(precision);
61281
- const mag2 = zr2.add(zi2);
61282
- if (mag2.cmp(ESCAPE) > 0) break;
61283
- const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
61284
- zr = zr2.sub(zi2).add(cr);
61285
- zi = new_zi;
61286
- }
61287
- return new Float32Array(points);
61288
- } finally {
61289
- BigDecimal.precision = prevPrecision;
61290
- }
61291
- }
61292
-
61293
61413
  // src/compute-engine/compilation/gpu-target.ts
61294
61414
  var GPU_OPERATORS = {
61295
61415
  Add: ["+", 11],
@@ -61373,13 +61493,6 @@ function compileGPUSumProduct(kind, args, _compile2, target) {
61373
61493
  ];
61374
61494
  return lines.join("\n");
61375
61495
  }
61376
- function selectFractalStrategy(target) {
61377
- const radius = target.hints?.viewport?.radius;
61378
- if (radius === void 0) return "single";
61379
- if (radius > 1e-6) return "single";
61380
- if (radius > 1e-14) return "double";
61381
- return "perturbation";
61382
- }
61383
61496
  var GPU_FUNCTIONS = {
61384
61497
  // Variadic arithmetic (for function-call form, e.g., with vectors)
61385
61498
  Add: (args, compile3, target) => {
@@ -61875,32 +61988,12 @@ var GPU_FUNCTIONS = {
61875
61988
  if (c === null || maxIter === null)
61876
61989
  throw new Error("Mandelbrot: missing arguments");
61877
61990
  const iterCode = compileIntArg(maxIter, compile3, target);
61878
- const strategy = selectFractalStrategy(target);
61879
- if (strategy === "double") {
61880
- const cCode = compile3(c);
61881
- return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61882
- }
61883
- if (strategy === "perturbation") {
61884
- const cCode = compile3(c);
61885
- return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
61886
- }
61887
61991
  return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
61888
61992
  },
61889
61993
  Julia: ([z, c, maxIter], compile3, target) => {
61890
61994
  if (z === null || c === null || maxIter === null)
61891
61995
  throw new Error("Julia: missing arguments");
61892
61996
  const iterCode = compileIntArg(maxIter, compile3, target);
61893
- const strategy = selectFractalStrategy(target);
61894
- if (strategy === "double") {
61895
- const zCode = compile3(z);
61896
- const cCode = compile3(c);
61897
- return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61898
- }
61899
- if (strategy === "perturbation") {
61900
- const zCode = compile3(z);
61901
- const cCode = compile3(c);
61902
- return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
61903
- }
61904
61997
  return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
61905
61998
  },
61906
61999
  // Vector/Matrix operations
@@ -62498,200 +62591,6 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
62498
62591
  return sgn * vals[n] / norm;
62499
62592
  }
62500
62593
  `;
62501
- var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
62502
- // Split a float into high and low parts for exact multiplication
62503
- vec2 ds_split(float a) {
62504
- const float SPLIT = 4097.0; // 2^12 + 1
62505
- float t = SPLIT * a;
62506
- float hi = t - (t - a);
62507
- float lo = a - hi;
62508
- return vec2(hi, lo);
62509
- }
62510
-
62511
- // Create a double-single from a single float
62512
- vec2 ds_from(float a) {
62513
- return vec2(a, 0.0);
62514
- }
62515
-
62516
- // Error-free addition (Knuth TwoSum)
62517
- vec2 ds_add(vec2 a, vec2 b) {
62518
- float s = a.x + b.x;
62519
- float v = s - a.x;
62520
- float e = (a.x - (s - v)) + (b.x - v);
62521
- float lo = (a.y + b.y) + e;
62522
- float hi = s + lo;
62523
- lo = lo - (hi - s);
62524
- return vec2(hi, lo);
62525
- }
62526
-
62527
- // Double-single subtraction
62528
- vec2 ds_sub(vec2 a, vec2 b) {
62529
- return ds_add(a, vec2(-b.x, -b.y));
62530
- }
62531
-
62532
- // Error-free multiplication (Dekker TwoProduct)
62533
- vec2 ds_mul(vec2 a, vec2 b) {
62534
- float p = a.x * b.x;
62535
- vec2 sa = ds_split(a.x);
62536
- vec2 sb = ds_split(b.x);
62537
- float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62538
- err += a.x * b.y + a.y * b.x;
62539
- float hi = p + err;
62540
- float lo = err - (hi - p);
62541
- return vec2(hi, lo);
62542
- }
62543
-
62544
- // Optimized self-multiply
62545
- vec2 ds_sqr(vec2 a) {
62546
- float p = a.x * a.x;
62547
- vec2 sa = ds_split(a.x);
62548
- float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62549
- err += 2.0 * a.x * a.y;
62550
- float hi = p + err;
62551
- float lo = err - (hi - p);
62552
- return vec2(hi, lo);
62553
- }
62554
-
62555
- // Compare magnitude: returns -1, 0, or 1
62556
- float ds_cmp(vec2 a, vec2 b) {
62557
- float d = a.x - b.x;
62558
- if (d != 0.0) return sign(d);
62559
- return sign(a.y - b.y);
62560
- }
62561
- `;
62562
- var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
62563
- fn ds_split(a: f32) -> vec2f {
62564
- const SPLIT: f32 = 4097.0;
62565
- let t = SPLIT * a;
62566
- let hi = t - (t - a);
62567
- let lo = a - hi;
62568
- return vec2f(hi, lo);
62569
- }
62570
-
62571
- fn ds_from(a: f32) -> vec2f {
62572
- return vec2f(a, 0.0);
62573
- }
62574
-
62575
- fn ds_add(a: vec2f, b: vec2f) -> vec2f {
62576
- let s = a.x + b.x;
62577
- let v = s - a.x;
62578
- let e = (a.x - (s - v)) + (b.x - v);
62579
- let lo_t = (a.y + b.y) + e;
62580
- let hi = s + lo_t;
62581
- let lo = lo_t - (hi - s);
62582
- return vec2f(hi, lo);
62583
- }
62584
-
62585
- fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
62586
- return ds_add(a, vec2f(-b.x, -b.y));
62587
- }
62588
-
62589
- fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
62590
- let p = a.x * b.x;
62591
- let sa = ds_split(a.x);
62592
- let sb = ds_split(b.x);
62593
- var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62594
- err += a.x * b.y + a.y * b.x;
62595
- let hi = p + err;
62596
- let lo = err - (hi - p);
62597
- return vec2f(hi, lo);
62598
- }
62599
-
62600
- fn ds_sqr(a: vec2f) -> vec2f {
62601
- let p = a.x * a.x;
62602
- let sa = ds_split(a.x);
62603
- var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62604
- err += 2.0 * a.x * a.y;
62605
- let hi = p + err;
62606
- let lo = err - (hi - p);
62607
- return vec2f(hi, lo);
62608
- }
62609
-
62610
- fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
62611
- let d = a.x - b.x;
62612
- if (d != 0.0) { return sign(d); }
62613
- return sign(a.y - b.y);
62614
- }
62615
- `;
62616
- var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
62617
- float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
62618
- // c = (re_hi, im_hi, re_lo, im_lo)
62619
- vec2 cr = vec2(c.x, c.z); // real part as ds
62620
- vec2 ci = vec2(c.y, c.w); // imag part as ds
62621
- vec2 zr = vec2(0.0, 0.0);
62622
- vec2 zi = vec2(0.0, 0.0);
62623
- for (int i = 0; i < maxIter; i++) {
62624
- vec2 zr2 = ds_sqr(zr);
62625
- vec2 zi2 = ds_sqr(zi);
62626
- // |z|^2 > 4.0 ?
62627
- vec2 mag2 = ds_add(zr2, zi2);
62628
- if (mag2.x > 4.0)
62629
- return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62630
- // z = z^2 + c
62631
- vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
62632
- zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
62633
- zi = new_zi;
62634
- }
62635
- return 1.0;
62636
- }
62637
-
62638
- float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
62639
- vec2 zr = vec2(z_in.x, z_in.z);
62640
- vec2 zi = vec2(z_in.y, z_in.w);
62641
- vec2 cr = vec2(c.x, c.z);
62642
- vec2 ci = vec2(c.y, c.w);
62643
- for (int i = 0; i < maxIter; i++) {
62644
- vec2 zr2 = ds_sqr(zr);
62645
- vec2 zi2 = ds_sqr(zi);
62646
- vec2 mag2 = ds_add(zr2, zi2);
62647
- if (mag2.x > 4.0)
62648
- return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62649
- vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62650
- zr = ds_add(ds_sub(zr2, zi2), cr);
62651
- zi = new_zi;
62652
- }
62653
- return 1.0;
62654
- }
62655
- `;
62656
- var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
62657
- fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
62658
- let cr = vec2f(c.x, c.z);
62659
- let ci = vec2f(c.y, c.w);
62660
- var zr = vec2f(0.0, 0.0);
62661
- var zi = vec2f(0.0, 0.0);
62662
- for (var i: i32 = 0; i < maxIter; i++) {
62663
- let zr2 = ds_sqr(zr);
62664
- let zi2 = ds_sqr(zi);
62665
- let mag2 = ds_add(zr2, zi2);
62666
- if (mag2.x > 4.0) {
62667
- return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62668
- }
62669
- let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62670
- zr = ds_add(ds_sub(zr2, zi2), cr);
62671
- zi = new_zi;
62672
- }
62673
- return 1.0;
62674
- }
62675
-
62676
- fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
62677
- var zr = vec2f(z_in.x, z_in.z);
62678
- var zi = vec2f(z_in.y, z_in.w);
62679
- let cr = vec2f(c.x, c.z);
62680
- let ci = vec2f(c.y, c.w);
62681
- for (var i: i32 = 0; i < maxIter; i++) {
62682
- let zr2 = ds_sqr(zr);
62683
- let zi2 = ds_sqr(zi);
62684
- let mag2 = ds_add(zr2, zi2);
62685
- if (mag2.x > 4.0) {
62686
- return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62687
- }
62688
- let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62689
- zr = ds_add(ds_sub(zr2, zi2), cr);
62690
- zi = new_zi;
62691
- }
62692
- return 1.0;
62693
- }
62694
- `;
62695
62594
  var GPU_FRACTAL_PREAMBLE_GLSL = `
62696
62595
  float _fractal_mandelbrot(vec2 c, int maxIter) {
62697
62596
  vec2 z = vec2(0.0, 0.0);
@@ -62735,188 +62634,6 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
62735
62634
  return 1.0;
62736
62635
  }
62737
62636
  `;
62738
- var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
62739
- uniform sampler2D _refOrbit;
62740
- uniform int _refOrbitLen;
62741
- uniform int _refOrbitTexWidth;
62742
-
62743
- vec2 _pt_fetch_orbit(int i) {
62744
- int y = i / _refOrbitTexWidth;
62745
- int x = i - y * _refOrbitTexWidth;
62746
- return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
62747
- }
62748
-
62749
- float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
62750
- float dr = 0.0;
62751
- float di = 0.0;
62752
- int orbitLen = min(maxIter, _refOrbitLen);
62753
- for (int i = 0; i < orbitLen; i++) {
62754
- vec2 Zn = _pt_fetch_orbit(i);
62755
- // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
62756
- float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62757
- float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62758
- dr = new_dr;
62759
- di = new_di;
62760
- // Full z = Z_{n+1} + delta for escape check
62761
- vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62762
- float zr = Zn1.x + dr;
62763
- float zi = Zn1.y + di;
62764
- float mag2 = zr * zr + zi * zi;
62765
- if (mag2 > 4.0)
62766
- return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62767
- // Glitch detection: |delta|^2 > |Z|^2
62768
- float dmag2 = dr * dr + di * di;
62769
- float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62770
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62771
- // Rebase to absolute coordinates and continue with single-float
62772
- float abs_zr = Zn1.x + dr;
62773
- float abs_zi = Zn1.y + di;
62774
- // Reconstruct absolute c from reference + delta
62775
- // (Use ds_from for the concept, but single-float suffices for fallback)
62776
- float cx = abs_zr - dr + delta_c.x;
62777
- float cy = abs_zi - di + delta_c.y;
62778
- for (int j = i + 1; j < maxIter; j++) {
62779
- float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62780
- abs_zi = 2.0 * abs_zr * abs_zi + cy;
62781
- abs_zr = new_zr;
62782
- mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62783
- if (mag2 > 4.0)
62784
- return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62785
- }
62786
- return 1.0;
62787
- }
62788
- }
62789
- return 1.0;
62790
- }
62791
-
62792
- float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
62793
- float dr = z_delta.x;
62794
- float di = z_delta.y;
62795
- int orbitLen = min(maxIter, _refOrbitLen);
62796
- for (int i = 0; i < orbitLen; i++) {
62797
- vec2 Zn = _pt_fetch_orbit(i);
62798
- float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62799
- float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62800
- dr = new_dr;
62801
- di = new_di;
62802
- vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62803
- float zr = Zn1.x + dr;
62804
- float zi = Zn1.y + di;
62805
- float mag2 = zr * zr + zi * zi;
62806
- if (mag2 > 4.0)
62807
- return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62808
- float dmag2 = dr * dr + di * di;
62809
- float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62810
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62811
- float abs_zr = Zn1.x + dr;
62812
- float abs_zi = Zn1.y + di;
62813
- float cx = delta_c.x;
62814
- float cy = delta_c.y;
62815
- for (int j = i + 1; j < maxIter; j++) {
62816
- float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62817
- abs_zi = 2.0 * abs_zr * abs_zi + cy;
62818
- abs_zr = new_zr;
62819
- mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62820
- if (mag2 > 4.0)
62821
- return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62822
- }
62823
- return 1.0;
62824
- }
62825
- }
62826
- return 1.0;
62827
- }
62828
- `;
62829
- var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
62830
- @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
62831
- var<uniform> _refOrbitLen: i32;
62832
- var<uniform> _refOrbitTexWidth: i32;
62833
-
62834
- fn _pt_fetch_orbit(i: i32) -> vec2f {
62835
- let y = i / _refOrbitTexWidth;
62836
- let x = i - y * _refOrbitTexWidth;
62837
- return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
62838
- }
62839
-
62840
- fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
62841
- var dr: f32 = 0.0;
62842
- var di: f32 = 0.0;
62843
- let orbitLen = min(maxIter, _refOrbitLen);
62844
- for (var i: i32 = 0; i < orbitLen; i++) {
62845
- let Zn = _pt_fetch_orbit(i);
62846
- let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62847
- let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62848
- dr = new_dr;
62849
- di = new_di;
62850
- var Zn1 = vec2f(0.0);
62851
- if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62852
- let zr = Zn1.x + dr;
62853
- let zi = Zn1.y + di;
62854
- var mag2 = zr * zr + zi * zi;
62855
- if (mag2 > 4.0) {
62856
- return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62857
- }
62858
- let dmag2 = dr * dr + di * di;
62859
- let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62860
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62861
- var f_zr = Zn1.x + dr;
62862
- var f_zi = Zn1.y + di;
62863
- let cx = delta_c.x;
62864
- let cy = delta_c.y;
62865
- for (var j: i32 = i + 1; j < maxIter; j++) {
62866
- let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62867
- f_zi = 2.0 * f_zr * f_zi + cy;
62868
- f_zr = t_zr;
62869
- mag2 = f_zr * f_zr + f_zi * f_zi;
62870
- if (mag2 > 4.0) {
62871
- return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62872
- }
62873
- }
62874
- return 1.0;
62875
- }
62876
- }
62877
- return 1.0;
62878
- }
62879
-
62880
- fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
62881
- var dr = z_delta.x;
62882
- var di = z_delta.y;
62883
- let orbitLen = min(maxIter, _refOrbitLen);
62884
- for (var i: i32 = 0; i < orbitLen; i++) {
62885
- let Zn = _pt_fetch_orbit(i);
62886
- let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62887
- let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62888
- dr = new_dr;
62889
- di = new_di;
62890
- var Zn1 = vec2f(0.0);
62891
- if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62892
- let zr = Zn1.x + dr;
62893
- let zi = Zn1.y + di;
62894
- var mag2 = zr * zr + zi * zi;
62895
- if (mag2 > 4.0) {
62896
- return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62897
- }
62898
- let dmag2 = dr * dr + di * di;
62899
- let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62900
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62901
- var f_zr = Zn1.x + dr;
62902
- var f_zi = Zn1.y + di;
62903
- let cx = delta_c.x;
62904
- let cy = delta_c.y;
62905
- for (var j: i32 = i + 1; j < maxIter; j++) {
62906
- let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62907
- f_zi = 2.0 * f_zr * f_zi + cy;
62908
- f_zr = t_zr;
62909
- mag2 = f_zr * f_zr + f_zi * f_zi;
62910
- if (mag2 > 4.0) {
62911
- return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62912
- }
62913
- }
62914
- return 1.0;
62915
- }
62916
- }
62917
- return 1.0;
62918
- }
62919
- `;
62920
62637
  var GPU_COLOR_PREAMBLE_GLSL = `
62921
62638
  float _gpu_srgb_to_linear(float c) {
62922
62639
  if (c <= 0.04045) return c / 12.92;
@@ -63355,7 +63072,6 @@ var GPUShaderTarget = class {
63355
63072
  const constants = this.getConstants();
63356
63073
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
63357
63074
  const target = this.createTarget({
63358
- hints: options.hints,
63359
63075
  functions: (id) => {
63360
63076
  if (userFunctions && id in userFunctions) {
63361
63077
  const fn = userFunctions[id];
@@ -63394,65 +63110,12 @@ var GPUShaderTarget = class {
63394
63110
  if (code.includes("_gpu_besselJ"))
63395
63111
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
63396
63112
  if (code.includes("_fractal_")) {
63397
- if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
63398
- preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63399
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
63400
- } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
63401
- preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63402
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
63403
- } else {
63404
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63405
- }
63113
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63406
63114
  }
63407
63115
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
63408
63116
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
63409
63117
  }
63410
63118
  if (preamble) result.preamble = preamble;
63411
- if (code.includes("_fractal_") && options.hints?.viewport) {
63412
- const strategy = selectFractalStrategy(target);
63413
- const radius = options.hints.viewport.radius;
63414
- switch (strategy) {
63415
- case "single":
63416
- result.staleWhen = { radiusBelow: 1e-6 };
63417
- break;
63418
- case "double":
63419
- result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
63420
- break;
63421
- case "perturbation":
63422
- result.staleWhen = {
63423
- radiusAbove: 1e-5,
63424
- radiusBelow: radius * 0.01,
63425
- centerDistance: radius * 2
63426
- };
63427
- break;
63428
- }
63429
- }
63430
- if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
63431
- const viewport = options.hints.viewport;
63432
- const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
63433
- const maxIter = 1e3;
63434
- const orbit = computeReferenceOrbit(
63435
- viewport.center,
63436
- maxIter,
63437
- digits
63438
- );
63439
- const orbitLen = orbit.length / 2;
63440
- const texWidth = Math.min(orbitLen, 4096);
63441
- const texHeight = Math.ceil(orbitLen / texWidth);
63442
- result.textures = {
63443
- _refOrbit: {
63444
- data: orbit,
63445
- width: texWidth,
63446
- height: texHeight,
63447
- format: "rg32f"
63448
- }
63449
- };
63450
- result.uniforms = {
63451
- ...result.uniforms,
63452
- _refOrbitLen: orbitLen,
63453
- _refOrbitTexWidth: texWidth
63454
- };
63455
- }
63456
63119
  return result;
63457
63120
  }
63458
63121
  compileToSource(expr2, _options = {}) {
@@ -68857,19 +68520,20 @@ var ComputeEngine = class _ComputeEngine {
68857
68520
  _setDefaultEngineFactory(() => new ComputeEngine());
68858
68521
 
68859
68522
  // src/compute-engine.ts
68860
- var version = "0.55.4";
68523
+ var version = "0.55.6";
68861
68524
  ComputeEngine._latexSyntaxFactory = () => new LatexSyntax();
68862
68525
  _setDefaultEngineFactory(
68863
68526
  () => new ComputeEngine({ latexSyntax: new LatexSyntax() })
68864
68527
  );
68865
68528
  globalThis[/* @__PURE__ */ Symbol.for("io.cortexjs.compute-engine")] = {
68866
68529
  ComputeEngine: ComputeEngine.prototype.constructor,
68867
- version: "0.55.4"
68530
+ version: "0.55.6"
68868
68531
  };
68869
68532
  export {
68870
68533
  DEFINITIONS_ALGEBRA as ALGEBRA_DICTIONARY,
68871
68534
  DEFINITIONS_ARITHMETIC as ARITHMETIC_DICTIONARY,
68872
68535
  BaseCompiler,
68536
+ BigDecimal,
68873
68537
  DEFINITIONS_CALCULUS as CALCULUS_DICTIONARY,
68874
68538
  DEFINITIONS_COMPLEX as COMPLEX_DICTIONARY,
68875
68539
  DEFINITIONS_CORE as CORE_DICTIONARY,