UNPKG

molstar

Version:

A comprehensive macromolecular library.

302 lines 11.3 kB
"use strict"; /** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Table = void 0; var tslib_1 = require("tslib"); var column_1 = require("./column"); var sort_1 = require("../util/sort"); var mol_util_1 = require("../../mol-util"); /** An immutable table */ var Table; (function (Table) { function is(t) { return t && typeof t._rowCount === 'number' && !!t._columns && !!t._schema; } Table.is = is; function pickColumns(schema, table, guard) { if (guard === void 0) { guard = {}; } var ret = Object.create(null); var keys = Object.keys(schema); ret._rowCount = table._rowCount; ret._columns = keys; ret._schema = schema; for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) { var k = keys_1[_a]; if (!!table[k]) ret[k] = table[k]; else if (!!guard[k]) ret[k] = guard[k]; else throw Error("Cannot find column '" + k + "'."); } return ret; } Table.pickColumns = pickColumns; function ofColumns(schema, columns) { var _columns = Object.keys(columns); var _rowCount = columns[_columns[0]].rowCount; return (0, tslib_1.__assign)({ _rowCount: _rowCount, _columns: _columns, _schema: schema }, columns); } Table.ofColumns = ofColumns; function ofPartialColumns(schema, partialColumns, rowCount) { var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = rowCount; ret._columns = columns; ret._schema = schema; for (var _a = 0, columns_1 = columns; _a < columns_1.length; _a++) { var k = columns_1[_a]; if (k in partialColumns) ret[k] = partialColumns[k]; else ret[k] = column_1.Column.Undefined(rowCount, schema[k]); } return ret; } Table.ofPartialColumns = ofPartialColumns; function ofUndefinedColumns(schema, rowCount) { var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = rowCount; ret._columns = columns; ret._schema = schema; for (var _a = 0, columns_2 = columns; _a < columns_2.length; _a++) { var k = columns_2[_a]; ret[k] = column_1.Column.Undefined(rowCount, schema[k]); } return ret; } Table.ofUndefinedColumns = ofUndefinedColumns; function ofRows(schema, rows) { var ret = Object.create(null); var rowCount = rows.length; var columns = Object.keys(schema); ret._rowCount = rowCount; ret._columns = columns; ret._schema = schema; var _loop_1 = function (k) { ret[k] = column_1.Column.ofLambda({ rowCount: rowCount, schema: schema[k], value: function (r) { return rows[r][k]; }, valueKind: function (r) { return typeof rows[r][k] === 'undefined' ? 1 /* NotPresent */ : 0 /* Present */; } }); }; for (var _a = 0, columns_3 = columns; _a < columns_3.length; _a++) { var k = columns_3[_a]; _loop_1(k); } return ret; } Table.ofRows = ofRows; function ofArrays(schema, arrays) { var _a; var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = 0; ret._columns = columns; ret._schema = schema; for (var _b = 0, columns_4 = columns; _b < columns_4.length; _b++) { var k = columns_4[_b]; if (typeof arrays[k] !== 'undefined') { ret[k] = column_1.Column.ofArray({ array: arrays[k], schema: schema[k] }); ret._rowCount = (_a = arrays[k]) === null || _a === void 0 ? void 0 : _a.length; } else { ret[k] = column_1.Column.Undefined(ret._rowCount, schema[k]); } } return ret; } Table.ofArrays = ofArrays; function view(table, schema, view) { var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = view.length; ret._columns = columns; ret._schema = schema; for (var _a = 0, columns_5 = columns; _a < columns_5.length; _a++) { var k = columns_5[_a]; ret[k] = column_1.Column.view(table[k], view); } return ret; } Table.view = view; function pick(table, schema, test) { var _view = []; for (var i = 0, il = table._rowCount; i < il; ++i) { if (test(i)) _view.push(i); } return view(table, schema, _view); } Table.pick = pick; function window(table, schema, start, end) { if (start === 0 && end === table._rowCount) return table; var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = end - start; ret._columns = columns; ret._schema = schema; for (var _a = 0, columns_6 = columns; _a < columns_6.length; _a++) { var k = columns_6[_a]; ret[k] = column_1.Column.window(table[k], start, end); } return ret; } Table.window = window; function concat(tables, schema) { var ret = Object.create(null); var columns = Object.keys(schema); ret._rowCount = 0; for (var _a = 0, tables_1 = tables; _a < tables_1.length; _a++) { var table = tables_1[_a]; ret._rowCount += table._rowCount; } var arrays = {}; for (var _b = 0, columns_7 = columns; _b < columns_7.length; _b++) { var column = columns_7[_b]; arrays[column] = new Array(ret._rowCount); } ret._columns = columns; ret._schema = schema; var offset = 0; for (var _c = 0, tables_2 = tables; _c < tables_2.length; _c++) { var table = tables_2[_c]; for (var _d = 0, columns_8 = columns; _d < columns_8.length; _d++) { var k = columns_8[_d]; column_1.Column.copyToArray(table[k], arrays[k], offset); } offset += table._rowCount; } for (var _e = 0, columns_9 = columns; _e < columns_9.length; _e++) { var k = columns_9[_e]; ret[k] = column_1.Column.ofArray({ array: arrays[k], schema: schema[k] }); } return ret; } Table.concat = concat; function columnToArray(table, name, array) { table[name] = column_1.Column.asArrayColumn(table[name], array); } Table.columnToArray = columnToArray; /** Sort and return a new table */ function sort(table, cmp) { var indices = new Int32Array(table._rowCount); for (var i = 0, _i = indices.length; i < _i; i++) indices[i] = i; (0, sort_1.sortArray)(indices, function (_, i, j) { return cmp(i, j); }); var isIdentity = true; for (var i = 0, _i = indices.length; i < _i; i++) { if (indices[i] !== i) { isIdentity = false; break; } } if (isIdentity) return table; var ret = Object.create(null); ret._rowCount = table._rowCount; ret._columns = table._columns; ret._schema = table._schema; for (var _a = 0, _b = table._columns; _a < _b.length; _a++) { var c = _b[_a]; ret[c] = column_1.Column.view(table[c], indices, false); } return ret; } Table.sort = sort; function areEqual(a, b) { if (a._rowCount !== b._rowCount) return false; if (a._columns.length !== b._columns.length) return false; for (var _a = 0, _b = a._columns; _a < _b.length; _a++) { var c = _b[_a]; if (!b[c]) return false; } for (var _c = 0, _d = a._columns; _c < _d.length; _c++) { var c = _d[_c]; if (!column_1.Column.areEqual(a[c], b[c])) return false; } return true; } Table.areEqual = areEqual; /** Allocate a new object with the given row values. */ function getRow(table, index) { var row = Object.create(null); var cols = table._columns; for (var i = 0; i < cols.length; i++) { var c = cols[i]; row[c] = table[c].value(index); } return row; } Table.getRow = getRow; /** Pick the first row for which `test` evaluates to true */ function pickRow(table, test) { for (var i = 0, il = table._rowCount; i < il; ++i) { if (test(i)) return getRow(table, i); } } Table.pickRow = pickRow; function getRows(table) { var ret = []; var c = table._rowCount; for (var i = 0; i < c; i++) { ret[i] = getRow(table, i); } return ret; } Table.getRows = getRows; function toArrays(table) { var arrays = {}; var _columns = table._columns; for (var i = 0; i < _columns.length; i++) { var c = _columns[i]; arrays[c] = table[c].toArray(); } return arrays; } Table.toArrays = toArrays; function formatToString(table) { var sb = mol_util_1.StringBuilder.create(); var cols = table._columns, _rowCount = table._rowCount; var headerLength = 1; mol_util_1.StringBuilder.write(sb, '|'); for (var i = 0; i < cols.length; i++) { mol_util_1.StringBuilder.write(sb, cols[i]); mol_util_1.StringBuilder.write(sb, '|'); headerLength += cols[i].length + 1; } mol_util_1.StringBuilder.newline(sb); mol_util_1.StringBuilder.write(sb, new Array(headerLength + 1).join('-')); mol_util_1.StringBuilder.newline(sb); for (var r = 0; r < _rowCount; r++) { mol_util_1.StringBuilder.write(sb, '|'); for (var i = 0; i < cols.length; i++) { var c = table[cols[i]]; if (c.valueKind(r) === 0 /* Present */) { mol_util_1.StringBuilder.write(sb, c.value(r)); mol_util_1.StringBuilder.write(sb, '|'); } else { mol_util_1.StringBuilder.write(sb, '.|'); } } mol_util_1.StringBuilder.newline(sb); } return mol_util_1.StringBuilder.getString(sb); } Table.formatToString = formatToString; })(Table || (Table = {})); exports.Table = Table; //# sourceMappingURL=table.js.map