@cortex-js/compute-engine 0.55.3 → 0.55.5

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 +613 -32
  2. package/dist/compile.min.esm.js +492 -70
  3. package/dist/compile.min.umd.cjs +492 -70
  4. package/dist/compile.umd.cjs +613 -32
  5. package/dist/compute-engine.esm.js +656 -44
  6. package/dist/compute-engine.min.esm.js +485 -63
  7. package/dist/compute-engine.min.umd.cjs +484 -62
  8. package/dist/compute-engine.umd.cjs +656 -44
  9. package/dist/core.esm.js +654 -43
  10. package/dist/core.min.esm.js +483 -61
  11. package/dist/core.min.umd.cjs +483 -61
  12. package/dist/core.umd.cjs +654 -43
  13. package/dist/interval.esm.js +2 -2
  14. package/dist/interval.min.esm.js +2 -2
  15. package/dist/interval.min.umd.cjs +2 -2
  16. package/dist/interval.umd.cjs +2 -2
  17. package/dist/latex-syntax.esm.js +43 -13
  18. package/dist/latex-syntax.min.esm.js +5 -5
  19. package/dist/latex-syntax.min.umd.cjs +5 -5
  20. package/dist/latex-syntax.umd.cjs +43 -13
  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 +3 -2
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +19 -0
  108. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  109. package/dist/types/compute-engine/compilation/gpu-target.d.ts +54 -1
  110. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  113. package/dist/types/compute-engine/compilation/types.d.ts +67 -1
  114. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  115. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  116. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  117. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  118. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  119. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  120. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  121. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  132. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  133. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  134. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  135. package/dist/types/compute-engine/global-types.d.ts +1 -1
  136. package/dist/types/compute-engine/index.d.ts +3 -2
  137. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  138. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  139. package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
  140. package/dist/types/compute-engine/interval/index.d.ts +1 -1
  141. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  142. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  143. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  144. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  145. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  146. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  147. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  148. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  149. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  150. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  151. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  168. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
  171. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  172. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  173. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  174. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  175. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  176. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  177. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  178. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  179. package/dist/types/compute-engine/library/core.d.ts +1 -1
  180. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  181. package/dist/types/compute-engine/library/library.d.ts +1 -1
  182. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  183. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  184. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  185. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  186. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  187. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  188. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  189. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  190. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  191. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  192. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  193. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  194. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  195. package/dist/types/compute-engine/library/units.d.ts +1 -1
  196. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  197. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  198. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  199. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  200. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  201. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  202. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  203. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  204. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  205. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  206. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  207. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  208. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  209. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  211. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  217. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  218. package/dist/types/compute-engine/oeis.d.ts +1 -1
  219. package/dist/types/compute-engine/sequence.d.ts +1 -1
  220. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  221. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  222. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  223. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  224. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  225. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  226. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  227. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  228. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  229. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  230. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  238. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  239. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  240. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  241. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  242. package/dist/types/compute-engine/types-engine.d.ts +1 -1
  243. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  244. package/dist/types/compute-engine/types-expression.d.ts +1 -1
  245. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
  246. package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
  247. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  248. package/dist/types/compute-engine/types.d.ts +1 -1
  249. package/dist/types/compute-engine.d.ts +3 -2
  250. package/dist/types/core.d.ts +1 -1
  251. package/dist/types/interval.d.ts +1 -1
  252. package/dist/types/latex-syntax.d.ts +2 -2
  253. package/dist/types/math-json/symbols.d.ts +1 -1
  254. package/dist/types/math-json/types.d.ts +1 -1
  255. package/dist/types/math-json/utils.d.ts +1 -1
  256. package/dist/types/math-json.d.ts +2 -2
  257. package/dist/types/numerics.d.ts +1 -1
  258. package/package.json +3 -3
package/dist/core.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- /** Compute Engine 0.55.3 */
1
+ /** Compute Engine 0.55.5 */
2
2
 
3
3
  // node_modules/complex-esm/dist/src/complex.js
4
4
  var cosh = Math.cosh || function(x) {
@@ -17152,6 +17152,10 @@ function parseSymbolBody(parser) {
17152
17152
  parser.nextToken();
17153
17153
  continue;
17154
17154
  }
17155
+ if (EMOJIS.test(id + token)) {
17156
+ id += parser.nextToken();
17157
+ continue;
17158
+ }
17155
17159
  const next = parseSymbolToken(parser, { toplevel: false });
17156
17160
  if (next === null) return null;
17157
17161
  id += next;
@@ -17191,6 +17195,7 @@ function parseSymbolBody(parser) {
17191
17195
  function matchPrefixedSymbol(parser) {
17192
17196
  const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17193
17197
  if (prefix === null) return null;
17198
+ const start = parser.index;
17194
17199
  parser.nextToken();
17195
17200
  if (parser.match("<{>")) {
17196
17201
  let body = "";
@@ -17211,17 +17216,48 @@ function matchPrefixedSymbol(parser) {
17211
17216
  parser.nextToken();
17212
17217
  }
17213
17218
  body += parseSymbolBody(parser);
17214
- if (body === null || !parser.match("<}>")) return null;
17219
+ if (body === null || !parser.match("<}>")) {
17220
+ parser.index = start;
17221
+ return null;
17222
+ }
17215
17223
  if (prefix === "_upright" && body.length > 1) return body;
17216
17224
  return body + prefix;
17217
17225
  }
17226
+ parser.index = start;
17218
17227
  return null;
17219
17228
  }
17220
17229
  function parseInvalidSymbol(parser) {
17221
17230
  const start = parser.index;
17222
17231
  const id = matchPrefixedSymbol(parser);
17223
- if (id === null || isValidSymbol(id)) return null;
17224
- return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17232
+ if (id !== null) {
17233
+ if (isValidSymbol(id)) return null;
17234
+ return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17235
+ }
17236
+ parser.index = start;
17237
+ const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17238
+ if (prefix === null) return null;
17239
+ parser.nextToken();
17240
+ if (!parser.match("<{>")) {
17241
+ parser.index = start;
17242
+ return null;
17243
+ }
17244
+ const bodyStart = parser.index;
17245
+ let level = 0;
17246
+ while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
17247
+ if (parser.peek === "<{>") level += 1;
17248
+ if (parser.peek === "<}>") level -= 1;
17249
+ parser.nextToken();
17250
+ }
17251
+ const bodyText = parser.latex(bodyStart, parser.index);
17252
+ if (isValidSymbol(bodyText)) {
17253
+ parser.index = start;
17254
+ return null;
17255
+ }
17256
+ parser.match("<}>");
17257
+ return parser.error(
17258
+ ["invalid-symbol", { str: validateSymbol(bodyText) }],
17259
+ start
17260
+ );
17225
17261
  }
17226
17262
  function parseSymbol(parser) {
17227
17263
  if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
@@ -18176,18 +18212,12 @@ var _Parser = class __Parser {
18176
18212
  this.index = start;
18177
18213
  return false;
18178
18214
  }
18179
- const matchedToken = this.nextToken();
18180
- const useLatexCommand = matchedToken.startsWith("\\");
18215
+ this.nextToken();
18181
18216
  if (hasBracedDelimiter && !this.match("<}>")) {
18182
18217
  this.index = start;
18183
18218
  return false;
18184
18219
  }
18185
- const closeTokens = DELIMITER_SHORTHAND2[close[0]] ?? [
18186
- close[0]
18187
- ];
18188
- const closeToken = closeTokens.find(
18189
- (t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
18190
- ) ?? closeTokens[0];
18220
+ const closeToken = close[0];
18191
18221
  const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
18192
18222
  this.addBoundary(closeBoundary3);
18193
18223
  return true;
@@ -39582,30 +39612,6 @@ var COOLWARM = [
39582
39612
  "#ae2036",
39583
39613
  "#b40426"
39584
39614
  ];
39585
- var OCEAN_BALANCE = [
39586
- "#00441b",
39587
- "#006d5b",
39588
- "#1a8c7d",
39589
- "#2fa394",
39590
- "#4fb3a3",
39591
- "#6fc1b3",
39592
- "#8dcfc3",
39593
- "#a6dbd1",
39594
- "#bfe6de",
39595
- "#d7f0ea",
39596
- "#f7f7f7",
39597
- "#eeeeee",
39598
- "#ddd8e6",
39599
- "#c7bcda",
39600
- "#b3a0d0",
39601
- "#9f86c7",
39602
- "#8d6dbd",
39603
- "#7b56b1",
39604
- "#6a42a3",
39605
- "#5a3093",
39606
- "#4a1f82",
39607
- "#3b0f70"
39608
- ];
39609
39615
  var reversePalette = (palette) => palette.slice().reverse();
39610
39616
  var DIVERGING_PALETTES = {
39611
39617
  roma: ROMA,
@@ -39617,9 +39623,7 @@ var DIVERGING_PALETTES = {
39617
39623
  rdbu: RDBU,
39618
39624
  "rdbu-reversed": reversePalette(RDBU),
39619
39625
  coolwarm: COOLWARM,
39620
- "coolwarm-reversed": reversePalette(COOLWARM),
39621
- "ocean-balance": OCEAN_BALANCE,
39622
- "ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
39626
+ "coolwarm-reversed": reversePalette(COOLWARM)
39623
39627
  };
39624
39628
  var TURBO = [
39625
39629
  "#30123b",
@@ -41703,6 +41707,40 @@ var GREY = [
41703
41707
  "#eeeeee",
41704
41708
  "#ffffff"
41705
41709
  ];
41710
+ var CMOCEAN_PHASE = [
41711
+ "#a8780d",
41712
+ "#b3701b",
41713
+ "#be6828",
41714
+ "#c75f35",
41715
+ "#cf5643",
41716
+ "#d54b53",
41717
+ "#db4066",
41718
+ "#de357b",
41719
+ "#df2a93",
41720
+ "#dc25ad",
41721
+ "#d529c4",
41722
+ "#cc34d7",
41723
+ "#c041e5",
41724
+ "#b24fef",
41725
+ "#a25cf3",
41726
+ "#9168f4",
41727
+ "#7d73f0",
41728
+ "#687ce8",
41729
+ "#5285dc",
41730
+ "#3d8bcd",
41731
+ "#2c90bc",
41732
+ "#2093ac",
41733
+ "#19959c",
41734
+ "#12978c",
41735
+ "#0c987c",
41736
+ "#119a69",
41737
+ "#249a52",
41738
+ "#409839",
41739
+ "#5e9420",
41740
+ "#778d12",
41741
+ "#8b860d",
41742
+ "#9b7f0d"
41743
+ ];
41706
41744
  var reversePalette2 = (palette) => palette.slice().reverse();
41707
41745
  var SEQUENTIAL_PALETTES = {
41708
41746
  turbo: TURBO,
@@ -41726,7 +41764,9 @@ var SEQUENTIAL_PALETTES = {
41726
41764
  "rocket-reversed": reversePalette2(ROCKET),
41727
41765
  mako: MAKO,
41728
41766
  // blue to teal
41729
- "mako-reversed": reversePalette2(MAKO)
41767
+ "mako-reversed": reversePalette2(MAKO),
41768
+ "cmocean-phase": CMOCEAN_PHASE,
41769
+ "cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
41730
41770
  };
41731
41771
 
41732
41772
  // src/compute-engine/library/colors.ts
@@ -54723,7 +54763,8 @@ function compile(expr2, options) {
54723
54763
  vars: options?.vars,
54724
54764
  imports: options?.imports,
54725
54765
  preamble: options?.preamble,
54726
- realOnly: options?.realOnly
54766
+ realOnly: options?.realOnly,
54767
+ hints: options?.hints
54727
54768
  });
54728
54769
  } catch (e) {
54729
54770
  if (options?.fallback ?? true) {
@@ -61223,6 +61264,43 @@ function fibonacci(n) {
61223
61264
  return b;
61224
61265
  }
61225
61266
 
61267
+ // src/compute-engine/compilation/fractal-orbit.ts
61268
+ function toBigDecimal(v) {
61269
+ if (typeof v === "object" && "hi" in v)
61270
+ return new BigDecimal(v.hi).add(new BigDecimal(v.lo));
61271
+ return new BigDecimal(v);
61272
+ }
61273
+ function hpToNumber(v) {
61274
+ if (typeof v === "number") return v;
61275
+ if (typeof v === "string") return Number(v);
61276
+ return v.hi + v.lo;
61277
+ }
61278
+ function computeReferenceOrbit(center, maxIter, precision) {
61279
+ const prevPrecision = BigDecimal.precision;
61280
+ BigDecimal.precision = precision;
61281
+ try {
61282
+ const cr = toBigDecimal(center[0]);
61283
+ const ci = toBigDecimal(center[1]);
61284
+ let zr = BigDecimal.ZERO;
61285
+ let zi = BigDecimal.ZERO;
61286
+ const ESCAPE = new BigDecimal(256);
61287
+ const points = [];
61288
+ for (let i = 0; i < maxIter; i++) {
61289
+ points.push(zr.toNumber(), zi.toNumber());
61290
+ const zr2 = zr.mul(zr).toPrecision(precision);
61291
+ const zi2 = zi.mul(zi).toPrecision(precision);
61292
+ const mag2 = zr2.add(zi2);
61293
+ if (mag2.cmp(ESCAPE) > 0) break;
61294
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
61295
+ zr = zr2.sub(zi2).add(cr);
61296
+ zi = new_zi;
61297
+ }
61298
+ return new Float32Array(points);
61299
+ } finally {
61300
+ BigDecimal.precision = prevPrecision;
61301
+ }
61302
+ }
61303
+
61226
61304
  // src/compute-engine/compilation/gpu-target.ts
61227
61305
  var GPU_OPERATORS = {
61228
61306
  Add: ["+", 11],
@@ -61306,6 +61384,13 @@ function compileGPUSumProduct(kind, args, _compile2, target) {
61306
61384
  ];
61307
61385
  return lines.join("\n");
61308
61386
  }
61387
+ function selectFractalStrategy(target) {
61388
+ const radius = target.hints?.viewport?.radius;
61389
+ if (radius === void 0) return "single";
61390
+ if (radius > 1e-6) return "single";
61391
+ if (radius > 1e-14) return "double";
61392
+ return "perturbation";
61393
+ }
61309
61394
  var GPU_FUNCTIONS = {
61310
61395
  // Variadic arithmetic (for function-call form, e.g., with vectors)
61311
61396
  Add: (args, compile3, target) => {
@@ -61801,12 +61886,32 @@ var GPU_FUNCTIONS = {
61801
61886
  if (c === null || maxIter === null)
61802
61887
  throw new Error("Mandelbrot: missing arguments");
61803
61888
  const iterCode = compileIntArg(maxIter, compile3, target);
61889
+ const strategy = selectFractalStrategy(target);
61890
+ if (strategy === "double") {
61891
+ const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
61892
+ return `_fractal_mandelbrot_dp(${dpCoord}, ${iterCode})`;
61893
+ }
61894
+ if (strategy === "perturbation") {
61895
+ const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
61896
+ return `_fractal_mandelbrot_pt(${ptDelta}, ${iterCode})`;
61897
+ }
61804
61898
  return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
61805
61899
  },
61806
61900
  Julia: ([z, c, maxIter], compile3, target) => {
61807
61901
  if (z === null || c === null || maxIter === null)
61808
61902
  throw new Error("Julia: missing arguments");
61809
61903
  const iterCode = compileIntArg(maxIter, compile3, target);
61904
+ const strategy = selectFractalStrategy(target);
61905
+ if (strategy === "double") {
61906
+ const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
61907
+ const cCode = compile3(c);
61908
+ return `_fractal_julia_dp(${dpCoord}, vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61909
+ }
61910
+ if (strategy === "perturbation") {
61911
+ const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
61912
+ const cCode = compile3(c);
61913
+ return `_fractal_julia_pt(${ptDelta}, ${cCode}, ${iterCode})`;
61914
+ }
61810
61915
  return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
61811
61916
  },
61812
61917
  // Vector/Matrix operations
@@ -62404,6 +62509,232 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
62404
62509
  return sgn * vals[n] / norm;
62405
62510
  }
62406
62511
  `;
62512
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
62513
+ // Split a float into high and low parts for exact multiplication
62514
+ vec2 ds_split(float a) {
62515
+ const float SPLIT = 4097.0; // 2^12 + 1
62516
+ float t = SPLIT * a;
62517
+ float hi = t - (t - a);
62518
+ float lo = a - hi;
62519
+ return vec2(hi, lo);
62520
+ }
62521
+
62522
+ // Create a double-single from a single float
62523
+ vec2 ds_from(float a) {
62524
+ return vec2(a, 0.0);
62525
+ }
62526
+
62527
+ // Error-free addition (Knuth TwoSum)
62528
+ vec2 ds_add(vec2 a, vec2 b) {
62529
+ float s = a.x + b.x;
62530
+ float v = s - a.x;
62531
+ float e = (a.x - (s - v)) + (b.x - v);
62532
+ float lo = (a.y + b.y) + e;
62533
+ float hi = s + lo;
62534
+ lo = lo - (hi - s);
62535
+ return vec2(hi, lo);
62536
+ }
62537
+
62538
+ // Double-single subtraction
62539
+ vec2 ds_sub(vec2 a, vec2 b) {
62540
+ return ds_add(a, vec2(-b.x, -b.y));
62541
+ }
62542
+
62543
+ // Error-free multiplication (Dekker TwoProduct)
62544
+ vec2 ds_mul(vec2 a, vec2 b) {
62545
+ float p = a.x * b.x;
62546
+ vec2 sa = ds_split(a.x);
62547
+ vec2 sb = ds_split(b.x);
62548
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62549
+ err += a.x * b.y + a.y * b.x;
62550
+ float hi = p + err;
62551
+ float lo = err - (hi - p);
62552
+ return vec2(hi, lo);
62553
+ }
62554
+
62555
+ // Optimized self-multiply
62556
+ vec2 ds_sqr(vec2 a) {
62557
+ float p = a.x * a.x;
62558
+ vec2 sa = ds_split(a.x);
62559
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62560
+ err += 2.0 * a.x * a.y;
62561
+ float hi = p + err;
62562
+ float lo = err - (hi - p);
62563
+ return vec2(hi, lo);
62564
+ }
62565
+
62566
+ // Compare magnitude: returns -1, 0, or 1
62567
+ float ds_cmp(vec2 a, vec2 b) {
62568
+ float d = a.x - b.x;
62569
+ if (d != 0.0) return sign(d);
62570
+ return sign(a.y - b.y);
62571
+ }
62572
+ `;
62573
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
62574
+ fn ds_split(a: f32) -> vec2f {
62575
+ const SPLIT: f32 = 4097.0;
62576
+ let t = SPLIT * a;
62577
+ let hi = t - (t - a);
62578
+ let lo = a - hi;
62579
+ return vec2f(hi, lo);
62580
+ }
62581
+
62582
+ fn ds_from(a: f32) -> vec2f {
62583
+ return vec2f(a, 0.0);
62584
+ }
62585
+
62586
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
62587
+ let s = a.x + b.x;
62588
+ let v = s - a.x;
62589
+ let e = (a.x - (s - v)) + (b.x - v);
62590
+ let lo_t = (a.y + b.y) + e;
62591
+ let hi = s + lo_t;
62592
+ let lo = lo_t - (hi - s);
62593
+ return vec2f(hi, lo);
62594
+ }
62595
+
62596
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
62597
+ return ds_add(a, vec2f(-b.x, -b.y));
62598
+ }
62599
+
62600
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
62601
+ let p = a.x * b.x;
62602
+ let sa = ds_split(a.x);
62603
+ let sb = ds_split(b.x);
62604
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62605
+ err += a.x * b.y + a.y * b.x;
62606
+ let hi = p + err;
62607
+ let lo = err - (hi - p);
62608
+ return vec2f(hi, lo);
62609
+ }
62610
+
62611
+ fn ds_sqr(a: vec2f) -> vec2f {
62612
+ let p = a.x * a.x;
62613
+ let sa = ds_split(a.x);
62614
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62615
+ err += 2.0 * a.x * a.y;
62616
+ let hi = p + err;
62617
+ let lo = err - (hi - p);
62618
+ return vec2f(hi, lo);
62619
+ }
62620
+
62621
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
62622
+ let d = a.x - b.x;
62623
+ if (d != 0.0) { return sign(d); }
62624
+ return sign(a.y - b.y);
62625
+ }
62626
+ `;
62627
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
62628
+ uniform float _dp_cx_hi;
62629
+ uniform float _dp_cx_lo;
62630
+ uniform float _dp_cy_hi;
62631
+ uniform float _dp_cy_lo;
62632
+ uniform float _dp_w;
62633
+ uniform float _dp_h;
62634
+
62635
+ vec4 _dp_coord() {
62636
+ // Per-pixel offset from center \u2014 small, so float-precise
62637
+ float dx = (v_uv.x - 0.5) * _dp_w;
62638
+ float dy = (v_uv.y - 0.5) * _dp_h;
62639
+ // Combine center (hi+lo) + delta with emulated double precision
62640
+ vec2 cre = ds_add(vec2(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
62641
+ vec2 cim = ds_add(vec2(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
62642
+ return vec4(cre.x, cim.x, cre.y, cim.y);
62643
+ }
62644
+
62645
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
62646
+ // c = (re_hi, im_hi, re_lo, im_lo)
62647
+ vec2 cr = vec2(c.x, c.z); // real part as ds
62648
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
62649
+ vec2 zr = vec2(0.0, 0.0);
62650
+ vec2 zi = vec2(0.0, 0.0);
62651
+ for (int i = 0; i < maxIter; i++) {
62652
+ vec2 zr2 = ds_sqr(zr);
62653
+ vec2 zi2 = ds_sqr(zi);
62654
+ // |z|^2 > 4.0 ?
62655
+ vec2 mag2 = ds_add(zr2, zi2);
62656
+ if (mag2.x > 4.0)
62657
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62658
+ // z = z^2 + c
62659
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
62660
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
62661
+ zi = new_zi;
62662
+ }
62663
+ return 1.0;
62664
+ }
62665
+
62666
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
62667
+ vec2 zr = vec2(z_in.x, z_in.z);
62668
+ vec2 zi = vec2(z_in.y, z_in.w);
62669
+ vec2 cr = vec2(c.x, c.z);
62670
+ vec2 ci = vec2(c.y, c.w);
62671
+ for (int i = 0; i < maxIter; i++) {
62672
+ vec2 zr2 = ds_sqr(zr);
62673
+ vec2 zi2 = ds_sqr(zi);
62674
+ vec2 mag2 = ds_add(zr2, zi2);
62675
+ if (mag2.x > 4.0)
62676
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62677
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62678
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62679
+ zi = new_zi;
62680
+ }
62681
+ return 1.0;
62682
+ }
62683
+ `;
62684
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
62685
+ @group(0) @binding(10) var<uniform> _dp_cx_hi: f32;
62686
+ @group(0) @binding(11) var<uniform> _dp_cx_lo: f32;
62687
+ @group(0) @binding(12) var<uniform> _dp_cy_hi: f32;
62688
+ @group(0) @binding(13) var<uniform> _dp_cy_lo: f32;
62689
+ @group(0) @binding(14) var<uniform> _dp_w: f32;
62690
+ @group(0) @binding(15) var<uniform> _dp_h: f32;
62691
+
62692
+ fn _dp_coord(uv: vec2f) -> vec4f {
62693
+ let dx = (uv.x - 0.5) * _dp_w;
62694
+ let dy = (uv.y - 0.5) * _dp_h;
62695
+ let cre = ds_add(vec2f(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
62696
+ let cim = ds_add(vec2f(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
62697
+ return vec4f(cre.x, cim.x, cre.y, cim.y);
62698
+ }
62699
+
62700
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
62701
+ let cr = vec2f(c.x, c.z);
62702
+ let ci = vec2f(c.y, c.w);
62703
+ var zr = vec2f(0.0, 0.0);
62704
+ var zi = vec2f(0.0, 0.0);
62705
+ for (var i: i32 = 0; i < maxIter; i++) {
62706
+ let zr2 = ds_sqr(zr);
62707
+ let zi2 = ds_sqr(zi);
62708
+ let mag2 = ds_add(zr2, zi2);
62709
+ if (mag2.x > 4.0) {
62710
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62711
+ }
62712
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62713
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62714
+ zi = new_zi;
62715
+ }
62716
+ return 1.0;
62717
+ }
62718
+
62719
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
62720
+ var zr = vec2f(z_in.x, z_in.z);
62721
+ var zi = vec2f(z_in.y, z_in.w);
62722
+ let cr = vec2f(c.x, c.z);
62723
+ let ci = vec2f(c.y, c.w);
62724
+ for (var i: i32 = 0; i < maxIter; i++) {
62725
+ let zr2 = ds_sqr(zr);
62726
+ let zi2 = ds_sqr(zi);
62727
+ let mag2 = ds_add(zr2, zi2);
62728
+ if (mag2.x > 4.0) {
62729
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62730
+ }
62731
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62732
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62733
+ zi = new_zi;
62734
+ }
62735
+ return 1.0;
62736
+ }
62737
+ `;
62407
62738
  var GPU_FRACTAL_PREAMBLE_GLSL = `
62408
62739
  float _fractal_mandelbrot(vec2 c, int maxIter) {
62409
62740
  vec2 z = vec2(0.0, 0.0);
@@ -62447,6 +62778,208 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
62447
62778
  return 1.0;
62448
62779
  }
62449
62780
  `;
62781
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
62782
+ uniform sampler2D _refOrbit;
62783
+ uniform int _refOrbitLen;
62784
+ uniform int _refOrbitTexWidth;
62785
+ uniform float _pt_offset_x;
62786
+ uniform float _pt_offset_y;
62787
+ uniform float _pt_w;
62788
+ uniform float _pt_h;
62789
+
62790
+ vec2 _pt_delta() {
62791
+ float dx = _pt_offset_x + (v_uv.x - 0.5) * _pt_w;
62792
+ float dy = _pt_offset_y + (v_uv.y - 0.5) * _pt_h;
62793
+ return vec2(dx, dy);
62794
+ }
62795
+
62796
+ vec2 _pt_fetch_orbit(int i) {
62797
+ int y = i / _refOrbitTexWidth;
62798
+ int x = i - y * _refOrbitTexWidth;
62799
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
62800
+ }
62801
+
62802
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
62803
+ float dr = 0.0;
62804
+ float di = 0.0;
62805
+ int orbitLen = min(maxIter, _refOrbitLen);
62806
+ for (int i = 0; i < orbitLen; i++) {
62807
+ vec2 Zn = _pt_fetch_orbit(i);
62808
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
62809
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62810
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62811
+ dr = new_dr;
62812
+ di = new_di;
62813
+ // Full z = Z_{n+1} + delta for escape check
62814
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62815
+ float zr = Zn1.x + dr;
62816
+ float zi = Zn1.y + di;
62817
+ float mag2 = zr * zr + zi * zi;
62818
+ if (mag2 > 4.0)
62819
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62820
+ // Glitch detection: |delta|^2 > |Z|^2
62821
+ float dmag2 = dr * dr + di * di;
62822
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62823
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62824
+ // Rebase to absolute coordinates and continue with single-float
62825
+ float abs_zr = Zn1.x + dr;
62826
+ float abs_zi = Zn1.y + di;
62827
+ // Reconstruct absolute c from reference + delta
62828
+ // (Use ds_from for the concept, but single-float suffices for fallback)
62829
+ float cx = abs_zr - dr + delta_c.x;
62830
+ float cy = abs_zi - di + delta_c.y;
62831
+ for (int j = i + 1; j < maxIter; j++) {
62832
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62833
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62834
+ abs_zr = new_zr;
62835
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62836
+ if (mag2 > 4.0)
62837
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62838
+ }
62839
+ return 1.0;
62840
+ }
62841
+ }
62842
+ return 1.0;
62843
+ }
62844
+
62845
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
62846
+ float dr = z_delta.x;
62847
+ float di = z_delta.y;
62848
+ int orbitLen = min(maxIter, _refOrbitLen);
62849
+ for (int i = 0; i < orbitLen; i++) {
62850
+ vec2 Zn = _pt_fetch_orbit(i);
62851
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62852
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62853
+ dr = new_dr;
62854
+ di = new_di;
62855
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62856
+ float zr = Zn1.x + dr;
62857
+ float zi = Zn1.y + di;
62858
+ float mag2 = zr * zr + zi * zi;
62859
+ if (mag2 > 4.0)
62860
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62861
+ float dmag2 = dr * dr + di * di;
62862
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62863
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62864
+ float abs_zr = Zn1.x + dr;
62865
+ float abs_zi = Zn1.y + di;
62866
+ float cx = delta_c.x;
62867
+ float cy = delta_c.y;
62868
+ for (int j = i + 1; j < maxIter; j++) {
62869
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62870
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62871
+ abs_zr = new_zr;
62872
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62873
+ if (mag2 > 4.0)
62874
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62875
+ }
62876
+ return 1.0;
62877
+ }
62878
+ }
62879
+ return 1.0;
62880
+ }
62881
+ `;
62882
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
62883
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
62884
+ var<uniform> _refOrbitLen: i32;
62885
+ var<uniform> _refOrbitTexWidth: i32;
62886
+ var<uniform> _pt_offset_x: f32;
62887
+ var<uniform> _pt_offset_y: f32;
62888
+ var<uniform> _pt_w: f32;
62889
+ var<uniform> _pt_h: f32;
62890
+
62891
+ fn _pt_delta(uv: vec2f) -> vec2f {
62892
+ let dx = _pt_offset_x + (uv.x - 0.5) * _pt_w;
62893
+ let dy = _pt_offset_y + (uv.y - 0.5) * _pt_h;
62894
+ return vec2f(dx, dy);
62895
+ }
62896
+
62897
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
62898
+ let y = i / _refOrbitTexWidth;
62899
+ let x = i - y * _refOrbitTexWidth;
62900
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
62901
+ }
62902
+
62903
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
62904
+ var dr: f32 = 0.0;
62905
+ var di: f32 = 0.0;
62906
+ let orbitLen = min(maxIter, _refOrbitLen);
62907
+ for (var i: i32 = 0; i < orbitLen; i++) {
62908
+ let Zn = _pt_fetch_orbit(i);
62909
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62910
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62911
+ dr = new_dr;
62912
+ di = new_di;
62913
+ var Zn1 = vec2f(0.0);
62914
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62915
+ let zr = Zn1.x + dr;
62916
+ let zi = Zn1.y + di;
62917
+ var mag2 = zr * zr + zi * zi;
62918
+ if (mag2 > 4.0) {
62919
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62920
+ }
62921
+ let dmag2 = dr * dr + di * di;
62922
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62923
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62924
+ var f_zr = Zn1.x + dr;
62925
+ var f_zi = Zn1.y + di;
62926
+ let cx = delta_c.x;
62927
+ let cy = delta_c.y;
62928
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62929
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62930
+ f_zi = 2.0 * f_zr * f_zi + cy;
62931
+ f_zr = t_zr;
62932
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62933
+ if (mag2 > 4.0) {
62934
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62935
+ }
62936
+ }
62937
+ return 1.0;
62938
+ }
62939
+ }
62940
+ return 1.0;
62941
+ }
62942
+
62943
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
62944
+ var dr = z_delta.x;
62945
+ var di = z_delta.y;
62946
+ let orbitLen = min(maxIter, _refOrbitLen);
62947
+ for (var i: i32 = 0; i < orbitLen; i++) {
62948
+ let Zn = _pt_fetch_orbit(i);
62949
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62950
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62951
+ dr = new_dr;
62952
+ di = new_di;
62953
+ var Zn1 = vec2f(0.0);
62954
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62955
+ let zr = Zn1.x + dr;
62956
+ let zi = Zn1.y + di;
62957
+ var mag2 = zr * zr + zi * zi;
62958
+ if (mag2 > 4.0) {
62959
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62960
+ }
62961
+ let dmag2 = dr * dr + di * di;
62962
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62963
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62964
+ var f_zr = Zn1.x + dr;
62965
+ var f_zi = Zn1.y + di;
62966
+ let cx = delta_c.x;
62967
+ let cy = delta_c.y;
62968
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62969
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62970
+ f_zi = 2.0 * f_zr * f_zi + cy;
62971
+ f_zr = t_zr;
62972
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62973
+ if (mag2 > 4.0) {
62974
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62975
+ }
62976
+ }
62977
+ return 1.0;
62978
+ }
62979
+ }
62980
+ return 1.0;
62981
+ }
62982
+ `;
62450
62983
  var GPU_COLOR_PREAMBLE_GLSL = `
62451
62984
  float _gpu_srgb_to_linear(float c) {
62452
62985
  if (c <= 0.04045) return c / 12.92;
@@ -62885,6 +63418,7 @@ var GPUShaderTarget = class {
62885
63418
  const constants = this.getConstants();
62886
63419
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
62887
63420
  const target = this.createTarget({
63421
+ hints: options.hints,
62888
63422
  functions: (id) => {
62889
63423
  if (userFunctions && id in userFunctions) {
62890
63424
  const fn = userFunctions[id];
@@ -62923,12 +63457,89 @@ var GPUShaderTarget = class {
62923
63457
  if (code.includes("_gpu_besselJ"))
62924
63458
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
62925
63459
  if (code.includes("_fractal_")) {
62926
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63460
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
63461
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63462
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
63463
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
63464
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63465
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
63466
+ } else {
63467
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63468
+ }
62927
63469
  }
62928
63470
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
62929
63471
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
62930
63472
  }
62931
63473
  if (preamble) result.preamble = preamble;
63474
+ if (code.includes("_fractal_") && options.hints?.viewport) {
63475
+ const strategy = selectFractalStrategy(target);
63476
+ const radius = options.hints.viewport.radius;
63477
+ switch (strategy) {
63478
+ case "single":
63479
+ result.staleWhen = { radiusBelow: 1e-6 };
63480
+ break;
63481
+ case "double":
63482
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
63483
+ break;
63484
+ case "perturbation":
63485
+ result.staleWhen = {
63486
+ radiusAbove: 1e-5,
63487
+ radiusBelow: radius * 0.01,
63488
+ centerDistance: radius * 2
63489
+ };
63490
+ break;
63491
+ }
63492
+ }
63493
+ if ((code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) && options.hints?.viewport) {
63494
+ const cx = hpToNumber(options.hints.viewport.center[0]);
63495
+ const cy = hpToNumber(options.hints.viewport.center[1]);
63496
+ const size = options.hints.viewport.radius * 2;
63497
+ const cx_hi = Math.fround(cx);
63498
+ const cy_hi = Math.fround(cy);
63499
+ result.uniforms = {
63500
+ ...result.uniforms,
63501
+ _dp_cx_hi: cx_hi,
63502
+ _dp_cx_lo: cx - cx_hi,
63503
+ _dp_cy_hi: cy_hi,
63504
+ _dp_cy_lo: cy - cy_hi,
63505
+ _dp_w: size,
63506
+ _dp_h: size
63507
+ };
63508
+ }
63509
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
63510
+ const viewport = options.hints.viewport;
63511
+ const size = viewport.radius * 2;
63512
+ result.uniforms = {
63513
+ ...result.uniforms,
63514
+ _pt_offset_x: 0,
63515
+ _pt_offset_y: 0,
63516
+ _pt_w: size,
63517
+ _pt_h: size
63518
+ };
63519
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
63520
+ const maxIter = 1e3;
63521
+ const orbit = computeReferenceOrbit(
63522
+ viewport.center,
63523
+ maxIter,
63524
+ digits
63525
+ );
63526
+ const orbitLen = orbit.length / 2;
63527
+ const texWidth = Math.min(orbitLen, 4096);
63528
+ const texHeight = Math.ceil(orbitLen / texWidth);
63529
+ result.textures = {
63530
+ _refOrbit: {
63531
+ data: orbit,
63532
+ width: texWidth,
63533
+ height: texHeight,
63534
+ format: "rg32f"
63535
+ }
63536
+ };
63537
+ result.uniforms = {
63538
+ ...result.uniforms,
63539
+ _refOrbitLen: orbitLen,
63540
+ _refOrbitTexWidth: texWidth
63541
+ };
63542
+ }
62932
63543
  return result;
62933
63544
  }
62934
63545
  compileToSource(expr2, _options = {}) {
@@ -67911,7 +68522,7 @@ var ComputeEngine = class _ComputeEngine {
67911
68522
  _setDefaultEngineFactory(() => new ComputeEngine());
67912
68523
 
67913
68524
  // src/core.ts
67914
- var version = "0.55.3";
68525
+ var version = "0.55.5";
67915
68526
  export {
67916
68527
  ComputeEngine,
67917
68528
  N,