@cortex-js/compute-engine 0.55.3 → 0.55.4

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 +525 -31
  2. package/dist/compile.min.esm.js +440 -70
  3. package/dist/compile.min.umd.cjs +439 -69
  4. package/dist/compile.umd.cjs +525 -31
  5. package/dist/compute-engine.esm.js +567 -43
  6. package/dist/compute-engine.min.esm.js +433 -63
  7. package/dist/compute-engine.min.umd.cjs +433 -63
  8. package/dist/compute-engine.umd.cjs +567 -43
  9. package/dist/core.esm.js +566 -42
  10. package/dist/core.min.esm.js +432 -62
  11. package/dist/core.min.umd.cjs +432 -62
  12. package/dist/core.umd.cjs +566 -42
  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 +1 -1
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +13 -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 +47 -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 +48 -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 +1 -1
  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 +1 -1
  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
@@ -1,4 +1,4 @@
1
- /** Compute Engine 0.55.3 */
1
+ /** Compute Engine 0.55.4 */
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
@@ -61223,6 +61263,33 @@ function fibonacci(n) {
61223
61263
  return b;
61224
61264
  }
61225
61265
 
61266
+ // src/compute-engine/compilation/fractal-orbit.ts
61267
+ function computeReferenceOrbit(center, maxIter, precision) {
61268
+ const prevPrecision = BigDecimal.precision;
61269
+ BigDecimal.precision = precision;
61270
+ try {
61271
+ const cr = new BigDecimal(center[0]);
61272
+ const ci = new BigDecimal(center[1]);
61273
+ let zr = BigDecimal.ZERO;
61274
+ let zi = BigDecimal.ZERO;
61275
+ const ESCAPE = new BigDecimal(256);
61276
+ const points = [];
61277
+ for (let i = 0; i < maxIter; i++) {
61278
+ points.push(zr.toNumber(), zi.toNumber());
61279
+ const zr2 = zr.mul(zr).toPrecision(precision);
61280
+ const zi2 = zi.mul(zi).toPrecision(precision);
61281
+ const mag2 = zr2.add(zi2);
61282
+ if (mag2.cmp(ESCAPE) > 0) break;
61283
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
61284
+ zr = zr2.sub(zi2).add(cr);
61285
+ zi = new_zi;
61286
+ }
61287
+ return new Float32Array(points);
61288
+ } finally {
61289
+ BigDecimal.precision = prevPrecision;
61290
+ }
61291
+ }
61292
+
61226
61293
  // src/compute-engine/compilation/gpu-target.ts
61227
61294
  var GPU_OPERATORS = {
61228
61295
  Add: ["+", 11],
@@ -61306,6 +61373,13 @@ function compileGPUSumProduct(kind, args, _compile2, target) {
61306
61373
  ];
61307
61374
  return lines.join("\n");
61308
61375
  }
61376
+ function selectFractalStrategy(target) {
61377
+ const radius = target.hints?.viewport?.radius;
61378
+ if (radius === void 0) return "single";
61379
+ if (radius > 1e-6) return "single";
61380
+ if (radius > 1e-14) return "double";
61381
+ return "perturbation";
61382
+ }
61309
61383
  var GPU_FUNCTIONS = {
61310
61384
  // Variadic arithmetic (for function-call form, e.g., with vectors)
61311
61385
  Add: (args, compile3, target) => {
@@ -61801,12 +61875,32 @@ var GPU_FUNCTIONS = {
61801
61875
  if (c === null || maxIter === null)
61802
61876
  throw new Error("Mandelbrot: missing arguments");
61803
61877
  const iterCode = compileIntArg(maxIter, compile3, target);
61878
+ const strategy = selectFractalStrategy(target);
61879
+ if (strategy === "double") {
61880
+ const cCode = compile3(c);
61881
+ return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61882
+ }
61883
+ if (strategy === "perturbation") {
61884
+ const cCode = compile3(c);
61885
+ return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
61886
+ }
61804
61887
  return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
61805
61888
  },
61806
61889
  Julia: ([z, c, maxIter], compile3, target) => {
61807
61890
  if (z === null || c === null || maxIter === null)
61808
61891
  throw new Error("Julia: missing arguments");
61809
61892
  const iterCode = compileIntArg(maxIter, compile3, target);
61893
+ const strategy = selectFractalStrategy(target);
61894
+ if (strategy === "double") {
61895
+ const zCode = compile3(z);
61896
+ const cCode = compile3(c);
61897
+ return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61898
+ }
61899
+ if (strategy === "perturbation") {
61900
+ const zCode = compile3(z);
61901
+ const cCode = compile3(c);
61902
+ return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
61903
+ }
61810
61904
  return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
61811
61905
  },
61812
61906
  // Vector/Matrix operations
@@ -62404,6 +62498,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
62404
62498
  return sgn * vals[n] / norm;
62405
62499
  }
62406
62500
  `;
62501
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
62502
+ // Split a float into high and low parts for exact multiplication
62503
+ vec2 ds_split(float a) {
62504
+ const float SPLIT = 4097.0; // 2^12 + 1
62505
+ float t = SPLIT * a;
62506
+ float hi = t - (t - a);
62507
+ float lo = a - hi;
62508
+ return vec2(hi, lo);
62509
+ }
62510
+
62511
+ // Create a double-single from a single float
62512
+ vec2 ds_from(float a) {
62513
+ return vec2(a, 0.0);
62514
+ }
62515
+
62516
+ // Error-free addition (Knuth TwoSum)
62517
+ vec2 ds_add(vec2 a, vec2 b) {
62518
+ float s = a.x + b.x;
62519
+ float v = s - a.x;
62520
+ float e = (a.x - (s - v)) + (b.x - v);
62521
+ float lo = (a.y + b.y) + e;
62522
+ float hi = s + lo;
62523
+ lo = lo - (hi - s);
62524
+ return vec2(hi, lo);
62525
+ }
62526
+
62527
+ // Double-single subtraction
62528
+ vec2 ds_sub(vec2 a, vec2 b) {
62529
+ return ds_add(a, vec2(-b.x, -b.y));
62530
+ }
62531
+
62532
+ // Error-free multiplication (Dekker TwoProduct)
62533
+ vec2 ds_mul(vec2 a, vec2 b) {
62534
+ float p = a.x * b.x;
62535
+ vec2 sa = ds_split(a.x);
62536
+ vec2 sb = ds_split(b.x);
62537
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62538
+ err += a.x * b.y + a.y * b.x;
62539
+ float hi = p + err;
62540
+ float lo = err - (hi - p);
62541
+ return vec2(hi, lo);
62542
+ }
62543
+
62544
+ // Optimized self-multiply
62545
+ vec2 ds_sqr(vec2 a) {
62546
+ float p = a.x * a.x;
62547
+ vec2 sa = ds_split(a.x);
62548
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62549
+ err += 2.0 * a.x * a.y;
62550
+ float hi = p + err;
62551
+ float lo = err - (hi - p);
62552
+ return vec2(hi, lo);
62553
+ }
62554
+
62555
+ // Compare magnitude: returns -1, 0, or 1
62556
+ float ds_cmp(vec2 a, vec2 b) {
62557
+ float d = a.x - b.x;
62558
+ if (d != 0.0) return sign(d);
62559
+ return sign(a.y - b.y);
62560
+ }
62561
+ `;
62562
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
62563
+ fn ds_split(a: f32) -> vec2f {
62564
+ const SPLIT: f32 = 4097.0;
62565
+ let t = SPLIT * a;
62566
+ let hi = t - (t - a);
62567
+ let lo = a - hi;
62568
+ return vec2f(hi, lo);
62569
+ }
62570
+
62571
+ fn ds_from(a: f32) -> vec2f {
62572
+ return vec2f(a, 0.0);
62573
+ }
62574
+
62575
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
62576
+ let s = a.x + b.x;
62577
+ let v = s - a.x;
62578
+ let e = (a.x - (s - v)) + (b.x - v);
62579
+ let lo_t = (a.y + b.y) + e;
62580
+ let hi = s + lo_t;
62581
+ let lo = lo_t - (hi - s);
62582
+ return vec2f(hi, lo);
62583
+ }
62584
+
62585
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
62586
+ return ds_add(a, vec2f(-b.x, -b.y));
62587
+ }
62588
+
62589
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
62590
+ let p = a.x * b.x;
62591
+ let sa = ds_split(a.x);
62592
+ let sb = ds_split(b.x);
62593
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62594
+ err += a.x * b.y + a.y * b.x;
62595
+ let hi = p + err;
62596
+ let lo = err - (hi - p);
62597
+ return vec2f(hi, lo);
62598
+ }
62599
+
62600
+ fn ds_sqr(a: vec2f) -> vec2f {
62601
+ let p = a.x * a.x;
62602
+ let sa = ds_split(a.x);
62603
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62604
+ err += 2.0 * a.x * a.y;
62605
+ let hi = p + err;
62606
+ let lo = err - (hi - p);
62607
+ return vec2f(hi, lo);
62608
+ }
62609
+
62610
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
62611
+ let d = a.x - b.x;
62612
+ if (d != 0.0) { return sign(d); }
62613
+ return sign(a.y - b.y);
62614
+ }
62615
+ `;
62616
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
62617
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
62618
+ // c = (re_hi, im_hi, re_lo, im_lo)
62619
+ vec2 cr = vec2(c.x, c.z); // real part as ds
62620
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
62621
+ vec2 zr = vec2(0.0, 0.0);
62622
+ vec2 zi = vec2(0.0, 0.0);
62623
+ for (int i = 0; i < maxIter; i++) {
62624
+ vec2 zr2 = ds_sqr(zr);
62625
+ vec2 zi2 = ds_sqr(zi);
62626
+ // |z|^2 > 4.0 ?
62627
+ vec2 mag2 = ds_add(zr2, zi2);
62628
+ if (mag2.x > 4.0)
62629
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62630
+ // z = z^2 + c
62631
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
62632
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
62633
+ zi = new_zi;
62634
+ }
62635
+ return 1.0;
62636
+ }
62637
+
62638
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
62639
+ vec2 zr = vec2(z_in.x, z_in.z);
62640
+ vec2 zi = vec2(z_in.y, z_in.w);
62641
+ vec2 cr = vec2(c.x, c.z);
62642
+ vec2 ci = vec2(c.y, c.w);
62643
+ for (int i = 0; i < maxIter; i++) {
62644
+ vec2 zr2 = ds_sqr(zr);
62645
+ vec2 zi2 = ds_sqr(zi);
62646
+ vec2 mag2 = ds_add(zr2, zi2);
62647
+ if (mag2.x > 4.0)
62648
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62649
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62650
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62651
+ zi = new_zi;
62652
+ }
62653
+ return 1.0;
62654
+ }
62655
+ `;
62656
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
62657
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
62658
+ let cr = vec2f(c.x, c.z);
62659
+ let ci = vec2f(c.y, c.w);
62660
+ var zr = vec2f(0.0, 0.0);
62661
+ var zi = vec2f(0.0, 0.0);
62662
+ for (var i: i32 = 0; i < maxIter; i++) {
62663
+ let zr2 = ds_sqr(zr);
62664
+ let zi2 = ds_sqr(zi);
62665
+ let mag2 = ds_add(zr2, zi2);
62666
+ if (mag2.x > 4.0) {
62667
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62668
+ }
62669
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62670
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62671
+ zi = new_zi;
62672
+ }
62673
+ return 1.0;
62674
+ }
62675
+
62676
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
62677
+ var zr = vec2f(z_in.x, z_in.z);
62678
+ var zi = vec2f(z_in.y, z_in.w);
62679
+ let cr = vec2f(c.x, c.z);
62680
+ let ci = vec2f(c.y, c.w);
62681
+ for (var i: i32 = 0; i < maxIter; i++) {
62682
+ let zr2 = ds_sqr(zr);
62683
+ let zi2 = ds_sqr(zi);
62684
+ let mag2 = ds_add(zr2, zi2);
62685
+ if (mag2.x > 4.0) {
62686
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62687
+ }
62688
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62689
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62690
+ zi = new_zi;
62691
+ }
62692
+ return 1.0;
62693
+ }
62694
+ `;
62407
62695
  var GPU_FRACTAL_PREAMBLE_GLSL = `
62408
62696
  float _fractal_mandelbrot(vec2 c, int maxIter) {
62409
62697
  vec2 z = vec2(0.0, 0.0);
@@ -62447,6 +62735,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
62447
62735
  return 1.0;
62448
62736
  }
62449
62737
  `;
62738
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
62739
+ uniform sampler2D _refOrbit;
62740
+ uniform int _refOrbitLen;
62741
+ uniform int _refOrbitTexWidth;
62742
+
62743
+ vec2 _pt_fetch_orbit(int i) {
62744
+ int y = i / _refOrbitTexWidth;
62745
+ int x = i - y * _refOrbitTexWidth;
62746
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
62747
+ }
62748
+
62749
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
62750
+ float dr = 0.0;
62751
+ float di = 0.0;
62752
+ int orbitLen = min(maxIter, _refOrbitLen);
62753
+ for (int i = 0; i < orbitLen; i++) {
62754
+ vec2 Zn = _pt_fetch_orbit(i);
62755
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
62756
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62757
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62758
+ dr = new_dr;
62759
+ di = new_di;
62760
+ // Full z = Z_{n+1} + delta for escape check
62761
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62762
+ float zr = Zn1.x + dr;
62763
+ float zi = Zn1.y + di;
62764
+ float mag2 = zr * zr + zi * zi;
62765
+ if (mag2 > 4.0)
62766
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62767
+ // Glitch detection: |delta|^2 > |Z|^2
62768
+ float dmag2 = dr * dr + di * di;
62769
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62770
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62771
+ // Rebase to absolute coordinates and continue with single-float
62772
+ float abs_zr = Zn1.x + dr;
62773
+ float abs_zi = Zn1.y + di;
62774
+ // Reconstruct absolute c from reference + delta
62775
+ // (Use ds_from for the concept, but single-float suffices for fallback)
62776
+ float cx = abs_zr - dr + delta_c.x;
62777
+ float cy = abs_zi - di + delta_c.y;
62778
+ for (int j = i + 1; j < maxIter; j++) {
62779
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62780
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62781
+ abs_zr = new_zr;
62782
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62783
+ if (mag2 > 4.0)
62784
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62785
+ }
62786
+ return 1.0;
62787
+ }
62788
+ }
62789
+ return 1.0;
62790
+ }
62791
+
62792
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
62793
+ float dr = z_delta.x;
62794
+ float di = z_delta.y;
62795
+ int orbitLen = min(maxIter, _refOrbitLen);
62796
+ for (int i = 0; i < orbitLen; i++) {
62797
+ vec2 Zn = _pt_fetch_orbit(i);
62798
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62799
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62800
+ dr = new_dr;
62801
+ di = new_di;
62802
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62803
+ float zr = Zn1.x + dr;
62804
+ float zi = Zn1.y + di;
62805
+ float mag2 = zr * zr + zi * zi;
62806
+ if (mag2 > 4.0)
62807
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62808
+ float dmag2 = dr * dr + di * di;
62809
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62810
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62811
+ float abs_zr = Zn1.x + dr;
62812
+ float abs_zi = Zn1.y + di;
62813
+ float cx = delta_c.x;
62814
+ float cy = delta_c.y;
62815
+ for (int j = i + 1; j < maxIter; j++) {
62816
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62817
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62818
+ abs_zr = new_zr;
62819
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62820
+ if (mag2 > 4.0)
62821
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62822
+ }
62823
+ return 1.0;
62824
+ }
62825
+ }
62826
+ return 1.0;
62827
+ }
62828
+ `;
62829
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
62830
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
62831
+ var<uniform> _refOrbitLen: i32;
62832
+ var<uniform> _refOrbitTexWidth: i32;
62833
+
62834
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
62835
+ let y = i / _refOrbitTexWidth;
62836
+ let x = i - y * _refOrbitTexWidth;
62837
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
62838
+ }
62839
+
62840
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
62841
+ var dr: f32 = 0.0;
62842
+ var di: f32 = 0.0;
62843
+ let orbitLen = min(maxIter, _refOrbitLen);
62844
+ for (var i: i32 = 0; i < orbitLen; i++) {
62845
+ let Zn = _pt_fetch_orbit(i);
62846
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62847
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62848
+ dr = new_dr;
62849
+ di = new_di;
62850
+ var Zn1 = vec2f(0.0);
62851
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62852
+ let zr = Zn1.x + dr;
62853
+ let zi = Zn1.y + di;
62854
+ var mag2 = zr * zr + zi * zi;
62855
+ if (mag2 > 4.0) {
62856
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62857
+ }
62858
+ let dmag2 = dr * dr + di * di;
62859
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62860
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62861
+ var f_zr = Zn1.x + dr;
62862
+ var f_zi = Zn1.y + di;
62863
+ let cx = delta_c.x;
62864
+ let cy = delta_c.y;
62865
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62866
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62867
+ f_zi = 2.0 * f_zr * f_zi + cy;
62868
+ f_zr = t_zr;
62869
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62870
+ if (mag2 > 4.0) {
62871
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62872
+ }
62873
+ }
62874
+ return 1.0;
62875
+ }
62876
+ }
62877
+ return 1.0;
62878
+ }
62879
+
62880
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
62881
+ var dr = z_delta.x;
62882
+ var di = z_delta.y;
62883
+ let orbitLen = min(maxIter, _refOrbitLen);
62884
+ for (var i: i32 = 0; i < orbitLen; i++) {
62885
+ let Zn = _pt_fetch_orbit(i);
62886
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62887
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62888
+ dr = new_dr;
62889
+ di = new_di;
62890
+ var Zn1 = vec2f(0.0);
62891
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62892
+ let zr = Zn1.x + dr;
62893
+ let zi = Zn1.y + di;
62894
+ var mag2 = zr * zr + zi * zi;
62895
+ if (mag2 > 4.0) {
62896
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62897
+ }
62898
+ let dmag2 = dr * dr + di * di;
62899
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62900
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62901
+ var f_zr = Zn1.x + dr;
62902
+ var f_zi = Zn1.y + di;
62903
+ let cx = delta_c.x;
62904
+ let cy = delta_c.y;
62905
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62906
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62907
+ f_zi = 2.0 * f_zr * f_zi + cy;
62908
+ f_zr = t_zr;
62909
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62910
+ if (mag2 > 4.0) {
62911
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62912
+ }
62913
+ }
62914
+ return 1.0;
62915
+ }
62916
+ }
62917
+ return 1.0;
62918
+ }
62919
+ `;
62450
62920
  var GPU_COLOR_PREAMBLE_GLSL = `
62451
62921
  float _gpu_srgb_to_linear(float c) {
62452
62922
  if (c <= 0.04045) return c / 12.92;
@@ -62885,6 +63355,7 @@ var GPUShaderTarget = class {
62885
63355
  const constants = this.getConstants();
62886
63356
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
62887
63357
  const target = this.createTarget({
63358
+ hints: options.hints,
62888
63359
  functions: (id) => {
62889
63360
  if (userFunctions && id in userFunctions) {
62890
63361
  const fn = userFunctions[id];
@@ -62923,12 +63394,65 @@ var GPUShaderTarget = class {
62923
63394
  if (code.includes("_gpu_besselJ"))
62924
63395
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
62925
63396
  if (code.includes("_fractal_")) {
62926
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63397
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
63398
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63399
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
63400
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
63401
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63402
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
63403
+ } else {
63404
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63405
+ }
62927
63406
  }
62928
63407
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
62929
63408
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
62930
63409
  }
62931
63410
  if (preamble) result.preamble = preamble;
63411
+ if (code.includes("_fractal_") && options.hints?.viewport) {
63412
+ const strategy = selectFractalStrategy(target);
63413
+ const radius = options.hints.viewport.radius;
63414
+ switch (strategy) {
63415
+ case "single":
63416
+ result.staleWhen = { radiusBelow: 1e-6 };
63417
+ break;
63418
+ case "double":
63419
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
63420
+ break;
63421
+ case "perturbation":
63422
+ result.staleWhen = {
63423
+ radiusAbove: 1e-5,
63424
+ radiusBelow: radius * 0.01,
63425
+ centerDistance: radius * 2
63426
+ };
63427
+ break;
63428
+ }
63429
+ }
63430
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
63431
+ const viewport = options.hints.viewport;
63432
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
63433
+ const maxIter = 1e3;
63434
+ const orbit = computeReferenceOrbit(
63435
+ viewport.center,
63436
+ maxIter,
63437
+ digits
63438
+ );
63439
+ const orbitLen = orbit.length / 2;
63440
+ const texWidth = Math.min(orbitLen, 4096);
63441
+ const texHeight = Math.ceil(orbitLen / texWidth);
63442
+ result.textures = {
63443
+ _refOrbit: {
63444
+ data: orbit,
63445
+ width: texWidth,
63446
+ height: texHeight,
63447
+ format: "rg32f"
63448
+ }
63449
+ };
63450
+ result.uniforms = {
63451
+ ...result.uniforms,
63452
+ _refOrbitLen: orbitLen,
63453
+ _refOrbitTexWidth: texWidth
63454
+ };
63455
+ }
62932
63456
  return result;
62933
63457
  }
62934
63458
  compileToSource(expr2, _options = {}) {
@@ -68333,14 +68857,14 @@ var ComputeEngine = class _ComputeEngine {
68333
68857
  _setDefaultEngineFactory(() => new ComputeEngine());
68334
68858
 
68335
68859
  // src/compute-engine.ts
68336
- var version = "0.55.3";
68860
+ var version = "0.55.4";
68337
68861
  ComputeEngine._latexSyntaxFactory = () => new LatexSyntax();
68338
68862
  _setDefaultEngineFactory(
68339
68863
  () => new ComputeEngine({ latexSyntax: new LatexSyntax() })
68340
68864
  );
68341
68865
  globalThis[/* @__PURE__ */ Symbol.for("io.cortexjs.compute-engine")] = {
68342
68866
  ComputeEngine: ComputeEngine.prototype.constructor,
68343
- version: "0.55.3"
68867
+ version: "0.55.4"
68344
68868
  };
68345
68869
  export {
68346
68870
  DEFINITIONS_ALGEBRA as ALGEBRA_DICTIONARY,