@sdeverywhere/runtime 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -770,6 +770,7 @@ interface JsModelFunctions {
770
770
  GAME(inputs: JsModelLookup, x: number): number;
771
771
  INTEG(value: number, rate: number): number;
772
772
  INTEGER(x: number): number;
773
+ INVERT_MATRIX(matrix: number[][], n: number): number[][];
773
774
  LN(x: number): number;
774
775
  MAX(x: number, y: number): number;
775
776
  MIN(x: number, y: number): number;
package/dist/index.d.ts CHANGED
@@ -770,6 +770,7 @@ interface JsModelFunctions {
770
770
  GAME(inputs: JsModelLookup, x: number): number;
771
771
  INTEG(value: number, rate: number): number;
772
772
  INTEGER(x: number): number;
773
+ INVERT_MATRIX(matrix: number[][], n: number): number[][];
773
774
  LN(x: number): number;
774
775
  MAX(x: number, y: number): number;
775
776
  MIN(x: number, y: number): number;
package/dist/index.js CHANGED
@@ -1196,6 +1196,8 @@ function getJsModelFunctions() {
1196
1196
  let ctx;
1197
1197
  const cachedVectors = /* @__PURE__ */ new Map();
1198
1198
  const cachedSortVectors = /* @__PURE__ */ new Map();
1199
+ const cachedInvertWorkMatrices = /* @__PURE__ */ new Map();
1200
+ const cachedInvertResultMatrices = /* @__PURE__ */ new Map();
1199
1201
  return {
1200
1202
  setContext(context) {
1201
1203
  ctx = context;
@@ -1230,6 +1232,74 @@ function getJsModelFunctions() {
1230
1232
  INTEGER(x) {
1231
1233
  return Math.trunc(x);
1232
1234
  },
1235
+ INVERT_MATRIX(matrix, n) {
1236
+ let work = cachedInvertWorkMatrices.get(n);
1237
+ if (work === void 0) {
1238
+ work = Array(n);
1239
+ for (let i = 0; i < n; i++) {
1240
+ work[i] = Array(2 * n);
1241
+ }
1242
+ cachedInvertWorkMatrices.set(n, work);
1243
+ }
1244
+ let result = cachedInvertResultMatrices.get(n);
1245
+ if (result === void 0) {
1246
+ result = Array(n);
1247
+ for (let i = 0; i < n; i++) {
1248
+ result[i] = Array(n);
1249
+ }
1250
+ cachedInvertResultMatrices.set(n, result);
1251
+ }
1252
+ for (let i = 0; i < n; i++) {
1253
+ for (let j = 0; j < n; j++) {
1254
+ work[i][j] = matrix[i][j];
1255
+ work[i][n + j] = i === j ? 1 : 0;
1256
+ }
1257
+ }
1258
+ for (let k = 0; k < n; k++) {
1259
+ let pivot = k;
1260
+ let max = Math.abs(work[k][k]);
1261
+ for (let i = k + 1; i < n; i++) {
1262
+ const v = Math.abs(work[i][k]);
1263
+ if (v > max) {
1264
+ max = v;
1265
+ pivot = i;
1266
+ }
1267
+ }
1268
+ if (max === 0) {
1269
+ for (let i = 0; i < n; i++) {
1270
+ for (let j = 0; j < n; j++) {
1271
+ result[i][j] = _NA_;
1272
+ }
1273
+ }
1274
+ return result;
1275
+ }
1276
+ if (pivot !== k) {
1277
+ const tmpRow = work[k];
1278
+ work[k] = work[pivot];
1279
+ work[pivot] = tmpRow;
1280
+ }
1281
+ const p = work[k][k];
1282
+ for (let j = 0; j < 2 * n; j++) {
1283
+ work[k][j] /= p;
1284
+ }
1285
+ for (let i = 0; i < n; i++) {
1286
+ if (i !== k) {
1287
+ const f = work[i][k];
1288
+ if (f !== 0) {
1289
+ for (let j = 0; j < 2 * n; j++) {
1290
+ work[i][j] -= f * work[k][j];
1291
+ }
1292
+ }
1293
+ }
1294
+ }
1295
+ }
1296
+ for (let i = 0; i < n; i++) {
1297
+ for (let j = 0; j < n; j++) {
1298
+ result[i][j] = work[i][n + j];
1299
+ }
1300
+ }
1301
+ return result;
1302
+ },
1233
1303
  LN(x) {
1234
1304
  return Math.log(x);
1235
1305
  },