@cortex-js/compute-engine 0.55.3 → 0.55.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/dist/compile.esm.js +525 -31
  2. package/dist/compile.min.esm.js +440 -70
  3. package/dist/compile.min.umd.cjs +439 -69
  4. package/dist/compile.umd.cjs +525 -31
  5. package/dist/compute-engine.esm.js +567 -43
  6. package/dist/compute-engine.min.esm.js +433 -63
  7. package/dist/compute-engine.min.umd.cjs +433 -63
  8. package/dist/compute-engine.umd.cjs +567 -43
  9. package/dist/core.esm.js +566 -42
  10. package/dist/core.min.esm.js +432 -62
  11. package/dist/core.min.umd.cjs +432 -62
  12. package/dist/core.umd.cjs +566 -42
  13. package/dist/interval.esm.js +2 -2
  14. package/dist/interval.min.esm.js +2 -2
  15. package/dist/interval.min.umd.cjs +2 -2
  16. package/dist/interval.umd.cjs +2 -2
  17. package/dist/latex-syntax.esm.js +43 -13
  18. package/dist/latex-syntax.min.esm.js +5 -5
  19. package/dist/latex-syntax.min.umd.cjs +5 -5
  20. package/dist/latex-syntax.umd.cjs +43 -13
  21. package/dist/math-json.esm.js +2 -2
  22. package/dist/math-json.min.esm.js +2 -2
  23. package/dist/math-json.min.umd.cjs +2 -2
  24. package/dist/math-json.umd.cjs +2 -2
  25. package/dist/numerics.esm.js +2 -2
  26. package/dist/numerics.min.esm.js +2 -2
  27. package/dist/numerics.min.umd.cjs +2 -2
  28. package/dist/numerics.umd.cjs +2 -2
  29. package/dist/types/big-decimal/big-decimal.d.ts +1 -1
  30. package/dist/types/big-decimal/index.d.ts +1 -1
  31. package/dist/types/big-decimal/transcendentals.d.ts +1 -1
  32. package/dist/types/big-decimal/utils.d.ts +1 -1
  33. package/dist/types/common/ansi-codes.d.ts +1 -1
  34. package/dist/types/common/configuration-change.d.ts +1 -1
  35. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  36. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  37. package/dist/types/common/interruptible.d.ts +1 -1
  38. package/dist/types/common/one-of.d.ts +1 -1
  39. package/dist/types/common/signals.d.ts +1 -1
  40. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  41. package/dist/types/common/type/boxed-type.d.ts +1 -1
  42. package/dist/types/common/type/lexer.d.ts +1 -1
  43. package/dist/types/common/type/parse.d.ts +1 -1
  44. package/dist/types/common/type/parser.d.ts +1 -1
  45. package/dist/types/common/type/primitive.d.ts +1 -1
  46. package/dist/types/common/type/reduce.d.ts +1 -1
  47. package/dist/types/common/type/serialize.d.ts +1 -1
  48. package/dist/types/common/type/subtype.d.ts +1 -1
  49. package/dist/types/common/type/type-builder.d.ts +1 -1
  50. package/dist/types/common/type/types.d.ts +1 -1
  51. package/dist/types/common/type/utils.d.ts +1 -1
  52. package/dist/types/common/utils.d.ts +1 -1
  53. package/dist/types/compile.d.ts +1 -1
  54. package/dist/types/compute-engine/assume.d.ts +1 -1
  55. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
  56. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
  69. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  71. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  72. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  73. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  74. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  75. package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
  76. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  77. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  78. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  79. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  80. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  81. package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
  82. package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
  83. package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
  84. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  85. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  86. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  87. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  88. package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
  89. package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
  90. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  91. package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
  92. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  93. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  94. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  95. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  96. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
  97. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  98. package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
  99. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  100. package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
  101. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  102. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  103. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  104. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  105. package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
  106. package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
  107. package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +13 -0
  108. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  109. package/dist/types/compute-engine/compilation/gpu-target.d.ts +47 -1
  110. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  113. package/dist/types/compute-engine/compilation/types.d.ts +48 -1
  114. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  115. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  116. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  117. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  118. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  119. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  120. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  121. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  132. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  133. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  134. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  135. package/dist/types/compute-engine/global-types.d.ts +1 -1
  136. package/dist/types/compute-engine/index.d.ts +1 -1
  137. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  138. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  139. package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
  140. package/dist/types/compute-engine/interval/index.d.ts +1 -1
  141. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  142. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  143. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  144. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  145. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  146. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  147. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  148. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  149. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  150. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  151. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  168. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  170. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
  171. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  172. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  173. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  174. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  175. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  176. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  177. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  178. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  179. package/dist/types/compute-engine/library/core.d.ts +1 -1
  180. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  181. package/dist/types/compute-engine/library/library.d.ts +1 -1
  182. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  183. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  184. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  185. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  186. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  187. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  188. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  189. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  190. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  191. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  192. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  193. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  194. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  195. package/dist/types/compute-engine/library/units.d.ts +1 -1
  196. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  197. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  198. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  199. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  200. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  201. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  202. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  203. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  204. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  205. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  206. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  207. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  208. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  209. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  211. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  217. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  218. package/dist/types/compute-engine/oeis.d.ts +1 -1
  219. package/dist/types/compute-engine/sequence.d.ts +1 -1
  220. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  221. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  222. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  223. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  224. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  225. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  226. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  227. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  228. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  229. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  230. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  238. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  239. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  240. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  241. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  242. package/dist/types/compute-engine/types-engine.d.ts +1 -1
  243. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  244. package/dist/types/compute-engine/types-expression.d.ts +1 -1
  245. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
  246. package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
  247. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  248. package/dist/types/compute-engine/types.d.ts +1 -1
  249. package/dist/types/compute-engine.d.ts +1 -1
  250. package/dist/types/core.d.ts +1 -1
  251. package/dist/types/interval.d.ts +1 -1
  252. package/dist/types/latex-syntax.d.ts +2 -2
  253. package/dist/types/math-json/symbols.d.ts +1 -1
  254. package/dist/types/math-json/types.d.ts +1 -1
  255. package/dist/types/math-json/utils.d.ts +1 -1
  256. package/dist/types/math-json.d.ts +2 -2
  257. package/dist/types/numerics.d.ts +1 -1
  258. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- /** Compute Engine 0.55.3 */
1
+ /** Compute Engine 0.55.4 */
2
2
 
3
3
  // src/compute-engine/numerics/richardson.ts
4
4
  function extrapolate(f, x0, options = {}) {
@@ -16472,30 +16472,6 @@ var COOLWARM = [
16472
16472
  "#ae2036",
16473
16473
  "#b40426"
16474
16474
  ];
16475
- var OCEAN_BALANCE = [
16476
- "#00441b",
16477
- "#006d5b",
16478
- "#1a8c7d",
16479
- "#2fa394",
16480
- "#4fb3a3",
16481
- "#6fc1b3",
16482
- "#8dcfc3",
16483
- "#a6dbd1",
16484
- "#bfe6de",
16485
- "#d7f0ea",
16486
- "#f7f7f7",
16487
- "#eeeeee",
16488
- "#ddd8e6",
16489
- "#c7bcda",
16490
- "#b3a0d0",
16491
- "#9f86c7",
16492
- "#8d6dbd",
16493
- "#7b56b1",
16494
- "#6a42a3",
16495
- "#5a3093",
16496
- "#4a1f82",
16497
- "#3b0f70"
16498
- ];
16499
16475
  var reversePalette = (palette) => palette.slice().reverse();
16500
16476
  var DIVERGING_PALETTES = {
16501
16477
  roma: ROMA,
@@ -16507,9 +16483,7 @@ var DIVERGING_PALETTES = {
16507
16483
  rdbu: RDBU,
16508
16484
  "rdbu-reversed": reversePalette(RDBU),
16509
16485
  coolwarm: COOLWARM,
16510
- "coolwarm-reversed": reversePalette(COOLWARM),
16511
- "ocean-balance": OCEAN_BALANCE,
16512
- "ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
16486
+ "coolwarm-reversed": reversePalette(COOLWARM)
16513
16487
  };
16514
16488
  var TURBO = [
16515
16489
  "#30123b",
@@ -18593,6 +18567,40 @@ var GREY = [
18593
18567
  "#eeeeee",
18594
18568
  "#ffffff"
18595
18569
  ];
18570
+ var CMOCEAN_PHASE = [
18571
+ "#a8780d",
18572
+ "#b3701b",
18573
+ "#be6828",
18574
+ "#c75f35",
18575
+ "#cf5643",
18576
+ "#d54b53",
18577
+ "#db4066",
18578
+ "#de357b",
18579
+ "#df2a93",
18580
+ "#dc25ad",
18581
+ "#d529c4",
18582
+ "#cc34d7",
18583
+ "#c041e5",
18584
+ "#b24fef",
18585
+ "#a25cf3",
18586
+ "#9168f4",
18587
+ "#7d73f0",
18588
+ "#687ce8",
18589
+ "#5285dc",
18590
+ "#3d8bcd",
18591
+ "#2c90bc",
18592
+ "#2093ac",
18593
+ "#19959c",
18594
+ "#12978c",
18595
+ "#0c987c",
18596
+ "#119a69",
18597
+ "#249a52",
18598
+ "#409839",
18599
+ "#5e9420",
18600
+ "#778d12",
18601
+ "#8b860d",
18602
+ "#9b7f0d"
18603
+ ];
18596
18604
  var reversePalette2 = (palette) => palette.slice().reverse();
18597
18605
  var SEQUENTIAL_PALETTES = {
18598
18606
  turbo: TURBO,
@@ -18616,7 +18624,9 @@ var SEQUENTIAL_PALETTES = {
18616
18624
  "rocket-reversed": reversePalette2(ROCKET),
18617
18625
  mako: MAKO,
18618
18626
  // blue to teal
18619
- "mako-reversed": reversePalette2(MAKO)
18627
+ "mako-reversed": reversePalette2(MAKO),
18628
+ "cmocean-phase": CMOCEAN_PHASE,
18629
+ "cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
18620
18630
  };
18621
18631
 
18622
18632
  // src/compute-engine/numerics/special-functions.ts
@@ -20738,6 +20748,33 @@ function fibonacci(n) {
20738
20748
  return b;
20739
20749
  }
20740
20750
 
20751
+ // src/compute-engine/compilation/fractal-orbit.ts
20752
+ function computeReferenceOrbit(center, maxIter, precision) {
20753
+ const prevPrecision = BigDecimal.precision;
20754
+ BigDecimal.precision = precision;
20755
+ try {
20756
+ const cr = new BigDecimal(center[0]);
20757
+ const ci = new BigDecimal(center[1]);
20758
+ let zr = BigDecimal.ZERO;
20759
+ let zi = BigDecimal.ZERO;
20760
+ const ESCAPE = new BigDecimal(256);
20761
+ const points = [];
20762
+ for (let i = 0; i < maxIter; i++) {
20763
+ points.push(zr.toNumber(), zi.toNumber());
20764
+ const zr2 = zr.mul(zr).toPrecision(precision);
20765
+ const zi2 = zi.mul(zi).toPrecision(precision);
20766
+ const mag2 = zr2.add(zi2);
20767
+ if (mag2.cmp(ESCAPE) > 0) break;
20768
+ const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
20769
+ zr = zr2.sub(zi2).add(cr);
20770
+ zi = new_zi;
20771
+ }
20772
+ return new Float32Array(points);
20773
+ } finally {
20774
+ BigDecimal.precision = prevPrecision;
20775
+ }
20776
+ }
20777
+
20741
20778
  // src/compute-engine/compilation/gpu-target.ts
20742
20779
  var GPU_OPERATORS = {
20743
20780
  Add: ["+", 11],
@@ -20821,6 +20858,13 @@ function compileGPUSumProduct(kind, args, _compile, target) {
20821
20858
  ];
20822
20859
  return lines.join("\n");
20823
20860
  }
20861
+ function selectFractalStrategy(target) {
20862
+ const radius = target.hints?.viewport?.radius;
20863
+ if (radius === void 0) return "single";
20864
+ if (radius > 1e-6) return "single";
20865
+ if (radius > 1e-14) return "double";
20866
+ return "perturbation";
20867
+ }
20824
20868
  var GPU_FUNCTIONS = {
20825
20869
  // Variadic arithmetic (for function-call form, e.g., with vectors)
20826
20870
  Add: (args, compile2, target) => {
@@ -21316,12 +21360,32 @@ var GPU_FUNCTIONS = {
21316
21360
  if (c === null || maxIter === null)
21317
21361
  throw new Error("Mandelbrot: missing arguments");
21318
21362
  const iterCode = compileIntArg(maxIter, compile2, target);
21363
+ const strategy = selectFractalStrategy(target);
21364
+ if (strategy === "double") {
21365
+ const cCode = compile2(c);
21366
+ return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
21367
+ }
21368
+ if (strategy === "perturbation") {
21369
+ const cCode = compile2(c);
21370
+ return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
21371
+ }
21319
21372
  return `_fractal_mandelbrot(${compile2(c)}, ${iterCode})`;
21320
21373
  },
21321
21374
  Julia: ([z, c, maxIter], compile2, target) => {
21322
21375
  if (z === null || c === null || maxIter === null)
21323
21376
  throw new Error("Julia: missing arguments");
21324
21377
  const iterCode = compileIntArg(maxIter, compile2, target);
21378
+ const strategy = selectFractalStrategy(target);
21379
+ if (strategy === "double") {
21380
+ const zCode = compile2(z);
21381
+ const cCode = compile2(c);
21382
+ return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
21383
+ }
21384
+ if (strategy === "perturbation") {
21385
+ const zCode = compile2(z);
21386
+ const cCode = compile2(c);
21387
+ return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
21388
+ }
21325
21389
  return `_fractal_julia(${compile2(z)}, ${compile2(c)}, ${iterCode})`;
21326
21390
  },
21327
21391
  // Vector/Matrix operations
@@ -21919,6 +21983,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
21919
21983
  return sgn * vals[n] / norm;
21920
21984
  }
21921
21985
  `;
21986
+ var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
21987
+ // Split a float into high and low parts for exact multiplication
21988
+ vec2 ds_split(float a) {
21989
+ const float SPLIT = 4097.0; // 2^12 + 1
21990
+ float t = SPLIT * a;
21991
+ float hi = t - (t - a);
21992
+ float lo = a - hi;
21993
+ return vec2(hi, lo);
21994
+ }
21995
+
21996
+ // Create a double-single from a single float
21997
+ vec2 ds_from(float a) {
21998
+ return vec2(a, 0.0);
21999
+ }
22000
+
22001
+ // Error-free addition (Knuth TwoSum)
22002
+ vec2 ds_add(vec2 a, vec2 b) {
22003
+ float s = a.x + b.x;
22004
+ float v = s - a.x;
22005
+ float e = (a.x - (s - v)) + (b.x - v);
22006
+ float lo = (a.y + b.y) + e;
22007
+ float hi = s + lo;
22008
+ lo = lo - (hi - s);
22009
+ return vec2(hi, lo);
22010
+ }
22011
+
22012
+ // Double-single subtraction
22013
+ vec2 ds_sub(vec2 a, vec2 b) {
22014
+ return ds_add(a, vec2(-b.x, -b.y));
22015
+ }
22016
+
22017
+ // Error-free multiplication (Dekker TwoProduct)
22018
+ vec2 ds_mul(vec2 a, vec2 b) {
22019
+ float p = a.x * b.x;
22020
+ vec2 sa = ds_split(a.x);
22021
+ vec2 sb = ds_split(b.x);
22022
+ float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22023
+ err += a.x * b.y + a.y * b.x;
22024
+ float hi = p + err;
22025
+ float lo = err - (hi - p);
22026
+ return vec2(hi, lo);
22027
+ }
22028
+
22029
+ // Optimized self-multiply
22030
+ vec2 ds_sqr(vec2 a) {
22031
+ float p = a.x * a.x;
22032
+ vec2 sa = ds_split(a.x);
22033
+ float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22034
+ err += 2.0 * a.x * a.y;
22035
+ float hi = p + err;
22036
+ float lo = err - (hi - p);
22037
+ return vec2(hi, lo);
22038
+ }
22039
+
22040
+ // Compare magnitude: returns -1, 0, or 1
22041
+ float ds_cmp(vec2 a, vec2 b) {
22042
+ float d = a.x - b.x;
22043
+ if (d != 0.0) return sign(d);
22044
+ return sign(a.y - b.y);
22045
+ }
22046
+ `;
22047
+ var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
22048
+ fn ds_split(a: f32) -> vec2f {
22049
+ const SPLIT: f32 = 4097.0;
22050
+ let t = SPLIT * a;
22051
+ let hi = t - (t - a);
22052
+ let lo = a - hi;
22053
+ return vec2f(hi, lo);
22054
+ }
22055
+
22056
+ fn ds_from(a: f32) -> vec2f {
22057
+ return vec2f(a, 0.0);
22058
+ }
22059
+
22060
+ fn ds_add(a: vec2f, b: vec2f) -> vec2f {
22061
+ let s = a.x + b.x;
22062
+ let v = s - a.x;
22063
+ let e = (a.x - (s - v)) + (b.x - v);
22064
+ let lo_t = (a.y + b.y) + e;
22065
+ let hi = s + lo_t;
22066
+ let lo = lo_t - (hi - s);
22067
+ return vec2f(hi, lo);
22068
+ }
22069
+
22070
+ fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
22071
+ return ds_add(a, vec2f(-b.x, -b.y));
22072
+ }
22073
+
22074
+ fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
22075
+ let p = a.x * b.x;
22076
+ let sa = ds_split(a.x);
22077
+ let sb = ds_split(b.x);
22078
+ var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
22079
+ err += a.x * b.y + a.y * b.x;
22080
+ let hi = p + err;
22081
+ let lo = err - (hi - p);
22082
+ return vec2f(hi, lo);
22083
+ }
22084
+
22085
+ fn ds_sqr(a: vec2f) -> vec2f {
22086
+ let p = a.x * a.x;
22087
+ let sa = ds_split(a.x);
22088
+ var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
22089
+ err += 2.0 * a.x * a.y;
22090
+ let hi = p + err;
22091
+ let lo = err - (hi - p);
22092
+ return vec2f(hi, lo);
22093
+ }
22094
+
22095
+ fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
22096
+ let d = a.x - b.x;
22097
+ if (d != 0.0) { return sign(d); }
22098
+ return sign(a.y - b.y);
22099
+ }
22100
+ `;
22101
+ var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
22102
+ float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
22103
+ // c = (re_hi, im_hi, re_lo, im_lo)
22104
+ vec2 cr = vec2(c.x, c.z); // real part as ds
22105
+ vec2 ci = vec2(c.y, c.w); // imag part as ds
22106
+ vec2 zr = vec2(0.0, 0.0);
22107
+ vec2 zi = vec2(0.0, 0.0);
22108
+ for (int i = 0; i < maxIter; i++) {
22109
+ vec2 zr2 = ds_sqr(zr);
22110
+ vec2 zi2 = ds_sqr(zi);
22111
+ // |z|^2 > 4.0 ?
22112
+ vec2 mag2 = ds_add(zr2, zi2);
22113
+ if (mag2.x > 4.0)
22114
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22115
+ // z = z^2 + c
22116
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
22117
+ zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
22118
+ zi = new_zi;
22119
+ }
22120
+ return 1.0;
22121
+ }
22122
+
22123
+ float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
22124
+ vec2 zr = vec2(z_in.x, z_in.z);
22125
+ vec2 zi = vec2(z_in.y, z_in.w);
22126
+ vec2 cr = vec2(c.x, c.z);
22127
+ vec2 ci = vec2(c.y, c.w);
22128
+ for (int i = 0; i < maxIter; i++) {
22129
+ vec2 zr2 = ds_sqr(zr);
22130
+ vec2 zi2 = ds_sqr(zi);
22131
+ vec2 mag2 = ds_add(zr2, zi2);
22132
+ if (mag2.x > 4.0)
22133
+ return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
22134
+ vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22135
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22136
+ zi = new_zi;
22137
+ }
22138
+ return 1.0;
22139
+ }
22140
+ `;
22141
+ var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
22142
+ fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
22143
+ let cr = vec2f(c.x, c.z);
22144
+ let ci = vec2f(c.y, c.w);
22145
+ var zr = vec2f(0.0, 0.0);
22146
+ var zi = vec2f(0.0, 0.0);
22147
+ for (var i: i32 = 0; i < maxIter; i++) {
22148
+ let zr2 = ds_sqr(zr);
22149
+ let zi2 = ds_sqr(zi);
22150
+ let mag2 = ds_add(zr2, zi2);
22151
+ if (mag2.x > 4.0) {
22152
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22153
+ }
22154
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22155
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22156
+ zi = new_zi;
22157
+ }
22158
+ return 1.0;
22159
+ }
22160
+
22161
+ fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
22162
+ var zr = vec2f(z_in.x, z_in.z);
22163
+ var zi = vec2f(z_in.y, z_in.w);
22164
+ let cr = vec2f(c.x, c.z);
22165
+ let ci = vec2f(c.y, c.w);
22166
+ for (var i: i32 = 0; i < maxIter; i++) {
22167
+ let zr2 = ds_sqr(zr);
22168
+ let zi2 = ds_sqr(zi);
22169
+ let mag2 = ds_add(zr2, zi2);
22170
+ if (mag2.x > 4.0) {
22171
+ return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
22172
+ }
22173
+ let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
22174
+ zr = ds_add(ds_sub(zr2, zi2), cr);
22175
+ zi = new_zi;
22176
+ }
22177
+ return 1.0;
22178
+ }
22179
+ `;
21922
22180
  var GPU_FRACTAL_PREAMBLE_GLSL = `
21923
22181
  float _fractal_mandelbrot(vec2 c, int maxIter) {
21924
22182
  vec2 z = vec2(0.0, 0.0);
@@ -21962,6 +22220,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
21962
22220
  return 1.0;
21963
22221
  }
21964
22222
  `;
22223
+ var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
22224
+ uniform sampler2D _refOrbit;
22225
+ uniform int _refOrbitLen;
22226
+ uniform int _refOrbitTexWidth;
22227
+
22228
+ vec2 _pt_fetch_orbit(int i) {
22229
+ int y = i / _refOrbitTexWidth;
22230
+ int x = i - y * _refOrbitTexWidth;
22231
+ return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
22232
+ }
22233
+
22234
+ float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
22235
+ float dr = 0.0;
22236
+ float di = 0.0;
22237
+ int orbitLen = min(maxIter, _refOrbitLen);
22238
+ for (int i = 0; i < orbitLen; i++) {
22239
+ vec2 Zn = _pt_fetch_orbit(i);
22240
+ // delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
22241
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22242
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22243
+ dr = new_dr;
22244
+ di = new_di;
22245
+ // Full z = Z_{n+1} + delta for escape check
22246
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22247
+ float zr = Zn1.x + dr;
22248
+ float zi = Zn1.y + di;
22249
+ float mag2 = zr * zr + zi * zi;
22250
+ if (mag2 > 4.0)
22251
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22252
+ // Glitch detection: |delta|^2 > |Z|^2
22253
+ float dmag2 = dr * dr + di * di;
22254
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22255
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22256
+ // Rebase to absolute coordinates and continue with single-float
22257
+ float abs_zr = Zn1.x + dr;
22258
+ float abs_zi = Zn1.y + di;
22259
+ // Reconstruct absolute c from reference + delta
22260
+ // (Use ds_from for the concept, but single-float suffices for fallback)
22261
+ float cx = abs_zr - dr + delta_c.x;
22262
+ float cy = abs_zi - di + delta_c.y;
22263
+ for (int j = i + 1; j < maxIter; j++) {
22264
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22265
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
22266
+ abs_zr = new_zr;
22267
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22268
+ if (mag2 > 4.0)
22269
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22270
+ }
22271
+ return 1.0;
22272
+ }
22273
+ }
22274
+ return 1.0;
22275
+ }
22276
+
22277
+ float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
22278
+ float dr = z_delta.x;
22279
+ float di = z_delta.y;
22280
+ int orbitLen = min(maxIter, _refOrbitLen);
22281
+ for (int i = 0; i < orbitLen; i++) {
22282
+ vec2 Zn = _pt_fetch_orbit(i);
22283
+ float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22284
+ float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22285
+ dr = new_dr;
22286
+ di = new_di;
22287
+ vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
22288
+ float zr = Zn1.x + dr;
22289
+ float zi = Zn1.y + di;
22290
+ float mag2 = zr * zr + zi * zi;
22291
+ if (mag2 > 4.0)
22292
+ return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22293
+ float dmag2 = dr * dr + di * di;
22294
+ float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22295
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22296
+ float abs_zr = Zn1.x + dr;
22297
+ float abs_zi = Zn1.y + di;
22298
+ float cx = delta_c.x;
22299
+ float cy = delta_c.y;
22300
+ for (int j = i + 1; j < maxIter; j++) {
22301
+ float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
22302
+ abs_zi = 2.0 * abs_zr * abs_zi + cy;
22303
+ abs_zr = new_zr;
22304
+ mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
22305
+ if (mag2 > 4.0)
22306
+ return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
22307
+ }
22308
+ return 1.0;
22309
+ }
22310
+ }
22311
+ return 1.0;
22312
+ }
22313
+ `;
22314
+ var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
22315
+ @group(0) @binding(1) var _refOrbit: texture_2d<f32>;
22316
+ var<uniform> _refOrbitLen: i32;
22317
+ var<uniform> _refOrbitTexWidth: i32;
22318
+
22319
+ fn _pt_fetch_orbit(i: i32) -> vec2f {
22320
+ let y = i / _refOrbitTexWidth;
22321
+ let x = i - y * _refOrbitTexWidth;
22322
+ return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
22323
+ }
22324
+
22325
+ fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
22326
+ var dr: f32 = 0.0;
22327
+ var di: f32 = 0.0;
22328
+ let orbitLen = min(maxIter, _refOrbitLen);
22329
+ for (var i: i32 = 0; i < orbitLen; i++) {
22330
+ let Zn = _pt_fetch_orbit(i);
22331
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22332
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22333
+ dr = new_dr;
22334
+ di = new_di;
22335
+ var Zn1 = vec2f(0.0);
22336
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22337
+ let zr = Zn1.x + dr;
22338
+ let zi = Zn1.y + di;
22339
+ var mag2 = zr * zr + zi * zi;
22340
+ if (mag2 > 4.0) {
22341
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22342
+ }
22343
+ let dmag2 = dr * dr + di * di;
22344
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22345
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22346
+ var f_zr = Zn1.x + dr;
22347
+ var f_zi = Zn1.y + di;
22348
+ let cx = delta_c.x;
22349
+ let cy = delta_c.y;
22350
+ for (var j: i32 = i + 1; j < maxIter; j++) {
22351
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22352
+ f_zi = 2.0 * f_zr * f_zi + cy;
22353
+ f_zr = t_zr;
22354
+ mag2 = f_zr * f_zr + f_zi * f_zi;
22355
+ if (mag2 > 4.0) {
22356
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22357
+ }
22358
+ }
22359
+ return 1.0;
22360
+ }
22361
+ }
22362
+ return 1.0;
22363
+ }
22364
+
22365
+ fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
22366
+ var dr = z_delta.x;
22367
+ var di = z_delta.y;
22368
+ let orbitLen = min(maxIter, _refOrbitLen);
22369
+ for (var i: i32 = 0; i < orbitLen; i++) {
22370
+ let Zn = _pt_fetch_orbit(i);
22371
+ let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
22372
+ let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
22373
+ dr = new_dr;
22374
+ di = new_di;
22375
+ var Zn1 = vec2f(0.0);
22376
+ if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
22377
+ let zr = Zn1.x + dr;
22378
+ let zi = Zn1.y + di;
22379
+ var mag2 = zr * zr + zi * zi;
22380
+ if (mag2 > 4.0) {
22381
+ return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22382
+ }
22383
+ let dmag2 = dr * dr + di * di;
22384
+ let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
22385
+ if (dmag2 > Zmag2 && Zmag2 > 0.0) {
22386
+ var f_zr = Zn1.x + dr;
22387
+ var f_zi = Zn1.y + di;
22388
+ let cx = delta_c.x;
22389
+ let cy = delta_c.y;
22390
+ for (var j: i32 = i + 1; j < maxIter; j++) {
22391
+ let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
22392
+ f_zi = 2.0 * f_zr * f_zi + cy;
22393
+ f_zr = t_zr;
22394
+ mag2 = f_zr * f_zr + f_zi * f_zi;
22395
+ if (mag2 > 4.0) {
22396
+ return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
22397
+ }
22398
+ }
22399
+ return 1.0;
22400
+ }
22401
+ }
22402
+ return 1.0;
22403
+ }
22404
+ `;
21965
22405
  var GPU_COLOR_PREAMBLE_GLSL = `
21966
22406
  float _gpu_srgb_to_linear(float c) {
21967
22407
  if (c <= 0.04045) return c / 12.92;
@@ -22400,6 +22840,7 @@ var GPUShaderTarget = class {
22400
22840
  const constants = this.getConstants();
22401
22841
  const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
22402
22842
  const target = this.createTarget({
22843
+ hints: options.hints,
22403
22844
  functions: (id) => {
22404
22845
  if (userFunctions && id in userFunctions) {
22405
22846
  const fn = userFunctions[id];
@@ -22438,12 +22879,65 @@ var GPUShaderTarget = class {
22438
22879
  if (code.includes("_gpu_besselJ"))
22439
22880
  preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
22440
22881
  if (code.includes("_fractal_")) {
22441
- preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22882
+ if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
22883
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22884
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
22885
+ } else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
22886
+ preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
22887
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
22888
+ } else {
22889
+ preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
22890
+ }
22442
22891
  }
22443
22892
  if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
22444
22893
  preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
22445
22894
  }
22446
22895
  if (preamble) result.preamble = preamble;
22896
+ if (code.includes("_fractal_") && options.hints?.viewport) {
22897
+ const strategy = selectFractalStrategy(target);
22898
+ const radius = options.hints.viewport.radius;
22899
+ switch (strategy) {
22900
+ case "single":
22901
+ result.staleWhen = { radiusBelow: 1e-6 };
22902
+ break;
22903
+ case "double":
22904
+ result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
22905
+ break;
22906
+ case "perturbation":
22907
+ result.staleWhen = {
22908
+ radiusAbove: 1e-5,
22909
+ radiusBelow: radius * 0.01,
22910
+ centerDistance: radius * 2
22911
+ };
22912
+ break;
22913
+ }
22914
+ }
22915
+ if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
22916
+ const viewport = options.hints.viewport;
22917
+ const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
22918
+ const maxIter = 1e3;
22919
+ const orbit = computeReferenceOrbit(
22920
+ viewport.center,
22921
+ maxIter,
22922
+ digits
22923
+ );
22924
+ const orbitLen = orbit.length / 2;
22925
+ const texWidth = Math.min(orbitLen, 4096);
22926
+ const texHeight = Math.ceil(orbitLen / texWidth);
22927
+ result.textures = {
22928
+ _refOrbit: {
22929
+ data: orbit,
22930
+ width: texWidth,
22931
+ height: texHeight,
22932
+ format: "rg32f"
22933
+ }
22934
+ };
22935
+ result.uniforms = {
22936
+ ...result.uniforms,
22937
+ _refOrbitLen: orbitLen,
22938
+ _refOrbitTexWidth: texWidth
22939
+ };
22940
+ }
22447
22941
  return result;
22448
22942
  }
22449
22943
  compileToSource(expr, _options = {}) {
@@ -24778,7 +25272,7 @@ function compileToIntervalTarget(expr, target) {
24778
25272
  }
24779
25273
 
24780
25274
  // src/compile.ts
24781
- var version = "0.55.3";
25275
+ var version = "0.55.4";
24782
25276
  export {
24783
25277
  BaseCompiler,
24784
25278
  GLSLTarget,