@stevenvo780/st-lang 4.7.0 → 4.9.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/dist/logic/profiles/quantum/index.d.ts +153 -0
- package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
- package/dist/logic/profiles/quantum/index.js +788 -0
- package/dist/logic/profiles/quantum/index.js.map +1 -0
- package/dist/namespaces/reasoning.d.ts +3 -1
- package/dist/namespaces/reasoning.d.ts.map +1 -1
- package/dist/namespaces/reasoning.js +5 -1
- package/dist/namespaces/reasoning.js.map +1 -1
- package/dist/proof-systems/certificate/canonical.d.ts +18 -0
- package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
- package/dist/proof-systems/certificate/canonical.js +79 -0
- package/dist/proof-systems/certificate/canonical.js.map +1 -0
- package/dist/proof-systems/certificate/generate.d.ts +39 -0
- package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
- package/dist/proof-systems/certificate/generate.js +259 -0
- package/dist/proof-systems/certificate/generate.js.map +1 -0
- package/dist/proof-systems/certificate/index.d.ts +7 -0
- package/dist/proof-systems/certificate/index.d.ts.map +1 -0
- package/dist/proof-systems/certificate/index.js +23 -0
- package/dist/proof-systems/certificate/index.js.map +1 -0
- package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
- package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
- package/dist/proof-systems/certificate/lfsc.js +395 -0
- package/dist/proof-systems/certificate/lfsc.js.map +1 -0
- package/dist/proof-systems/certificate/rules.d.ts +8 -0
- package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
- package/dist/proof-systems/certificate/rules.js +369 -0
- package/dist/proof-systems/certificate/rules.js.map +1 -0
- package/dist/proof-systems/certificate/types.d.ts +114 -0
- package/dist/proof-systems/certificate/types.d.ts.map +1 -0
- package/dist/proof-systems/certificate/types.js +18 -0
- package/dist/proof-systems/certificate/types.js.map +1 -0
- package/dist/proof-systems/certificate/verify.d.ts +20 -0
- package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
- package/dist/proof-systems/certificate/verify.js +171 -0
- package/dist/proof-systems/certificate/verify.js.map +1 -0
- package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
- package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/analyze.js +113 -0
- package/dist/reasoning/ban-logic/analyze.js.map +1 -0
- package/dist/reasoning/ban-logic/index.d.ts +7 -0
- package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/index.js +66 -0
- package/dist/reasoning/ban-logic/index.js.map +1 -0
- package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
- package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/protocols.js +219 -0
- package/dist/reasoning/ban-logic/protocols.js.map +1 -0
- package/dist/reasoning/ban-logic/rules.d.ts +83 -0
- package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/rules.js +409 -0
- package/dist/reasoning/ban-logic/rules.js.map +1 -0
- package/dist/reasoning/ban-logic/terms.d.ts +26 -0
- package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/terms.js +262 -0
- package/dist/reasoning/ban-logic/terms.js.map +1 -0
- package/dist/reasoning/ban-logic/types.d.ts +107 -0
- package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/types.js +27 -0
- package/dist/reasoning/ban-logic/types.js.map +1 -0
- package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
- package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
- package/dist/reasoning/combinatorial-games/index.js +377 -0
- package/dist/reasoning/combinatorial-games/index.js.map +1 -0
- package/dist/reasoning/differential-privacy/index.d.ts +121 -0
- package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
- package/dist/reasoning/differential-privacy/index.js +417 -0
- package/dist/reasoning/differential-privacy/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.js +179 -0
- package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
- package/dist/reasoning/mechanism-design/index.d.ts +5 -0
- package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/index.js +39 -0
- package/dist/reasoning/mechanism-design/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.js +253 -0
- package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
- package/dist/reasoning/mechanism-design/types.d.ts +44 -0
- package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/types.js +22 -0
- package/dist/reasoning/mechanism-design/types.js.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.js +305 -0
- package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
- package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
- package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/distributions.js +207 -0
- package/dist/reasoning/probabilistic/distributions.js.map +1 -0
- package/dist/reasoning/probabilistic/examples.d.ts +31 -0
- package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/examples.js +85 -0
- package/dist/reasoning/probabilistic/examples.js.map +1 -0
- package/dist/reasoning/probabilistic/index.d.ts +6 -0
- package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/index.js +42 -0
- package/dist/reasoning/probabilistic/index.js.map +1 -0
- package/dist/reasoning/probabilistic/inference.d.ts +45 -0
- package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/inference.js +579 -0
- package/dist/reasoning/probabilistic/inference.js.map +1 -0
- package/dist/reasoning/probabilistic/types.d.ts +153 -0
- package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/types.js +37 -0
- package/dist/reasoning/probabilistic/types.js.map +1 -0
- package/dist/solver/smt-z3/index.d.ts +3 -0
- package/dist/solver/smt-z3/index.d.ts.map +1 -0
- package/dist/solver/smt-z3/index.js +11 -0
- package/dist/solver/smt-z3/index.js.map +1 -0
- package/dist/solver/smt-z3/types.d.ts +52 -0
- package/dist/solver/smt-z3/types.d.ts.map +1 -0
- package/dist/solver/smt-z3/types.js +6 -0
- package/dist/solver/smt-z3/types.js.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
- package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
- package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
- package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
- package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
- package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
- package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
- package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
- package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
- package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
- package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
- package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
- package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
- package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
- package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
- package/dist/tests/type-theory/effects/effects.test.js +242 -0
- package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
- package/dist/tooling/mathlib/group.d.ts +27 -0
- package/dist/tooling/mathlib/group.d.ts.map +1 -0
- package/dist/tooling/mathlib/group.js +89 -0
- package/dist/tooling/mathlib/group.js.map +1 -0
- package/dist/tooling/mathlib/index.d.ts +8 -0
- package/dist/tooling/mathlib/index.d.ts.map +1 -0
- package/dist/tooling/mathlib/index.js +40 -0
- package/dist/tooling/mathlib/index.js.map +1 -0
- package/dist/tooling/mathlib/instances.d.ts +29 -0
- package/dist/tooling/mathlib/instances.d.ts.map +1 -0
- package/dist/tooling/mathlib/instances.js +139 -0
- package/dist/tooling/mathlib/instances.js.map +1 -0
- package/dist/tooling/mathlib/lemmas.d.ts +3 -0
- package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
- package/dist/tooling/mathlib/lemmas.js +72 -0
- package/dist/tooling/mathlib/lemmas.js.map +1 -0
- package/dist/tooling/mathlib/order.d.ts +29 -0
- package/dist/tooling/mathlib/order.d.ts.map +1 -0
- package/dist/tooling/mathlib/order.js +91 -0
- package/dist/tooling/mathlib/order.js.map +1 -0
- package/dist/tooling/mathlib/ring.d.ts +15 -0
- package/dist/tooling/mathlib/ring.d.ts.map +1 -0
- package/dist/tooling/mathlib/ring.js +91 -0
- package/dist/tooling/mathlib/ring.js.map +1 -0
- package/dist/tooling/mathlib/types.d.ts +62 -0
- package/dist/tooling/mathlib/types.d.ts.map +1 -0
- package/dist/tooling/mathlib/types.js +7 -0
- package/dist/tooling/mathlib/types.js.map +1 -0
- package/dist/tooling/proof-guidance/features.d.ts +10 -0
- package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/features.js +97 -0
- package/dist/tooling/proof-guidance/features.js.map +1 -0
- package/dist/tooling/proof-guidance/index.d.ts +5 -0
- package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/index.js +25 -0
- package/dist/tooling/proof-guidance/index.js.map +1 -0
- package/dist/tooling/proof-guidance/model.d.ts +42 -0
- package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/model.js +149 -0
- package/dist/tooling/proof-guidance/model.js.map +1 -0
- package/dist/tooling/proof-guidance/search.d.ts +7 -0
- package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/search.js +102 -0
- package/dist/tooling/proof-guidance/search.js.map +1 -0
- package/dist/tooling/proof-guidance/types.d.ts +77 -0
- package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/types.js +8 -0
- package/dist/tooling/proof-guidance/types.js.map +1 -0
- package/dist/type-theory/cubical/equality.d.ts +4 -0
- package/dist/type-theory/cubical/equality.d.ts.map +1 -0
- package/dist/type-theory/cubical/equality.js +78 -0
- package/dist/type-theory/cubical/equality.js.map +1 -0
- package/dist/type-theory/cubical/index.d.ts +14 -0
- package/dist/type-theory/cubical/index.d.ts.map +1 -0
- package/dist/type-theory/cubical/index.js +71 -0
- package/dist/type-theory/cubical/index.js.map +1 -0
- package/dist/type-theory/cubical/infer.d.ts +18 -0
- package/dist/type-theory/cubical/infer.d.ts.map +1 -0
- package/dist/type-theory/cubical/infer.js +241 -0
- package/dist/type-theory/cubical/infer.js.map +1 -0
- package/dist/type-theory/cubical/interval.d.ts +12 -0
- package/dist/type-theory/cubical/interval.d.ts.map +1 -0
- package/dist/type-theory/cubical/interval.js +118 -0
- package/dist/type-theory/cubical/interval.js.map +1 -0
- package/dist/type-theory/cubical/normalize.d.ts +5 -0
- package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
- package/dist/type-theory/cubical/normalize.js +191 -0
- package/dist/type-theory/cubical/normalize.js.map +1 -0
- package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
- package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
- package/dist/type-theory/cubical/path-algebra.js +109 -0
- package/dist/type-theory/cubical/path-algebra.js.map +1 -0
- package/dist/type-theory/cubical/substitute.d.ts +3 -0
- package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
- package/dist/type-theory/cubical/substitute.js +109 -0
- package/dist/type-theory/cubical/substitute.js.map +1 -0
- package/dist/type-theory/cubical/types.d.ts +77 -0
- package/dist/type-theory/cubical/types.d.ts.map +1 -0
- package/dist/type-theory/cubical/types.js +258 -0
- package/dist/type-theory/cubical/types.js.map +1 -0
- package/dist/type-theory/effects/core.d.ts +27 -0
- package/dist/type-theory/effects/core.d.ts.map +1 -0
- package/dist/type-theory/effects/core.js +79 -0
- package/dist/type-theory/effects/core.js.map +1 -0
- package/dist/type-theory/effects/exception.d.ts +18 -0
- package/dist/type-theory/effects/exception.d.ts.map +1 -0
- package/dist/type-theory/effects/exception.js +59 -0
- package/dist/type-theory/effects/exception.js.map +1 -0
- package/dist/type-theory/effects/index.d.ts +11 -0
- package/dist/type-theory/effects/index.d.ts.map +1 -0
- package/dist/type-theory/effects/index.js +50 -0
- package/dist/type-theory/effects/index.js.map +1 -0
- package/dist/type-theory/effects/reader.d.ts +20 -0
- package/dist/type-theory/effects/reader.d.ts.map +1 -0
- package/dist/type-theory/effects/reader.js +62 -0
- package/dist/type-theory/effects/reader.js.map +1 -0
- package/dist/type-theory/effects/state.d.ts +31 -0
- package/dist/type-theory/effects/state.d.ts.map +1 -0
- package/dist/type-theory/effects/state.js +91 -0
- package/dist/type-theory/effects/state.js.map +1 -0
- package/dist/type-theory/effects/types.d.ts +45 -0
- package/dist/type-theory/effects/types.d.ts.map +1 -0
- package/dist/type-theory/effects/types.js +21 -0
- package/dist/type-theory/effects/types.js.map +1 -0
- package/dist/type-theory/effects/writer.d.ts +30 -0
- package/dist/type-theory/effects/writer.d.ts.map +1 -0
- package/dist/type-theory/effects/writer.js +79 -0
- package/dist/type-theory/effects/writer.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Probabilistic Programming — Inference engines
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Cuatro backends:
|
|
7
|
+
//
|
|
8
|
+
// 1. `enumerate` — enumeración exacta para programas con
|
|
9
|
+
// soporte discreto finito. Recorre el
|
|
10
|
+
// árbol de ramificaciones, multiplica
|
|
11
|
+
// probabilidades y agrega por valor de
|
|
12
|
+
// retorno. Exacto, costo O(|soporte|).
|
|
13
|
+
// 2. `rejectionSample` — muestreo simple del prior; descarta
|
|
14
|
+
// trazas con `observe(false)`. Sesgo 0,
|
|
15
|
+
// varianza alta si la aceptación es baja.
|
|
16
|
+
// 3. `importanceSample` — muestreo del prior con pesos
|
|
17
|
+
// log-acumulados; usa `factor()` y el
|
|
18
|
+
// log-pdf de las observes "soft" como
|
|
19
|
+
// log-weight. Reporta ESS para diagnóstico.
|
|
20
|
+
// 4. `metropolisHastings` — single-site MCMC: re-muestrea uno de
|
|
21
|
+
// los sample sites por iteración y acepta
|
|
22
|
+
// según ratio de pesos. Devuelve cadena
|
|
23
|
+
// tras burn-in y thinning.
|
|
24
|
+
//
|
|
25
|
+
// Todos usan el mismo `PProgram<T>` y el mismo `Sampler` interface.
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.enumerate = enumerate;
|
|
28
|
+
exports.rejectionSample = rejectionSample;
|
|
29
|
+
exports.importanceSample = importanceSample;
|
|
30
|
+
exports.metropolisHastings = metropolisHastings;
|
|
31
|
+
const distributions_1 = require("./distributions");
|
|
32
|
+
// ── Helpers de resumen ───────────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Determina si todos los samples son numéricos (incluyendo booleanos,
|
|
35
|
+
* que se interpretan como 0/1). Solo entonces tiene sentido calcular
|
|
36
|
+
* media/std/quantiles continuos.
|
|
37
|
+
*/
|
|
38
|
+
function allNumericLike(samples) {
|
|
39
|
+
if (samples.length === 0)
|
|
40
|
+
return false;
|
|
41
|
+
for (const s of samples) {
|
|
42
|
+
if (typeof s !== 'number' && typeof s !== 'boolean')
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
function toNumber(v) {
|
|
48
|
+
if (typeof v === 'boolean')
|
|
49
|
+
return v ? 1 : 0;
|
|
50
|
+
return v;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Histograma por igualdad estructural. Para tipos primitivos usa
|
|
54
|
+
* `Map.set(value, count + 1)`. Para objetos/arrays usa JSON.stringify
|
|
55
|
+
* como clave canónica — suficiente para los casos típicos de tests.
|
|
56
|
+
*/
|
|
57
|
+
function buildHistogram(samples, weights) {
|
|
58
|
+
const hist = new Map();
|
|
59
|
+
// Para objetos, normalizamos via JSON; mantenemos un map de
|
|
60
|
+
// clave canónica → valor original para devolver el objeto real.
|
|
61
|
+
const canonicalToValue = new Map();
|
|
62
|
+
const isObjectLike = (v) => v !== null && (typeof v === 'object' || Array.isArray(v));
|
|
63
|
+
let totalW = 0;
|
|
64
|
+
for (let i = 0; i < samples.length; i++) {
|
|
65
|
+
const w = weights ? (weights[i] ?? 0) : 1;
|
|
66
|
+
totalW += w;
|
|
67
|
+
}
|
|
68
|
+
if (totalW <= 0)
|
|
69
|
+
return hist;
|
|
70
|
+
for (let i = 0; i < samples.length; i++) {
|
|
71
|
+
const s = samples[i];
|
|
72
|
+
const w = (weights ? (weights[i] ?? 0) : 1) / totalW;
|
|
73
|
+
if (isObjectLike(s)) {
|
|
74
|
+
const key = JSON.stringify(s);
|
|
75
|
+
if (!canonicalToValue.has(key))
|
|
76
|
+
canonicalToValue.set(key, s);
|
|
77
|
+
const canonical = canonicalToValue.get(key);
|
|
78
|
+
hist.set(canonical, (hist.get(canonical) ?? 0) + w);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
hist.set(s, (hist.get(s) ?? 0) + w);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return hist;
|
|
85
|
+
}
|
|
86
|
+
function computeQuantiles(sorted, qs) {
|
|
87
|
+
const out = {};
|
|
88
|
+
if (sorted.length === 0)
|
|
89
|
+
return out;
|
|
90
|
+
for (const q of qs) {
|
|
91
|
+
const idx = Math.min(sorted.length - 1, Math.max(0, Math.floor(q * (sorted.length - 1))));
|
|
92
|
+
out[q] = sorted[idx];
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
function summarize(samples, opts = {}) {
|
|
97
|
+
const histogram = buildHistogram(samples, opts.weights);
|
|
98
|
+
const summary = { samples, histogram };
|
|
99
|
+
if (opts.ess !== undefined)
|
|
100
|
+
summary.ess = opts.ess;
|
|
101
|
+
if (opts.accepted !== undefined) {
|
|
102
|
+
summary.numAccepted = opts.accepted;
|
|
103
|
+
if (opts.total !== undefined && opts.total > 0) {
|
|
104
|
+
summary.acceptanceRate = opts.accepted / opts.total;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (opts.total !== undefined)
|
|
108
|
+
summary.totalAttempts = opts.total;
|
|
109
|
+
if (allNumericLike(samples)) {
|
|
110
|
+
const nums = samples.map(toNumber);
|
|
111
|
+
const weights = opts.weights;
|
|
112
|
+
let sumW = 0;
|
|
113
|
+
if (weights) {
|
|
114
|
+
for (let i = 0; i < nums.length; i++)
|
|
115
|
+
sumW += weights[i] ?? 0;
|
|
116
|
+
}
|
|
117
|
+
if (weights && sumW > 0) {
|
|
118
|
+
let mean = 0;
|
|
119
|
+
for (let i = 0; i < nums.length; i++) {
|
|
120
|
+
mean += (nums[i] ?? 0) * ((weights[i] ?? 0) / sumW);
|
|
121
|
+
}
|
|
122
|
+
let varSum = 0;
|
|
123
|
+
for (let i = 0; i < nums.length; i++) {
|
|
124
|
+
const d = (nums[i] ?? 0) - mean;
|
|
125
|
+
varSum += d * d * ((weights[i] ?? 0) / sumW);
|
|
126
|
+
}
|
|
127
|
+
summary.mean = mean;
|
|
128
|
+
summary.std = Math.sqrt(varSum);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const mean = nums.reduce((s, x) => s + x, 0) / nums.length;
|
|
132
|
+
const variance = nums.reduce((s, x) => s + (x - mean) * (x - mean), 0) / Math.max(1, nums.length - 1);
|
|
133
|
+
summary.mean = mean;
|
|
134
|
+
summary.std = Math.sqrt(variance);
|
|
135
|
+
}
|
|
136
|
+
const sorted = nums.slice().sort((a, b) => a - b);
|
|
137
|
+
summary.quantiles = computeQuantiles(sorted, [0.025, 0.5, 0.975]);
|
|
138
|
+
}
|
|
139
|
+
return summary;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Enumera todas las trayectorias del programa, multiplicando la
|
|
143
|
+
* probabilidad de cada decisión discreta y descartando ramas con
|
|
144
|
+
* `observe(false)`. Soporta `factor(logW)` agregando exp(logW) al
|
|
145
|
+
* peso. No soporta distribuciones continuas (uniform, normal) ni
|
|
146
|
+
* `poisson` — lanza error si las encuentra.
|
|
147
|
+
*
|
|
148
|
+
* `maxStates` protege de explosión combinatoria: corta la
|
|
149
|
+
* enumeración cuando el número de ramas pendientes la supera.
|
|
150
|
+
*/
|
|
151
|
+
function enumerate(program, maxStates = 100_000) {
|
|
152
|
+
// Empezamos con una sola rama vacía (peso 1).
|
|
153
|
+
let frontier = [{ choices: [], weight: 1 }];
|
|
154
|
+
const completed = [];
|
|
155
|
+
let safetyCounter = 0;
|
|
156
|
+
while (frontier.length > 0) {
|
|
157
|
+
safetyCounter += frontier.length;
|
|
158
|
+
if (safetyCounter > maxStates) {
|
|
159
|
+
throw new Error(`enumerate: superado el límite de ${maxStates} estados; ` +
|
|
160
|
+
'usá rejection/importance/MH para soporte grande.');
|
|
161
|
+
}
|
|
162
|
+
const nextFrontier = [];
|
|
163
|
+
for (const path of frontier) {
|
|
164
|
+
const state = {
|
|
165
|
+
choices: path.choices,
|
|
166
|
+
weight: path.weight,
|
|
167
|
+
cursor: 0,
|
|
168
|
+
};
|
|
169
|
+
const result = runEnumPath(program, state, nextFrontier);
|
|
170
|
+
if (result !== undefined) {
|
|
171
|
+
completed.push({ value: result.value, weight: result.weight });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
frontier = nextFrontier;
|
|
175
|
+
}
|
|
176
|
+
// Normalizar y montar samples + weights.
|
|
177
|
+
let total = 0;
|
|
178
|
+
for (const c of completed)
|
|
179
|
+
total += c.weight;
|
|
180
|
+
if (total <= 0) {
|
|
181
|
+
// Toda la masa fue descartada por observes.
|
|
182
|
+
return {
|
|
183
|
+
samples: [],
|
|
184
|
+
histogram: new Map(),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const samples = completed.map((c) => c.value);
|
|
188
|
+
const weights = completed.map((c) => c.weight / total);
|
|
189
|
+
return summarize(samples, { weights });
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Ejecuta el programa siguiendo una ruta de decisiones pre-elegidas.
|
|
193
|
+
* Cuando el programa pide un `sample` y la ruta ya no tiene más
|
|
194
|
+
* decisiones, ramifica: empuja TODAS las posibles continuaciones
|
|
195
|
+
* al frontier y aborta la ejecución actual con `_BRANCH`.
|
|
196
|
+
*
|
|
197
|
+
* Devuelve `{value, weight}` si la ruta terminó exitosamente, o
|
|
198
|
+
* `undefined` si fue descartada (observe falso, factor -inf, o
|
|
199
|
+
* ramificó hacia el frontier).
|
|
200
|
+
*/
|
|
201
|
+
function runEnumPath(program, state, frontier) {
|
|
202
|
+
// Excepciones internas para señalizar (a) que la ruta debe
|
|
203
|
+
// ramificarse al frontier sin continuar la ejecución, y (b) que
|
|
204
|
+
// la traza es inconsistente (observe falso o factor -inf).
|
|
205
|
+
class BranchException extends Error {
|
|
206
|
+
constructor() {
|
|
207
|
+
super('branch');
|
|
208
|
+
this.name = 'BranchException';
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
class RejectException extends Error {
|
|
212
|
+
constructor() {
|
|
213
|
+
super('reject');
|
|
214
|
+
this.name = 'RejectException';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const sampler = {
|
|
218
|
+
sample(dist) {
|
|
219
|
+
if (state.cursor < state.choices.length) {
|
|
220
|
+
const v = state.choices[state.cursor];
|
|
221
|
+
state.cursor += 1;
|
|
222
|
+
return v;
|
|
223
|
+
}
|
|
224
|
+
// Ramificar: agregar todos los valores del soporte al frontier.
|
|
225
|
+
const support = (0, distributions_1.enumerateSupport)(dist);
|
|
226
|
+
for (const [value, p] of support) {
|
|
227
|
+
if (p <= 0)
|
|
228
|
+
continue;
|
|
229
|
+
frontier.push({
|
|
230
|
+
choices: [...state.choices, value],
|
|
231
|
+
weight: state.weight * p,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
throw new BranchException();
|
|
235
|
+
},
|
|
236
|
+
observe(condition) {
|
|
237
|
+
if (!condition)
|
|
238
|
+
throw new RejectException();
|
|
239
|
+
},
|
|
240
|
+
factor(logWeight) {
|
|
241
|
+
if (logWeight === -Infinity)
|
|
242
|
+
throw new RejectException();
|
|
243
|
+
state.weight *= Math.exp(logWeight);
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
try {
|
|
247
|
+
const value = program(sampler);
|
|
248
|
+
return { value, weight: state.weight };
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
if (err instanceof BranchException)
|
|
252
|
+
return undefined;
|
|
253
|
+
if (err instanceof RejectException)
|
|
254
|
+
return undefined;
|
|
255
|
+
throw err;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// ── 2. Rejection sampling ────────────────────────────────────
|
|
259
|
+
/**
|
|
260
|
+
* Muestrea N trazas del prior; cualquier traza con `observe(false)`
|
|
261
|
+
* o `factor(-Infinity)` se descarta y se reintenta.
|
|
262
|
+
*
|
|
263
|
+
* `factor(logW)` con `logW < 0` se trata como aceptación
|
|
264
|
+
* probabilística: con prob `exp(logW)` la traza se acepta, en
|
|
265
|
+
* caso contrario se descarta. `logW > 0` es legal pero raro;
|
|
266
|
+
* se acepta siempre (rejection no maneja pesos > 1).
|
|
267
|
+
*/
|
|
268
|
+
function rejectionSample(program, opts = {}) {
|
|
269
|
+
const numSamples = opts.numSamples ?? 1000;
|
|
270
|
+
const maxAttempts = opts.maxAttempts ?? numSamples * 100;
|
|
271
|
+
const rng = opts.rng ?? Math.random;
|
|
272
|
+
const samples = [];
|
|
273
|
+
let attempts = 0;
|
|
274
|
+
while (samples.length < numSamples) {
|
|
275
|
+
attempts += 1;
|
|
276
|
+
if (attempts > maxAttempts) {
|
|
277
|
+
throw new Error(`rejection: ${attempts} intentos para ${samples.length}/${numSamples} muestras; ` +
|
|
278
|
+
'el observe es demasiado restrictivo. Probá importance/MH.');
|
|
279
|
+
}
|
|
280
|
+
const result = runOneRejection(program, rng);
|
|
281
|
+
if (result !== undefined)
|
|
282
|
+
samples.push(result);
|
|
283
|
+
}
|
|
284
|
+
return summarize(samples, { total: attempts });
|
|
285
|
+
}
|
|
286
|
+
class RejectError extends Error {
|
|
287
|
+
constructor() {
|
|
288
|
+
super('reject');
|
|
289
|
+
this.name = 'RejectError';
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function runOneRejection(program, rng) {
|
|
293
|
+
const sampler = {
|
|
294
|
+
sample(dist) {
|
|
295
|
+
return (0, distributions_1.sampleFrom)(dist, rng);
|
|
296
|
+
},
|
|
297
|
+
observe(condition) {
|
|
298
|
+
if (!condition)
|
|
299
|
+
throw new RejectError();
|
|
300
|
+
},
|
|
301
|
+
factor(logWeight) {
|
|
302
|
+
if (logWeight >= 0)
|
|
303
|
+
return;
|
|
304
|
+
if (logWeight === -Infinity || rng() >= Math.exp(logWeight)) {
|
|
305
|
+
throw new RejectError();
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
try {
|
|
310
|
+
return program(sampler);
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
if (err instanceof RejectError)
|
|
314
|
+
return undefined;
|
|
315
|
+
throw err;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// ── 3. Importance sampling ───────────────────────────────────
|
|
319
|
+
/**
|
|
320
|
+
* Muestrea trazas del prior y acumula log-pesos de `observe`
|
|
321
|
+
* (treated as -Infinity si false, 0 si true) y `factor`. Devuelve
|
|
322
|
+
* los samples + sus pesos normalizados; el histograma y mean/std
|
|
323
|
+
* reflejan estos pesos.
|
|
324
|
+
*
|
|
325
|
+
* Reporta ESS = (Σwᵢ)² / Σwᵢ² como diagnóstico de degeneración.
|
|
326
|
+
*/
|
|
327
|
+
function importanceSample(program, opts = {}) {
|
|
328
|
+
const numSamples = opts.numSamples ?? 1000;
|
|
329
|
+
const rng = opts.rng ?? Math.random;
|
|
330
|
+
const samples = [];
|
|
331
|
+
const logWeights = [];
|
|
332
|
+
for (let i = 0; i < numSamples; i++) {
|
|
333
|
+
const result = runOneImportance(program, rng);
|
|
334
|
+
if (result !== undefined) {
|
|
335
|
+
samples.push(result.value);
|
|
336
|
+
logWeights.push(result.logWeight);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (samples.length === 0) {
|
|
340
|
+
throw new Error('importance: 0 samples válidos; revisá las observes.');
|
|
341
|
+
}
|
|
342
|
+
// Normalizar log-weights (estable numéricamente: restar el máximo).
|
|
343
|
+
const maxLW = Math.max(...logWeights);
|
|
344
|
+
let totalW = 0;
|
|
345
|
+
const expWeights = logWeights.map((lw) => {
|
|
346
|
+
const w = Math.exp(lw - maxLW);
|
|
347
|
+
totalW += w;
|
|
348
|
+
return w;
|
|
349
|
+
});
|
|
350
|
+
const weights = expWeights.map((w) => w / totalW);
|
|
351
|
+
// ESS = (Σwᵢ)² / Σwᵢ² con weights ya normalizados ⇒ 1 / Σwᵢ².
|
|
352
|
+
let sumSq = 0;
|
|
353
|
+
for (const w of weights)
|
|
354
|
+
sumSq += w * w;
|
|
355
|
+
const ess = sumSq > 0 ? 1 / sumSq : 0;
|
|
356
|
+
return summarize(samples, { weights, ess, total: numSamples });
|
|
357
|
+
}
|
|
358
|
+
function runOneImportance(program, rng) {
|
|
359
|
+
let logWeight = 0;
|
|
360
|
+
let rejected = false;
|
|
361
|
+
const sampler = {
|
|
362
|
+
sample(dist) {
|
|
363
|
+
return (0, distributions_1.sampleFrom)(dist, rng);
|
|
364
|
+
},
|
|
365
|
+
observe(condition) {
|
|
366
|
+
if (!condition) {
|
|
367
|
+
rejected = true;
|
|
368
|
+
logWeight = -Infinity;
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
factor(logW) {
|
|
372
|
+
logWeight += logW;
|
|
373
|
+
},
|
|
374
|
+
};
|
|
375
|
+
const value = program(sampler);
|
|
376
|
+
if (rejected || !Number.isFinite(logWeight))
|
|
377
|
+
return undefined;
|
|
378
|
+
return { value, logWeight };
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* MCMC Metropolis-Hastings sobre el espacio de trazas del programa.
|
|
382
|
+
*
|
|
383
|
+
* Convenciones:
|
|
384
|
+
* - `burnIn` itera sin contar (default 1000).
|
|
385
|
+
* - `thin` toma 1 de cada N (default 1).
|
|
386
|
+
* - Single-site: en cada iteración, re-muestrea UN sample site
|
|
387
|
+
* (elegido uniforme) y re-ejecuta. Si el número de sample sites
|
|
388
|
+
* cambia entre trazas, igual funciona (re-ejecutamos forzando
|
|
389
|
+
* el valor anterior en los sites que coinciden).
|
|
390
|
+
* - Reporta `acceptanceRate` para diagnóstico.
|
|
391
|
+
*/
|
|
392
|
+
function metropolisHastings(program, opts = {}) {
|
|
393
|
+
const numSamples = opts.numSamples ?? 1000;
|
|
394
|
+
const burnIn = opts.burnIn ?? 1000;
|
|
395
|
+
const thin = opts.thin ?? 1;
|
|
396
|
+
const rng = opts.rng ?? Math.random;
|
|
397
|
+
// Trace inicial: ejecutamos hasta encontrar uno con peso finito.
|
|
398
|
+
let current = runFresh(program, rng);
|
|
399
|
+
let attempts = 0;
|
|
400
|
+
while (!Number.isFinite(current.logWeight) || current.rejected) {
|
|
401
|
+
attempts += 1;
|
|
402
|
+
if (attempts > 10_000) {
|
|
403
|
+
throw new Error('MH: no se encontró traza inicial con peso finito en 10k intentos; ' +
|
|
404
|
+
'el observe podría ser inalcanzable.');
|
|
405
|
+
}
|
|
406
|
+
current = runFresh(program, rng);
|
|
407
|
+
}
|
|
408
|
+
const totalIters = burnIn + numSamples * thin;
|
|
409
|
+
const samples = [];
|
|
410
|
+
let accepted = 0;
|
|
411
|
+
let totalProposals = 0;
|
|
412
|
+
for (let i = 0; i < totalIters; i++) {
|
|
413
|
+
if (current.sites.length === 0) {
|
|
414
|
+
// Programa sin samples: no hay nada que proponer. Solo
|
|
415
|
+
// re-evaluamos (debería ser determinista módulo factor).
|
|
416
|
+
const fresh = runFresh(program, rng);
|
|
417
|
+
if (Number.isFinite(fresh.logWeight) && !fresh.rejected)
|
|
418
|
+
current = fresh;
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
totalProposals += 1;
|
|
422
|
+
const siteIdx = Math.floor(rng() * current.sites.length);
|
|
423
|
+
const site = current.sites[siteIdx];
|
|
424
|
+
if (!site)
|
|
425
|
+
continue;
|
|
426
|
+
// Proposal: re-muestrear desde la distribución del site.
|
|
427
|
+
const newValue = (0, distributions_1.sampleFrom)(site.dist, rng);
|
|
428
|
+
// Re-ejecutar el programa forzando: en `siteIdx` el valor
|
|
429
|
+
// nuevo, en los demás sites el valor anterior (si coincide
|
|
430
|
+
// la distribución). Si la estructura cambia (forks), seguimos
|
|
431
|
+
// muestreando de prior para los sites nuevos.
|
|
432
|
+
const proposal = runWithReplay(program, current, siteIdx, newValue, rng);
|
|
433
|
+
if (proposal.rejected || !Number.isFinite(proposal.logWeight)) {
|
|
434
|
+
// proposal con peso 0: rechazo automático.
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
// Acceptance ratio: π(x') q(x | x') / (π(x) q(x' | x)).
|
|
438
|
+
// Con single-site proposal del prior, q(x'|x) = p(site_new) y
|
|
439
|
+
// q(x|x') = p(site_old). Esos se cancelan con los priors de
|
|
440
|
+
// logWeight (que NO incluimos: usamos sólo observes+factors
|
|
441
|
+
// y los priors de los SITES NO MODIFICADOS se cancelan).
|
|
442
|
+
// Implementación pragmática: log-ratio = newLW - oldLW.
|
|
443
|
+
const logRatio = proposal.logWeight - current.logWeight;
|
|
444
|
+
const u = rng();
|
|
445
|
+
if (Math.log(u) < logRatio) {
|
|
446
|
+
current = proposal;
|
|
447
|
+
accepted += 1;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
if (i >= burnIn && (i - burnIn) % thin === 0) {
|
|
451
|
+
samples.push(current.value);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return summarize(samples, {
|
|
455
|
+
accepted,
|
|
456
|
+
total: totalProposals,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Ejecuta el programa sampleando del prior (sin replay), grabando
|
|
461
|
+
* cada sample para construir una `Trace`.
|
|
462
|
+
*/
|
|
463
|
+
function runFresh(program, rng) {
|
|
464
|
+
const sites = [];
|
|
465
|
+
let logWeight = 0;
|
|
466
|
+
let rejected = false;
|
|
467
|
+
const sampler = {
|
|
468
|
+
sample(dist) {
|
|
469
|
+
const value = (0, distributions_1.sampleFrom)(dist, rng);
|
|
470
|
+
sites.push({ dist: dist, value });
|
|
471
|
+
// Incluimos log-prior en logWeight para que el ratio MH cierre.
|
|
472
|
+
logWeight += (0, distributions_1.logPdf)(dist, value);
|
|
473
|
+
return value;
|
|
474
|
+
},
|
|
475
|
+
observe(condition) {
|
|
476
|
+
if (!condition) {
|
|
477
|
+
rejected = true;
|
|
478
|
+
logWeight = -Infinity;
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
factor(logW) {
|
|
482
|
+
logWeight += logW;
|
|
483
|
+
},
|
|
484
|
+
};
|
|
485
|
+
const value = program(sampler);
|
|
486
|
+
return { sites, logWeight, value, rejected };
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Re-ejecuta el programa "replayendo" la traza previa, pero
|
|
490
|
+
* forzando un nuevo valor en el sample site `replaceIdx`. Los
|
|
491
|
+
* sites posteriores se intentan replayear con su valor anterior;
|
|
492
|
+
* si el programa cambia su estructura (toma otra rama), los sites
|
|
493
|
+
* extra se muestrean del prior.
|
|
494
|
+
*/
|
|
495
|
+
function runWithReplay(program, previous, replaceIdx, newValue, rng) {
|
|
496
|
+
const sites = [];
|
|
497
|
+
let logWeight = 0;
|
|
498
|
+
let rejected = false;
|
|
499
|
+
let cursor = 0;
|
|
500
|
+
const sampler = {
|
|
501
|
+
sample(dist) {
|
|
502
|
+
const idx = cursor;
|
|
503
|
+
cursor += 1;
|
|
504
|
+
let value;
|
|
505
|
+
if (idx === replaceIdx) {
|
|
506
|
+
value = newValue;
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
const prev = previous.sites[idx];
|
|
510
|
+
// Reusar si misma distribución (kind igual y parámetros iguales).
|
|
511
|
+
if (prev && distEquals(prev.dist, dist)) {
|
|
512
|
+
value = prev.value;
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
value = (0, distributions_1.sampleFrom)(dist, rng);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
sites.push({ dist: dist, value });
|
|
519
|
+
logWeight += (0, distributions_1.logPdf)(dist, value);
|
|
520
|
+
return value;
|
|
521
|
+
},
|
|
522
|
+
observe(condition) {
|
|
523
|
+
if (!condition) {
|
|
524
|
+
rejected = true;
|
|
525
|
+
logWeight = -Infinity;
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
factor(logW) {
|
|
529
|
+
logWeight += logW;
|
|
530
|
+
},
|
|
531
|
+
};
|
|
532
|
+
const value = program(sampler);
|
|
533
|
+
return { sites, logWeight, value, rejected };
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Igualdad estructural de distribuciones (para replay): mismo kind
|
|
537
|
+
* y mismos parámetros. Para arrays/maps compara longitud + entradas.
|
|
538
|
+
*/
|
|
539
|
+
function distEquals(a, b) {
|
|
540
|
+
if (a.kind !== b.kind)
|
|
541
|
+
return false;
|
|
542
|
+
switch (a.kind) {
|
|
543
|
+
case 'bernoulli':
|
|
544
|
+
return a.p === b.p;
|
|
545
|
+
case 'uniform': {
|
|
546
|
+
const bb = b;
|
|
547
|
+
return a.low === bb.low && a.high === bb.high;
|
|
548
|
+
}
|
|
549
|
+
case 'normal': {
|
|
550
|
+
const bb = b;
|
|
551
|
+
return a.mean === bb.mean && a.std === bb.std;
|
|
552
|
+
}
|
|
553
|
+
case 'poisson':
|
|
554
|
+
return a.lambda === b.lambda;
|
|
555
|
+
case 'categorical': {
|
|
556
|
+
const bb = b;
|
|
557
|
+
if (a.values.length !== bb.values.length)
|
|
558
|
+
return false;
|
|
559
|
+
for (let i = 0; i < a.values.length; i++) {
|
|
560
|
+
if (a.values[i] !== bb.values[i])
|
|
561
|
+
return false;
|
|
562
|
+
if (a.probs[i] !== bb.probs[i])
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
return true;
|
|
566
|
+
}
|
|
567
|
+
case 'discrete': {
|
|
568
|
+
const bb = b;
|
|
569
|
+
if (a.pmf.size !== bb.pmf.size)
|
|
570
|
+
return false;
|
|
571
|
+
for (const [k, p] of a.pmf) {
|
|
572
|
+
if (bb.pmf.get(k) !== p)
|
|
573
|
+
return false;
|
|
574
|
+
}
|
|
575
|
+
return true;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
//# sourceMappingURL=inference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../src/reasoning/probabilistic/inference.ts"],"names":[],"mappings":"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"}
|