@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compute Engine 0.55.
|
|
1
|
+
/** Compute Engine 0.55.4 */
|
|
2
2
|
|
|
3
3
|
// node_modules/complex-esm/dist/src/complex.js
|
|
4
4
|
var cosh = Math.cosh || function(x) {
|
|
@@ -17152,6 +17152,10 @@ function parseSymbolBody(parser) {
|
|
|
17152
17152
|
parser.nextToken();
|
|
17153
17153
|
continue;
|
|
17154
17154
|
}
|
|
17155
|
+
if (EMOJIS.test(id + token)) {
|
|
17156
|
+
id += parser.nextToken();
|
|
17157
|
+
continue;
|
|
17158
|
+
}
|
|
17155
17159
|
const next = parseSymbolToken(parser, { toplevel: false });
|
|
17156
17160
|
if (next === null) return null;
|
|
17157
17161
|
id += next;
|
|
@@ -17191,6 +17195,7 @@ function parseSymbolBody(parser) {
|
|
|
17191
17195
|
function matchPrefixedSymbol(parser) {
|
|
17192
17196
|
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17193
17197
|
if (prefix === null) return null;
|
|
17198
|
+
const start = parser.index;
|
|
17194
17199
|
parser.nextToken();
|
|
17195
17200
|
if (parser.match("<{>")) {
|
|
17196
17201
|
let body = "";
|
|
@@ -17211,17 +17216,48 @@ function matchPrefixedSymbol(parser) {
|
|
|
17211
17216
|
parser.nextToken();
|
|
17212
17217
|
}
|
|
17213
17218
|
body += parseSymbolBody(parser);
|
|
17214
|
-
if (body === null || !parser.match("<}>"))
|
|
17219
|
+
if (body === null || !parser.match("<}>")) {
|
|
17220
|
+
parser.index = start;
|
|
17221
|
+
return null;
|
|
17222
|
+
}
|
|
17215
17223
|
if (prefix === "_upright" && body.length > 1) return body;
|
|
17216
17224
|
return body + prefix;
|
|
17217
17225
|
}
|
|
17226
|
+
parser.index = start;
|
|
17218
17227
|
return null;
|
|
17219
17228
|
}
|
|
17220
17229
|
function parseInvalidSymbol(parser) {
|
|
17221
17230
|
const start = parser.index;
|
|
17222
17231
|
const id = matchPrefixedSymbol(parser);
|
|
17223
|
-
if (id
|
|
17224
|
-
|
|
17232
|
+
if (id !== null) {
|
|
17233
|
+
if (isValidSymbol(id)) return null;
|
|
17234
|
+
return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
|
|
17235
|
+
}
|
|
17236
|
+
parser.index = start;
|
|
17237
|
+
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17238
|
+
if (prefix === null) return null;
|
|
17239
|
+
parser.nextToken();
|
|
17240
|
+
if (!parser.match("<{>")) {
|
|
17241
|
+
parser.index = start;
|
|
17242
|
+
return null;
|
|
17243
|
+
}
|
|
17244
|
+
const bodyStart = parser.index;
|
|
17245
|
+
let level = 0;
|
|
17246
|
+
while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
|
|
17247
|
+
if (parser.peek === "<{>") level += 1;
|
|
17248
|
+
if (parser.peek === "<}>") level -= 1;
|
|
17249
|
+
parser.nextToken();
|
|
17250
|
+
}
|
|
17251
|
+
const bodyText = parser.latex(bodyStart, parser.index);
|
|
17252
|
+
if (isValidSymbol(bodyText)) {
|
|
17253
|
+
parser.index = start;
|
|
17254
|
+
return null;
|
|
17255
|
+
}
|
|
17256
|
+
parser.match("<}>");
|
|
17257
|
+
return parser.error(
|
|
17258
|
+
["invalid-symbol", { str: validateSymbol(bodyText) }],
|
|
17259
|
+
start
|
|
17260
|
+
);
|
|
17225
17261
|
}
|
|
17226
17262
|
function parseSymbol(parser) {
|
|
17227
17263
|
if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
|
|
@@ -18176,18 +18212,12 @@ var _Parser = class __Parser {
|
|
|
18176
18212
|
this.index = start;
|
|
18177
18213
|
return false;
|
|
18178
18214
|
}
|
|
18179
|
-
|
|
18180
|
-
const useLatexCommand = matchedToken.startsWith("\\");
|
|
18215
|
+
this.nextToken();
|
|
18181
18216
|
if (hasBracedDelimiter && !this.match("<}>")) {
|
|
18182
18217
|
this.index = start;
|
|
18183
18218
|
return false;
|
|
18184
18219
|
}
|
|
18185
|
-
const
|
|
18186
|
-
close[0]
|
|
18187
|
-
];
|
|
18188
|
-
const closeToken = closeTokens.find(
|
|
18189
|
-
(t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
|
|
18190
|
-
) ?? closeTokens[0];
|
|
18220
|
+
const closeToken = close[0];
|
|
18191
18221
|
const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
|
|
18192
18222
|
this.addBoundary(closeBoundary3);
|
|
18193
18223
|
return true;
|
|
@@ -39582,30 +39612,6 @@ var COOLWARM = [
|
|
|
39582
39612
|
"#ae2036",
|
|
39583
39613
|
"#b40426"
|
|
39584
39614
|
];
|
|
39585
|
-
var OCEAN_BALANCE = [
|
|
39586
|
-
"#00441b",
|
|
39587
|
-
"#006d5b",
|
|
39588
|
-
"#1a8c7d",
|
|
39589
|
-
"#2fa394",
|
|
39590
|
-
"#4fb3a3",
|
|
39591
|
-
"#6fc1b3",
|
|
39592
|
-
"#8dcfc3",
|
|
39593
|
-
"#a6dbd1",
|
|
39594
|
-
"#bfe6de",
|
|
39595
|
-
"#d7f0ea",
|
|
39596
|
-
"#f7f7f7",
|
|
39597
|
-
"#eeeeee",
|
|
39598
|
-
"#ddd8e6",
|
|
39599
|
-
"#c7bcda",
|
|
39600
|
-
"#b3a0d0",
|
|
39601
|
-
"#9f86c7",
|
|
39602
|
-
"#8d6dbd",
|
|
39603
|
-
"#7b56b1",
|
|
39604
|
-
"#6a42a3",
|
|
39605
|
-
"#5a3093",
|
|
39606
|
-
"#4a1f82",
|
|
39607
|
-
"#3b0f70"
|
|
39608
|
-
];
|
|
39609
39615
|
var reversePalette = (palette) => palette.slice().reverse();
|
|
39610
39616
|
var DIVERGING_PALETTES = {
|
|
39611
39617
|
roma: ROMA,
|
|
@@ -39617,9 +39623,7 @@ var DIVERGING_PALETTES = {
|
|
|
39617
39623
|
rdbu: RDBU,
|
|
39618
39624
|
"rdbu-reversed": reversePalette(RDBU),
|
|
39619
39625
|
coolwarm: COOLWARM,
|
|
39620
|
-
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39621
|
-
"ocean-balance": OCEAN_BALANCE,
|
|
39622
|
-
"ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
|
|
39626
|
+
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39623
39627
|
};
|
|
39624
39628
|
var TURBO = [
|
|
39625
39629
|
"#30123b",
|
|
@@ -41703,6 +41707,40 @@ var GREY = [
|
|
|
41703
41707
|
"#eeeeee",
|
|
41704
41708
|
"#ffffff"
|
|
41705
41709
|
];
|
|
41710
|
+
var CMOCEAN_PHASE = [
|
|
41711
|
+
"#a8780d",
|
|
41712
|
+
"#b3701b",
|
|
41713
|
+
"#be6828",
|
|
41714
|
+
"#c75f35",
|
|
41715
|
+
"#cf5643",
|
|
41716
|
+
"#d54b53",
|
|
41717
|
+
"#db4066",
|
|
41718
|
+
"#de357b",
|
|
41719
|
+
"#df2a93",
|
|
41720
|
+
"#dc25ad",
|
|
41721
|
+
"#d529c4",
|
|
41722
|
+
"#cc34d7",
|
|
41723
|
+
"#c041e5",
|
|
41724
|
+
"#b24fef",
|
|
41725
|
+
"#a25cf3",
|
|
41726
|
+
"#9168f4",
|
|
41727
|
+
"#7d73f0",
|
|
41728
|
+
"#687ce8",
|
|
41729
|
+
"#5285dc",
|
|
41730
|
+
"#3d8bcd",
|
|
41731
|
+
"#2c90bc",
|
|
41732
|
+
"#2093ac",
|
|
41733
|
+
"#19959c",
|
|
41734
|
+
"#12978c",
|
|
41735
|
+
"#0c987c",
|
|
41736
|
+
"#119a69",
|
|
41737
|
+
"#249a52",
|
|
41738
|
+
"#409839",
|
|
41739
|
+
"#5e9420",
|
|
41740
|
+
"#778d12",
|
|
41741
|
+
"#8b860d",
|
|
41742
|
+
"#9b7f0d"
|
|
41743
|
+
];
|
|
41706
41744
|
var reversePalette2 = (palette) => palette.slice().reverse();
|
|
41707
41745
|
var SEQUENTIAL_PALETTES = {
|
|
41708
41746
|
turbo: TURBO,
|
|
@@ -41726,7 +41764,9 @@ var SEQUENTIAL_PALETTES = {
|
|
|
41726
41764
|
"rocket-reversed": reversePalette2(ROCKET),
|
|
41727
41765
|
mako: MAKO,
|
|
41728
41766
|
// blue to teal
|
|
41729
|
-
"mako-reversed": reversePalette2(MAKO)
|
|
41767
|
+
"mako-reversed": reversePalette2(MAKO),
|
|
41768
|
+
"cmocean-phase": CMOCEAN_PHASE,
|
|
41769
|
+
"cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
|
|
41730
41770
|
};
|
|
41731
41771
|
|
|
41732
41772
|
// src/compute-engine/library/colors.ts
|
|
@@ -61223,6 +61263,33 @@ function fibonacci(n) {
|
|
|
61223
61263
|
return b;
|
|
61224
61264
|
}
|
|
61225
61265
|
|
|
61266
|
+
// src/compute-engine/compilation/fractal-orbit.ts
|
|
61267
|
+
function computeReferenceOrbit(center, maxIter, precision) {
|
|
61268
|
+
const prevPrecision = BigDecimal.precision;
|
|
61269
|
+
BigDecimal.precision = precision;
|
|
61270
|
+
try {
|
|
61271
|
+
const cr = new BigDecimal(center[0]);
|
|
61272
|
+
const ci = new BigDecimal(center[1]);
|
|
61273
|
+
let zr = BigDecimal.ZERO;
|
|
61274
|
+
let zi = BigDecimal.ZERO;
|
|
61275
|
+
const ESCAPE = new BigDecimal(256);
|
|
61276
|
+
const points = [];
|
|
61277
|
+
for (let i = 0; i < maxIter; i++) {
|
|
61278
|
+
points.push(zr.toNumber(), zi.toNumber());
|
|
61279
|
+
const zr2 = zr.mul(zr).toPrecision(precision);
|
|
61280
|
+
const zi2 = zi.mul(zi).toPrecision(precision);
|
|
61281
|
+
const mag2 = zr2.add(zi2);
|
|
61282
|
+
if (mag2.cmp(ESCAPE) > 0) break;
|
|
61283
|
+
const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
|
|
61284
|
+
zr = zr2.sub(zi2).add(cr);
|
|
61285
|
+
zi = new_zi;
|
|
61286
|
+
}
|
|
61287
|
+
return new Float32Array(points);
|
|
61288
|
+
} finally {
|
|
61289
|
+
BigDecimal.precision = prevPrecision;
|
|
61290
|
+
}
|
|
61291
|
+
}
|
|
61292
|
+
|
|
61226
61293
|
// src/compute-engine/compilation/gpu-target.ts
|
|
61227
61294
|
var GPU_OPERATORS = {
|
|
61228
61295
|
Add: ["+", 11],
|
|
@@ -61306,6 +61373,13 @@ function compileGPUSumProduct(kind, args, _compile2, target) {
|
|
|
61306
61373
|
];
|
|
61307
61374
|
return lines.join("\n");
|
|
61308
61375
|
}
|
|
61376
|
+
function selectFractalStrategy(target) {
|
|
61377
|
+
const radius = target.hints?.viewport?.radius;
|
|
61378
|
+
if (radius === void 0) return "single";
|
|
61379
|
+
if (radius > 1e-6) return "single";
|
|
61380
|
+
if (radius > 1e-14) return "double";
|
|
61381
|
+
return "perturbation";
|
|
61382
|
+
}
|
|
61309
61383
|
var GPU_FUNCTIONS = {
|
|
61310
61384
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
61311
61385
|
Add: (args, compile3, target) => {
|
|
@@ -61801,12 +61875,32 @@ var GPU_FUNCTIONS = {
|
|
|
61801
61875
|
if (c === null || maxIter === null)
|
|
61802
61876
|
throw new Error("Mandelbrot: missing arguments");
|
|
61803
61877
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61878
|
+
const strategy = selectFractalStrategy(target);
|
|
61879
|
+
if (strategy === "double") {
|
|
61880
|
+
const cCode = compile3(c);
|
|
61881
|
+
return `_fractal_mandelbrot_dp(vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61882
|
+
}
|
|
61883
|
+
if (strategy === "perturbation") {
|
|
61884
|
+
const cCode = compile3(c);
|
|
61885
|
+
return `_fractal_mandelbrot_pt(${cCode}, ${iterCode})`;
|
|
61886
|
+
}
|
|
61804
61887
|
return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
|
|
61805
61888
|
},
|
|
61806
61889
|
Julia: ([z, c, maxIter], compile3, target) => {
|
|
61807
61890
|
if (z === null || c === null || maxIter === null)
|
|
61808
61891
|
throw new Error("Julia: missing arguments");
|
|
61809
61892
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61893
|
+
const strategy = selectFractalStrategy(target);
|
|
61894
|
+
if (strategy === "double") {
|
|
61895
|
+
const zCode = compile3(z);
|
|
61896
|
+
const cCode = compile3(c);
|
|
61897
|
+
return `_fractal_julia_dp(vec4(${zCode}, vec2(0.0)), vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61898
|
+
}
|
|
61899
|
+
if (strategy === "perturbation") {
|
|
61900
|
+
const zCode = compile3(z);
|
|
61901
|
+
const cCode = compile3(c);
|
|
61902
|
+
return `_fractal_julia_pt(${zCode}, ${cCode}, ${iterCode})`;
|
|
61903
|
+
}
|
|
61810
61904
|
return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
|
|
61811
61905
|
},
|
|
61812
61906
|
// Vector/Matrix operations
|
|
@@ -62404,6 +62498,200 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
62404
62498
|
return sgn * vals[n] / norm;
|
|
62405
62499
|
}
|
|
62406
62500
|
`;
|
|
62501
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
|
|
62502
|
+
// Split a float into high and low parts for exact multiplication
|
|
62503
|
+
vec2 ds_split(float a) {
|
|
62504
|
+
const float SPLIT = 4097.0; // 2^12 + 1
|
|
62505
|
+
float t = SPLIT * a;
|
|
62506
|
+
float hi = t - (t - a);
|
|
62507
|
+
float lo = a - hi;
|
|
62508
|
+
return vec2(hi, lo);
|
|
62509
|
+
}
|
|
62510
|
+
|
|
62511
|
+
// Create a double-single from a single float
|
|
62512
|
+
vec2 ds_from(float a) {
|
|
62513
|
+
return vec2(a, 0.0);
|
|
62514
|
+
}
|
|
62515
|
+
|
|
62516
|
+
// Error-free addition (Knuth TwoSum)
|
|
62517
|
+
vec2 ds_add(vec2 a, vec2 b) {
|
|
62518
|
+
float s = a.x + b.x;
|
|
62519
|
+
float v = s - a.x;
|
|
62520
|
+
float e = (a.x - (s - v)) + (b.x - v);
|
|
62521
|
+
float lo = (a.y + b.y) + e;
|
|
62522
|
+
float hi = s + lo;
|
|
62523
|
+
lo = lo - (hi - s);
|
|
62524
|
+
return vec2(hi, lo);
|
|
62525
|
+
}
|
|
62526
|
+
|
|
62527
|
+
// Double-single subtraction
|
|
62528
|
+
vec2 ds_sub(vec2 a, vec2 b) {
|
|
62529
|
+
return ds_add(a, vec2(-b.x, -b.y));
|
|
62530
|
+
}
|
|
62531
|
+
|
|
62532
|
+
// Error-free multiplication (Dekker TwoProduct)
|
|
62533
|
+
vec2 ds_mul(vec2 a, vec2 b) {
|
|
62534
|
+
float p = a.x * b.x;
|
|
62535
|
+
vec2 sa = ds_split(a.x);
|
|
62536
|
+
vec2 sb = ds_split(b.x);
|
|
62537
|
+
float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62538
|
+
err += a.x * b.y + a.y * b.x;
|
|
62539
|
+
float hi = p + err;
|
|
62540
|
+
float lo = err - (hi - p);
|
|
62541
|
+
return vec2(hi, lo);
|
|
62542
|
+
}
|
|
62543
|
+
|
|
62544
|
+
// Optimized self-multiply
|
|
62545
|
+
vec2 ds_sqr(vec2 a) {
|
|
62546
|
+
float p = a.x * a.x;
|
|
62547
|
+
vec2 sa = ds_split(a.x);
|
|
62548
|
+
float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62549
|
+
err += 2.0 * a.x * a.y;
|
|
62550
|
+
float hi = p + err;
|
|
62551
|
+
float lo = err - (hi - p);
|
|
62552
|
+
return vec2(hi, lo);
|
|
62553
|
+
}
|
|
62554
|
+
|
|
62555
|
+
// Compare magnitude: returns -1, 0, or 1
|
|
62556
|
+
float ds_cmp(vec2 a, vec2 b) {
|
|
62557
|
+
float d = a.x - b.x;
|
|
62558
|
+
if (d != 0.0) return sign(d);
|
|
62559
|
+
return sign(a.y - b.y);
|
|
62560
|
+
}
|
|
62561
|
+
`;
|
|
62562
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
|
|
62563
|
+
fn ds_split(a: f32) -> vec2f {
|
|
62564
|
+
const SPLIT: f32 = 4097.0;
|
|
62565
|
+
let t = SPLIT * a;
|
|
62566
|
+
let hi = t - (t - a);
|
|
62567
|
+
let lo = a - hi;
|
|
62568
|
+
return vec2f(hi, lo);
|
|
62569
|
+
}
|
|
62570
|
+
|
|
62571
|
+
fn ds_from(a: f32) -> vec2f {
|
|
62572
|
+
return vec2f(a, 0.0);
|
|
62573
|
+
}
|
|
62574
|
+
|
|
62575
|
+
fn ds_add(a: vec2f, b: vec2f) -> vec2f {
|
|
62576
|
+
let s = a.x + b.x;
|
|
62577
|
+
let v = s - a.x;
|
|
62578
|
+
let e = (a.x - (s - v)) + (b.x - v);
|
|
62579
|
+
let lo_t = (a.y + b.y) + e;
|
|
62580
|
+
let hi = s + lo_t;
|
|
62581
|
+
let lo = lo_t - (hi - s);
|
|
62582
|
+
return vec2f(hi, lo);
|
|
62583
|
+
}
|
|
62584
|
+
|
|
62585
|
+
fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
|
|
62586
|
+
return ds_add(a, vec2f(-b.x, -b.y));
|
|
62587
|
+
}
|
|
62588
|
+
|
|
62589
|
+
fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
|
|
62590
|
+
let p = a.x * b.x;
|
|
62591
|
+
let sa = ds_split(a.x);
|
|
62592
|
+
let sb = ds_split(b.x);
|
|
62593
|
+
var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62594
|
+
err += a.x * b.y + a.y * b.x;
|
|
62595
|
+
let hi = p + err;
|
|
62596
|
+
let lo = err - (hi - p);
|
|
62597
|
+
return vec2f(hi, lo);
|
|
62598
|
+
}
|
|
62599
|
+
|
|
62600
|
+
fn ds_sqr(a: vec2f) -> vec2f {
|
|
62601
|
+
let p = a.x * a.x;
|
|
62602
|
+
let sa = ds_split(a.x);
|
|
62603
|
+
var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62604
|
+
err += 2.0 * a.x * a.y;
|
|
62605
|
+
let hi = p + err;
|
|
62606
|
+
let lo = err - (hi - p);
|
|
62607
|
+
return vec2f(hi, lo);
|
|
62608
|
+
}
|
|
62609
|
+
|
|
62610
|
+
fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
|
|
62611
|
+
let d = a.x - b.x;
|
|
62612
|
+
if (d != 0.0) { return sign(d); }
|
|
62613
|
+
return sign(a.y - b.y);
|
|
62614
|
+
}
|
|
62615
|
+
`;
|
|
62616
|
+
var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
|
|
62617
|
+
float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
|
|
62618
|
+
// c = (re_hi, im_hi, re_lo, im_lo)
|
|
62619
|
+
vec2 cr = vec2(c.x, c.z); // real part as ds
|
|
62620
|
+
vec2 ci = vec2(c.y, c.w); // imag part as ds
|
|
62621
|
+
vec2 zr = vec2(0.0, 0.0);
|
|
62622
|
+
vec2 zi = vec2(0.0, 0.0);
|
|
62623
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62624
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62625
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62626
|
+
// |z|^2 > 4.0 ?
|
|
62627
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62628
|
+
if (mag2.x > 4.0)
|
|
62629
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62630
|
+
// z = z^2 + c
|
|
62631
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
|
|
62632
|
+
zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
|
|
62633
|
+
zi = new_zi;
|
|
62634
|
+
}
|
|
62635
|
+
return 1.0;
|
|
62636
|
+
}
|
|
62637
|
+
|
|
62638
|
+
float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
|
|
62639
|
+
vec2 zr = vec2(z_in.x, z_in.z);
|
|
62640
|
+
vec2 zi = vec2(z_in.y, z_in.w);
|
|
62641
|
+
vec2 cr = vec2(c.x, c.z);
|
|
62642
|
+
vec2 ci = vec2(c.y, c.w);
|
|
62643
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62644
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62645
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62646
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62647
|
+
if (mag2.x > 4.0)
|
|
62648
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62649
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62650
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62651
|
+
zi = new_zi;
|
|
62652
|
+
}
|
|
62653
|
+
return 1.0;
|
|
62654
|
+
}
|
|
62655
|
+
`;
|
|
62656
|
+
var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
|
|
62657
|
+
fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
|
|
62658
|
+
let cr = vec2f(c.x, c.z);
|
|
62659
|
+
let ci = vec2f(c.y, c.w);
|
|
62660
|
+
var zr = vec2f(0.0, 0.0);
|
|
62661
|
+
var zi = vec2f(0.0, 0.0);
|
|
62662
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62663
|
+
let zr2 = ds_sqr(zr);
|
|
62664
|
+
let zi2 = ds_sqr(zi);
|
|
62665
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62666
|
+
if (mag2.x > 4.0) {
|
|
62667
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62668
|
+
}
|
|
62669
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62670
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62671
|
+
zi = new_zi;
|
|
62672
|
+
}
|
|
62673
|
+
return 1.0;
|
|
62674
|
+
}
|
|
62675
|
+
|
|
62676
|
+
fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
|
|
62677
|
+
var zr = vec2f(z_in.x, z_in.z);
|
|
62678
|
+
var zi = vec2f(z_in.y, z_in.w);
|
|
62679
|
+
let cr = vec2f(c.x, c.z);
|
|
62680
|
+
let ci = vec2f(c.y, c.w);
|
|
62681
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62682
|
+
let zr2 = ds_sqr(zr);
|
|
62683
|
+
let zi2 = ds_sqr(zi);
|
|
62684
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62685
|
+
if (mag2.x > 4.0) {
|
|
62686
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62687
|
+
}
|
|
62688
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62689
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62690
|
+
zi = new_zi;
|
|
62691
|
+
}
|
|
62692
|
+
return 1.0;
|
|
62693
|
+
}
|
|
62694
|
+
`;
|
|
62407
62695
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
62408
62696
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
62409
62697
|
vec2 z = vec2(0.0, 0.0);
|
|
@@ -62447,6 +62735,188 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
62447
62735
|
return 1.0;
|
|
62448
62736
|
}
|
|
62449
62737
|
`;
|
|
62738
|
+
var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
|
|
62739
|
+
uniform sampler2D _refOrbit;
|
|
62740
|
+
uniform int _refOrbitLen;
|
|
62741
|
+
uniform int _refOrbitTexWidth;
|
|
62742
|
+
|
|
62743
|
+
vec2 _pt_fetch_orbit(int i) {
|
|
62744
|
+
int y = i / _refOrbitTexWidth;
|
|
62745
|
+
int x = i - y * _refOrbitTexWidth;
|
|
62746
|
+
return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
|
|
62747
|
+
}
|
|
62748
|
+
|
|
62749
|
+
float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
|
|
62750
|
+
float dr = 0.0;
|
|
62751
|
+
float di = 0.0;
|
|
62752
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62753
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62754
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62755
|
+
// delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
|
|
62756
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62757
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62758
|
+
dr = new_dr;
|
|
62759
|
+
di = new_di;
|
|
62760
|
+
// Full z = Z_{n+1} + delta for escape check
|
|
62761
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62762
|
+
float zr = Zn1.x + dr;
|
|
62763
|
+
float zi = Zn1.y + di;
|
|
62764
|
+
float mag2 = zr * zr + zi * zi;
|
|
62765
|
+
if (mag2 > 4.0)
|
|
62766
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62767
|
+
// Glitch detection: |delta|^2 > |Z|^2
|
|
62768
|
+
float dmag2 = dr * dr + di * di;
|
|
62769
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62770
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62771
|
+
// Rebase to absolute coordinates and continue with single-float
|
|
62772
|
+
float abs_zr = Zn1.x + dr;
|
|
62773
|
+
float abs_zi = Zn1.y + di;
|
|
62774
|
+
// Reconstruct absolute c from reference + delta
|
|
62775
|
+
// (Use ds_from for the concept, but single-float suffices for fallback)
|
|
62776
|
+
float cx = abs_zr - dr + delta_c.x;
|
|
62777
|
+
float cy = abs_zi - di + delta_c.y;
|
|
62778
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62779
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62780
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62781
|
+
abs_zr = new_zr;
|
|
62782
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62783
|
+
if (mag2 > 4.0)
|
|
62784
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62785
|
+
}
|
|
62786
|
+
return 1.0;
|
|
62787
|
+
}
|
|
62788
|
+
}
|
|
62789
|
+
return 1.0;
|
|
62790
|
+
}
|
|
62791
|
+
|
|
62792
|
+
float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
|
|
62793
|
+
float dr = z_delta.x;
|
|
62794
|
+
float di = z_delta.y;
|
|
62795
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62796
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62797
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62798
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62799
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62800
|
+
dr = new_dr;
|
|
62801
|
+
di = new_di;
|
|
62802
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62803
|
+
float zr = Zn1.x + dr;
|
|
62804
|
+
float zi = Zn1.y + di;
|
|
62805
|
+
float mag2 = zr * zr + zi * zi;
|
|
62806
|
+
if (mag2 > 4.0)
|
|
62807
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62808
|
+
float dmag2 = dr * dr + di * di;
|
|
62809
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62810
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62811
|
+
float abs_zr = Zn1.x + dr;
|
|
62812
|
+
float abs_zi = Zn1.y + di;
|
|
62813
|
+
float cx = delta_c.x;
|
|
62814
|
+
float cy = delta_c.y;
|
|
62815
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62816
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62817
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62818
|
+
abs_zr = new_zr;
|
|
62819
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62820
|
+
if (mag2 > 4.0)
|
|
62821
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62822
|
+
}
|
|
62823
|
+
return 1.0;
|
|
62824
|
+
}
|
|
62825
|
+
}
|
|
62826
|
+
return 1.0;
|
|
62827
|
+
}
|
|
62828
|
+
`;
|
|
62829
|
+
var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
|
|
62830
|
+
@group(0) @binding(1) var _refOrbit: texture_2d<f32>;
|
|
62831
|
+
var<uniform> _refOrbitLen: i32;
|
|
62832
|
+
var<uniform> _refOrbitTexWidth: i32;
|
|
62833
|
+
|
|
62834
|
+
fn _pt_fetch_orbit(i: i32) -> vec2f {
|
|
62835
|
+
let y = i / _refOrbitTexWidth;
|
|
62836
|
+
let x = i - y * _refOrbitTexWidth;
|
|
62837
|
+
return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
|
|
62838
|
+
}
|
|
62839
|
+
|
|
62840
|
+
fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62841
|
+
var dr: f32 = 0.0;
|
|
62842
|
+
var di: f32 = 0.0;
|
|
62843
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62844
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62845
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62846
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62847
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62848
|
+
dr = new_dr;
|
|
62849
|
+
di = new_di;
|
|
62850
|
+
var Zn1 = vec2f(0.0);
|
|
62851
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62852
|
+
let zr = Zn1.x + dr;
|
|
62853
|
+
let zi = Zn1.y + di;
|
|
62854
|
+
var mag2 = zr * zr + zi * zi;
|
|
62855
|
+
if (mag2 > 4.0) {
|
|
62856
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62857
|
+
}
|
|
62858
|
+
let dmag2 = dr * dr + di * di;
|
|
62859
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62860
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62861
|
+
var f_zr = Zn1.x + dr;
|
|
62862
|
+
var f_zi = Zn1.y + di;
|
|
62863
|
+
let cx = delta_c.x;
|
|
62864
|
+
let cy = delta_c.y;
|
|
62865
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62866
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62867
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62868
|
+
f_zr = t_zr;
|
|
62869
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62870
|
+
if (mag2 > 4.0) {
|
|
62871
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62872
|
+
}
|
|
62873
|
+
}
|
|
62874
|
+
return 1.0;
|
|
62875
|
+
}
|
|
62876
|
+
}
|
|
62877
|
+
return 1.0;
|
|
62878
|
+
}
|
|
62879
|
+
|
|
62880
|
+
fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62881
|
+
var dr = z_delta.x;
|
|
62882
|
+
var di = z_delta.y;
|
|
62883
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62884
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62885
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62886
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62887
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62888
|
+
dr = new_dr;
|
|
62889
|
+
di = new_di;
|
|
62890
|
+
var Zn1 = vec2f(0.0);
|
|
62891
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62892
|
+
let zr = Zn1.x + dr;
|
|
62893
|
+
let zi = Zn1.y + di;
|
|
62894
|
+
var mag2 = zr * zr + zi * zi;
|
|
62895
|
+
if (mag2 > 4.0) {
|
|
62896
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62897
|
+
}
|
|
62898
|
+
let dmag2 = dr * dr + di * di;
|
|
62899
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62900
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62901
|
+
var f_zr = Zn1.x + dr;
|
|
62902
|
+
var f_zi = Zn1.y + di;
|
|
62903
|
+
let cx = delta_c.x;
|
|
62904
|
+
let cy = delta_c.y;
|
|
62905
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62906
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62907
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62908
|
+
f_zr = t_zr;
|
|
62909
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62910
|
+
if (mag2 > 4.0) {
|
|
62911
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62912
|
+
}
|
|
62913
|
+
}
|
|
62914
|
+
return 1.0;
|
|
62915
|
+
}
|
|
62916
|
+
}
|
|
62917
|
+
return 1.0;
|
|
62918
|
+
}
|
|
62919
|
+
`;
|
|
62450
62920
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
62451
62921
|
float _gpu_srgb_to_linear(float c) {
|
|
62452
62922
|
if (c <= 0.04045) return c / 12.92;
|
|
@@ -62885,6 +63355,7 @@ var GPUShaderTarget = class {
|
|
|
62885
63355
|
const constants = this.getConstants();
|
|
62886
63356
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
62887
63357
|
const target = this.createTarget({
|
|
63358
|
+
hints: options.hints,
|
|
62888
63359
|
functions: (id) => {
|
|
62889
63360
|
if (userFunctions && id in userFunctions) {
|
|
62890
63361
|
const fn = userFunctions[id];
|
|
@@ -62923,12 +63394,65 @@ var GPUShaderTarget = class {
|
|
|
62923
63394
|
if (code.includes("_gpu_besselJ"))
|
|
62924
63395
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
62925
63396
|
if (code.includes("_fractal_")) {
|
|
62926
|
-
|
|
63397
|
+
if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
|
|
63398
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63399
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
|
|
63400
|
+
} else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
|
|
63401
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63402
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
|
|
63403
|
+
} else {
|
|
63404
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
63405
|
+
}
|
|
62927
63406
|
}
|
|
62928
63407
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
62929
63408
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
62930
63409
|
}
|
|
62931
63410
|
if (preamble) result.preamble = preamble;
|
|
63411
|
+
if (code.includes("_fractal_") && options.hints?.viewport) {
|
|
63412
|
+
const strategy = selectFractalStrategy(target);
|
|
63413
|
+
const radius = options.hints.viewport.radius;
|
|
63414
|
+
switch (strategy) {
|
|
63415
|
+
case "single":
|
|
63416
|
+
result.staleWhen = { radiusBelow: 1e-6 };
|
|
63417
|
+
break;
|
|
63418
|
+
case "double":
|
|
63419
|
+
result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
|
|
63420
|
+
break;
|
|
63421
|
+
case "perturbation":
|
|
63422
|
+
result.staleWhen = {
|
|
63423
|
+
radiusAbove: 1e-5,
|
|
63424
|
+
radiusBelow: radius * 0.01,
|
|
63425
|
+
centerDistance: radius * 2
|
|
63426
|
+
};
|
|
63427
|
+
break;
|
|
63428
|
+
}
|
|
63429
|
+
}
|
|
63430
|
+
if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
|
|
63431
|
+
const viewport = options.hints.viewport;
|
|
63432
|
+
const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
|
|
63433
|
+
const maxIter = 1e3;
|
|
63434
|
+
const orbit = computeReferenceOrbit(
|
|
63435
|
+
viewport.center,
|
|
63436
|
+
maxIter,
|
|
63437
|
+
digits
|
|
63438
|
+
);
|
|
63439
|
+
const orbitLen = orbit.length / 2;
|
|
63440
|
+
const texWidth = Math.min(orbitLen, 4096);
|
|
63441
|
+
const texHeight = Math.ceil(orbitLen / texWidth);
|
|
63442
|
+
result.textures = {
|
|
63443
|
+
_refOrbit: {
|
|
63444
|
+
data: orbit,
|
|
63445
|
+
width: texWidth,
|
|
63446
|
+
height: texHeight,
|
|
63447
|
+
format: "rg32f"
|
|
63448
|
+
}
|
|
63449
|
+
};
|
|
63450
|
+
result.uniforms = {
|
|
63451
|
+
...result.uniforms,
|
|
63452
|
+
_refOrbitLen: orbitLen,
|
|
63453
|
+
_refOrbitTexWidth: texWidth
|
|
63454
|
+
};
|
|
63455
|
+
}
|
|
62932
63456
|
return result;
|
|
62933
63457
|
}
|
|
62934
63458
|
compileToSource(expr2, _options = {}) {
|
|
@@ -68333,14 +68857,14 @@ var ComputeEngine = class _ComputeEngine {
|
|
|
68333
68857
|
_setDefaultEngineFactory(() => new ComputeEngine());
|
|
68334
68858
|
|
|
68335
68859
|
// src/compute-engine.ts
|
|
68336
|
-
var version = "0.55.
|
|
68860
|
+
var version = "0.55.4";
|
|
68337
68861
|
ComputeEngine._latexSyntaxFactory = () => new LatexSyntax();
|
|
68338
68862
|
_setDefaultEngineFactory(
|
|
68339
68863
|
() => new ComputeEngine({ latexSyntax: new LatexSyntax() })
|
|
68340
68864
|
);
|
|
68341
68865
|
globalThis[/* @__PURE__ */ Symbol.for("io.cortexjs.compute-engine")] = {
|
|
68342
68866
|
ComputeEngine: ComputeEngine.prototype.constructor,
|
|
68343
|
-
version: "0.55.
|
|
68867
|
+
version: "0.55.4"
|
|
68344
68868
|
};
|
|
68345
68869
|
export {
|
|
68346
68870
|
DEFINITIONS_ALGEBRA as ALGEBRA_DICTIONARY,
|