simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

setMultiplicity.js (1535B)


      1 import { flatten } from '../../utils/array.js';
      2 import { factory } from '../../utils/factory.js';
      3 var name = 'setMultiplicity';
      4 var dependencies = ['typed', 'size', 'subset', 'compareNatural', 'Index'];
      5 export var createSetMultiplicity = /* #__PURE__ */factory(name, dependencies, _ref => {
      6   var {
      7     typed,
      8     size,
      9     subset,
     10     compareNatural,
     11     Index
     12   } = _ref;
     13 
     14   /**
     15    * Count the multiplicity of an element in a multiset.
     16    * A multi-dimension array will be converted to a single-dimension array before the operation.
     17    *
     18    * Syntax:
     19    *
     20    *    math.setMultiplicity(element, set)
     21    *
     22    * Examples:
     23    *
     24    *    math.setMultiplicity(1, [1, 2, 2, 4])    // returns 1
     25    *    math.setMultiplicity(2, [1, 2, 2, 4])    // returns 2
     26    *
     27    * See also:
     28    *
     29    *    setDistinct, setSize
     30    *
     31    * @param {number | BigNumber | Fraction | Complex} e  An element in the multiset
     32    * @param {Array | Matrix}     a  A multiset
     33    * @return {number}            The number of how many times the multiset contains the element
     34    */
     35   return typed(name, {
     36     'number | BigNumber | Fraction | Complex, Array | Matrix': function numberBigNumberFractionComplexArrayMatrix(e, a) {
     37       if (subset(size(a), new Index(0)) === 0) {
     38         // if empty, return 0
     39         return 0;
     40       }
     41 
     42       var b = flatten(Array.isArray(a) ? a : a.toArray());
     43       var count = 0;
     44 
     45       for (var i = 0; i < b.length; i++) {
     46         if (compareNatural(b[i], e) === 0) {
     47           count++;
     48         }
     49       }
     50 
     51       return count;
     52     }
     53   });
     54 });