1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.createIndexClass = void 0;
|
7 |
|
8 | var _is = require("../../utils/is.js");
|
9 |
|
10 | var _object = require("../../utils/object.js");
|
11 |
|
12 | var _number = require("../../utils/number.js");
|
13 |
|
14 | var _factory = require("../../utils/factory.js");
|
15 |
|
16 | var name = 'Index';
|
17 | var dependencies = ['ImmutableDenseMatrix'];
|
18 | var createIndexClass = (0, _factory.factory)(name, dependencies, function (_ref) {
|
19 | var ImmutableDenseMatrix = _ref.ImmutableDenseMatrix;
|
20 |
|
21 | |
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | function Index(ranges) {
|
42 | if (!(this instanceof Index)) {
|
43 | throw new SyntaxError('Constructor must be called with the new operator');
|
44 | }
|
45 |
|
46 | this._dimensions = [];
|
47 | this._isScalar = true;
|
48 |
|
49 | for (var i = 0, ii = arguments.length; i < ii; i++) {
|
50 | var arg = arguments[i];
|
51 |
|
52 | if ((0, _is.isRange)(arg)) {
|
53 | this._dimensions.push(arg);
|
54 |
|
55 | this._isScalar = false;
|
56 | } else if (Array.isArray(arg) || (0, _is.isMatrix)(arg)) {
|
57 |
|
58 | var m = _createImmutableMatrix(arg.valueOf());
|
59 |
|
60 | this._dimensions.push(m);
|
61 |
|
62 |
|
63 | var size = m.size();
|
64 |
|
65 | if (size.length !== 1 || size[0] !== 1) {
|
66 | this._isScalar = false;
|
67 | }
|
68 | } else if (typeof arg === 'number') {
|
69 | this._dimensions.push(_createImmutableMatrix([arg]));
|
70 | } else if (typeof arg === 'string') {
|
71 |
|
72 | this._dimensions.push(arg);
|
73 | } else {
|
74 | throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
|
75 | }
|
76 |
|
77 | }
|
78 | }
|
79 | |
80 |
|
81 |
|
82 |
|
83 |
|
84 | Index.prototype.type = 'Index';
|
85 | Index.prototype.isIndex = true;
|
86 |
|
87 | function _createImmutableMatrix(arg) {
|
88 |
|
89 | for (var i = 0, l = arg.length; i < l; i++) {
|
90 | if (typeof arg[i] !== 'number' || !(0, _number.isInteger)(arg[i])) {
|
91 | throw new TypeError('Index parameters must be positive integer numbers');
|
92 | }
|
93 | }
|
94 |
|
95 |
|
96 | return new ImmutableDenseMatrix(arg);
|
97 | }
|
98 | |
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 | Index.prototype.clone = function () {
|
106 | var index = new Index();
|
107 | index._dimensions = (0, _object.clone)(this._dimensions);
|
108 | index._isScalar = this._isScalar;
|
109 | return index;
|
110 | };
|
111 | |
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 | Index.create = function (ranges) {
|
121 | var index = new Index();
|
122 | Index.apply(index, ranges);
|
123 | return index;
|
124 | };
|
125 | |
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 | Index.prototype.size = function () {
|
133 | var size = [];
|
134 |
|
135 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
136 | var d = this._dimensions[i];
|
137 | size[i] = typeof d === 'string' ? 1 : d.size()[0];
|
138 | }
|
139 |
|
140 | return size;
|
141 | };
|
142 | |
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 | Index.prototype.max = function () {
|
150 | var values = [];
|
151 |
|
152 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
153 | var range = this._dimensions[i];
|
154 | values[i] = typeof range === 'string' ? range : range.max();
|
155 | }
|
156 |
|
157 | return values;
|
158 | };
|
159 | |
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 |
|
166 | Index.prototype.min = function () {
|
167 | var values = [];
|
168 |
|
169 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
170 | var range = this._dimensions[i];
|
171 | values[i] = typeof range === 'string' ? range : range.min();
|
172 | }
|
173 |
|
174 | return values;
|
175 | };
|
176 | |
177 |
|
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 |
|
185 | Index.prototype.forEach = function (callback) {
|
186 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
187 | callback(this._dimensions[i], i, this);
|
188 | }
|
189 | };
|
190 | |
191 |
|
192 |
|
193 |
|
194 |
|
195 |
|
196 |
|
197 |
|
198 | Index.prototype.dimension = function (dim) {
|
199 | return this._dimensions[dim] || null;
|
200 | };
|
201 | |
202 |
|
203 |
|
204 |
|
205 |
|
206 |
|
207 | Index.prototype.isObjectProperty = function () {
|
208 | return this._dimensions.length === 1 && typeof this._dimensions[0] === 'string';
|
209 | };
|
210 | |
211 |
|
212 |
|
213 |
|
214 |
|
215 |
|
216 |
|
217 | Index.prototype.getObjectProperty = function () {
|
218 | return this.isObjectProperty() ? this._dimensions[0] : null;
|
219 | };
|
220 | |
221 |
|
222 |
|
223 |
|
224 |
|
225 |
|
226 |
|
227 |
|
228 |
|
229 |
|
230 | Index.prototype.isScalar = function () {
|
231 | return this._isScalar;
|
232 | };
|
233 | |
234 |
|
235 |
|
236 |
|
237 |
|
238 |
|
239 |
|
240 |
|
241 | Index.prototype.toArray = function () {
|
242 | var array = [];
|
243 |
|
244 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
245 | var dimension = this._dimensions[i];
|
246 | array.push(typeof dimension === 'string' ? dimension : dimension.toArray());
|
247 | }
|
248 |
|
249 | return array;
|
250 | };
|
251 | |
252 |
|
253 |
|
254 |
|
255 |
|
256 |
|
257 |
|
258 |
|
259 | Index.prototype.valueOf = Index.prototype.toArray;
|
260 | |
261 |
|
262 |
|
263 |
|
264 |
|
265 |
|
266 | Index.prototype.toString = function () {
|
267 | var strings = [];
|
268 |
|
269 | for (var i = 0, ii = this._dimensions.length; i < ii; i++) {
|
270 | var dimension = this._dimensions[i];
|
271 |
|
272 | if (typeof dimension === 'string') {
|
273 | strings.push(JSON.stringify(dimension));
|
274 | } else {
|
275 | strings.push(dimension.toString());
|
276 | }
|
277 | }
|
278 |
|
279 | return '[' + strings.join(', ') + ']';
|
280 | };
|
281 | |
282 |
|
283 |
|
284 |
|
285 |
|
286 |
|
287 |
|
288 |
|
289 | Index.prototype.toJSON = function () {
|
290 | return {
|
291 | mathjs: 'Index',
|
292 | dimensions: this._dimensions
|
293 | };
|
294 | };
|
295 | |
296 |
|
297 |
|
298 |
|
299 |
|
300 |
|
301 |
|
302 |
|
303 |
|
304 | Index.fromJSON = function (json) {
|
305 | return Index.create(json.dimensions);
|
306 | };
|
307 |
|
308 | return Index;
|
309 | }, {
|
310 | isClass: true
|
311 | });
|
312 | exports.createIndexClass = createIndexClass; |
\ | No newline at end of file |