mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-26 10:18:12 +08:00
* convert annotation summary to a Map * add 2d annotation count summary * add memoization on 2D annotation counting * add tests for annotation summarization * fix import/exports * rename WorldOps to WorldUtil * rename WorldOps to WorldUtil * add comment
66 lines
1.4 KiB
JavaScript
66 lines
1.4 KiB
JavaScript
/* eslint-disable import/prefer-default-export */
|
|
import _ from "lodash";
|
|
|
|
/*
|
|
Various utility functions operating on World/Universe
|
|
*/
|
|
|
|
/*
|
|
Count unique category values, binning first by dim1 then by dim2
|
|
Return:
|
|
|
|
Map {
|
|
dim1_val1: Map {
|
|
dim2_val1: number,
|
|
dim2_val2: number,
|
|
...
|
|
},
|
|
...
|
|
}
|
|
|
|
*/
|
|
function _countCategoryValues2D(dim1, dim2, rows) {
|
|
const dimMap = new Map();
|
|
for (let r = 0; r < rows.length; r += 1) {
|
|
const row = rows[r];
|
|
const val1 = row[dim1];
|
|
const val2 = row[dim2];
|
|
let d2Map = dimMap.get(val1);
|
|
if (d2Map === undefined) {
|
|
d2Map = new Map();
|
|
dimMap.set(val1, d2Map);
|
|
}
|
|
let curCount = d2Map.get(val2);
|
|
if (curCount === undefined) {
|
|
curCount = 0;
|
|
}
|
|
d2Map.set(val2, curCount + 1);
|
|
}
|
|
return dimMap;
|
|
}
|
|
|
|
let __worldUtilMemoId__ = 0;
|
|
function _memoizedId(x) {
|
|
if (!x.__worldUtilMemoId__) {
|
|
__worldUtilMemoId__ += 1;
|
|
x.__worldUtilMemoId__ = __worldUtilMemoId__;
|
|
}
|
|
return x.__worldUtilMemoId__;
|
|
}
|
|
function _countCategoryValues2DResolver(...args) {
|
|
const id = args[0] + args[1] + _memoizedId(args[2]);
|
|
return id;
|
|
}
|
|
|
|
export const countCategoryValues2D = _.memoize(
|
|
_countCategoryValues2D,
|
|
_countCategoryValues2DResolver
|
|
);
|
|
|
|
/*
|
|
Clear any cached data within WorldUtil caches, eg, memoized functions
|
|
*/
|
|
export function clearCaches() {
|
|
countCategoryValues2D.cache.clear();
|
|
}
|