@cortex-js/compute-engine 0.55.4 → 0.55.6
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 +137 -545
- package/dist/compile.min.esm.js +60 -430
- package/dist/compile.min.umd.cjs +66 -436
- package/dist/compile.umd.cjs +137 -545
- package/dist/compute-engine.esm.js +227 -563
- package/dist/compute-engine.min.esm.js +68 -437
- package/dist/compute-engine.min.umd.cjs +68 -437
- package/dist/compute-engine.umd.cjs +227 -563
- package/dist/core.esm.js +225 -562
- package/dist/core.min.esm.js +67 -436
- package/dist/core.min.umd.cjs +67 -436
- package/dist/core.umd.cjs +225 -562
- package/dist/interval.esm.js +136 -60
- package/dist/interval.min.esm.js +7 -7
- package/dist/interval.min.umd.cjs +7 -7
- package/dist/interval.umd.cjs +136 -60
- package/dist/latex-syntax.esm.js +219 -74
- package/dist/latex-syntax.min.esm.js +7 -6
- package/dist/latex-syntax.min.umd.cjs +7 -6
- package/dist/latex-syntax.umd.cjs +219 -74
- 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/glsl-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/gpu-target.d.ts +1 -47
- 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 +1 -48
- 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 +2 -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 +4 -2
- 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 +2 -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 +1 -1
- package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +0 -13
package/dist/compile.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compile 0.55.
|
|
1
|
+
/** Compile 0.55.6 */
|
|
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;
|
|
@@ -6273,10 +6273,6 @@ var Compile = (() => {
|
|
|
6273
6273
|
// Lagrange notation
|
|
6274
6274
|
{
|
|
6275
6275
|
name: "Derivative",
|
|
6276
|
-
// @todo: Leibniz notation: {% latex " \\frac{d^n}{dx^n} f(x)" %}
|
|
6277
|
-
// @todo: Euler modified notation: This notation is used by Mathematica. The Euler notation uses `D` instead of
|
|
6278
|
-
// `\partial`: `\partial_{x} f`, `\partial_{x,y} f`
|
|
6279
|
-
// Newton notation (\dot{v}, \ddot{v}) is implemented below
|
|
6280
6276
|
serialize: (serializer, expr) => {
|
|
6281
6277
|
const degree = machineValue(operand(expr, 2)) ?? 1;
|
|
6282
6278
|
const base = serializer.serialize(operand(expr, 1));
|
|
@@ -7314,14 +7310,18 @@ var Compile = (() => {
|
|
|
7314
7310
|
return ["Complement", lhs];
|
|
7315
7311
|
}
|
|
7316
7312
|
// precedence: 240,
|
|
7317
|
-
// @todo: serialize for the multiple argument case
|
|
7318
7313
|
},
|
|
7319
7314
|
{
|
|
7320
7315
|
name: "Complement",
|
|
7321
7316
|
latexTrigger: ["^", "<{>", "\\complement", "<}>"],
|
|
7322
|
-
kind: "postfix"
|
|
7317
|
+
kind: "postfix",
|
|
7323
7318
|
// precedence: 240,
|
|
7324
|
-
|
|
7319
|
+
serialize: (serializer, expr) => {
|
|
7320
|
+
return joinLatex([
|
|
7321
|
+
serializer.serialize(operand(expr, 1)),
|
|
7322
|
+
"^\\complement"
|
|
7323
|
+
]);
|
|
7324
|
+
}
|
|
7325
7325
|
},
|
|
7326
7326
|
{
|
|
7327
7327
|
name: "Intersection",
|
|
@@ -7408,7 +7408,6 @@ var Compile = (() => {
|
|
|
7408
7408
|
// commands like \rbrack a, b \rbrack which are unambiguous.
|
|
7409
7409
|
{
|
|
7410
7410
|
name: "Multiple",
|
|
7411
|
-
// @todo: parse
|
|
7412
7411
|
serialize: serializeSet
|
|
7413
7412
|
},
|
|
7414
7413
|
{
|
|
@@ -7417,14 +7416,28 @@ var Compile = (() => {
|
|
|
7417
7416
|
kind: "infix",
|
|
7418
7417
|
precedence: 350
|
|
7419
7418
|
},
|
|
7419
|
+
// \mid as a separator/operator (used in set-builder notation: {x \mid x > 0})
|
|
7420
|
+
// Low precedence so it binds loosely — everything on each side is parsed first
|
|
7421
|
+
{
|
|
7422
|
+
name: "Divides",
|
|
7423
|
+
latexTrigger: ["\\mid"],
|
|
7424
|
+
kind: "infix",
|
|
7425
|
+
precedence: 160
|
|
7426
|
+
},
|
|
7420
7427
|
{
|
|
7421
7428
|
name: "Set",
|
|
7422
7429
|
kind: "matchfix",
|
|
7423
7430
|
openTrigger: "{",
|
|
7424
7431
|
closeTrigger: "}",
|
|
7425
|
-
// @todo: the set syntax can also include conditions...
|
|
7426
7432
|
parse: (_parser, body) => {
|
|
7427
7433
|
if (isEmptySequence(body)) return "EmptySet";
|
|
7434
|
+
const h = operator(body);
|
|
7435
|
+
if (h === "Divides" || h === "Colon") {
|
|
7436
|
+
const expr = operand(body, 1);
|
|
7437
|
+
const condition = operand(body, 2);
|
|
7438
|
+
if (expr !== null && condition !== null)
|
|
7439
|
+
return ["Set", expr, ["Condition", condition]];
|
|
7440
|
+
}
|
|
7428
7441
|
if (operator(body) == "Delimiter" && stringValue(operand(body, 2)) === ",") {
|
|
7429
7442
|
body = operand(body, 1);
|
|
7430
7443
|
}
|
|
@@ -7432,6 +7445,17 @@ var Compile = (() => {
|
|
|
7432
7445
|
return ["Set", ...operands(body)];
|
|
7433
7446
|
},
|
|
7434
7447
|
serialize: (serializer, expr) => {
|
|
7448
|
+
if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
|
|
7449
|
+
const condition = operand(expr, 2);
|
|
7450
|
+
return joinLatex([
|
|
7451
|
+
"\\lbrace",
|
|
7452
|
+
serializer.serialize(operand(expr, 1)),
|
|
7453
|
+
"\\mid",
|
|
7454
|
+
// Serialize the inner expression of the Condition wrapper
|
|
7455
|
+
serializer.serialize(operand(condition, 1)),
|
|
7456
|
+
"\\rbrace"
|
|
7457
|
+
]);
|
|
7458
|
+
}
|
|
7435
7459
|
return joinLatex([
|
|
7436
7460
|
"\\lbrace",
|
|
7437
7461
|
operands(expr).map((x) => serializer.serialize(x)).join(", "),
|
|
@@ -7598,23 +7622,6 @@ var Compile = (() => {
|
|
|
7598
7622
|
if (expr === null) return "";
|
|
7599
7623
|
const h = operator(expr);
|
|
7600
7624
|
if (!h) return "";
|
|
7601
|
-
if (h === "Set") {
|
|
7602
|
-
if (nops(expr) === 0) return "\\emptyset";
|
|
7603
|
-
if (nops(expr) === 2 && operator(operand(expr, 2)) === "Condition") {
|
|
7604
|
-
return joinLatex([
|
|
7605
|
-
"\\left\\lbrace",
|
|
7606
|
-
serializer.serialize(operand(expr, 1)),
|
|
7607
|
-
"\\middle\\mid",
|
|
7608
|
-
serializer.serialize(operand(expr, 2)),
|
|
7609
|
-
"\\right\\rbrace"
|
|
7610
|
-
]);
|
|
7611
|
-
}
|
|
7612
|
-
return joinLatex([
|
|
7613
|
-
"\\left\\lbrace",
|
|
7614
|
-
...operands(expr).map((x) => serializer.serialize(x) + " ,"),
|
|
7615
|
-
"\\right\\rbrace"
|
|
7616
|
-
]);
|
|
7617
|
-
}
|
|
7618
7625
|
if (h === "Multiple") {
|
|
7619
7626
|
}
|
|
7620
7627
|
if (h === "Range") {
|
|
@@ -8732,11 +8739,13 @@ var Compile = (() => {
|
|
|
8732
8739
|
if (!parser.match("_")) return null;
|
|
8733
8740
|
const base = parser.parseGroup();
|
|
8734
8741
|
if (operator(base) !== "To") return null;
|
|
8735
|
-
const expr = parser.
|
|
8742
|
+
const expr = parser.parseExpression({
|
|
8743
|
+
minPrec: MULTIPLICATION_PRECEDENCE
|
|
8744
|
+
});
|
|
8736
8745
|
if (!expr) return null;
|
|
8737
8746
|
return [
|
|
8738
8747
|
"Limit",
|
|
8739
|
-
["Function", expr
|
|
8748
|
+
["Function", expr, operand(base, 1)],
|
|
8740
8749
|
operand(base, 2)
|
|
8741
8750
|
];
|
|
8742
8751
|
},
|
|
@@ -10940,12 +10949,52 @@ var Compile = (() => {
|
|
|
10940
10949
|
];
|
|
10941
10950
|
|
|
10942
10951
|
// src/compute-engine/latex-syntax/dictionary/definitions-other.ts
|
|
10952
|
+
var TEX_UNITS = [
|
|
10953
|
+
"pt",
|
|
10954
|
+
"em",
|
|
10955
|
+
"mu",
|
|
10956
|
+
"ex",
|
|
10957
|
+
"mm",
|
|
10958
|
+
"cm",
|
|
10959
|
+
"in",
|
|
10960
|
+
"bp",
|
|
10961
|
+
"sp",
|
|
10962
|
+
"dd",
|
|
10963
|
+
"cc",
|
|
10964
|
+
"pc",
|
|
10965
|
+
"nc",
|
|
10966
|
+
"nd"
|
|
10967
|
+
];
|
|
10968
|
+
function skipTexDimension(parser) {
|
|
10969
|
+
parser.skipSpace();
|
|
10970
|
+
if (parser.peek === "-" || parser.peek === "+") parser.nextToken();
|
|
10971
|
+
while (/^[\d.]$/.test(parser.peek)) parser.nextToken();
|
|
10972
|
+
for (const unit of TEX_UNITS) {
|
|
10973
|
+
if (parser.matchAll([...unit])) return;
|
|
10974
|
+
}
|
|
10975
|
+
}
|
|
10943
10976
|
function parseSingleArg(cmd) {
|
|
10944
10977
|
return (parser) => {
|
|
10945
10978
|
const arg = parser.parseGroup();
|
|
10946
10979
|
return arg === null ? [cmd] : [cmd, arg];
|
|
10947
10980
|
};
|
|
10948
10981
|
}
|
|
10982
|
+
function parseMathStyleSwitch(mathStyle) {
|
|
10983
|
+
return (parser) => {
|
|
10984
|
+
const body = parser.parseExpression();
|
|
10985
|
+
if (body !== null && !isEmptySequence(body))
|
|
10986
|
+
return ["Annotated", body, { dict: { mathStyle } }];
|
|
10987
|
+
return "Nothing";
|
|
10988
|
+
};
|
|
10989
|
+
}
|
|
10990
|
+
function parseSizeSwitch(size) {
|
|
10991
|
+
return (parser) => {
|
|
10992
|
+
const body = parser.parseExpression();
|
|
10993
|
+
if (body !== null && !isEmptySequence(body))
|
|
10994
|
+
return ["Annotated", body, { dict: { size } }];
|
|
10995
|
+
return "Nothing";
|
|
10996
|
+
};
|
|
10997
|
+
}
|
|
10949
10998
|
var DEFINITIONS_OTHERS = [
|
|
10950
10999
|
{
|
|
10951
11000
|
name: "Overscript",
|
|
@@ -11185,80 +11234,71 @@ var Compile = (() => {
|
|
|
11185
11234
|
},
|
|
11186
11235
|
{
|
|
11187
11236
|
latexTrigger: ["\\displaystyle"],
|
|
11188
|
-
parse: (
|
|
11189
|
-
// @todo: parse as ['Annotated'...]
|
|
11237
|
+
parse: parseMathStyleSwitch("normal")
|
|
11190
11238
|
},
|
|
11191
11239
|
{
|
|
11192
11240
|
latexTrigger: ["\\textstyle"],
|
|
11193
|
-
parse: (
|
|
11194
|
-
// @todo: parse as ['Annotated'...]
|
|
11241
|
+
parse: parseMathStyleSwitch("compact")
|
|
11195
11242
|
},
|
|
11196
11243
|
{
|
|
11197
11244
|
latexTrigger: ["\\scriptstyle"],
|
|
11198
|
-
parse: (
|
|
11199
|
-
// @todo: parse as ['Annotated'...]
|
|
11245
|
+
parse: parseMathStyleSwitch("script")
|
|
11200
11246
|
},
|
|
11201
11247
|
{
|
|
11202
11248
|
latexTrigger: ["\\scriptscriptstyle"],
|
|
11203
|
-
parse: (
|
|
11204
|
-
// @todo: parse as ['Annotated'...]
|
|
11249
|
+
parse: parseMathStyleSwitch("scriptscript")
|
|
11205
11250
|
},
|
|
11206
11251
|
{
|
|
11207
11252
|
latexTrigger: ["\\color"],
|
|
11208
11253
|
parse: (parser) => {
|
|
11209
|
-
parser.
|
|
11254
|
+
const color = parser.parseStringGroup();
|
|
11255
|
+
if (color !== null) {
|
|
11256
|
+
const body = parser.parseExpression();
|
|
11257
|
+
if (body !== null && !isEmptySequence(body))
|
|
11258
|
+
return ["Annotated", body, { dict: { color } }];
|
|
11259
|
+
}
|
|
11210
11260
|
return "Nothing";
|
|
11211
11261
|
}
|
|
11212
11262
|
},
|
|
11213
11263
|
{
|
|
11214
11264
|
latexTrigger: ["\\tiny"],
|
|
11215
|
-
parse: ()
|
|
11216
|
-
// @todo: parse as ['Annotated'...]
|
|
11265
|
+
parse: parseSizeSwitch(1)
|
|
11217
11266
|
},
|
|
11218
11267
|
{
|
|
11219
11268
|
latexTrigger: ["\\scriptsize"],
|
|
11220
|
-
parse: ()
|
|
11221
|
-
// @todo: parse as ['Annotated'...]
|
|
11269
|
+
parse: parseSizeSwitch(2)
|
|
11222
11270
|
},
|
|
11223
11271
|
{
|
|
11224
11272
|
latexTrigger: ["\\footnotesize"],
|
|
11225
|
-
parse: ()
|
|
11226
|
-
// @todo: parse as ['Annotated'...]
|
|
11273
|
+
parse: parseSizeSwitch(3)
|
|
11227
11274
|
},
|
|
11228
11275
|
{
|
|
11229
11276
|
latexTrigger: ["\\small"],
|
|
11230
|
-
parse: ()
|
|
11231
|
-
// @todo: parse as ['Annotated'...]
|
|
11277
|
+
parse: parseSizeSwitch(4)
|
|
11232
11278
|
},
|
|
11233
11279
|
{
|
|
11234
11280
|
latexTrigger: ["\\normalsize"],
|
|
11235
|
-
parse: ()
|
|
11236
|
-
// @todo: parse as ['Annotated'...]
|
|
11281
|
+
parse: parseSizeSwitch(5)
|
|
11237
11282
|
},
|
|
11238
11283
|
{
|
|
11239
11284
|
latexTrigger: ["\\large"],
|
|
11240
|
-
parse: ()
|
|
11241
|
-
// @todo: parse as ['Annotated'...]
|
|
11285
|
+
parse: parseSizeSwitch(6)
|
|
11242
11286
|
},
|
|
11243
11287
|
{
|
|
11244
11288
|
latexTrigger: ["\\Large"],
|
|
11245
|
-
parse: ()
|
|
11246
|
-
// @todo: parse as ['Annotated'...]
|
|
11289
|
+
parse: parseSizeSwitch(7)
|
|
11247
11290
|
},
|
|
11248
11291
|
{
|
|
11249
11292
|
latexTrigger: ["\\LARGE"],
|
|
11250
|
-
parse: ()
|
|
11251
|
-
// @todo: parse as ['Annotated'...]
|
|
11293
|
+
parse: parseSizeSwitch(8)
|
|
11252
11294
|
},
|
|
11253
11295
|
{
|
|
11254
11296
|
latexTrigger: ["\\huge"],
|
|
11255
|
-
parse: ()
|
|
11256
|
-
// @todo: parse as ['Annotated'...]
|
|
11297
|
+
parse: parseSizeSwitch(9)
|
|
11257
11298
|
},
|
|
11258
11299
|
{
|
|
11259
11300
|
latexTrigger: ["\\Huge"],
|
|
11260
|
-
parse: ()
|
|
11261
|
-
// @todo: parse as ['Annotated'...]
|
|
11301
|
+
parse: parseSizeSwitch(10)
|
|
11262
11302
|
},
|
|
11263
11303
|
{
|
|
11264
11304
|
name: "Annotated",
|
|
@@ -11270,6 +11310,10 @@ var Compile = (() => {
|
|
|
11270
11310
|
result = joinLatex(["{\\displaystyle", result, "}"]);
|
|
11271
11311
|
else if (dict.dict.mathStyle === "compact")
|
|
11272
11312
|
result = joinLatex(["{\\textstyle", result, "}"]);
|
|
11313
|
+
else if (dict.dict.mathStyle === "script")
|
|
11314
|
+
result = joinLatex(["{\\scriptstyle", result, "}"]);
|
|
11315
|
+
else if (dict.dict.mathStyle === "scriptscript")
|
|
11316
|
+
result = joinLatex(["{\\scriptscriptstyle", result, "}"]);
|
|
11273
11317
|
const v = dict.dict.size;
|
|
11274
11318
|
if (v !== null && v >= 1 && v <= 10) {
|
|
11275
11319
|
result = joinLatex([
|
|
@@ -11357,6 +11401,28 @@ var Compile = (() => {
|
|
|
11357
11401
|
latexTrigger: ["\\enspace"],
|
|
11358
11402
|
parse: () => ["HorizontalSpacing", 9]
|
|
11359
11403
|
},
|
|
11404
|
+
{
|
|
11405
|
+
latexTrigger: ["\\hspace"],
|
|
11406
|
+
parse: (parser) => {
|
|
11407
|
+
if (parser.peek === "*") parser.nextToken();
|
|
11408
|
+
parser.parseStringGroup();
|
|
11409
|
+
return ["HorizontalSpacing", 0];
|
|
11410
|
+
}
|
|
11411
|
+
},
|
|
11412
|
+
{
|
|
11413
|
+
latexTrigger: ["\\hskip"],
|
|
11414
|
+
parse: (parser) => {
|
|
11415
|
+
skipTexDimension(parser);
|
|
11416
|
+
return ["HorizontalSpacing", 0];
|
|
11417
|
+
}
|
|
11418
|
+
},
|
|
11419
|
+
{
|
|
11420
|
+
latexTrigger: ["\\kern"],
|
|
11421
|
+
parse: (parser) => {
|
|
11422
|
+
skipTexDimension(parser);
|
|
11423
|
+
return ["HorizontalSpacing", 0];
|
|
11424
|
+
}
|
|
11425
|
+
},
|
|
11360
11426
|
{
|
|
11361
11427
|
latexTrigger: ["\\phantom"],
|
|
11362
11428
|
parse: (parser) => {
|
|
@@ -11407,7 +11473,17 @@ var Compile = (() => {
|
|
|
11407
11473
|
// `["HorizontalSpacing", expr, 'op'|'bin'|rel]` -> indicate a spacing around and expression, i.e. `\mathbin{x}`, etc...
|
|
11408
11474
|
serialize: (serializer, expr) => {
|
|
11409
11475
|
if (operand(expr, 2) !== null) {
|
|
11410
|
-
|
|
11476
|
+
const cls = stringValue(operand(expr, 2));
|
|
11477
|
+
const inner = serializer.serialize(operand(expr, 1));
|
|
11478
|
+
if (cls === "bin") return `\\mathbin{${inner}}`;
|
|
11479
|
+
if (cls === "op") return `\\mathop{${inner}}`;
|
|
11480
|
+
if (cls === "rel") return `\\mathrel{${inner}}`;
|
|
11481
|
+
if (cls === "ord") return `\\mathord{${inner}}`;
|
|
11482
|
+
if (cls === "open") return `\\mathopen{${inner}}`;
|
|
11483
|
+
if (cls === "close") return `\\mathclose{${inner}}`;
|
|
11484
|
+
if (cls === "punct") return `\\mathpunct{${inner}}`;
|
|
11485
|
+
if (cls === "inner") return `\\mathinner{${inner}}`;
|
|
11486
|
+
return inner;
|
|
11411
11487
|
}
|
|
11412
11488
|
const v = machineValue(operand(expr, 1));
|
|
11413
11489
|
if (v === null) return "";
|
|
@@ -20781,33 +20857,6 @@ ${lines.join("\n")}`;
|
|
|
20781
20857
|
return b;
|
|
20782
20858
|
}
|
|
20783
20859
|
|
|
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
|
-
|
|
20811
20860
|
// src/compute-engine/compilation/gpu-target.ts
|
|
20812
20861
|
var GPU_OPERATORS = {
|
|
20813
20862
|
Add: ["+", 11],
|
|
@@ -20891,13 +20940,6 @@ ${lines.join("\n")}`;
|
|
|
20891
20940
|
];
|
|
20892
20941
|
return lines.join("\n");
|
|
20893
20942
|
}
|
|
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
|
-
}
|
|
20901
20943
|
var GPU_FUNCTIONS = {
|
|
20902
20944
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
20903
20945
|
Add: (args, compile2, target) => {
|
|
@@ -21393,32 +21435,12 @@ ${lines.join("\n")}`;
|
|
|
21393
21435
|
if (c === null || maxIter === null)
|
|
21394
21436
|
throw new Error("Mandelbrot: missing arguments");
|
|
21395
21437
|
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
|
-
}
|
|
21405
21438
|
return `_fractal_mandelbrot(${compile2(c)}, ${iterCode})`;
|
|
21406
21439
|
},
|
|
21407
21440
|
Julia: ([z, c, maxIter], compile2, target) => {
|
|
21408
21441
|
if (z === null || c === null || maxIter === null)
|
|
21409
21442
|
throw new Error("Julia: missing arguments");
|
|
21410
21443
|
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
|
-
}
|
|
21422
21444
|
return `_fractal_julia(${compile2(z)}, ${compile2(c)}, ${iterCode})`;
|
|
21423
21445
|
},
|
|
21424
21446
|
// Vector/Matrix operations
|
|
@@ -22015,200 +22037,6 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
22015
22037
|
for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
|
|
22016
22038
|
return sgn * vals[n] / norm;
|
|
22017
22039
|
}
|
|
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
|
-
}
|
|
22212
22040
|
`;
|
|
22213
22041
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
22214
22042
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
@@ -22252,188 +22080,6 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
22252
22080
|
}
|
|
22253
22081
|
return 1.0;
|
|
22254
22082
|
}
|
|
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
|
-
}
|
|
22437
22083
|
`;
|
|
22438
22084
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
22439
22085
|
float _gpu_srgb_to_linear(float c) {
|
|
@@ -22873,7 +22519,6 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22873
22519
|
const constants = this.getConstants();
|
|
22874
22520
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
22875
22521
|
const target = this.createTarget({
|
|
22876
|
-
hints: options.hints,
|
|
22877
22522
|
functions: (id) => {
|
|
22878
22523
|
if (userFunctions && id in userFunctions) {
|
|
22879
22524
|
const fn = userFunctions[id];
|
|
@@ -22912,65 +22557,12 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22912
22557
|
if (code.includes("_gpu_besselJ"))
|
|
22913
22558
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
22914
22559
|
if (code.includes("_fractal_")) {
|
|
22915
|
-
|
|
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
|
-
}
|
|
22560
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
22924
22561
|
}
|
|
22925
22562
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
22926
22563
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
22927
22564
|
}
|
|
22928
22565
|
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
|
-
}
|
|
22974
22566
|
return result;
|
|
22975
22567
|
}
|
|
22976
22568
|
compileToSource(expr, _options = {}) {
|
|
@@ -25305,7 +24897,7 @@ ${code}`;
|
|
|
25305
24897
|
}
|
|
25306
24898
|
|
|
25307
24899
|
// src/compile.ts
|
|
25308
|
-
var version = "0.55.
|
|
24900
|
+
var version = "0.55.6";
|
|
25309
24901
|
return __toCommonJS(compile_exports);
|
|
25310
24902
|
})();
|
|
25311
24903
|
/*! Bundled license information:
|