@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.
Files changed (46) hide show
  1. package/dist/100.js +2 -0
  2. package/dist/100.js.map +1 -0
  3. package/dist/118.js +2 -0
  4. package/dist/118.js.map +1 -0
  5. package/dist/361.js +1 -1
  6. package/dist/361.js.map +1 -1
  7. package/dist/471.js +2 -0
  8. package/dist/471.js.map +1 -0
  9. package/dist/649.js +2 -0
  10. package/dist/649.js.map +1 -0
  11. package/dist/664.js +2 -0
  12. package/dist/664.js.map +1 -0
  13. package/dist/886.js +3 -0
  14. package/dist/886.js.map +1 -0
  15. package/dist/package-test.js +1 -2
  16. package/dist/package-test.js.map +1 -1
  17. package/dist/package.js +1 -2
  18. package/dist/package.js.map +1 -1
  19. package/package.json +2 -2
  20. package/src/analysis/sequence-space.ts +2 -75
  21. package/src/demo/bio01b-hierarchical-clustering-and-activity-cliffs.ts +3 -2
  22. package/src/demo/bio05-helm-msa-sequence-space.ts +1 -1
  23. package/src/demo/utils.ts +6 -5
  24. package/src/package.ts +53 -67
  25. package/src/tests/activity-cliffs-tests.ts +7 -7
  26. package/src/tests/activity-cliffs-utils.ts +5 -4
  27. package/src/tests/msa-tests.ts +2 -2
  28. package/src/tests/pepsea-tests.ts +1 -1
  29. package/src/tests/sequence-space-test.ts +1 -1
  30. package/src/tests/sequence-space-utils.ts +1 -1
  31. package/src/tests/utils.ts +4 -2
  32. package/dist/23.js +0 -2
  33. package/dist/23.js.map +0 -1
  34. package/dist/282.js +0 -2
  35. package/dist/282.js.map +0 -1
  36. package/dist/378.js +0 -2
  37. package/dist/378.js.map +0 -1
  38. package/dist/40.js +0 -2
  39. package/dist/40.js.map +0 -1
  40. package/dist/65.js +0 -2
  41. package/dist/65.js.map +0 -1
  42. package/dist/935.js +0 -3
  43. package/dist/935.js.map +0 -1
  44. package/dist/package-test.js.LICENSE.txt +0 -51
  45. package/dist/package.js.LICENSE.txt +0 -51
  46. /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.24",
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.3.68",
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 {reduceDimensinalityWithNormalization} from '@datagrok-libraries/ml/src/sequence-space';
3
- import {BitArrayMetrics, StringMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
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 reduceDimensinalityWithNormalization( // TODO: Rename method typo
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.embedding[embedI];
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 {reduceDimensionality} from '@datagrok-libraries/ml/src/functionEditors/dimensionality-reducer';
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, ALPHABET, NOTATION,
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
- ISequenceSpaceResult, getEmbeddingColsNames, getEncodedSeqSpaceCol, getSequenceSpace, sequenceSpaceByFingerprints
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 ActivityCliffsFunctionEditor(DG.SEMTYPE.MACROMOLECULE);
250
+ const funcEditor = new ActivityCliffsEditor({semtype: DG.SEMTYPE.MACROMOLECULE});
260
251
  ui.dialog({title: 'Activity Cliffs'})
261
- .add(funcEditor.paramsUI)
252
+ .add(funcEditor.getEditor())
262
253
  .onOK(async () => {
263
- return call.func.prepare(funcEditor.funcParams).call(true);
264
- })
265
- .show();
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(df: DG.DataFrame, macroMolecule: DG.Column<string>, activities: DG.Column,
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(macroMolecule, 'Activity Cliffs'))
415
+ if (!checkInputColumnUI(molecules, 'Activity Cliffs'))
416
416
  return;
417
- const axesNames = getEmbeddingColsNames(df);
417
+ const axesNames = getEmbeddingColsNames(table);
418
418
  const tags = {
419
- 'units': macroMolecule.getTag(DG.TAGS.UNITS),
420
- 'aligned': macroMolecule.getTag(bioTAGS.aligned),
421
- 'separator': macroMolecule.getTag(bioTAGS.separator),
422
- 'alphabet': macroMolecule.getTag(bioTAGS.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 = macroMolecule;
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
- df,
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
- sequenceSpaceFunc,
458
- getChemSimilaritiesMatrix,
440
+ preprocessingFunction,
459
441
  createTooltipElement,
460
442
  createPropPanelElement,
461
443
  createLinesGrid,
462
- {...(options ?? {}), [CLIFFS_COL_ENCODE_FN]: cliffsEncodeFunction});
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 (df.rowCount > allowedRowCount) {
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 (df.rowCount > fastRowCount && !options?.[BYPASS_LARGE_DATA_WARNING]) {
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,Levenshtein,Monomer chemical distance,Needlemann-Wunsch
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 reduceDimensionality(table, molecules, methodName,
563
- similarityMetric as KnownMetrics, preprocessingFunction, plotEmbeddings, clusterEmbeddings ?? false, options, {
564
- fastRowCount: 10000,
565
- scatterPlotName: 'Sequence space',
566
- bypassLargeDataWarning: options?.[BYPASS_LARGE_DATA_WARNING],
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 view = grok.shell.addTableView(df);
75
+ const _view = grok.shell.addTableView(df);
76
76
 
77
77
  await _testActivityCliffsOpen(df, DimReductionMethods.UMAP,
78
- 'HELM', 'Activity', 65, 4, BitArrayMetricsNames.Tanimoto);
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, BYPASS_LARGE_DATA_WARNING} from '../package';
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
@@ -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
- }, {skipReason: 'GROK-13221'});
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
- }, {skipReason: 'GROK-13221'});
89
+ });
90
90
 
91
91
  test('isCorrectSeparator', async () => {
92
92
  await _testMSAOnColumn(
@@ -20,5 +20,5 @@ category('PepSeA', () => {
20
20
  const alignedTestCol = table.getCol('MSA');
21
21
  for (let i = 0; i < alignedCol!.length; ++i)
22
22
  expect(alignedCol!.get(i) == alignedTestCol.get(i), true);
23
- }, {skipReason: 'GROK-13221'});
23
+ });
24
24
  });
@@ -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/reduce-dimensionality';
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,
@@ -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 pepseaContainer = await grok.dapi.docker.dockerContainers.filter('bio').first();
39
- if (pepseaContainer.status !== 'started' && pepseaContainer.status !== 'checking')
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