@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.
- package/dist/compile.esm.js +525 -31
- package/dist/compile.min.esm.js +440 -70
- package/dist/compile.min.umd.cjs +439 -69
- package/dist/compile.umd.cjs +525 -31
- package/dist/compute-engine.esm.js +567 -43
- package/dist/compute-engine.min.esm.js +433 -63
- package/dist/compute-engine.min.umd.cjs +433 -63
- package/dist/compute-engine.umd.cjs +567 -43
- package/dist/core.esm.js +566 -42
- package/dist/core.min.esm.js +432 -62
- package/dist/core.min.umd.cjs +432 -62
- package/dist/core.umd.cjs +566 -42
- package/dist/interval.esm.js +2 -2
- package/dist/interval.min.esm.js +2 -2
- package/dist/interval.min.umd.cjs +2 -2
- package/dist/interval.umd.cjs +2 -2
- package/dist/latex-syntax.esm.js +43 -13
- package/dist/latex-syntax.min.esm.js +5 -5
- package/dist/latex-syntax.min.umd.cjs +5 -5
- package/dist/latex-syntax.umd.cjs +43 -13
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/math-json.min.umd.cjs +2 -2
- package/dist/math-json.umd.cjs +2 -2
- package/dist/numerics.esm.js +2 -2
- package/dist/numerics.min.esm.js +2 -2
- package/dist/numerics.min.umd.cjs +2 -2
- package/dist/numerics.umd.cjs +2 -2
- package/dist/types/big-decimal/big-decimal.d.ts +1 -1
- package/dist/types/big-decimal/index.d.ts +1 -1
- package/dist/types/big-decimal/transcendentals.d.ts +1 -1
- package/dist/types/big-decimal/utils.d.ts +1 -1
- package/dist/types/common/ansi-codes.d.ts +1 -1
- package/dist/types/common/configuration-change.d.ts +1 -1
- package/dist/types/common/fuzzy-string-match.d.ts +1 -1
- package/dist/types/common/grapheme-splitter.d.ts +1 -1
- package/dist/types/common/interruptible.d.ts +1 -1
- package/dist/types/common/one-of.d.ts +1 -1
- package/dist/types/common/signals.d.ts +1 -1
- package/dist/types/common/type/ast-nodes.d.ts +1 -1
- package/dist/types/common/type/boxed-type.d.ts +1 -1
- package/dist/types/common/type/lexer.d.ts +1 -1
- package/dist/types/common/type/parse.d.ts +1 -1
- package/dist/types/common/type/parser.d.ts +1 -1
- package/dist/types/common/type/primitive.d.ts +1 -1
- package/dist/types/common/type/reduce.d.ts +1 -1
- package/dist/types/common/type/serialize.d.ts +1 -1
- package/dist/types/common/type/subtype.d.ts +1 -1
- package/dist/types/common/type/type-builder.d.ts +1 -1
- package/dist/types/common/type/types.d.ts +1 -1
- package/dist/types/common/type/utils.d.ts +1 -1
- package/dist/types/common/utils.d.ts +1 -1
- package/dist/types/compile.d.ts +1 -1
- package/dist/types/compute-engine/assume.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
- package/dist/types/compute-engine/collection-utils.d.ts +1 -1
- package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
- package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
- package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
- package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +13 -0
- package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/gpu-target.d.ts +47 -1
- package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/types.d.ts +48 -1
- package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
- package/dist/types/compute-engine/cost-function.d.ts +1 -1
- package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
- package/dist/types/compute-engine/engine-cache.d.ts +1 -1
- package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
- package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
- package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
- package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
- package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
- package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
- package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
- package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
- package/dist/types/compute-engine/engine-scope.d.ts +1 -1
- package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
- package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
- package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
- package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
- package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/free-functions.d.ts +1 -1
- package/dist/types/compute-engine/function-utils.d.ts +1 -1
- package/dist/types/compute-engine/global-types.d.ts +1 -1
- package/dist/types/compute-engine/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
- package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
- package/dist/types/compute-engine/interval/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
- package/dist/types/compute-engine/interval/types.d.ts +1 -1
- package/dist/types/compute-engine/interval/util.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/calculus.d.ts +1 -1
- package/dist/types/compute-engine/library/collections.d.ts +1 -1
- package/dist/types/compute-engine/library/colors.d.ts +1 -1
- package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
- package/dist/types/compute-engine/library/complex.d.ts +1 -1
- package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
- package/dist/types/compute-engine/library/core.d.ts +1 -1
- package/dist/types/compute-engine/library/fractals.d.ts +1 -1
- package/dist/types/compute-engine/library/library.d.ts +1 -1
- package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
- package/dist/types/compute-engine/library/logic.d.ts +1 -1
- package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
- package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
- package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
- package/dist/types/compute-engine/library/sets.d.ts +1 -1
- package/dist/types/compute-engine/library/statistics.d.ts +1 -1
- package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
- package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/library/units.d.ts +1 -1
- package/dist/types/compute-engine/library/utils.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
- package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
- package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
- package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
- package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
- package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
- package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
- package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
- package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
- package/dist/types/compute-engine/numerics/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/oeis.d.ts +1 -1
- package/dist/types/compute-engine/sequence.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
- package/dist/types/compute-engine/types-definitions.d.ts +1 -1
- package/dist/types/compute-engine/types-engine.d.ts +1 -1
- package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-expression.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types.d.ts +1 -1
- package/dist/types/compute-engine.d.ts +1 -1
- package/dist/types/core.d.ts +1 -1
- package/dist/types/interval.d.ts +1 -1
- package/dist/types/latex-syntax.d.ts +2 -2
- package/dist/types/math-json/symbols.d.ts +1 -1
- package/dist/types/math-json/types.d.ts +1 -1
- package/dist/types/math-json/utils.d.ts +1 -1
- package/dist/types/math-json.d.ts +2 -2
- package/dist/types/numerics.d.ts +1 -1
- package/package.json +3 -3
package/dist/compile.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compile 0.55.
|
|
1
|
+
/** Compile 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.Compile = {}));})(this, (function (exports) { 'use strict';
|
|
3
3
|
var Compile = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -16505,30 +16505,6 @@ ${lines.join("\n")}`;
|
|
|
16505
16505
|
"#ae2036",
|
|
16506
16506
|
"#b40426"
|
|
16507
16507
|
];
|
|
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
16508
|
var reversePalette = (palette) => palette.slice().reverse();
|
|
16533
16509
|
var DIVERGING_PALETTES = {
|
|
16534
16510
|
roma: ROMA,
|
|
@@ -16540,9 +16516,7 @@ ${lines.join("\n")}`;
|
|
|
16540
16516
|
rdbu: RDBU,
|
|
16541
16517
|
"rdbu-reversed": reversePalette(RDBU),
|
|
16542
16518
|
coolwarm: COOLWARM,
|
|
16543
|
-
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
16544
|
-
"ocean-balance": OCEAN_BALANCE,
|
|
16545
|
-
"ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
|
|
16519
|
+
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
16546
16520
|
};
|
|
16547
16521
|
var TURBO = [
|
|
16548
16522
|
"#30123b",
|
|
@@ -18626,6 +18600,40 @@ ${lines.join("\n")}`;
|
|
|
18626
18600
|
"#eeeeee",
|
|
18627
18601
|
"#ffffff"
|
|
18628
18602
|
];
|
|
18603
|
+
var CMOCEAN_PHASE = [
|
|
18604
|
+
"#a8780d",
|
|
18605
|
+
"#b3701b",
|
|
18606
|
+
"#be6828",
|
|
18607
|
+
"#c75f35",
|
|
18608
|
+
"#cf5643",
|
|
18609
|
+
"#d54b53",
|
|
18610
|
+
"#db4066",
|
|
18611
|
+
"#de357b",
|
|
18612
|
+
"#df2a93",
|
|
18613
|
+
"#dc25ad",
|
|
18614
|
+
"#d529c4",
|
|
18615
|
+
"#cc34d7",
|
|
18616
|
+
"#c041e5",
|
|
18617
|
+
"#b24fef",
|
|
18618
|
+
"#a25cf3",
|
|
18619
|
+
"#9168f4",
|
|
18620
|
+
"#7d73f0",
|
|
18621
|
+
"#687ce8",
|
|
18622
|
+
"#5285dc",
|
|
18623
|
+
"#3d8bcd",
|
|
18624
|
+
"#2c90bc",
|
|
18625
|
+
"#2093ac",
|
|
18626
|
+
"#19959c",
|
|
18627
|
+
"#12978c",
|
|
18628
|
+
"#0c987c",
|
|
18629
|
+
"#119a69",
|
|
18630
|
+
"#249a52",
|
|
18631
|
+
"#409839",
|
|
18632
|
+
"#5e9420",
|
|
18633
|
+
"#778d12",
|
|
18634
|
+
"#8b860d",
|
|
18635
|
+
"#9b7f0d"
|
|
18636
|
+
];
|
|
18629
18637
|
var reversePalette2 = (palette) => palette.slice().reverse();
|
|
18630
18638
|
var SEQUENTIAL_PALETTES = {
|
|
18631
18639
|
turbo: TURBO,
|
|
@@ -18649,7 +18657,9 @@ ${lines.join("\n")}`;
|
|
|
18649
18657
|
"rocket-reversed": reversePalette2(ROCKET),
|
|
18650
18658
|
mako: MAKO,
|
|
18651
18659
|
// blue to teal
|
|
18652
|
-
"mako-reversed": reversePalette2(MAKO)
|
|
18660
|
+
"mako-reversed": reversePalette2(MAKO),
|
|
18661
|
+
"cmocean-phase": CMOCEAN_PHASE,
|
|
18662
|
+
"cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
|
|
18653
18663
|
};
|
|
18654
18664
|
|
|
18655
18665
|
// src/compute-engine/numerics/special-functions.ts
|
|
@@ -20771,6 +20781,33 @@ ${lines.join("\n")}`;
|
|
|
20771
20781
|
return b;
|
|
20772
20782
|
}
|
|
20773
20783
|
|
|
20784
|
+
// src/compute-engine/compilation/fractal-orbit.ts
|
|
20785
|
+
function computeReferenceOrbit(center, maxIter, precision) {
|
|
20786
|
+
const prevPrecision = BigDecimal.precision;
|
|
20787
|
+
BigDecimal.precision = precision;
|
|
20788
|
+
try {
|
|
20789
|
+
const cr = new BigDecimal(center[0]);
|
|
20790
|
+
const ci = new BigDecimal(center[1]);
|
|
20791
|
+
let zr = BigDecimal.ZERO;
|
|
20792
|
+
let zi = BigDecimal.ZERO;
|
|
20793
|
+
const ESCAPE = new BigDecimal(256);
|
|
20794
|
+
const points = [];
|
|
20795
|
+
for (let i = 0; i < maxIter; i++) {
|
|
20796
|
+
points.push(zr.toNumber(), zi.toNumber());
|
|
20797
|
+
const zr2 = zr.mul(zr).toPrecision(precision);
|
|
20798
|
+
const zi2 = zi.mul(zi).toPrecision(precision);
|
|
20799
|
+
const mag2 = zr2.add(zi2);
|
|
20800
|
+
if (mag2.cmp(ESCAPE) > 0) break;
|
|
20801
|
+
const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
|
|
20802
|
+
zr = zr2.sub(zi2).add(cr);
|
|
20803
|
+
zi = new_zi;
|
|
20804
|
+
}
|
|
20805
|
+
return new Float32Array(points);
|
|
20806
|
+
} finally {
|
|
20807
|
+
BigDecimal.precision = prevPrecision;
|
|
20808
|
+
}
|
|
20809
|
+
}
|
|
20810
|
+
|
|
20774
20811
|
// src/compute-engine/compilation/gpu-target.ts
|
|
20775
20812
|
var GPU_OPERATORS = {
|
|
20776
20813
|
Add: ["+", 11],
|
|
@@ -20854,6 +20891,13 @@ ${lines.join("\n")}`;
|
|
|
20854
20891
|
];
|
|
20855
20892
|
return lines.join("\n");
|
|
20856
20893
|
}
|
|
20894
|
+
function selectFractalStrategy(target) {
|
|
20895
|
+
const radius = target.hints?.viewport?.radius;
|
|
20896
|
+
if (radius === void 0) return "single";
|
|
20897
|
+
if (radius > 1e-6) return "single";
|
|
20898
|
+
if (radius > 1e-14) return "double";
|
|
20899
|
+
return "perturbation";
|
|
20900
|
+
}
|
|
20857
20901
|
var GPU_FUNCTIONS = {
|
|
20858
20902
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
20859
20903
|
Add: (args, compile2, target) => {
|
|
@@ -21349,12 +21393,32 @@ ${lines.join("\n")}`;
|
|
|
21349
21393
|
if (c === null || maxIter === null)
|
|
21350
21394
|
throw new Error("Mandelbrot: missing arguments");
|
|
21351
21395
|
const iterCode = compileIntArg(maxIter, compile2, target);
|
|
21396
|
+
const strategy = selectFractalStrategy(target);
|
|
21397
|
+
if (strategy === "double") {
|
|
21398
|
+
const cCode = compile2(c);
|
|
21399
|
+
return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
21400
|
+
}
|
|
21401
|
+
if (strategy === "perturbation") {
|
|
21402
|
+
const cCode = compile2(c);
|
|
21403
|
+
return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
|
|
21404
|
+
}
|
|
21352
21405
|
return `_fractal_mandelbrot(${compile2(c)}, ${iterCode})`;
|
|
21353
21406
|
},
|
|
21354
21407
|
Julia: ([z, c, maxIter], compile2, target) => {
|
|
21355
21408
|
if (z === null || c === null || maxIter === null)
|
|
21356
21409
|
throw new Error("Julia: missing arguments");
|
|
21357
21410
|
const iterCode = compileIntArg(maxIter, compile2, target);
|
|
21411
|
+
const strategy = selectFractalStrategy(target);
|
|
21412
|
+
if (strategy === "double") {
|
|
21413
|
+
const zCode = compile2(z);
|
|
21414
|
+
const cCode = compile2(c);
|
|
21415
|
+
return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
21416
|
+
}
|
|
21417
|
+
if (strategy === "perturbation") {
|
|
21418
|
+
const zCode = compile2(z);
|
|
21419
|
+
const cCode = compile2(c);
|
|
21420
|
+
return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
|
|
21421
|
+
}
|
|
21358
21422
|
return `_fractal_julia(${compile2(z)}, ${compile2(c)}, ${iterCode})`;
|
|
21359
21423
|
},
|
|
21360
21424
|
// Vector/Matrix operations
|
|
@@ -21951,6 +22015,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
21951
22015
|
for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
|
|
21952
22016
|
return sgn * vals[n] / norm;
|
|
21953
22017
|
}
|
|
22018
|
+
`;
|
|
22019
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
|
|
22020
|
+
// Split a float into high and low parts for exact multiplication
|
|
22021
|
+
vec2 ds_split(float a) {
|
|
22022
|
+
const float SPLIT = 4097.0; // 2^12 + 1
|
|
22023
|
+
float t = SPLIT * a;
|
|
22024
|
+
float hi = t - (t - a);
|
|
22025
|
+
float lo = a - hi;
|
|
22026
|
+
return vec2(hi, lo);
|
|
22027
|
+
}
|
|
22028
|
+
|
|
22029
|
+
// Create a double-single from a single float
|
|
22030
|
+
vec2 ds_from(float a) {
|
|
22031
|
+
return vec2(a, 0.0);
|
|
22032
|
+
}
|
|
22033
|
+
|
|
22034
|
+
// Error-free addition (Knuth TwoSum)
|
|
22035
|
+
vec2 ds_add(vec2 a, vec2 b) {
|
|
22036
|
+
float s = a.x + b.x;
|
|
22037
|
+
float v = s - a.x;
|
|
22038
|
+
float e = (a.x - (s - v)) + (b.x - v);
|
|
22039
|
+
float lo = (a.y + b.y) + e;
|
|
22040
|
+
float hi = s + lo;
|
|
22041
|
+
lo = lo - (hi - s);
|
|
22042
|
+
return vec2(hi, lo);
|
|
22043
|
+
}
|
|
22044
|
+
|
|
22045
|
+
// Double-single subtraction
|
|
22046
|
+
vec2 ds_sub(vec2 a, vec2 b) {
|
|
22047
|
+
return ds_add(a, vec2(-b.x, -b.y));
|
|
22048
|
+
}
|
|
22049
|
+
|
|
22050
|
+
// Error-free multiplication (Dekker TwoProduct)
|
|
22051
|
+
vec2 ds_mul(vec2 a, vec2 b) {
|
|
22052
|
+
float p = a.x * b.x;
|
|
22053
|
+
vec2 sa = ds_split(a.x);
|
|
22054
|
+
vec2 sb = ds_split(b.x);
|
|
22055
|
+
float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
22056
|
+
err += a.x * b.y + a.y * b.x;
|
|
22057
|
+
float hi = p + err;
|
|
22058
|
+
float lo = err - (hi - p);
|
|
22059
|
+
return vec2(hi, lo);
|
|
22060
|
+
}
|
|
22061
|
+
|
|
22062
|
+
// Optimized self-multiply
|
|
22063
|
+
vec2 ds_sqr(vec2 a) {
|
|
22064
|
+
float p = a.x * a.x;
|
|
22065
|
+
vec2 sa = ds_split(a.x);
|
|
22066
|
+
float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
22067
|
+
err += 2.0 * a.x * a.y;
|
|
22068
|
+
float hi = p + err;
|
|
22069
|
+
float lo = err - (hi - p);
|
|
22070
|
+
return vec2(hi, lo);
|
|
22071
|
+
}
|
|
22072
|
+
|
|
22073
|
+
// Compare magnitude: returns -1, 0, or 1
|
|
22074
|
+
float ds_cmp(vec2 a, vec2 b) {
|
|
22075
|
+
float d = a.x - b.x;
|
|
22076
|
+
if (d != 0.0) return sign(d);
|
|
22077
|
+
return sign(a.y - b.y);
|
|
22078
|
+
}
|
|
22079
|
+
`;
|
|
22080
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
|
|
22081
|
+
fn ds_split(a: f32) -> vec2f {
|
|
22082
|
+
const SPLIT: f32 = 4097.0;
|
|
22083
|
+
let t = SPLIT * a;
|
|
22084
|
+
let hi = t - (t - a);
|
|
22085
|
+
let lo = a - hi;
|
|
22086
|
+
return vec2f(hi, lo);
|
|
22087
|
+
}
|
|
22088
|
+
|
|
22089
|
+
fn ds_from(a: f32) -> vec2f {
|
|
22090
|
+
return vec2f(a, 0.0);
|
|
22091
|
+
}
|
|
22092
|
+
|
|
22093
|
+
fn ds_add(a: vec2f, b: vec2f) -> vec2f {
|
|
22094
|
+
let s = a.x + b.x;
|
|
22095
|
+
let v = s - a.x;
|
|
22096
|
+
let e = (a.x - (s - v)) + (b.x - v);
|
|
22097
|
+
let lo_t = (a.y + b.y) + e;
|
|
22098
|
+
let hi = s + lo_t;
|
|
22099
|
+
let lo = lo_t - (hi - s);
|
|
22100
|
+
return vec2f(hi, lo);
|
|
22101
|
+
}
|
|
22102
|
+
|
|
22103
|
+
fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
|
|
22104
|
+
return ds_add(a, vec2f(-b.x, -b.y));
|
|
22105
|
+
}
|
|
22106
|
+
|
|
22107
|
+
fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
|
|
22108
|
+
let p = a.x * b.x;
|
|
22109
|
+
let sa = ds_split(a.x);
|
|
22110
|
+
let sb = ds_split(b.x);
|
|
22111
|
+
var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
22112
|
+
err += a.x * b.y + a.y * b.x;
|
|
22113
|
+
let hi = p + err;
|
|
22114
|
+
let lo = err - (hi - p);
|
|
22115
|
+
return vec2f(hi, lo);
|
|
22116
|
+
}
|
|
22117
|
+
|
|
22118
|
+
fn ds_sqr(a: vec2f) -> vec2f {
|
|
22119
|
+
let p = a.x * a.x;
|
|
22120
|
+
let sa = ds_split(a.x);
|
|
22121
|
+
var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
22122
|
+
err += 2.0 * a.x * a.y;
|
|
22123
|
+
let hi = p + err;
|
|
22124
|
+
let lo = err - (hi - p);
|
|
22125
|
+
return vec2f(hi, lo);
|
|
22126
|
+
}
|
|
22127
|
+
|
|
22128
|
+
fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
|
|
22129
|
+
let d = a.x - b.x;
|
|
22130
|
+
if (d != 0.0) { return sign(d); }
|
|
22131
|
+
return sign(a.y - b.y);
|
|
22132
|
+
}
|
|
22133
|
+
`;
|
|
22134
|
+
var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
|
|
22135
|
+
float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
|
|
22136
|
+
// c = (re_hi, im_hi, re_lo, im_lo)
|
|
22137
|
+
vec2 cr = vec2(c.x, c.z); // real part as ds
|
|
22138
|
+
vec2 ci = vec2(c.y, c.w); // imag part as ds
|
|
22139
|
+
vec2 zr = vec2(0.0, 0.0);
|
|
22140
|
+
vec2 zi = vec2(0.0, 0.0);
|
|
22141
|
+
for (int i = 0; i < maxIter; i++) {
|
|
22142
|
+
vec2 zr2 = ds_sqr(zr);
|
|
22143
|
+
vec2 zi2 = ds_sqr(zi);
|
|
22144
|
+
// |z|^2 > 4.0 ?
|
|
22145
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
22146
|
+
if (mag2.x > 4.0)
|
|
22147
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22148
|
+
// z = z^2 + c
|
|
22149
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
|
|
22150
|
+
zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
|
|
22151
|
+
zi = new_zi;
|
|
22152
|
+
}
|
|
22153
|
+
return 1.0;
|
|
22154
|
+
}
|
|
22155
|
+
|
|
22156
|
+
float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
|
|
22157
|
+
vec2 zr = vec2(z_in.x, z_in.z);
|
|
22158
|
+
vec2 zi = vec2(z_in.y, z_in.w);
|
|
22159
|
+
vec2 cr = vec2(c.x, c.z);
|
|
22160
|
+
vec2 ci = vec2(c.y, c.w);
|
|
22161
|
+
for (int i = 0; i < maxIter; i++) {
|
|
22162
|
+
vec2 zr2 = ds_sqr(zr);
|
|
22163
|
+
vec2 zi2 = ds_sqr(zi);
|
|
22164
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
22165
|
+
if (mag2.x > 4.0)
|
|
22166
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22167
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
22168
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
22169
|
+
zi = new_zi;
|
|
22170
|
+
}
|
|
22171
|
+
return 1.0;
|
|
22172
|
+
}
|
|
22173
|
+
`;
|
|
22174
|
+
var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
|
|
22175
|
+
fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
|
|
22176
|
+
let cr = vec2f(c.x, c.z);
|
|
22177
|
+
let ci = vec2f(c.y, c.w);
|
|
22178
|
+
var zr = vec2f(0.0, 0.0);
|
|
22179
|
+
var zi = vec2f(0.0, 0.0);
|
|
22180
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
22181
|
+
let zr2 = ds_sqr(zr);
|
|
22182
|
+
let zi2 = ds_sqr(zi);
|
|
22183
|
+
let mag2 = ds_add(zr2, zi2);
|
|
22184
|
+
if (mag2.x > 4.0) {
|
|
22185
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22186
|
+
}
|
|
22187
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
22188
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
22189
|
+
zi = new_zi;
|
|
22190
|
+
}
|
|
22191
|
+
return 1.0;
|
|
22192
|
+
}
|
|
22193
|
+
|
|
22194
|
+
fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
|
|
22195
|
+
var zr = vec2f(z_in.x, z_in.z);
|
|
22196
|
+
var zi = vec2f(z_in.y, z_in.w);
|
|
22197
|
+
let cr = vec2f(c.x, c.z);
|
|
22198
|
+
let ci = vec2f(c.y, c.w);
|
|
22199
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
22200
|
+
let zr2 = ds_sqr(zr);
|
|
22201
|
+
let zi2 = ds_sqr(zi);
|
|
22202
|
+
let mag2 = ds_add(zr2, zi2);
|
|
22203
|
+
if (mag2.x > 4.0) {
|
|
22204
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22205
|
+
}
|
|
22206
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
22207
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
22208
|
+
zi = new_zi;
|
|
22209
|
+
}
|
|
22210
|
+
return 1.0;
|
|
22211
|
+
}
|
|
21954
22212
|
`;
|
|
21955
22213
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
21956
22214
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
@@ -21994,6 +22252,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
21994
22252
|
}
|
|
21995
22253
|
return 1.0;
|
|
21996
22254
|
}
|
|
22255
|
+
`;
|
|
22256
|
+
var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
|
|
22257
|
+
uniform sampler2D _refOrbit;
|
|
22258
|
+
uniform int _refOrbitLen;
|
|
22259
|
+
uniform int _refOrbitTexWidth;
|
|
22260
|
+
|
|
22261
|
+
vec2 _pt_fetch_orbit(int i) {
|
|
22262
|
+
int y = i / _refOrbitTexWidth;
|
|
22263
|
+
int x = i - y * _refOrbitTexWidth;
|
|
22264
|
+
return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
|
|
22265
|
+
}
|
|
22266
|
+
|
|
22267
|
+
float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
|
|
22268
|
+
float dr = 0.0;
|
|
22269
|
+
float di = 0.0;
|
|
22270
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
22271
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
22272
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
22273
|
+
// delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
|
|
22274
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
22275
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
22276
|
+
dr = new_dr;
|
|
22277
|
+
di = new_di;
|
|
22278
|
+
// Full z = Z_{n+1} + delta for escape check
|
|
22279
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
22280
|
+
float zr = Zn1.x + dr;
|
|
22281
|
+
float zi = Zn1.y + di;
|
|
22282
|
+
float mag2 = zr * zr + zi * zi;
|
|
22283
|
+
if (mag2 > 4.0)
|
|
22284
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22285
|
+
// Glitch detection: |delta|^2 > |Z|^2
|
|
22286
|
+
float dmag2 = dr * dr + di * di;
|
|
22287
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
22288
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
22289
|
+
// Rebase to absolute coordinates and continue with single-float
|
|
22290
|
+
float abs_zr = Zn1.x + dr;
|
|
22291
|
+
float abs_zi = Zn1.y + di;
|
|
22292
|
+
// Reconstruct absolute c from reference + delta
|
|
22293
|
+
// (Use ds_from for the concept, but single-float suffices for fallback)
|
|
22294
|
+
float cx = abs_zr - dr + delta_c.x;
|
|
22295
|
+
float cy = abs_zi - di + delta_c.y;
|
|
22296
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
22297
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
22298
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
22299
|
+
abs_zr = new_zr;
|
|
22300
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
22301
|
+
if (mag2 > 4.0)
|
|
22302
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22303
|
+
}
|
|
22304
|
+
return 1.0;
|
|
22305
|
+
}
|
|
22306
|
+
}
|
|
22307
|
+
return 1.0;
|
|
22308
|
+
}
|
|
22309
|
+
|
|
22310
|
+
float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
|
|
22311
|
+
float dr = z_delta.x;
|
|
22312
|
+
float di = z_delta.y;
|
|
22313
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
22314
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
22315
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
22316
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
22317
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
22318
|
+
dr = new_dr;
|
|
22319
|
+
di = new_di;
|
|
22320
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
22321
|
+
float zr = Zn1.x + dr;
|
|
22322
|
+
float zi = Zn1.y + di;
|
|
22323
|
+
float mag2 = zr * zr + zi * zi;
|
|
22324
|
+
if (mag2 > 4.0)
|
|
22325
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22326
|
+
float dmag2 = dr * dr + di * di;
|
|
22327
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
22328
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
22329
|
+
float abs_zr = Zn1.x + dr;
|
|
22330
|
+
float abs_zi = Zn1.y + di;
|
|
22331
|
+
float cx = delta_c.x;
|
|
22332
|
+
float cy = delta_c.y;
|
|
22333
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
22334
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
22335
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
22336
|
+
abs_zr = new_zr;
|
|
22337
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
22338
|
+
if (mag2 > 4.0)
|
|
22339
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
22340
|
+
}
|
|
22341
|
+
return 1.0;
|
|
22342
|
+
}
|
|
22343
|
+
}
|
|
22344
|
+
return 1.0;
|
|
22345
|
+
}
|
|
22346
|
+
`;
|
|
22347
|
+
var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
|
|
22348
|
+
@group(0) @binding(1) var _refOrbit: texture_2d<f32>;
|
|
22349
|
+
var<uniform> _refOrbitLen: i32;
|
|
22350
|
+
var<uniform> _refOrbitTexWidth: i32;
|
|
22351
|
+
|
|
22352
|
+
fn _pt_fetch_orbit(i: i32) -> vec2f {
|
|
22353
|
+
let y = i / _refOrbitTexWidth;
|
|
22354
|
+
let x = i - y * _refOrbitTexWidth;
|
|
22355
|
+
return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
|
|
22356
|
+
}
|
|
22357
|
+
|
|
22358
|
+
fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
|
|
22359
|
+
var dr: f32 = 0.0;
|
|
22360
|
+
var di: f32 = 0.0;
|
|
22361
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
22362
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
22363
|
+
let Zn = _pt_fetch_orbit(i);
|
|
22364
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
22365
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
22366
|
+
dr = new_dr;
|
|
22367
|
+
di = new_di;
|
|
22368
|
+
var Zn1 = vec2f(0.0);
|
|
22369
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
22370
|
+
let zr = Zn1.x + dr;
|
|
22371
|
+
let zi = Zn1.y + di;
|
|
22372
|
+
var mag2 = zr * zr + zi * zi;
|
|
22373
|
+
if (mag2 > 4.0) {
|
|
22374
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22375
|
+
}
|
|
22376
|
+
let dmag2 = dr * dr + di * di;
|
|
22377
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
22378
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
22379
|
+
var f_zr = Zn1.x + dr;
|
|
22380
|
+
var f_zi = Zn1.y + di;
|
|
22381
|
+
let cx = delta_c.x;
|
|
22382
|
+
let cy = delta_c.y;
|
|
22383
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
22384
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
22385
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
22386
|
+
f_zr = t_zr;
|
|
22387
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
22388
|
+
if (mag2 > 4.0) {
|
|
22389
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22390
|
+
}
|
|
22391
|
+
}
|
|
22392
|
+
return 1.0;
|
|
22393
|
+
}
|
|
22394
|
+
}
|
|
22395
|
+
return 1.0;
|
|
22396
|
+
}
|
|
22397
|
+
|
|
22398
|
+
fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
|
|
22399
|
+
var dr = z_delta.x;
|
|
22400
|
+
var di = z_delta.y;
|
|
22401
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
22402
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
22403
|
+
let Zn = _pt_fetch_orbit(i);
|
|
22404
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
22405
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
22406
|
+
dr = new_dr;
|
|
22407
|
+
di = new_di;
|
|
22408
|
+
var Zn1 = vec2f(0.0);
|
|
22409
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
22410
|
+
let zr = Zn1.x + dr;
|
|
22411
|
+
let zi = Zn1.y + di;
|
|
22412
|
+
var mag2 = zr * zr + zi * zi;
|
|
22413
|
+
if (mag2 > 4.0) {
|
|
22414
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22415
|
+
}
|
|
22416
|
+
let dmag2 = dr * dr + di * di;
|
|
22417
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
22418
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
22419
|
+
var f_zr = Zn1.x + dr;
|
|
22420
|
+
var f_zi = Zn1.y + di;
|
|
22421
|
+
let cx = delta_c.x;
|
|
22422
|
+
let cy = delta_c.y;
|
|
22423
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
22424
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
22425
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
22426
|
+
f_zr = t_zr;
|
|
22427
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
22428
|
+
if (mag2 > 4.0) {
|
|
22429
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
22430
|
+
}
|
|
22431
|
+
}
|
|
22432
|
+
return 1.0;
|
|
22433
|
+
}
|
|
22434
|
+
}
|
|
22435
|
+
return 1.0;
|
|
22436
|
+
}
|
|
21997
22437
|
`;
|
|
21998
22438
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
21999
22439
|
float _gpu_srgb_to_linear(float c) {
|
|
@@ -22433,6 +22873,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22433
22873
|
const constants = this.getConstants();
|
|
22434
22874
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
22435
22875
|
const target = this.createTarget({
|
|
22876
|
+
hints: options.hints,
|
|
22436
22877
|
functions: (id) => {
|
|
22437
22878
|
if (userFunctions && id in userFunctions) {
|
|
22438
22879
|
const fn = userFunctions[id];
|
|
@@ -22471,12 +22912,65 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22471
22912
|
if (code.includes("_gpu_besselJ"))
|
|
22472
22913
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
22473
22914
|
if (code.includes("_fractal_")) {
|
|
22474
|
-
|
|
22915
|
+
if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
|
|
22916
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
22917
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
|
|
22918
|
+
} else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
|
|
22919
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
22920
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
|
|
22921
|
+
} else {
|
|
22922
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
22923
|
+
}
|
|
22475
22924
|
}
|
|
22476
22925
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
22477
22926
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
22478
22927
|
}
|
|
22479
22928
|
if (preamble) result.preamble = preamble;
|
|
22929
|
+
if (code.includes("_fractal_") && options.hints?.viewport) {
|
|
22930
|
+
const strategy = selectFractalStrategy(target);
|
|
22931
|
+
const radius = options.hints.viewport.radius;
|
|
22932
|
+
switch (strategy) {
|
|
22933
|
+
case "single":
|
|
22934
|
+
result.staleWhen = { radiusBelow: 1e-6 };
|
|
22935
|
+
break;
|
|
22936
|
+
case "double":
|
|
22937
|
+
result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
|
|
22938
|
+
break;
|
|
22939
|
+
case "perturbation":
|
|
22940
|
+
result.staleWhen = {
|
|
22941
|
+
radiusAbove: 1e-5,
|
|
22942
|
+
radiusBelow: radius * 0.01,
|
|
22943
|
+
centerDistance: radius * 2
|
|
22944
|
+
};
|
|
22945
|
+
break;
|
|
22946
|
+
}
|
|
22947
|
+
}
|
|
22948
|
+
if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
|
|
22949
|
+
const viewport = options.hints.viewport;
|
|
22950
|
+
const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
|
|
22951
|
+
const maxIter = 1e3;
|
|
22952
|
+
const orbit = computeReferenceOrbit(
|
|
22953
|
+
viewport.center,
|
|
22954
|
+
maxIter,
|
|
22955
|
+
digits
|
|
22956
|
+
);
|
|
22957
|
+
const orbitLen = orbit.length / 2;
|
|
22958
|
+
const texWidth = Math.min(orbitLen, 4096);
|
|
22959
|
+
const texHeight = Math.ceil(orbitLen / texWidth);
|
|
22960
|
+
result.textures = {
|
|
22961
|
+
_refOrbit: {
|
|
22962
|
+
data: orbit,
|
|
22963
|
+
width: texWidth,
|
|
22964
|
+
height: texHeight,
|
|
22965
|
+
format: "rg32f"
|
|
22966
|
+
}
|
|
22967
|
+
};
|
|
22968
|
+
result.uniforms = {
|
|
22969
|
+
...result.uniforms,
|
|
22970
|
+
_refOrbitLen: orbitLen,
|
|
22971
|
+
_refOrbitTexWidth: texWidth
|
|
22972
|
+
};
|
|
22973
|
+
}
|
|
22480
22974
|
return result;
|
|
22481
22975
|
}
|
|
22482
22976
|
compileToSource(expr, _options = {}) {
|
|
@@ -24811,7 +25305,7 @@ ${code}`;
|
|
|
24811
25305
|
}
|
|
24812
25306
|
|
|
24813
25307
|
// src/compile.ts
|
|
24814
|
-
var version = "0.55.
|
|
25308
|
+
var version = "0.55.4";
|
|
24815
25309
|
return __toCommonJS(compile_exports);
|
|
24816
25310
|
})();
|
|
24817
25311
|
/*! Bundled license information:
|