universal-physics-tensor 8.0.0 → 9.0.0
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/README.md +8 -6
- package/data/atlas/atlas.json +21 -21
- package/data/atlas/atlas.jsonld +1 -1
- package/data/atlas/diffusion.json +5 -5
- package/data/atlas/oscillators.json +7 -7
- package/data/atlas/waves.json +11 -11
- package/data/bridge-catalog.json +490 -338
- package/data/bridge-catalog.schema.json +566 -40
- package/data/quantities.json +230 -218
- package/data/quantities.schema.json +52 -0
- package/data/units.json +1149 -0
- package/data/units.schema.json +124 -0
- package/dist/atlas/association.d.ts +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
- package/dist/atlas/benchmark/hybrid-retrieval.js +2 -5
- package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
- package/dist/atlas/physjs-entries.generated.d.ts +1601 -220
- package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
- package/dist/atlas/physjs-entries.generated.js +1854 -345
- package/dist/atlas/physjs-entries.generated.js.map +1 -1
- package/dist/atlas/physjs-ref.d.ts +89 -89
- package/dist/atlas/physjs-ref.d.ts.map +1 -1
- package/dist/atlas/physjs-ref.js +128 -176
- package/dist/atlas/physjs-ref.js.map +1 -1
- package/dist/atlas/proof-target.d.ts +16 -8
- package/dist/atlas/proof-target.d.ts.map +1 -1
- package/dist/atlas/proof-target.js +34 -31
- package/dist/atlas/proof-target.js.map +1 -1
- package/dist/bridges/catalog-adapter.d.ts.map +1 -1
- package/dist/bridges/catalog-adapter.js +5 -5
- package/dist/bridges/catalog-adapter.js.map +1 -1
- package/dist/bridges/catalog-load.d.ts +7 -0
- package/dist/bridges/catalog-load.d.ts.map +1 -1
- package/dist/bridges/catalog-load.js +69 -13
- package/dist/bridges/catalog-load.js.map +1 -1
- package/dist/bridges/catalog-types.d.ts +51 -6
- package/dist/bridges/catalog-types.d.ts.map +1 -1
- package/dist/bridges/evaluation-errors.d.ts +76 -0
- package/dist/bridges/evaluation-errors.d.ts.map +1 -0
- package/dist/bridges/evaluation-errors.js +118 -0
- package/dist/bridges/evaluation-errors.js.map +1 -0
- package/dist/bridges/evaluator-inputs.d.ts +5 -3
- package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
- package/dist/bridges/evaluator-inputs.js +24 -24
- package/dist/bridges/evaluator-inputs.js.map +1 -1
- package/dist/bridges/evaluators.d.ts +32 -7
- package/dist/bridges/evaluators.d.ts.map +1 -1
- package/dist/bridges/evaluators.js +131 -29
- package/dist/bridges/evaluators.js.map +1 -1
- package/dist/bridges/expr-parse.d.ts +11 -3
- package/dist/bridges/expr-parse.d.ts.map +1 -1
- package/dist/bridges/expr-parse.js +46 -153
- package/dist/bridges/expr-parse.js.map +1 -1
- package/dist/bridges/holds.d.ts +11 -7
- package/dist/bridges/holds.d.ts.map +1 -1
- package/dist/bridges/holds.js +113 -234
- package/dist/bridges/holds.js.map +1 -1
- package/dist/bridges/input-contract.d.ts +65 -0
- package/dist/bridges/input-contract.d.ts.map +1 -0
- package/dist/bridges/input-contract.js +97 -0
- package/dist/bridges/input-contract.js.map +1 -0
- package/dist/bridges/notices.d.ts +11 -0
- package/dist/bridges/notices.d.ts.map +1 -0
- package/dist/bridges/notices.js +22 -0
- package/dist/bridges/notices.js.map +1 -0
- package/dist/canonical/canonical-equation.d.ts +31 -0
- package/dist/canonical/canonical-equation.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.js +11 -1
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
- package/dist/canonical/entries/condensed-matter.js +3 -0
- package/dist/canonical/entries/condensed-matter.js.map +1 -1
- package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
- package/dist/canonical/entries/dimensional-classics.js +48 -0
- package/dist/canonical/entries/dimensional-classics.js.map +1 -1
- package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
- package/dist/canonical/entries/electromagnetism.js +30 -0
- package/dist/canonical/entries/electromagnetism.js.map +1 -1
- package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
- package/dist/canonical/entries/fluids-waves.js +34 -0
- package/dist/canonical/entries/fluids-waves.js.map +1 -1
- package/dist/canonical/entries/mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/mechanics.js +24 -0
- package/dist/canonical/entries/mechanics.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +15 -4
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/entries/relativity.d.ts.map +1 -1
- package/dist/canonical/entries/relativity.js +6 -0
- package/dist/canonical/entries/relativity.js.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -1
- package/dist/canonical/entries/statistical-mechanics.js +19 -0
- package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
- package/dist/canonical/entries/thermo-nuclear-cosmo.js +15 -0
- package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
- package/dist/cases/index.d.ts +9 -2
- package/dist/cases/index.d.ts.map +1 -1
- package/dist/cases/index.js +26 -7
- package/dist/cases/index.js.map +1 -1
- package/dist/cases/kepler-rv.js +6 -6
- package/dist/cases/kepler-rv.js.map +1 -1
- package/dist/cli/commands/_discovery-opts.d.ts +2 -1
- package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
- package/dist/cli/commands/_discovery-opts.js +7 -12
- package/dist/cli/commands/_discovery-opts.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts.map +1 -1
- package/dist/cli/commands/atlas.js +6 -9
- package/dist/cli/commands/atlas.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +1 -2
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/connectors.d.ts.map +1 -1
- package/dist/cli/commands/connectors.js +8 -9
- package/dist/cli/commands/connectors.js.map +1 -1
- package/dist/cli/commands/derive.js +9 -10
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +3 -4
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +17 -17
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts +1 -35
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +56 -187
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +43 -38
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/ground.js +1 -1
- package/dist/cli/commands/ground.js.map +1 -1
- package/dist/cli/commands/map.js +3 -4
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/metric.d.ts.map +1 -1
- package/dist/cli/commands/metric.js +3 -0
- package/dist/cli/commands/metric.js.map +1 -1
- package/dist/cli/commands/regime.js +1 -1
- package/dist/cli/commands/regime.js.map +1 -1
- package/dist/cli/commands/symbolic.d.ts.map +1 -1
- package/dist/cli/commands/symbolic.js +5 -2
- package/dist/cli/commands/symbolic.js.map +1 -1
- package/dist/cli/commands/testplan.js +3 -3
- package/dist/cli/commands/testplan.js.map +1 -1
- package/dist/cli/conventions.d.ts +6 -7
- package/dist/cli/conventions.d.ts.map +1 -1
- package/dist/cli/conventions.js +19 -28
- package/dist/cli/conventions.js.map +1 -1
- package/dist/cli/euler-guard.d.ts +13 -2
- package/dist/cli/euler-guard.d.ts.map +1 -1
- package/dist/cli/euler-guard.js +17 -3
- package/dist/cli/euler-guard.js.map +1 -1
- package/dist/cli/eval-numbers.d.ts +4 -9
- package/dist/cli/eval-numbers.d.ts.map +1 -1
- package/dist/cli/eval-numbers.js +11 -41
- package/dist/cli/eval-numbers.js.map +1 -1
- package/dist/cli/published-url.d.ts +2 -0
- package/dist/cli/published-url.d.ts.map +1 -1
- package/dist/cli/published-url.js +5 -0
- package/dist/cli/published-url.js.map +1 -1
- package/dist/cli/record-tables.d.ts +2 -1
- package/dist/cli/record-tables.d.ts.map +1 -1
- package/dist/cli/record-tables.js +8 -3
- package/dist/cli/record-tables.js.map +1 -1
- package/dist/cli-api.d.ts +45 -12
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +38 -11
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/adjudication.d.ts +8 -30
- package/dist/composition/adjudication.d.ts.map +1 -1
- package/dist/composition/adjudication.js +15 -67
- package/dist/composition/adjudication.js.map +1 -1
- package/dist/composition/aliases.d.ts +1 -1
- package/dist/composition/aliases.d.ts.map +1 -1
- package/dist/composition/aliases.js +10 -20
- package/dist/composition/aliases.js.map +1 -1
- package/dist/composition/bridge-analysis.d.ts +4 -0
- package/dist/composition/bridge-analysis.d.ts.map +1 -1
- package/dist/composition/bridge-analysis.js +13 -14
- package/dist/composition/bridge-analysis.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +7 -9
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +35 -19
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/canonical-prefactors.d.ts +10 -29
- package/dist/composition/canonical-prefactors.d.ts.map +1 -1
- package/dist/composition/canonical-prefactors.js +15 -202
- package/dist/composition/canonical-prefactors.js.map +1 -1
- package/dist/composition/compose.js +2 -1
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/discovery.d.ts +50 -0
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +2 -2
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +0 -14
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +1 -17
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/evaluate-relation.d.ts +29 -5
- package/dist/composition/evaluate-relation.d.ts.map +1 -1
- package/dist/composition/evaluate-relation.js +100 -72
- package/dist/composition/evaluate-relation.js.map +1 -1
- package/dist/composition/explain.d.ts +5 -0
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +9 -8
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js +2 -1
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/index.d.ts +3 -1
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +3 -1
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +3 -2
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/retrodiction.d.ts +8 -0
- package/dist/composition/retrodiction.d.ts.map +1 -1
- package/dist/composition/retrodiction.js +5 -0
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/user-equation.d.ts +11 -7
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/composition/user-equation.js +24 -26
- package/dist/composition/user-equation.js.map +1 -1
- package/dist/core/constants.d.ts +27 -4
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +38 -5
- package/dist/core/constants.js.map +1 -1
- package/dist/core/data-file.d.ts +27 -0
- package/dist/core/data-file.d.ts.map +1 -0
- package/dist/core/data-file.js +48 -0
- package/dist/core/data-file.js.map +1 -0
- package/dist/core/json-schema.d.ts +27 -0
- package/dist/core/json-schema.d.ts.map +1 -0
- package/dist/core/json-schema.js +153 -0
- package/dist/core/json-schema.js.map +1 -0
- package/dist/core/types.d.ts +3 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +16 -14
- package/dist/core/types.js.map +1 -1
- package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js +6 -17
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/diff/bridge-specs.d.ts +2 -1
- package/dist/diff/bridge-specs.d.ts.map +1 -1
- package/dist/diff/bridge-specs.js +1 -1
- package/dist/diff/bridge-specs.js.map +1 -1
- package/dist/dimensional/bridge-check.d.ts.map +1 -1
- package/dist/dimensional/bridge-check.js +3 -5
- package/dist/dimensional/bridge-check.js.map +1 -1
- package/dist/dimensional/constant-rows.d.ts +54 -0
- package/dist/dimensional/constant-rows.d.ts.map +1 -0
- package/dist/dimensional/constant-rows.js +111 -0
- package/dist/dimensional/constant-rows.js.map +1 -0
- package/dist/dimensional/constants.d.ts +4 -13
- package/dist/dimensional/constants.d.ts.map +1 -1
- package/dist/dimensional/constants.js +11 -19
- package/dist/dimensional/constants.js.map +1 -1
- package/dist/dimensional/dimension-spec.d.ts +12 -3
- package/dist/dimensional/dimension-spec.d.ts.map +1 -1
- package/dist/dimensional/dimension-spec.js +114 -150
- package/dist/dimensional/dimension-spec.js.map +1 -1
- package/dist/dimensional/exact-scale.d.ts +79 -0
- package/dist/dimensional/exact-scale.d.ts.map +1 -0
- package/dist/dimensional/exact-scale.js +222 -0
- package/dist/dimensional/exact-scale.js.map +1 -0
- package/dist/dimensional/formula-names.d.ts +13 -12
- package/dist/dimensional/formula-names.d.ts.map +1 -1
- package/dist/dimensional/formula-names.js +28 -51
- package/dist/dimensional/formula-names.js.map +1 -1
- package/dist/dimensional/quantity-registry.d.ts +10 -1
- package/dist/dimensional/quantity-registry.d.ts.map +1 -1
- package/dist/dimensional/quantity-registry.js +45 -16
- package/dist/dimensional/quantity-registry.js.map +1 -1
- package/dist/dimensional/symbolic-constants.d.ts +63 -19
- package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
- package/dist/dimensional/symbolic-constants.js +109 -92
- package/dist/dimensional/symbolic-constants.js.map +1 -1
- package/dist/dimensional/unit-data.d.ts +70 -0
- package/dist/dimensional/unit-data.d.ts.map +1 -0
- package/dist/dimensional/unit-data.js +135 -0
- package/dist/dimensional/unit-data.js.map +1 -0
- package/dist/dimensional/units.d.ts +87 -24
- package/dist/dimensional/units.d.ts.map +1 -1
- package/dist/dimensional/units.js +253 -276
- package/dist/dimensional/units.js.map +1 -1
- package/dist/index.d.ts +15 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/numerical/binding-value.d.ts +21 -1
- package/dist/numerical/binding-value.d.ts.map +1 -1
- package/dist/numerical/binding-value.js +123 -118
- package/dist/numerical/binding-value.js.map +1 -1
- package/dist/numerical/evaluator-uncertainty.d.ts +34 -0
- package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -0
- package/dist/numerical/evaluator-uncertainty.js +117 -0
- package/dist/numerical/evaluator-uncertainty.js.map +1 -0
- package/dist/numerical/formula-contract.d.ts +4 -0
- package/dist/numerical/formula-contract.d.ts.map +1 -1
- package/dist/numerical/formula-contract.js +7 -0
- package/dist/numerical/formula-contract.js.map +1 -1
- package/dist/numerical/formula-dimension.d.ts +9 -0
- package/dist/numerical/formula-dimension.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.js +64 -10
- package/dist/numerical/formula-dimension.js.map +1 -1
- package/dist/numerical/formula-mathts.d.ts.map +1 -1
- package/dist/numerical/formula-mathts.js +6 -2
- package/dist/numerical/formula-mathts.js.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.js +3 -3
- package/dist/numerical/gl4-integrator.js.map +1 -1
- package/dist/numerical/spacetime-metrics.d.ts +4 -0
- package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
- package/dist/numerical/spacetime-metrics.js +34 -4
- package/dist/numerical/spacetime-metrics.js.map +1 -1
- package/dist/relations/types.d.ts +8 -1
- package/dist/relations/types.d.ts.map +1 -1
- package/dist/relations/types.js +10 -0
- package/dist/relations/types.js.map +1 -1
- package/package.json +1 -1
package/dist/bridges/holds.js
CHANGED
|
@@ -2,263 +2,142 @@
|
|
|
2
2
|
* Interpreter for a catalog validity condition.
|
|
3
3
|
*
|
|
4
4
|
* A condition is a boolean expression over quantity names, the registered
|
|
5
|
-
* constants, `
|
|
5
|
+
* constants, `isFinite` and `isInteger`, written in MathTS's grammar
|
|
6
|
+
* (`and`, `or`, `not`, `<`, `<=`, `>`, `>=`, `==`, `!=`). MathTS parses it,
|
|
7
|
+
* and MathTS evaluates every arithmetic sub-expression. The comparisons and
|
|
8
|
+
* the logical operators are evaluated here, exactly: MathTS's own comparison
|
|
9
|
+
* operators are tolerance-based (`absTol` 1e-15), so under them `1e-18 > 0`
|
|
10
|
+
* is false, which no condition over SI magnitudes can accept.
|
|
11
|
+
*
|
|
12
|
+
* It is not JavaScript `eval`.
|
|
6
13
|
*
|
|
7
14
|
* @module bridges/holds
|
|
8
15
|
*/
|
|
16
|
+
import { parse as parseMathTs } from '@danielsimonjr/mathts-functions';
|
|
17
|
+
import { rewriteCatalogHyphens } from '../dimensional/hyphen-names.js';
|
|
18
|
+
/** A condition could not be evaluated: it names an unbound symbol, or its text does not parse. @internal */
|
|
9
19
|
export class HoldsError extends Error {
|
|
10
20
|
constructor(message) {
|
|
11
21
|
super(message);
|
|
12
22
|
this.name = 'HoldsError';
|
|
13
23
|
}
|
|
14
24
|
}
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (op !== undefined) {
|
|
37
|
-
out.push({ t: 'op', v: op });
|
|
38
|
-
i += op.length;
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (c === '+' || c === '-' || c === '*' || c === '/' || c === '^') {
|
|
42
|
-
out.push({ t: 'op', v: c });
|
|
43
|
-
i += 1;
|
|
44
|
-
continue;
|
|
25
|
+
const COMPARISONS = {
|
|
26
|
+
'<': (a, b) => a < b,
|
|
27
|
+
'<=': (a, b) => a <= b,
|
|
28
|
+
'>': (a, b) => a > b,
|
|
29
|
+
'>=': (a, b) => a >= b,
|
|
30
|
+
'==': (a, b) => a === b,
|
|
31
|
+
'!=': (a, b) => a !== b,
|
|
32
|
+
};
|
|
33
|
+
const PREDICATES = {
|
|
34
|
+
isFinite: (x) => Number.isFinite(x),
|
|
35
|
+
isInteger: (x) => Number.isInteger(x),
|
|
36
|
+
};
|
|
37
|
+
function functionName(node) {
|
|
38
|
+
return typeof node.fn === 'string' ? node.fn : (node.fn?.name ?? node.name ?? '');
|
|
39
|
+
}
|
|
40
|
+
/** Evaluate an arithmetic sub-tree through MathTS; the result must be a number. */
|
|
41
|
+
function arithmetic(node, source) {
|
|
42
|
+
return (scope) => {
|
|
43
|
+
let v;
|
|
44
|
+
try {
|
|
45
|
+
v = node.evaluate(scope);
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (m === null)
|
|
49
|
-
throw new HoldsError(`bad number at ${i} in ${source}`);
|
|
50
|
-
out.push({ t: 'num', v: Number(m[0]) });
|
|
51
|
-
i += m[0].length;
|
|
52
|
-
continue;
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw new HoldsError(`${error instanceof Error ? error.message : String(error)} in ${source}`);
|
|
53
49
|
}
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
let left = parseAnd(p, env);
|
|
101
|
-
while (peekOp(p) === '||') {
|
|
102
|
-
eat(p);
|
|
103
|
-
const right = parseAnd(p, env);
|
|
104
|
-
left = asBool(left, '||') || asBool(right, '||');
|
|
105
|
-
}
|
|
106
|
-
return left;
|
|
107
|
-
}
|
|
108
|
-
function parseAnd(p, env) {
|
|
109
|
-
let left = parseNot(p, env);
|
|
110
|
-
while (peekOp(p) === '&&') {
|
|
111
|
-
eat(p);
|
|
112
|
-
const right = parseNot(p, env);
|
|
113
|
-
left = asBool(left, '&&') && asBool(right, '&&');
|
|
114
|
-
}
|
|
115
|
-
return left;
|
|
116
|
-
}
|
|
117
|
-
function parseNot(p, env) {
|
|
118
|
-
if (peekOp(p) === '!') {
|
|
119
|
-
eat(p);
|
|
120
|
-
return !asBool(parseNot(p, env), '!');
|
|
121
|
-
}
|
|
122
|
-
return parseCmp(p, env);
|
|
123
|
-
}
|
|
124
|
-
function parseCmp(p, env) {
|
|
125
|
-
const left = parseAdd(p, env);
|
|
126
|
-
const op = peek(p);
|
|
127
|
-
if (op?.t === 'op' && ['>', '<', '>=', '<=', '==', '!=', '===', '!=='].includes(op.v)) {
|
|
128
|
-
eat(p);
|
|
129
|
-
const right = parseAdd(p, env);
|
|
130
|
-
if (typeof left === 'boolean' || typeof right === 'boolean') {
|
|
131
|
-
throw new HoldsError('comparison of a condition');
|
|
132
|
-
}
|
|
133
|
-
switch (op.v) {
|
|
134
|
-
case '>':
|
|
135
|
-
return left > right;
|
|
136
|
-
case '<':
|
|
137
|
-
return left < right;
|
|
138
|
-
case '>=':
|
|
139
|
-
return left >= right;
|
|
140
|
-
case '<=':
|
|
141
|
-
return left <= right;
|
|
142
|
-
case '==':
|
|
143
|
-
case '===':
|
|
144
|
-
return left === right;
|
|
145
|
-
case '!=':
|
|
146
|
-
case '!==':
|
|
147
|
-
return left !== right;
|
|
148
|
-
default:
|
|
149
|
-
throw new HoldsError(`bad comparison ${op.v}`);
|
|
50
|
+
if (typeof v !== 'number')
|
|
51
|
+
throw new HoldsError(`operand is not a number: ${node.toString()} in ${source}`);
|
|
52
|
+
return v;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function compile(node, source) {
|
|
56
|
+
switch (node.type) {
|
|
57
|
+
case 'ParenthesisNode':
|
|
58
|
+
return compile(node.content, source);
|
|
59
|
+
case 'ConstantNode':
|
|
60
|
+
if (typeof node.value === 'boolean')
|
|
61
|
+
return () => node.value;
|
|
62
|
+
return arithmetic(node, source);
|
|
63
|
+
case 'OperatorNode': {
|
|
64
|
+
const op = node.op ?? '';
|
|
65
|
+
const args = node.args ?? [];
|
|
66
|
+
if (op === 'and' || op === 'or') {
|
|
67
|
+
const parts = args.map((a) => compile(a, source));
|
|
68
|
+
return (scope) => {
|
|
69
|
+
const values = parts.map((p) => p(scope));
|
|
70
|
+
if (values.some((v) => typeof v !== 'boolean'))
|
|
71
|
+
throw new HoldsError(`'${op}' of a number in ${source}`);
|
|
72
|
+
return op === 'and' ? values.every(Boolean) : values.some(Boolean);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (op === 'not') {
|
|
76
|
+
const inner = compile(args[0], source);
|
|
77
|
+
return (scope) => {
|
|
78
|
+
const v = inner(scope);
|
|
79
|
+
if (typeof v !== 'boolean')
|
|
80
|
+
throw new HoldsError(`'not' of a number in ${source}`);
|
|
81
|
+
return !v;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const compare = COMPARISONS[op];
|
|
85
|
+
if (compare !== undefined) {
|
|
86
|
+
const [left, right] = args.map((a) => compile(a, source));
|
|
87
|
+
return (scope) => {
|
|
88
|
+
const a = left(scope);
|
|
89
|
+
const b = right(scope);
|
|
90
|
+
if (typeof a !== 'number' || typeof b !== 'number')
|
|
91
|
+
throw new HoldsError(`'${op}' of a boolean in ${source}`);
|
|
92
|
+
return compare(a, b);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return arithmetic(node, source);
|
|
150
96
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
97
|
+
case 'FunctionNode': {
|
|
98
|
+
const predicate = PREDICATES[functionName(node)];
|
|
99
|
+
if (predicate !== undefined) {
|
|
100
|
+
const arg = compile(node.args[0], source);
|
|
101
|
+
return (scope) => {
|
|
102
|
+
const v = arg(scope);
|
|
103
|
+
if (typeof v !== 'number')
|
|
104
|
+
throw new HoldsError(`${functionName(node)} of a boolean in ${source}`);
|
|
105
|
+
return predicate(v);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return arithmetic(node, source);
|
|
161
109
|
}
|
|
162
|
-
|
|
110
|
+
default:
|
|
111
|
+
return arithmetic(node, source);
|
|
163
112
|
}
|
|
164
|
-
return left;
|
|
165
113
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
left = op.v === '*' ? left * right : left / right;
|
|
114
|
+
const COMPILED = new Map();
|
|
115
|
+
function compiled(rewritten, source) {
|
|
116
|
+
const hit = COMPILED.get(rewritten);
|
|
117
|
+
if (hit !== undefined)
|
|
118
|
+
return hit;
|
|
119
|
+
let node;
|
|
120
|
+
try {
|
|
121
|
+
node = parseMathTs(rewritten);
|
|
175
122
|
}
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
function parseUnary(p, env) {
|
|
179
|
-
if (peekOp(p) === '-') {
|
|
180
|
-
eat(p);
|
|
181
|
-
const v = parsePow(p, env);
|
|
182
|
-
if (typeof v !== 'number')
|
|
183
|
-
throw new HoldsError('negation of a condition');
|
|
184
|
-
return -v;
|
|
185
|
-
}
|
|
186
|
-
if (peekOp(p) === '+') {
|
|
187
|
-
eat(p);
|
|
188
|
-
return parsePow(p, env);
|
|
189
|
-
}
|
|
190
|
-
return parsePow(p, env);
|
|
191
|
-
}
|
|
192
|
-
function parsePow(p, env) {
|
|
193
|
-
const base = parsePrimary(p, env);
|
|
194
|
-
if (peekOp(p) === '^') {
|
|
195
|
-
eat(p);
|
|
196
|
-
const exp = parseUnary(p, env);
|
|
197
|
-
if (typeof base !== 'number' || typeof exp !== 'number')
|
|
198
|
-
throw new HoldsError('power of a condition');
|
|
199
|
-
return base ** exp;
|
|
200
|
-
}
|
|
201
|
-
return base;
|
|
202
|
-
}
|
|
203
|
-
function parsePrimary(p, env) {
|
|
204
|
-
const tok = peek(p);
|
|
205
|
-
if (tok?.t === 'num') {
|
|
206
|
-
eat(p);
|
|
207
|
-
return tok.v;
|
|
208
|
-
}
|
|
209
|
-
if (tok?.t === 'id') {
|
|
210
|
-
eat(p);
|
|
211
|
-
if (tok.v === 'true')
|
|
212
|
-
return true;
|
|
213
|
-
if (tok.v === 'false')
|
|
214
|
-
return false;
|
|
215
|
-
if (peek(p)?.t === 'lp') {
|
|
216
|
-
eat(p);
|
|
217
|
-
const arg = parseAdd(p, env);
|
|
218
|
-
if (peek(p)?.t !== 'rp')
|
|
219
|
-
throw new HoldsError(`unclosed ${tok.v}`);
|
|
220
|
-
eat(p);
|
|
221
|
-
if (typeof arg !== 'number')
|
|
222
|
-
throw new HoldsError(`${tok.v} needs a number`);
|
|
223
|
-
if (tok.v === 'finite')
|
|
224
|
-
return Number.isFinite(arg);
|
|
225
|
-
if (tok.v === 'integer')
|
|
226
|
-
return Number.isInteger(arg);
|
|
227
|
-
if (tok.v === 'sqrt')
|
|
228
|
-
return Math.sqrt(arg);
|
|
229
|
-
if (tok.v === 'abs')
|
|
230
|
-
return Math.abs(arg);
|
|
231
|
-
throw new HoldsError(`unknown predicate ${tok.v}`);
|
|
232
|
-
}
|
|
233
|
-
if (Object.hasOwn(env.values, tok.v))
|
|
234
|
-
return env.values[tok.v];
|
|
235
|
-
if (Object.hasOwn(env.constants, tok.v))
|
|
236
|
-
return env.constants[tok.v];
|
|
237
|
-
throw new HoldsError(`unbound '${tok.v}'`);
|
|
238
|
-
}
|
|
239
|
-
if (tok?.t === 'lp') {
|
|
240
|
-
eat(p);
|
|
241
|
-
const v = parseOr(p, env);
|
|
242
|
-
if (peek(p)?.t !== 'rp')
|
|
243
|
-
throw new HoldsError('unclosed group');
|
|
244
|
-
eat(p);
|
|
245
|
-
return v;
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new HoldsError(`${error instanceof Error ? error.message : String(error)} in ${source}`);
|
|
246
125
|
}
|
|
247
|
-
|
|
126
|
+
const fn = compile(node, source);
|
|
127
|
+
COMPILED.set(rewritten, fn);
|
|
128
|
+
return fn;
|
|
248
129
|
}
|
|
249
130
|
/**
|
|
250
131
|
* Whether `holds` is true for `values`.
|
|
251
|
-
* Hyphenated quantity names are rewritten with `names` before parsing
|
|
132
|
+
* Hyphenated quantity names are rewritten with `names` before parsing; an
|
|
133
|
+
* unbound name, a non-boolean result, and a syntax error are a {@link HoldsError}.
|
|
252
134
|
*/
|
|
253
135
|
export function holds(source, values, constants, names) {
|
|
254
|
-
const rewritten =
|
|
255
|
-
const
|
|
136
|
+
const rewritten = rewriteCatalogHyphens(source, names);
|
|
137
|
+
const scope = { ...constants };
|
|
256
138
|
for (const [key, value] of Object.entries(values))
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
const result = parseOr(p, { values: folded, constants });
|
|
260
|
-
if (p.i !== p.toks.length)
|
|
261
|
-
throw new HoldsError(`trailing input in ${source}`);
|
|
139
|
+
scope[key.replace(/-/g, '_')] = value;
|
|
140
|
+
const result = compiled(rewritten, source)(scope);
|
|
262
141
|
if (typeof result !== 'boolean')
|
|
263
142
|
throw new HoldsError(`condition is not boolean: ${source}`);
|
|
264
143
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/bridges/holds.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/bridges/holds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one check of a binding record against an id's declared inputs.
|
|
3
|
+
*
|
|
4
|
+
* Every evaluation runs it before any domain check: `evaluateRelation`, the
|
|
5
|
+
* CLI's `upt evaluate`, an evaluator's `run`, the uncertainty probes that
|
|
6
|
+
* call `run`, and an applied case. It refuses an unknown key, a non-number, a
|
|
7
|
+
* number that is not finite and a key given twice, converts a declared
|
|
8
|
+
* alternate onto its key, and names every absent required input, in that
|
|
9
|
+
* order.
|
|
10
|
+
*
|
|
11
|
+
* A spelling binds one slot. {@link inputContract} builds a contract and
|
|
12
|
+
* refuses one whose spellings or alternates name two slots, so an ambiguous
|
|
13
|
+
* key fails when the contract is built, not when a caller happens to use it.
|
|
14
|
+
*
|
|
15
|
+
* What is required depends on what the caller asks for. A slot is read by the
|
|
16
|
+
* value (it owns a source of the relation) or only by the extra outputs. A
|
|
17
|
+
* caller who wants the value alone (`evaluateRelation`, the graph edge) need
|
|
18
|
+
* not give an output-only input; a caller who wants every output must.
|
|
19
|
+
*
|
|
20
|
+
* @module bridges/input-contract
|
|
21
|
+
*/
|
|
22
|
+
/** A second key that converts into a slot's key by a factor. @public */
|
|
23
|
+
export interface ContractAlternate {
|
|
24
|
+
readonly key: string;
|
|
25
|
+
readonly toKey: number;
|
|
26
|
+
}
|
|
27
|
+
/** One declared input: the key the evaluation reads, and every spelling that binds it. @public */
|
|
28
|
+
export interface InputSlot {
|
|
29
|
+
readonly key: string;
|
|
30
|
+
/** Spellings that bind this slot as given (the key, its quantity, its source and aliases). */
|
|
31
|
+
readonly spellings: readonly string[];
|
|
32
|
+
readonly alternates: readonly ContractAlternate[];
|
|
33
|
+
readonly optional: boolean;
|
|
34
|
+
/** `'value'` when the relation's value reads this slot; `'outputs'` when only an extra output does. */
|
|
35
|
+
readonly readBy: 'value' | 'outputs';
|
|
36
|
+
/** Listed in a message as one of "the inputs". A constant a caller may override is not. */
|
|
37
|
+
readonly listed: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** What the caller wants back: the relation's value alone, or the value and every extra output. @public */
|
|
40
|
+
export type EvaluationWant = 'value' | 'all';
|
|
41
|
+
/** The declared inputs of one id. @public */
|
|
42
|
+
export interface InputContract {
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly slots: readonly InputSlot[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A contract for `id` with `slots`, checked once here: every spelling and
|
|
48
|
+
* alternate binds exactly one slot.
|
|
49
|
+
*
|
|
50
|
+
* @throws Error when a spelling or an alternate names two slots.
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
export declare function inputContract(id: string, slots: readonly InputSlot[]): InputContract;
|
|
54
|
+
/**
|
|
55
|
+
* `bindings` keyed by slot key, after the contract's checks.
|
|
56
|
+
*
|
|
57
|
+
* @throws UnknownInputError a key no slot spells.
|
|
58
|
+
* @throws InputTypeError a value that is not a number.
|
|
59
|
+
* @throws NonFiniteInputError a number that is `NaN`, `Infinity` or `-Infinity`.
|
|
60
|
+
* @throws DuplicateInputError one slot bound under two spellings.
|
|
61
|
+
* @throws MissingInputError a required slot left unbound (every one is named).
|
|
62
|
+
* With `want` `'value'`, a slot only an extra output reads is not required.
|
|
63
|
+
*/
|
|
64
|
+
export declare function checkInputs(contract: InputContract, bindings: Readonly<Record<string, unknown>>, want?: EvaluationWant): Record<string, number>;
|
|
65
|
+
//# sourceMappingURL=input-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-contract.d.ts","sourceRoot":"","sources":["../../src/bridges/input-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAUH,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,kGAAkG;AAClG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,2GAA2G;AAC3G,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7C,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AA8BD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,aAAa,CAIpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC3C,IAAI,GAAE,cAAsB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one check of a binding record against an id's declared inputs.
|
|
3
|
+
*
|
|
4
|
+
* Every evaluation runs it before any domain check: `evaluateRelation`, the
|
|
5
|
+
* CLI's `upt evaluate`, an evaluator's `run`, the uncertainty probes that
|
|
6
|
+
* call `run`, and an applied case. It refuses an unknown key, a non-number, a
|
|
7
|
+
* number that is not finite and a key given twice, converts a declared
|
|
8
|
+
* alternate onto its key, and names every absent required input, in that
|
|
9
|
+
* order.
|
|
10
|
+
*
|
|
11
|
+
* A spelling binds one slot. {@link inputContract} builds a contract and
|
|
12
|
+
* refuses one whose spellings or alternates name two slots, so an ambiguous
|
|
13
|
+
* key fails when the contract is built, not when a caller happens to use it.
|
|
14
|
+
*
|
|
15
|
+
* What is required depends on what the caller asks for. A slot is read by the
|
|
16
|
+
* value (it owns a source of the relation) or only by the extra outputs. A
|
|
17
|
+
* caller who wants the value alone (`evaluateRelation`, the graph edge) need
|
|
18
|
+
* not give an output-only input; a caller who wants every output must.
|
|
19
|
+
*
|
|
20
|
+
* @module bridges/input-contract
|
|
21
|
+
*/
|
|
22
|
+
import { DuplicateInputError, InputTypeError, MissingInputError, NonFiniteInputError, UnknownInputError, } from './evaluation-errors.js';
|
|
23
|
+
const INDEX = new WeakMap();
|
|
24
|
+
/**
|
|
25
|
+
* Every spelling and alternate of `contract`, each onto its one slot.
|
|
26
|
+
* @throws Error when one spelling names two slots.
|
|
27
|
+
*/
|
|
28
|
+
function spellingIndex(contract) {
|
|
29
|
+
const cached = INDEX.get(contract);
|
|
30
|
+
if (cached !== undefined)
|
|
31
|
+
return cached;
|
|
32
|
+
const index = new Map();
|
|
33
|
+
const bind = (spelling, slot, factor) => {
|
|
34
|
+
const earlier = index.get(spelling);
|
|
35
|
+
if (earlier !== undefined && earlier.slot !== slot) {
|
|
36
|
+
throw new Error(`${contract.id}: input contract spells '${spelling}' for both '${earlier.slot.key}' and '${slot.key}'`);
|
|
37
|
+
}
|
|
38
|
+
if (earlier === undefined)
|
|
39
|
+
index.set(spelling, { slot, factor });
|
|
40
|
+
};
|
|
41
|
+
for (const slot of contract.slots)
|
|
42
|
+
for (const spelling of slot.spellings)
|
|
43
|
+
bind(spelling, slot, 1);
|
|
44
|
+
for (const slot of contract.slots)
|
|
45
|
+
for (const alt of slot.alternates)
|
|
46
|
+
bind(alt.key, slot, alt.toKey);
|
|
47
|
+
INDEX.set(contract, index);
|
|
48
|
+
return index;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A contract for `id` with `slots`, checked once here: every spelling and
|
|
52
|
+
* alternate binds exactly one slot.
|
|
53
|
+
*
|
|
54
|
+
* @throws Error when a spelling or an alternate names two slots.
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
export function inputContract(id, slots) {
|
|
58
|
+
const contract = { id, slots };
|
|
59
|
+
spellingIndex(contract);
|
|
60
|
+
return contract;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* `bindings` keyed by slot key, after the contract's checks.
|
|
64
|
+
*
|
|
65
|
+
* @throws UnknownInputError a key no slot spells.
|
|
66
|
+
* @throws InputTypeError a value that is not a number.
|
|
67
|
+
* @throws NonFiniteInputError a number that is `NaN`, `Infinity` or `-Infinity`.
|
|
68
|
+
* @throws DuplicateInputError one slot bound under two spellings.
|
|
69
|
+
* @throws MissingInputError a required slot left unbound (every one is named).
|
|
70
|
+
* With `want` `'value'`, a slot only an extra output reads is not required.
|
|
71
|
+
*/
|
|
72
|
+
export function checkInputs(contract, bindings, want = 'all') {
|
|
73
|
+
const listed = contract.slots.filter((slot) => slot.listed).map((slot) => slot.key);
|
|
74
|
+
const bySpelling = spellingIndex(contract);
|
|
75
|
+
const out = {};
|
|
76
|
+
const givenAs = new Map();
|
|
77
|
+
for (const [key, value] of Object.entries(bindings)) {
|
|
78
|
+
const found = bySpelling.get(key);
|
|
79
|
+
if (found === undefined)
|
|
80
|
+
throw new UnknownInputError(contract.id, key, listed);
|
|
81
|
+
if (typeof value !== 'number')
|
|
82
|
+
throw new InputTypeError(contract.id, key, typeof value);
|
|
83
|
+
if (!Number.isFinite(value))
|
|
84
|
+
throw new NonFiniteInputError(contract.id, key, value);
|
|
85
|
+
const earlier = givenAs.get(found.slot.key);
|
|
86
|
+
if (earlier !== undefined)
|
|
87
|
+
throw new DuplicateInputError(contract.id, found.slot.key, [earlier, key]);
|
|
88
|
+
givenAs.set(found.slot.key, key);
|
|
89
|
+
out[found.slot.key] = value * found.factor;
|
|
90
|
+
}
|
|
91
|
+
const required = (slot) => !slot.optional && (want === 'all' || slot.readBy === 'value');
|
|
92
|
+
const missing = contract.slots.filter((slot) => required(slot) && !givenAs.has(slot.key)).map((slot) => slot.key);
|
|
93
|
+
if (missing.length > 0)
|
|
94
|
+
throw new MissingInputError(contract.id, missing, listed);
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=input-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-contract.js","sourceRoot":"","sources":["../../src/bridges/input-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caveats printed beside a relation's value: the record's own notice, and
|
|
3
|
+
* the note of every registered constant its expression names. No caller
|
|
4
|
+
* switches on a notice; the text is the record's or the constant's.
|
|
5
|
+
*
|
|
6
|
+
* @module bridges/notices
|
|
7
|
+
*/
|
|
8
|
+
import type { CatalogRelation } from './catalog-types.js';
|
|
9
|
+
/** The caveats to print beside `relation`'s value. @internal */
|
|
10
|
+
export declare function relationNotices(relation: CatalogRelation): string[];
|
|
11
|
+
//# sourceMappingURL=notices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.d.ts","sourceRoot":"","sources":["../../src/bridges/notices.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAO1D,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAKnE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caveats printed beside a relation's value: the record's own notice, and
|
|
3
|
+
* the note of every registered constant its expression names. No caller
|
|
4
|
+
* switches on a notice; the text is the record's or the constant's.
|
|
5
|
+
*
|
|
6
|
+
* @module bridges/notices
|
|
7
|
+
*/
|
|
8
|
+
import { constantNotes } from '../dimensional/symbolic-constants.js';
|
|
9
|
+
/** Identifiers in an expression, in order of first appearance. */
|
|
10
|
+
function identifiers(expression) {
|
|
11
|
+
return [...new Set(expression.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? [])];
|
|
12
|
+
}
|
|
13
|
+
/** The caveats to print beside `relation`'s value. @internal */
|
|
14
|
+
export function relationNotices(relation) {
|
|
15
|
+
const notes = [];
|
|
16
|
+
if (relation.notice !== undefined)
|
|
17
|
+
notes.push(relation.notice.text);
|
|
18
|
+
for (const note of constantNotes(identifiers(relation.expression)))
|
|
19
|
+
notes.push(`note: ${note}`);
|
|
20
|
+
return notes;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=notices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.js","sourceRoot":"","sources":["../../src/bridges/notices.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAGrE,kEAAkE;AAClE,SAAS,WAAW,CAAC,UAAkB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAC,QAAyB;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC;AACf,CAAC"}
|