@datagrok/bio 2.11.24 → 2.11.26
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/dist/100.js +2 -0
- package/dist/100.js.map +1 -0
- package/dist/118.js +2 -0
- package/dist/118.js.map +1 -0
- package/dist/361.js +1 -1
- package/dist/361.js.map +1 -1
- package/dist/471.js +2 -0
- package/dist/471.js.map +1 -0
- package/dist/649.js +2 -0
- package/dist/649.js.map +1 -0
- package/dist/664.js +2 -0
- package/dist/664.js.map +1 -0
- package/dist/886.js +3 -0
- package/dist/886.js.map +1 -0
- package/dist/package-test.js +1 -2
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -2
- package/dist/package.js.map +1 -1
- package/package.json +2 -2
- package/src/analysis/sequence-space.ts +2 -75
- package/src/demo/bio01b-hierarchical-clustering-and-activity-cliffs.ts +3 -2
- package/src/demo/bio05-helm-msa-sequence-space.ts +1 -1
- package/src/demo/utils.ts +6 -5
- package/src/package.ts +53 -67
- package/src/tests/activity-cliffs-tests.ts +7 -7
- package/src/tests/activity-cliffs-utils.ts +5 -4
- package/src/tests/msa-tests.ts +2 -2
- package/src/tests/pepsea-tests.ts +1 -1
- package/src/tests/sequence-space-test.ts +1 -1
- package/src/tests/sequence-space-utils.ts +1 -1
- package/src/tests/utils.ts +4 -2
- package/dist/23.js +0 -2
- package/dist/23.js.map +0 -1
- package/dist/282.js +0 -2
- package/dist/282.js.map +0 -1
- package/dist/378.js +0 -2
- package/dist/378.js.map +0 -1
- package/dist/40.js +0 -2
- package/dist/40.js.map +0 -1
- package/dist/65.js +0 -2
- package/dist/65.js.map +0 -1
- package/dist/935.js +0 -3
- package/dist/935.js.map +0 -1
- package/dist/package-test.js.LICENSE.txt +0 -51
- package/dist/package.js.LICENSE.txt +0 -51
- /package/dist/{935.js.LICENSE.txt → 886.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "Leonid Stolbov",
|
|
6
6
|
"email": "lstolbov@datagrok.ai"
|
|
7
7
|
},
|
|
8
|
-
"version": "2.11.
|
|
8
|
+
"version": "2.11.26",
|
|
9
9
|
"description": "Bioinformatics support (import/export of sequences, conversion, visualization, analysis). [See more](https://github.com/datagrok-ai/public/blob/master/packages/Bio/README.md) for details.",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@biowasm/aioli": "^3.1.0",
|
|
37
37
|
"@datagrok-libraries/bio": "^5.39.18",
|
|
38
38
|
"@datagrok-libraries/chem-meta": "^1.2.1",
|
|
39
|
-
"@datagrok-libraries/ml": "^6.
|
|
39
|
+
"@datagrok-libraries/ml": "^6.4.0",
|
|
40
40
|
"@datagrok-libraries/tutorials": "^1.3.11",
|
|
41
41
|
"@datagrok-libraries/utils": "^4.1.36",
|
|
42
42
|
"@datagrok-libraries/math": "^1.0.7",
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
import
|
|
3
|
-
import {BitArrayMetrics
|
|
4
|
-
import {ISequenceSpaceParams} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
|
|
5
|
-
import {invalidateMols, MONOMERIC_COL_TAGS} from '../substructure-search/substructure-search';
|
|
2
|
+
import * as grok from 'datagrok-api/grok';
|
|
3
|
+
import {BitArrayMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
6
4
|
import {mmDistanceFunctionArgs} from '@datagrok-libraries/ml/src/macromolecule-distance-functions/types';
|
|
7
5
|
import {UnitsHandler} from '@datagrok-libraries/bio/src/utils/units-handler';
|
|
8
6
|
import {getMonomerSubstitutionMatrix} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';
|
|
9
|
-
import * as grok from 'datagrok-api/grok';
|
|
10
7
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
11
8
|
|
|
12
9
|
export interface ISequenceSpaceResult {
|
|
@@ -14,47 +11,6 @@ export interface ISequenceSpaceResult {
|
|
|
14
11
|
coordinates: DG.ColumnList;
|
|
15
12
|
}
|
|
16
13
|
|
|
17
|
-
export async function sequenceSpace(spaceParams: ISequenceSpaceParams): Promise<ISequenceSpaceResult> {
|
|
18
|
-
// code deprecated since seqCol is encoded
|
|
19
|
-
/* let preparedData: any;
|
|
20
|
-
if (!(spaceParams.seqCol!.tags[DG.TAGS.UNITS] === 'HELM')) {
|
|
21
|
-
const sep = spaceParams.seqCol.getTag(UnitsHandler.TAGS.separator);
|
|
22
|
-
const sepFinal = sep ? sep === '.' ? '\\\.' : sep : '-';
|
|
23
|
-
const regex = new RegExp(sepFinal, 'g');
|
|
24
|
-
if (Object.keys(AvailableMetrics['String']).includes(spaceParams.similarityMetric))
|
|
25
|
-
preparedData = spaceParams.seqCol.toList().map((v: string) => v.replace(regex, '')) as string[];
|
|
26
|
-
else
|
|
27
|
-
preparedData = spaceParams.seqCol.toList().map((v: string) => v.replace(regex, '')) as string[];
|
|
28
|
-
} else {
|
|
29
|
-
preparedData = spaceParams.seqCol.toList();
|
|
30
|
-
} */
|
|
31
|
-
|
|
32
|
-
const sequenceSpaceResult = await reduceDimensinalityWithNormalization(
|
|
33
|
-
spaceParams.seqCol.toList(),
|
|
34
|
-
spaceParams.methodName,
|
|
35
|
-
spaceParams.similarityMetric as StringMetrics | BitArrayMetrics,
|
|
36
|
-
spaceParams.options);
|
|
37
|
-
const cols: DG.Column[] = spaceParams.embedAxesNames.map(
|
|
38
|
-
(name: string, index: number) => DG.Column.fromFloat32Array(name, sequenceSpaceResult.embedding[index]));
|
|
39
|
-
return {distance: sequenceSpaceResult.distance, coordinates: new DG.ColumnList(cols)};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export async function sequenceSpaceByFingerprints(spaceParams: ISequenceSpaceParams): Promise<ISequenceSpaceResult> {
|
|
43
|
-
if (spaceParams.seqCol.version !== spaceParams.seqCol.temp[MONOMERIC_COL_TAGS.LAST_INVALIDATED_VERSION])
|
|
44
|
-
//we expect only string columns here
|
|
45
|
-
await invalidateMols(spaceParams.seqCol as unknown as DG.Column<string>, false);
|
|
46
|
-
|
|
47
|
-
const result = await grok.functions.call('Chem:getChemSpaceEmbeddings', {
|
|
48
|
-
col: spaceParams.seqCol.temp[MONOMERIC_COL_TAGS.MONOMERIC_MOLS],
|
|
49
|
-
methodName: spaceParams.methodName,
|
|
50
|
-
similarityMetric: spaceParams.similarityMetric,
|
|
51
|
-
xAxis: spaceParams.embedAxesNames[0],
|
|
52
|
-
yAxis: spaceParams.embedAxesNames[1],
|
|
53
|
-
options: spaceParams.options,
|
|
54
|
-
});
|
|
55
|
-
return result;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
14
|
export async function getEncodedSeqSpaceCol(
|
|
59
15
|
seqCol: DG.Column, similarityMetric: BitArrayMetrics | MmDistanceFunctionsNames, fingerprintType: string = 'Morgan'
|
|
60
16
|
): Promise<{seqList:string[], options: {[_:string]: any}}> {
|
|
@@ -118,32 +74,3 @@ export async function getEncodedSeqSpaceCol(
|
|
|
118
74
|
}
|
|
119
75
|
return {seqList, options};
|
|
120
76
|
}
|
|
121
|
-
|
|
122
|
-
export async function getSequenceSpace(spaceParams: ISequenceSpaceParams,
|
|
123
|
-
progressFunc?: (epochNum: number, epochsLength: number, embedding: number[][]) => void
|
|
124
|
-
): Promise<ISequenceSpaceResult> {
|
|
125
|
-
const ncUH = UnitsHandler.getOrCreate(spaceParams.seqCol);
|
|
126
|
-
if (ncUH.isHelm())
|
|
127
|
-
return await sequenceSpaceByFingerprints(spaceParams);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const {seqList, options} = await getEncodedSeqSpaceCol(spaceParams.seqCol, spaceParams.similarityMetric);
|
|
131
|
-
|
|
132
|
-
spaceParams.options = spaceParams.options ?? {};
|
|
133
|
-
spaceParams.options.distanceFnArgs = options;
|
|
134
|
-
const sequenceSpaceResult = await reduceDimensinalityWithNormalization(
|
|
135
|
-
seqList,
|
|
136
|
-
spaceParams.methodName,
|
|
137
|
-
spaceParams.similarityMetric,
|
|
138
|
-
spaceParams.options,
|
|
139
|
-
true, progressFunc);
|
|
140
|
-
const cols: DG.Column[] = spaceParams.embedAxesNames.map(
|
|
141
|
-
(name: string, index: number) => DG.Column.fromFloat32Array(name, sequenceSpaceResult.embedding[index]));
|
|
142
|
-
return {distance: sequenceSpaceResult.distance, coordinates: new DG.ColumnList(cols)};
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export function getEmbeddingColsNames(df: DG.DataFrame) {
|
|
146
|
-
const axes = ['Embed_X', 'Embed_Y'];
|
|
147
|
-
const colNameInd = df.columns.names().filter((it: string) => it.includes(axes[0])).length + 1;
|
|
148
|
-
return axes.map((it) => `${it}_${colNameInd}`);
|
|
149
|
-
}
|
|
@@ -10,9 +10,9 @@ import {getTreeHelper, ITreeHelper} from '@datagrok-libraries/bio/src/trees/tree
|
|
|
10
10
|
import {getDendrogramService, IDendrogramService} from '@datagrok-libraries/bio/src/trees/dendrogram';
|
|
11
11
|
import {handleError} from './utils';
|
|
12
12
|
import {DemoScript} from '@datagrok-libraries/tutorials/src/demo-script';
|
|
13
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
14
13
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
15
14
|
import {getClusterMatrixWorker} from '@datagrok-libraries/math';
|
|
15
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
16
16
|
|
|
17
17
|
const dataFn: string = 'data/sample_FASTA_PT_activity.csv';
|
|
18
18
|
|
|
@@ -51,9 +51,10 @@ export async function demoBio01bUI() {
|
|
|
51
51
|
delay: 2000,
|
|
52
52
|
})
|
|
53
53
|
.step('Find activity cliffs', async () => {
|
|
54
|
+
const seqEncodingFunc = DG.Func.find({name: 'macromoleculePreprocessingFunction', package: 'Bio'})[0];
|
|
54
55
|
activityCliffsViewer = (await activityCliffs(
|
|
55
56
|
df, df.getCol('Sequence'), df.getCol('Activity'),
|
|
56
|
-
80, dimRedMethod, MmDistanceFunctionsNames.LEVENSHTEIN)) as DG.ScatterPlotViewer;
|
|
57
|
+
80, dimRedMethod, MmDistanceFunctionsNames.LEVENSHTEIN, seqEncodingFunc, {})) as DG.ScatterPlotViewer;
|
|
57
58
|
view.dockManager.dock(activityCliffsViewer, DG.DOCK_TYPE.RIGHT, null, 'Activity Cliffs', 0.35);
|
|
58
59
|
|
|
59
60
|
// Show grid viewer with the cliffs
|
|
@@ -5,7 +5,6 @@ import * as DG from 'datagrok-api/dg';
|
|
|
5
5
|
import {IWebLogoViewer} from '@datagrok-libraries/bio/src/viewers/web-logo';
|
|
6
6
|
import {awaitStatus, DockerContainerStatus} from '@datagrok-libraries/bio/src/utils/docker';
|
|
7
7
|
import {DemoScript} from '@datagrok-libraries/tutorials/src/demo-script';
|
|
8
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
9
8
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
10
9
|
|
|
11
10
|
import {Pepsea, pepseaMethods, runPepsea} from '../utils/pepsea';
|
|
@@ -13,6 +12,7 @@ import {sequenceSpaceTopMenu} from '../package';
|
|
|
13
12
|
import {handleError} from './utils';
|
|
14
13
|
|
|
15
14
|
import {_package} from '../package';
|
|
15
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
16
16
|
|
|
17
17
|
const helmFn: string = 'samples/HELM.csv';
|
|
18
18
|
|
package/src/demo/utils.ts
CHANGED
|
@@ -3,10 +3,11 @@ import * as DG from 'datagrok-api/dg';
|
|
|
3
3
|
import * as ui from 'datagrok-api/ui';
|
|
4
4
|
|
|
5
5
|
import {_package, sequenceSpaceTopMenu} from '../package';
|
|
6
|
-
import {reduceDimensinalityWithNormalization} from '@datagrok-libraries/ml/src/sequence-space';
|
|
7
6
|
import {StringMetricsNames} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
8
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
9
7
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
8
|
+
import {getNormalizedEmbeddings} from
|
|
9
|
+
'@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/embeddings-space';
|
|
10
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
10
11
|
|
|
11
12
|
enum EMBED_COL_NAMES {
|
|
12
13
|
X = 'Embed_X',
|
|
@@ -38,8 +39,8 @@ export async function demoSequenceSpace(
|
|
|
38
39
|
|
|
39
40
|
const t1: number = Date.now();
|
|
40
41
|
_package.logger.debug('Bio: demoBio01aUI(), calc reduceDimensionality start...');
|
|
41
|
-
const redDimRes = await
|
|
42
|
-
seqList, method, StringMetricsNames.Levenshtein, {});
|
|
42
|
+
const redDimRes = await getNormalizedEmbeddings( // TODO: Rename method typo
|
|
43
|
+
[seqList], method as any, [StringMetricsNames.Levenshtein], [1], 'MANHATTAN', {distanceFnArgs: [{}]});
|
|
43
44
|
const t2: number = Date.now();
|
|
44
45
|
_package.logger.debug('Bio: demoBio01aUI(), calc reduceDimensionality ' +
|
|
45
46
|
`ET: ${((t2 - t1) / 1000)} s`);
|
|
@@ -47,7 +48,7 @@ export async function demoSequenceSpace(
|
|
|
47
48
|
for (let embedI: number = 0; embedI < embedColNameList.length; embedI++) {
|
|
48
49
|
const embedColName: string = embedColNameList[embedI];
|
|
49
50
|
const embedCol: DG.Column = df.getCol(embedColName);
|
|
50
|
-
const embedColData: Float32Array = redDimRes
|
|
51
|
+
const embedColData: Float32Array = redDimRes[embedI];
|
|
51
52
|
// TODO: User DG.Column.setRawData()
|
|
52
53
|
// embedCol.setRawData(embedColData);
|
|
53
54
|
embedCol.init((rowI) => { return embedColData[rowI]; });
|
package/src/package.ts
CHANGED
|
@@ -3,23 +3,14 @@ import * as grok from 'datagrok-api/grok';
|
|
|
3
3
|
import * as ui from 'datagrok-api/ui';
|
|
4
4
|
import * as DG from 'datagrok-api/dg';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
import {delay} from '@datagrok-libraries/utils/src/test';
|
|
8
|
-
import {removeEmptyStringRows} from '@datagrok-libraries/utils/src/dataframe-utils';
|
|
9
6
|
import {Options} from '@datagrok-libraries/utils/src/type-declarations';
|
|
10
|
-
import {DimReductionMethods, ITSNEOptions, IUMAPOptions} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
11
|
-
import {SequenceSpaceFunctionEditor} from '@datagrok-libraries/ml/src/functionEditors/seq-space-editor';
|
|
12
7
|
import {DimReductionBaseEditor, PreprocessFunctionReturnType}
|
|
13
8
|
from '@datagrok-libraries/ml/src/functionEditors/dimensionality-reduction-editor';
|
|
14
|
-
import {
|
|
15
|
-
import {ActivityCliffsFunctionEditor} from '@datagrok-libraries/ml/src/functionEditors/activity-cliffs-editor';
|
|
16
|
-
import {
|
|
17
|
-
ISequenceSpaceParams, getActivityCliffs, SequenceSpaceFunc, CLIFFS_COL_ENCODE_FN
|
|
18
|
-
} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
|
|
9
|
+
import {getActivityCliffs} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
|
|
19
10
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
20
11
|
import {BitArrayMetrics, KnownMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
21
12
|
import {
|
|
22
|
-
TAGS as bioTAGS,
|
|
13
|
+
TAGS as bioTAGS,
|
|
23
14
|
} from '@datagrok-libraries/bio/src/utils/macromolecule';
|
|
24
15
|
import {UnitsHandler} from '@datagrok-libraries/bio/src/utils/units-handler';
|
|
25
16
|
import {IMonomerLib} from '@datagrok-libraries/bio/src/types';
|
|
@@ -38,11 +29,9 @@ import {
|
|
|
38
29
|
} from './utils/cell-renderer';
|
|
39
30
|
import {VdRegionsViewer} from './viewers/vd-regions-viewer';
|
|
40
31
|
import {SequenceAlignment} from './seq_align';
|
|
32
|
+
import {getEncodedSeqSpaceCol} from './analysis/sequence-space';
|
|
41
33
|
import {
|
|
42
|
-
|
|
43
|
-
} from './analysis/sequence-space';
|
|
44
|
-
import {
|
|
45
|
-
createLinesGrid, createPropPanelElement, createTooltipElement, getChemSimilaritiesMatrix,
|
|
34
|
+
createLinesGrid, createPropPanelElement, createTooltipElement,
|
|
46
35
|
} from './analysis/sequence-activity-cliffs';
|
|
47
36
|
import {SequenceSimilarityViewer} from './analysis/sequence-similarity-viewer';
|
|
48
37
|
import {SequenceDiversityViewer} from './analysis/sequence-diversity-viewer';
|
|
@@ -79,15 +68,17 @@ import {GetRegionApp} from './apps/get-region-app';
|
|
|
79
68
|
import {GetRegionFuncEditor} from './utils/get-region-func-editor';
|
|
80
69
|
import {sequenceToMolfile} from './utils/sequence-to-mol';
|
|
81
70
|
import {detectMacromoleculeProbeDo} from './utils/detect-macromolecule-probe';
|
|
82
|
-
|
|
83
|
-
import {SHOW_SCATTERPLOT_PROGRESS} from '@datagrok-libraries/ml/src/functionEditors/seq-space-base-editor';
|
|
84
|
-
import {DIMENSIONALITY_REDUCER_TERMINATE_EVENT}
|
|
85
|
-
from '@datagrok-libraries/ml/src/workers/dimensionality-reducing-worker-creator';
|
|
71
|
+
import {ActivityCliffsEditor} from '@datagrok-libraries/ml/src/functionEditors/activity-cliffs-function-editor';
|
|
86
72
|
import BitArray from '@datagrok-libraries/utils/src/bit-array';
|
|
73
|
+
import {BYPASS_LARGE_DATA_WARNING} from '@datagrok-libraries/ml/src/functionEditors/consts';
|
|
74
|
+
import {getEmbeddingColsNames, multiColReduceDimensionality} from
|
|
75
|
+
'@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/reduce-dimensionality';
|
|
76
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
77
|
+
import {ITSNEOptions, IUMAPOptions} from
|
|
78
|
+
'@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/multi-column-dim-reducer';
|
|
87
79
|
|
|
88
80
|
export const _package = new BioPackage();
|
|
89
81
|
|
|
90
|
-
export const BYPASS_LARGE_DATA_WARNING = 'bypassLargeDataWarning';
|
|
91
82
|
// /** Avoid reassigning {@link monomerLib} because consumers subscribe to {@link IMonomerLib.onChanged} event */
|
|
92
83
|
// let monomerLib: MonomerLib | null = null;
|
|
93
84
|
|
|
@@ -256,16 +247,24 @@ export function SequenceSpaceEditor(call: DG.FuncCall) {
|
|
|
256
247
|
//tags: editor
|
|
257
248
|
//input: funccall call
|
|
258
249
|
export function SeqActivityCliffsEditor(call: DG.FuncCall) {
|
|
259
|
-
const funcEditor = new
|
|
250
|
+
const funcEditor = new ActivityCliffsEditor({semtype: DG.SEMTYPE.MACROMOLECULE});
|
|
260
251
|
ui.dialog({title: 'Activity Cliffs'})
|
|
261
|
-
.add(funcEditor.
|
|
252
|
+
.add(funcEditor.getEditor())
|
|
262
253
|
.onOK(async () => {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
254
|
+
const params = funcEditor.getParams();
|
|
255
|
+
return call.func.prepare({
|
|
256
|
+
table: params.table,
|
|
257
|
+
molecules: params.col,
|
|
258
|
+
activities: params.activities,
|
|
259
|
+
similarity: params.similarityThreshold,
|
|
260
|
+
methodName: params.methodName,
|
|
261
|
+
similarityMetric: params.similarityMetric,
|
|
262
|
+
preprocessingFunction: params.preprocessingFunction,
|
|
263
|
+
options: params.options,
|
|
264
|
+
}).call();
|
|
265
|
+
}).show();
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
|
|
269
268
|
// -- Package settings editor --
|
|
270
269
|
|
|
271
270
|
// //name: packageSettingsEditor
|
|
@@ -405,74 +404,57 @@ export async function getRegionTopMenu(
|
|
|
405
404
|
//input: double similarity = 80 [Similarity cutoff]
|
|
406
405
|
//input: string methodName { choices:["UMAP", "t-SNE"] }
|
|
407
406
|
//input: string similarityMetric { choices:["Hamming", "Levenshtein", "Monomer chemical distance"] }
|
|
407
|
+
//input: func preprocessingFunction
|
|
408
408
|
//input: object options {optional: true}
|
|
409
409
|
//output: viewer result
|
|
410
410
|
//editor: Bio:SeqActivityCliffsEditor
|
|
411
|
-
export async function activityCliffs(
|
|
411
|
+
export async function activityCliffs(table: DG.DataFrame, molecules: DG.Column<string>, activities: DG.Column,
|
|
412
412
|
similarity: number, methodName: DimReductionMethods,
|
|
413
|
-
similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics,
|
|
413
|
+
similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics, preprocessingFunction: DG.Func,
|
|
414
414
|
options?: (IUMAPOptions | ITSNEOptions) & Options): Promise<DG.Viewer | undefined> {
|
|
415
|
-
if (!checkInputColumnUI(
|
|
415
|
+
if (!checkInputColumnUI(molecules, 'Activity Cliffs'))
|
|
416
416
|
return;
|
|
417
|
-
const axesNames = getEmbeddingColsNames(
|
|
417
|
+
const axesNames = getEmbeddingColsNames(table);
|
|
418
418
|
const tags = {
|
|
419
|
-
'units':
|
|
420
|
-
'aligned':
|
|
421
|
-
'separator':
|
|
422
|
-
'alphabet':
|
|
419
|
+
'units': molecules.getTag(DG.TAGS.UNITS),
|
|
420
|
+
'aligned': molecules.getTag(bioTAGS.aligned),
|
|
421
|
+
'separator': molecules.getTag(bioTAGS.separator),
|
|
422
|
+
'alphabet': molecules.getTag(bioTAGS.alphabet),
|
|
423
423
|
};
|
|
424
|
-
let cliffsEncodeFunction: (seqCol: DG.Column, similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics) => any =
|
|
425
|
-
getEncodedSeqSpaceCol;
|
|
426
|
-
const ncUH = UnitsHandler.getOrCreate(macroMolecule);
|
|
427
424
|
const columnDistanceMetric: MmDistanceFunctionsNames | BitArrayMetrics = similarityMetric;
|
|
428
|
-
const seqCol =
|
|
429
|
-
|
|
430
|
-
let sequenceSpaceFunc: SequenceSpaceFunc = getSequenceSpace;
|
|
431
|
-
if (ncUH.isHelm()) {
|
|
432
|
-
sequenceSpaceFunc = sequenceSpaceByFingerprints;
|
|
433
|
-
cliffsEncodeFunction = async (seqCol: DG.Column, similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics) => {
|
|
434
|
-
await invalidateMols(seqCol, false);
|
|
435
|
-
const molecularCol = seqCol.temp[MONOMERIC_COL_TAGS.MONOMERIC_MOLS];
|
|
436
|
-
const fingerPrints: DG.Column =
|
|
437
|
-
await grok.functions.call('Chem:getMorganFingerprints', {molColumn: molecularCol});
|
|
438
|
-
const fingerPrintsBitArray = fingerPrints.toList().map((f: DG.BitSet) =>
|
|
439
|
-
BitArray.fromUint32Array(f.length, new Uint32Array(f.getBuffer().buffer)));
|
|
440
|
-
return {seqList: fingerPrintsBitArray, options: {}};
|
|
441
|
-
};
|
|
442
|
-
}
|
|
425
|
+
const seqCol = molecules;
|
|
443
426
|
|
|
444
427
|
const runCliffs = async () => {
|
|
445
428
|
const sp = await getActivityCliffs(
|
|
446
|
-
|
|
429
|
+
table,
|
|
447
430
|
seqCol,
|
|
448
|
-
null,
|
|
449
431
|
axesNames,
|
|
450
432
|
'Activity cliffs', //scatterTitle
|
|
451
433
|
activities,
|
|
452
434
|
similarity,
|
|
453
435
|
columnDistanceMetric, //similarityMetric
|
|
454
436
|
methodName,
|
|
437
|
+
{...(options ?? {})},
|
|
455
438
|
DG.SEMTYPE.MACROMOLECULE,
|
|
456
439
|
tags,
|
|
457
|
-
|
|
458
|
-
getChemSimilaritiesMatrix,
|
|
440
|
+
preprocessingFunction,
|
|
459
441
|
createTooltipElement,
|
|
460
442
|
createPropPanelElement,
|
|
461
443
|
createLinesGrid,
|
|
462
|
-
|
|
444
|
+
);
|
|
463
445
|
return sp;
|
|
464
446
|
};
|
|
465
447
|
|
|
466
448
|
const allowedRowCount = methodName === DimReductionMethods.UMAP ? 200_000 : 20_000;
|
|
467
449
|
const fastRowCount = methodName === DimReductionMethods.UMAP ? 5_000 : 2_000;
|
|
468
|
-
if (
|
|
450
|
+
if (table.rowCount > allowedRowCount) {
|
|
469
451
|
grok.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${allowedRowCount}`);
|
|
470
452
|
return;
|
|
471
453
|
}
|
|
472
454
|
|
|
473
455
|
const pi = DG.TaskBarProgressIndicator.create(`Running sequence activity cliffs ...`);
|
|
474
456
|
return new Promise<DG.Viewer | undefined>((resolve, reject) => {
|
|
475
|
-
if (
|
|
457
|
+
if (table.rowCount > fastRowCount && !options?.[BYPASS_LARGE_DATA_WARNING]) {
|
|
476
458
|
ui.dialog().add(ui.divText(`Activity cliffs analysis might take several minutes.
|
|
477
459
|
Do you want to continue?`))
|
|
478
460
|
.onOK(async () => {
|
|
@@ -495,7 +477,7 @@ export async function activityCliffs(df: DG.DataFrame, macroMolecule: DG.Column<
|
|
|
495
477
|
//meta.supportedSemTypes: Macromolecule
|
|
496
478
|
//meta.supportedTypes: string
|
|
497
479
|
//meta.supportedUnits: fasta,separator,helm
|
|
498
|
-
//meta.supportedDistanceFunctions: Hamming,
|
|
480
|
+
//meta.supportedDistanceFunctions: Levenshtein,Hamming,Monomer chemical distance,Needlemann-Wunsch
|
|
499
481
|
//input: column col {semType: Macromolecule}
|
|
500
482
|
//input: string metric
|
|
501
483
|
//input: double gapOpen = 1 {caption: Gap open penalty; default: 1; optional: true}
|
|
@@ -506,6 +488,8 @@ export async function activityCliffs(df: DG.DataFrame, macroMolecule: DG.Column<
|
|
|
506
488
|
export async function macromoleculePreprocessingFunction(
|
|
507
489
|
col: DG.Column, metric: MmDistanceFunctionsNames, gapOpen: number = 1, gapExtend: number = 0.6,
|
|
508
490
|
fingerprintType = 'Morgan'): Promise<PreprocessFunctionReturnType> {
|
|
491
|
+
if (col.semType !== DG.SEMTYPE.MACROMOLECULE)
|
|
492
|
+
return {entries: col.toList(), options: {}};
|
|
509
493
|
const {seqList, options} = await getEncodedSeqSpaceCol(col, metric, fingerprintType);
|
|
510
494
|
return {entries: seqList, options: {...options, gapOpen, gapExtend}};
|
|
511
495
|
}
|
|
@@ -558,13 +542,15 @@ export async function sequenceSpaceTopMenu(table: DG.DataFrame, molecules: DG.Co
|
|
|
558
542
|
return;
|
|
559
543
|
if (!preprocessingFunction)
|
|
560
544
|
preprocessingFunction = DG.Func.find({name: 'macromoleculePreprocessingFunction', package: 'Bio'})[0];
|
|
561
|
-
|
|
562
|
-
const res = await
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
545
|
+
options ??= {};
|
|
546
|
+
const res = await multiColReduceDimensionality(table, [molecules], methodName,
|
|
547
|
+
[similarityMetric as KnownMetrics], [1], [preprocessingFunction], 'MANHATTAN',
|
|
548
|
+
plotEmbeddings, clusterEmbeddings ?? false,
|
|
549
|
+
{...options, preprocessingFuncArgs: [options.preprocessingFuncArgs ?? {}]}, {
|
|
550
|
+
fastRowCount: 10000,
|
|
551
|
+
scatterPlotName: 'Sequence space',
|
|
552
|
+
bypassLargeDataWarning: options?.[BYPASS_LARGE_DATA_WARNING],
|
|
553
|
+
});
|
|
568
554
|
return res;
|
|
569
555
|
}
|
|
570
556
|
|
|
@@ -5,7 +5,6 @@ import {after, before, category, test} from '@datagrok-libraries/utils/src/test'
|
|
|
5
5
|
|
|
6
6
|
import {readDataframe} from './utils';
|
|
7
7
|
import {_testActivityCliffsOpen} from './activity-cliffs-utils';
|
|
8
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
9
8
|
|
|
10
9
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
11
10
|
import {BitArrayMetricsNames} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
@@ -15,6 +14,7 @@ import {
|
|
|
15
14
|
} from '@datagrok-libraries/bio/src/monomer-works/lib-settings';
|
|
16
15
|
|
|
17
16
|
import {_package} from '../package-test';
|
|
17
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
category('activityCliffs', async () => {
|
|
@@ -24,8 +24,8 @@ category('activityCliffs', async () => {
|
|
|
24
24
|
let monomerLibHelper: IMonomerLibHelper;
|
|
25
25
|
/** Backup actual user's monomer libraries settings */
|
|
26
26
|
let userLibSettings: LibSettings;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const seqEncodingFunc = DG.Func.find({name: 'macromoleculePreprocessingFunction', package: 'Bio'})[0];
|
|
28
|
+
const helmEncodingFunc = DG.Func.find({name: 'helmPreprocessingFunction', package: 'Bio'})[0];
|
|
29
29
|
before(async () => {
|
|
30
30
|
monomerLibHelper = await getMonomerLibHelper();
|
|
31
31
|
userLibSettings = await getUserLibSettings();
|
|
@@ -57,7 +57,7 @@ category('activityCliffs', async () => {
|
|
|
57
57
|
const cliffsNum = DG.Test.isInBenchmark ? 6 : 3;
|
|
58
58
|
|
|
59
59
|
await _testActivityCliffsOpen(actCliffsDf, DimReductionMethods.UMAP,
|
|
60
|
-
'sequence', 'Activity', 90, cliffsNum, MmDistanceFunctionsNames.LEVENSHTEIN);
|
|
60
|
+
'sequence', 'Activity', 90, cliffsNum, MmDistanceFunctionsNames.LEVENSHTEIN, seqEncodingFunc);
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
test('activityCliffsWithEmptyRows', async () => {
|
|
@@ -67,14 +67,14 @@ category('activityCliffs', async () => {
|
|
|
67
67
|
viewList.push(actCliffsTableViewWithEmptyRows);
|
|
68
68
|
|
|
69
69
|
await _testActivityCliffsOpen(actCliffsDfWithEmptyRows, DimReductionMethods.UMAP,
|
|
70
|
-
'sequence', 'Activity', 90, 3, MmDistanceFunctionsNames.LEVENSHTEIN);
|
|
70
|
+
'sequence', 'Activity', 90, 3, MmDistanceFunctionsNames.LEVENSHTEIN, seqEncodingFunc);
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
test('Helm', async () => {
|
|
74
74
|
const df = await _package.files.readCsv('data/sample_HELM_50.csv');
|
|
75
|
-
const
|
|
75
|
+
const _view = grok.shell.addTableView(df);
|
|
76
76
|
|
|
77
77
|
await _testActivityCliffsOpen(df, DimReductionMethods.UMAP,
|
|
78
|
-
'HELM', 'Activity', 65,
|
|
78
|
+
'HELM', 'Activity', 65, 20, BitArrayMetricsNames.Tanimoto, helmEncodingFunc);
|
|
79
79
|
});
|
|
80
80
|
});
|
|
@@ -2,19 +2,20 @@ import * as DG from 'datagrok-api/dg';
|
|
|
2
2
|
import * as grok from 'datagrok-api/grok';
|
|
3
3
|
|
|
4
4
|
import {expect} from '@datagrok-libraries/utils/src/test';
|
|
5
|
-
import {activityCliffs
|
|
6
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
5
|
+
import {activityCliffs} from '../package';
|
|
7
6
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
8
7
|
import {BitArrayMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
|
|
8
|
+
import {BYPASS_LARGE_DATA_WARNING} from '@datagrok-libraries/ml/src/functionEditors/consts';
|
|
9
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
9
10
|
|
|
10
11
|
export async function _testActivityCliffsOpen(df: DG.DataFrame, drMethod: DimReductionMethods,
|
|
11
12
|
seqColName: string, activityColName: string, similarityThr: number, tgtNumberCliffs: number,
|
|
12
|
-
similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics
|
|
13
|
+
similarityMetric: MmDistanceFunctionsNames | BitArrayMetrics, preprocessingFunction: DG.Func,
|
|
13
14
|
): Promise<void> {
|
|
14
15
|
await grok.data.detectSemanticTypes(df);
|
|
15
16
|
const scatterPlot = await activityCliffs(
|
|
16
17
|
df, df.getCol(seqColName), df.getCol(activityColName),
|
|
17
|
-
similarityThr, drMethod, similarityMetric, {[`${BYPASS_LARGE_DATA_WARNING}`]: true});
|
|
18
|
+
similarityThr, drMethod, similarityMetric, preprocessingFunction, {[`${BYPASS_LARGE_DATA_WARNING}`]: true});
|
|
18
19
|
// const scatterPlot = (await grok.functions.call('Bio:activityCliffs', {
|
|
19
20
|
// table: df, molecules: df.getCol(colName), activities: df.getCol('Activity'),
|
|
20
21
|
// similarity: 50, methodName: method
|
package/src/tests/msa-tests.ts
CHANGED
|
@@ -81,12 +81,12 @@ MWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP
|
|
|
81
81
|
test('isCorrectHelm', async () => {
|
|
82
82
|
await awaitContainerStart();
|
|
83
83
|
await _testMSAOnColumn(helmFromCsv, helmToCsv, NOTATION.HELM, NOTATION.SEPARATOR, undefined, 'mafft');
|
|
84
|
-
}
|
|
84
|
+
});
|
|
85
85
|
|
|
86
86
|
test('isCorrectHelmLong', async () => {
|
|
87
87
|
await awaitContainerStart();
|
|
88
88
|
await _testMSAOnColumn(longHelmFromCsv, longHelmToCsv, NOTATION.HELM, NOTATION.SEPARATOR, undefined, 'mafft');
|
|
89
|
-
}
|
|
89
|
+
});
|
|
90
90
|
|
|
91
91
|
test('isCorrectSeparator', async () => {
|
|
92
92
|
await _testMSAOnColumn(
|
|
@@ -5,7 +5,7 @@ import * as DG from 'datagrok-api/dg';
|
|
|
5
5
|
import {category, test} from '@datagrok-libraries/utils/src/test';
|
|
6
6
|
import {readDataframe} from './utils';
|
|
7
7
|
import {_testSequenceSpaceReturnsResult} from './sequence-space-utils';
|
|
8
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/
|
|
8
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
9
9
|
|
|
10
10
|
category('sequenceSpace', async () => {
|
|
11
11
|
let testFastaDf: DG.DataFrame;
|
|
@@ -3,8 +3,8 @@ import * as grok from 'datagrok-api/grok';
|
|
|
3
3
|
import {expect} from '@datagrok-libraries/utils/src/test';
|
|
4
4
|
import {sequenceSpaceTopMenu} from '../package';
|
|
5
5
|
import {MmDistanceFunctionsNames} from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
6
|
-
import {DimReductionMethods} from '@datagrok-libraries/ml/src/reduce-dimensionality';
|
|
7
6
|
import {BYPASS_LARGE_DATA_WARNING} from '@datagrok-libraries/ml/src/functionEditors/consts';
|
|
7
|
+
import {DimReductionMethods} from '@datagrok-libraries/ml/src/multi-column-dimensionality-reduction/types';
|
|
8
8
|
|
|
9
9
|
export async function _testSequenceSpaceReturnsResult(
|
|
10
10
|
df: DG.DataFrame, algorithm: DimReductionMethods, colName: string,
|
package/src/tests/utils.ts
CHANGED
|
@@ -35,9 +35,11 @@ export function _testTableIsNotEmpty(table: DG.DataFrame): void {
|
|
|
35
35
|
/** Waits if container is not started
|
|
36
36
|
* @param {number} ms - time to wait in milliseconds */
|
|
37
37
|
export async function awaitContainerStart(ms: number = 10000): Promise<void> {
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
38
|
+
const container = await grok.dapi.docker.dockerContainers.filter('bio').first();
|
|
39
|
+
if (container.status !== 'started' && container.status !== 'checking')
|
|
40
40
|
await delay(ms);
|
|
41
|
+
// TODO: Enable with new JS API version
|
|
42
|
+
// await grok.dapi.docker.dockerContainers.run(container.id, true);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export async function awaitGrid(grid: DG.Grid, timeout: number = 5000): Promise<void> {
|
package/dist/23.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";var e,r,t={5023:(e,r,t)=>{const o=e=>null==e;var n=t(6361),a=t(9657);onmessage=async e=>{const{values:r,startIdx:t,endIdx:s,threshold:i,fnName:c,opts:l}=e.data;try{const e=[],p=[],h=[],f=s-t;if((0,n.sQ)(c))for(let e=0;e<r.length;++e)o(r[e])||(r[e]=new a.Z(r[e]._data,r[e]._length));let u=0;const g=new n.UH(c).getMeasure(l),v=r.length-2-Math.floor(Math.sqrt(-8*t+4*r.length*(r.length-1)-7)/2-.5),b=t-r.length*v+Math.floor((v+1)*(v+2)/2);let d=v,w=b;for(;u<f;){const t=o(r[d])||o(r[w])?1:g(r[d],r[w]);1-t>=i&&(e.push(d),p.push(w),h.push(t)),u++,w++,w===r.length&&(d++,w=d+1)}const y=new Int32Array(e),m=new Int32Array(p),x=new Float32Array(h);postMessage({i:y,j:m,distance:x})}catch(e){postMessage({error:e})}}}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var a=o[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.m=t,n.x=()=>{var e=n.O(void 0,[378,361],(()=>n(5023)));return n.O(e)},e=[],n.O=(r,t,o,a)=>{if(!t){var s=1/0;for(p=0;p<e.length;p++){for(var[t,o,a]=e[p],i=!0,c=0;c<t.length;c++)(!1&a||s>=a)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(i=!1,a<s&&(s=a));if(i){e.splice(p--,1);var l=o();void 0!==l&&(r=l)}}return r}a=a||0;for(var p=e.length;p>0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[t,o,a]},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>e+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var r=n.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&!e;)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{var e={23:1};n.f.i=(r,t)=>{e[r]||importScripts(n.p+n.u(r))};var r=self.webpackChunkbio=self.webpackChunkbio||[],t=r.push.bind(r);r.push=r=>{var[o,a,s]=r;for(var i in a)n.o(a,i)&&(n.m[i]=a[i]);for(s&&s(n);o.length;)e[o.pop()]=1;t(r)}})(),r=n.x,n.x=()=>Promise.all([n.e(378),n.e(361)]).then(r);var a=n.x();bio=a})();
|
|
2
|
-
//# sourceMappingURL=23.js.map
|
package/dist/23.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"23.js","mappings":"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","sources":["webpack://bio/webpack/runtime/chunk loaded","webpack://bio/webpack/runtime/startup chunk dependencies","webpack://bio/./node_modules/@datagrok-libraries/ml/src/distance-matrix/utils.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/distance-matrix/sparse-matrix-worker.js","webpack://bio/webpack/bootstrap","webpack://bio/webpack/runtime/define property getters","webpack://bio/webpack/runtime/ensure chunk","webpack://bio/webpack/runtime/get javascript chunk filename","webpack://bio/webpack/runtime/global","webpack://bio/webpack/runtime/hasOwnProperty shorthand","webpack://bio/webpack/runtime/publicPath","webpack://bio/webpack/runtime/importScripts chunk loading","webpack://bio/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([\n\t\t__webpack_require__.e(378),\n\t\t__webpack_require__.e(361)\n\t]).then(next);\n};","export const isNil = (x) => x === null || x === undefined;\nexport function insertSmaller(distancesAr, indexes, num, index) {\n if (num > distancesAr[distancesAr.length - 1]) {\n return;\n }\n const newPosition = distancesAr.findIndex((v) => num < v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function insertLarger(distancesAr, indexes, num, index) {\n if (num < distancesAr[distancesAr.length - 1]) {\n return;\n }\n const newPosition = distancesAr.findIndex((v) => num > v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUUvRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFdBQXFCLEVBQUUsT0FBaUIsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUM5RixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6QyxPQUFPO0tBQ1Y7SUFDRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsV0FBcUIsRUFBRSxPQUFpQixFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQzdGLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pDLE9BQU87S0FDVjtJQUNELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlzTmlsID0gKHg6IGFueSkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRTbWFsbGVyKGRpc3RhbmNlc0FyOiBudW1iZXJbXSwgaW5kZXhlczogbnVtYmVyW10sIG51bTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aC0xXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyOiBudW1iZXJbXSwgaW5kZXhlczogbnVtYmVyW10sIG51bTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKG51bSA8IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aC0xXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuIl19","import { isNil } from './utils';\nimport { Measure, isBitArrayMetric } from '../typed-metrics';\nimport BitArray from '@datagrok-libraries/utils/src/bit-array';\nonmessage = async (event) => {\n const { values, startIdx, endIdx, threshold, fnName, opts } = event.data;\n try {\n // if (startIdx != -1)\n // throw new Error('Error in sparse matrix worker'); // TODO: remove this line\n const i = [];\n const j = [];\n const distances = [];\n const chunkSize = endIdx - startIdx;\n //const mi = startRow;\n //const mj = startCol;\n if (isBitArrayMetric(fnName)) {\n for (let i = 0; i < values.length; ++i) {\n if (isNil(values[i]))\n continue;\n values[i] = new BitArray(values[i]._data, values[i]._length);\n }\n }\n let cnt = 0;\n const distanceFn = new Measure(fnName).getMeasure(opts);\n const startRow = values.length - 2 - Math.floor(Math.sqrt(-8 * startIdx + 4 * values.length * (values.length - 1) - 7) / 2 - 0.5);\n const startCol = startIdx - values.length * startRow + Math.floor((startRow + 1) * (startRow + 2) / 2);\n let mi = startRow;\n let mj = startCol;\n while (cnt < chunkSize) {\n //const value = seq1List[mi] && seq1List[mj] ? hamming(seq1List[mi], seq1List[mj]) : 0;\n const value = !isNil(values[mi]) && !isNil(values[mj]) ?\n distanceFn(values[mi], values[mj]) : 1;\n if (1 - value >= threshold) {\n i.push(mi);\n j.push(mj);\n distances.push(value);\n }\n cnt++;\n mj++;\n if (mj === values.length) {\n mi++;\n mj = mi + 1;\n }\n }\n const iArray = new Int32Array(i);\n const jArray = new Int32Array(j);\n const distanceArray = new Float32Array(distances);\n postMessage({ i: iArray, j: jArray, distance: distanceArray });\n }\n catch (e) {\n postMessage({ error: e });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLW1hdHJpeC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcGFyc2UtbWF0cml4LXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBZSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLFFBQVEsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRCxTQUFTLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzFCLE1BQU0sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxHQUNpRCxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3JILElBQUk7UUFDRixzQkFBc0I7UUFDdEIsZ0ZBQWdGO1FBQ2hGLE1BQU0sQ0FBQyxHQUFhLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBYSxFQUFFLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDcEMsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUV0QixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQUUsU0FBUztnQkFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7UUFDRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNwRixNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDbEIsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxHQUFHLFNBQVMsRUFBRTtZQUN0Qix1RkFBdUY7WUFDdkYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDWCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsR0FBRyxFQUFFLENBQUM7WUFDTixFQUFFLEVBQUUsQ0FBQztZQUNMLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ2I7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztLQUM5RDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsV0FBVyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7S0FDekI7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzTmlsfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7S25vd25NZXRyaWNzLCBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXknO1xub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gIGNvbnN0IHt2YWx1ZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIHRocmVzaG9sZCwgZm5OYW1lLCBvcHRzfTpcbiAgICB7dmFsdWVzOiBhbnlbXSwgc3RhcnRJZHg6IG51bWJlciwgZW5kSWR4OiBudW1iZXIsIHRocmVzaG9sZDogbnVtYmVyLCBmbk5hbWU6IEtub3duTWV0cmljcywgb3B0czogYW55fSA9IGV2ZW50LmRhdGE7XG4gIHRyeSB7XG4gICAgLy8gaWYgKHN0YXJ0SWR4ICE9IC0xKVxuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBzcGFyc2UgbWF0cml4IHdvcmtlcicpOyAvLyBUT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gICAgY29uc3QgaTogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBqOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGRpc3RhbmNlczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBjaHVua1NpemUgPSBlbmRJZHggLSBzdGFydElkeDtcbiAgICAvL2NvbnN0IG1pID0gc3RhcnRSb3c7XG4gICAgLy9jb25zdCBtaiA9IHN0YXJ0Q29sO1xuXG4gICAgaWYgKGlzQml0QXJyYXlNZXRyaWMoZm5OYW1lKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZXNbaV0gPSBuZXcgQml0QXJyYXkodmFsdWVzW2ldLl9kYXRhLCB2YWx1ZXNbaV0uX2xlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IGRpc3RhbmNlRm4gPSBuZXcgTWVhc3VyZShmbk5hbWUpLmdldE1lYXN1cmUob3B0cyk7XG4gICAgY29uc3Qgc3RhcnRSb3cgPSB2YWx1ZXMubGVuZ3RoIC0gMiAtIE1hdGguZmxvb3IoXG4gICAgICBNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiB2YWx1ZXMubGVuZ3RoICogKHZhbHVlcy5sZW5ndGggLSAxKSAtIDcpIC8gMiAtIDAuNSk7XG4gICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlcy5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBtaSA9IHN0YXJ0Um93O1xuICAgIGxldCBtaiA9IHN0YXJ0Q29sO1xuICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgY29uc3QgdmFsdWUgPSAhaXNOaWwodmFsdWVzW21pXSkgJiYgIWlzTmlsKHZhbHVlc1ttal0pID9cbiAgICAgICAgZGlzdGFuY2VGbih2YWx1ZXNbbWldLCB2YWx1ZXNbbWpdKSA6IDE7XG4gICAgICBpZiAoMSAtIHZhbHVlID49IHRocmVzaG9sZCkge1xuICAgICAgICBpLnB1c2gobWkpO1xuICAgICAgICBqLnB1c2gobWopO1xuICAgICAgICBkaXN0YW5jZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjbnQrKztcbiAgICAgIG1qKys7XG4gICAgICBpZiAobWogPT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgbWkrKztcbiAgICAgICAgbWogPSBtaSArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaUFycmF5ID0gbmV3IEludDMyQXJyYXkoaSk7XG4gICAgY29uc3QgakFycmF5ID0gbmV3IEludDMyQXJyYXkoaik7XG4gICAgY29uc3QgZGlzdGFuY2VBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZGlzdGFuY2VzKTtcbiAgICBwb3N0TWVzc2FnZSh7aTogaUFycmF5LCBqOiBqQXJyYXksIGRpc3RhbmNlOiBkaXN0YW5jZUFycmF5fSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwb3N0TWVzc2FnZSh7ZXJyb3I6IGV9KTtcbiAgfVxufTsiXX0=","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [378,361], () => (__webpack_require__(5023)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t23: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkbio\"] = self[\"webpackChunkbio\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","isNil","x","onmessage","async","event","values","startIdx","endIdx","threshold","fnName","opts","data","i","j","distances","chunkSize","length","_data","_length","cnt","distanceFn","getMeasure","startRow","Math","floor","sqrt","startCol","mi","mj","value","push","iArray","Int32Array","jArray","distanceArray","Float32Array","postMessage","distance","e","error","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","key","splice","r","d","definition","o","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","call","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","self","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""}
|
package/dist/282.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";var e,r,t={1282:(e,r,t)=>{const n=e=>null==e;function o(e,r,t,n){if(t>e[e.length-1])return;const o=e.findIndex((e=>t<e));e.pop(),e.splice(o,0,t),r.pop(),r.splice(o,0,n)}var a=t(6361),i=t(9657);onmessage=async e=>{const{values:r,startIdx:t,endIdx:l,fnName:s,opts:c,nNeighbours:p}=e.data;try{const e=new Array(r.length).fill(null).map((()=>new Array(p).fill(-1))),f=new Array(r.length).fill(null).map((()=>new Array(p).fill(999999))),h=l-t;if((0,a.sQ)(s))for(let e=0;e<r.length;++e)n(r[e])||(r[e]=new i.Z(r[e]._data,r[e]._length));let u=0;const g=new a.UH(s).getMeasure(c),v=r.length-2-Math.floor(Math.sqrt(-8*t+4*r.length*(r.length-1)-7)/2-.5),b=t-r.length*v+Math.floor((v+1)*(v+2)/2);let d=v,w=b;for(;u<h;){const t=n(r[d])||n(r[w])?1:g(r[d],r[w]);o(f[d],e[d],t,w),o(f[w],e[w],t,d),u++,w++,w===r.length&&(d++,w=d+1)}postMessage({knnDistances:f,knnIndexes:e})}catch(e){postMessage({error:e})}}}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,o),a.exports}o.m=t,o.x=()=>{var e=o.O(void 0,[378,361],(()=>o(1282)));return o.O(e)},e=[],o.O=(r,t,n,a)=>{if(!t){var i=1/0;for(p=0;p<e.length;p++){for(var[t,n,a]=e[p],l=!0,s=0;s<t.length;s++)(!1&a||i>=a)&&Object.keys(o.O).every((e=>o.O[e](t[s])))?t.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(p--,1);var c=n();void 0!==c&&(r=c)}}return r}a=a||0;for(var p=e.length;p>0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[t,n,a]},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),o.u=e=>e+".js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&!e;)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{var e={282:1};o.f.i=(r,t)=>{e[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunkbio=self.webpackChunkbio||[],t=r.push.bind(r);r.push=r=>{var[n,a,i]=r;for(var l in a)o.o(a,l)&&(o.m[l]=a[l]);for(i&&i(o);n.length;)e[n.pop()]=1;t(r)}})(),r=o.x,o.x=()=>Promise.all([o.e(378),o.e(361)]).then(r);var a=o.x();bio=a})();
|
|
2
|
-
//# sourceMappingURL=282.js.map
|