ecclesia
Version:
Framework for political and electoral simulations
81 lines (78 loc) • 3.3 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/actors/opinionsArray.ts
var opinionsArray_exports = {};
__export(opinionsArray_exports, {
OpinionsArrayManager: () => OpinionsArrayManager
});
module.exports = __toCommonJS(opinionsArray_exports);
var import_python = require("@gouvernathor/python");
var math = __toESM(require("@gouvernathor/python/math"), 1);
// src/utils.ts
var import_rng = __toESM(require("@gouvernathor/rng"), 1);
function createRandomObj({ randomObj, randomSeed } = {}) {
if (randomObj === void 0) {
randomObj = new import_rng.default(randomSeed);
}
return randomObj;
}
// src/actors/opinionsArray.ts
function normalToUniform(x, mu, sigma) {
return 0.5 * (1 + math.erf((x - mu) / (sigma * Math.SQRT2)));
}
function getAligner(opinMax, factors) {
const rang = (0, import_python.range)(-opinMax, opinMax + 1);
const oneSigma = Math.sqrt((0, import_python.sum)(rang.map((i) => i ** 2)) / rang.length);
const sigma = math.hypot(...factors.map((f) => f * oneSigma));
return (opinions) => {
const scapro = (0, import_python.sum)(opinions.map((opinion, i) => opinion * factors[i]));
return normalToUniform(scapro, 0, sigma);
};
}
function getDefaultAlignmentFactors(nOpinions) {
return Array.from({ length: nOpinions }, (_, i) => 1 - i / nOpinions);
}
var OpinionsArrayManager = class {
constructor({
nOpinions,
opinMax,
opinionAlignmentFactors = getDefaultAlignmentFactors(nOpinions)
}) {
this.nOpinions = nOpinions;
this.opinMax = opinMax;
this.opinionAlignmentFactors = opinionAlignmentFactors;
this.aligner = getAligner(opinMax, opinionAlignmentFactors);
this.generator = (randomParam) => createRandomObj(randomParam).choices((0, import_python.range)(-opinMax, opinMax + 1), { k: nOpinions });
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
OpinionsArrayManager
});
//# sourceMappingURL=opinionsArray.cjs.map