simple-squiggle

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

index.transform.js (1494B)


      1 import { isArray, isBigNumber, isMatrix, isNumber, isRange } from '../../utils/is.js';
      2 import { factory } from '../../utils/factory.js';
      3 var name = 'index';
      4 var dependencies = ['Index'];
      5 export var createIndexTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
      6   var {
      7     Index
      8   } = _ref;
      9 
     10   /**
     11    * Attach a transform function to math.index
     12    * Adds a property transform containing the transform function.
     13    *
     14    * This transform creates a one-based index instead of a zero-based index
     15    */
     16   return function indexTransform() {
     17     var args = [];
     18 
     19     for (var i = 0, ii = arguments.length; i < ii; i++) {
     20       var arg = arguments[i]; // change from one-based to zero based, and convert BigNumber to number
     21 
     22       if (isRange(arg)) {
     23         arg.start--;
     24         arg.end -= arg.step > 0 ? 0 : 2;
     25       } else if (arg && arg.isSet === true) {
     26         arg = arg.map(function (v) {
     27           return v - 1;
     28         });
     29       } else if (isArray(arg) || isMatrix(arg)) {
     30         arg = arg.map(function (v) {
     31           return v - 1;
     32         });
     33       } else if (isNumber(arg)) {
     34         arg--;
     35       } else if (isBigNumber(arg)) {
     36         arg = arg.toNumber() - 1;
     37       } else if (typeof arg === 'string') {// leave as is
     38       } else {
     39         throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
     40       }
     41 
     42       args[i] = arg;
     43     }
     44 
     45     var res = new Index();
     46     Index.apply(res, args);
     47     return res;
     48   };
     49 }, {
     50   isTransformFunction: true
     51 });