@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
package/dist/core.umd.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /** ComputeEngineCore 0.55.3 */
1
+ /** ComputeEngineCore 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.ComputeEngineCore = {}));})(this, (function (exports) { 'use strict';
3
3
  var ComputeEngineCore = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -17199,6 +17199,10 @@ var ComputeEngineCore = (() => {
17199
17199
  parser.nextToken();
17200
17200
  continue;
17201
17201
  }
17202
+ if (EMOJIS.test(id + token)) {
17203
+ id += parser.nextToken();
17204
+ continue;
17205
+ }
17202
17206
  const next = parseSymbolToken(parser, { toplevel: false });
17203
17207
  if (next === null) return null;
17204
17208
  id += next;
@@ -17238,6 +17242,7 @@ var ComputeEngineCore = (() => {
17238
17242
  function matchPrefixedSymbol(parser) {
17239
17243
  const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17240
17244
  if (prefix === null) return null;
17245
+ const start = parser.index;
17241
17246
  parser.nextToken();
17242
17247
  if (parser.match("<{>")) {
17243
17248
  let body = "";
@@ -17258,17 +17263,48 @@ var ComputeEngineCore = (() => {
17258
17263
  parser.nextToken();
17259
17264
  }
17260
17265
  body += parseSymbolBody(parser);
17261
- if (body === null || !parser.match("<}>")) return null;
17266
+ if (body === null || !parser.match("<}>")) {
17267
+ parser.index = start;
17268
+ return null;
17269
+ }
17262
17270
  if (prefix === "_upright" && body.length > 1) return body;
17263
17271
  return body + prefix;
17264
17272
  }
17273
+ parser.index = start;
17265
17274
  return null;
17266
17275
  }
17267
17276
  function parseInvalidSymbol(parser) {
17268
17277
  const start = parser.index;
17269
17278
  const id = matchPrefixedSymbol(parser);
17270
- if (id === null || isValidSymbol(id)) return null;
17271
- return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17279
+ if (id !== null) {
17280
+ if (isValidSymbol(id)) return null;
17281
+ return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
17282
+ }
17283
+ parser.index = start;
17284
+ const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
17285
+ if (prefix === null) return null;
17286
+ parser.nextToken();
17287
+ if (!parser.match("<{>")) {
17288
+ parser.index = start;
17289
+ return null;
17290
+ }
17291
+ const bodyStart = parser.index;
17292
+ let level = 0;
17293
+ while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
17294
+ if (parser.peek === "<{>") level += 1;
17295
+ if (parser.peek === "<}>") level -= 1;
17296
+ parser.nextToken();
17297
+ }
17298
+ const bodyText = parser.latex(bodyStart, parser.index);
17299
+ if (isValidSymbol(bodyText)) {
17300
+ parser.index = start;
17301
+ return null;
17302
+ }
17303
+ parser.match("<}>");
17304
+ return parser.error(
17305
+ ["invalid-symbol", { str: validateSymbol(bodyText) }],
17306
+ start
17307
+ );
17272
17308
  }
17273
17309
  function parseSymbol(parser) {
17274
17310
  if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
@@ -18223,18 +18259,12 @@ var ComputeEngineCore = (() => {
18223
18259
  this.index = start;
18224
18260
  return false;
18225
18261
  }
18226
- const matchedToken = this.nextToken();
18227
- const useLatexCommand = matchedToken.startsWith("\\");
18262
+ this.nextToken();
18228
18263
  if (hasBracedDelimiter && !this.match("<}>")) {
18229
18264
  this.index = start;
18230
18265
  return false;
18231
18266
  }
18232
- const closeTokens = DELIMITER_SHORTHAND2[close[0]] ?? [
18233
- close[0]
18234
- ];
18235
- const closeToken = closeTokens.find(
18236
- (t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
18237
- ) ?? closeTokens[0];
18267
+ const closeToken = close[0];
18238
18268
  const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
18239
18269
  this.addBoundary(closeBoundary3);
18240
18270
  return true;
@@ -39629,30 +39659,6 @@ ${e.message}
39629
39659
  "#ae2036",
39630
39660
  "#b40426"
39631
39661
  ];
39632
- var OCEAN_BALANCE = [
39633
- "#00441b",
39634
- "#006d5b",
39635
- "#1a8c7d",
39636
- "#2fa394",
39637
- "#4fb3a3",
39638
- "#6fc1b3",
39639
- "#8dcfc3",
39640
- "#a6dbd1",
39641
- "#bfe6de",
39642
- "#d7f0ea",
39643
- "#f7f7f7",
39644
- "#eeeeee",
39645
- "#ddd8e6",
39646
- "#c7bcda",
39647
- "#b3a0d0",
39648
- "#9f86c7",
39649
- "#8d6dbd",
39650
- "#7b56b1",
39651
- "#6a42a3",
39652
- "#5a3093",
39653
- "#4a1f82",
39654
- "#3b0f70"
39655
- ];
39656
39662
  var reversePalette = (palette) => palette.slice().reverse();
39657
39663
  var DIVERGING_PALETTES = {
39658
39664
  roma: ROMA,
@@ -39664,9 +39670,7 @@ ${e.message}
39664
39670
  rdbu: RDBU,
39665
39671
  "rdbu-reversed": reversePalette(RDBU),
39666
39672
  coolwarm: COOLWARM,
39667
- "coolwarm-reversed": reversePalette(COOLWARM),
39668
- "ocean-balance": OCEAN_BALANCE,
39669
- "ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
39673
+ "coolwarm-reversed": reversePalette(COOLWARM)
39670
39674
  };
39671
39675
  var TURBO = [
39672
39676
  "#30123b",
@@ -41750,6 +41754,40 @@ ${e.message}
41750
41754
  "#eeeeee",
41751
41755
  "#ffffff"
41752
41756
  ];
41757
+ var CMOCEAN_PHASE = [
41758
+ "#a8780d",
41759
+ "#b3701b",
41760
+ "#be6828",
41761
+ "#c75f35",
41762
+ "#cf5643",
41763
+ "#d54b53",
41764
+ "#db4066",
41765
+ "#de357b",
41766
+ "#df2a93",
41767
+ "#dc25ad",
41768
+ "#d529c4",
41769
+ "#cc34d7",
41770
+ "#c041e5",
41771
+ "#b24fef",
41772
+ "#a25cf3",
41773
+ "#9168f4",
41774
+ "#7d73f0",
41775
+ "#687ce8",
41776
+ "#5285dc",
41777
+ "#3d8bcd",
41778
+ "#2c90bc",
41779
+ "#2093ac",
41780
+ "#19959c",
41781
+ "#12978c",
41782
+ "#0c987c",
41783
+ "#119a69",
41784
+ "#249a52",
41785
+ "#409839",
41786
+ "#5e9420",
41787
+ "#778d12",
41788
+ "#8b860d",
41789
+ "#9b7f0d"
41790
+ ];
41753
41791
  var reversePalette2 = (palette) => palette.slice().reverse();
41754
41792
  var SEQUENTIAL_PALETTES = {
41755
41793
  turbo: TURBO,
@@ -41773,7 +41811,9 @@ ${e.message}
41773
41811
  "rocket-reversed": reversePalette2(ROCKET),
41774
41812
  mako: MAKO,
41775
41813
  // blue to teal
41776
- "mako-reversed": reversePalette2(MAKO)
41814
+ "mako-reversed": reversePalette2(MAKO),
41815
+ "cmocean-phase": CMOCEAN_PHASE,
41816
+ "cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
41777
41817
  };
41778
41818
 
41779
41819
  // src/compute-engine/library/colors.ts
@@ -61270,6 +61310,33 @@ Error in definition of "${name}"`,
61270
61310
  return b;
61271
61311
  }
61272
61312
 
61313
+ // src/compute-engine/compilation/fractal-orbit.ts
61314
+ function computeReferenceOrbit(center, maxIter, precision) {
61315
+ const prevPrecision = BigDecimal.precision;
61316
+ BigDecimal.precision = precision;
61317
+ try {
61318
+ const cr = new BigDecimal(center[0]);
61319
+ const ci = new BigDecimal(center[1]);
61320
+ let zr = BigDecimal.ZERO;
61321
+ let zi = BigDecimal.ZERO;
61322
+ const ESCAPE = new BigDecimal(256);
61323
+ const points = [];
61324
+ for (let i = 0; i < maxIter; i++) {
61325
+ points.push(zr.toNumber(), zi.toNumber());
61326
+ const zr2 = zr.mul(zr).toPrecision(precision);
61327
+ const zi2 = zi.mul(zi).toPrecision(precision);
61328
+ const mag2 = zr2.add(zi2);
61329
+ if (mag2.cmp(ESCAPE) > 0) break;
61330
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
61331
+ zr = zr2.sub(zi2).add(cr);
61332
+ zi = new_zi;
61333
+ }
61334
+ return new Float32Array(points);
61335
+ } finally {
61336
+ BigDecimal.precision = prevPrecision;
61337
+ }
61338
+ }
61339
+
61273
61340
  // src/compute-engine/compilation/gpu-target.ts
61274
61341
  var GPU_OPERATORS = {
61275
61342
  Add: ["+", 11],
@@ -61353,6 +61420,13 @@ Error in definition of "${name}"`,
61353
61420
  ];
61354
61421
  return lines.join("\n");
61355
61422
  }
61423
+ function selectFractalStrategy(target) {
61424
+ const radius = target.hints?.viewport?.radius;
61425
+ if (radius === void 0) return "single";
61426
+ if (radius > 1e-6) return "single";
61427
+ if (radius > 1e-14) return "double";
61428
+ return "perturbation";
61429
+ }
61356
61430
  var GPU_FUNCTIONS = {
61357
61431
  // Variadic arithmetic (for function-call form, e.g., with vectors)
61358
61432
  Add: (args, compile3, target) => {
@@ -61848,12 +61922,32 @@ Error in definition of "${name}"`,
61848
61922
  if (c === null || maxIter === null)
61849
61923
  throw new Error("Mandelbrot: missing arguments");
61850
61924
  const iterCode = compileIntArg(maxIter, compile3, target);
61925
+ const strategy = selectFractalStrategy(target);
61926
+ if (strategy === "double") {
61927
+ const cCode = compile3(c);
61928
+ return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61929
+ }
61930
+ if (strategy === "perturbation") {
61931
+ const cCode = compile3(c);
61932
+ return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
61933
+ }
61851
61934
  return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
61852
61935
  },
61853
61936
  Julia: ([z, c, maxIter], compile3, target) => {
61854
61937
  if (z === null || c === null || maxIter === null)
61855
61938
  throw new Error("Julia: missing arguments");
61856
61939
  const iterCode = compileIntArg(maxIter, compile3, target);
61940
+ const strategy = selectFractalStrategy(target);
61941
+ if (strategy === "double") {
61942
+ const zCode = compile3(z);
61943
+ const cCode = compile3(c);
61944
+ return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
61945
+ }
61946
+ if (strategy === "perturbation") {
61947
+ const zCode = compile3(z);
61948
+ const cCode = compile3(c);
61949
+ return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
61950
+ }
61857
61951
  return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
61858
61952
  },
61859
61953
  // Vector/Matrix operations
@@ -62450,6 +62544,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
62450
62544
  for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
62451
62545
  return sgn * vals[n] / norm;
62452
62546
  }
62547
+ `;
62548
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
62549
+ // Split a float into high and low parts for exact multiplication
62550
+ vec2 ds_split(float a) {
62551
+ const float SPLIT = 4097.0; // 2^12 + 1
62552
+ float t = SPLIT * a;
62553
+ float hi = t - (t - a);
62554
+ float lo = a - hi;
62555
+ return vec2(hi, lo);
62556
+ }
62557
+
62558
+ // Create a double-single from a single float
62559
+ vec2 ds_from(float a) {
62560
+ return vec2(a, 0.0);
62561
+ }
62562
+
62563
+ // Error-free addition (Knuth TwoSum)
62564
+ vec2 ds_add(vec2 a, vec2 b) {
62565
+ float s = a.x + b.x;
62566
+ float v = s - a.x;
62567
+ float e = (a.x - (s - v)) + (b.x - v);
62568
+ float lo = (a.y + b.y) + e;
62569
+ float hi = s + lo;
62570
+ lo = lo - (hi - s);
62571
+ return vec2(hi, lo);
62572
+ }
62573
+
62574
+ // Double-single subtraction
62575
+ vec2 ds_sub(vec2 a, vec2 b) {
62576
+ return ds_add(a, vec2(-b.x, -b.y));
62577
+ }
62578
+
62579
+ // Error-free multiplication (Dekker TwoProduct)
62580
+ vec2 ds_mul(vec2 a, vec2 b) {
62581
+ float p = a.x * b.x;
62582
+ vec2 sa = ds_split(a.x);
62583
+ vec2 sb = ds_split(b.x);
62584
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62585
+ err += a.x * b.y + a.y * b.x;
62586
+ float hi = p + err;
62587
+ float lo = err - (hi - p);
62588
+ return vec2(hi, lo);
62589
+ }
62590
+
62591
+ // Optimized self-multiply
62592
+ vec2 ds_sqr(vec2 a) {
62593
+ float p = a.x * a.x;
62594
+ vec2 sa = ds_split(a.x);
62595
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62596
+ err += 2.0 * a.x * a.y;
62597
+ float hi = p + err;
62598
+ float lo = err - (hi - p);
62599
+ return vec2(hi, lo);
62600
+ }
62601
+
62602
+ // Compare magnitude: returns -1, 0, or 1
62603
+ float ds_cmp(vec2 a, vec2 b) {
62604
+ float d = a.x - b.x;
62605
+ if (d != 0.0) return sign(d);
62606
+ return sign(a.y - b.y);
62607
+ }
62608
+ `;
62609
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
62610
+ fn ds_split(a: f32) -> vec2f {
62611
+ const SPLIT: f32 = 4097.0;
62612
+ let t = SPLIT * a;
62613
+ let hi = t - (t - a);
62614
+ let lo = a - hi;
62615
+ return vec2f(hi, lo);
62616
+ }
62617
+
62618
+ fn ds_from(a: f32) -> vec2f {
62619
+ return vec2f(a, 0.0);
62620
+ }
62621
+
62622
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
62623
+ let s = a.x + b.x;
62624
+ let v = s - a.x;
62625
+ let e = (a.x - (s - v)) + (b.x - v);
62626
+ let lo_t = (a.y + b.y) + e;
62627
+ let hi = s + lo_t;
62628
+ let lo = lo_t - (hi - s);
62629
+ return vec2f(hi, lo);
62630
+ }
62631
+
62632
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
62633
+ return ds_add(a, vec2f(-b.x, -b.y));
62634
+ }
62635
+
62636
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
62637
+ let p = a.x * b.x;
62638
+ let sa = ds_split(a.x);
62639
+ let sb = ds_split(b.x);
62640
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
62641
+ err += a.x * b.y + a.y * b.x;
62642
+ let hi = p + err;
62643
+ let lo = err - (hi - p);
62644
+ return vec2f(hi, lo);
62645
+ }
62646
+
62647
+ fn ds_sqr(a: vec2f) -> vec2f {
62648
+ let p = a.x * a.x;
62649
+ let sa = ds_split(a.x);
62650
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
62651
+ err += 2.0 * a.x * a.y;
62652
+ let hi = p + err;
62653
+ let lo = err - (hi - p);
62654
+ return vec2f(hi, lo);
62655
+ }
62656
+
62657
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
62658
+ let d = a.x - b.x;
62659
+ if (d != 0.0) { return sign(d); }
62660
+ return sign(a.y - b.y);
62661
+ }
62662
+ `;
62663
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
62664
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
62665
+ // c = (re_hi, im_hi, re_lo, im_lo)
62666
+ vec2 cr = vec2(c.x, c.z); // real part as ds
62667
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
62668
+ vec2 zr = vec2(0.0, 0.0);
62669
+ vec2 zi = vec2(0.0, 0.0);
62670
+ for (int i = 0; i < maxIter; i++) {
62671
+ vec2 zr2 = ds_sqr(zr);
62672
+ vec2 zi2 = ds_sqr(zi);
62673
+ // |z|^2 > 4.0 ?
62674
+ vec2 mag2 = ds_add(zr2, zi2);
62675
+ if (mag2.x > 4.0)
62676
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62677
+ // z = z^2 + c
62678
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
62679
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
62680
+ zi = new_zi;
62681
+ }
62682
+ return 1.0;
62683
+ }
62684
+
62685
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
62686
+ vec2 zr = vec2(z_in.x, z_in.z);
62687
+ vec2 zi = vec2(z_in.y, z_in.w);
62688
+ vec2 cr = vec2(c.x, c.z);
62689
+ vec2 ci = vec2(c.y, c.w);
62690
+ for (int i = 0; i < maxIter; i++) {
62691
+ vec2 zr2 = ds_sqr(zr);
62692
+ vec2 zi2 = ds_sqr(zi);
62693
+ vec2 mag2 = ds_add(zr2, zi2);
62694
+ if (mag2.x > 4.0)
62695
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
62696
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62697
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62698
+ zi = new_zi;
62699
+ }
62700
+ return 1.0;
62701
+ }
62702
+ `;
62703
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
62704
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
62705
+ let cr = vec2f(c.x, c.z);
62706
+ let ci = vec2f(c.y, c.w);
62707
+ var zr = vec2f(0.0, 0.0);
62708
+ var zi = vec2f(0.0, 0.0);
62709
+ for (var i: i32 = 0; i < maxIter; i++) {
62710
+ let zr2 = ds_sqr(zr);
62711
+ let zi2 = ds_sqr(zi);
62712
+ let mag2 = ds_add(zr2, zi2);
62713
+ if (mag2.x > 4.0) {
62714
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62715
+ }
62716
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62717
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62718
+ zi = new_zi;
62719
+ }
62720
+ return 1.0;
62721
+ }
62722
+
62723
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
62724
+ var zr = vec2f(z_in.x, z_in.z);
62725
+ var zi = vec2f(z_in.y, z_in.w);
62726
+ let cr = vec2f(c.x, c.z);
62727
+ let ci = vec2f(c.y, c.w);
62728
+ for (var i: i32 = 0; i < maxIter; i++) {
62729
+ let zr2 = ds_sqr(zr);
62730
+ let zi2 = ds_sqr(zi);
62731
+ let mag2 = ds_add(zr2, zi2);
62732
+ if (mag2.x > 4.0) {
62733
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
62734
+ }
62735
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
62736
+ zr = ds_add(ds_sub(zr2, zi2), cr);
62737
+ zi = new_zi;
62738
+ }
62739
+ return 1.0;
62740
+ }
62453
62741
  `;
62454
62742
  var GPU_FRACTAL_PREAMBLE_GLSL = `
62455
62743
  float _fractal_mandelbrot(vec2 c, int maxIter) {
@@ -62493,6 +62781,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
62493
62781
  }
62494
62782
  return 1.0;
62495
62783
  }
62784
+ `;
62785
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
62786
+ uniform sampler2D _refOrbit;
62787
+ uniform int _refOrbitLen;
62788
+ uniform int _refOrbitTexWidth;
62789
+
62790
+ vec2 _pt_fetch_orbit(int i) {
62791
+ int y = i / _refOrbitTexWidth;
62792
+ int x = i - y * _refOrbitTexWidth;
62793
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
62794
+ }
62795
+
62796
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
62797
+ float dr = 0.0;
62798
+ float di = 0.0;
62799
+ int orbitLen = min(maxIter, _refOrbitLen);
62800
+ for (int i = 0; i < orbitLen; i++) {
62801
+ vec2 Zn = _pt_fetch_orbit(i);
62802
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
62803
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62804
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62805
+ dr = new_dr;
62806
+ di = new_di;
62807
+ // Full z = Z_{n+1} + delta for escape check
62808
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62809
+ float zr = Zn1.x + dr;
62810
+ float zi = Zn1.y + di;
62811
+ float mag2 = zr * zr + zi * zi;
62812
+ if (mag2 > 4.0)
62813
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62814
+ // Glitch detection: |delta|^2 > |Z|^2
62815
+ float dmag2 = dr * dr + di * di;
62816
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62817
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62818
+ // Rebase to absolute coordinates and continue with single-float
62819
+ float abs_zr = Zn1.x + dr;
62820
+ float abs_zi = Zn1.y + di;
62821
+ // Reconstruct absolute c from reference + delta
62822
+ // (Use ds_from for the concept, but single-float suffices for fallback)
62823
+ float cx = abs_zr - dr + delta_c.x;
62824
+ float cy = abs_zi - di + delta_c.y;
62825
+ for (int j = i + 1; j < maxIter; j++) {
62826
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62827
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62828
+ abs_zr = new_zr;
62829
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62830
+ if (mag2 > 4.0)
62831
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62832
+ }
62833
+ return 1.0;
62834
+ }
62835
+ }
62836
+ return 1.0;
62837
+ }
62838
+
62839
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
62840
+ float dr = z_delta.x;
62841
+ float di = z_delta.y;
62842
+ int orbitLen = min(maxIter, _refOrbitLen);
62843
+ for (int i = 0; i < orbitLen; i++) {
62844
+ vec2 Zn = _pt_fetch_orbit(i);
62845
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62846
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62847
+ dr = new_dr;
62848
+ di = new_di;
62849
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
62850
+ float zr = Zn1.x + dr;
62851
+ float zi = Zn1.y + di;
62852
+ float mag2 = zr * zr + zi * zi;
62853
+ if (mag2 > 4.0)
62854
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62855
+ float dmag2 = dr * dr + di * di;
62856
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62857
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62858
+ float abs_zr = Zn1.x + dr;
62859
+ float abs_zi = Zn1.y + di;
62860
+ float cx = delta_c.x;
62861
+ float cy = delta_c.y;
62862
+ for (int j = i + 1; j < maxIter; j++) {
62863
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
62864
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
62865
+ abs_zr = new_zr;
62866
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
62867
+ if (mag2 > 4.0)
62868
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
62869
+ }
62870
+ return 1.0;
62871
+ }
62872
+ }
62873
+ return 1.0;
62874
+ }
62875
+ `;
62876
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
62877
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
62878
+ var<uniform> _refOrbitLen: i32;
62879
+ var<uniform> _refOrbitTexWidth: i32;
62880
+
62881
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
62882
+ let y = i / _refOrbitTexWidth;
62883
+ let x = i - y * _refOrbitTexWidth;
62884
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
62885
+ }
62886
+
62887
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
62888
+ var dr: f32 = 0.0;
62889
+ var di: f32 = 0.0;
62890
+ let orbitLen = min(maxIter, _refOrbitLen);
62891
+ for (var i: i32 = 0; i < orbitLen; i++) {
62892
+ let Zn = _pt_fetch_orbit(i);
62893
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62894
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62895
+ dr = new_dr;
62896
+ di = new_di;
62897
+ var Zn1 = vec2f(0.0);
62898
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62899
+ let zr = Zn1.x + dr;
62900
+ let zi = Zn1.y + di;
62901
+ var mag2 = zr * zr + zi * zi;
62902
+ if (mag2 > 4.0) {
62903
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62904
+ }
62905
+ let dmag2 = dr * dr + di * di;
62906
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62907
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62908
+ var f_zr = Zn1.x + dr;
62909
+ var f_zi = Zn1.y + di;
62910
+ let cx = delta_c.x;
62911
+ let cy = delta_c.y;
62912
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62913
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62914
+ f_zi = 2.0 * f_zr * f_zi + cy;
62915
+ f_zr = t_zr;
62916
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62917
+ if (mag2 > 4.0) {
62918
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62919
+ }
62920
+ }
62921
+ return 1.0;
62922
+ }
62923
+ }
62924
+ return 1.0;
62925
+ }
62926
+
62927
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
62928
+ var dr = z_delta.x;
62929
+ var di = z_delta.y;
62930
+ let orbitLen = min(maxIter, _refOrbitLen);
62931
+ for (var i: i32 = 0; i < orbitLen; i++) {
62932
+ let Zn = _pt_fetch_orbit(i);
62933
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
62934
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
62935
+ dr = new_dr;
62936
+ di = new_di;
62937
+ var Zn1 = vec2f(0.0);
62938
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
62939
+ let zr = Zn1.x + dr;
62940
+ let zi = Zn1.y + di;
62941
+ var mag2 = zr * zr + zi * zi;
62942
+ if (mag2 > 4.0) {
62943
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62944
+ }
62945
+ let dmag2 = dr * dr + di * di;
62946
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
62947
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
62948
+ var f_zr = Zn1.x + dr;
62949
+ var f_zi = Zn1.y + di;
62950
+ let cx = delta_c.x;
62951
+ let cy = delta_c.y;
62952
+ for (var j: i32 = i + 1; j < maxIter; j++) {
62953
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
62954
+ f_zi = 2.0 * f_zr * f_zi + cy;
62955
+ f_zr = t_zr;
62956
+ mag2 = f_zr * f_zr + f_zi * f_zi;
62957
+ if (mag2 > 4.0) {
62958
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
62959
+ }
62960
+ }
62961
+ return 1.0;
62962
+ }
62963
+ }
62964
+ return 1.0;
62965
+ }
62496
62966
  `;
62497
62967
  var GPU_COLOR_PREAMBLE_GLSL = `
62498
62968
  float _gpu_srgb_to_linear(float c) {
@@ -62932,6 +63402,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
62932
63402
  const constants = this.getConstants();
62933
63403
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
62934
63404
  const target = this.createTarget({
63405
+ hints: options.hints,
62935
63406
  functions: (id) => {
62936
63407
  if (userFunctions && id in userFunctions) {
62937
63408
  const fn = userFunctions[id];
@@ -62970,12 +63441,65 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
62970
63441
  if (code.includes("_gpu_besselJ"))
62971
63442
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
62972
63443
  if (code.includes("_fractal_")) {
62973
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63444
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
63445
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63446
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
63447
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
63448
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
63449
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
63450
+ } else {
63451
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
63452
+ }
62974
63453
  }
62975
63454
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
62976
63455
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
62977
63456
  }
62978
63457
  if (preamble) result.preamble = preamble;
63458
+ if (code.includes("_fractal_") && options.hints?.viewport) {
63459
+ const strategy = selectFractalStrategy(target);
63460
+ const radius = options.hints.viewport.radius;
63461
+ switch (strategy) {
63462
+ case "single":
63463
+ result.staleWhen = { radiusBelow: 1e-6 };
63464
+ break;
63465
+ case "double":
63466
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
63467
+ break;
63468
+ case "perturbation":
63469
+ result.staleWhen = {
63470
+ radiusAbove: 1e-5,
63471
+ radiusBelow: radius * 0.01,
63472
+ centerDistance: radius * 2
63473
+ };
63474
+ break;
63475
+ }
63476
+ }
63477
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
63478
+ const viewport = options.hints.viewport;
63479
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
63480
+ const maxIter = 1e3;
63481
+ const orbit = computeReferenceOrbit(
63482
+ viewport.center,
63483
+ maxIter,
63484
+ digits
63485
+ );
63486
+ const orbitLen = orbit.length / 2;
63487
+ const texWidth = Math.min(orbitLen, 4096);
63488
+ const texHeight = Math.ceil(orbitLen / texWidth);
63489
+ result.textures = {
63490
+ _refOrbit: {
63491
+ data: orbit,
63492
+ width: texWidth,
63493
+ height: texHeight,
63494
+ format: "rg32f"
63495
+ }
63496
+ };
63497
+ result.uniforms = {
63498
+ ...result.uniforms,
63499
+ _refOrbitLen: orbitLen,
63500
+ _refOrbitTexWidth: texWidth
63501
+ };
63502
+ }
62979
63503
  return result;
62980
63504
  }
62981
63505
  compileToSource(expr2, _options = {}) {
@@ -67958,7 +68482,7 @@ ${workgroupAttr}fn main(${paramStr})${returnStr} {
67958
68482
  _setDefaultEngineFactory(() => new ComputeEngine());
67959
68483
 
67960
68484
  // src/core.ts
67961
- var version = "0.55.3";
68485
+ var version = "0.55.4";
67962
68486
  return __toCommonJS(core_exports);
67963
68487
  })();
67964
68488
  /*! Bundled license information: