Spaces:
Running
Running
File size: 2,101 Bytes
23680f2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import { useMemo } from "react";
import type { DatasetInfo, EmbeddingsData } from "@/types";
import {
MAX_DISTINCT_LABEL_COLORS,
buildLabelColorMap,
buildLabelCounts,
buildLabelUniverse,
buildLabelsInfo,
buildLegendLabels,
getDistinctLabelCount,
} from "@/lib/labelLegend";
interface UseLabelLegendArgs {
datasetInfo: DatasetInfo | null;
embeddings: EmbeddingsData | null;
labelSearch?: string;
labelFilter?: string | null;
}
export function useLabelLegend({
datasetInfo,
embeddings,
labelSearch = "",
labelFilter = null,
}: UseLabelLegendArgs) {
const labelCounts = useMemo(() => buildLabelCounts(embeddings), [embeddings]);
const labelUniverse = useMemo(
() => buildLabelUniverse(datasetInfo?.labels ?? [], embeddings?.labels ?? null),
[datasetInfo?.labels, embeddings?.labels]
);
const distinctLabelCount = useMemo(() => {
const fromCounts = getDistinctLabelCount(labelCounts);
if (fromCounts > 0) return fromCounts;
let n = labelUniverse.length;
if (labelUniverse.includes("undefined")) n -= 1;
return n;
}, [labelCounts, labelUniverse]);
const distinctColoringDisabled = distinctLabelCount > MAX_DISTINCT_LABEL_COLORS;
const labelsInfo = useMemo(
() =>
buildLabelsInfo({
datasetLabels: datasetInfo?.labels ?? [],
embeddings,
distinctColoringDisabled,
labelFilter,
}),
[datasetInfo?.labels, embeddings, distinctColoringDisabled, labelFilter]
);
const labelColorMap = useMemo(
() =>
buildLabelColorMap({
labelsInfo,
labelUniverse,
distinctColoringDisabled,
labelFilter,
}),
[labelsInfo, labelUniverse, distinctColoringDisabled, labelFilter]
);
const legendLabels = useMemo(
() =>
buildLegendLabels({
labelUniverse,
labelCounts,
query: labelSearch,
}),
[labelUniverse, labelCounts, labelSearch]
);
return {
labelCounts,
labelUniverse,
distinctLabelCount,
distinctColoringDisabled,
labelsInfo,
labelColorMap,
legendLabels,
};
}
|