@datagrok/bio 1.7.5 → 1.7.8

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.
@@ -113,6 +113,8 @@ MWRSWY-CKHP
113
113
  testIdCsv = 'testIdCsv',
114
114
  testSmilesCsv = 'testSmilesCsv',
115
115
  testSmiles2Csv = 'testSmiles2Csv',
116
+ testCerealCsv = 'testCerealCsv',
117
+ testActivityCliffsCsv = 'testActivityCliffsCsv',
116
118
  }
117
119
 
118
120
  const samples: { [key: string]: string } = {
@@ -128,6 +130,8 @@ MWRSWY-CKHP
128
130
  'testIdCsv': 'System:AppData/Bio/tests/testId.csv',
129
131
  'testSmilesCsv': 'System:AppData/Bio/tests/testSmiles.csv',
130
132
  'testSmiles2Csv': 'System:AppData/Bio/tests/testSmiles2.csv',
133
+ 'testActivityCliffsCsv': 'System:AppData/Bio/tests/testActivityCliffs.csv', // smiles
134
+ 'testCerealCsv': 'System:AppData/Bio/tests/testCereal.csv',
131
135
  };
132
136
 
133
137
  const _samplesDfs: { [key: string]: Promise<DG.DataFrame> } = {};
@@ -303,8 +307,16 @@ MWRSWY-CKHP
303
307
  await _testNeg(readSamples(Samples.testSmiles2Csv), 'SMILES');
304
308
  });
305
309
 
310
+ test('samplesTestActivityCliffsNegativeSmiles', async () => {
311
+ await _testNeg(readSamples(Samples.testActivityCliffsCsv), 'smiles');
312
+ });
313
+
306
314
  test('samplesFastaPtPosSequence', async () => {
307
- await (_testPos(readSamples(Samples.fastaPtCsv), 'sequence', 'fasta:SEQ:PT'));
315
+ await _testPos(readSamples(Samples.fastaPtCsv), 'sequence', 'fasta:SEQ:PT');
316
+ });
317
+
318
+ test('samplesTestCerealNegativeCerealName', async () => {
319
+ await _testNeg(readSamples(Samples.testCerealCsv), 'cereal_name');
308
320
  });
309
321
  });
310
322
 
@@ -21,10 +21,36 @@ category('splitters', () => {
21
21
  ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'Aca',
22
22
  'D-Tyr_Et', 'D-Dap', 'dV', 'E', 'N', 'pnG', 'Phe_4Me']
23
23
  ],
24
+ // HELM editor dialog returns HELM string with multichar monomer names in square brackets
25
+ helm3: [
26
+ 'PEPTIDE1{[meI].[hHis].[Aca].N.T.[dK].[Thr_PO3H2].[Aca].[D-Tyr_Et].[D-Dap].[dV].E.N.[pnG].[Phe_4Me]}$$$',
27
+ ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'Aca',
28
+ 'D-Tyr_Et', 'D-Dap', 'dV', 'E', 'N', 'pnG', 'Phe_4Me']
29
+ ],
30
+
31
+ testHelm1: [
32
+ 'RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$',
33
+ ['R(U)P', 'R(T)P', 'R(G)P', 'R(C)P', 'R(A)']
34
+ ],
35
+
36
+ testHelm2: [
37
+ 'RNA1{P.R(U)P.R(T)}$$$$',
38
+ ['P', 'R(U)P', 'R(T)']
39
+ ],
40
+ testHelm3: [
41
+ 'RNA1{P.R(U).P.R(T)}$$$$',
42
+ ['P', 'R(U)', 'P', 'R(T)']
43
+ ],
24
44
  };
25
45
 
26
46
  test('helm1', async () => { await _testHelmSplitter(data.helm1[0], data.helm1[1]); });
27
47
  test('helm2', async () => { await _testHelmSplitter(data.helm2[0], data.helm2[1]); });
48
+ test('helm3-multichar', async () => { await _testHelmSplitter(data.helm3[0], data.helm3[1]); });
49
+
50
+ // examples from Helm/tests/test.csv file
51
+ test('testHelm1', async () => { await _testHelmSplitter(data.testHelm1[0], data.testHelm1[1]); });
52
+ test('testHelm2', async () => { await _testHelmSplitter(data.testHelm2[0], data.testHelm2[1]); });
53
+ test('testHelm3', async () => { await _testHelmSplitter(data.testHelm3[0], data.testHelm3[1]); });
28
54
  });
29
55
 
30
56
  export async function _testHelmSplitter(src: string, tgt: string[]) {
@@ -219,7 +219,6 @@ export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
219
219
 
220
220
  g.restore();
221
221
  return;
222
-
223
222
  }
224
223
  }
225
224
  }
@@ -1,6 +1,7 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import * as ui from 'datagrok-api/ui';
3
3
  import * as grok from 'datagrok-api/grok';
4
+ import $ from 'cash-dom';
4
5
 
5
6
  import {Subscription} from 'rxjs';
6
7
  import {NotationConverter, NOTATION} from '@datagrok-libraries/bio/src/utils/notation-converter';
@@ -27,14 +28,26 @@ export function convert(col: DG.Column): void {
27
28
  const filteredNotations = notations.filter((e) => e !== current);
28
29
  const targetNotationInput = ui.choiceInput('Convert to', filteredNotations[0], filteredNotations);
29
30
 
30
- const separatorInput = ui.choiceInput('Choose separator', separatorArray[0], separatorArray);
31
+ const separatorInput = ui.choiceInput('Separator', separatorArray[0], separatorArray);
32
+
33
+ // hide the separator input for non-SEPARATOR target notations
34
+ if (targetNotationInput.value !== NOTATION.SEPARATOR)
35
+ $(separatorInput.root).hide();
36
+ else
37
+ $(separatorInput.root).show();
38
+
39
+ targetNotationInput.onChanged(async () => {
40
+ if (targetNotationInput.value !== NOTATION.SEPARATOR)
41
+ $(separatorInput.root).hide();
42
+ else
43
+ $(separatorInput.root).show();
44
+ });
31
45
 
32
46
  if (convertDialog == null) {
33
47
  convertDialog = ui.dialog('Convert sequence notation')
34
48
  .add(ui.div([
35
49
  ui.h1('Current notation: ' + current),
36
50
  targetNotationInput.root,
37
- // TODO: conditional separator input
38
51
  separatorInput.root
39
52
  ]))
40
53
  .onOK(async () => {
@@ -46,18 +59,19 @@ export function convert(col: DG.Column): void {
46
59
  .show();
47
60
 
48
61
  convertDialogSubs.push(convertDialog.onClose.subscribe((value) => {
49
- convertDialogSubs.forEach((s) => {s.unsubscribe(); });
62
+ convertDialogSubs.forEach((s) => { s.unsubscribe(); });
50
63
  convertDialogSubs = [];
51
64
  convertDialog = null;
52
65
  }));
53
66
  }
54
67
  }
55
68
 
56
- export async function convertDo(srcCol: DG.Column, targetNotation: NOTATION, separator: string | null): Promise<DG.Column> {
69
+ export async function convertDo(
70
+ srcCol: DG.Column, targetNotation: NOTATION, separator: string | null
71
+ ): Promise<DG.Column> {
57
72
  const converter = new NotationConverter(srcCol);
58
73
  const newColumn = converter.convert(targetNotation, separator);
59
74
  srcCol.dataFrame.columns.add(newColumn);
60
75
  await grok.data.detectSemanticTypes(srcCol.dataFrame);
61
76
  return newColumn;
62
77
  }
63
-
@@ -30,9 +30,10 @@ function _fastaToStrings(fasta: string): string[] {
30
30
  *
31
31
  * @param {DG.Column} srcCol Column with sequences.
32
32
  * @param {boolean} isAligned Whether the column is aligned.
33
+ * @param {string} unUsedName
33
34
  * @return {Promise<DG.Column>} Aligned sequences.
34
35
  */
35
- export async function runKalign(srcCol: DG.Column, isAligned = false): Promise<DG.Column> {
36
+ export async function runKalign(srcCol: DG.Column, isAligned = false, unUsedName: string = ''): Promise<DG.Column> {
36
37
  let sequences = srcCol.toList();
37
38
 
38
39
  if (isAligned)
@@ -56,7 +57,7 @@ export async function runKalign(srcCol: DG.Column, isAligned = false): Promise<D
56
57
  throw new Error(`kalign output no result`);
57
58
 
58
59
  const aligned = _fastaToStrings(buf).slice(0, sequences.length);
59
- const tgtCol = DG.Column.fromStrings(`msa(${srcCol.name})`, aligned);
60
+ const tgtCol = DG.Column.fromStrings(unUsedName, aligned);
60
61
 
61
62
  // units
62
63
  const srcUnits = srcCol.getTag(DG.TAGS.UNITS);
@@ -1,7 +1,10 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import {WebLogo, SplitterFunc} from '@datagrok-libraries/bio/src/viewers/web-logo';
3
3
  import * as grok from 'datagrok-api/grok';
4
- import { CAP_GROUP_NAME, CAP_GROUP_SMILES, jsonSdfMonomerLibDict, MONOMER_SYMBOL, RGROUP_ALTER_ID, RGROUP_FIELD, RGROUP_LABEL, SDF_MONOMER_NAME } from '../const';
4
+ import {
5
+ CAP_GROUP_NAME, CAP_GROUP_SMILES, jsonSdfMonomerLibDict, MONOMER_SYMBOL,
6
+ RGROUP_ALTER_ID, RGROUP_FIELD, RGROUP_LABEL, SDF_MONOMER_NAME
7
+ } from '../const';
5
8
 
6
9
  export const HELM_CORE_LIB_FILENAME = '/samples/HELMCoreLibrary.json';
7
10
  export const HELM_CORE_LIB_MONOMER_SYMBOL = 'symbol';
@@ -50,7 +53,7 @@ export function createJsonMonomerLibFromSdf(table: DG.DataFrame): any {
50
53
  const resultLib = [];
51
54
  for (let i = 0; i < table.rowCount; i++) {
52
55
  const monomer: { [key: string]: string | any } = {};
53
- Object.keys(jsonSdfMonomerLibDict).forEach(key => {
56
+ Object.keys(jsonSdfMonomerLibDict).forEach((key) => {
54
57
  if (key === MONOMER_SYMBOL) {
55
58
  const monomerSymbol = table.get(jsonSdfMonomerLibDict[key], i);
56
59
  monomer[key] = monomerSymbol === '.' ? table.get(SDF_MONOMER_NAME, i) : monomerSymbol;
@@ -59,21 +62,20 @@ export function createJsonMonomerLibFromSdf(table: DG.DataFrame): any {
59
62
  const jsonRgroups: any[] = [];
60
63
  rgroups.forEach((g: string) => {
61
64
  const rgroup: { [key: string]: string | any } = {};
62
- const altAtom = g.substring(g.lastIndexOf("]") + 1);
63
- let radicalNum = g.match(/\[R(\d+)\]/)![1];
65
+ const altAtom = g.substring(g.lastIndexOf(']') + 1);
66
+ const radicalNum = g.match(/\[R(\d+)\]/)![1];
64
67
  rgroup[CAP_GROUP_SMILES] = altAtom === 'H' ? `[*:${radicalNum}][H]` : `O[*:${radicalNum}]`;
65
68
  rgroup[RGROUP_ALTER_ID] = altAtom === 'H' ? `R${radicalNum}-H` : `R${radicalNum}-OH`;
66
69
  rgroup[CAP_GROUP_NAME] = altAtom === 'H' ? `H` : `OH`;
67
70
  rgroup[RGROUP_LABEL] = `R${radicalNum}`;
68
71
  jsonRgroups.push(rgroup);
69
- })
72
+ });
70
73
  monomer[key] = jsonRgroups;
71
74
  } else {
72
- if((jsonSdfMonomerLibDict as { [key: string]: string | any })[key]) {
75
+ if ((jsonSdfMonomerLibDict as { [key: string]: string | any })[key])
73
76
  monomer[key] = table.get((jsonSdfMonomerLibDict as { [key: string]: string | any })[key], i);
74
- }
75
77
  }
76
- })
78
+ });
77
79
  resultLib.push(monomer);
78
80
  }
79
81
  return resultLib;
@@ -0,0 +1,339 @@
1
+ <html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit cdc230d8.</title><style type="text/css">html,
2
+ body {
3
+ font-family: Arial, Helvetica, sans-serif;
4
+ font-size: 1rem;
5
+ margin: 0;
6
+ padding: 0;
7
+ color: #333;
8
+ }
9
+ body {
10
+ padding: 2rem 1rem;
11
+ font-size: 0.85rem;
12
+ }
13
+ #jesthtml-content {
14
+ margin: 0 auto;
15
+ max-width: 70rem;
16
+ }
17
+ header {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+ #title {
22
+ margin: 0;
23
+ flex-grow: 1;
24
+ }
25
+ #logo {
26
+ height: 4rem;
27
+ }
28
+ #timestamp {
29
+ color: #777;
30
+ margin-top: 0.5rem;
31
+ }
32
+
33
+ /** SUMMARY */
34
+ #summary {
35
+ color: #333;
36
+ margin: 2rem 0;
37
+ display: flex;
38
+ font-family: monospace;
39
+ font-size: 1rem;
40
+ }
41
+ #summary > div {
42
+ margin-right: 2rem;
43
+ background: #eee;
44
+ padding: 1rem;
45
+ min-width: 15rem;
46
+ }
47
+ #summary > div:last-child {
48
+ margin-right: 0;
49
+ }
50
+ @media only screen and (max-width: 720px) {
51
+ #summary {
52
+ flex-direction: column;
53
+ }
54
+ #summary > div {
55
+ margin-right: 0;
56
+ margin-top: 2rem;
57
+ }
58
+ #summary > div:first-child {
59
+ margin-top: 0;
60
+ }
61
+ }
62
+
63
+ .summary-total {
64
+ font-weight: bold;
65
+ margin-bottom: 0.5rem;
66
+ }
67
+ .summary-passed {
68
+ color: #4f8a10;
69
+ border-left: 0.4rem solid #4f8a10;
70
+ padding-left: 0.5rem;
71
+ }
72
+ .summary-failed,
73
+ .summary-obsolete-snapshots {
74
+ color: #d8000c;
75
+ border-left: 0.4rem solid #d8000c;
76
+ padding-left: 0.5rem;
77
+ }
78
+ .summary-pending {
79
+ color: #9f6000;
80
+ border-left: 0.4rem solid #9f6000;
81
+ padding-left: 0.5rem;
82
+ }
83
+ .summary-empty {
84
+ color: #999;
85
+ border-left: 0.4rem solid #999;
86
+ }
87
+
88
+ .test-result {
89
+ padding: 1rem;
90
+ margin-bottom: 0.25rem;
91
+ }
92
+ .test-result:last-child {
93
+ border: 0;
94
+ }
95
+ .test-result.passed {
96
+ background-color: #dff2bf;
97
+ color: #4f8a10;
98
+ }
99
+ .test-result.failed {
100
+ background-color: #ffbaba;
101
+ color: #d8000c;
102
+ }
103
+ .test-result.pending {
104
+ background-color: #ffdf61;
105
+ color: #9f6000;
106
+ }
107
+
108
+ .test-info {
109
+ display: flex;
110
+ justify-content: space-between;
111
+ }
112
+ .test-suitename {
113
+ width: 20%;
114
+ text-align: left;
115
+ font-weight: bold;
116
+ word-break: break-word;
117
+ }
118
+ .test-title {
119
+ width: 40%;
120
+ text-align: left;
121
+ font-style: italic;
122
+ }
123
+ .test-status {
124
+ width: 20%;
125
+ text-align: right;
126
+ }
127
+ .test-duration {
128
+ width: 10%;
129
+ text-align: right;
130
+ font-size: 0.75rem;
131
+ }
132
+
133
+ .failureMessages {
134
+ padding: 0 1rem;
135
+ margin-top: 1rem;
136
+ border-top: 1px dashed #d8000c;
137
+ }
138
+ .failureMessages.suiteFailure {
139
+ border-top: none;
140
+ }
141
+ .failureMsg {
142
+ white-space: pre-wrap;
143
+ white-space: -moz-pre-wrap;
144
+ white-space: -pre-wrap;
145
+ white-space: -o-pre-wrap;
146
+ word-wrap: break-word;
147
+ }
148
+
149
+ .suite-container {
150
+ margin-bottom: 2rem;
151
+ }
152
+ .suite-info {
153
+ padding: 1rem;
154
+ background-color: #eee;
155
+ color: #777;
156
+ display: flex;
157
+ align-items: center;
158
+ margin-bottom: 0.25rem;
159
+ }
160
+ .suite-info .suite-path {
161
+ word-break: break-all;
162
+ flex-grow: 1;
163
+ font-family: monospace;
164
+ font-size: 1rem;
165
+ }
166
+ .suite-info .suite-time {
167
+ margin-left: 0.5rem;
168
+ padding: 0.2rem 0.3rem;
169
+ font-size: 0.75rem;
170
+ }
171
+ .suite-info .suite-time.warn {
172
+ background-color: #d8000c;
173
+ color: #fff;
174
+ }
175
+
176
+ /* CONSOLE LOGS */
177
+ .suite-consolelog {
178
+ margin-bottom: 0.25rem;
179
+ padding: 1rem;
180
+ background-color: #efefef;
181
+ }
182
+ .suite-consolelog-header {
183
+ font-weight: bold;
184
+ }
185
+ .suite-consolelog-item {
186
+ padding: 0.5rem;
187
+ }
188
+ .suite-consolelog-item pre {
189
+ margin: 0.5rem 0;
190
+ white-space: pre-wrap;
191
+ white-space: -moz-pre-wrap;
192
+ white-space: -pre-wrap;
193
+ white-space: -o-pre-wrap;
194
+ word-wrap: break-word;
195
+ }
196
+ .suite-consolelog-item-origin {
197
+ color: #777;
198
+ font-weight: bold;
199
+ }
200
+ .suite-consolelog-item-message {
201
+ color: #000;
202
+ font-size: 1rem;
203
+ padding: 0 0.5rem;
204
+ }
205
+
206
+ /* OBSOLETE SNAPSHOTS */
207
+ .suite-obsolete-snapshots {
208
+ margin-bottom: 0.25rem;
209
+ padding: 1rem;
210
+ background-color: #ffbaba;
211
+ color: #d8000c;
212
+ }
213
+ .suite-obsolete-snapshots-header {
214
+ font-weight: bold;
215
+ }
216
+ .suite-obsolete-snapshots-item {
217
+ padding: 0.5rem;
218
+ }
219
+ .suite-obsolete-snapshots-item pre {
220
+ margin: 0.5rem 0;
221
+ white-space: pre-wrap;
222
+ white-space: -moz-pre-wrap;
223
+ white-space: -pre-wrap;
224
+ white-space: -o-pre-wrap;
225
+ word-wrap: break-word;
226
+ }
227
+ .suite-obsolete-snapshots-item-message {
228
+ color: #000;
229
+ font-size: 1rem;
230
+ padding: 0 0.5rem;
231
+ }
232
+ </style></head><body><div id="jesthtml-content"><header><h1 id="title">Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=34f75e5127b8. Commit cdc230d8.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-07-19 10:23:49</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">179.806s</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">168.85s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: Test result : Bio.MSA.is_correct : TypeError: Cannot read properties of undefined (reading 'split')
233
+ Test result : Bio.splitters.testHelm1 : Error: Expected R(U)P at position 0, got U
234
+ Test result : Bio.splitters.testHelm2 : Error: Expected R(U)P at position 1, got U
235
+ Test result : Bio.splitters.testHelm3 : Error: Expected R(U) at position 1, got U)
236
+ Test result : Bio.converters.testFastaGapsToSeparator : Error: Units are not specified in column
237
+ Test result : Bio.converters.testFastaGapsToHelm : Error: Units are not specified in column
238
+ Test result : Bio.converters.HelmDnaToFasta : Error: Units are not specified in column
239
+ Test result : Bio.converters.HelmDnaToSeparator : Error: Units are not specified in column
240
+
241
+ at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:67:20
242
+ at Generator.next (&lt;anonymous&gt;)
243
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:31:58)
244
+ at runMicrotasks (&lt;anonymous&gt;)
245
+ 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)
246
+ at Generator.next (&lt;anonymous&gt;)
247
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/test-node.ts:28:58)
248
+ 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
249
+ at Generator.next (&lt;anonymous&gt;)
250
+ at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:34:71
251
+ at new Promise (&lt;anonymous&gt;)
252
+ at Object.&lt;anonymous&gt;.__awaiter (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:30:12)
253
+ at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:38:23)
254
+ at Promise.then.completed (/home/runner/work/public/public/packages/Bio/node_modules/jest-circus/build/utils.js:391:28)
255
+ at new Promise (&lt;anonymous&gt;)</pre><pre class="suite-consolelog-item-message">Testing Bio package</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:65:11
256
+ at Generator.next (&lt;anonymous&gt;)
257
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:31:58)
258
+ at runMicrotasks (&lt;anonymous&gt;)
259
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Bio.WebLogo.testGetStats : OK
260
+ Test result : Bio.WebLogo.testGetAlphabetSimilarity : OK
261
+ Test result : Bio.WebLogo.testPickupPaletteN1 : OK
262
+ Test result : Bio.WebLogo.testPickupPaletteN1e : OK
263
+ Test result : Bio.WebLogo.testPickupPaletteAA1 : OK
264
+ Test result : Bio.WebLogo.testPickupPaletteX : OK
265
+ Test result : Bio.WebLogo.monomerToText.longMonomerSingle : OK
266
+ Test result : Bio.WebLogo.monomerToText.longMonomerShort : OK
267
+ Test result : Bio.WebLogo.monomerToText.longMonomerLong56 : OK
268
+ Test result : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartShort : OK
269
+ Test result : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartLong56 : OK
270
+ Test result : Bio.Palettes.testPaletteN : OK
271
+ Test result : Bio.Palettes.testPaletteAA : OK
272
+ Test result : Bio.detectors.Negative1 : OK
273
+ Test result : Bio.detectors.Negative2 : OK
274
+ Test result : Bio.detectors.Negative3 : OK
275
+ Test result : Bio.detectors.NegativeSmiles : OK
276
+ Test result : Bio.detectors.Dna1 : OK
277
+ Test result : Bio.detectors.Rna1 : OK
278
+ Test result : Bio.detectors.AA1 : OK
279
+ Test result : Bio.detectors.MsaDna1 : OK
280
+ Test result : Bio.detectors.MsaAA1 : OK
281
+ Test result : Bio.detectors.SepDna : OK
282
+ Test result : Bio.detectors.SepRna : OK
283
+ Test result : Bio.detectors.SepPt : OK
284
+ Test result : Bio.detectors.SepUn1 : OK
285
+ Test result : Bio.detectors.SepUn2 : OK
286
+ Test result : Bio.detectors.SepMsaN1 : OK
287
+ Test result : Bio.detectors.SamplesFastaCsvPt : OK
288
+ Test result : Bio.detectors.SamplesFastaCsvNegativeEntry : OK
289
+ Test result : Bio.detectors.SamplesFastaCsvNegativeLength : OK
290
+ Test result : Bio.detectors.SamplesFastaCsvNegativeUniProtKB : OK
291
+ Test result : Bio.detectors.SamplesFastaFastaPt : OK
292
+ Test result : Bio.detectors.samplesPeptidesComplexNegativeID : OK
293
+ Test result : Bio.detectors.SamplesPeptidesComplexNegativeMeasured : OK
294
+ Test result : Bio.detectors.SamplesPeptidesComplexNegativeValue : OK
295
+ Test result : Bio.detectors.samplesMsaComplexUn : OK
296
+ Test result : Bio.detectors.samplesMsaComplexNegativeActivity : OK
297
+ Test result : Bio.detectors.samplesIdCsvNegativeID : OK
298
+ Test result : Bio.detectors.samplesSarSmallCsvNegativeSmiles : OK
299
+ Test result : Bio.detectors.samplesHelmCsvHELM : OK
300
+ Test result : Bio.detectors.samplesHelmCsvNegativeActivity : OK
301
+ Test result : Bio.detectors.samplesTestHelmNegativeID : OK
302
+ Test result : Bio.detectors.samplesTestHelmNegativeTestType : OK
303
+ Test result : Bio.detectors.samplesTestHelmPositiveHelmString : OK
304
+ Test result : Bio.detectors.samplesTestHelmNegativeValid : OK
305
+ Test result : Bio.detectors.samplesTestHelmNegativeMolWeight : OK
306
+ Test result : Bio.detectors.samplesTestHelmNegativeMolFormula : OK
307
+ Test result : Bio.detectors.samplesTestHelmNegativeSmiles : OK
308
+ Test result : Bio.detectors.samplesTestDemogNegativeAll : OK
309
+ Test result : Bio.detectors.samplesTestSmiles2NegativeSmiles : OK
310
+ Test result : Bio.detectors.samplesTestActivityCliffsNegativeSmiles : OK
311
+ Test result : Bio.detectors.samplesFastaPtPosSequence : OK
312
+ Test result : Bio.detectors.samplesTestCerealNegativeCerealName : OK
313
+ Test result : Bio.MSA.test_table.is_not_empty : OK
314
+ Test result : Bio.sequenceSpace.sequenceSpaceOpens : OK
315
+ Test result : Bio.activityCliffs.activityCliffsOpen : OK
316
+ Test result : Bio.splitters.helm1 : OK
317
+ Test result : Bio.splitters.helm2 : OK
318
+ Test result : Bio.splitters.helm3-multichar : OK
319
+ Test result : Bio.renderers.afterMsa : OK
320
+ Test result : Bio.renderers.afterConvert : OK
321
+ Test result : Bio.converters.testFastaPtToSeparator : OK
322
+ Test result : Bio.converters.testFastaDnaToSeparator : OK
323
+ Test result : Bio.converters.testFastaRnaToSeparator : OK
324
+ Test result : Bio.converters.testFastaPtToHelm : OK
325
+ Test result : Bio.converters.testFastaDnaToHelm : OK
326
+ Test result : Bio.converters.testFastaRnaToHelm : OK
327
+ Test result : Bio.converters.testSeparatorPtToFasta : OK
328
+ Test result : Bio.converters.testSeparatorDnaToFasta : OK
329
+ Test result : Bio.converters.testSeparatorRnaToFasta : OK
330
+ Test result : Bio.converters.testSeparatorGapsToFasta : OK
331
+ Test result : Bio.converters.testSeparatorPtToHelm : OK
332
+ Test result : Bio.converters.testSeparatorDnaToHelm : OK
333
+ Test result : Bio.converters.testSeparatorRnaToHelm : OK
334
+ Test result : Bio.converters.testSeparatorGapsToHelm : OK
335
+ Test result : Bio.converters.HelmRnaToFasta : OK
336
+ Test result : Bio.converters.HelmPtToFasta : OK
337
+ Test result : Bio.converters.HelmRnaToSeparator : OK
338
+ Test result : Bio.converters.HelmPtToSeparator : OK
339
+ </pre></div></div></div></div></body></html>