@uwmd/core 1.1.2 → 1.5.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 +3 -3
- package/dist/agents/bancroft.d.ts +22 -1
- package/dist/agents/bancroft.d.ts.map +1 -1
- package/dist/agents/bancroft.js +86 -60
- package/dist/agents/bancroft.js.map +1 -1
- package/dist/agents/provider.d.ts +62 -0
- package/dist/agents/provider.d.ts.map +1 -0
- package/dist/agents/provider.js +28 -0
- package/dist/agents/provider.js.map +1 -0
- package/dist/agents/providers/anthropic.d.ts +20 -0
- package/dist/agents/providers/anthropic.d.ts.map +1 -0
- package/dist/agents/providers/anthropic.js +104 -0
- package/dist/agents/providers/anthropic.js.map +1 -0
- package/dist/agents/providers/replay.d.ts +46 -0
- package/dist/agents/providers/replay.d.ts.map +1 -0
- package/dist/agents/providers/replay.js +162 -0
- package/dist/agents/providers/replay.js.map +1 -0
- package/dist/agents/schemas.d.ts +3 -3
- package/dist/agents/schemas.d.ts.map +1 -1
- package/dist/agents/schemas.js.map +1 -1
- package/dist/browser.d.ts +33 -4
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +26 -3
- package/dist/browser.js.map +1 -1
- package/dist/calc/builtins.d.ts +10 -0
- package/dist/calc/builtins.d.ts.map +1 -1
- package/dist/calc/builtins.js +64 -42
- package/dist/calc/builtins.js.map +1 -1
- package/dist/calc/errors.js +1 -1
- package/dist/calc/evaluator.js +6 -2
- package/dist/calc/evaluator.js.map +1 -1
- package/dist/calc/index.d.ts +7 -0
- package/dist/calc/index.d.ts.map +1 -1
- package/dist/calc/index.js +13 -1
- package/dist/calc/index.js.map +1 -1
- package/dist/calc/quantize.d.ts +56 -0
- package/dist/calc/quantize.d.ts.map +1 -0
- package/dist/calc/quantize.js +116 -0
- package/dist/calc/quantize.js.map +1 -0
- package/dist/cascade.d.ts +60 -6
- package/dist/cascade.d.ts.map +1 -1
- package/dist/cascade.js +93 -14
- package/dist/cascade.js.map +1 -1
- package/dist/cli-packages.d.ts +11 -0
- package/dist/cli-packages.d.ts.map +1 -0
- package/dist/cli-packages.js +177 -0
- package/dist/cli-packages.js.map +1 -0
- package/dist/cli.js +691 -37
- package/dist/cli.js.map +1 -1
- package/dist/composition.d.ts +182 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +536 -0
- package/dist/composition.js.map +1 -0
- package/dist/deal-package-context.d.ts +52 -0
- package/dist/deal-package-context.d.ts.map +1 -0
- package/dist/deal-package-context.js +132 -0
- package/dist/deal-package-context.js.map +1 -0
- package/dist/deal-package-zip.d.ts +36 -0
- package/dist/deal-package-zip.d.ts.map +1 -0
- package/dist/deal-package-zip.js +132 -0
- package/dist/deal-package-zip.js.map +1 -0
- package/dist/deal-package.d.ts +82 -0
- package/dist/deal-package.d.ts.map +1 -0
- package/dist/deal-package.js +189 -0
- package/dist/deal-package.js.map +1 -0
- package/dist/defaults.d.ts +48 -0
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +512 -0
- package/dist/defaults.js.map +1 -1
- package/dist/index.d.ts +39 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/integrity.d.ts +9 -0
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +12 -2
- package/dist/integrity.js.map +1 -1
- package/dist/lease-abstract.d.ts +82 -0
- package/dist/lease-abstract.d.ts.map +1 -0
- package/dist/lease-abstract.js +183 -0
- package/dist/lease-abstract.js.map +1 -0
- package/dist/lite-bridge.d.ts +67 -0
- package/dist/lite-bridge.d.ts.map +1 -0
- package/dist/lite-bridge.js +564 -0
- package/dist/lite-bridge.js.map +1 -0
- package/dist/lite.d.ts +63 -0
- package/dist/lite.d.ts.map +1 -0
- package/dist/lite.js +398 -0
- package/dist/lite.js.map +1 -0
- package/dist/market-data.d.ts +134 -0
- package/dist/market-data.d.ts.map +1 -0
- package/dist/market-data.js +292 -0
- package/dist/market-data.js.map +1 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +278 -13
- package/dist/modules.js.map +1 -1
- package/dist/packs/excel-emit.d.ts +18 -1
- package/dist/packs/excel-emit.d.ts.map +1 -1
- package/dist/packs/excel-emit.js +18 -1
- package/dist/packs/excel-emit.js.map +1 -1
- package/dist/packs/hospitality.d.ts +3 -0
- package/dist/packs/hospitality.d.ts.map +1 -0
- package/dist/packs/hospitality.js +122 -0
- package/dist/packs/hospitality.js.map +1 -0
- package/dist/packs/index.d.ts +5 -1
- package/dist/packs/index.d.ts.map +1 -1
- package/dist/packs/index.js +13 -1
- package/dist/packs/index.js.map +1 -1
- package/dist/packs/land.d.ts +3 -0
- package/dist/packs/land.d.ts.map +1 -0
- package/dist/packs/land.js +124 -0
- package/dist/packs/land.js.map +1 -0
- package/dist/packs/senior-housing.d.ts +3 -0
- package/dist/packs/senior-housing.d.ts.map +1 -0
- package/dist/packs/senior-housing.js +123 -0
- package/dist/packs/senior-housing.js.map +1 -0
- package/dist/packs/student-housing.d.ts +3 -0
- package/dist/packs/student-housing.d.ts.map +1 -0
- package/dist/packs/student-housing.js +124 -0
- package/dist/packs/student-housing.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +40 -6
- package/dist/parser.js.map +1 -1
- package/dist/protocol.d.ts +125 -9
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +182 -4
- package/dist/protocol.js.map +1 -1
- package/dist/receipts.d.ts +396 -0
- package/dist/receipts.d.ts.map +1 -0
- package/dist/receipts.js +913 -0
- package/dist/receipts.js.map +1 -0
- package/dist/runner.d.ts +13 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +5 -5
- package/dist/runner.js.map +1 -1
- package/dist/source-representation.d.ts +40 -0
- package/dist/source-representation.d.ts.map +1 -0
- package/dist/source-representation.js +114 -0
- package/dist/source-representation.js.map +1 -0
- package/dist/types.d.ts +63 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -1
- package/dist/uwcsv.d.ts.map +1 -1
- package/dist/uwcsv.js +10 -78
- package/dist/uwcsv.js.map +1 -1
- package/dist/uwxml.d.ts.map +1 -1
- package/dist/uwxml.js +10 -2
- package/dist/uwxml.js.map +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +27 -10
- package/dist/validator.js.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/zip-safety.d.ts +15 -0
- package/dist/zip-safety.d.ts.map +1 -0
- package/dist/zip-safety.js +109 -0
- package/dist/zip-safety.js.map +1 -0
- package/package.json +12 -3
package/dist/calc/builtins.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Tier-3 Calc Host — built-in function implementations.
|
|
2
2
|
// Signatures and semantics per UW_PROTOCOL_v1.md §VIII.3.
|
|
3
3
|
import { CalcError } from './errors.js';
|
|
4
|
+
import { quantizeDecimal } from './quantize.js';
|
|
4
5
|
function asNumberOrNull(v, fnName) {
|
|
5
6
|
if (v === null)
|
|
6
7
|
return null;
|
|
@@ -13,6 +14,19 @@ function asNumber(v, fnName) {
|
|
|
13
14
|
return v;
|
|
14
15
|
throw new CalcError('CALC-TYPE-001', `${fnName}: expected number, got ${v === null ? 'null' : typeof v}.`);
|
|
15
16
|
}
|
|
17
|
+
// `irr` search parameters — normative, protocol §VIII.3 (RFC 0024). These are
|
|
18
|
+
// not tuning knobs: two engines return the same root only if both use these
|
|
19
|
+
// exact values in this exact order. Changing one is a protocol change.
|
|
20
|
+
/** Low end of the IRR search interval: -99.9%. */
|
|
21
|
+
export const IRR_BRACKET_LO = -0.999;
|
|
22
|
+
/** High end of the IRR search interval: 1000%. */
|
|
23
|
+
export const IRR_BRACKET_HI = 10.0;
|
|
24
|
+
/** Stop when the NPV at the midpoint is this close to zero. */
|
|
25
|
+
export const IRR_VALUE_TOL = 1e-9;
|
|
26
|
+
/** Stop when the remaining half-interval is this narrow. */
|
|
27
|
+
export const IRR_INTERVAL_TOL = 1e-12;
|
|
28
|
+
/** Hard iteration cap; exhausting it raises `CALC-IRR-DIVERGE`. */
|
|
29
|
+
export const IRR_MAX_ITER = 200;
|
|
16
30
|
export const BUILTINS = Object.freeze({
|
|
17
31
|
// sum(...nums) — nulls treated as 0.
|
|
18
32
|
sum(args) {
|
|
@@ -74,7 +88,11 @@ export const BUILTINS = Object.freeze({
|
|
|
74
88
|
}
|
|
75
89
|
return cond ? args[1] : args[2];
|
|
76
90
|
},
|
|
77
|
-
// round(num, dec) — half-away-from-zero
|
|
91
|
+
// round(num, dec) — half-away-from-zero, delegated to the single quantization
|
|
92
|
+
// rule in quantize.ts so the builtin, the reported-value boundary, and the
|
|
93
|
+
// Excel emitter cannot drift apart. This previously scaled by `10 ** d`, which
|
|
94
|
+
// reintroduced the binary artifact it was meant to remove: `round(1.005, 2)`
|
|
95
|
+
// returned 1.00 while Excel's ROUND gives 1.01. See RFC 0023.
|
|
78
96
|
round(args) {
|
|
79
97
|
if (args.length !== 2) {
|
|
80
98
|
throw new CalcError('CALC-TYPE-001', `round: expected 2 arguments, got ${args.length}.`);
|
|
@@ -88,10 +106,7 @@ export const BUILTINS = Object.freeze({
|
|
|
88
106
|
if (!Number.isInteger(d)) {
|
|
89
107
|
throw new CalcError('CALC-TYPE-001', `round: decimals must be integer, got ${d}.`);
|
|
90
108
|
}
|
|
91
|
-
|
|
92
|
-
// Half-away-from-zero (Math.round in JS is half-up for positives, half-down for negatives).
|
|
93
|
-
const sign = n < 0 ? -1 : 1;
|
|
94
|
-
return sign * Math.floor(Math.abs(n) * factor + 0.5) / factor;
|
|
109
|
+
return quantizeDecimal(n, d);
|
|
95
110
|
},
|
|
96
111
|
// pmt(rate, n, pv) — standard mortgage payment formula.
|
|
97
112
|
// Returns the *positive* periodic payment for a present value pv at periodic rate.
|
|
@@ -263,67 +278,74 @@ export const BUILTINS = Object.freeze({
|
|
|
263
278
|
}
|
|
264
279
|
return Math.log(num / den) / Math.log(1 + rate);
|
|
265
280
|
},
|
|
266
|
-
// irr(...flows) —
|
|
281
|
+
// irr(...flows) — bracket, then bisect. Protocol §VIII.3 (RFC 0024).
|
|
282
|
+
//
|
|
283
|
+
// Bisection only, deliberately. The procedure is normative because two
|
|
284
|
+
// conforming engines must return the *same* root, and bisection is the part
|
|
285
|
+
// of this that is bit-reproducible: every step is `(lo + hi) / 2` and a
|
|
286
|
+
// comparison of products, operations IEEE 754 requires to be correctly
|
|
287
|
+
// rounded, in an order the spec fixes. Newton is not — its iterates depend on
|
|
288
|
+
// the association order of a derivative sum that no document pins, and each
|
|
289
|
+
// iterate feeds the next, so a last-ULP difference moves the returned root by
|
|
290
|
+
// more than the tolerance.
|
|
291
|
+
//
|
|
292
|
+
// The Newton pass this replaced also searched outside the bracket it claimed:
|
|
293
|
+
// `irr(-1, 20)` returned ~19.0, a 1900% return from a search documented as
|
|
294
|
+
// reaching 1000%. That is now CALC-IRR-DIVERGE, per step 5.
|
|
267
295
|
irr(args) {
|
|
268
296
|
if (args.length < 2) {
|
|
269
297
|
throw new CalcError('CALC-TYPE-001', 'irr: requires at least 2 cash flows.');
|
|
270
298
|
}
|
|
271
299
|
const flows = args.map((a, _i) => asNumber(a, 'irr'));
|
|
272
|
-
// Newton-Raphson starting at 0.1.
|
|
273
300
|
const npvAt = (r) => {
|
|
274
301
|
let acc = 0;
|
|
275
302
|
for (let t = 0; t < flows.length; t++)
|
|
276
303
|
acc += flows[t] / (1 + r) ** t;
|
|
277
304
|
return acc;
|
|
278
305
|
};
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
acc += -t * flows[t] / (1 + r) ** (t + 1);
|
|
283
|
-
return acc;
|
|
284
|
-
};
|
|
285
|
-
let r = 0.1;
|
|
286
|
-
const MAX_ITER = 100;
|
|
287
|
-
const TOL = 1e-9;
|
|
288
|
-
for (let i = 0; i < MAX_ITER; i++) {
|
|
289
|
-
const f = npvAt(r);
|
|
290
|
-
if (!Number.isFinite(f))
|
|
291
|
-
break;
|
|
292
|
-
if (Math.abs(f) < TOL)
|
|
293
|
-
return r;
|
|
294
|
-
const df = dnpvAt(r);
|
|
295
|
-
if (df === 0 || !Number.isFinite(df))
|
|
296
|
-
break;
|
|
297
|
-
const next = r - f / df;
|
|
298
|
-
if (!Number.isFinite(next) || next <= -1)
|
|
299
|
-
break;
|
|
300
|
-
if (Math.abs(next - r) < TOL)
|
|
301
|
-
return next;
|
|
302
|
-
r = next;
|
|
303
|
-
}
|
|
304
|
-
// Fallback: bisection over [-0.999, 10].
|
|
305
|
-
let lo = -0.999;
|
|
306
|
-
let hi = 10;
|
|
306
|
+
// 1. Domain. A root outside this interval is not reported.
|
|
307
|
+
let lo = IRR_BRACKET_LO;
|
|
308
|
+
let hi = IRR_BRACKET_HI;
|
|
307
309
|
let flo = npvAt(lo);
|
|
308
|
-
|
|
310
|
+
const fhi = npvAt(hi);
|
|
311
|
+
// 2. Bracket.
|
|
309
312
|
if (!Number.isFinite(flo) || !Number.isFinite(fhi) || flo * fhi > 0) {
|
|
310
|
-
throw new CalcError('CALC-IRR-DIVERGE',
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
+
throw new CalcError('CALC-IRR-DIVERGE', `irr: no sign change over the [${IRR_BRACKET_LO}, ${IRR_BRACKET_HI}] bracket (-99.9% to 1000%), so no root is reported.`);
|
|
314
|
+
}
|
|
315
|
+
// 2a. A root sitting exactly on an endpoint is the answer, and must be
|
|
316
|
+
// returned before bisecting. Bisection cannot get there: the retention test
|
|
317
|
+
// is `flo * fmid < 0`, and a `flo` of exactly zero makes that product zero
|
|
318
|
+
// for every `mid`, so the loop would walk the endpoint away from the very
|
|
319
|
+
// root it brackets and then diverge. This is the one step §VIII.3's
|
|
320
|
+
// procedure leaves implicit; see the note there.
|
|
321
|
+
//
|
|
322
|
+
// Reachable at `hi` — `1 + 10` is exact, so `npv(10)` can be exactly zero.
|
|
323
|
+
// Effectively unreachable at `lo`: `1 + (-0.999)` is `0.001000000000000001`
|
|
324
|
+
// in binary64, so `npv(lo)` for a cash flow whose true root is -99.9% lands
|
|
325
|
+
// a few ULP either side of zero rather than on it, and its sign decides
|
|
326
|
+
// whether the bracket holds at all. That is a property of the interval, not
|
|
327
|
+
// of this code — a root "exactly at -0.999" is not a well-defined binary64
|
|
328
|
+
// quantity.
|
|
329
|
+
if (flo === 0)
|
|
330
|
+
return lo;
|
|
331
|
+
if (fhi === 0)
|
|
332
|
+
return hi;
|
|
333
|
+
// 3. Bisection. 4. No polish — the bisection result is the answer.
|
|
334
|
+
for (let i = 0; i < IRR_MAX_ITER; i++) {
|
|
313
335
|
const mid = (lo + hi) / 2;
|
|
314
336
|
const fmid = npvAt(mid);
|
|
315
|
-
if (Math.abs(fmid) <
|
|
337
|
+
if (Math.abs(fmid) < IRR_VALUE_TOL || (hi - lo) / 2 < IRR_INTERVAL_TOL)
|
|
316
338
|
return mid;
|
|
317
339
|
if (flo * fmid < 0) {
|
|
318
340
|
hi = mid;
|
|
319
|
-
fhi = fmid;
|
|
320
341
|
}
|
|
321
342
|
else {
|
|
322
343
|
lo = mid;
|
|
323
344
|
flo = fmid;
|
|
324
345
|
}
|
|
325
346
|
}
|
|
326
|
-
|
|
347
|
+
// 5. Failure.
|
|
348
|
+
throw new CalcError('CALC-IRR-DIVERGE', `irr: bisection did not meet a stopping condition within ${IRR_MAX_ITER} iterations.`);
|
|
327
349
|
},
|
|
328
350
|
});
|
|
329
351
|
//# sourceMappingURL=builtins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/calc/builtins.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/calc/builtins.ts"],"names":[],"mappings":"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"}
|
package/dist/calc/errors.js
CHANGED
package/dist/calc/evaluator.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Tier-3 Calc Host — AST evaluator.
|
|
2
2
|
// Variable resolution per §VIII.2; null propagation per §VIII.2.
|
|
3
|
-
import { getSection } from '../parser.js';
|
|
3
|
+
import { getPathSegment, getSection, isBlockedSegment } from '../parser.js';
|
|
4
4
|
import { BUILTINS } from './builtins.js';
|
|
5
5
|
import { CalcError } from './errors.js';
|
|
6
6
|
const MAX_NODES = 1024;
|
|
@@ -25,7 +25,7 @@ function evalNode(expr, ctx, state) {
|
|
|
25
25
|
for (const seg of expr.segments) {
|
|
26
26
|
if (cur === null || cur === undefined)
|
|
27
27
|
return null;
|
|
28
|
-
cur = cur
|
|
28
|
+
cur = getPathSegment(cur, seg);
|
|
29
29
|
}
|
|
30
30
|
return coerceCalcValue(cur);
|
|
31
31
|
}
|
|
@@ -91,6 +91,10 @@ function evalNode(expr, ctx, state) {
|
|
|
91
91
|
}
|
|
92
92
|
// ─── Variable resolution ──────────────────────────────────────────────────────
|
|
93
93
|
function resolveIdentifier(name, ctx) {
|
|
94
|
+
// A blocked head is unresolvable for the same reason a blocked segment is:
|
|
95
|
+
// no document-authored name may reach the prototype chain.
|
|
96
|
+
if (isBlockedSegment(name))
|
|
97
|
+
return null;
|
|
94
98
|
const fm = ctx.parsed.frontmatter;
|
|
95
99
|
if (fm && Object.prototype.hasOwnProperty.call(fm, name)) {
|
|
96
100
|
return coerceCalcValue(fm[name]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/calc/evaluator.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,iEAAiE;AAEjE,OAAO,EAAW,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/calc/evaluator.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,iEAAiE;AAEjE,OAAO,EAAW,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,SAAS,GAAG,IAAI,CAAC;AAMvB,MAAM,UAAU,QAAQ,CAAC,IAAU,EAAE,GAA0B;IAC7D,MAAM,KAAK,GAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,GAA0B,EAAE,KAAgB;IACxE,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,sBAAsB,SAAS,aAAa,CAAC,CAAC;IACtF,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC;QAEpB,KAAK,OAAO;YACV,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,GAAG,GAAY,IAAI,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC;gBACnD,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,qBAAqB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,kCAAkC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtF,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;YACD,IAAI;YACJ,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,mCAAmC,OAAO,CAAC,GAAG,CAAC,CAAC;YACvF,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,wEAAwE;YACxE,yEAAyE;YACzE,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAC/B,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,aAAa,IAAI,CAAC,EAAE,4BAA4B,OAAO,IAAI,WAAW,CAAC,CAAC;gBAC/G,CAAC;gBACD,uDAAuD;gBACvD,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACrD,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAChC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,aAAa,IAAI,CAAC,EAAE,4BAA4B,OAAO,KAAK,YAAY,CAAC,CAAC;gBACjH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChG,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/B,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,0CAA0C,OAAO,IAAI,GAAG,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,SAAS,iBAAiB,CAAC,IAAY,EAAE,GAA0B;IACjE,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,WAAiD,CAAC;IACxE,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,2EAA2E;QAC3E,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAqD,CAAC;QAC/E,MAAM,KAAK,GAAG,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,SAAS,IAAI,QAAQ;YAC7E,CAAC,CAAC,QAAQ,CAAC,OAAO;YAClB,CAAC,CAAC,QAAQ,CAAC;QACb,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACvF,6EAA6E;IAC7E,2EAA2E;IAC3E,OAAO,CAAyB,CAAC;AACnC,CAAC;AAED,iFAAiF;AAEjF,SAAS,UAAU,CAAC,EAAU,EAAE,CAAY,EAAE,CAAY;IACxD,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,GAAG;YACN,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAAC;QAEvF,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QACxC,CAAC;QAED,KAAK,IAAI,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErC,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC1C,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,eAAe,EAAE,gCAAgC,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAQ,CAAqB,GAAI,CAAqB,CAAC;YACvE,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAQ,CAAqB,IAAK,CAAqB,CAAC;YACzE,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAQ,CAAqB,GAAI,CAAqB,CAAC;YACvE,OAAQ,CAAqB,IAAK,CAAqB,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAAC,CAAY,EAAE,CAAY;IAC7C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC"}
|
package/dist/calc/index.d.ts
CHANGED
|
@@ -5,10 +5,17 @@ export { BUILTINS } from './builtins.js';
|
|
|
5
5
|
export type { CalcValue, Builtin } from './builtins.js';
|
|
6
6
|
export { CalcError, calcError } from './errors.js';
|
|
7
7
|
export type { CalcErrorCode } from './errors.js';
|
|
8
|
+
export { quantizeDecimal, resolveRoundTo, DEFAULT_ROUND_TO, DEFAULT_ROUND_TO_BY_UNIT, MAX_ROUND_TO, } from './quantize.js';
|
|
8
9
|
/**
|
|
9
10
|
* Evaluate a single calculation declaration against a context.
|
|
10
11
|
* Always returns a CalcResult — exceptions from the engine are captured
|
|
11
12
|
* into the `error` field, never thrown.
|
|
13
|
+
*
|
|
14
|
+
* This is the **quantization boundary** (§VIII.5). Evaluation itself runs in
|
|
15
|
+
* unrounded binary64; the value leaving here is quantized to the declaration's
|
|
16
|
+
* effective `round_to`. Every consumer — receipts, the web editor, the CLI, the
|
|
17
|
+
* Excel converter — reaches results through this function, which is what makes
|
|
18
|
+
* one boundary sufficient.
|
|
12
19
|
*/
|
|
13
20
|
export declare function evaluateCalc(decl: ModuleCalcDecl, ctx: CalcEvaluationContext): CalcResult;
|
|
14
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/calc/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMxF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,GAAG,UAAU,CA4BzF"}
|
package/dist/calc/index.js
CHANGED
|
@@ -5,24 +5,35 @@ import { formatCurrency, formatPercent, formatRatio, formatValue } from '../form
|
|
|
5
5
|
import { CalcError } from './errors.js';
|
|
6
6
|
import { evaluate } from './evaluator.js';
|
|
7
7
|
import { parseExpression } from './parser.js';
|
|
8
|
+
import { quantizeDecimal, resolveRoundTo } from './quantize.js';
|
|
8
9
|
export { parseExpression } from './parser.js';
|
|
9
10
|
export { evaluate } from './evaluator.js';
|
|
10
11
|
export { BUILTINS } from './builtins.js';
|
|
11
12
|
export { CalcError, calcError } from './errors.js';
|
|
13
|
+
export { quantizeDecimal, resolveRoundTo, DEFAULT_ROUND_TO, DEFAULT_ROUND_TO_BY_UNIT, MAX_ROUND_TO, } from './quantize.js';
|
|
12
14
|
/**
|
|
13
15
|
* Evaluate a single calculation declaration against a context.
|
|
14
16
|
* Always returns a CalcResult — exceptions from the engine are captured
|
|
15
17
|
* into the `error` field, never thrown.
|
|
18
|
+
*
|
|
19
|
+
* This is the **quantization boundary** (§VIII.5). Evaluation itself runs in
|
|
20
|
+
* unrounded binary64; the value leaving here is quantized to the declaration's
|
|
21
|
+
* effective `round_to`. Every consumer — receipts, the web editor, the CLI, the
|
|
22
|
+
* Excel converter — reaches results through this function, which is what makes
|
|
23
|
+
* one boundary sufficient.
|
|
16
24
|
*/
|
|
17
25
|
export function evaluateCalc(decl, ctx) {
|
|
26
|
+
const roundTo = resolveRoundTo(decl);
|
|
18
27
|
try {
|
|
19
28
|
const ast = parseExpression(decl.formula);
|
|
20
|
-
const
|
|
29
|
+
const raw = evaluate(ast, ctx);
|
|
30
|
+
const value = typeof raw === 'number' ? quantizeDecimal(raw, roundTo) : raw;
|
|
21
31
|
return {
|
|
22
32
|
calc_id: decl.id,
|
|
23
33
|
ok: true,
|
|
24
34
|
value: value,
|
|
25
35
|
...(decl.unit ? { unit: decl.unit } : {}),
|
|
36
|
+
round_to: roundTo,
|
|
26
37
|
display: formatForDisplay(value, decl.unit),
|
|
27
38
|
};
|
|
28
39
|
}
|
|
@@ -35,6 +46,7 @@ export function evaluateCalc(decl, ctx) {
|
|
|
35
46
|
ok: false,
|
|
36
47
|
value: null,
|
|
37
48
|
...(decl.unit ? { unit: decl.unit } : {}),
|
|
49
|
+
round_to: roundTo,
|
|
38
50
|
error: proto,
|
|
39
51
|
};
|
|
40
52
|
}
|
package/dist/calc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,2EAA2E;AAC3E,yEAAyE;AAEzE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Largest `round_to` a declaration may state. Beyond ~15 significant decimal
|
|
3
|
+
* digits a binary64 has no fractional information left to quantize, so a larger
|
|
4
|
+
* value would describe a precision the representation cannot carry.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MAX_ROUND_TO = 12;
|
|
7
|
+
/**
|
|
8
|
+
* Normative default decimal places by declared `unit`, applied when a
|
|
9
|
+
* calculation omits `round_to`. Table per UW_PROTOCOL_v1.md §VIII.5.
|
|
10
|
+
*
|
|
11
|
+
* The values follow from what the unit means rather than from taste. Money is
|
|
12
|
+
* quantized to cents. A ratio (`x`, e.g. DSCR) is quoted to four places by
|
|
13
|
+
* every lender term sheet the format targets. Rates are *fractions* everywhere
|
|
14
|
+
* in this repo (`0.0551`, not `5.51`), so six places on a fraction is four
|
|
15
|
+
* places on the percentage a human reads — the same precision, one unit shift.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_ROUND_TO_BY_UNIT: Readonly<Record<string, number>>;
|
|
18
|
+
/**
|
|
19
|
+
* Default for a calculation whose `unit` is absent or not in the table. Six
|
|
20
|
+
* places is the residual case, chosen to match the rate default rather than to
|
|
21
|
+
* invent a second convention.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_ROUND_TO = 6;
|
|
24
|
+
/**
|
|
25
|
+
* The effective decimal places for a calculation declaration: its own
|
|
26
|
+
* `round_to` when stated, otherwise the unit default, otherwise
|
|
27
|
+
* {@link DEFAULT_ROUND_TO}. Total by construction — §VIII.5 deliberately has no
|
|
28
|
+
* "unspecified precision" mode, because two implementers reading an
|
|
29
|
+
* unspecified spec do not produce the same receipt digest.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveRoundTo(decl: {
|
|
32
|
+
unit?: string;
|
|
33
|
+
round_to?: number;
|
|
34
|
+
}): number;
|
|
35
|
+
/**
|
|
36
|
+
* Quantize `n` to `decimals` decimal places, half away from zero.
|
|
37
|
+
*
|
|
38
|
+
* Half-away-from-zero is the rule Excel's `ROUND` implements, which is the
|
|
39
|
+
* whole reason parity is achievable: `-2.5` quantizes to `-3`, not to `-2` the
|
|
40
|
+
* way JavaScript's `Math.round` would give.
|
|
41
|
+
*
|
|
42
|
+
* The scaling goes through a decimal string rather than a multiply by `10**d`,
|
|
43
|
+
* and that detail is load-bearing. Multiplying reintroduces exactly the binary
|
|
44
|
+
* artifact the caller asked to remove: `1.005 * 100` is `100.49999999999999`,
|
|
45
|
+
* so the naive form quantizes `1.005` to `1.00` while Excel gives `1.01` — a
|
|
46
|
+
* silent, off-by-a-cent divergence in the one direction the format promises
|
|
47
|
+
* agreement. `Number('1.005e2')` is correctly rounded from the decimal literal
|
|
48
|
+
* and yields `100.5` exactly, so both engines land on `1.01`.
|
|
49
|
+
*
|
|
50
|
+
* Non-finite input is a programmer error at this layer: the evaluator rejects
|
|
51
|
+
* division by zero (`CALC-DIV-ZERO`) and the canonicalizer refuses to serialize
|
|
52
|
+
* a non-finite number, so an Infinity reaching here means an upstream guard was
|
|
53
|
+
* removed.
|
|
54
|
+
*/
|
|
55
|
+
export declare function quantizeDecimal(n: number, decimals: number): number;
|
|
56
|
+
//# sourceMappingURL=quantize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quantize.d.ts","sourceRoot":"","sources":["../../src/calc/quantize.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIpE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOjF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoCnE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Tier-3 Calc Host — the quantization boundary.
|
|
2
|
+
// Normative model: UW_PROTOCOL_v1.md §VIII.5 ("Numeric model").
|
|
3
|
+
//
|
|
4
|
+
// The engine evaluates in IEEE-754 binary64 and does *not* round intermediate
|
|
5
|
+
// values. A calculation's **reported** value is quantized here, at exactly one
|
|
6
|
+
// place, on its way out of `evaluateCalc()`.
|
|
7
|
+
//
|
|
8
|
+
// Why this file has to exist. Before RFC 0023 there was no quantization step at
|
|
9
|
+
// all, and two mechanisms disagreed about the same numbers: `receipts.ts`
|
|
10
|
+
// compared a stated result against recomputation with a 1e-6 tolerance, while
|
|
11
|
+
// `results_digest` hashed those same raw doubles bit-exactly. A last-ULP
|
|
12
|
+
// difference therefore passed the tolerant check and failed the exact one, and
|
|
13
|
+
// the failure was reported as *corruption*. Quantizing before either check runs
|
|
14
|
+
// removes the disagreement by construction rather than by loosening the digest.
|
|
15
|
+
//
|
|
16
|
+
// The other consumer is Excel. `packs/excel-emit.ts` wraps each emitted formula
|
|
17
|
+
// in `ROUND(expr, round_to)` using the same decimal places, which is why the
|
|
18
|
+
// Excel↔evaluator invariant can now be asserted as *exact* equality instead of
|
|
19
|
+
// agreement to six decimals.
|
|
20
|
+
import { CalcError } from './errors.js';
|
|
21
|
+
/**
|
|
22
|
+
* Largest `round_to` a declaration may state. Beyond ~15 significant decimal
|
|
23
|
+
* digits a binary64 has no fractional information left to quantize, so a larger
|
|
24
|
+
* value would describe a precision the representation cannot carry.
|
|
25
|
+
*/
|
|
26
|
+
export const MAX_ROUND_TO = 12;
|
|
27
|
+
/**
|
|
28
|
+
* Normative default decimal places by declared `unit`, applied when a
|
|
29
|
+
* calculation omits `round_to`. Table per UW_PROTOCOL_v1.md §VIII.5.
|
|
30
|
+
*
|
|
31
|
+
* The values follow from what the unit means rather than from taste. Money is
|
|
32
|
+
* quantized to cents. A ratio (`x`, e.g. DSCR) is quoted to four places by
|
|
33
|
+
* every lender term sheet the format targets. Rates are *fractions* everywhere
|
|
34
|
+
* in this repo (`0.0551`, not `5.51`), so six places on a fraction is four
|
|
35
|
+
* places on the percentage a human reads — the same precision, one unit shift.
|
|
36
|
+
*/
|
|
37
|
+
export const DEFAULT_ROUND_TO_BY_UNIT = Object.freeze({
|
|
38
|
+
$: 2,
|
|
39
|
+
'%': 6,
|
|
40
|
+
x: 4,
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Default for a calculation whose `unit` is absent or not in the table. Six
|
|
44
|
+
* places is the residual case, chosen to match the rate default rather than to
|
|
45
|
+
* invent a second convention.
|
|
46
|
+
*/
|
|
47
|
+
export const DEFAULT_ROUND_TO = 6;
|
|
48
|
+
/**
|
|
49
|
+
* The effective decimal places for a calculation declaration: its own
|
|
50
|
+
* `round_to` when stated, otherwise the unit default, otherwise
|
|
51
|
+
* {@link DEFAULT_ROUND_TO}. Total by construction — §VIII.5 deliberately has no
|
|
52
|
+
* "unspecified precision" mode, because two implementers reading an
|
|
53
|
+
* unspecified spec do not produce the same receipt digest.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveRoundTo(decl) {
|
|
56
|
+
if (decl.round_to !== undefined)
|
|
57
|
+
return decl.round_to;
|
|
58
|
+
if (decl.unit !== undefined) {
|
|
59
|
+
const byUnit = DEFAULT_ROUND_TO_BY_UNIT[decl.unit];
|
|
60
|
+
if (byUnit !== undefined)
|
|
61
|
+
return byUnit;
|
|
62
|
+
}
|
|
63
|
+
return DEFAULT_ROUND_TO;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Quantize `n` to `decimals` decimal places, half away from zero.
|
|
67
|
+
*
|
|
68
|
+
* Half-away-from-zero is the rule Excel's `ROUND` implements, which is the
|
|
69
|
+
* whole reason parity is achievable: `-2.5` quantizes to `-3`, not to `-2` the
|
|
70
|
+
* way JavaScript's `Math.round` would give.
|
|
71
|
+
*
|
|
72
|
+
* The scaling goes through a decimal string rather than a multiply by `10**d`,
|
|
73
|
+
* and that detail is load-bearing. Multiplying reintroduces exactly the binary
|
|
74
|
+
* artifact the caller asked to remove: `1.005 * 100` is `100.49999999999999`,
|
|
75
|
+
* so the naive form quantizes `1.005` to `1.00` while Excel gives `1.01` — a
|
|
76
|
+
* silent, off-by-a-cent divergence in the one direction the format promises
|
|
77
|
+
* agreement. `Number('1.005e2')` is correctly rounded from the decimal literal
|
|
78
|
+
* and yields `100.5` exactly, so both engines land on `1.01`.
|
|
79
|
+
*
|
|
80
|
+
* Non-finite input is a programmer error at this layer: the evaluator rejects
|
|
81
|
+
* division by zero (`CALC-DIV-ZERO`) and the canonicalizer refuses to serialize
|
|
82
|
+
* a non-finite number, so an Infinity reaching here means an upstream guard was
|
|
83
|
+
* removed.
|
|
84
|
+
*/
|
|
85
|
+
export function quantizeDecimal(n, decimals) {
|
|
86
|
+
// Negative `decimals` quantizes to tens/hundreds, matching Excel's
|
|
87
|
+
// `ROUND(1234, -2) = 1200`. A declaration's `round_to` is separately
|
|
88
|
+
// constrained to be non-negative by the manifest schema, so the wider domain
|
|
89
|
+
// here exists only for the `round()` builtin, which has always accepted it.
|
|
90
|
+
if (!Number.isInteger(decimals) || decimals < -MAX_ROUND_TO || decimals > MAX_ROUND_TO) {
|
|
91
|
+
throw new CalcError('CALC-TYPE-001', `quantize: decimals must be an integer in [${-MAX_ROUND_TO}, ${MAX_ROUND_TO}], got ${decimals}.`);
|
|
92
|
+
}
|
|
93
|
+
if (!Number.isFinite(n)) {
|
|
94
|
+
throw new CalcError('CALC-TYPE-001', `quantize: cannot quantize non-finite number ${n}.`);
|
|
95
|
+
}
|
|
96
|
+
const sign = n < 0 ? -1 : 1;
|
|
97
|
+
const magnitude = Math.abs(n);
|
|
98
|
+
const shifted = Number(`${magnitude}e${decimals}`);
|
|
99
|
+
// An integral shifted value has no fractional part to round, so `n` is
|
|
100
|
+
// already quantized and is returned unchanged. This is the correct answer
|
|
101
|
+
// rather than a fallback, and it subsumes the large-magnitude cases: past
|
|
102
|
+
// 2^53 every double is integral, which is also the range where
|
|
103
|
+
// `${magnitude}` renders exponentially ("1e+21") and the string shift could
|
|
104
|
+
// not reassemble it. Guarding on integrality rather than on a magnitude
|
|
105
|
+
// threshold also avoids `MAX_SAFE_INTEGER + 0.5` rounding *up* to
|
|
106
|
+
// `MAX_SAFE_INTEGER + 1` before `Math.floor` ever sees it.
|
|
107
|
+
const result = !Number.isFinite(shifted) || Number.isInteger(shifted)
|
|
108
|
+
? n
|
|
109
|
+
: sign * Number(`${Math.floor(shifted + 0.5)}e${-decimals}`);
|
|
110
|
+
// `-0` would otherwise survive two ways: as input, and from a small negative
|
|
111
|
+
// that quantizes to zero. The exact canonicalizer already renders it as "0",
|
|
112
|
+
// but returning it makes `Object.is(result, 0)` false for callers doing their
|
|
113
|
+
// own comparisons, so the sign is dropped once here rather than at each one.
|
|
114
|
+
return result === 0 ? 0 : result;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=quantize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quantize.js","sourceRoot":"","sources":["../../src/calc/quantize.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gEAAgE;AAChE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,6CAA6C;AAC7C,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC,MAAM,CAAC,MAAM,CAAC;IACtF,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,CAAC;IACN,CAAC,EAAE,CAAC;CACL,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAA0C;IACvE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,QAAgB;IACzD,mEAAmE;IACnE,qEAAqE;IACrE,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,YAAY,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;QACvF,MAAM,IAAI,SAAS,CACjB,eAAe,EACf,6CAA6C,CAAC,YAAY,KAAK,YAAY,UAAU,QAAQ,GAAG,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,+CAA+C,CAAC,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IAEnD,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,+DAA+D;IAC/D,4EAA4E;IAC5E,wEAAwE;IACxE,kEAAkE;IAClE,2DAA2D;IAC3D,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE/D,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnC,CAAC"}
|