@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
  (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComputeEngine = {}));})(this, (function (exports) { 'use strict';
3
3
  var ComputeEngine = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -17227,6 +17227,10 @@ var ComputeEngine = (() => {
17227
17227
  parser.nextToken();
17228
17228
  continue;
17229
17229
  }
17230
+ if (EMOJIS.test(id + token)) {
17231
+ id += parser.nextToken();
17232
+ continue;
17233
+ }
17230
17234
  const next = parseSymbolToken(parser, { toplevel: false });
17231
17235
  if (next === null) return null;
17232
17236
  id += next;
@@ -17266,6 +17270,7 @@ var ComputeEngine = (() => {
17266
17270
  function matchPrefixedSymbol(parser) {
17267
17271
  const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17268
17272
  if (prefix === null) return null;
17273
+ const start = parser.index;
17269
17274
  parser.nextToken();
17270
17275
  if (parser.match("<{>")) {
17271
17276
  let body = "";
@@ -17286,17 +17291,48 @@ var ComputeEngine = (() => {
17286
17291
  parser.nextToken();
17287
17292
  }
17288
17293
  body += parseSymbolBody(parser);
17289
- if (body === null || !parser.match("<}>")) return null;
17294
+ if (body === null || !parser.match("<}>")) {
17295
+ parser.index = start;
17296
+ return null;
17297
+ }
17290
17298
  if (prefix === "_upright" && body.length > 1) return body;
17291
17299
  return body + prefix;
17292
17300
  }
17301
+ parser.index = start;
17293
17302
  return null;
17294
17303
  }
17295
17304
  function parseInvalidSymbol(parser) {
17296
17305
  const start = parser.index;
17297
17306
  const id = matchPrefixedSymbol(parser);
17298
- if (id === null || isValidSymbol(id)) return null;
17299
- return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17307
+ if (id !== null) {
17308
+ if (isValidSymbol(id)) return null;
17309
+ return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17310
+ }
17311
+ parser.index = start;
17312
+ const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17313
+ if (prefix === null) return null;
17314
+ parser.nextToken();
17315
+ if (!parser.match("<{>")) {
17316
+ parser.index = start;
17317
+ return null;
17318
+ }
17319
+ const bodyStart = parser.index;
17320
+ let level = 0;
17321
+ while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
17322
+ if (parser.peek === "<{>") level += 1;
17323
+ if (parser.peek === "<}>") level -= 1;
17324
+ parser.nextToken();
17325
+ }
17326
+ const bodyText = parser.latex(bodyStart, parser.index);
17327
+ if (isValidSymbol(bodyText)) {
17328
+ parser.index = start;
17329
+ return null;
17330
+ }
17331
+ parser.match("<}>");
17332
+ return parser.error(
17333
+ ["invalid-symbol", { str: validateSymbol(bodyText) }],
17334
+ start
17335
+ );
17300
17336
  }
17301
17337
  function parseSymbol(parser) {
17302
17338
  if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
@@ -18251,18 +18287,12 @@ var ComputeEngine = (() => {
18251
18287
  this.index = start;
18252
18288
  return false;
18253
18289
  }
18254
- const matchedToken = this.nextToken();
18255
- const useLatexCommand = matchedToken.startsWith("\\");
18290
+ this.nextToken();
18256
18291
  if (hasBracedDelimiter && !this.match("<}>")) {
18257
18292
  this.index = start;
18258
18293
  return false;
18259
18294
  }
18260
- const closeTokens = DELIMITER_SHORTHAND2[close[0]] ?? [
18261
- close[0]
18262
- ];
18263
- const closeToken = closeTokens.find(
18264
- (t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
18265
- ) ?? closeTokens[0];
18295
+ const closeToken = close[0];
18266
18296
  const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
18267
18297
  this.addBoundary(closeBoundary3);
18268
18298
  return true;
@@ -39657,30 +39687,6 @@ ${e.message}
39657
39687
  "#ae2036",
39658
39688
  "#b40426"
39659
39689
  ];
39660
- var OCEAN_BALANCE = [
39661
- "#00441b",
39662
- "#006d5b",
39663
- "#1a8c7d",
39664
- "#2fa394",
39665
- "#4fb3a3",
39666
- "#6fc1b3",
39667
- "#8dcfc3",
39668
- "#a6dbd1",
39669
- "#bfe6de",
39670
- "#d7f0ea",
39671
- "#f7f7f7",
39672
- "#eeeeee",
39673
- "#ddd8e6",
39674
- "#c7bcda",
39675
- "#b3a0d0",
39676
- "#9f86c7",
39677
- "#8d6dbd",
39678
- "#7b56b1",
39679
- "#6a42a3",
39680
- "#5a3093",
39681
- "#4a1f82",
39682
- "#3b0f70"
39683
- ];
39684
39690
  var reversePalette = (palette) => palette.slice().reverse();
39685
39691
  var DIVERGING_PALETTES = {
39686
39692
  roma: ROMA,
@@ -39692,9 +39698,7 @@ ${e.message}
39692
39698
  rdbu: RDBU,
39693
39699
  "rdbu-reversed": reversePalette(RDBU),
39694
39700
  coolwarm: COOLWARM,
39695
- "coolwarm-reversed": reversePalette(COOLWARM),
39696
- "ocean-balance": OCEAN_BALANCE,
39697
- "ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
39701
+ "coolwarm-reversed": reversePalette(COOLWARM)
39698
39702
  };
39699
39703
  var TURBO = [
39700
39704
  "#30123b",
@@ -41778,6 +41782,40 @@ ${e.message}
41778
41782
  "#eeeeee",
41779
41783
  "#ffffff"
41780
41784
  ];
41785
+ var CMOCEAN_PHASE = [
41786
+ "#a8780d",
41787
+ "#b3701b",
41788
+ "#be6828",
41789
+ "#c75f35",
41790
+ "#cf5643",
41791
+ "#d54b53",
41792
+ "#db4066",
41793
+ "#de357b",
41794
+ "#df2a93",
41795
+ "#dc25ad",
41796
+ "#d529c4",
41797
+ "#cc34d7",
41798
+ "#c041e5",
41799
+ "#b24fef",
41800
+ "#a25cf3",
41801
+ "#9168f4",
41802
+ "#7d73f0",
41803
+ "#687ce8",
41804
+ "#5285dc",
41805
+ "#3d8bcd",
41806
+ "#2c90bc",
41807
+ "#2093ac",
41808
+ "#19959c",
41809
+ "#12978c",
41810
+ "#0c987c",
41811
+ "#119a69",
41812
+ "#249a52",
41813
+ "#409839",
41814
+ "#5e9420",
41815
+ "#778d12",
41816
+ "#8b860d",
41817
+ "#9b7f0d"
41818
+ ];
41781
41819
  var reversePalette2 = (palette) => palette.slice().reverse();
41782
41820
  var SEQUENTIAL_PALETTES = {
41783
41821
  turbo: TURBO,
@@ -41801,7 +41839,9 @@ ${e.message}
41801
41839
  "rocket-reversed": reversePalette2(ROCKET),
41802
41840
  mako: MAKO,
41803
41841
  // blue to teal
41804
- "mako-reversed": reversePalette2(MAKO)
41842
+ "mako-reversed": reversePalette2(MAKO),
41843
+ "cmocean-phase": CMOCEAN_PHASE,
41844
+ "cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
41805
41845
  };
41806
41846
 
41807
41847
  // src/compute-engine/library/colors.ts
@@ -61298,6 +61338,33 @@ Error in definition of "${name}"`,
61298
61338
  return b;
61299
61339
  }
61300
61340
 
61341
+ // src/compute-engine/compilation/fractal-orbit.ts
61342
+ function computeReferenceOrbit(center, maxIter, precision) {
61343
+ const prevPrecision = BigDecimal.precision;
61344
+ BigDecimal.precision = precision;
61345
+ try {
61346
+ const cr = new BigDecimal(center[0]);
61347
+ const ci = new BigDecimal(center[1]);
61348
+ let zr = BigDecimal.ZERO;
61349
+ let zi = BigDecimal.ZERO;
61350
+ const ESCAPE = new BigDecimal(256);
61351
+ const points = [];
61352
+ for (let i = 0; i < maxIter; i++) {
61353
+ points.push(zr.toNumber(), zi.toNumber());
61354
+ const zr2 = zr.mul(zr).toPrecision(precision);
61355
+ const zi2 = zi.mul(zi).toPrecision(precision);
61356
+ const mag2 = zr2.add(zi2);
61357
+ if (mag2.cmp(ESCAPE) > 0) break;
61358
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
61359
+ zr = zr2.sub(zi2).add(cr);
61360
+ zi = new_zi;
61361
+ }
61362
+ return new Float32Array(points);
61363
+ } finally {
61364
+ BigDecimal.precision = prevPrecision;
61365
+ }
61366
+ }
61367
+
61301
61368
  // src/compute-engine/compilation/gpu-target.ts
61302
61369
  var GPU_OPERATORS = {
61303
61370
  Add: ["+", 11],
@@ -61381,6 +61448,13 @@ Error in definition of "${name}"`,
61381
61448
  ];
61382
61449
  return lines.join("\n");
61383
61450
  }
61451
+ function selectFractalStrategy(target) {
61452
+ const radius = target.hints?.viewport?.radius;
61453
+ if (radius === void 0) return "single";
61454
+ if (radius > 1e-6) return "single";
61455
+ if (radius > 1e-14) return "double";
61456
+ return "perturbation";
61457
+ }
61384
61458
  var GPU_FUNCTIONS = {
61385
61459
  // Variadic arithmetic (for function-call form, e.g., with vectors)
61386
61460
  Add: (args, compile3, target) => {
@@ -61876,12 +61950,32 @@ Error in definition of "${name}"`,
61876
61950
  if (c === null || maxIter === null)
61877
61951
  throw new Error("Mandelbrot: missing arguments");
61878
61952
  const iterCode = compileIntArg(maxIter, compile3, target);
61953
+ const strategy = selectFractalStrategy(target);
61954
+ if (strategy === "double") {
61955
+ const cCode = compile3(c);
61956
+ return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61957
+ }
61958
+ if (strategy === "perturbation") {
61959
+ const cCode = compile3(c);
61960
+ return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
61961
+ }
61879
61962
  return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
61880
61963
  },
61881
61964
  Julia: ([z, c, maxIter], compile3, target) => {
61882
61965
  if (z === null || c === null || maxIter === null)
61883
61966
  throw new Error("Julia: missing arguments");
61884
61967
  const iterCode = compileIntArg(maxIter, compile3, target);
61968
+ const strategy = selectFractalStrategy(target);
61969
+ if (strategy === "double") {
61970
+ const zCode = compile3(z);
61971
+ const cCode = compile3(c);
61972
+ return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61973
+ }
61974
+ if (strategy === "perturbation") {
61975
+ const zCode = compile3(z);
61976
+ const cCode = compile3(c);
61977
+ return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
61978
+ }
61885
61979
  return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
61886
61980
  },
61887
61981
  // Vector/Matrix operations
@@ -62478,6 +62572,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
62478
62572
  for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
62479
62573
  return sgn * vals[n] / norm;
62480
62574
  }
62575
+ `;
62576
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
62577
+ // Split a float into high and low parts for exact multiplication
62578
+ vec2 ds_split(float a) {
62579
+ const float SPLIT = 4097.0; // 2^12 + 1
62580
+ float t = SPLIT * a;
62581
+ float hi = t - (t - a);
62582
+ float lo = a - hi;
62583
+ return vec2(hi, lo);
62584
+ }
62585
+
62586
+ // Create a double-single from a single float
62587
+ vec2 ds_from(float a) {
62588
+ return vec2(a, 0.0);
62589
+ }
62590
+
62591
+ // Error-free addition (Knuth TwoSum)
62592
+ vec2 ds_add(vec2 a, vec2 b) {
62593
+ float s = a.x + b.x;
62594
+ float v = s - a.x;
62595
+ float e = (a.x - (s - v)) + (b.x - v);
62596
+ float lo = (a.y + b.y) + e;
62597
+ float hi = s + lo;
62598
+ lo = lo - (hi - s);
62599
+ return vec2(hi, lo);
62600
+ }
62601
+
62602
+ // Double-single subtraction
62603
+ vec2 ds_sub(vec2 a, vec2 b) {
62604
+ return ds_add(a, vec2(-b.x, -b.y));
62605
+ }
62606
+
62607
+ // Error-free multiplication (Dekker TwoProduct)
62608
+ vec2 ds_mul(vec2 a, vec2 b) {
62609
+ float p = a.x * b.x;
62610
+ vec2 sa = ds_split(a.x);
62611
+ vec2 sb = ds_split(b.x);
62612
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62613
+ err += a.x * b.y + a.y * b.x;
62614
+ float hi = p + err;
62615
+ float lo = err - (hi - p);
62616
+ return vec2(hi, lo);
62617
+ }
62618
+
62619
+ // Optimized self-multiply
62620
+ vec2 ds_sqr(vec2 a) {
62621
+ float p = a.x * a.x;
62622
+ vec2 sa = ds_split(a.x);
62623
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62624
+ err += 2.0 * a.x * a.y;
62625
+ float hi = p + err;
62626
+ float lo = err - (hi - p);
62627
+ return vec2(hi, lo);
62628
+ }
62629
+
62630
+ // Compare magnitude: returns -1, 0, or 1
62631
+ float ds_cmp(vec2 a, vec2 b) {
62632
+ float d = a.x - b.x;
62633
+ if (d != 0.0) return sign(d);
62634
+ return sign(a.y - b.y);
62635
+ }
62636
+ `;
62637
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
62638
+ fn ds_split(a: f32) -> vec2f {
62639
+ const SPLIT: f32 = 4097.0;
62640
+ let t = SPLIT * a;
62641
+ let hi = t - (t - a);
62642
+ let lo = a - hi;
62643
+ return vec2f(hi, lo);
62644
+ }
62645
+
62646
+ fn ds_from(a: f32) -> vec2f {
62647
+ return vec2f(a, 0.0);
62648
+ }
62649
+
62650
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
62651
+ let s = a.x + b.x;
62652
+ let v = s - a.x;
62653
+ let e = (a.x - (s - v)) + (b.x - v);
62654
+ let lo_t = (a.y + b.y) + e;
62655
+ let hi = s + lo_t;
62656
+ let lo = lo_t - (hi - s);
62657
+ return vec2f(hi, lo);
62658
+ }
62659
+
62660
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
62661
+ return ds_add(a, vec2f(-b.x, -b.y));
62662
+ }
62663
+
62664
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
62665
+ let p = a.x * b.x;
62666
+ let sa = ds_split(a.x);
62667
+ let sb = ds_split(b.x);
62668
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62669
+ err += a.x * b.y + a.y * b.x;
62670
+ let hi = p + err;
62671
+ let lo = err - (hi - p);
62672
+ return vec2f(hi, lo);
62673
+ }
62674
+
62675
+ fn ds_sqr(a: vec2f) -> vec2f {
62676
+ let p = a.x * a.x;
62677
+ let sa = ds_split(a.x);
62678
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62679
+ err += 2.0 * a.x * a.y;
62680
+ let hi = p + err;
62681
+ let lo = err - (hi - p);
62682
+ return vec2f(hi, lo);
62683
+ }
62684
+
62685
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
62686
+ let d = a.x - b.x;
62687
+ if (d != 0.0) { return sign(d); }
62688
+ return sign(a.y - b.y);
62689
+ }
62690
+ `;
62691
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
62692
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
62693
+ // c = (re_hi, im_hi, re_lo, im_lo)
62694
+ vec2 cr = vec2(c.x, c.z); // real part as ds
62695
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
62696
+ vec2 zr = vec2(0.0, 0.0);
62697
+ vec2 zi = vec2(0.0, 0.0);
62698
+ for (int i = 0; i < maxIter; i++) {
62699
+ vec2 zr2 = ds_sqr(zr);
62700
+ vec2 zi2 = ds_sqr(zi);
62701
+ // |z|^2 > 4.0 ?
62702
+ vec2 mag2 = ds_add(zr2, zi2);
62703
+ if (mag2.x > 4.0)
62704
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62705
+ // z = z^2 + c
62706
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
62707
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
62708
+ zi = new_zi;
62709
+ }
62710
+ return 1.0;
62711
+ }
62712
+
62713
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
62714
+ vec2 zr = vec2(z_in.x, z_in.z);
62715
+ vec2 zi = vec2(z_in.y, z_in.w);
62716
+ vec2 cr = vec2(c.x, c.z);
62717
+ vec2 ci = vec2(c.y, c.w);
62718
+ for (int i = 0; i < maxIter; i++) {
62719
+ vec2 zr2 = ds_sqr(zr);
62720
+ vec2 zi2 = ds_sqr(zi);
62721
+ vec2 mag2 = ds_add(zr2, zi2);
62722
+ if (mag2.x > 4.0)
62723
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62724
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62725
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62726
+ zi = new_zi;
62727
+ }
62728
+ return 1.0;
62729
+ }
62730
+ `;
62731
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
62732
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
62733
+ let cr = vec2f(c.x, c.z);
62734
+ let ci = vec2f(c.y, c.w);
62735
+ var zr = vec2f(0.0, 0.0);
62736
+ var zi = vec2f(0.0, 0.0);
62737
+ for (var i: i32 = 0; i < maxIter; i++) {
62738
+ let zr2 = ds_sqr(zr);
62739
+ let zi2 = ds_sqr(zi);
62740
+ let mag2 = ds_add(zr2, zi2);
62741
+ if (mag2.x > 4.0) {
62742
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62743
+ }
62744
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62745
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62746
+ zi = new_zi;
62747
+ }
62748
+ return 1.0;
62749
+ }
62750
+
62751
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
62752
+ var zr = vec2f(z_in.x, z_in.z);
62753
+ var zi = vec2f(z_in.y, z_in.w);
62754
+ let cr = vec2f(c.x, c.z);
62755
+ let ci = vec2f(c.y, c.w);
62756
+ for (var i: i32 = 0; i < maxIter; i++) {
62757
+ let zr2 = ds_sqr(zr);
62758
+ let zi2 = ds_sqr(zi);
62759
+ let mag2 = ds_add(zr2, zi2);
62760
+ if (mag2.x > 4.0) {
62761
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62762
+ }
62763
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62764
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62765
+ zi = new_zi;
62766
+ }
62767
+ return 1.0;
62768
+ }
62481
62769
  `;
62482
62770
  var GPU_FRACTAL_PREAMBLE_GLSL = `
62483
62771
  float _fractal_mandelbrot(vec2 c, int maxIter) {
@@ -62521,6 +62809,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
62521
62809
  }
62522
62810
  return 1.0;
62523
62811
  }
62812
+ `;
62813
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
62814
+ uniform sampler2D _refOrbit;
62815
+ uniform int _refOrbitLen;
62816
+ uniform int _refOrbitTexWidth;
62817
+
62818
+ vec2 _pt_fetch_orbit(int i) {
62819
+ int y = i / _refOrbitTexWidth;
62820
+ int x = i - y * _refOrbitTexWidth;
62821
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
62822
+ }
62823
+
62824
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
62825
+ float dr = 0.0;
62826
+ float di = 0.0;
62827
+ int orbitLen = min(maxIter, _refOrbitLen);
62828
+ for (int i = 0; i < orbitLen; i++) {
62829
+ vec2 Zn = _pt_fetch_orbit(i);
62830
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
62831
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62832
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62833
+ dr = new_dr;
62834
+ di = new_di;
62835
+ // Full z = Z_{n+1} + delta for escape check
62836
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62837
+ float zr = Zn1.x + dr;
62838
+ float zi = Zn1.y + di;
62839
+ float mag2 = zr * zr + zi * zi;
62840
+ if (mag2 > 4.0)
62841
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62842
+ // Glitch detection: |delta|^2 > |Z|^2
62843
+ float dmag2 = dr * dr + di * di;
62844
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62845
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62846
+ // Rebase to absolute coordinates and continue with single-float
62847
+ float abs_zr = Zn1.x + dr;
62848
+ float abs_zi = Zn1.y + di;
62849
+ // Reconstruct absolute c from reference + delta
62850
+ // (Use ds_from for the concept, but single-float suffices for fallback)
62851
+ float cx = abs_zr - dr + delta_c.x;
62852
+ float cy = abs_zi - di + delta_c.y;
62853
+ for (int j = i + 1; j < maxIter; j++) {
62854
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62855
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62856
+ abs_zr = new_zr;
62857
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62858
+ if (mag2 > 4.0)
62859
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62860
+ }
62861
+ return 1.0;
62862
+ }
62863
+ }
62864
+ return 1.0;
62865
+ }
62866
+
62867
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
62868
+ float dr = z_delta.x;
62869
+ float di = z_delta.y;
62870
+ int orbitLen = min(maxIter, _refOrbitLen);
62871
+ for (int i = 0; i < orbitLen; i++) {
62872
+ vec2 Zn = _pt_fetch_orbit(i);
62873
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62874
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62875
+ dr = new_dr;
62876
+ di = new_di;
62877
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62878
+ float zr = Zn1.x + dr;
62879
+ float zi = Zn1.y + di;
62880
+ float mag2 = zr * zr + zi * zi;
62881
+ if (mag2 > 4.0)
62882
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62883
+ float dmag2 = dr * dr + di * di;
62884
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62885
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62886
+ float abs_zr = Zn1.x + dr;
62887
+ float abs_zi = Zn1.y + di;
62888
+ float cx = delta_c.x;
62889
+ float cy = delta_c.y;
62890
+ for (int j = i + 1; j < maxIter; j++) {
62891
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62892
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62893
+ abs_zr = new_zr;
62894
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62895
+ if (mag2 > 4.0)
62896
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62897
+ }
62898
+ return 1.0;
62899
+ }
62900
+ }
62901
+ return 1.0;
62902
+ }
62903
+ `;
62904
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
62905
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
62906
+ var<uniform> _refOrbitLen: i32;
62907
+ var<uniform> _refOrbitTexWidth: i32;
62908
+
62909
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
62910
+ let y = i / _refOrbitTexWidth;
62911
+ let x = i - y * _refOrbitTexWidth;
62912
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
62913
+ }
62914
+
62915
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
62916
+ var dr: f32 = 0.0;
62917
+ var di: f32 = 0.0;
62918
+ let orbitLen = min(maxIter, _refOrbitLen);
62919
+ for (var i: i32 = 0; i < orbitLen; i++) {
62920
+ let Zn = _pt_fetch_orbit(i);
62921
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62922
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62923
+ dr = new_dr;
62924
+ di = new_di;
62925
+ var Zn1 = vec2f(0.0);
62926
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62927
+ let zr = Zn1.x + dr;
62928
+ let zi = Zn1.y + di;
62929
+ var mag2 = zr * zr + zi * zi;
62930
+ if (mag2 > 4.0) {
62931
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62932
+ }
62933
+ let dmag2 = dr * dr + di * di;
62934
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62935
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62936
+ var f_zr = Zn1.x + dr;
62937
+ var f_zi = Zn1.y + di;
62938
+ let cx = delta_c.x;
62939
+ let cy = delta_c.y;
62940
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62941
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62942
+ f_zi = 2.0 * f_zr * f_zi + cy;
62943
+ f_zr = t_zr;
62944
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62945
+ if (mag2 > 4.0) {
62946
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62947
+ }
62948
+ }
62949
+ return 1.0;
62950
+ }
62951
+ }
62952
+ return 1.0;
62953
+ }
62954
+
62955
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
62956
+ var dr = z_delta.x;
62957
+ var di = z_delta.y;
62958
+ let orbitLen = min(maxIter, _refOrbitLen);
62959
+ for (var i: i32 = 0; i < orbitLen; i++) {
62960
+ let Zn = _pt_fetch_orbit(i);
62961
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62962
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62963
+ dr = new_dr;
62964
+ di = new_di;
62965
+ var Zn1 = vec2f(0.0);
62966
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62967
+ let zr = Zn1.x + dr;
62968
+ let zi = Zn1.y + di;
62969
+ var mag2 = zr * zr + zi * zi;
62970
+ if (mag2 > 4.0) {
62971
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62972
+ }
62973
+ let dmag2 = dr * dr + di * di;
62974
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62975
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62976
+ var f_zr = Zn1.x + dr;
62977
+ var f_zi = Zn1.y + di;
62978
+ let cx = delta_c.x;
62979
+ let cy = delta_c.y;
62980
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62981
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62982
+ f_zi = 2.0 * f_zr * f_zi + cy;
62983
+ f_zr = t_zr;
62984
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62985
+ if (mag2 > 4.0) {
62986
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62987
+ }
62988
+ }
62989
+ return 1.0;
62990
+ }
62991
+ }
62992
+ return 1.0;
62993
+ }
62524
62994
  `;
62525
62995
  var GPU_COLOR_PREAMBLE_GLSL = `
62526
62996
  float _gpu_srgb_to_linear(float c) {
@@ -62960,6 +63430,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
62960
63430
  const constants = this.getConstants();
62961
63431
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
62962
63432
  const target = this.createTarget({
63433
+ hints: options.hints,
62963
63434
  functions: (id) => {
62964
63435
  if (userFunctions && id in userFunctions) {
62965
63436
  const fn = userFunctions[id];
@@ -62998,12 +63469,65 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
62998
63469
  if (code.includes("_gpu_besselJ"))
62999
63470
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
63000
63471
  if (code.includes("_fractal_")) {
63001
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63472
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
63473
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63474
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
63475
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
63476
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63477
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
63478
+ } else {
63479
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63480
+ }
63002
63481
  }
63003
63482
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
63004
63483
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
63005
63484
  }
63006
63485
  if (preamble) result.preamble = preamble;
63486
+ if (code.includes("_fractal_") && options.hints?.viewport) {
63487
+ const strategy = selectFractalStrategy(target);
63488
+ const radius = options.hints.viewport.radius;
63489
+ switch (strategy) {
63490
+ case "single":
63491
+ result.staleWhen = { radiusBelow: 1e-6 };
63492
+ break;
63493
+ case "double":
63494
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
63495
+ break;
63496
+ case "perturbation":
63497
+ result.staleWhen = {
63498
+ radiusAbove: 1e-5,
63499
+ radiusBelow: radius * 0.01,
63500
+ centerDistance: radius * 2
63501
+ };
63502
+ break;
63503
+ }
63504
+ }
63505
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
63506
+ const viewport = options.hints.viewport;
63507
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
63508
+ const maxIter = 1e3;
63509
+ const orbit = computeReferenceOrbit(
63510
+ viewport.center,
63511
+ maxIter,
63512
+ digits
63513
+ );
63514
+ const orbitLen = orbit.length / 2;
63515
+ const texWidth = Math.min(orbitLen, 4096);
63516
+ const texHeight = Math.ceil(orbitLen / texWidth);
63517
+ result.textures = {
63518
+ _refOrbit: {
63519
+ data: orbit,
63520
+ width: texWidth,
63521
+ height: texHeight,
63522
+ format: "rg32f"
63523
+ }
63524
+ };
63525
+ result.uniforms = {
63526
+ ...result.uniforms,
63527
+ _refOrbitLen: orbitLen,
63528
+ _refOrbitTexWidth: texWidth
63529
+ };
63530
+ }
63007
63531
  return result;
63008
63532
  }
63009
63533
  compileToSource(expr2, _options = {}) {
@@ -68408,14 +68932,14 @@ ${code}`;
68408
68932
  _setDefaultEngineFactory(() => new ComputeEngine());
68409
68933
 
68410
68934
  // src/compute-engine.ts
68411
- var version = "0.55.3";
68935
+ var version = "0.55.4";
68412
68936
  ComputeEngine._latexSyntaxFactory = () => new LatexSyntax();
68413
68937
  _setDefaultEngineFactory(
68414
68938
  () => new ComputeEngine({ latexSyntax: new LatexSyntax() })
68415
68939
  );
68416
68940
  globalThis[/* @__PURE__ */ Symbol.for("io.cortexjs.compute-engine")] = {
68417
68941
  ComputeEngine: ComputeEngine.prototype.constructor,
68418
- version: "0.55.3"
68942
+ version: "0.55.4"
68419
68943
  };
68420
68944
  return __toCommonJS(compute_engine_exports);
68421
68945
  })();