@datagrok/bio 2.0.5 → 2.0.6

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
@@ -5,7 +5,7 @@
5
5
  "name": "Leonid Stolbov",
6
6
  "email": "lstolbov@datagrok.ai"
7
7
  },
8
- "version": "2.0.5",
8
+ "version": "2.0.6",
9
9
  "description": "Bio is a [package](https://datagrok.ai/help/develop/develop#packages) for the [Datagrok](https://datagrok.ai) platform",
10
10
  "repository": {
11
11
  "type": "git",
@@ -2,29 +2,24 @@ import * as grok from 'datagrok-api/grok';
2
2
  import * as ui from 'datagrok-api/ui';
3
3
  import * as DG from 'datagrok-api/dg';
4
4
 
5
+ import { getHelmMonomers } from '../package'
6
+
5
7
  const V2000_ATOM_NAME_POS = 31;
6
8
 
7
- export async function getFingerprints(mols: Array<string>, monomers: Array<string>): Promise<Uint8Array[]> {
8
- const mod = await grok.functions.call('Chem:getRdKitModule');
9
- const fps: Uint8Array[] = [];
9
+ export async function getMonomericMols(mcol: DG.Column, pattern: boolean = false): Promise<DG.Column> {
10
+ const monomers = getHelmMonomers(mcol);
11
+ let mols = await grok.functions.call('HELM:getMolFiles', {mcol: mcol});
10
12
 
11
13
  let dict = new Map();
12
14
  for(let i = 0; i < monomers.length; i++)
13
- dict.set(monomers[i], `R${Math.pow(10,(i + 1))}`);
14
-
15
- mols = changeToV3000(mols, dict);
15
+ dict.set(monomers[i], `${i + 1}`);
16
16
 
17
- for(let i = 0; i< mols.length; i++) {
18
- const mol = mod.get_mol(mols[i]);
19
- const fp = mol.get_pattern_fp_as_uint8array();
20
- fps.push(fp);
21
- mol?.delete();
22
- }
17
+ mols = changeToV3000(mols, dict, pattern);
23
18
 
24
- return fps;
19
+ return DG.Column.fromStrings('monomericMols', mols);
25
20
  }
26
21
 
27
- function changeToV3000(mols: Array<string>, dict: Map<string, string>): Array<string> {
22
+ function changeToV3000(mols: Array<string>, dict: Map<string, string>, pattern: boolean = false): Array<string> {
28
23
  for (let i = 0; i < mols.length; i++) {
29
24
  let curPos = 0;
30
25
  let endPos = 0;
@@ -50,7 +45,9 @@ M V30 BEGIN CTAB
50
45
  curPos = mol.indexOf('\n', curPos) + 1 + V2000_ATOM_NAME_POS;
51
46
  endPos = mol.indexOf(' ', curPos);
52
47
  const monomerName: string = mol.substring(curPos, endPos);
53
- molV3000 += `M V30 ${atomRowI + 1} ${dict.get(monomerName)} 0.000 0.000 0 0\n`;
48
+ molV3000 += pattern ?
49
+ `M V30 ${atomRowI + 1} R${dict.get(monomerName)} 0.000 0.000 0 0\n` :
50
+ `M V30 ${atomRowI + 1} At 0.000 0.000 0 0 MASS=${dict.get(monomerName)}\n`;
54
51
  }
55
52
 
56
53
  molV3000 += 'M V30 END ATOM\n';
package/src/package.ts CHANGED
@@ -32,7 +32,6 @@ import {
32
32
 
33
33
  import {splitAlignedSequences} from '@datagrok-libraries/bio/src/utils/splitter';
34
34
  import * as C from './utils/constants';
35
- import {getFingerprints} from './calculations/fingerprints';
36
35
 
37
36
  //tags: init
38
37
  export async function initBio() {
@@ -56,6 +55,16 @@ export function separatorSequenceCellRenderer(): MacromoleculeSequenceCellRender
56
55
  return new MacromoleculeSequenceCellRenderer();
57
56
  }
58
57
 
58
+ //name: MacromoleculeDifferenceCellRenderer
59
+ //tags: cellRenderer
60
+ //meta.cellType: MacromoleculeDifference
61
+ //meta.columnTags: quality=MacromoleculeDifference
62
+ //output: grid_cell_renderer result
63
+ export function macromoleculeDifferenceCellRenderer(): MacromoleculeDifferenceCellRenderer {
64
+ return new MacromoleculeDifferenceCellRenderer();
65
+ }
66
+
67
+
59
68
  function checkInputColumnUi(
60
69
  col: DG.Column, name: string, allowedNotations: string[] = [], allowedAlphabets: string[] = []
61
70
  ): boolean {
@@ -376,15 +385,6 @@ export function monomerCellRenderer(): MonomerCellRenderer {
376
385
  return new MonomerCellRenderer();
377
386
  }
378
387
 
379
- //name: MacromoleculeDifferenceCellRenderer
380
- //tags: cellRenderer
381
- //meta.cellType: MacromoleculeDifference
382
- //meta.columnTags: quality=MacromoleculeDifference
383
- //output: grid_cell_renderer result
384
- export function macromoleculeDifferenceCellRenderer(): MacromoleculeDifferenceCellRenderer {
385
- return new MacromoleculeDifferenceCellRenderer();
386
- }
387
-
388
388
  //name: testDetectMacromolecule
389
389
  //input: string path {choices: ['Demo:Files/', 'System:AppData/']}
390
390
  //output: dataframe result
@@ -460,11 +460,3 @@ export function getHelmMonomers(seqCol: DG.Column<string>): string[] {
460
460
  const stats = WebLogo.getStats(seqCol, 1, WebLogo.splitterAsHelm);
461
461
  return Object.keys(stats.freq);
462
462
  }
463
-
464
- export async function macromoleculesFingerprints(mcol: DG.Column): Promise<Uint8Array[]> {
465
- grok.functions.call('Chem:getRdKitModule');
466
- const monomers = getHelmMonomers(mcol);
467
- const mols = await grok.functions.call('HELM:getMolFiles', {mcol: mcol});
468
-
469
- return getFingerprints(mols.toList(), monomers);
470
- }
@@ -31,6 +31,18 @@ category('renderers', () => {
31
31
  performanceTest(generateManySequences, 'Many sequences');
32
32
  });
33
33
 
34
+ test('rendererMacromoleculeFasta', async () => {
35
+ await _rendererMacromoleculeFasta();
36
+ });
37
+
38
+ test('rendererMacromoleculeSeparator', async () => {
39
+ await _rendererMacromoleculeSeparator();
40
+ });
41
+
42
+ test('rendererMacromoleculeDifference', async () => {
43
+ await _rendererMacromoleculeDifference();
44
+ });
45
+
34
46
  test('afterMsa', async () => {
35
47
  await _testAfterMsa();
36
48
  });
@@ -39,10 +51,73 @@ category('renderers', () => {
39
51
  await _testAfterConvert();
40
52
  });
41
53
 
42
- test('setRenderer', async () => {
54
+ test('selectRendererBySemType', async () => {
55
+ await _selectRendererBySemType();
56
+ });
57
+
58
+ test('setRendererManually', async () => {
43
59
  await _setRendererManually();
44
60
  });
45
61
 
62
+ async function _rendererMacromoleculeFasta() {
63
+ const csv: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA.csv');
64
+ const df: DG.DataFrame = DG.DataFrame.fromCsv(csv);
65
+
66
+ const seqCol = df.getCol('Sequence');
67
+ const semType: string = await grok.functions.call('Bio:detectMacromolecule', {col: seqCol});
68
+ if (semType)
69
+ seqCol.semType = semType;
70
+
71
+ const tv: DG.TableView = grok.shell.addTableView(df);
72
+ // call to calculate 'cell.renderer' tag
73
+ await grok.data.detectSemanticTypes(df);
74
+
75
+ dfList.push(df);
76
+ tvList.push(tv);
77
+
78
+ const resCellRenderer = seqCol.getTag(DG.TAGS.CELL_RENDERER);
79
+ expect(resCellRenderer, 'sequence');
80
+ }
81
+
82
+ async function _rendererMacromoleculeSeparator() {
83
+ const csv: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_SEPARATOR_PT.csv');
84
+ const df: DG.DataFrame = DG.DataFrame.fromCsv(csv);
85
+
86
+ const seqCol = df.getCol('sequence');
87
+ const semType: string = await grok.functions.call('Bio:detectMacromolecule', {col: seqCol});
88
+ if (semType)
89
+ seqCol.semType = semType;
90
+
91
+ const tv: DG.TableView = grok.shell.addTableView(df);
92
+ // call to calculate 'cell.renderer' tag
93
+ await grok.data.detectSemanticTypes(df);
94
+
95
+ dfList.push(df);
96
+ tvList.push(tv);
97
+
98
+ const resCellRenderer = seqCol.getTag(DG.TAGS.CELL_RENDERER);
99
+ expect(resCellRenderer, 'sequence');
100
+ }
101
+
102
+ async function _rendererMacromoleculeDifference() {
103
+ const seqDiffCol: DG.Column = DG.Column.fromStrings('SequencesDiff',
104
+ ['meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV']);
105
+ seqDiffCol.tags[DG.TAGS.UNITS] = 'separator';
106
+ seqDiffCol.tags[TAGS.SEPARATOR] = '/';
107
+ seqDiffCol.semType = SEM_TYPES.MACROMOLECULE_DIFFERENCE;
108
+ const df = DG.DataFrame.fromColumns([seqDiffCol]);
109
+
110
+ const tv: DG.TableView = grok.shell.addTableView(df);
111
+ // call to calculate 'cell.renderer' tag
112
+ await grok.data.detectSemanticTypes(df);
113
+
114
+ dfList.push(df);
115
+ tvList.push(tv);
116
+
117
+ const resCellRenderer = seqDiffCol.getTag(DG.TAGS.CELL_RENDERER);
118
+ expect(resCellRenderer, 'MacromoleculeDifference');
119
+ }
120
+
46
121
  async function _testAfterMsa() {
47
122
  const fastaTxt: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA.fasta');
48
123
  const df: DG.DataFrame = importFasta(fastaTxt)[0];
@@ -86,36 +161,69 @@ category('renderers', () => {
86
161
  async function _testAfterConvert() {
87
162
  const csv: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA_PT.csv');
88
163
  const df: DG.DataFrame = DG.DataFrame.fromCsv(csv);
89
- const tv: DG.TableView = grok.shell.addTableView(df);
90
164
 
91
165
  const srcCol: DG.Column = df.col('sequence')!;
92
- // await grok.data.detectSemanticTypes(df);
93
166
  const semType: string = await grok.functions.call('Bio:detectMacromolecule', {col: srcCol});
94
167
  if (semType)
95
168
  srcCol.semType = semType;
169
+
170
+ const tv: DG.TableView = grok.shell.addTableView(df);
171
+ // call to calculate 'cell.renderer' tag
96
172
  await grok.data.detectSemanticTypes(df);
97
173
 
174
+ tvList.push(tv);
175
+ dfList.push(df);
176
+
98
177
  const tgtCol: DG.Column = await convertDo(srcCol, NOTATION.SEPARATOR, '/');
99
- expect(tgtCol.getTag(DG.TAGS.CELL_RENDERER), 'sequence');
178
+
179
+ const resCellRenderer = tgtCol.getTag(DG.TAGS.CELL_RENDERER);
180
+ expect(resCellRenderer, 'sequence');
100
181
 
101
182
  // check tgtCol with UnitsHandler constructor
102
183
  const uh: UnitsHandler = new UnitsHandler(tgtCol);
184
+ }
103
185
 
104
- tvList.push(tv);
186
+ async function _selectRendererBySemType() {
187
+ /* There are renderers for semType Macromolecule and MacromoleculeDifference.
188
+ Misbehavior was by selecting Macromolecule renderers for MacromoleculeDifference semType column
189
+ /**/
190
+ const seqDiffCol: DG.Column = DG.Column.fromStrings('SequencesDiff',
191
+ ['meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV']);
192
+ seqDiffCol.tags[DG.TAGS.UNITS] = 'separator';
193
+ seqDiffCol.tags[TAGS.SEPARATOR] = '/';
194
+ seqDiffCol.semType = SEM_TYPES.MACROMOLECULE_DIFFERENCE;
195
+ const df = DG.DataFrame.fromColumns([seqDiffCol]);
196
+ const tv = grok.shell.addTableView(df);
105
197
  dfList.push(df);
198
+ tvList.push(tv);
199
+
200
+ await delay(100);
201
+ const renderer = seqDiffCol.getTag(DG.TAGS.CELL_RENDERER);
202
+ if (renderer !== 'MacromoleculeDifference') // this is value of MacromoleculeDifferenceCR.cellType
203
+ throw new Error(`Units 'separator', separator '/' and semType 'MacromoleculeDifference' ` +
204
+ `have been manually set on column but after df was added as table, ` +
205
+ `view renderer has set to '${renderer}' instead of correct 'MacromoleculeDifference'.`);
106
206
  }
107
207
 
108
208
  async function _setRendererManually() {
109
- const df = DG.DataFrame.fromColumns([DG.Column.fromStrings(
110
- 'SequencesDiff', ['meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV'])]);
111
- df.col('SequencesDiff')!.tags[DG.TAGS.UNITS] = 'separator';
112
- df.col('SequencesDiff')!.tags[TAGS.SEPARATOR] = '/';
113
- df.col('SequencesDiff')!.semType = SEM_TYPES.MACROMOLECULE_DIFFERENCE;
114
- const tw = grok.shell.addTableView(df);
209
+ const seqDiffCol: DG.Column = DG.Column.fromStrings('SequencesDiff',
210
+ ['meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV']);
211
+ seqDiffCol.tags[DG.TAGS.UNITS] = 'separator';
212
+ seqDiffCol.tags[TAGS.SEPARATOR] = '/';
213
+ seqDiffCol.semType = SEM_TYPES.MACROMOLECULE;
214
+ const tgtCellRenderer = 'MacromoleculeDifference';
215
+ seqDiffCol.setTag(DG.TAGS.CELL_RENDERER, tgtCellRenderer);
216
+ const df = DG.DataFrame.fromColumns([seqDiffCol]);
217
+ await grok.data.detectSemanticTypes(df);
218
+ const tv = grok.shell.addTableView(df);
219
+ dfList.push(df);
220
+ tvList.push(tv);
221
+
115
222
  await delay(100);
116
- const renderer = tw.dataFrame.col('SequencesDiff')?.getTag(DG.TAGS.CELL_RENDERER);
117
- if (renderer !== 'MacromoleculeDifference') // this is value of MacromoleculeDifferenceCR.cellType
118
- throw new Error(`Units 'separator', separator '/' and semType 'MacromoleculeDifference' have been ` +
119
- `manually set on column but after df aws added as table view renderer has been reset to '${renderer}'`);
223
+ const resCellRenderer = seqDiffCol.getTag(DG.TAGS.CELL_RENDERER);
224
+ if (resCellRenderer !== tgtCellRenderer) // this is value of MacromoleculeDifferenceCR.cellType
225
+ throw new Error(`Tag 'cell.renderer' has been manually set to '${tgtCellRenderer}' for column ` +
226
+ `but after df was added as table, tag 'cell.renderer' has reset to '${resCellRenderer}' ` +
227
+ `instead of manual '${tgtCellRenderer}'.`);
120
228
  }
121
229
  });
@@ -79,6 +79,7 @@ export function convert(col: DG.Column): void {
79
79
  }
80
80
  }
81
81
 
82
+ /** Creates a new column with converted sequences and detects its semantic type */
82
83
  export async function convertDo(
83
84
  srcCol: DG.Column, targetNotation: NOTATION, separator: string | null
84
85
  ): Promise<DG.Column> {
@@ -1,4 +1,4 @@
1
- <html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit 4674dcdc.</title><style type="text/css">html,
1
+ <html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit 046cde35.</title><style type="text/css">html,
2
2
  body {
3
3
  font-family: Arial, Helvetica, sans-serif;
4
4
  font-size: 1rem;
@@ -229,7 +229,13 @@ 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">Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit 4674dcdc.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-09-16 09:01:55</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 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">1 passed</div><div class="summary-failed summary-empty">0 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/Bio/src/__jest__/remote.test.ts</div><div class="suite-time warn">36.733s</div></div><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">passed</div><div class="test-duration">22.479s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Bio/src/__jest__/test-node.ts:63:11)
232
+ </style></head><body><div id="jesthtml-content"><header><h1 id="title">Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=7770371320b2. Commit 046cde35.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-09-16 12:11:55</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/Bio/src/__jest__/remote.test.ts</div><div class="suite-time warn">46.232s</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">28.972s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: Test result : Failed : 197 : Bio.renderers.setRendererManually : Error: Tag 'cell.renderer' has been manually set to 'MacromoleculeDifference' for column but after df was added as table, tag 'cell.renderer' has reset to 'sequence' instead of manual 'MacromoleculeDifference'.
233
+
234
+ at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:68:20
235
+ at Generator.next (&lt;anonymous&gt;)
236
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:31:58)
237
+ at runMicrotasks (&lt;anonymous&gt;)
238
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Bio/src/__jest__/test-node.ts:63:11)
233
239
  at Generator.next (&lt;anonymous&gt;)
234
240
  at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/test-node.ts:28:58)
235
241
  at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Using web root: http://localhost:8080</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:40:11
@@ -243,121 +249,124 @@ header {
243
249
  at Generator.next (&lt;anonymous&gt;)
244
250
  at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:31:58)
245
251
  at runMicrotasks (&lt;anonymous&gt;)
246
- at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 13 : Bio.WebLogo.testGetStats : OK
252
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 6 : Bio.WebLogo.testGetStats : OK
247
253
  Test result : Success : 0 : Bio.WebLogo.testGetAlphabetSimilarity : OK
248
254
  Test result : Success : 3 : Bio.WebLogo.testPickupPaletteN1 : OK
249
- Test result : Success : 2 : Bio.WebLogo.testPickupPaletteN1e : OK
250
- Test result : Success : 1 : Bio.WebLogo.testPickupPaletteAA1 : OK
251
- Test result : Success : 2 : Bio.WebLogo.testPickupPaletteX : OK
255
+ Test result : Success : 1 : Bio.WebLogo.testPickupPaletteN1e : OK
256
+ Test result : Success : 2 : Bio.WebLogo.testPickupPaletteAA1 : OK
257
+ Test result : Success : 1 : Bio.WebLogo.testPickupPaletteX : OK
252
258
  Test result : Success : 0 : Bio.WebLogo.monomerToText.longMonomerSingle : OK
253
259
  Test result : Success : 0 : Bio.WebLogo.monomerToText.longMonomerShort : OK
254
260
  Test result : Success : 0 : Bio.WebLogo.monomerToText.longMonomerLong56 : OK
255
- Test result : Success : 1 : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartShort : OK
261
+ Test result : Success : 0 : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartShort : OK
256
262
  Test result : Success : 0 : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartLong56 : OK
257
263
  Test result : Success : 1 : Bio.Palettes.testPaletteN : OK
258
264
  Test result : Success : 0 : Bio.Palettes.testPaletteAA : OK
259
- Test result : Success : 223 : Bio.detectors.NegativeEmpty : OK
260
- Test result : Success : 25 : Bio.detectors.Negative1 : OK
261
- Test result : Success : 23 : Bio.detectors.Negative2 : OK
262
- Test result : Success : 29 : Bio.detectors.Negative3 : OK
263
- Test result : Success : 21 : Bio.detectors.NegativeSmiles : OK
264
- Test result : Success : 16 : Bio.detectors.Dna1 : OK
265
- Test result : Success : 33 : Bio.detectors.Rna1 : OK
266
- Test result : Success : 32 : Bio.detectors.AA1 : OK
267
- Test result : Success : 30 : Bio.detectors.MsaDna1 : OK
268
- Test result : Success : 14 : Bio.detectors.MsaAA1 : OK
269
- Test result : Success : 44 : Bio.detectors.SepDna : OK
270
- Test result : Success : 17 : Bio.detectors.SepRna : OK
271
- Test result : Success : 10 : Bio.detectors.SepPt : OK
272
- Test result : Success : 15 : Bio.detectors.SepUn1 : OK
273
- Test result : Success : 15 : Bio.detectors.SepUn2 : OK
274
- Test result : Success : 15 : Bio.detectors.SepMsaN1 : OK
275
- Test result : Success : 1916 : Bio.detectors.SamplesFastaCsvPt : OK
276
- Test result : Success : 25 : Bio.detectors.SamplesFastaCsvNegativeEntry : OK
277
- Test result : Success : 10 : Bio.detectors.SamplesFastaCsvNegativeLength : OK
278
- Test result : Success : 63 : Bio.detectors.SamplesFastaCsvNegativeUniProtKB : OK
279
- Test result : Success : 368 : Bio.detectors.SamplesFastaFastaPt : OK
280
- Test result : Success : 942 : Bio.detectors.samplesPeptidesComplexNegativeID : OK
281
- Test result : Success : 18 : Bio.detectors.SamplesPeptidesComplexNegativeMeasured : OK
282
- Test result : Success : 162 : Bio.detectors.SamplesPeptidesComplexNegativeValue : OK
283
- Test result : Success : 278 : Bio.detectors.samplesMsaComplexUn : OK
284
- Test result : Success : 36 : Bio.detectors.samplesMsaComplexNegativeActivity : OK
285
- Test result : Success : 174 : Bio.detectors.samplesIdCsvNegativeID : OK
286
- Test result : Success : 216 : Bio.detectors.samplesSarSmallCsvNegativeSmiles : OK
287
- Test result : Success : 183 : Bio.detectors.samplesHelmCsvHELM : OK
288
- Test result : Success : 21 : Bio.detectors.samplesHelmCsvNegativeActivity : OK
289
- Test result : Success : 161 : Bio.detectors.samplesTestHelmNegativeID : OK
290
- Test result : Success : 6 : Bio.detectors.samplesTestHelmNegativeTestType : OK
291
- Test result : Success : 7 : Bio.detectors.samplesTestHelmPositiveHelmString : OK
292
- Test result : Success : 4 : Bio.detectors.samplesTestHelmNegativeValid : OK
293
- Test result : Success : 4 : Bio.detectors.samplesTestHelmNegativeMolWeight : OK
294
- Test result : Success : 3 : Bio.detectors.samplesTestHelmNegativeMolFormula : OK
265
+ Test result : Success : 54 : Bio.detectors.NegativeEmpty : OK
266
+ Test result : Success : 18 : Bio.detectors.Negative1 : OK
267
+ Test result : Success : 31 : Bio.detectors.Negative2 : OK
268
+ Test result : Success : 18 : Bio.detectors.Negative3 : OK
269
+ Test result : Success : 15 : Bio.detectors.NegativeSmiles : OK
270
+ Test result : Success : 10 : Bio.detectors.Dna1 : OK
271
+ Test result : Success : 26 : Bio.detectors.Rna1 : OK
272
+ Test result : Success : 48 : Bio.detectors.AA1 : OK
273
+ Test result : Success : 16 : Bio.detectors.MsaDna1 : OK
274
+ Test result : Success : 9 : Bio.detectors.MsaAA1 : OK
275
+ Test result : Success : 34 : Bio.detectors.SepDna : OK
276
+ Test result : Success : 12 : Bio.detectors.SepRna : OK
277
+ Test result : Success : 14 : Bio.detectors.SepPt : OK
278
+ Test result : Success : 8 : Bio.detectors.SepUn1 : OK
279
+ Test result : Success : 13 : Bio.detectors.SepUn2 : OK
280
+ Test result : Success : 6 : Bio.detectors.SepMsaN1 : OK
281
+ Test result : Success : 383 : Bio.detectors.SamplesFastaCsvPt : OK
282
+ Test result : Success : 7 : Bio.detectors.SamplesFastaCsvNegativeEntry : OK
283
+ Test result : Success : 14 : Bio.detectors.SamplesFastaCsvNegativeLength : OK
284
+ Test result : Success : 48 : Bio.detectors.SamplesFastaCsvNegativeUniProtKB : OK
285
+ Test result : Success : 117 : Bio.detectors.SamplesFastaFastaPt : OK
286
+ Test result : Success : 707 : Bio.detectors.samplesPeptidesComplexNegativeID : OK
287
+ Test result : Success : 17 : Bio.detectors.SamplesPeptidesComplexNegativeMeasured : OK
288
+ Test result : Success : 137 : Bio.detectors.SamplesPeptidesComplexNegativeValue : OK
289
+ Test result : Success : 162 : Bio.detectors.samplesMsaComplexUn : OK
290
+ Test result : Success : 24 : Bio.detectors.samplesMsaComplexNegativeActivity : OK
291
+ Test result : Success : 83 : Bio.detectors.samplesIdCsvNegativeID : OK
292
+ Test result : Success : 165 : Bio.detectors.samplesSarSmallCsvNegativeSmiles : OK
293
+ Test result : Success : 235 : Bio.detectors.samplesHelmCsvHELM : OK
294
+ Test result : Success : 16 : Bio.detectors.samplesHelmCsvNegativeActivity : OK
295
+ Test result : Success : 139 : Bio.detectors.samplesTestHelmNegativeID : OK
296
+ Test result : Success : 19 : Bio.detectors.samplesTestHelmNegativeTestType : OK
297
+ Test result : Success : 5 : Bio.detectors.samplesTestHelmPositiveHelmString : OK
298
+ Test result : Success : 8 : Bio.detectors.samplesTestHelmNegativeValid : OK
299
+ Test result : Success : 7 : Bio.detectors.samplesTestHelmNegativeMolWeight : OK
300
+ Test result : Success : 6 : Bio.detectors.samplesTestHelmNegativeMolFormula : OK
295
301
  Test result : Success : 6 : Bio.detectors.samplesTestHelmNegativeSmiles : OK
296
- Test result : Success : 936 : Bio.detectors.samplesTestDemogNegativeAll : OK
297
- Test result : Success : 814 : Bio.detectors.samplesTestSmiles2NegativeSmiles : OK
298
- Test result : Success : 157 : Bio.detectors.samplesTestActivityCliffsNegativeSmiles : OK
299
- Test result : Success : 177 : Bio.detectors.samplesFastaPtPosSequence : OK
300
- Test result : Success : 207 : Bio.detectors.samplesTestCerealNegativeCerealName : OK
301
- Test result : Success : 277 : Bio.detectors.samplesTestSpgi100NegativeStereoCategory : OK
302
- Test result : Success : 4 : Bio.detectors.samplesTestSpgi100NegativeScaffoldNames : OK
303
- Test result : Success : 15 : Bio.detectors.samplesTestSpgi100NegativePrimaryScaffoldName : OK
304
- Test result : Success : 4 : Bio.detectors.samplesTestSpgi100NegativeSampleName : OK
305
- Test result : Success : 198 : Bio.detectors.samplesTestUnichemSourcesNegativeSrcUrl : OK
306
- Test result : Success : 15 : Bio.detectors.samplesTestUnichemSourcesNegativeBaseIdUrl : OK
307
- Test result : Success : 177 : Bio.detectors.samplesTestDmvOfficesNegativeOfficeName : OK
308
- Test result : Success : 20 : Bio.detectors.samplesTestDmvOfficesNegativeCity : OK
309
- Test result : Success : 199 : Bio.detectors.samplesTestAlertCollectionNegativeSmarts : OK
310
- Test result : Success : 1120 : Bio.MSA.isCorrect : OK
311
- Test result : Success : 284 : Bio.MSA.isCorrectLong : OK
312
- Test result : Success : 1156 : Bio.sequenceSpace.sequenceSpaceOpens : OK
313
- Test result : Success : 3830 : Bio.sequenceSpace.sequenceSpaceOpensWithEmptyRows : OK
314
- Test result : Success : 859 : Bio.activityCliffs.activityCliffsOpen : OK
315
- Test result : Success : 752 : Bio.activityCliffs.activityCliffsOpenWithEmptyRows : OK
302
+ Test result : Success : 733 : Bio.detectors.samplesTestDemogNegativeAll : OK
303
+ Test result : Success : 380 : Bio.detectors.samplesTestSmiles2NegativeSmiles : OK
304
+ Test result : Success : 113 : Bio.detectors.samplesTestActivityCliffsNegativeSmiles : OK
305
+ Test result : Success : 126 : Bio.detectors.samplesFastaPtPosSequence : OK
306
+ Test result : Success : 158 : Bio.detectors.samplesTestCerealNegativeCerealName : OK
307
+ Test result : Success : 229 : Bio.detectors.samplesTestSpgi100NegativeStereoCategory : OK
308
+ Test result : Success : 5 : Bio.detectors.samplesTestSpgi100NegativeScaffoldNames : OK
309
+ Test result : Success : 14 : Bio.detectors.samplesTestSpgi100NegativePrimaryScaffoldName : OK
310
+ Test result : Success : 6 : Bio.detectors.samplesTestSpgi100NegativeSampleName : OK
311
+ Test result : Success : 160 : Bio.detectors.samplesTestUnichemSourcesNegativeSrcUrl : OK
312
+ Test result : Success : 8 : Bio.detectors.samplesTestUnichemSourcesNegativeBaseIdUrl : OK
313
+ Test result : Success : 136 : Bio.detectors.samplesTestDmvOfficesNegativeOfficeName : OK
314
+ Test result : Success : 7 : Bio.detectors.samplesTestDmvOfficesNegativeCity : OK
315
+ Test result : Success : 184 : Bio.detectors.samplesTestAlertCollectionNegativeSmarts : OK
316
+ Test result : Success : 932 : Bio.MSA.isCorrect : OK
317
+ Test result : Success : 293 : Bio.MSA.isCorrectLong : OK
318
+ Test result : Success : 1441 : Bio.sequenceSpace.sequenceSpaceOpens : OK
319
+ Test result : Success : 7627 : Bio.sequenceSpace.sequenceSpaceOpensWithEmptyRows : OK
320
+ Test result : Success : 1467 : Bio.activityCliffs.activityCliffsOpen : OK
321
+ Test result : Success : 1356 : Bio.activityCliffs.activityCliffsOpenWithEmptyRows : OK
316
322
  Test result : Success : 1 : Bio.splitters.helm1 : OK
317
323
  Test result : Success : 1 : Bio.splitters.helm2 : OK
318
- Test result : Success : 1 : Bio.splitters.helm3-multichar : OK
319
- Test result : Success : 1 : Bio.splitters.testHelm1 : OK
320
- Test result : Success : 1 : Bio.splitters.testHelm2 : OK
321
- Test result : Success : 1 : Bio.splitters.testHelm3 : OK
322
- Test result : Success : 280 : Bio.splitters.splitToMonomers : OK
323
- Test result : Success : 77 : Bio.renderers.long sequence performance : OK
324
- Test result : Success : 608 : Bio.renderers.many sequence performance : OK
325
- Test result : Success : 469 : Bio.renderers.afterMsa : OK
326
- Test result : Success : 225 : Bio.renderers.afterConvert : OK
327
- Test result : Success : 159 : Bio.renderers.setRenderer : OK
324
+ Test result : Success : 0 : Bio.splitters.helm3-multichar : OK
325
+ Test result : Success : 0 : Bio.splitters.testHelm1 : OK
326
+ Test result : Success : 0 : Bio.splitters.testHelm2 : OK
327
+ Test result : Success : 0 : Bio.splitters.testHelm3 : OK
328
+ Test result : Success : 518 : Bio.splitters.splitToMonomers : OK
329
+ Test result : Success : 157 : Bio.renderers.long sequence performance : OK
330
+ Test result : Success : 1230 : Bio.renderers.many sequence performance : OK
331
+ Test result : Success : 372 : Bio.renderers.rendererMacromoleculeFasta : OK
332
+ Test result : Success : 289 : Bio.renderers.rendererMacromoleculeSeparator : OK
333
+ Test result : Success : 126 : Bio.renderers.rendererMacromoleculeDifference : OK
334
+ Test result : Success : 812 : Bio.renderers.afterMsa : OK
335
+ Test result : Success : 351 : Bio.renderers.afterConvert : OK
336
+ Test result : Success : 178 : Bio.renderers.selectRendererBySemType : OK
328
337
  Test result : Success : 5 : Bio.converters.testFastaPtToSeparator : OK
329
- Test result : Success : 3 : Bio.converters.testFastaDnaToSeparator : OK
330
- Test result : Success : 3 : Bio.converters.testFastaRnaToSeparator : OK
331
- Test result : Success : 3 : Bio.converters.testFastaGapsToSeparator : OK
332
- Test result : Success : 2 : Bio.converters.testFastaPtToHelm : OK
333
- Test result : Success : 1 : Bio.converters.testFastaDnaToHelm : OK
334
- Test result : Success : 2 : Bio.converters.testFastaRnaToHelm : OK
338
+ Test result : Success : 5 : Bio.converters.testFastaDnaToSeparator : OK
339
+ Test result : Success : 13 : Bio.converters.testFastaRnaToSeparator : OK
340
+ Test result : Success : 5 : Bio.converters.testFastaGapsToSeparator : OK
341
+ Test result : Success : 3 : Bio.converters.testFastaPtToHelm : OK
342
+ Test result : Success : 2 : Bio.converters.testFastaDnaToHelm : OK
343
+ Test result : Success : 11 : Bio.converters.testFastaRnaToHelm : OK
335
344
  Test result : Success : 2 : Bio.converters.testFastaGapsToHelm : OK
336
- Test result : Success : 0 : Bio.converters.testSeparatorPtToFasta : OK
345
+ Test result : Success : 1 : Bio.converters.testSeparatorPtToFasta : OK
337
346
  Test result : Success : 1 : Bio.converters.testSeparatorDnaToFasta : OK
338
347
  Test result : Success : 0 : Bio.converters.testSeparatorRnaToFasta : OK
339
- Test result : Success : 1 : Bio.converters.testSeparatorGapsToFasta : OK
340
- Test result : Success : 0 : Bio.converters.testSeparatorPtToHelm : OK
348
+ Test result : Success : 0 : Bio.converters.testSeparatorGapsToFasta : OK
349
+ Test result : Success : 1 : Bio.converters.testSeparatorPtToHelm : OK
341
350
  Test result : Success : 0 : Bio.converters.testSeparatorDnaToHelm : OK
342
351
  Test result : Success : 1 : Bio.converters.testSeparatorRnaToHelm : OK
343
352
  Test result : Success : 0 : Bio.converters.testSeparatorGapsToHelm : OK
344
353
  Test result : Success : 1 : Bio.converters.testHelmDnaToFasta : OK
345
354
  Test result : Success : 0 : Bio.converters.testHelmRnaToFasta : OK
346
355
  Test result : Success : 0 : Bio.converters.testHelmPtToFasta : OK
347
- Test result : Success : 0 : Bio.converters.testHelmDnaToSeparator : OK
348
- Test result : Success : 1 : Bio.converters.testHelmRnaToSeparator : OK
356
+ Test result : Success : 1 : Bio.converters.testHelmDnaToSeparator : OK
357
+ Test result : Success : 0 : Bio.converters.testHelmRnaToSeparator : OK
349
358
  Test result : Success : 0 : Bio.converters.testHelmPtToSeparator : OK
350
- Test result : Success : 1 : Bio.converters.testHelmLoneRibose : OK
351
- Test result : Success : 1 : Bio.converters.testHelmLoneDeoxyribose : OK
352
- Test result : Success : 1 : Bio.converters.testHelmLonePhosphorus : OK
359
+ Test result : Success : 3 : Bio.converters.testHelmLoneRibose : OK
360
+ Test result : Success : 3 : Bio.converters.testHelmLoneDeoxyribose : OK
361
+ Test result : Success : 2 : Bio.converters.testHelmLonePhosphorus : OK
353
362
  Test result : Success : 0 : Bio.fastaFileHandler.testNormalFormatting : OK
354
- Test result : Success : 1 : Bio.fastaFileHandler.testExtraSpaces : OK
363
+ Test result : Success : 0 : Bio.fastaFileHandler.testExtraSpaces : OK
355
364
  Test result : Success : 0 : Bio.fastaFileHandler.testExtraNewlines : OK
356
- Test result : Success : 118 : Bio.WebLogo-positions.allPositions : OK
357
- Test result : Success : 87 : Bio.WebLogo-positions.positions with shrinkEmptyTail option true (filterd) : OK
358
- Test result : Success : 101 : Bio.WebLogo-positions.positions with skipEmptyPositions option : OK
359
- Test result : Success : 14 : Bio.checkInputColumn.testMsaPos : OK
360
- Test result : Success : 2 : Bio.checkInputColumn.testMsaNegHelm : OK
365
+ Test result : Success : 116 : Bio.WebLogo-positions.allPositions : OK
366
+ Test result : Success : 126 : Bio.WebLogo-positions.positions with shrinkEmptyTail option true (filterd) : OK
367
+ Test result : Success : 100 : Bio.WebLogo-positions.positions with skipEmptyPositions option : OK
368
+ Test result : Success : 4 : Bio.checkInputColumn.testMsaPos : OK
369
+ Test result : Success : 1 : Bio.checkInputColumn.testMsaNegHelm : OK
361
370
  Test result : Success : 2 : Bio.checkInputColumn.testMsaNegUN : OK
362
- Test result : Success : 0 : Bio.checkInputColumn.testGetActionFunctionMeta : OK
371
+ Test result : Success : 1 : Bio.checkInputColumn.testGetActionFunctionMeta : OK
363
372
  </pre></div></div></div></div></body></html>