simple-squiggle

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

index.transform.js (1678B)


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