@datagrok/peptides 1.3.3 → 1.3.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datagrok/peptides",
3
- "version": "1.3.3",
3
+ "version": "1.3.4",
4
4
  "author": {
5
5
  "name": "Volodymyr Dyma",
6
6
  "email": "vdyma@datagrok.ai"
@@ -15,7 +15,7 @@
15
15
  "@datagrok-libraries/bio": "^5.1.0",
16
16
  "@datagrok-libraries/ml": "^2.0.1",
17
17
  "@datagrok-libraries/statistics": "^0.1.6",
18
- "@datagrok-libraries/utils": "^1.10.1",
18
+ "@datagrok-libraries/utils": "^1.11.1",
19
19
  "cash-dom": "latest",
20
20
  "datagrok-api": "^1.6.0",
21
21
  "file-loader": "^6.2.0",
package/src/model.ts CHANGED
@@ -36,9 +36,9 @@ export class PeptidesModel {
36
36
  edf: DG.DataFrame | null = null;
37
37
  monomerPositionStatsDf!: DG.DataFrame;
38
38
  clusterStatsDf!: DG.DataFrame;
39
- _mutationCliffsSelection: type.PositionToAARList = {};
40
- _invariantMapSelection: type.PositionToAARList = {};
41
- _logoSummarySelection: number[] = [];
39
+ _mutationCliffsSelection!: type.PositionToAARList;
40
+ _invariantMapSelection!: type.PositionToAARList;
41
+ _logoSummarySelection!: number[];
42
42
  substitutionsInfo: type.SubstitutionsInfo = new Map();
43
43
  isInitialized = false;
44
44
  currentView!: DG.TableView;
@@ -375,14 +375,15 @@ export class PeptidesModel {
375
375
  joinDataFrames(positionColumns: string[], splitSeqDf: DG.DataFrame, alphabet: string): void {
376
376
  // append splitSeqDf columns to source table and make sure columns are not added more than once
377
377
  const name = this.df.name;
378
+ const cols = this.df.columns;
378
379
  for (const colName of positionColumns) {
379
380
  const col = this.df.col(colName);
380
381
  const newCol = splitSeqDf.getCol(colName);
381
382
  if (col === null)
382
- this.df.columns.add(newCol);
383
+ cols.add(newCol);
383
384
  else {
384
- this.df.columns.remove(colName);
385
- this.df.columns.add(newCol);
385
+ cols.remove(colName);
386
+ cols.add(newCol);
386
387
  }
387
388
  CR.setAARRenderer(newCol, alphabet, this.sourceGrid);
388
389
  }
@@ -409,21 +410,15 @@ export class PeptidesModel {
409
410
  }
410
411
 
411
412
  createScaledCol(activityScaling: string, splitSeqDf: DG.DataFrame): void {
412
- const [scaledDf, _, newColName] =
413
- scaleActivity(activityScaling, this.df.getCol(C.COLUMNS_NAMES.ACTIVITY));
413
+ const scaledCol = scaleActivity(activityScaling, this.df.getCol(C.COLUMNS_NAMES.ACTIVITY));
414
414
  //TODO: make another func
415
- const scaledCol = scaledDf.getCol(C.COLUMNS_NAMES.ACTIVITY_SCALED);
416
- scaledCol.semType = C.SEM_TYPES.ACTIVITY_SCALED;
417
415
  splitSeqDf.columns.add(scaledCol);
418
- const oldScaledCol = this.df.getCol(C.COLUMNS_NAMES.ACTIVITY_SCALED);
419
- this.df.columns.replace(oldScaledCol, scaledCol);
416
+ this.df.columns.replace(C.COLUMNS_NAMES.ACTIVITY_SCALED, scaledCol);
420
417
  const gridCol = this.sourceGrid.col(C.COLUMNS_NAMES.ACTIVITY_SCALED);
421
- if (gridCol !== null) {
422
- gridCol.name = newColName;
423
- this.df.tags[C.COLUMNS_NAMES.ACTIVITY_SCALED] = newColName;
424
- }
418
+ if (gridCol)
419
+ gridCol.name = scaledCol.getTag('gridName');
425
420
 
426
- this.sourceGrid.columns.setOrder([newColName]);
421
+ this.sourceGrid.columns.setOrder([scaledCol.getTag('gridName')]);
427
422
  }
428
423
 
429
424
  calculateMonomerPositionStatistics(matrixDf: DG.DataFrame): DG.DataFrame {
@@ -964,10 +959,10 @@ export class PeptidesModel {
964
959
  const getBitAt = (i: number): boolean => {
965
960
  for (const position of positionList) {
966
961
  const positionCol: DG.Column<string> = this.df.getCol(position);
967
- if (this._mutationCliffsSelection[position].includes(positionCol.get(i)!))
962
+ if (this.mutationCliffsSelection[position].includes(positionCol.get(i)!))
968
963
  return true;
969
964
  }
970
- if (this._logoSummarySelection.includes(clusterCol?.get(i)!))
965
+ if (this.logoSummarySelection.includes(clusterCol?.get(i)!))
971
966
  return true;
972
967
  return false;
973
968
  };
@@ -982,7 +977,7 @@ export class PeptidesModel {
982
977
  filter.init((i) => {
983
978
  let result = true;
984
979
  for (const position of positionList) {
985
- const aarList = this._invariantMapSelection[position];
980
+ const aarList = this.invariantMapSelection[position];
986
981
  result &&= aarList.length == 0 || aarList.includes(this.df.get(position, i));
987
982
  }
988
983
  return result;
@@ -1077,9 +1072,9 @@ export class PeptidesModel {
1077
1072
 
1078
1073
  this.df.tags[C.PEPTIDES_ANALYSIS] = 'true';
1079
1074
  const scaledGridCol = this.sourceGrid.col(C.COLUMNS_NAMES.ACTIVITY_SCALED)!;
1080
- scaledGridCol.name = this.df.tags[C.COLUMNS_NAMES.ACTIVITY_SCALED];
1075
+ scaledGridCol.name = scaledGridCol.column!.getTag('gridName');
1081
1076
  scaledGridCol.format = '#.000';
1082
- this.sourceGrid.columns.setOrder([this.df.tags[C.COLUMNS_NAMES.ACTIVITY_SCALED]]);
1077
+ this.sourceGrid.columns.setOrder([scaledGridCol.name]);
1083
1078
  this.sourceGrid.props.allowColSelection = false;
1084
1079
 
1085
1080
  this.df.temp[C.EMBEDDING_STATUS] = false;
@@ -1,5 +1,5 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
- import {runTests, tests} from '@datagrok-libraries/utils/src/test';
2
+ import {runTests, tests, TestContext} from '@datagrok-libraries/utils/src/test';
3
3
 
4
4
  import './tests/core';
5
5
  import './tests/peptide-space-test';
@@ -10,8 +10,9 @@ export {tests};
10
10
  //name: test
11
11
  //input: string category {optional: true}
12
12
  //input: string test {optional: true}
13
+ //input: object testContext {optional: true}
13
14
  //output: dataframe result
14
- export async function test(category: string, test: string): Promise<DG.DataFrame> {
15
- const data = await runTests({category, test: test});
15
+ export async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {
16
+ const data = await runTests({category, test, testContext});
16
17
  return DG.DataFrame.fromObjects(data)!;
17
18
  }
package/src/tests/core.ts CHANGED
@@ -13,14 +13,14 @@ category('Core', () => {
13
13
  let simpleTable: DG.DataFrame;
14
14
  let simpleActivityCol: DG.Column<number>;
15
15
  let simpleAlignedSeqCol: DG.Column<string>;
16
- let simpleScaledDf: DG.DataFrame;
16
+ let simpleScaledCol: DG.Column<number>;
17
17
  let scalingFormula: (x: number) => number;
18
18
  let simpleScaledColName: string;
19
19
 
20
20
  let complexTable: DG.DataFrame;
21
21
  let complexActivityCol: DG.Column<number>;
22
22
  let complexAlignedSeqCol: DG.Column<string>;
23
- let complexScaledDf: DG.DataFrame;
23
+ let complexScaledCol: DG.Column<number>;
24
24
  let complexScaledColName: string;
25
25
  const alignedSequenceCol = 'AlignedSequence';
26
26
 
@@ -35,10 +35,9 @@ category('Core', () => {
35
35
  simpleAlignedSeqCol.tags[C.TAGS.ALPHABET] = 'PT';
36
36
  simpleAlignedSeqCol.tags[DG.TAGS.UNITS] = 'fasta';
37
37
  simpleAlignedSeqCol.tags['aligned'] = 'SEQ.MSA';
38
- [simpleScaledDf, scalingFormula, simpleScaledColName] = scaleActivity('-lg', simpleActivityCol);
38
+ simpleScaledCol = scaleActivity('-lg', simpleActivityCol);
39
39
 
40
- model = await startAnalysis(
41
- simpleActivityCol, simpleAlignedSeqCol, null, simpleTable, scalingFormula, simpleScaledColName, '-lg', []);
40
+ model = await startAnalysis(simpleActivityCol, simpleAlignedSeqCol, null, simpleTable, simpleScaledCol, '-lg');
42
41
  expect(model instanceof PeptidesModel, true);
43
42
 
44
43
  if (model != null) {
@@ -57,10 +56,10 @@ category('Core', () => {
57
56
  complexAlignedSeqCol.tags[DG.TAGS.UNITS] = 'separator';
58
57
  complexAlignedSeqCol.tags['aligned'] = 'SEQ.MSA';
59
58
  complexAlignedSeqCol.tags[C.TAGS.SEPARATOR] = '/';
60
- [complexScaledDf, scalingFormula, complexScaledColName] = scaleActivity('-lg', complexActivityCol);
59
+ complexScaledCol = scaleActivity('-lg', complexActivityCol);
61
60
 
62
61
  model = await startAnalysis(
63
- complexActivityCol, complexAlignedSeqCol, null, complexTable, scalingFormula, complexScaledColName, '-lg', []);
62
+ complexActivityCol, complexAlignedSeqCol, null, complexTable, complexScaledCol, '-lg');
64
63
  expect(model instanceof PeptidesModel, true);
65
64
 
66
65
  if (model != null) {
@@ -78,10 +77,9 @@ category('Core', () => {
78
77
  simpleAlignedSeqCol.tags[C.TAGS.ALPHABET] = 'PT';
79
78
  simpleAlignedSeqCol.tags[DG.TAGS.UNITS] = 'fasta';
80
79
  simpleAlignedSeqCol.tags['aligned'] = 'SEQ.MSA';
81
- [simpleScaledDf, scalingFormula, simpleScaledColName] = scaleActivity('-lg', simpleActivityCol);
80
+ simpleScaledCol = scaleActivity('-lg', simpleActivityCol);
82
81
 
83
- model = await startAnalysis(
84
- simpleActivityCol, simpleAlignedSeqCol, null, simpleTable, scalingFormula, simpleScaledColName, '-lg', []);
82
+ model = await startAnalysis(simpleActivityCol, simpleAlignedSeqCol, null, simpleTable, simpleScaledCol, '-lg');
85
83
  let v = grok.shell.getTableView('Peptides analysis');
86
84
  const d = v.dataFrame;
87
85
  const layout = v.saveLayout();
package/src/utils/misc.ts CHANGED
@@ -18,13 +18,10 @@ export function getSeparator(col: DG.Column<string>): string {
18
18
  return col.getTag(C.TAGS.SEPARATOR) ?? '';
19
19
  }
20
20
 
21
- export function scaleActivity(activityScaling: string, activityCol: DG.Column<number>, indexes?: number[],
22
- ): [DG.DataFrame, (x: number) => number, string] {
23
- const tempDf = DG.DataFrame.create(activityCol.length);
24
-
21
+ export function scaleActivity(scaling: string, activityCol: DG.Column<number>): DG.Column<number> {
25
22
  let formula = (x: number): number => x;
26
23
  let newColName = 'activity';
27
- switch (activityScaling) {
24
+ switch (scaling) {
28
25
  case 'none':
29
26
  break;
30
27
  case 'lg':
@@ -36,15 +33,16 @@ export function scaleActivity(activityScaling: string, activityCol: DG.Column<nu
36
33
  newColName = `-Log10(${newColName})`;
37
34
  break;
38
35
  default:
39
- throw new Error(`ScalingError: method \`${activityScaling}\` is not available.`);
36
+ throw new Error(`ScalingError: method \`${scaling}\` is not available.`);
40
37
  }
41
- tempDf.columns.addNewVirtual(
42
- C.COLUMNS_NAMES.ACTIVITY_SCALED, (i) => {
43
- const val = activityCol.get(indexes ? indexes[i] : i);
44
- return val ? formula(val) : val;
45
- }, DG.TYPE.FLOAT);
38
+ const scaledCol = DG.Column.float(C.COLUMNS_NAMES.ACTIVITY_SCALED, activityCol.length).init((i) => {
39
+ const val = activityCol.get(i);
40
+ return val ? formula(val) : val;
41
+ });
42
+ scaledCol.semType = C.SEM_TYPES.ACTIVITY_SCALED;
43
+ scaledCol.setTag('gridName', newColName);
46
44
 
47
- return [tempDf, formula, newColName];
45
+ return scaledCol;
48
46
  }
49
47
 
50
48
  export function calculateBarsData(columns: DG.Column<string>[], selection: DG.BitSet): type.MonomerDfStats {
@@ -26,32 +26,18 @@ export async function analyzePeptidesWidget(df: DG.DataFrame, col: DG.Column): P
26
26
  if (funcs.length == 0)
27
27
  return new DG.Widget(ui.label('Helm package is missing or out of date. Please install the latest version.'));
28
28
 
29
- let tempCol = null;
30
- let scaledDf: DG.DataFrame;
31
- let newScaledColName: string;
32
- let scalingFormula: (x: number) => number;
29
+ let scaledCol: DG.Column<number>;
33
30
 
34
- for (const column of df.columns.numerical)
35
- tempCol = column.type === DG.TYPE.FLOAT ? column : null;
36
-
37
- const defaultActivityColumn: DG.Column<number> | null = df.col('activity') || df.col('IC50') || tempCol;
31
+ const defaultActivityColumn: DG.Column<number> | null =
32
+ df.col('activity') || df.col('IC50') || DG.Utils.firstOrNull(df.columns.numerical);;
38
33
  const histogramHost = ui.div([], {id: 'pep-hist-host'});
39
34
 
40
- const indexes: number[] = [];
41
- const f = df.filter;
42
- df.onFilterChanged.subscribe(() => {
43
- for (let i = 0; i < f.length; ++i) {
44
- if (f.get(i))
45
- indexes.push(i);
46
- }
47
- });
48
35
  const activityScalingMethod = ui.choiceInput(
49
36
  'Scaling', 'none', ['none', 'lg', '-lg'],
50
37
  async (currentMethod: string): Promise<void> => {
51
- [scaledDf, scalingFormula, newScaledColName] =
52
- scaleActivity(currentMethod, activityColumnChoice.value!, indexes.length !== 0 ? indexes : undefined);
38
+ scaledCol = scaleActivity(currentMethod, activityColumnChoice.value!);
53
39
 
54
- const hist = scaledDf.plot.histogram({
40
+ const hist = DG.DataFrame.fromColumns([scaledCol]).plot.histogram({
55
41
  filteringEnabled: false,
56
42
  valueColumnName: C.COLUMNS_NAMES.ACTIVITY_SCALED,
57
43
  legendVisibility: 'Never',
@@ -65,9 +51,9 @@ export async function analyzePeptidesWidget(df: DG.DataFrame, col: DG.Column): P
65
51
  });
66
52
  activityScalingMethod.setTooltip('Function to apply for each value in activity column');
67
53
 
68
- const activityScalingMethodState = (_: any): void => {
54
+ const activityScalingMethodState = (): void => {
69
55
  activityScalingMethod.enabled = (activityColumnChoice.value ?? false) &&
70
- DG.Stats.fromColumn(activityColumnChoice.value!, df.filter).min > 0;
56
+ DG.Stats.fromColumn(activityColumnChoice.value!).min > 0;
71
57
  activityScalingMethod.fireChanged();
72
58
  };
73
59
  const activityColumnChoice = ui.columnInput('Activity', df, defaultActivityColumn, activityScalingMethodState);
@@ -77,9 +63,14 @@ export async function analyzePeptidesWidget(df: DG.DataFrame, col: DG.Column): P
77
63
 
78
64
  const inputsList = [activityColumnChoice, activityScalingMethod, clustersColumnChoice];
79
65
 
66
+ const bitsetChanged = df.filter.onChanged.subscribe(() => {
67
+ activityScalingMethodState();
68
+ })
69
+
80
70
  const startBtn = ui.button('Launch SAR', async () => {
81
- await startAnalysis(activityColumnChoice.value, col, clustersColumnChoice.value, df, scalingFormula,
82
- newScaledColName, activityScalingMethod.value ?? 'none', indexes);
71
+ await startAnalysis(activityColumnChoice.value!, col, clustersColumnChoice.value, df, scaledCol,
72
+ activityScalingMethod.value ?? 'none');
73
+ bitsetChanged.unsubscribe();
83
74
  });
84
75
  startBtn.style.alignSelf = 'center';
85
76
 
@@ -99,43 +90,30 @@ export async function analyzePeptidesWidget(df: DG.DataFrame, col: DG.Column): P
99
90
  );
100
91
  }
101
92
 
102
- export async function startAnalysis(activityColumn: DG.Column<number> | null, peptidesCol: DG.Column<string>,
103
- clustersColumn: DG.Column | null, currentDf: DG.DataFrame, scaleNum: (x: number) => number, newScaledColName: string,
104
- scaling: string, indexes: number[]): Promise<PeptidesModel | null> {
93
+ export async function startAnalysis(activityColumn: DG.Column<number>, peptidesCol: DG.Column<string>,
94
+ clustersColumn: DG.Column | null, currentDf: DG.DataFrame, scaledCol: DG.Column<number>, scaling: string,
95
+ ): Promise<PeptidesModel | null> {
105
96
  const progress = DG.TaskBarProgressIndicator.create('Loading SAR...');
106
97
  let model = null;
107
- if (activityColumn?.type === DG.TYPE.FLOAT) {
108
- const f = currentDf.filter;
98
+ if (activityColumn.type === DG.TYPE.FLOAT || activityColumn.type === DG.TYPE.INT) {
109
99
  //prepare new DF
110
- const newDf = DG.DataFrame.create(f.trueCount);
111
- const getIndex = indexes.length !== 0 ? (i: number): number => indexes[i] : (i: number): number => i;
112
- let activityCol: DG.Column<number> | null = null;
100
+ const newDf = DG.DataFrame.create(currentDf.rowCount);
101
+ const newDfCols = newDf.columns;
113
102
  for (const col of currentDf.columns.toList()) {
114
- let virtualCol: DG.Column<any>;
115
- if (col === activityColumn) {
116
- virtualCol = newDf.columns.addNewVirtual(
117
- C.COLUMNS_NAMES.ACTIVITY, (i) => activityColumn.get(getIndex(i)!), DG.TYPE.FLOAT);
118
- activityCol = virtualCol;
119
- } else if (col === peptidesCol) {
120
- virtualCol = newDf.columns.addNewVirtual(
121
- C.COLUMNS_NAMES.MACROMOLECULE, (i) => peptidesCol.get(getIndex(i)!), DG.TYPE.STRING);
122
- } else
123
- virtualCol = newDf.columns.addNewVirtual(col.name, (i) => col.get(getIndex(i)!), col.type as DG.TYPE);
124
- virtualCol.setTag(C.TAGS.VISIBLE, '0');
103
+ const currentCol = newDfCols.add(col);
104
+ if (col === activityColumn)
105
+ currentCol.name = C.COLUMNS_NAMES.ACTIVITY;
106
+ else if (col === peptidesCol)
107
+ currentCol.name = C.COLUMNS_NAMES.MACROMOLECULE;
108
+ col.setTag(C.TAGS.VISIBLE, '0');
125
109
  }
126
- activityCol!.semType = C.SEM_TYPES.ACTIVITY;
127
- const activityScaledCol = newDf.columns.addNewVirtual(C.COLUMNS_NAMES.ACTIVITY_SCALED, (i) => {
128
- const val = activityCol!.get(getIndex(i)!);
129
- return val ? scaleNum(val) : val;
130
- }, DG.TYPE.FLOAT);
131
- activityScaledCol.semType = C.SEM_TYPES.ACTIVITY_SCALED;
110
+ activityColumn.semType = C.SEM_TYPES.ACTIVITY;
111
+ newDfCols.add(scaledCol);
132
112
  newDf.name = 'Peptides analysis';
133
- newDf.tags[C.COLUMNS_NAMES.ACTIVITY_SCALED] = newScaledColName;
134
113
  if (clustersColumn) {
135
114
  newDf.getCol(clustersColumn.name).name = C.COLUMNS_NAMES.CLUSTERS;
136
115
  newDf.tags[C.TAGS.CLUSTERS] = C.COLUMNS_NAMES.CLUSTERS;
137
116
  }
138
- // newDf.tags[C.PEPTIDES_ANALYSIS] = 'true';
139
117
  newDf.tags['scaling'] = scaling;
140
118
 
141
119
  let monomerType = 'HELM_AA';
@@ -148,10 +126,9 @@ export async function startAnalysis(activityColumn: DG.Column<number> | null, pe
148
126
  }
149
127
 
150
128
  newDf.setTag('monomerType', monomerType);
151
-
152
129
  model = await PeptidesModel.getInstance(newDf);
153
130
  } else
154
- grok.shell.error('The activity column must be of floating point number type!');
131
+ grok.shell.error('The activity column must be of numeric type!');
155
132
  progress.close();
156
133
  return model;
157
134
  }
@@ -1,4 +1,4 @@
1
- <html><head><meta charset="utf-8"/><title>Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=916a90d7d48b. Commit 44350c85.</title><style type="text/css">html,
1
+ <html><head><meta charset="utf-8"/><title>Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=916a90d7d48b. Commit d2f9014f.</title><style type="text/css">html,
2
2
  body {
3
3
  font-family: Arial, Helvetica, sans-serif;
4
4
  font-size: 1rem;
@@ -229,9 +229,9 @@ header {
229
229
  font-size: 1rem;
230
230
  padding: 0 0.5rem;
231
231
  }
232
- </style></head><body><div id="jesthtml-content"><header><h1 id="title">Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=916a90d7d48b. Commit 44350c85.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-10-14 10:11:35</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><div class="suite-info"><div class="suite-path">/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts</div><div class="suite-time warn">96.64s</div></div><div class="suite-tests"><div class="test-result failed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">failed</div><div class="test-duration">76.108s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: Test result : Failed : 610 : Peptides.Core.Start analysis: simple : Unable to get project asset "getMonomerLib"
233
- Test result : Failed : 372 : Peptides.Core.Start analysis: сomplex : Unable to get project asset "getMonomerLib"
234
- Test result : Failed : 382 : Peptides.Core.Save and load project : Unable to get project asset "getMonomerLib"
232
+ </style></head><body><div id="jesthtml-content"><header><h1 id="title">Peptides Test Report. Datagrok version datagrok/datagrok:latest SHA=916a90d7d48b. Commit d2f9014f.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-10-18 15:00:21</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><div class="suite-info"><div class="suite-path">/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts</div><div class="suite-time warn">96.772s</div></div><div class="suite-tests"><div class="test-result failed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">failed</div><div class="test-duration">78.593s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: Test result : Failed : 459 : Peptides.Core.Start analysis: simple : Unable to get project asset "getMonomerLib"
233
+ Test result : Failed : 247 : Peptides.Core.Start analysis: сomplex : Unable to get project asset "getMonomerLib"
234
+ Test result : Failed : 532 : Peptides.Core.Save and load project : Unable to get project asset "getMonomerLib"
235
235
 
236
236
  at /home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:68:20
237
237
  at Generator.next (&lt;anonymous&gt;)
@@ -249,28 +249,28 @@ Test result : Failed : 382 : Peptides.Core.Save and load project : Unable to get
249
249
  at new Promise (&lt;anonymous&gt;)</pre><pre class="suite-consolelog-item-message">Testing Peptides package</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:66:11
250
250
  at Generator.next (&lt;anonymous&gt;)
251
251
  at fulfilled (/home/runner/work/public/public/packages/Peptides/src/__jest__/remote.test.ts:31:58)
252
- at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 0 : Peptides.Peptide space.test_table.is_not_empty : OK
253
- Test result : Success : 6368 : Peptides.Peptide space.PeptideSimilaritySpaceWidget.is_drawing : OK
254
- Test result : Success : 2 : Peptides.Peptide space.test_deminsionality_reducer : OK
255
- Test result : Success : 1 : Peptides.Peptide space.test_peptide_similarity_space_viewer : OK
256
- Test result : Success : 2945 : Peptides.Peptide space.peptide_space.DimensinalityReducer.UMAP.Levenshtein.is_numeric : OK
257
- Test result : Success : 3009 : Peptides.Peptide space.peptide_space.DimensinalityReducer.UMAP.Jaro-Winkler.is_numeric : OK
258
- Test result : Success : 3394 : Peptides.Peptide space.peptide_space.DimensinalityReducer.t-SNE.Levenshtein.is_numeric : OK
259
- Test result : Success : 3685 : Peptides.Peptide space.peptide_space.DimensinalityReducer.t-SNE.Jaro-Winkler.is_numeric : OK
260
- Test result : Success : 205 : Peptides.Peptide space.peptide_space.DimensinalityReducer.SPE.Levenshtein.is_numeric : OK
261
- Test result : Success : 629 : Peptides.Peptide space.peptide_space.DimensinalityReducer.SPE.Jaro-Winkler.is_numeric : OK
262
- Test result : Success : 174 : Peptides.Peptide space.peptide_space.DimensinalityReducer.pSPE.Levenshtein.is_numeric : OK
263
- Test result : Success : 731 : Peptides.Peptide space.peptide_space.DimensinalityReducer.pSPE.Jaro-Winkler.is_numeric : OK
264
- Test result : Success : 7686 : Peptides.Peptide space.peptide_space.DimensinalityReducer.OriginalSPE.Levenshtein.is_numeric : OK
265
- Test result : Success : 9316 : Peptides.Peptide space.peptide_space.DimensinalityReducer.OriginalSPE.Jaro-Winkler.is_numeric : OK
266
- Test result : Success : 1837 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.UMAP.Levenshtein.is_proper : OK
267
- Test result : Success : 2670 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.UMAP.Jaro-Winkler.is_proper : OK
268
- Test result : Success : 3278 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.t-SNE.Levenshtein.is_proper : OK
269
- Test result : Success : 4073 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.t-SNE.Jaro-Winkler.is_proper : OK
270
- Test result : Success : 244 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.SPE.Levenshtein.is_proper : OK
271
- Test result : Success : 666 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.SPE.Jaro-Winkler.is_proper : OK
272
- Test result : Success : 578 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.pSPE.Levenshtein.is_proper : OK
273
- Test result : Success : 612 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.pSPE.Jaro-Winkler.is_proper : OK
274
- Test result : Success : 9654 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.OriginalSPE.Levenshtein.is_proper : OK
275
- Test result : Success : 9749 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.OriginalSPE.Jaro-Winkler.is_proper : OK
252
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 1 : Peptides.Peptide space.test_table.is_not_empty : OK
253
+ Test result : Success : 5431 : Peptides.Peptide space.PeptideSimilaritySpaceWidget.is_drawing : OK
254
+ Test result : Success : 3 : Peptides.Peptide space.test_deminsionality_reducer : OK
255
+ Test result : Success : 0 : Peptides.Peptide space.test_peptide_similarity_space_viewer : OK
256
+ Test result : Success : 4271 : Peptides.Peptide space.peptide_space.DimensinalityReducer.UMAP.Levenshtein.is_numeric : OK
257
+ Test result : Success : 3805 : Peptides.Peptide space.peptide_space.DimensinalityReducer.UMAP.Jaro-Winkler.is_numeric : OK
258
+ Test result : Success : 3355 : Peptides.Peptide space.peptide_space.DimensinalityReducer.t-SNE.Levenshtein.is_numeric : OK
259
+ Test result : Success : 3861 : Peptides.Peptide space.peptide_space.DimensinalityReducer.t-SNE.Jaro-Winkler.is_numeric : OK
260
+ Test result : Success : 202 : Peptides.Peptide space.peptide_space.DimensinalityReducer.SPE.Levenshtein.is_numeric : OK
261
+ Test result : Success : 687 : Peptides.Peptide space.peptide_space.DimensinalityReducer.SPE.Jaro-Winkler.is_numeric : OK
262
+ Test result : Success : 337 : Peptides.Peptide space.peptide_space.DimensinalityReducer.pSPE.Levenshtein.is_numeric : OK
263
+ Test result : Success : 639 : Peptides.Peptide space.peptide_space.DimensinalityReducer.pSPE.Jaro-Winkler.is_numeric : OK
264
+ Test result : Success : 7964 : Peptides.Peptide space.peptide_space.DimensinalityReducer.OriginalSPE.Levenshtein.is_numeric : OK
265
+ Test result : Success : 8785 : Peptides.Peptide space.peptide_space.DimensinalityReducer.OriginalSPE.Jaro-Winkler.is_numeric : OK
266
+ Test result : Success : 2114 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.UMAP.Levenshtein.is_proper : OK
267
+ Test result : Success : 3464 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.UMAP.Jaro-Winkler.is_proper : OK
268
+ Test result : Success : 3603 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.t-SNE.Levenshtein.is_proper : OK
269
+ Test result : Success : 4096 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.t-SNE.Jaro-Winkler.is_proper : OK
270
+ Test result : Success : 234 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.SPE.Levenshtein.is_proper : OK
271
+ Test result : Success : 733 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.SPE.Jaro-Winkler.is_proper : OK
272
+ Test result : Success : 349 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.pSPE.Levenshtein.is_proper : OK
273
+ Test result : Success : 679 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.pSPE.Jaro-Winkler.is_proper : OK
274
+ Test result : Success : 8408 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.OriginalSPE.Levenshtein.is_proper : OK
275
+ Test result : Success : 8267 : Peptides.Peptide space.peptide_space.PeptideSimilaritySpaceViewer.OriginalSPE.Jaro-Winkler.is_proper : OK
276
276
  </pre></div></div></div></div></body></html>