UNPKG

ecclesia

Version:

Framework for political and electoral simulations

81 lines (78 loc) 3.3 kB
"use strict"; 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