in src/js/other-websites/fathom.js [2461:2491]
constructor(rules, coeffs = [], biases = []) {
this._inRules = [];
this._outRules = new Map(); // key -> rule
this._rulesThatCouldEmit = new Map(); // type -> [rules]
this._rulesThatCouldAdd = new Map(); // type -> [rules]
// Private to the framework:
this._coeffs = new Map(coeffs); // rule name => coefficient
this.biases = new Map(biases); // type name => bias
// Separate rules into out ones and in ones, and sock them away. We do
// this here so mistakes raise errors early.
for (let rule of rules) {
if (rule instanceof InwardRule) {
this._inRules.push(rule);
// Keep track of what inward rules can emit or add:
// TODO: Combine these hashes for space efficiency:
const emittedTypes = rule.typesItCouldEmit();
for (let type of emittedTypes) {
setDefault(this._rulesThatCouldEmit, type, () => []).push(rule);
}
for (let type of rule.typesItCouldAdd()) {
setDefault(this._rulesThatCouldAdd, type, () => []).push(rule);
}
} else if (rule instanceof OutwardRule) {
this._outRules.set(rule.key(), rule);
} else {
throw new Error(`This element of ruleset()'s first param wasn't a rule: ${rule}`);
}
}
}