1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.containsCollections = containsCollections;
|
7 | exports.deepForEach = deepForEach;
|
8 | exports.deepMap = deepMap;
|
9 | exports.reduce = reduce;
|
10 | exports.scatter = scatter;
|
11 |
|
12 | var _is = require("./is.js");
|
13 |
|
14 | var _IndexError = require("../error/IndexError.js");
|
15 |
|
16 | var _array = require("./array.js");
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | function containsCollections(array) {
|
25 | for (var i = 0; i < array.length; i++) {
|
26 | if ((0, _is.isCollection)(array[i])) {
|
27 | return true;
|
28 | }
|
29 | }
|
30 |
|
31 | return false;
|
32 | }
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | function deepForEach(array, callback) {
|
43 | if ((0, _is.isMatrix)(array)) {
|
44 | array = array.valueOf();
|
45 | }
|
46 |
|
47 | for (var i = 0, ii = array.length; i < ii; i++) {
|
48 | var value = array[i];
|
49 |
|
50 | if (Array.isArray(value)) {
|
51 | deepForEach(value, callback);
|
52 | } else {
|
53 | callback(value);
|
54 | }
|
55 | }
|
56 | }
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | function deepMap(array, callback, skipZeros) {
|
72 | if (array && typeof array.map === 'function') {
|
73 |
|
74 | return array.map(function (x) {
|
75 | return deepMap(x, callback, skipZeros);
|
76 | });
|
77 | } else {
|
78 | return callback(array);
|
79 | }
|
80 | }
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | function reduce(mat, dim, callback) {
|
93 | var size = Array.isArray(mat) ? (0, _array.arraySize)(mat) : mat.size();
|
94 |
|
95 | if (dim < 0 || dim >= size.length) {
|
96 |
|
97 | throw new _IndexError.IndexError(dim, size.length);
|
98 | }
|
99 |
|
100 | if ((0, _is.isMatrix)(mat)) {
|
101 | return mat.create(_reduce(mat.valueOf(), dim, callback));
|
102 | } else {
|
103 | return _reduce(mat, dim, callback);
|
104 | }
|
105 | }
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 | function _reduce(mat, dim, callback) {
|
117 | var i, ret, val, tran;
|
118 |
|
119 | if (dim <= 0) {
|
120 | if (!Array.isArray(mat[0])) {
|
121 | val = mat[0];
|
122 |
|
123 | for (i = 1; i < mat.length; i++) {
|
124 | val = callback(val, mat[i]);
|
125 | }
|
126 |
|
127 | return val;
|
128 | } else {
|
129 | tran = _switch(mat);
|
130 | ret = [];
|
131 |
|
132 | for (i = 0; i < tran.length; i++) {
|
133 | ret[i] = _reduce(tran[i], dim - 1, callback);
|
134 | }
|
135 |
|
136 | return ret;
|
137 | }
|
138 | } else {
|
139 | ret = [];
|
140 |
|
141 | for (i = 0; i < mat.length; i++) {
|
142 | ret[i] = _reduce(mat[i], dim - 1, callback);
|
143 | }
|
144 |
|
145 | return ret;
|
146 | }
|
147 | }
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 | function _switch(mat) {
|
157 | var I = mat.length;
|
158 | var J = mat[0].length;
|
159 | var i, j;
|
160 | var ret = [];
|
161 |
|
162 | for (j = 0; j < J; j++) {
|
163 | var tmp = [];
|
164 |
|
165 | for (i = 0; i < I; i++) {
|
166 | tmp.push(mat[i][j]);
|
167 | }
|
168 |
|
169 | ret.push(tmp);
|
170 | }
|
171 |
|
172 | return ret;
|
173 | }
|
174 |
|
175 |
|
176 | function scatter(a, j, w, x, u, mark, cindex, f, inverse, update, value) {
|
177 |
|
178 | var avalues = a._values;
|
179 | var aindex = a._index;
|
180 | var aptr = a._ptr;
|
181 |
|
182 | var k, k0, k1, i;
|
183 |
|
184 | if (x) {
|
185 |
|
186 | for (k0 = aptr[j], k1 = aptr[j + 1], k = k0; k < k1; k++) {
|
187 |
|
188 | i = aindex[k];
|
189 |
|
190 | if (w[i] !== mark) {
|
191 |
|
192 | w[i] = mark;
|
193 |
|
194 | cindex.push(i);
|
195 |
|
196 | if (update) {
|
197 |
|
198 | x[i] = inverse ? f(avalues[k], value) : f(value, avalues[k]);
|
199 |
|
200 | u[i] = mark;
|
201 | } else {
|
202 |
|
203 | x[i] = avalues[k];
|
204 | }
|
205 | } else {
|
206 |
|
207 | x[i] = inverse ? f(avalues[k], x[i]) : f(x[i], avalues[k]);
|
208 |
|
209 | u[i] = mark;
|
210 | }
|
211 | }
|
212 | } else {
|
213 |
|
214 | for (k0 = aptr[j], k1 = aptr[j + 1], k = k0; k < k1; k++) {
|
215 |
|
216 | i = aindex[k];
|
217 |
|
218 | if (w[i] !== mark) {
|
219 |
|
220 | w[i] = mark;
|
221 |
|
222 | cindex.push(i);
|
223 | } else {
|
224 |
|
225 | u[i] = mark;
|
226 | }
|
227 | }
|
228 | }
|
229 | } |
\ | No newline at end of file |