@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
- /** Compile 0.55.4 */
1
+ /** Compile 0.55.6 */
2
2
  (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Compile = {}));})(this, (function (exports) { 'use strict';
3
3
  var Compile = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -6273,10 +6273,6 @@ var Compile = (() => {
6273
6273
  // Lagrange notation
6274
6274
  {
6275
6275
  name: "Derivative",
6276
- // @todo: Leibniz notation: {% latex " \\frac{d^n}{dx^n} f(x)" %}
6277
- // @todo: Euler modified notation: This notation is used by Mathematica. The Euler notation uses `D` instead of
6278
- // `\partial`: `\partial_{x} f`, `\partial_{x,y} f`
6279
- // Newton notation (\dot{v}, \ddot{v}) is implemented below
6280
6276
  serialize: (serializer, expr) => {
6281
6277
  const degree = machineValue(operand(expr, 2)) ?? 1;
6282
6278
  const base = serializer.serialize(operand(expr, 1));
@@ -7314,14 +7310,18 @@ var Compile = (() => {
7314
7310
  return ["Complement", lhs];
7315
7311
  }
7316
7312
  // precedence: 240,
7317
- // @todo: serialize for the multiple argument case
7318
7313
  },
7319
7314
  {
7320
7315
  name: "Complement",
7321
7316
  latexTrigger: ["^", "<{>", "\\complement", "<}>"],
7322
- kind: "postfix"
7317
+ kind: "postfix",
7323
7318
  // precedence: 240,
7324
- // @todo: serialize for the multiple argument case
7319
+ serialize: (serializer, expr) => {
7320
+ return joinLatex([
7321
+ serializer.serialize(operand(expr, 1)),
7322
+ "^\\complement"
7323
+ ]);
7324
+ }
7325
7325
  },
7326
7326
  {
7327
7327
  name: "Intersection",
@@ -7408,7 +7408,6 @@ var Compile = (() => {
7408
7408
  // commands like \rbrack a, b \rbrack which are unambiguous.
7409
7409
  {
7410
7410
  name: "Multiple",
7411
- // @todo: parse
7412
7411
  serialize: serializeSet
7413
7412
  },
7414
7413
  {
@@ -7417,14 +7416,28 @@ var Compile = (() => {
7417
7416
  kind: "infix",
7418
7417
  precedence: 350
7419
7418
  },
7419
+ // \mid as a separator/operator (used in set-builder notation: {x \mid x > 0})
7420
+ // Low precedence so it binds loosely — everything on each side is parsed first
7421
+ {
7422
+ name: "Divides",
7423
+ latexTrigger: ["\\mid"],
7424
+ kind: "infix",
7425
+ precedence: 160
7426
+ },
7420
7427
  {
7421
7428
  name: "Set",
7422
7429
  kind: "matchfix",
7423
7430
  openTrigger: "{",
7424
7431
  closeTrigger: "}",
7425
- // @todo: the set syntax can also include conditions...
7426
7432
  parse: (_parser, body) => {
7427
7433
  if (isEmptySequence(body)) return "EmptySet";
7434
+ const h = operator(body);
7435
+ if (h === "Divides" || h === "Colon") {
7436
+ const expr = operand(body, 1);
7437
+ const condition = operand(body, 2);
7438
+ if (expr !== null && condition !== null)
7439
+ return ["Set", expr, ["Condition", condition]];
7440
+ }
7428
7441
  if (operator(body) == "Delimiter" && stringValue(operand(body, 2)) === ",") {
7429
7442
  body = operand(body, 1);
7430
7443
  }
@@ -7432,6 +7445,17 @@ var Compile = (() => {
7432
7445
  return ["Set", ...operands(body)];
7433
7446
  },
7434
7447
  serialize: (serializer, expr) => {
7448
+ if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
7449
+ const condition = operand(expr, 2);
7450
+ return joinLatex([
7451
+ "\\lbrace",
7452
+ serializer.serialize(operand(expr, 1)),
7453
+ "\\mid",
7454
+ // Serialize the inner expression of the Condition wrapper
7455
+ serializer.serialize(operand(condition, 1)),
7456
+ "\\rbrace"
7457
+ ]);
7458
+ }
7435
7459
  return joinLatex([
7436
7460
  "\\lbrace",
7437
7461
  operands(expr).map((x) => serializer.serialize(x)).join(", "),
@@ -7598,23 +7622,6 @@ var Compile = (() => {
7598
7622
  if (expr === null) return "";
7599
7623
  const h = operator(expr);
7600
7624
  if (!h) return "";
7601
- if (h === "Set") {
7602
- if (nops(expr) === 0) return "\\emptyset";
7603
- if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
7604
- return joinLatex([
7605
- "\\left\\lbrace",
7606
- serializer.serialize(operand(expr, 1)),
7607
- "\\middle\\mid",
7608
- serializer.serialize(operand(expr, 2)),
7609
- "\\right\\rbrace"
7610
- ]);
7611
- }
7612
- return joinLatex([
7613
- "\\left\\lbrace",
7614
- ...operands(expr).map((x) => serializer.serialize(x) + " ,"),
7615
- "\\right\\rbrace"
7616
- ]);
7617
- }
7618
7625
  if (h === "Multiple") {
7619
7626
  }
7620
7627
  if (h === "Range") {
@@ -8732,11 +8739,13 @@ var Compile = (() => {
8732
8739
  if (!parser.match("_")) return null;
8733
8740
  const base = parser.parseGroup();
8734
8741
  if (operator(base) !== "To") return null;
8735
- const expr = parser.parseArguments("implicit");
8742
+ const expr = parser.parseExpression({
8743
+ minPrec: MULTIPLICATION_PRECEDENCE
8744
+ });
8736
8745
  if (!expr) return null;
8737
8746
  return [
8738
8747
  "Limit",
8739
- ["Function", expr[0], operand(base, 1)],
8748
+ ["Function", expr, operand(base, 1)],
8740
8749
  operand(base, 2)
8741
8750
  ];
8742
8751
  },
@@ -10940,12 +10949,52 @@ var Compile = (() => {
10940
10949
  ];
10941
10950
 
10942
10951
  // src/compute-engine/latex-syntax/dictionary/definitions-other.ts
10952
+ var TEX_UNITS = [
10953
+ "pt",
10954
+ "em",
10955
+ "mu",
10956
+ "ex",
10957
+ "mm",
10958
+ "cm",
10959
+ "in",
10960
+ "bp",
10961
+ "sp",
10962
+ "dd",
10963
+ "cc",
10964
+ "pc",
10965
+ "nc",
10966
+ "nd"
10967
+ ];
10968
+ function skipTexDimension(parser) {
10969
+ parser.skipSpace();
10970
+ if (parser.peek === "-" || parser.peek === "+") parser.nextToken();
10971
+ while (/^[\d.]$/.test(parser.peek)) parser.nextToken();
10972
+ for (const unit of TEX_UNITS) {
10973
+ if (parser.matchAll([...unit])) return;
10974
+ }
10975
+ }
10943
10976
  function parseSingleArg(cmd) {
10944
10977
  return (parser) => {
10945
10978
  const arg = parser.parseGroup();
10946
10979
  return arg === null ? [cmd] : [cmd, arg];
10947
10980
  };
10948
10981
  }
10982
+ function parseMathStyleSwitch(mathStyle) {
10983
+ return (parser) => {
10984
+ const body = parser.parseExpression();
10985
+ if (body !== null && !isEmptySequence(body))
10986
+ return ["Annotated", body, { dict: { mathStyle } }];
10987
+ return "Nothing";
10988
+ };
10989
+ }
10990
+ function parseSizeSwitch(size) {
10991
+ return (parser) => {
10992
+ const body = parser.parseExpression();
10993
+ if (body !== null && !isEmptySequence(body))
10994
+ return ["Annotated", body, { dict: { size } }];
10995
+ return "Nothing";
10996
+ };
10997
+ }
10949
10998
  var DEFINITIONS_OTHERS = [
10950
10999
  {
10951
11000
  name: "Overscript",
@@ -11185,80 +11234,71 @@ var Compile = (() => {
11185
11234
  },
11186
11235
  {
11187
11236
  latexTrigger: ["\\displaystyle"],
11188
- parse: () => "Nothing"
11189
- // @todo: parse as ['Annotated'...]
11237
+ parse: parseMathStyleSwitch("normal")
11190
11238
  },
11191
11239
  {
11192
11240
  latexTrigger: ["\\textstyle"],
11193
- parse: () => "Nothing"
11194
- // @todo: parse as ['Annotated'...]
11241
+ parse: parseMathStyleSwitch("compact")
11195
11242
  },
11196
11243
  {
11197
11244
  latexTrigger: ["\\scriptstyle"],
11198
- parse: () => "Nothing"
11199
- // @todo: parse as ['Annotated'...]
11245
+ parse: parseMathStyleSwitch("script")
11200
11246
  },
11201
11247
  {
11202
11248
  latexTrigger: ["\\scriptscriptstyle"],
11203
- parse: () => "Nothing"
11204
- // @todo: parse as ['Annotated'...]
11249
+ parse: parseMathStyleSwitch("scriptscript")
11205
11250
  },
11206
11251
  {
11207
11252
  latexTrigger: ["\\color"],
11208
11253
  parse: (parser) => {
11209
- parser.parseGroup();
11254
+ const color = parser.parseStringGroup();
11255
+ if (color !== null) {
11256
+ const body = parser.parseExpression();
11257
+ if (body !== null && !isEmptySequence(body))
11258
+ return ["Annotated", body, { dict: { color } }];
11259
+ }
11210
11260
  return "Nothing";
11211
11261
  }
11212
11262
  },
11213
11263
  {
11214
11264
  latexTrigger: ["\\tiny"],
11215
- parse: () => "Nothing"
11216
- // @todo: parse as ['Annotated'...]
11265
+ parse: parseSizeSwitch(1)
11217
11266
  },
11218
11267
  {
11219
11268
  latexTrigger: ["\\scriptsize"],
11220
- parse: () => "Nothing"
11221
- // @todo: parse as ['Annotated'...]
11269
+ parse: parseSizeSwitch(2)
11222
11270
  },
11223
11271
  {
11224
11272
  latexTrigger: ["\\footnotesize"],
11225
- parse: () => "Nothing"
11226
- // @todo: parse as ['Annotated'...]
11273
+ parse: parseSizeSwitch(3)
11227
11274
  },
11228
11275
  {
11229
11276
  latexTrigger: ["\\small"],
11230
- parse: () => "Nothing"
11231
- // @todo: parse as ['Annotated'...]
11277
+ parse: parseSizeSwitch(4)
11232
11278
  },
11233
11279
  {
11234
11280
  latexTrigger: ["\\normalsize"],
11235
- parse: () => "Nothing"
11236
- // @todo: parse as ['Annotated'...]
11281
+ parse: parseSizeSwitch(5)
11237
11282
  },
11238
11283
  {
11239
11284
  latexTrigger: ["\\large"],
11240
- parse: () => "Nothing"
11241
- // @todo: parse as ['Annotated'...]
11285
+ parse: parseSizeSwitch(6)
11242
11286
  },
11243
11287
  {
11244
11288
  latexTrigger: ["\\Large"],
11245
- parse: () => "Nothing"
11246
- // @todo: parse as ['Annotated'...]
11289
+ parse: parseSizeSwitch(7)
11247
11290
  },
11248
11291
  {
11249
11292
  latexTrigger: ["\\LARGE"],
11250
- parse: () => "Nothing"
11251
- // @todo: parse as ['Annotated'...]
11293
+ parse: parseSizeSwitch(8)
11252
11294
  },
11253
11295
  {
11254
11296
  latexTrigger: ["\\huge"],
11255
- parse: () => "Nothing"
11256
- // @todo: parse as ['Annotated'...]
11297
+ parse: parseSizeSwitch(9)
11257
11298
  },
11258
11299
  {
11259
11300
  latexTrigger: ["\\Huge"],
11260
- parse: () => "Nothing"
11261
- // @todo: parse as ['Annotated'...]
11301
+ parse: parseSizeSwitch(10)
11262
11302
  },
11263
11303
  {
11264
11304
  name: "Annotated",
@@ -11270,6 +11310,10 @@ var Compile = (() => {
11270
11310
  result = joinLatex(["{\\displaystyle", result, "}"]);
11271
11311
  else if (dict.dict.mathStyle === "compact")
11272
11312
  result = joinLatex(["{\\textstyle", result, "}"]);
11313
+ else if (dict.dict.mathStyle === "script")
11314
+ result = joinLatex(["{\\scriptstyle", result, "}"]);
11315
+ else if (dict.dict.mathStyle === "scriptscript")
11316
+ result = joinLatex(["{\\scriptscriptstyle", result, "}"]);
11273
11317
  const v = dict.dict.size;
11274
11318
  if (v !== null && v >= 1 && v <= 10) {
11275
11319
  result = joinLatex([
@@ -11357,6 +11401,28 @@ var Compile = (() => {
11357
11401
  latexTrigger: ["\\enspace"],
11358
11402
  parse: () => ["HorizontalSpacing", 9]
11359
11403
  },
11404
+ {
11405
+ latexTrigger: ["\\hspace"],
11406
+ parse: (parser) => {
11407
+ if (parser.peek === "*") parser.nextToken();
11408
+ parser.parseStringGroup();
11409
+ return ["HorizontalSpacing", 0];
11410
+ }
11411
+ },
11412
+ {
11413
+ latexTrigger: ["\\hskip"],
11414
+ parse: (parser) => {
11415
+ skipTexDimension(parser);
11416
+ return ["HorizontalSpacing", 0];
11417
+ }
11418
+ },
11419
+ {
11420
+ latexTrigger: ["\\kern"],
11421
+ parse: (parser) => {
11422
+ skipTexDimension(parser);
11423
+ return ["HorizontalSpacing", 0];
11424
+ }
11425
+ },
11360
11426
  {
11361
11427
  latexTrigger: ["\\phantom"],
11362
11428
  parse: (parser) => {
@@ -11407,7 +11473,17 @@ var Compile = (() => {
11407
11473
  // `["HorizontalSpacing", expr, 'op'|'bin'|rel]` -> indicate a spacing around and expression, i.e. `\mathbin{x}`, etc...
11408
11474
  serialize: (serializer, expr) => {
11409
11475
  if (operand(expr, 2) !== null) {
11410
- return serializer.serialize(operand(expr, 1));
11476
+ const cls = stringValue(operand(expr, 2));
11477
+ const inner = serializer.serialize(operand(expr, 1));
11478
+ if (cls === "bin") return `\\mathbin{${inner}}`;
11479
+ if (cls === "op") return `\\mathop{${inner}}`;
11480
+ if (cls === "rel") return `\\mathrel{${inner}}`;
11481
+ if (cls === "ord") return `\\mathord{${inner}}`;
11482
+ if (cls === "open") return `\\mathopen{${inner}}`;
11483
+ if (cls === "close") return `\\mathclose{${inner}}`;
11484
+ if (cls === "punct") return `\\mathpunct{${inner}}`;
11485
+ if (cls === "inner") return `\\mathinner{${inner}}`;
11486
+ return inner;
11411
11487
  }
11412
11488
  const v = machineValue(operand(expr, 1));
11413
11489
  if (v === null) return "";
@@ -20781,33 +20857,6 @@ ${lines.join("\n")}`;
20781
20857
  return b;
20782
20858
  }
20783
20859
 
20784
- // src/compute-engine/compilation/fractal-orbit.ts
20785
- function computeReferenceOrbit(center, maxIter, precision) {
20786
- const prevPrecision = BigDecimal.precision;
20787
- BigDecimal.precision = precision;
20788
- try {
20789
- const cr = new BigDecimal(center[0]);
20790
- const ci = new BigDecimal(center[1]);
20791
- let zr = BigDecimal.ZERO;
20792
- let zi = BigDecimal.ZERO;
20793
- const ESCAPE = new BigDecimal(256);
20794
- const points = [];
20795
- for (let i = 0; i < maxIter; i++) {
20796
- points.push(zr.toNumber(), zi.toNumber());
20797
- const zr2 = zr.mul(zr).toPrecision(precision);
20798
- const zi2 = zi.mul(zi).toPrecision(precision);
20799
- const mag2 = zr2.add(zi2);
20800
- if (mag2.cmp(ESCAPE) > 0) break;
20801
- const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
20802
- zr = zr2.sub(zi2).add(cr);
20803
- zi = new_zi;
20804
- }
20805
- return new Float32Array(points);
20806
- } finally {
20807
- BigDecimal.precision = prevPrecision;
20808
- }
20809
- }
20810
-
20811
20860
  // src/compute-engine/compilation/gpu-target.ts
20812
20861
  var GPU_OPERATORS = {
20813
20862
  Add: ["+", 11],
@@ -20891,13 +20940,6 @@ ${lines.join("\n")}`;
20891
20940
  ];
20892
20941
  return lines.join("\n");
20893
20942
  }
20894
- function selectFractalStrategy(target) {
20895
- const radius = target.hints?.viewport?.radius;
20896
- if (radius === void 0) return "single";
20897
- if (radius > 1e-6) return "single";
20898
- if (radius > 1e-14) return "double";
20899
- return "perturbation";
20900
- }
20901
20943
  var GPU_FUNCTIONS = {
20902
20944
  // Variadic arithmetic (for function-call form, e.g., with vectors)
20903
20945
  Add: (args, compile2, target) => {
@@ -21393,32 +21435,12 @@ ${lines.join("\n")}`;
21393
21435
  if (c === null || maxIter === null)
21394
21436
  throw new Error("Mandelbrot: missing arguments");
21395
21437
  const iterCode = compileIntArg(maxIter, compile2, target);
21396
- const strategy = selectFractalStrategy(target);
21397
- if (strategy === "double") {
21398
- const cCode = compile2(c);
21399
- return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
21400
- }
21401
- if (strategy === "perturbation") {
21402
- const cCode = compile2(c);
21403
- return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
21404
- }
21405
21438
  return `_fractal_mandelbrot(${compile2(c)}, ${iterCode})`;
21406
21439
  },
21407
21440
  Julia: ([z, c, maxIter], compile2, target) => {
21408
21441
  if (z === null || c === null || maxIter === null)
21409
21442
  throw new Error("Julia: missing arguments");
21410
21443
  const iterCode = compileIntArg(maxIter, compile2, target);
21411
- const strategy = selectFractalStrategy(target);
21412
- if (strategy === "double") {
21413
- const zCode = compile2(z);
21414
- const cCode = compile2(c);
21415
- return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
21416
- }
21417
- if (strategy === "perturbation") {
21418
- const zCode = compile2(z);
21419
- const cCode = compile2(c);
21420
- return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
21421
- }
21422
21444
  return `_fractal_julia(${compile2(z)}, ${compile2(c)}, ${iterCode})`;
21423
21445
  },
21424
21446
  // Vector/Matrix operations
@@ -22015,200 +22037,6 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
22015
22037
  for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
22016
22038
  return sgn * vals[n] / norm;
22017
22039
  }
22018
- `;
22019
- var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
22020
- // Split a float into high and low parts for exact multiplication
22021
- vec2 ds_split(float a) {
22022
- const float SPLIT = 4097.0; // 2^12 + 1
22023
- float t = SPLIT * a;
22024
- float hi = t - (t - a);
22025
- float lo = a - hi;
22026
- return vec2(hi, lo);
22027
- }
22028
-
22029
- // Create a double-single from a single float
22030
- vec2 ds_from(float a) {
22031
- return vec2(a, 0.0);
22032
- }
22033
-
22034
- // Error-free addition (Knuth TwoSum)
22035
- vec2 ds_add(vec2 a, vec2 b) {
22036
- float s = a.x + b.x;
22037
- float v = s - a.x;
22038
- float e = (a.x - (s - v)) + (b.x - v);
22039
- float lo = (a.y + b.y) + e;
22040
- float hi = s + lo;
22041
- lo = lo - (hi - s);
22042
- return vec2(hi, lo);
22043
- }
22044
-
22045
- // Double-single subtraction
22046
- vec2 ds_sub(vec2 a, vec2 b) {
22047
- return ds_add(a, vec2(-b.x, -b.y));
22048
- }
22049
-
22050
- // Error-free multiplication (Dekker TwoProduct)
22051
- vec2 ds_mul(vec2 a, vec2 b) {
22052
- float p = a.x * b.x;
22053
- vec2 sa = ds_split(a.x);
22054
- vec2 sb = ds_split(b.x);
22055
- float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22056
- err += a.x * b.y + a.y * b.x;
22057
- float hi = p + err;
22058
- float lo = err - (hi - p);
22059
- return vec2(hi, lo);
22060
- }
22061
-
22062
- // Optimized self-multiply
22063
- vec2 ds_sqr(vec2 a) {
22064
- float p = a.x * a.x;
22065
- vec2 sa = ds_split(a.x);
22066
- float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22067
- err += 2.0 * a.x * a.y;
22068
- float hi = p + err;
22069
- float lo = err - (hi - p);
22070
- return vec2(hi, lo);
22071
- }
22072
-
22073
- // Compare magnitude: returns -1, 0, or 1
22074
- float ds_cmp(vec2 a, vec2 b) {
22075
- float d = a.x - b.x;
22076
- if (d != 0.0) return sign(d);
22077
- return sign(a.y - b.y);
22078
- }
22079
- `;
22080
- var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
22081
- fn ds_split(a: f32) -> vec2f {
22082
- const SPLIT: f32 = 4097.0;
22083
- let t = SPLIT * a;
22084
- let hi = t - (t - a);
22085
- let lo = a - hi;
22086
- return vec2f(hi, lo);
22087
- }
22088
-
22089
- fn ds_from(a: f32) -> vec2f {
22090
- return vec2f(a, 0.0);
22091
- }
22092
-
22093
- fn ds_add(a: vec2f, b: vec2f) -> vec2f {
22094
- let s = a.x + b.x;
22095
- let v = s - a.x;
22096
- let e = (a.x - (s - v)) + (b.x - v);
22097
- let lo_t = (a.y + b.y) + e;
22098
- let hi = s + lo_t;
22099
- let lo = lo_t - (hi - s);
22100
- return vec2f(hi, lo);
22101
- }
22102
-
22103
- fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
22104
- return ds_add(a, vec2f(-b.x, -b.y));
22105
- }
22106
-
22107
- fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
22108
- let p = a.x * b.x;
22109
- let sa = ds_split(a.x);
22110
- let sb = ds_split(b.x);
22111
- var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22112
- err += a.x * b.y + a.y * b.x;
22113
- let hi = p + err;
22114
- let lo = err - (hi - p);
22115
- return vec2f(hi, lo);
22116
- }
22117
-
22118
- fn ds_sqr(a: vec2f) -> vec2f {
22119
- let p = a.x * a.x;
22120
- let sa = ds_split(a.x);
22121
- var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22122
- err += 2.0 * a.x * a.y;
22123
- let hi = p + err;
22124
- let lo = err - (hi - p);
22125
- return vec2f(hi, lo);
22126
- }
22127
-
22128
- fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
22129
- let d = a.x - b.x;
22130
- if (d != 0.0) { return sign(d); }
22131
- return sign(a.y - b.y);
22132
- }
22133
- `;
22134
- var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
22135
- float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
22136
- // c = (re_hi, im_hi, re_lo, im_lo)
22137
- vec2 cr = vec2(c.x, c.z); // real part as ds
22138
- vec2 ci = vec2(c.y, c.w); // imag part as ds
22139
- vec2 zr = vec2(0.0, 0.0);
22140
- vec2 zi = vec2(0.0, 0.0);
22141
- for (int i = 0; i < maxIter; i++) {
22142
- vec2 zr2 = ds_sqr(zr);
22143
- vec2 zi2 = ds_sqr(zi);
22144
- // |z|^2 > 4.0 ?
22145
- vec2 mag2 = ds_add(zr2, zi2);
22146
- if (mag2.x > 4.0)
22147
- return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22148
- // z = z^2 + c
22149
- vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
22150
- zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
22151
- zi = new_zi;
22152
- }
22153
- return 1.0;
22154
- }
22155
-
22156
- float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
22157
- vec2 zr = vec2(z_in.x, z_in.z);
22158
- vec2 zi = vec2(z_in.y, z_in.w);
22159
- vec2 cr = vec2(c.x, c.z);
22160
- vec2 ci = vec2(c.y, c.w);
22161
- for (int i = 0; i < maxIter; i++) {
22162
- vec2 zr2 = ds_sqr(zr);
22163
- vec2 zi2 = ds_sqr(zi);
22164
- vec2 mag2 = ds_add(zr2, zi2);
22165
- if (mag2.x > 4.0)
22166
- return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22167
- vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22168
- zr = ds_add(ds_sub(zr2, zi2), cr);
22169
- zi = new_zi;
22170
- }
22171
- return 1.0;
22172
- }
22173
- `;
22174
- var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
22175
- fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
22176
- let cr = vec2f(c.x, c.z);
22177
- let ci = vec2f(c.y, c.w);
22178
- var zr = vec2f(0.0, 0.0);
22179
- var zi = vec2f(0.0, 0.0);
22180
- for (var i: i32 = 0; i < maxIter; i++) {
22181
- let zr2 = ds_sqr(zr);
22182
- let zi2 = ds_sqr(zi);
22183
- let mag2 = ds_add(zr2, zi2);
22184
- if (mag2.x > 4.0) {
22185
- return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22186
- }
22187
- let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22188
- zr = ds_add(ds_sub(zr2, zi2), cr);
22189
- zi = new_zi;
22190
- }
22191
- return 1.0;
22192
- }
22193
-
22194
- fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
22195
- var zr = vec2f(z_in.x, z_in.z);
22196
- var zi = vec2f(z_in.y, z_in.w);
22197
- let cr = vec2f(c.x, c.z);
22198
- let ci = vec2f(c.y, c.w);
22199
- for (var i: i32 = 0; i < maxIter; i++) {
22200
- let zr2 = ds_sqr(zr);
22201
- let zi2 = ds_sqr(zi);
22202
- let mag2 = ds_add(zr2, zi2);
22203
- if (mag2.x > 4.0) {
22204
- return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22205
- }
22206
- let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22207
- zr = ds_add(ds_sub(zr2, zi2), cr);
22208
- zi = new_zi;
22209
- }
22210
- return 1.0;
22211
- }
22212
22040
  `;
22213
22041
  var GPU_FRACTAL_PREAMBLE_GLSL = `
22214
22042
  float _fractal_mandelbrot(vec2 c, int maxIter) {
@@ -22252,188 +22080,6 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
22252
22080
  }
22253
22081
  return 1.0;
22254
22082
  }
22255
- `;
22256
- var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
22257
- uniform sampler2D _refOrbit;
22258
- uniform int _refOrbitLen;
22259
- uniform int _refOrbitTexWidth;
22260
-
22261
- vec2 _pt_fetch_orbit(int i) {
22262
- int y = i / _refOrbitTexWidth;
22263
- int x = i - y * _refOrbitTexWidth;
22264
- return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
22265
- }
22266
-
22267
- float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
22268
- float dr = 0.0;
22269
- float di = 0.0;
22270
- int orbitLen = min(maxIter, _refOrbitLen);
22271
- for (int i = 0; i < orbitLen; i++) {
22272
- vec2 Zn = _pt_fetch_orbit(i);
22273
- // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
22274
- float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22275
- float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22276
- dr = new_dr;
22277
- di = new_di;
22278
- // Full z = Z_{n+1} + delta for escape check
22279
- vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22280
- float zr = Zn1.x + dr;
22281
- float zi = Zn1.y + di;
22282
- float mag2 = zr * zr + zi * zi;
22283
- if (mag2 > 4.0)
22284
- return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22285
- // Glitch detection: |delta|^2 > |Z|^2
22286
- float dmag2 = dr * dr + di * di;
22287
- float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22288
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22289
- // Rebase to absolute coordinates and continue with single-float
22290
- float abs_zr = Zn1.x + dr;
22291
- float abs_zi = Zn1.y + di;
22292
- // Reconstruct absolute c from reference + delta
22293
- // (Use ds_from for the concept, but single-float suffices for fallback)
22294
- float cx = abs_zr - dr + delta_c.x;
22295
- float cy = abs_zi - di + delta_c.y;
22296
- for (int j = i + 1; j < maxIter; j++) {
22297
- float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22298
- abs_zi = 2.0 * abs_zr * abs_zi + cy;
22299
- abs_zr = new_zr;
22300
- mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22301
- if (mag2 > 4.0)
22302
- return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22303
- }
22304
- return 1.0;
22305
- }
22306
- }
22307
- return 1.0;
22308
- }
22309
-
22310
- float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
22311
- float dr = z_delta.x;
22312
- float di = z_delta.y;
22313
- int orbitLen = min(maxIter, _refOrbitLen);
22314
- for (int i = 0; i < orbitLen; i++) {
22315
- vec2 Zn = _pt_fetch_orbit(i);
22316
- float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22317
- float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22318
- dr = new_dr;
22319
- di = new_di;
22320
- vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22321
- float zr = Zn1.x + dr;
22322
- float zi = Zn1.y + di;
22323
- float mag2 = zr * zr + zi * zi;
22324
- if (mag2 > 4.0)
22325
- return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22326
- float dmag2 = dr * dr + di * di;
22327
- float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22328
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22329
- float abs_zr = Zn1.x + dr;
22330
- float abs_zi = Zn1.y + di;
22331
- float cx = delta_c.x;
22332
- float cy = delta_c.y;
22333
- for (int j = i + 1; j < maxIter; j++) {
22334
- float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22335
- abs_zi = 2.0 * abs_zr * abs_zi + cy;
22336
- abs_zr = new_zr;
22337
- mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22338
- if (mag2 > 4.0)
22339
- return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22340
- }
22341
- return 1.0;
22342
- }
22343
- }
22344
- return 1.0;
22345
- }
22346
- `;
22347
- var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
22348
- @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
22349
- var<uniform> _refOrbitLen: i32;
22350
- var<uniform> _refOrbitTexWidth: i32;
22351
-
22352
- fn _pt_fetch_orbit(i: i32) -> vec2f {
22353
- let y = i / _refOrbitTexWidth;
22354
- let x = i - y * _refOrbitTexWidth;
22355
- return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
22356
- }
22357
-
22358
- fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
22359
- var dr: f32 = 0.0;
22360
- var di: f32 = 0.0;
22361
- let orbitLen = min(maxIter, _refOrbitLen);
22362
- for (var i: i32 = 0; i < orbitLen; i++) {
22363
- let Zn = _pt_fetch_orbit(i);
22364
- let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22365
- let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22366
- dr = new_dr;
22367
- di = new_di;
22368
- var Zn1 = vec2f(0.0);
22369
- if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22370
- let zr = Zn1.x + dr;
22371
- let zi = Zn1.y + di;
22372
- var mag2 = zr * zr + zi * zi;
22373
- if (mag2 > 4.0) {
22374
- return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22375
- }
22376
- let dmag2 = dr * dr + di * di;
22377
- let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22378
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22379
- var f_zr = Zn1.x + dr;
22380
- var f_zi = Zn1.y + di;
22381
- let cx = delta_c.x;
22382
- let cy = delta_c.y;
22383
- for (var j: i32 = i + 1; j < maxIter; j++) {
22384
- let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22385
- f_zi = 2.0 * f_zr * f_zi + cy;
22386
- f_zr = t_zr;
22387
- mag2 = f_zr * f_zr + f_zi * f_zi;
22388
- if (mag2 > 4.0) {
22389
- return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22390
- }
22391
- }
22392
- return 1.0;
22393
- }
22394
- }
22395
- return 1.0;
22396
- }
22397
-
22398
- fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
22399
- var dr = z_delta.x;
22400
- var di = z_delta.y;
22401
- let orbitLen = min(maxIter, _refOrbitLen);
22402
- for (var i: i32 = 0; i < orbitLen; i++) {
22403
- let Zn = _pt_fetch_orbit(i);
22404
- let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22405
- let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22406
- dr = new_dr;
22407
- di = new_di;
22408
- var Zn1 = vec2f(0.0);
22409
- if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22410
- let zr = Zn1.x + dr;
22411
- let zi = Zn1.y + di;
22412
- var mag2 = zr * zr + zi * zi;
22413
- if (mag2 > 4.0) {
22414
- return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22415
- }
22416
- let dmag2 = dr * dr + di * di;
22417
- let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22418
- if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22419
- var f_zr = Zn1.x + dr;
22420
- var f_zi = Zn1.y + di;
22421
- let cx = delta_c.x;
22422
- let cy = delta_c.y;
22423
- for (var j: i32 = i + 1; j < maxIter; j++) {
22424
- let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22425
- f_zi = 2.0 * f_zr * f_zi + cy;
22426
- f_zr = t_zr;
22427
- mag2 = f_zr * f_zr + f_zi * f_zi;
22428
- if (mag2 > 4.0) {
22429
- return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22430
- }
22431
- }
22432
- return 1.0;
22433
- }
22434
- }
22435
- return 1.0;
22436
- }
22437
22083
  `;
22438
22084
  var GPU_COLOR_PREAMBLE_GLSL = `
22439
22085
  float _gpu_srgb_to_linear(float c) {
@@ -22873,7 +22519,6 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
22873
22519
  const constants = this.getConstants();
22874
22520
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
22875
22521
  const target = this.createTarget({
22876
- hints: options.hints,
22877
22522
  functions: (id) => {
22878
22523
  if (userFunctions && id in userFunctions) {
22879
22524
  const fn = userFunctions[id];
@@ -22912,65 +22557,12 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
22912
22557
  if (code.includes("_gpu_besselJ"))
22913
22558
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
22914
22559
  if (code.includes("_fractal_")) {
22915
- if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
22916
- preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22917
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
22918
- } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
22919
- preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22920
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
22921
- } else {
22922
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22923
- }
22560
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22924
22561
  }
22925
22562
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
22926
22563
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
22927
22564
  }
22928
22565
  if (preamble) result.preamble = preamble;
22929
- if (code.includes("_fractal_") && options.hints?.viewport) {
22930
- const strategy = selectFractalStrategy(target);
22931
- const radius = options.hints.viewport.radius;
22932
- switch (strategy) {
22933
- case "single":
22934
- result.staleWhen = { radiusBelow: 1e-6 };
22935
- break;
22936
- case "double":
22937
- result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
22938
- break;
22939
- case "perturbation":
22940
- result.staleWhen = {
22941
- radiusAbove: 1e-5,
22942
- radiusBelow: radius * 0.01,
22943
- centerDistance: radius * 2
22944
- };
22945
- break;
22946
- }
22947
- }
22948
- if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
22949
- const viewport = options.hints.viewport;
22950
- const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
22951
- const maxIter = 1e3;
22952
- const orbit = computeReferenceOrbit(
22953
- viewport.center,
22954
- maxIter,
22955
- digits
22956
- );
22957
- const orbitLen = orbit.length / 2;
22958
- const texWidth = Math.min(orbitLen, 4096);
22959
- const texHeight = Math.ceil(orbitLen / texWidth);
22960
- result.textures = {
22961
- _refOrbit: {
22962
- data: orbit,
22963
- width: texWidth,
22964
- height: texHeight,
22965
- format: "rg32f"
22966
- }
22967
- };
22968
- result.uniforms = {
22969
- ...result.uniforms,
22970
- _refOrbitLen: orbitLen,
22971
- _refOrbitTexWidth: texWidth
22972
- };
22973
- }
22974
22566
  return result;
22975
22567
  }
22976
22568
  compileToSource(expr, _options = {}) {
@@ -25305,7 +24897,7 @@ ${code}`;
25305
24897
  }
25306
24898
 
25307
24899
  // src/compile.ts
25308
- var version = "0.55.4";
24900
+ var version = "0.55.6";
25309
24901
  return __toCommonJS(compile_exports);
25310
24902
  })();
25311
24903
  /*! Bundled license information: