@datagrok/bio 1.7.23 → 1.7.24

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,12 +1,11 @@
1
1
  {
2
2
  "name": "@datagrok/bio",
3
- "beta": false,
4
3
  "friendlyName": "Bio",
5
4
  "author": {
6
5
  "name": "Leonid Stolbov",
7
6
  "email": "lstolbov@datagrok.ai"
8
7
  },
9
- "version": "1.7.23",
8
+ "version": "1.7.24",
10
9
  "description": "Bio is a [package](https://datagrok.ai/help/develop/develop#packages) for the [Datagrok](https://datagrok.ai) platform",
11
10
  "repository": {
12
11
  "type": "git",
@@ -15,9 +14,9 @@
15
14
  },
16
15
  "dependencies": {
17
16
  "@biowasm/aioli": ">=2.4.0",
18
- "@datagrok-libraries/bio": "^3.0.2",
19
- "@datagrok-libraries/ml": "^3.0.0",
20
- "@datagrok-libraries/utils": "^1.4.0",
17
+ "@datagrok-libraries/bio": "^3.0.3",
18
+ "@datagrok-libraries/ml": "^3.0.3",
19
+ "@datagrok-libraries/utils": "^1.5.4",
21
20
  "cash-dom": "latest",
22
21
  "datagrok-api": "^1.5.0",
23
22
  "dayjs": "^1.11.4",
@@ -51,10 +51,10 @@ it('TEST', async () => {
51
51
  let failReport = '';
52
52
  for (let i = 0; i < df.rowCount; i++) {
53
53
  if (cStatus.get(i)) {
54
- passReport += `Test result : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
54
+ passReport += `Test result : Success : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
55
55
  } else {
56
56
  failed = true;
57
- failReport += `Test result : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
57
+ failReport += `Test result : Failed : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
58
58
  }
59
59
  }
60
60
  resolve({failReport, passReport, failed});
package/src/package.ts CHANGED
@@ -24,6 +24,7 @@ import {lru} from './utils/cell-renderer';
24
24
  import {representationsWidget} from './widgets/representations';
25
25
  import {UnitsHandler} from '@datagrok-libraries/bio/src/utils/units-handler';
26
26
  import {FastaFileHandler} from '@datagrok-libraries/bio/src/utils/fasta-handler';
27
+ import {removeEmptyStringRows} from '@datagrok-libraries/utils/src/dataframe-utils'
27
28
 
28
29
 
29
30
  //tags: init
@@ -161,16 +162,22 @@ export async function sequenceSpaceTopMenu(table: DG.DataFrame, macroMolecule: D
161
162
  if (!encodedCol)
162
163
  return;
163
164
  const embedColsNames = getEmbeddingColsNames(table);
165
+ const withoutEmptyValues = DG.DataFrame.fromColumns([macroMolecule]).clone();
166
+ const emptyValsIdxs = removeEmptyStringRows(withoutEmptyValues, encodedCol);
167
+
164
168
  const chemSpaceParams = {
165
- seqCol: encodedCol,
169
+ seqCol: withoutEmptyValues.col(macroMolecule.name)!,
166
170
  methodName: methodName,
167
171
  similarityMetric: similarityMetric,
168
172
  embedAxesNames: embedColsNames
169
173
  };
170
174
  const sequenceSpaceRes = await sequenceSpace(chemSpaceParams);
171
175
  const embeddings = sequenceSpaceRes.coordinates;
172
- for (const col of embeddings)
173
- table.columns.add(col);
176
+ for (const col of embeddings) {
177
+ const listValues = col.toList();
178
+ emptyValsIdxs.forEach((ind: number) => listValues.splice(ind, 0, null));
179
+ table.columns.add(DG.Column.fromFloat32Array(col.name, listValues));
180
+ }
174
181
  if (plotEmbeddings) {
175
182
  for (const v of grok.shell.views) {
176
183
  if (v.name === table.name)
@@ -66,7 +66,7 @@ function printLeftOrCentered(
66
66
  x: number, y: number, w: number, h: number,
67
67
  g: CanvasRenderingContext2D, s: string, color = undefinedColor,
68
68
  pivot: number = 0, left = false, transparencyRate: number = 1.0,
69
- separator: string = '', last: boolean = false, drawStyle: string = 'classic', maxWord:any={}, maxWordIdx:number=0, gridCell:any = {}): number {
69
+ separator: string = '', last: boolean = false, drawStyle: string = 'classic', maxWord: any = {}, maxWordIdx: number = 0, gridCell: any = {}): number {
70
70
  g.textAlign = 'start';
71
71
  const colorPart = s.substring(0);
72
72
  let grayPart = last ? '' : separator;
@@ -212,8 +212,10 @@ export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
212
212
  const separator = gridCell.cell.column.getTag('separator') ?? '';
213
213
  const splitterFunc: SplitterFunc = WebLogo.getSplitter(units, gridCell.cell.column.getTag('separator'));
214
214
 
215
- // обработка новых елементов
216
215
  const columns = gridCell.cell.column.categories;
216
+ let monomerToShortFunction: (amino: string, maxLengthOfMonomer: number) => string = WebLogo.monomerToShort;
217
+ let maxLengthOfMonomer = 8;
218
+
217
219
  let maxLengthWords = {};
218
220
  // check if gridCell.cell.column.temp is array
219
221
  if (gridCell.cell.column.getTag('.calculatedCellRender') !== 'exist') {
@@ -221,7 +223,7 @@ export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
221
223
  let subParts: string[] = splitterFunc(columns[i]);
222
224
  subParts.forEach((amino, index) => {
223
225
  //@ts-ignore
224
- let textSizeWidth = g.measureText(WebLogo.monomerToText(amino) + ' ');
226
+ let textSizeWidth = g.measureText(monomerToShortFunction(amino, maxLengthOfMonomer));
225
227
  //@ts-ignore
226
228
  if (textSizeWidth.width > (maxLengthWords[index] ?? 0)) {
227
229
  //@ts-ignore
@@ -240,23 +242,15 @@ export class MacromoleculeSequenceCellRenderer extends DG.GridCellRenderer {
240
242
  let color = undefinedColor;
241
243
  // get max length word in subParts
242
244
  let tagUnits = gridCell.cell.column.getTag(DG.TAGS.UNITS);
243
- let maxLength = 0;
244
- let maxWord = '';
245
245
  let drawStyle = 'classic';
246
246
  if (tagUnits.includes('MSA')) {
247
- subParts.forEach(part => {
248
- if (part.length > maxLength) {
249
- maxLength = part.length;
250
- maxWord = part;
251
- drawStyle = 'msa';
252
- }
253
- });
247
+ drawStyle = 'msa';
254
248
  }
255
249
  subParts.forEach((amino, index) => {
256
250
  color = palette.get(amino);
257
251
  g.fillStyle = undefinedColor;
258
252
  let last = index === subParts.length - 1;
259
- x1 = printLeftOrCentered(x1, y, w, h, g, WebLogo.monomerToText(amino), color, 0, true, 1.0, separator, last, drawStyle, maxLengthWords, index, gridCell);
253
+ x1 = printLeftOrCentered(x1, y, w, h, g, monomerToShortFunction(amino, maxLengthOfMonomer), color, 0, true, 1.0, separator, last, drawStyle, maxLengthWords, index, gridCell);
260
254
  });
261
255
 
262
256
  g.restore();
@@ -8,7 +8,7 @@ export async function sequenceGetSimilarities(col: DG.Column, seq: string): Prom
8
8
  const stringArray = col.toList();
9
9
  const distances = new Array(stringArray.length).fill(0.0);
10
10
  for (let i = 0; i < stringArray.length; ++i)
11
- distances[i] = getSimilarityFromDistance(AvailableMetrics['String']['Levenshtein'](stringArray[i], seq));
11
+ distances[i] = stringArray[i] ? getSimilarityFromDistance(AvailableMetrics['String']['Levenshtein'](stringArray[i], seq)) : 0;
12
12
  return DG.Column.fromList(DG.COLUMN_TYPE.FLOAT, 'distances', distances);
13
13
  }
14
14
 
@@ -0,0 +1,358 @@
1
+ <html><head><meta charset="utf-8"/><title>Bio Test Report. Datagrok version datagrok/datagrok:latest SHA=4f0c8bae6479. Commit 367602e1.</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=4f0c8bae6479. Commit 367602e1.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-08-05 13:35: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/Bio/src/__jest__/remote.test.ts</div><div class="suite-time warn">237.34s</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">221.518s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: Test result : Failed : Bio.WebLogo-positions.allPositions : Error: Expected "12", got "0"
233
+
234
+ at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:67: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)
239
+ at Generator.next (&lt;anonymous&gt;)
240
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/test-node.ts:28:58)
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
242
+ at Generator.next (&lt;anonymous&gt;)
243
+ at /home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:34:71
244
+ at new Promise (&lt;anonymous&gt;)
245
+ at Object.&lt;anonymous&gt;.__awaiter (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:30:12)
246
+ at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:38:23)
247
+ at Promise.then.completed (/home/runner/work/public/public/packages/Bio/node_modules/jest-circus/build/utils.js:391:28)
248
+ 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
249
+ at Generator.next (&lt;anonymous&gt;)
250
+ at fulfilled (/home/runner/work/public/public/packages/Bio/src/__jest__/remote.test.ts:31:58)
251
+ at runMicrotasks (&lt;anonymous&gt;)
252
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : Bio.WebLogo.testGetStats : OK
253
+ Test result : Success : Bio.WebLogo.testGetAlphabetSimilarity : OK
254
+ Test result : Success : Bio.WebLogo.testPickupPaletteN1 : OK
255
+ Test result : Success : Bio.WebLogo.testPickupPaletteN1e : OK
256
+ Test result : Success : Bio.WebLogo.testPickupPaletteAA1 : OK
257
+ Test result : Success : Bio.WebLogo.testPickupPaletteX : OK
258
+ Test result : Success : Bio.WebLogo.monomerToText.longMonomerSingle : OK
259
+ Test result : Success : Bio.WebLogo.monomerToText.longMonomerShort : OK
260
+ Test result : Success : Bio.WebLogo.monomerToText.longMonomerLong56 : OK
261
+ Test result : Success : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartShort : OK
262
+ Test result : Success : Bio.WebLogo.monomerToText.longMonomerComplexFirstPartLong56 : OK
263
+ Test result : Success : Bio.Palettes.testPaletteN : OK
264
+ Test result : Success : Bio.Palettes.testPaletteAA : OK
265
+ Test result : Success : Bio.detectors.NegativeEmpty : OK
266
+ Test result : Success : Bio.detectors.Negative1 : OK
267
+ Test result : Success : Bio.detectors.Negative2 : OK
268
+ Test result : Success : Bio.detectors.Negative3 : OK
269
+ Test result : Success : Bio.detectors.NegativeSmiles : OK
270
+ Test result : Success : Bio.detectors.Dna1 : OK
271
+ Test result : Success : Bio.detectors.Rna1 : OK
272
+ Test result : Success : Bio.detectors.AA1 : OK
273
+ Test result : Success : Bio.detectors.MsaDna1 : OK
274
+ Test result : Success : Bio.detectors.MsaAA1 : OK
275
+ Test result : Success : Bio.detectors.SepDna : OK
276
+ Test result : Success : Bio.detectors.SepRna : OK
277
+ Test result : Success : Bio.detectors.SepPt : OK
278
+ Test result : Success : Bio.detectors.SepUn1 : OK
279
+ Test result : Success : Bio.detectors.SepUn2 : OK
280
+ Test result : Success : Bio.detectors.SepMsaN1 : OK
281
+ Test result : Success : Bio.detectors.SamplesFastaCsvPt : OK
282
+ Test result : Success : Bio.detectors.SamplesFastaCsvNegativeEntry : OK
283
+ Test result : Success : Bio.detectors.SamplesFastaCsvNegativeLength : OK
284
+ Test result : Success : Bio.detectors.SamplesFastaCsvNegativeUniProtKB : OK
285
+ Test result : Success : Bio.detectors.SamplesFastaFastaPt : OK
286
+ Test result : Success : Bio.detectors.samplesPeptidesComplexNegativeID : OK
287
+ Test result : Success : Bio.detectors.SamplesPeptidesComplexNegativeMeasured : OK
288
+ Test result : Success : Bio.detectors.SamplesPeptidesComplexNegativeValue : OK
289
+ Test result : Success : Bio.detectors.samplesMsaComplexUn : OK
290
+ Test result : Success : Bio.detectors.samplesMsaComplexNegativeActivity : OK
291
+ Test result : Success : Bio.detectors.samplesIdCsvNegativeID : OK
292
+ Test result : Success : Bio.detectors.samplesSarSmallCsvNegativeSmiles : OK
293
+ Test result : Success : Bio.detectors.samplesHelmCsvHELM : OK
294
+ Test result : Success : Bio.detectors.samplesHelmCsvNegativeActivity : OK
295
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeID : OK
296
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeTestType : OK
297
+ Test result : Success : Bio.detectors.samplesTestHelmPositiveHelmString : OK
298
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeValid : OK
299
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeMolWeight : OK
300
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeMolFormula : OK
301
+ Test result : Success : Bio.detectors.samplesTestHelmNegativeSmiles : OK
302
+ Test result : Success : Bio.detectors.samplesTestDemogNegativeAll : OK
303
+ Test result : Success : Bio.detectors.samplesTestSmiles2NegativeSmiles : OK
304
+ Test result : Success : Bio.detectors.samplesTestActivityCliffsNegativeSmiles : OK
305
+ Test result : Success : Bio.detectors.samplesFastaPtPosSequence : OK
306
+ Test result : Success : Bio.detectors.samplesTestCerealNegativeCerealName : OK
307
+ Test result : Success : Bio.detectors.samplesTestSpgi100NegativeStereoCategory : OK
308
+ Test result : Success : Bio.detectors.samplesTestSpgi100NegativeScaffoldNames : OK
309
+ Test result : Success : Bio.detectors.samplesTestSpgi100NegativePrimaryScaffoldName : OK
310
+ Test result : Success : Bio.detectors.samplesTestSpgi100NegativeSampleName : OK
311
+ Test result : Success : Bio.detectors.samplesTestUnichemSourcesNegativeSrcUrl : OK
312
+ Test result : Success : Bio.detectors.samplesTestUnichemSourcesNegativeBaseIdUrl : OK
313
+ Test result : Success : Bio.detectors.samplesTestDmvOfficesNegativeOfficeName : OK
314
+ Test result : Success : Bio.detectors.samplesTestDmvOfficesNegativeCity : OK
315
+ Test result : Success : Bio.detectors.samplesTestAlertCollectionNegativeSmarts : OK
316
+ Test result : Success : Bio.MSA.isCorrect : OK
317
+ Test result : Success : Bio.MSA.isCorrectLong : OK
318
+ Test result : Success : Bio.sequenceSpace.sequenceSpaceOpens : OK
319
+ Test result : Success : Bio.activityCliffs.activityCliffsOpen : OK
320
+ Test result : Success : Bio.splitters.helm1 : OK
321
+ Test result : Success : Bio.splitters.helm2 : OK
322
+ Test result : Success : Bio.splitters.helm3-multichar : OK
323
+ Test result : Success : Bio.splitters.testHelm1 : OK
324
+ Test result : Success : Bio.splitters.testHelm2 : OK
325
+ Test result : Success : Bio.splitters.testHelm3 : OK
326
+ Test result : Success : Bio.renderers.afterMsa : OK
327
+ Test result : Success : Bio.renderers.afterConvert : OK
328
+ Test result : Success : Bio.converters.testFastaPtToSeparator : OK
329
+ Test result : Success : Bio.converters.testFastaDnaToSeparator : OK
330
+ Test result : Success : Bio.converters.testFastaRnaToSeparator : OK
331
+ Test result : Success : Bio.converters.testFastaGapsToSeparator : OK
332
+ Test result : Success : Bio.converters.testFastaPtToHelm : OK
333
+ Test result : Success : Bio.converters.testFastaDnaToHelm : OK
334
+ Test result : Success : Bio.converters.testFastaRnaToHelm : OK
335
+ Test result : Success : Bio.converters.testFastaGapsToHelm : OK
336
+ Test result : Success : Bio.converters.testSeparatorPtToFasta : OK
337
+ Test result : Success : Bio.converters.testSeparatorDnaToFasta : OK
338
+ Test result : Success : Bio.converters.testSeparatorRnaToFasta : OK
339
+ Test result : Success : Bio.converters.testSeparatorGapsToFasta : OK
340
+ Test result : Success : Bio.converters.testSeparatorPtToHelm : OK
341
+ Test result : Success : Bio.converters.testSeparatorDnaToHelm : OK
342
+ Test result : Success : Bio.converters.testSeparatorRnaToHelm : OK
343
+ Test result : Success : Bio.converters.testSeparatorGapsToHelm : OK
344
+ Test result : Success : Bio.converters.testHelmDnaToFasta : OK
345
+ Test result : Success : Bio.converters.testHelmRnaToFasta : OK
346
+ Test result : Success : Bio.converters.testHelmPtToFasta : OK
347
+ Test result : Success : Bio.converters.testHelmDnaToSeparator : OK
348
+ Test result : Success : Bio.converters.testHelmRnaToSeparator : OK
349
+ Test result : Success : Bio.converters.testHelmPtToSeparator : OK
350
+ Test result : Success : Bio.converters.testHelmLoneRibose : OK
351
+ Test result : Success : Bio.converters.testHelmLoneDeoxyribose : OK
352
+ Test result : Success : Bio.converters.testHelmLonePhosphorus : OK
353
+ Test result : Success : Bio.fastaFileHandler.testNormalFormatting : OK
354
+ Test result : Success : Bio.fastaFileHandler.testExtraSpaces : OK
355
+ Test result : Success : Bio.fastaFileHandler.testExtraNewlines : OK
356
+ Test result : Success : Bio.WebLogo-positions.positions with shrinkEmptyTail option : OK
357
+ Test result : Success : Bio.WebLogo-positions.positions with skipEmptyPositions option : OK
358
+ </pre></div></div></div></div></body></html>