@cortex-js/compute-engine 0.55.3 → 0.55.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/dist/compile.esm.js +613 -32
  2. package/dist/compile.min.esm.js +492 -70
  3. package/dist/compile.min.umd.cjs +492 -70
  4. package/dist/compile.umd.cjs +613 -32
  5. package/dist/compute-engine.esm.js +656 -44
  6. package/dist/compute-engine.min.esm.js +485 -63
  7. package/dist/compute-engine.min.umd.cjs +484 -62
  8. package/dist/compute-engine.umd.cjs +656 -44
  9. package/dist/core.esm.js +654 -43
  10. package/dist/core.min.esm.js +483 -61
  11. package/dist/core.min.umd.cjs +483 -61
  12. package/dist/core.umd.cjs +654 -43
  13. package/dist/interval.esm.js +2 -2
  14. package/dist/interval.min.esm.js +2 -2
  15. package/dist/interval.min.umd.cjs +2 -2
  16. package/dist/interval.umd.cjs +2 -2
  17. package/dist/latex-syntax.esm.js +43 -13
  18. package/dist/latex-syntax.min.esm.js +5 -5
  19. package/dist/latex-syntax.min.umd.cjs +5 -5
  20. package/dist/latex-syntax.umd.cjs +43 -13
  21. package/dist/math-json.esm.js +2 -2
  22. package/dist/math-json.min.esm.js +2 -2
  23. package/dist/math-json.min.umd.cjs +2 -2
  24. package/dist/math-json.umd.cjs +2 -2
  25. package/dist/numerics.esm.js +2 -2
  26. package/dist/numerics.min.esm.js +2 -2
  27. package/dist/numerics.min.umd.cjs +2 -2
  28. package/dist/numerics.umd.cjs +2 -2
  29. package/dist/types/big-decimal/big-decimal.d.ts +1 -1
  30. package/dist/types/big-decimal/index.d.ts +1 -1
  31. package/dist/types/big-decimal/transcendentals.d.ts +1 -1
  32. package/dist/types/big-decimal/utils.d.ts +1 -1
  33. package/dist/types/common/ansi-codes.d.ts +1 -1
  34. package/dist/types/common/configuration-change.d.ts +1 -1
  35. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  36. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  37. package/dist/types/common/interruptible.d.ts +1 -1
  38. package/dist/types/common/one-of.d.ts +1 -1
  39. package/dist/types/common/signals.d.ts +1 -1
  40. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  41. package/dist/types/common/type/boxed-type.d.ts +1 -1
  42. package/dist/types/common/type/lexer.d.ts +1 -1
  43. package/dist/types/common/type/parse.d.ts +1 -1
  44. package/dist/types/common/type/parser.d.ts +1 -1
  45. package/dist/types/common/type/primitive.d.ts +1 -1
  46. package/dist/types/common/type/reduce.d.ts +1 -1
  47. package/dist/types/common/type/serialize.d.ts +1 -1
  48. package/dist/types/common/type/subtype.d.ts +1 -1
  49. package/dist/types/common/type/type-builder.d.ts +1 -1
  50. package/dist/types/common/type/types.d.ts +1 -1
  51. package/dist/types/common/type/utils.d.ts +1 -1
  52. package/dist/types/common/utils.d.ts +1 -1
  53. package/dist/types/compile.d.ts +1 -1
  54. package/dist/types/compute-engine/assume.d.ts +1 -1
  55. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
  56. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
  69. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  71. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  72. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  73. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  74. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  75. package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
  76. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  77. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  78. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  79. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  80. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  81. package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
  82. package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
  83. package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
  84. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  85. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  86. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  87. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  88. package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
  89. package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
  90. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  91. package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
  92. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  93. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  94. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  95. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  96. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
  97. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  98. package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
  99. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  100. package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
  101. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  102. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  103. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  104. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  105. package/dist/types/compute-engine/compilation/compile-expression.d.ts +3 -2
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +19 -0
  108. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  109. package/dist/types/compute-engine/compilation/gpu-target.d.ts +54 -1
  110. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  113. package/dist/types/compute-engine/compilation/types.d.ts +67 -1
  114. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  115. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  116. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  117. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  118. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  119. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  120. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  121. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  132. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  133. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  134. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  135. package/dist/types/compute-engine/global-types.d.ts +1 -1
  136. package/dist/types/compute-engine/index.d.ts +3 -2
  137. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  138. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  139. package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
  140. package/dist/types/compute-engine/interval/index.d.ts +1 -1
  141. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  142. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  143. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  144. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  145. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  146. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  147. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  148. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  149. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  150. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  151. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  168. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
  171. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  172. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  173. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  174. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  175. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  176. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  177. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  178. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  179. package/dist/types/compute-engine/library/core.d.ts +1 -1
  180. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  181. package/dist/types/compute-engine/library/library.d.ts +1 -1
  182. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  183. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  184. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  185. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  186. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  187. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  188. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  189. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  190. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  191. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  192. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  193. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  194. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  195. package/dist/types/compute-engine/library/units.d.ts +1 -1
  196. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  197. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  198. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  199. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  200. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  201. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  202. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  203. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  204. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  205. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  206. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  207. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  208. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  209. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  211. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  217. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  218. package/dist/types/compute-engine/oeis.d.ts +1 -1
  219. package/dist/types/compute-engine/sequence.d.ts +1 -1
  220. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  221. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  222. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  223. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  224. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  225. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  226. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  227. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  228. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  229. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  230. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  238. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  239. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  240. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  241. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  242. package/dist/types/compute-engine/types-engine.d.ts +1 -1
  243. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  244. package/dist/types/compute-engine/types-expression.d.ts +1 -1
  245. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
  246. package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
  247. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  248. package/dist/types/compute-engine/types.d.ts +1 -1
  249. package/dist/types/compute-engine.d.ts +3 -2
  250. package/dist/types/core.d.ts +1 -1
  251. package/dist/types/interval.d.ts +1 -1
  252. package/dist/types/latex-syntax.d.ts +2 -2
  253. package/dist/types/math-json/symbols.d.ts +1 -1
  254. package/dist/types/math-json/types.d.ts +1 -1
  255. package/dist/types/math-json/utils.d.ts +1 -1
  256. package/dist/types/math-json.d.ts +2 -2
  257. package/dist/types/numerics.d.ts +1 -1
  258. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- /** Compile 0.55.3 */
1
+ /** Compile 0.55.5 */
2
2
  (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Compile = {}));})(this, (function (exports) { 'use strict';
3
3
  var Compile = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -15099,7 +15099,8 @@ ${lines.join("\n")}`;
15099
15099
  vars: options?.vars,
15100
15100
  imports: options?.imports,
15101
15101
  preamble: options?.preamble,
15102
- realOnly: options?.realOnly
15102
+ realOnly: options?.realOnly,
15103
+ hints: options?.hints
15103
15104
  });
15104
15105
  } catch (e) {
15105
15106
  if (options?.fallback ?? true) {
@@ -16505,30 +16506,6 @@ ${lines.join("\n")}`;
16505
16506
  "#ae2036",
16506
16507
  "#b40426"
16507
16508
  ];
16508
- var OCEAN_BALANCE = [
16509
- "#00441b",
16510
- "#006d5b",
16511
- "#1a8c7d",
16512
- "#2fa394",
16513
- "#4fb3a3",
16514
- "#6fc1b3",
16515
- "#8dcfc3",
16516
- "#a6dbd1",
16517
- "#bfe6de",
16518
- "#d7f0ea",
16519
- "#f7f7f7",
16520
- "#eeeeee",
16521
- "#ddd8e6",
16522
- "#c7bcda",
16523
- "#b3a0d0",
16524
- "#9f86c7",
16525
- "#8d6dbd",
16526
- "#7b56b1",
16527
- "#6a42a3",
16528
- "#5a3093",
16529
- "#4a1f82",
16530
- "#3b0f70"
16531
- ];
16532
16509
  var reversePalette = (palette) => palette.slice().reverse();
16533
16510
  var DIVERGING_PALETTES = {
16534
16511
  roma: ROMA,
@@ -16540,9 +16517,7 @@ ${lines.join("\n")}`;
16540
16517
  rdbu: RDBU,
16541
16518
  "rdbu-reversed": reversePalette(RDBU),
16542
16519
  coolwarm: COOLWARM,
16543
- "coolwarm-reversed": reversePalette(COOLWARM),
16544
- "ocean-balance": OCEAN_BALANCE,
16545
- "ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
16520
+ "coolwarm-reversed": reversePalette(COOLWARM)
16546
16521
  };
16547
16522
  var TURBO = [
16548
16523
  "#30123b",
@@ -18626,6 +18601,40 @@ ${lines.join("\n")}`;
18626
18601
  "#eeeeee",
18627
18602
  "#ffffff"
18628
18603
  ];
18604
+ var CMOCEAN_PHASE = [
18605
+ "#a8780d",
18606
+ "#b3701b",
18607
+ "#be6828",
18608
+ "#c75f35",
18609
+ "#cf5643",
18610
+ "#d54b53",
18611
+ "#db4066",
18612
+ "#de357b",
18613
+ "#df2a93",
18614
+ "#dc25ad",
18615
+ "#d529c4",
18616
+ "#cc34d7",
18617
+ "#c041e5",
18618
+ "#b24fef",
18619
+ "#a25cf3",
18620
+ "#9168f4",
18621
+ "#7d73f0",
18622
+ "#687ce8",
18623
+ "#5285dc",
18624
+ "#3d8bcd",
18625
+ "#2c90bc",
18626
+ "#2093ac",
18627
+ "#19959c",
18628
+ "#12978c",
18629
+ "#0c987c",
18630
+ "#119a69",
18631
+ "#249a52",
18632
+ "#409839",
18633
+ "#5e9420",
18634
+ "#778d12",
18635
+ "#8b860d",
18636
+ "#9b7f0d"
18637
+ ];
18629
18638
  var reversePalette2 = (palette) => palette.slice().reverse();
18630
18639
  var SEQUENTIAL_PALETTES = {
18631
18640
  turbo: TURBO,
@@ -18649,7 +18658,9 @@ ${lines.join("\n")}`;
18649
18658
  "rocket-reversed": reversePalette2(ROCKET),
18650
18659
  mako: MAKO,
18651
18660
  // blue to teal
18652
- "mako-reversed": reversePalette2(MAKO)
18661
+ "mako-reversed": reversePalette2(MAKO),
18662
+ "cmocean-phase": CMOCEAN_PHASE,
18663
+ "cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
18653
18664
  };
18654
18665
 
18655
18666
  // src/compute-engine/numerics/special-functions.ts
@@ -20771,6 +20782,43 @@ ${lines.join("\n")}`;
20771
20782
  return b;
20772
20783
  }
20773
20784
 
20785
+ // src/compute-engine/compilation/fractal-orbit.ts
20786
+ function toBigDecimal(v) {
20787
+ if (typeof v === "object" && "hi" in v)
20788
+ return new BigDecimal(v.hi).add(new BigDecimal(v.lo));
20789
+ return new BigDecimal(v);
20790
+ }
20791
+ function hpToNumber(v) {
20792
+ if (typeof v === "number") return v;
20793
+ if (typeof v === "string") return Number(v);
20794
+ return v.hi + v.lo;
20795
+ }
20796
+ function computeReferenceOrbit(center, maxIter, precision) {
20797
+ const prevPrecision = BigDecimal.precision;
20798
+ BigDecimal.precision = precision;
20799
+ try {
20800
+ const cr = toBigDecimal(center[0]);
20801
+ const ci = toBigDecimal(center[1]);
20802
+ let zr = BigDecimal.ZERO;
20803
+ let zi = BigDecimal.ZERO;
20804
+ const ESCAPE = new BigDecimal(256);
20805
+ const points = [];
20806
+ for (let i = 0; i < maxIter; i++) {
20807
+ points.push(zr.toNumber(), zi.toNumber());
20808
+ const zr2 = zr.mul(zr).toPrecision(precision);
20809
+ const zi2 = zi.mul(zi).toPrecision(precision);
20810
+ const mag2 = zr2.add(zi2);
20811
+ if (mag2.cmp(ESCAPE) > 0) break;
20812
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
20813
+ zr = zr2.sub(zi2).add(cr);
20814
+ zi = new_zi;
20815
+ }
20816
+ return new Float32Array(points);
20817
+ } finally {
20818
+ BigDecimal.precision = prevPrecision;
20819
+ }
20820
+ }
20821
+
20774
20822
  // src/compute-engine/compilation/gpu-target.ts
20775
20823
  var GPU_OPERATORS = {
20776
20824
  Add: ["+", 11],
@@ -20854,6 +20902,13 @@ ${lines.join("\n")}`;
20854
20902
  ];
20855
20903
  return lines.join("\n");
20856
20904
  }
20905
+ function selectFractalStrategy(target) {
20906
+ const radius = target.hints?.viewport?.radius;
20907
+ if (radius === void 0) return "single";
20908
+ if (radius > 1e-6) return "single";
20909
+ if (radius > 1e-14) return "double";
20910
+ return "perturbation";
20911
+ }
20857
20912
  var GPU_FUNCTIONS = {
20858
20913
  // Variadic arithmetic (for function-call form, e.g., with vectors)
20859
20914
  Add: (args, compile2, target) => {
@@ -21349,12 +21404,32 @@ ${lines.join("\n")}`;
21349
21404
  if (c === null || maxIter === null)
21350
21405
  throw new Error("Mandelbrot: missing arguments");
21351
21406
  const iterCode = compileIntArg(maxIter, compile2, target);
21407
+ const strategy = selectFractalStrategy(target);
21408
+ if (strategy === "double") {
21409
+ const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
21410
+ return `_fractal_mandelbrot_dp(${dpCoord}, ${iterCode})`;
21411
+ }
21412
+ if (strategy === "perturbation") {
21413
+ const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
21414
+ return `_fractal_mandelbrot_pt(${ptDelta}, ${iterCode})`;
21415
+ }
21352
21416
  return `_fractal_mandelbrot(${compile2(c)}, ${iterCode})`;
21353
21417
  },
21354
21418
  Julia: ([z, c, maxIter], compile2, target) => {
21355
21419
  if (z === null || c === null || maxIter === null)
21356
21420
  throw new Error("Julia: missing arguments");
21357
21421
  const iterCode = compileIntArg(maxIter, compile2, target);
21422
+ const strategy = selectFractalStrategy(target);
21423
+ if (strategy === "double") {
21424
+ const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
21425
+ const cCode = compile2(c);
21426
+ return `_fractal_julia_dp(${dpCoord}, vec4(${cCode}, vec2(0.0)), ${iterCode})`;
21427
+ }
21428
+ if (strategy === "perturbation") {
21429
+ const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
21430
+ const cCode = compile2(c);
21431
+ return `_fractal_julia_pt(${ptDelta}, ${cCode}, ${iterCode})`;
21432
+ }
21358
21433
  return `_fractal_julia(${compile2(z)}, ${compile2(c)}, ${iterCode})`;
21359
21434
  },
21360
21435
  // Vector/Matrix operations
@@ -21951,6 +22026,232 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
21951
22026
  for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
21952
22027
  return sgn * vals[n] / norm;
21953
22028
  }
22029
+ `;
22030
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
22031
+ // Split a float into high and low parts for exact multiplication
22032
+ vec2 ds_split(float a) {
22033
+ const float SPLIT = 4097.0; // 2^12 + 1
22034
+ float t = SPLIT * a;
22035
+ float hi = t - (t - a);
22036
+ float lo = a - hi;
22037
+ return vec2(hi, lo);
22038
+ }
22039
+
22040
+ // Create a double-single from a single float
22041
+ vec2 ds_from(float a) {
22042
+ return vec2(a, 0.0);
22043
+ }
22044
+
22045
+ // Error-free addition (Knuth TwoSum)
22046
+ vec2 ds_add(vec2 a, vec2 b) {
22047
+ float s = a.x + b.x;
22048
+ float v = s - a.x;
22049
+ float e = (a.x - (s - v)) + (b.x - v);
22050
+ float lo = (a.y + b.y) + e;
22051
+ float hi = s + lo;
22052
+ lo = lo - (hi - s);
22053
+ return vec2(hi, lo);
22054
+ }
22055
+
22056
+ // Double-single subtraction
22057
+ vec2 ds_sub(vec2 a, vec2 b) {
22058
+ return ds_add(a, vec2(-b.x, -b.y));
22059
+ }
22060
+
22061
+ // Error-free multiplication (Dekker TwoProduct)
22062
+ vec2 ds_mul(vec2 a, vec2 b) {
22063
+ float p = a.x * b.x;
22064
+ vec2 sa = ds_split(a.x);
22065
+ vec2 sb = ds_split(b.x);
22066
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22067
+ err += a.x * b.y + a.y * b.x;
22068
+ float hi = p + err;
22069
+ float lo = err - (hi - p);
22070
+ return vec2(hi, lo);
22071
+ }
22072
+
22073
+ // Optimized self-multiply
22074
+ vec2 ds_sqr(vec2 a) {
22075
+ float p = a.x * a.x;
22076
+ vec2 sa = ds_split(a.x);
22077
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22078
+ err += 2.0 * a.x * a.y;
22079
+ float hi = p + err;
22080
+ float lo = err - (hi - p);
22081
+ return vec2(hi, lo);
22082
+ }
22083
+
22084
+ // Compare magnitude: returns -1, 0, or 1
22085
+ float ds_cmp(vec2 a, vec2 b) {
22086
+ float d = a.x - b.x;
22087
+ if (d != 0.0) return sign(d);
22088
+ return sign(a.y - b.y);
22089
+ }
22090
+ `;
22091
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
22092
+ fn ds_split(a: f32) -> vec2f {
22093
+ const SPLIT: f32 = 4097.0;
22094
+ let t = SPLIT * a;
22095
+ let hi = t - (t - a);
22096
+ let lo = a - hi;
22097
+ return vec2f(hi, lo);
22098
+ }
22099
+
22100
+ fn ds_from(a: f32) -> vec2f {
22101
+ return vec2f(a, 0.0);
22102
+ }
22103
+
22104
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
22105
+ let s = a.x + b.x;
22106
+ let v = s - a.x;
22107
+ let e = (a.x - (s - v)) + (b.x - v);
22108
+ let lo_t = (a.y + b.y) + e;
22109
+ let hi = s + lo_t;
22110
+ let lo = lo_t - (hi - s);
22111
+ return vec2f(hi, lo);
22112
+ }
22113
+
22114
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
22115
+ return ds_add(a, vec2f(-b.x, -b.y));
22116
+ }
22117
+
22118
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
22119
+ let p = a.x * b.x;
22120
+ let sa = ds_split(a.x);
22121
+ let sb = ds_split(b.x);
22122
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22123
+ err += a.x * b.y + a.y * b.x;
22124
+ let hi = p + err;
22125
+ let lo = err - (hi - p);
22126
+ return vec2f(hi, lo);
22127
+ }
22128
+
22129
+ fn ds_sqr(a: vec2f) -> vec2f {
22130
+ let p = a.x * a.x;
22131
+ let sa = ds_split(a.x);
22132
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22133
+ err += 2.0 * a.x * a.y;
22134
+ let hi = p + err;
22135
+ let lo = err - (hi - p);
22136
+ return vec2f(hi, lo);
22137
+ }
22138
+
22139
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
22140
+ let d = a.x - b.x;
22141
+ if (d != 0.0) { return sign(d); }
22142
+ return sign(a.y - b.y);
22143
+ }
22144
+ `;
22145
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
22146
+ uniform float _dp_cx_hi;
22147
+ uniform float _dp_cx_lo;
22148
+ uniform float _dp_cy_hi;
22149
+ uniform float _dp_cy_lo;
22150
+ uniform float _dp_w;
22151
+ uniform float _dp_h;
22152
+
22153
+ vec4 _dp_coord() {
22154
+ // Per-pixel offset from center \u2014 small, so float-precise
22155
+ float dx = (v_uv.x - 0.5) * _dp_w;
22156
+ float dy = (v_uv.y - 0.5) * _dp_h;
22157
+ // Combine center (hi+lo) + delta with emulated double precision
22158
+ vec2 cre = ds_add(vec2(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
22159
+ vec2 cim = ds_add(vec2(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
22160
+ return vec4(cre.x, cim.x, cre.y, cim.y);
22161
+ }
22162
+
22163
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
22164
+ // c = (re_hi, im_hi, re_lo, im_lo)
22165
+ vec2 cr = vec2(c.x, c.z); // real part as ds
22166
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
22167
+ vec2 zr = vec2(0.0, 0.0);
22168
+ vec2 zi = vec2(0.0, 0.0);
22169
+ for (int i = 0; i < maxIter; i++) {
22170
+ vec2 zr2 = ds_sqr(zr);
22171
+ vec2 zi2 = ds_sqr(zi);
22172
+ // |z|^2 > 4.0 ?
22173
+ vec2 mag2 = ds_add(zr2, zi2);
22174
+ if (mag2.x > 4.0)
22175
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22176
+ // z = z^2 + c
22177
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
22178
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
22179
+ zi = new_zi;
22180
+ }
22181
+ return 1.0;
22182
+ }
22183
+
22184
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
22185
+ vec2 zr = vec2(z_in.x, z_in.z);
22186
+ vec2 zi = vec2(z_in.y, z_in.w);
22187
+ vec2 cr = vec2(c.x, c.z);
22188
+ vec2 ci = vec2(c.y, c.w);
22189
+ for (int i = 0; i < maxIter; i++) {
22190
+ vec2 zr2 = ds_sqr(zr);
22191
+ vec2 zi2 = ds_sqr(zi);
22192
+ vec2 mag2 = ds_add(zr2, zi2);
22193
+ if (mag2.x > 4.0)
22194
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22195
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22196
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22197
+ zi = new_zi;
22198
+ }
22199
+ return 1.0;
22200
+ }
22201
+ `;
22202
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
22203
+ @group(0) @binding(10) var<uniform> _dp_cx_hi: f32;
22204
+ @group(0) @binding(11) var<uniform> _dp_cx_lo: f32;
22205
+ @group(0) @binding(12) var<uniform> _dp_cy_hi: f32;
22206
+ @group(0) @binding(13) var<uniform> _dp_cy_lo: f32;
22207
+ @group(0) @binding(14) var<uniform> _dp_w: f32;
22208
+ @group(0) @binding(15) var<uniform> _dp_h: f32;
22209
+
22210
+ fn _dp_coord(uv: vec2f) -> vec4f {
22211
+ let dx = (uv.x - 0.5) * _dp_w;
22212
+ let dy = (uv.y - 0.5) * _dp_h;
22213
+ let cre = ds_add(vec2f(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
22214
+ let cim = ds_add(vec2f(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
22215
+ return vec4f(cre.x, cim.x, cre.y, cim.y);
22216
+ }
22217
+
22218
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
22219
+ let cr = vec2f(c.x, c.z);
22220
+ let ci = vec2f(c.y, c.w);
22221
+ var zr = vec2f(0.0, 0.0);
22222
+ var zi = vec2f(0.0, 0.0);
22223
+ for (var i: i32 = 0; i < maxIter; i++) {
22224
+ let zr2 = ds_sqr(zr);
22225
+ let zi2 = ds_sqr(zi);
22226
+ let mag2 = ds_add(zr2, zi2);
22227
+ if (mag2.x > 4.0) {
22228
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22229
+ }
22230
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22231
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22232
+ zi = new_zi;
22233
+ }
22234
+ return 1.0;
22235
+ }
22236
+
22237
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
22238
+ var zr = vec2f(z_in.x, z_in.z);
22239
+ var zi = vec2f(z_in.y, z_in.w);
22240
+ let cr = vec2f(c.x, c.z);
22241
+ let ci = vec2f(c.y, c.w);
22242
+ for (var i: i32 = 0; i < maxIter; i++) {
22243
+ let zr2 = ds_sqr(zr);
22244
+ let zi2 = ds_sqr(zi);
22245
+ let mag2 = ds_add(zr2, zi2);
22246
+ if (mag2.x > 4.0) {
22247
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22248
+ }
22249
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22250
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22251
+ zi = new_zi;
22252
+ }
22253
+ return 1.0;
22254
+ }
21954
22255
  `;
21955
22256
  var GPU_FRACTAL_PREAMBLE_GLSL = `
21956
22257
  float _fractal_mandelbrot(vec2 c, int maxIter) {
@@ -21994,6 +22295,208 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
21994
22295
  }
21995
22296
  return 1.0;
21996
22297
  }
22298
+ `;
22299
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
22300
+ uniform sampler2D _refOrbit;
22301
+ uniform int _refOrbitLen;
22302
+ uniform int _refOrbitTexWidth;
22303
+ uniform float _pt_offset_x;
22304
+ uniform float _pt_offset_y;
22305
+ uniform float _pt_w;
22306
+ uniform float _pt_h;
22307
+
22308
+ vec2 _pt_delta() {
22309
+ float dx = _pt_offset_x + (v_uv.x - 0.5) * _pt_w;
22310
+ float dy = _pt_offset_y + (v_uv.y - 0.5) * _pt_h;
22311
+ return vec2(dx, dy);
22312
+ }
22313
+
22314
+ vec2 _pt_fetch_orbit(int i) {
22315
+ int y = i / _refOrbitTexWidth;
22316
+ int x = i - y * _refOrbitTexWidth;
22317
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
22318
+ }
22319
+
22320
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
22321
+ float dr = 0.0;
22322
+ float di = 0.0;
22323
+ int orbitLen = min(maxIter, _refOrbitLen);
22324
+ for (int i = 0; i < orbitLen; i++) {
22325
+ vec2 Zn = _pt_fetch_orbit(i);
22326
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
22327
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22328
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22329
+ dr = new_dr;
22330
+ di = new_di;
22331
+ // Full z = Z_{n+1} + delta for escape check
22332
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22333
+ float zr = Zn1.x + dr;
22334
+ float zi = Zn1.y + di;
22335
+ float mag2 = zr * zr + zi * zi;
22336
+ if (mag2 > 4.0)
22337
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22338
+ // Glitch detection: |delta|^2 > |Z|^2
22339
+ float dmag2 = dr * dr + di * di;
22340
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22341
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22342
+ // Rebase to absolute coordinates and continue with single-float
22343
+ float abs_zr = Zn1.x + dr;
22344
+ float abs_zi = Zn1.y + di;
22345
+ // Reconstruct absolute c from reference + delta
22346
+ // (Use ds_from for the concept, but single-float suffices for fallback)
22347
+ float cx = abs_zr - dr + delta_c.x;
22348
+ float cy = abs_zi - di + delta_c.y;
22349
+ for (int j = i + 1; j < maxIter; j++) {
22350
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22351
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
22352
+ abs_zr = new_zr;
22353
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22354
+ if (mag2 > 4.0)
22355
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22356
+ }
22357
+ return 1.0;
22358
+ }
22359
+ }
22360
+ return 1.0;
22361
+ }
22362
+
22363
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
22364
+ float dr = z_delta.x;
22365
+ float di = z_delta.y;
22366
+ int orbitLen = min(maxIter, _refOrbitLen);
22367
+ for (int i = 0; i < orbitLen; i++) {
22368
+ vec2 Zn = _pt_fetch_orbit(i);
22369
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22370
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22371
+ dr = new_dr;
22372
+ di = new_di;
22373
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22374
+ float zr = Zn1.x + dr;
22375
+ float zi = Zn1.y + di;
22376
+ float mag2 = zr * zr + zi * zi;
22377
+ if (mag2 > 4.0)
22378
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22379
+ float dmag2 = dr * dr + di * di;
22380
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22381
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22382
+ float abs_zr = Zn1.x + dr;
22383
+ float abs_zi = Zn1.y + di;
22384
+ float cx = delta_c.x;
22385
+ float cy = delta_c.y;
22386
+ for (int j = i + 1; j < maxIter; j++) {
22387
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22388
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
22389
+ abs_zr = new_zr;
22390
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22391
+ if (mag2 > 4.0)
22392
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22393
+ }
22394
+ return 1.0;
22395
+ }
22396
+ }
22397
+ return 1.0;
22398
+ }
22399
+ `;
22400
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
22401
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
22402
+ var<uniform> _refOrbitLen: i32;
22403
+ var<uniform> _refOrbitTexWidth: i32;
22404
+ var<uniform> _pt_offset_x: f32;
22405
+ var<uniform> _pt_offset_y: f32;
22406
+ var<uniform> _pt_w: f32;
22407
+ var<uniform> _pt_h: f32;
22408
+
22409
+ fn _pt_delta(uv: vec2f) -> vec2f {
22410
+ let dx = _pt_offset_x + (uv.x - 0.5) * _pt_w;
22411
+ let dy = _pt_offset_y + (uv.y - 0.5) * _pt_h;
22412
+ return vec2f(dx, dy);
22413
+ }
22414
+
22415
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
22416
+ let y = i / _refOrbitTexWidth;
22417
+ let x = i - y * _refOrbitTexWidth;
22418
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
22419
+ }
22420
+
22421
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
22422
+ var dr: f32 = 0.0;
22423
+ var di: f32 = 0.0;
22424
+ let orbitLen = min(maxIter, _refOrbitLen);
22425
+ for (var i: i32 = 0; i < orbitLen; i++) {
22426
+ let Zn = _pt_fetch_orbit(i);
22427
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22428
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22429
+ dr = new_dr;
22430
+ di = new_di;
22431
+ var Zn1 = vec2f(0.0);
22432
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22433
+ let zr = Zn1.x + dr;
22434
+ let zi = Zn1.y + di;
22435
+ var mag2 = zr * zr + zi * zi;
22436
+ if (mag2 > 4.0) {
22437
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22438
+ }
22439
+ let dmag2 = dr * dr + di * di;
22440
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22441
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22442
+ var f_zr = Zn1.x + dr;
22443
+ var f_zi = Zn1.y + di;
22444
+ let cx = delta_c.x;
22445
+ let cy = delta_c.y;
22446
+ for (var j: i32 = i + 1; j < maxIter; j++) {
22447
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22448
+ f_zi = 2.0 * f_zr * f_zi + cy;
22449
+ f_zr = t_zr;
22450
+ mag2 = f_zr * f_zr + f_zi * f_zi;
22451
+ if (mag2 > 4.0) {
22452
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22453
+ }
22454
+ }
22455
+ return 1.0;
22456
+ }
22457
+ }
22458
+ return 1.0;
22459
+ }
22460
+
22461
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
22462
+ var dr = z_delta.x;
22463
+ var di = z_delta.y;
22464
+ let orbitLen = min(maxIter, _refOrbitLen);
22465
+ for (var i: i32 = 0; i < orbitLen; i++) {
22466
+ let Zn = _pt_fetch_orbit(i);
22467
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22468
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22469
+ dr = new_dr;
22470
+ di = new_di;
22471
+ var Zn1 = vec2f(0.0);
22472
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22473
+ let zr = Zn1.x + dr;
22474
+ let zi = Zn1.y + di;
22475
+ var mag2 = zr * zr + zi * zi;
22476
+ if (mag2 > 4.0) {
22477
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22478
+ }
22479
+ let dmag2 = dr * dr + di * di;
22480
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22481
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22482
+ var f_zr = Zn1.x + dr;
22483
+ var f_zi = Zn1.y + di;
22484
+ let cx = delta_c.x;
22485
+ let cy = delta_c.y;
22486
+ for (var j: i32 = i + 1; j < maxIter; j++) {
22487
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22488
+ f_zi = 2.0 * f_zr * f_zi + cy;
22489
+ f_zr = t_zr;
22490
+ mag2 = f_zr * f_zr + f_zi * f_zi;
22491
+ if (mag2 > 4.0) {
22492
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22493
+ }
22494
+ }
22495
+ return 1.0;
22496
+ }
22497
+ }
22498
+ return 1.0;
22499
+ }
21997
22500
  `;
21998
22501
  var GPU_COLOR_PREAMBLE_GLSL = `
21999
22502
  float _gpu_srgb_to_linear(float c) {
@@ -22433,6 +22936,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
22433
22936
  const constants = this.getConstants();
22434
22937
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
22435
22938
  const target = this.createTarget({
22939
+ hints: options.hints,
22436
22940
  functions: (id) => {
22437
22941
  if (userFunctions && id in userFunctions) {
22438
22942
  const fn = userFunctions[id];
@@ -22471,12 +22975,89 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
22471
22975
  if (code.includes("_gpu_besselJ"))
22472
22976
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
22473
22977
  if (code.includes("_fractal_")) {
22474
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22978
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
22979
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22980
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
22981
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
22982
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22983
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
22984
+ } else {
22985
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22986
+ }
22475
22987
  }
22476
22988
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
22477
22989
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
22478
22990
  }
22479
22991
  if (preamble) result.preamble = preamble;
22992
+ if (code.includes("_fractal_") && options.hints?.viewport) {
22993
+ const strategy = selectFractalStrategy(target);
22994
+ const radius = options.hints.viewport.radius;
22995
+ switch (strategy) {
22996
+ case "single":
22997
+ result.staleWhen = { radiusBelow: 1e-6 };
22998
+ break;
22999
+ case "double":
23000
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
23001
+ break;
23002
+ case "perturbation":
23003
+ result.staleWhen = {
23004
+ radiusAbove: 1e-5,
23005
+ radiusBelow: radius * 0.01,
23006
+ centerDistance: radius * 2
23007
+ };
23008
+ break;
23009
+ }
23010
+ }
23011
+ if ((code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) && options.hints?.viewport) {
23012
+ const cx = hpToNumber(options.hints.viewport.center[0]);
23013
+ const cy = hpToNumber(options.hints.viewport.center[1]);
23014
+ const size = options.hints.viewport.radius * 2;
23015
+ const cx_hi = Math.fround(cx);
23016
+ const cy_hi = Math.fround(cy);
23017
+ result.uniforms = {
23018
+ ...result.uniforms,
23019
+ _dp_cx_hi: cx_hi,
23020
+ _dp_cx_lo: cx - cx_hi,
23021
+ _dp_cy_hi: cy_hi,
23022
+ _dp_cy_lo: cy - cy_hi,
23023
+ _dp_w: size,
23024
+ _dp_h: size
23025
+ };
23026
+ }
23027
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
23028
+ const viewport = options.hints.viewport;
23029
+ const size = viewport.radius * 2;
23030
+ result.uniforms = {
23031
+ ...result.uniforms,
23032
+ _pt_offset_x: 0,
23033
+ _pt_offset_y: 0,
23034
+ _pt_w: size,
23035
+ _pt_h: size
23036
+ };
23037
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
23038
+ const maxIter = 1e3;
23039
+ const orbit = computeReferenceOrbit(
23040
+ viewport.center,
23041
+ maxIter,
23042
+ digits
23043
+ );
23044
+ const orbitLen = orbit.length / 2;
23045
+ const texWidth = Math.min(orbitLen, 4096);
23046
+ const texHeight = Math.ceil(orbitLen / texWidth);
23047
+ result.textures = {
23048
+ _refOrbit: {
23049
+ data: orbit,
23050
+ width: texWidth,
23051
+ height: texHeight,
23052
+ format: "rg32f"
23053
+ }
23054
+ };
23055
+ result.uniforms = {
23056
+ ...result.uniforms,
23057
+ _refOrbitLen: orbitLen,
23058
+ _refOrbitTexWidth: texWidth
23059
+ };
23060
+ }
22480
23061
  return result;
22481
23062
  }
22482
23063
  compileToSource(expr, _options = {}) {
@@ -24811,7 +25392,7 @@ ${code}`;
24811
25392
  }
24812
25393
 
24813
25394
  // src/compile.ts
24814
- var version = "0.55.3";
25395
+ var version = "0.55.5";
24815
25396
  return __toCommonJS(compile_exports);
24816
25397
  })();
24817
25398
  /*! Bundled license information: