simple-squiggle

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

randomInt.js (3259B)


      1 "use strict";
      2 
      3 Object.defineProperty(exports, "__esModule", {
      4   value: true
      5 });
      6 exports.createRandomInt = void 0;
      7 
      8 var _factory = require("../../utils/factory.js");
      9 
     10 var _randomMatrix = require("./util/randomMatrix.js");
     11 
     12 var _seededRNG = require("./util/seededRNG.js");
     13 
     14 var _is = require("../../utils/is.js");
     15 
     16 var name = 'randomInt';
     17 var dependencies = ['typed', 'config', '?on'];
     18 var createRandomInt = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
     19   var typed = _ref.typed,
     20       config = _ref.config,
     21       on = _ref.on;
     22   // seeded pseudo random number generator
     23   var rng = (0, _seededRNG.createRng)(config.randomSeed);
     24 
     25   if (on) {
     26     on('config', function (curr, prev) {
     27       if (curr.randomSeed !== prev.randomSeed) {
     28         rng = (0, _seededRNG.createRng)(curr.randomSeed);
     29       }
     30     });
     31   }
     32   /**
     33    * Return a random integer number larger or equal to `min` and smaller than `max`
     34    * using a uniform distribution.
     35    *
     36    * Syntax:
     37    *
     38    *     math.randomInt()                // generate a random integer between 0 and 1
     39    *     math.randomInt(max)             // generate a random integer between 0 and max
     40    *     math.randomInt(min, max)        // generate a random integer between min and max
     41    *     math.randomInt(size)            // generate a matrix with random integer between 0 and 1
     42    *     math.randomInt(size, max)       // generate a matrix with random integer between 0 and max
     43    *     math.randomInt(size, min, max)  // generate a matrix with random integer between min and max
     44    *
     45    * Examples:
     46    *
     47    *     math.randomInt(100)    // returns a random integer between 0 and 100
     48    *     math.randomInt(30, 40) // returns a random integer between 30 and 40
     49    *     math.randomInt([2, 3]) // returns a 2x3 matrix with random integers between 0 and 1
     50    *
     51    * See also:
     52    *
     53    *     random, pickRandom
     54    *
     55    * @param {Array | Matrix} [size] If provided, an array or matrix with given
     56    *                                size and filled with random values is returned
     57    * @param {number} [min]  Minimum boundary for the random value, included
     58    * @param {number} [max]  Maximum boundary for the random value, excluded
     59    * @return {number | Array | Matrix} A random integer value
     60    */
     61 
     62 
     63   return typed(name, {
     64     '': function _() {
     65       return _randomInt(0, 1);
     66     },
     67     number: function number(max) {
     68       return _randomInt(0, max);
     69     },
     70     'number, number': function numberNumber(min, max) {
     71       return _randomInt(min, max);
     72     },
     73     'Array | Matrix': function ArrayMatrix(size) {
     74       return _randomIntMatrix(size, 0, 1);
     75     },
     76     'Array | Matrix, number': function ArrayMatrixNumber(size, max) {
     77       return _randomIntMatrix(size, 0, max);
     78     },
     79     'Array | Matrix, number, number': function ArrayMatrixNumberNumber(size, min, max) {
     80       return _randomIntMatrix(size, min, max);
     81     }
     82   });
     83 
     84   function _randomIntMatrix(size, min, max) {
     85     var res = (0, _randomMatrix.randomMatrix)(size.valueOf(), function () {
     86       return _randomInt(min, max);
     87     });
     88     return (0, _is.isMatrix)(size) ? size.create(res) : res;
     89   }
     90 
     91   function _randomInt(min, max) {
     92     return Math.floor(min + rng() * (max - min));
     93   }
     94 });
     95 exports.createRandomInt = createRandomInt;