constructor()

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}`);
                }
            }
        }