@milaboratories/graph-maker 1.1.143 → 1.1.145
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/GraphMaker/index.vue.d.ts.map +1 -1
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +64 -64
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js +31 -31
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +39 -32
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +68 -62
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +5 -5
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +8 -8
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +3 -3
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +6 -6
- package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +12 -9
- package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/{index.js → error_like_shape.js} +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js +63 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js +152 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +189 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/errors.js +18 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/errors.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/json.js +12 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/json.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js +13 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +89 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +50 -45
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +54 -50
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
- package/package.json +4 -4
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/index.js.map +0 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/index.js +0 -979
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/index.js.map +0 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/index.js +0 -1599
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/index.js.map +0 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import "../../../../../@milaboratories/pl-model-common/dist/drivers/blob.js";
|
|
2
|
+
import { readAnnotation as S, Annotation as I } from "../../../../../@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
|
|
3
|
+
import "../../../../../../_virtual/canonicalize.js";
|
|
4
|
+
import { parseJson as B } from "../../../../../@milaboratories/pl-model-common/dist/json.js";
|
|
5
|
+
import "../../../../../@milaboratories/pl-model-common/dist/plid.js";
|
|
6
|
+
import "../../../../../@milaboratories/pl-model-common/dist/ref.js";
|
|
7
|
+
import p from "../../../../../zod/lib/index.js";
|
|
8
|
+
const F = p.object({
|
|
9
|
+
type: p.string(),
|
|
10
|
+
importance: p.number().optional(),
|
|
11
|
+
id: p.string().optional(),
|
|
12
|
+
label: p.string()
|
|
13
|
+
}), J = p.array(F), P = 1e-3, W = "__LABEL__", j = "__LABEL__@1";
|
|
14
|
+
function C(d, M, s = {}) {
|
|
15
|
+
const g = /* @__PURE__ */ new Map(), _ = s.forceTraceElements !== void 0 && s.forceTraceElements.length > 0 ? new Set(s.forceTraceElements) : void 0, b = /* @__PURE__ */ new Map(), x = d.map((e) => {
|
|
16
|
+
const n = M(e);
|
|
17
|
+
let t, a, i;
|
|
18
|
+
"spec" in n && typeof n.spec == "object" ? (t = n.spec, a = n.prefixTrace, i = n.suffixTrace) : t = n;
|
|
19
|
+
const c = S(t, I.Label), h = S(t, I.Trace), w = (h ? J.safeParse(B(h)).data : void 0) ?? [], r = [
|
|
20
|
+
...a ?? [],
|
|
21
|
+
...w,
|
|
22
|
+
...i ?? []
|
|
23
|
+
];
|
|
24
|
+
if (c !== void 0) {
|
|
25
|
+
const o = { label: c, type: W, importance: -2 };
|
|
26
|
+
s.addLabelAsSuffix ? r.push(o) : r.splice(0, 0, o);
|
|
27
|
+
}
|
|
28
|
+
const y = [], N = /* @__PURE__ */ new Map();
|
|
29
|
+
for (let o = r.length - 1; o >= 0; --o) {
|
|
30
|
+
const { type: E } = r[o], $ = r[o].importance ?? 0, L = (N.get(E) ?? 0) + 1;
|
|
31
|
+
N.set(E, L);
|
|
32
|
+
const u = `${E}@${L}`;
|
|
33
|
+
b.set(u, (b.get(u) ?? 0) + 1), g.set(u, Math.max(g.get(u) ?? Number.NEGATIVE_INFINITY, $ - (r.length - o) * P)), y.push({ ...r[o], fullType: u, occurrenceIndex: L });
|
|
34
|
+
}
|
|
35
|
+
return y.reverse(), {
|
|
36
|
+
value: e,
|
|
37
|
+
spec: t,
|
|
38
|
+
label: c,
|
|
39
|
+
fullTrace: y
|
|
40
|
+
};
|
|
41
|
+
}), l = [], T = [], A = [...g];
|
|
42
|
+
A.sort(([, e], [, n]) => n - e);
|
|
43
|
+
for (const [e] of A)
|
|
44
|
+
e.endsWith("@1") || b.get(e) === d.length ? l.push(e) : T.push(e);
|
|
45
|
+
const v = (e, n = !1) => {
|
|
46
|
+
const t = [];
|
|
47
|
+
for (let a = 0; a < x.length; a++) {
|
|
48
|
+
const i = x[a], c = i.fullTrace.filter((r) => e.has(r.fullType) || _ && _.has(r.type));
|
|
49
|
+
if (c.length === 0)
|
|
50
|
+
if (n)
|
|
51
|
+
t.push({
|
|
52
|
+
label: "Unlabeled",
|
|
53
|
+
value: i.value
|
|
54
|
+
});
|
|
55
|
+
else
|
|
56
|
+
return;
|
|
57
|
+
const h = c.map((r) => r.label), w = s.separator ?? " / ";
|
|
58
|
+
t.push({
|
|
59
|
+
label: h.join(w),
|
|
60
|
+
value: i.value
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return t;
|
|
64
|
+
};
|
|
65
|
+
if (l.length === 0) {
|
|
66
|
+
if (T.length !== 0)
|
|
67
|
+
throw new Error("Non-empty secondary types list while main types list is empty.");
|
|
68
|
+
return v(new Set(j), !0);
|
|
69
|
+
}
|
|
70
|
+
let m = 0, f = -1;
|
|
71
|
+
for (; m < l.length; ) {
|
|
72
|
+
const e = /* @__PURE__ */ new Set();
|
|
73
|
+
s.includeNativeLabel && e.add(j);
|
|
74
|
+
for (let t = 0; t < m; ++t)
|
|
75
|
+
e.add(l[t]);
|
|
76
|
+
f >= 0 && e.add(l[f]);
|
|
77
|
+
const n = v(e);
|
|
78
|
+
if (n !== void 0 && new Set(n.map((t) => t.label)).size === d.length)
|
|
79
|
+
return n;
|
|
80
|
+
f++, f >= l.length && (m++, f = m);
|
|
81
|
+
}
|
|
82
|
+
return v(/* @__PURE__ */ new Set([...l, ...T]), !0);
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
J as Trace,
|
|
86
|
+
F as TraceEntry,
|
|
87
|
+
C as deriveLabels
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sources":["../../../../../../../../../../../node_modules/@milaboratories/pf-plots/node_modules/@platforma-sdk/model/src/render/util/label.ts"],"sourcesContent":["import { Annotation, parseJson, readAnnotation, type PObjectSpec } from '@milaboratories/pl-model-common';\nimport { z } from 'zod';\n\nexport type RecordsWithLabel<T> = {\n value: T;\n label: string;\n};\n\nexport type LabelDerivationOps = {\n /** Force inclusion of native column label */\n includeNativeLabel?: boolean;\n /** Separator to use between label parts (\" / \" by default) */\n separator?: string;\n /** If true, label will be added as suffix (at the end of the generated label). By default label added as a prefix. */\n addLabelAsSuffix?: boolean;\n /** Trace elements list that will be forced to be included in the label. */\n forceTraceElements?: string[];\n};\n\nexport const TraceEntry = z.object({\n type: z.string(),\n importance: z.number().optional(),\n id: z.string().optional(),\n label: z.string(),\n});\nexport type TraceEntry = z.infer<typeof TraceEntry>;\ntype FullTraceEntry = TraceEntry & { fullType: string; occurrenceIndex: number };\n\nexport const Trace = z.array(TraceEntry);\nexport type Trace = z.infer<typeof Trace>;\ntype FullTrace = FullTraceEntry[];\n\n// Define the possible return types for the specExtractor function\ntype SpecExtractorResult = PObjectSpec | {\n spec: PObjectSpec;\n prefixTrace?: TraceEntry[];\n suffixTrace?: TraceEntry[];\n};\n\nconst DistancePenalty = 0.001;\n\nconst LabelType = '__LABEL__';\nconst LabelTypeFull = '__LABEL__@1';\n\nexport function deriveLabels<T>(\n values: T[],\n specExtractor: (obj: T) => SpecExtractorResult,\n ops: LabelDerivationOps = {},\n): RecordsWithLabel<T>[] {\n const importances = new Map<string, number>();\n\n const forceTraceElements = (ops.forceTraceElements !== undefined && ops.forceTraceElements.length > 0)\n ? new Set(ops.forceTraceElements)\n : undefined;\n\n // number of times certain type occurred among all of the\n const numberOfRecordsWithType = new Map<string, number>();\n\n const enrichedRecords = values.map((value) => {\n const extractorResult = specExtractor(value);\n let spec: PObjectSpec;\n let prefixTrace: TraceEntry[] | undefined;\n let suffixTrace: TraceEntry[] | undefined;\n\n // Check if the result is the new structure or just PObjectSpec\n if ('spec' in extractorResult && typeof extractorResult.spec === 'object') {\n // It's the new structure { spec, prefixTrace?, suffixTrace? }\n spec = extractorResult.spec;\n prefixTrace = extractorResult.prefixTrace;\n suffixTrace = extractorResult.suffixTrace;\n } else {\n // It's just PObjectSpec\n spec = extractorResult as PObjectSpec;\n }\n\n const label = readAnnotation(spec, Annotation.Label);\n const traceStr = readAnnotation(spec, Annotation.Trace);\n const baseTrace = (traceStr ? Trace.safeParse(parseJson(traceStr)).data : undefined) ?? [];\n\n const trace = [\n ...(prefixTrace ?? []),\n ...baseTrace,\n ...(suffixTrace ?? []),\n ];\n\n if (label !== undefined) {\n const labelEntry = { label, type: LabelType, importance: -2 };\n if (ops.addLabelAsSuffix) trace.push(labelEntry);\n else trace.splice(0, 0, labelEntry);\n }\n\n const fullTrace: FullTrace = [];\n\n const occurrences = new Map<string, number>();\n for (let i = trace.length - 1; i >= 0; --i) {\n const { type: typeName } = trace[i];\n const importance = trace[i].importance ?? 0;\n const occurrenceIndex = (occurrences.get(typeName) ?? 0) + 1;\n occurrences.set(typeName, occurrenceIndex);\n const fullType = `${typeName}@${occurrenceIndex}`;\n numberOfRecordsWithType.set(fullType, (numberOfRecordsWithType.get(fullType) ?? 0) + 1);\n importances.set(\n fullType,\n Math.max(\n importances.get(fullType) ?? Number.NEGATIVE_INFINITY,\n importance - (trace.length - i) * DistancePenalty,\n ),\n );\n fullTrace.push({ ...trace[i], fullType, occurrenceIndex: occurrenceIndex });\n }\n fullTrace.reverse();\n return {\n value,\n spec,\n label,\n fullTrace,\n };\n });\n\n // excluding repeated types (i.e. ..@2, ..@3, etc.) not found in some records\n const mainTypes: string[] = [];\n // repeated types (i.e. ..@2, ..@3, etc.) not found in some records\n const secondaryTypes: string[] = [];\n\n const allTypeRecords = [...importances];\n // sorting: most important types go first\n allTypeRecords.sort(([, i1], [, i2]) => i2 - i1);\n\n for (const [typeName] of allTypeRecords) {\n if (typeName.endsWith('@1') || numberOfRecordsWithType.get(typeName) === values.length)\n mainTypes.push(typeName);\n else secondaryTypes.push(typeName);\n }\n\n const calculate = (includedTypes: Set<string>, force: boolean = false) => {\n const result: RecordsWithLabel<T>[] = [];\n for (let i = 0; i < enrichedRecords.length; i++) {\n const r = enrichedRecords[i];\n const includedTrace = r.fullTrace\n .filter((fm) => includedTypes.has(fm.fullType)\n || (forceTraceElements && forceTraceElements.has(fm.type)));\n if (includedTrace.length === 0) {\n if (force)\n result.push({\n label: 'Unlabeled',\n value: r.value,\n } satisfies RecordsWithLabel<T>);\n else return undefined;\n }\n const labelSet = includedTrace\n .map((fm) => fm.label);\n const sep = ops.separator ?? ' / ';\n result.push({\n label: labelSet.join(sep),\n value: r.value,\n } satisfies RecordsWithLabel<T>);\n }\n return result;\n };\n\n if (mainTypes.length === 0) {\n if (secondaryTypes.length !== 0) throw new Error('Non-empty secondary types list while main types list is empty.');\n return calculate(new Set(LabelTypeFull), true)!;\n }\n\n //\n // includedTypes = 2\n // * *\n // T0 T1 T2 T3 T4 T5\n // *\n // additionalType = 3\n //\n // Resulting set: T0, T1, T3\n //\n let includedTypes = 0;\n let additionalType = -1;\n while (includedTypes < mainTypes.length) {\n const currentSet = new Set<string>();\n if (ops.includeNativeLabel) currentSet.add(LabelTypeFull);\n for (let i = 0; i < includedTypes; ++i) currentSet.add(mainTypes[i]);\n if (additionalType >= 0)\n currentSet.add(mainTypes[additionalType]);\n\n const candidateResult = calculate(currentSet);\n\n // checking if labels uniquely separate our records\n if (candidateResult !== undefined && new Set(candidateResult.map((c) => c.label)).size === values.length) return candidateResult;\n\n additionalType++;\n if (additionalType >= mainTypes.length) {\n includedTypes++;\n additionalType = includedTypes;\n }\n }\n\n return calculate(new Set([...mainTypes, ...secondaryTypes]), true)!;\n}\n"],"names":["TraceEntry","z","Trace","DistancePenalty","LabelType","LabelTypeFull","deriveLabels","values","specExtractor","ops","importances","forceTraceElements","numberOfRecordsWithType","enrichedRecords","value","extractorResult","spec","prefixTrace","suffixTrace","label","readAnnotation","Annotation","traceStr","baseTrace","parseJson","trace","labelEntry","fullTrace","occurrences","i","typeName","importance","occurrenceIndex","fullType","mainTypes","secondaryTypes","allTypeRecords","i1","i2","calculate","includedTypes","force","result","r","includedTrace","fm","labelSet","sep","additionalType","currentSet","candidateResult","c"],"mappings":";;;;;;;AAmBO,MAAMA,IAAaC,EAAE,OAAO;AAAA,EACjC,MAAMA,EAAE,OAAA;AAAA,EACR,YAAYA,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,IAAIA,EAAE,OAAA,EAAS,SAAA;AAAA,EACf,OAAOA,EAAE,OAAA;AACV,CAAA,GAIYC,IAAQD,EAAE,MAAMD,CAAU,GAWjCG,IAAkB,MAElBC,IAAY,aACZC,IAAgB;AAEhB,SAAUC,EACdC,GACAC,GACAC,IAA0B,CAAA,GAAE;AAE5B,QAAMC,IAAc,oBAAI,IAAA,GAElBC,IAAsBF,EAAI,uBAAuB,UAAaA,EAAI,mBAAmB,SAAS,IAChG,IAAI,IAAIA,EAAI,kBAAkB,IAC9B,QAGEG,IAA0B,oBAAI,IAAA,GAE9BC,IAAkBN,EAAO,IAAI,CAACO,MAAS;AAC3C,UAAMC,IAAkBP,EAAcM,CAAK;AAC3C,QAAIE,GACAC,GACAC;AAGA,cAAUH,KAAmB,OAAOA,EAAgB,QAAS,YAE/DC,IAAOD,EAAgB,MACvBE,IAAcF,EAAgB,aAC9BG,IAAcH,EAAgB,eAG9BC,IAAOD;AAGT,UAAMI,IAAQC,EAAeJ,GAAMK,EAAW,KAAK,GAC7CC,IAAWF,EAAeJ,GAAMK,EAAW,KAAK,GAChDE,KAAaD,IAAWpB,EAAM,UAAUsB,EAAUF,CAAQ,CAAC,EAAE,OAAO,WAAc,CAAA,GAElFG,IAAQ;AAAA,MACZ,GAAIR,KAAe,CAAA;AAAA,MACnB,GAAGM;AAAAA,MACH,GAAIL,KAAe,CAAA;AAAA,IAAA;AAGrB,QAAIC,MAAU,QAAW;AACvB,YAAMO,IAAa,EAAE,OAAAP,GAAO,MAAMf,GAAW,YAAY,GAAA;AACrDK,MAAAA,EAAI,mBAAkBgB,EAAM,KAAKC,CAAU,IAC1CD,EAAM,OAAO,GAAG,GAAGC,CAAU;AAAA,IACpC;AAEA,UAAMC,IAAuB,CAAA,GAEvBC,wBAAkB,IAAA;AACxB,aAASC,IAAIJ,EAAM,SAAS,GAAGI,KAAK,GAAG,EAAEA,GAAG;AAC1C,YAAM,EAAE,MAAMC,EAAAA,IAAaL,EAAMI,CAAC,GAC5BE,IAAaN,EAAMI,CAAC,EAAE,cAAc,GACpCG,KAAmBJ,EAAY,IAAIE,CAAQ,KAAK,KAAK;AAC3DF,MAAAA,EAAY,IAAIE,GAAUE,CAAe;AACzC,YAAMC,IAAW,GAAGH,CAAQ,IAAIE,CAAe;AAC/CpB,MAAAA,EAAwB,IAAIqB,IAAWrB,EAAwB,IAAIqB,CAAQ,KAAK,KAAK,CAAC,GACtFvB,EAAY,IACVuB,GACA,KAAK,IACHvB,EAAY,IAAIuB,CAAQ,KAAK,OAAO,mBACpCF,KAAcN,EAAM,SAASI,KAAK1B,CAAe,CAClD,GAEHwB,EAAU,KAAK,EAAE,GAAGF,EAAMI,CAAC,GAAG,UAAAI,GAAU,iBAAiBD,GAAiB;AAAA,IAC5E;AACA,WAAAL,EAAU,WACH;AAAA,MACL,OAAAb;AAAAA,MACA,MAAAE;AAAAA,MACA,OAAAG;AAAAA,MACA,WAAAQ;AAAAA,IAAA;AAAA,EAEJ,CAAC,GAGKO,IAAsB,IAEtBC,IAA2B,CAAA,GAE3BC,IAAiB,CAAC,GAAG1B,CAAW;AAEtC0B,EAAAA,EAAe,KAAK,CAAC,GAAGC,CAAE,GAAG,CAAA,EAAGC,CAAE,MAAMA,IAAKD,CAAE;AAE/C,aAAW,CAACP,CAAQ,KAAKM;AACnBN,MAAS,SAAS,IAAI,KAAKlB,EAAwB,IAAIkB,CAAQ,MAAMvB,EAAO,SAC9E2B,EAAU,KAAKJ,CAAQ,IACpBK,EAAe,KAAKL,CAAQ;AAGnC,QAAMS,IAAY,CAACC,GAA4BC,IAAiB,OAAS;AACvE,UAAMC,IAAgC,CAAA;AACtC,aAASb,IAAI,GAAGA,IAAIhB,EAAgB,QAAQgB,KAAK;AAC/C,YAAMc,IAAI9B,EAAgBgB,CAAC,GACrBe,IAAgBD,EAAE,UACrB,OAAO,CAACE,MAAOL,EAAc,IAAIK,EAAG,QAAQ,KACvClC,KAAsBA,EAAmB,IAAIkC,EAAG,IAAI,CAAE;AAC9D,UAAID,EAAc,WAAW;AAC3B,YAAIH;AACFC,YAAO,KAAK;AAAA,YACV,OAAO;AAAA,YACP,OAAOC,EAAE;AAAA,UAAA,CACoB;AAAA;AAC5B;AAEP,YAAMG,IAAWF,EACd,IAAI,CAACC,MAAOA,EAAG,KAAK,GACjBE,IAAMtC,EAAI,aAAa;AAC7BiC,QAAO,KAAK;AAAA,QACV,OAAOI,EAAS,KAAKC,CAAG;AAAA,QACxB,OAAOJ,EAAE;AAAA,MAAA,CACoB;AAAA,IACjC;AACA,WAAOD;AAAAA,EACR;AAED,MAAIR,EAAU,WAAW,GAAG;AAC1B,QAAIC,EAAe,WAAW;AAAG,YAAM,IAAI,MAAM,gEAAgE;AACjH,WAAOI,EAAU,IAAI,IAAIlC,CAAa,GAAG,EAAI;AAAA,EAC/C;AAWA,MAAImC,IAAgB,GAChBQ,IAAiB;AACrB,SAAOR,IAAgBN,EAAU,UAAQ;AACvC,UAAMe,wBAAiB,IAAA;AACnBxC,IAAAA,EAAI,sBAAoBwC,EAAW,IAAI5C,CAAa;AACxD,aAASwB,IAAI,GAAGA,IAAIW,GAAe,EAAEX;AAAGoB,QAAW,IAAIf,EAAUL,CAAC,CAAC;AAC/DmB,SAAkB,KACpBC,EAAW,IAAIf,EAAUc,CAAc,CAAC;AAE1C,UAAME,IAAkBX,EAAUU,CAAU;AAG5C,QAAIC,MAAoB,UAAa,IAAI,IAAIA,EAAgB,IAAI,CAACC,MAAMA,EAAE,KAAK,CAAC,EAAE,SAAS5C,EAAO;AAAQ,aAAO2C;AAEjHF,SACIA,KAAkBd,EAAU,WAC9BM,KACAQ,IAAiBR;AAAAA,EAErB;AAEA,SAAOD,EAAU,oBAAI,IAAI,CAAC,GAAGL,GAAW,GAAGC,CAAc,CAAC,GAAG,EAAI;AACnE;","x_google_ignoreList":[0]}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { AxisId as
|
|
1
|
+
import { AxisId as v, isColumnId as w, ColumnId as C } from "../spec.js";
|
|
2
2
|
import S from "../_virtual/lodash.js";
|
|
3
|
-
import
|
|
3
|
+
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
|
|
4
|
+
import { pTableValue as F } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js";
|
|
5
|
+
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
|
|
6
|
+
import "../_virtual/canonicalize.js";
|
|
7
|
+
import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
|
|
8
|
+
import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
|
|
4
9
|
var b = Object.defineProperty, P = (y, e, t) => e in y ? b(y, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : y[e] = t, D = (y, e, t) => P(y, typeof e != "symbol" ? e + "" : e, t);
|
|
5
10
|
const I = 1e6;
|
|
6
11
|
function x(y, e) {
|
|
@@ -11,7 +16,7 @@ function x(y, e) {
|
|
|
11
16
|
t[a] = F(e, a, { absent: null, na: null });
|
|
12
17
|
return t;
|
|
13
18
|
}
|
|
14
|
-
class
|
|
19
|
+
class U {
|
|
15
20
|
constructor(e, t) {
|
|
16
21
|
D(this, "pframeHandle"), D(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
|
|
17
22
|
}
|
|
@@ -32,10 +37,10 @@ class V {
|
|
|
32
37
|
},
|
|
33
38
|
filters: t,
|
|
34
39
|
sorting: []
|
|
35
|
-
}),
|
|
40
|
+
}), n = s.filter((i) => i.spec.type === "axis"), o = s.filter((i) => i.spec.type === "column");
|
|
36
41
|
return {
|
|
37
|
-
axesData:
|
|
38
|
-
const c =
|
|
42
|
+
axesData: n.reduce((i, m) => {
|
|
43
|
+
const c = v.fromAxisSpec(m.spec.spec);
|
|
39
44
|
return i[c.toCanonicalString()] = x(c.type, m.data), i;
|
|
40
45
|
}, {}),
|
|
41
46
|
data: o.length ? x(e.type, o[0].data) : []
|
|
@@ -53,20 +58,20 @@ class V {
|
|
|
53
58
|
limit: t
|
|
54
59
|
};
|
|
55
60
|
try {
|
|
56
|
-
const
|
|
61
|
+
const n = Date.now(), o = await this.pframeDriver.getUniqueValues(this.pframeHandle, s);
|
|
57
62
|
let i = !1;
|
|
58
63
|
return o.overflow && (i = !0, console.warn(`More than ${t} values for ${e.name} column`)), {
|
|
59
64
|
values: Array.from(o.values.data).map(String),
|
|
60
65
|
overflow: i
|
|
61
66
|
};
|
|
62
|
-
} catch (
|
|
63
|
-
throw console.error("PFrame: getUniqueValues for column error"),
|
|
67
|
+
} catch (n) {
|
|
68
|
+
throw console.error("PFrame: getUniqueValues for column error"), n;
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
async getAxisUniqueValues(e, t, a = I, s = []) {
|
|
67
|
-
const
|
|
72
|
+
const n = t.filter(w), o = await Promise.all(n.map((c) => this.getColumnSpecById(c))), i = e.toCanonicalString(), m = n.filter((c, l) => {
|
|
68
73
|
const p = o[l];
|
|
69
|
-
return p !== null && p.axesSpec.some((u) =>
|
|
74
|
+
return p !== null && p.axesSpec.some((u) => v.fromAxisSpec(u).toCanonicalString() === i);
|
|
70
75
|
});
|
|
71
76
|
if (m.length === 0)
|
|
72
77
|
return { values: [], overflow: !1 };
|
|
@@ -94,19 +99,19 @@ class V {
|
|
|
94
99
|
return console.error("PFrame: getUniqueValues for axis error", c), { values: [], overflow: !1 };
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
|
-
async getTableOuterJoin(e, t, a = [], s = !0,
|
|
98
|
-
const i = e.filter(
|
|
102
|
+
async getTableOuterJoin(e, t, a = [], s = !0, n = [], o = []) {
|
|
103
|
+
const i = e.filter(w), m = t.filter(w), c = {
|
|
99
104
|
src: {
|
|
100
105
|
type: "outer",
|
|
101
106
|
primary: {
|
|
102
107
|
type: s ? "inner" : "full",
|
|
103
108
|
entries: i.map((l, p) => {
|
|
104
109
|
var u;
|
|
105
|
-
const f = (u =
|
|
110
|
+
const f = (u = n[p]) == null ? void 0 : u.map((r) => ({
|
|
106
111
|
type: "constant",
|
|
107
|
-
axisIndex:
|
|
108
|
-
constant:
|
|
109
|
-
})).filter((
|
|
112
|
+
axisIndex: r.idx,
|
|
113
|
+
constant: r.value
|
|
114
|
+
})).filter((r) => r.constant !== void 0);
|
|
110
115
|
return f != null && f.length ? {
|
|
111
116
|
type: "slicedColumn",
|
|
112
117
|
newId: l.name,
|
|
@@ -120,11 +125,11 @@ class V {
|
|
|
120
125
|
},
|
|
121
126
|
secondary: m.map((l, p) => {
|
|
122
127
|
var u;
|
|
123
|
-
const f = (u = o[p]) == null ? void 0 : u.map((
|
|
128
|
+
const f = (u = o[p]) == null ? void 0 : u.map((r) => ({
|
|
124
129
|
type: "constant",
|
|
125
|
-
axisIndex:
|
|
126
|
-
constant:
|
|
127
|
-
})).filter((
|
|
130
|
+
axisIndex: r.idx,
|
|
131
|
+
constant: r.value
|
|
132
|
+
})).filter((r) => r.constant !== void 0);
|
|
128
133
|
return f != null && f.length ? {
|
|
129
134
|
type: "slicedColumn",
|
|
130
135
|
newId: l.name,
|
|
@@ -140,29 +145,29 @@ class V {
|
|
|
140
145
|
sorting: []
|
|
141
146
|
};
|
|
142
147
|
try {
|
|
143
|
-
const l = Date.now(), p = await this.pframeDriver.calculateTableData(this.pframeHandle, c), u = p.filter((
|
|
148
|
+
const l = Date.now(), p = await this.pframeDriver.calculateTableData(this.pframeHandle, c), u = p.filter((r) => r.spec.type === "axis"), f = p.filter((r) => r.spec.type === "column");
|
|
144
149
|
return {
|
|
145
|
-
axesData: u.reduce((
|
|
146
|
-
const h =
|
|
147
|
-
return
|
|
150
|
+
axesData: u.reduce((r, d) => {
|
|
151
|
+
const h = v.fromAxisSpec(d.spec.spec);
|
|
152
|
+
return r[h.toCanonicalString()] = x(h.type, d.data), r;
|
|
148
153
|
}, {}),
|
|
149
|
-
columnsData: f.reduce((
|
|
154
|
+
columnsData: f.reduce((r, d) => {
|
|
150
155
|
const h = d.spec.spec, g = new C({
|
|
151
156
|
name: d.spec.id,
|
|
152
157
|
type: h.valueType
|
|
153
158
|
});
|
|
154
|
-
return
|
|
159
|
+
return r[g.toCanonicalString()] = x(g.type, d.data), r;
|
|
155
160
|
}, {}),
|
|
156
|
-
columnSpecs: f.reduce((
|
|
161
|
+
columnSpecs: f.reduce((r, d) => {
|
|
157
162
|
const h = d.spec.spec, g = new C({
|
|
158
163
|
name: d.spec.id,
|
|
159
164
|
type: h.valueType
|
|
160
165
|
});
|
|
161
|
-
return
|
|
166
|
+
return r[g.toCanonicalString()] = h, r;
|
|
162
167
|
}, {}),
|
|
163
|
-
axesSpecs: u.reduce((
|
|
164
|
-
const h = d.spec.spec, g =
|
|
165
|
-
return
|
|
168
|
+
axesSpecs: u.reduce((r, d) => {
|
|
169
|
+
const h = d.spec.spec, g = v.fromAxisSpec(h);
|
|
170
|
+
return r[g.toCanonicalString()] = h, r;
|
|
166
171
|
}, {})
|
|
167
172
|
};
|
|
168
173
|
} catch (l) {
|
|
@@ -179,28 +184,28 @@ class V {
|
|
|
179
184
|
}
|
|
180
185
|
async getColumnAxesIds(e) {
|
|
181
186
|
var t;
|
|
182
|
-
return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) =>
|
|
187
|
+
return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) => v.fromAxisSpec(a))) ?? [];
|
|
183
188
|
}
|
|
184
189
|
async getRequestColumnsFromSelectedSources(e) {
|
|
185
190
|
var t;
|
|
186
191
|
const a = [];
|
|
187
192
|
for (const s of e)
|
|
188
|
-
if (
|
|
189
|
-
const
|
|
190
|
-
a.push(...
|
|
193
|
+
if (w(s)) {
|
|
194
|
+
const n = ((t = await this.getColumnSpecById(s)) == null ? void 0 : t.axesSpec) ?? [];
|
|
195
|
+
a.push(...n.map((o) => v.fromAxisSpec(o).toPFrameId()));
|
|
191
196
|
}
|
|
192
197
|
return a;
|
|
193
198
|
}
|
|
194
199
|
async getColumnsList() {
|
|
195
200
|
return this.pframeDriver.listColumns(this.pframeHandle);
|
|
196
201
|
}
|
|
197
|
-
async getColumnsFull(e, t, a, s,
|
|
202
|
+
async getColumnsFull(e, t, a, s, n) {
|
|
198
203
|
try {
|
|
199
204
|
const o = {
|
|
200
205
|
columnFilter: {
|
|
201
206
|
type: a,
|
|
202
207
|
name: s,
|
|
203
|
-
annotationValue:
|
|
208
|
+
annotationValue: n
|
|
204
209
|
},
|
|
205
210
|
compatibleWith: await this.getRequestColumnsFromSelectedSources(e),
|
|
206
211
|
strictlyCompatible: t
|
|
@@ -213,8 +218,8 @@ class V {
|
|
|
213
218
|
throw console.error("PFrame: findColumns error"), o;
|
|
214
219
|
}
|
|
215
220
|
}
|
|
216
|
-
async getColumns(e, t, a, s,
|
|
217
|
-
return (await this.getColumnsFull(e, t, a, s,
|
|
221
|
+
async getColumns(e, t, a, s, n) {
|
|
222
|
+
return (await this.getColumnsFull(e, t, a, s, n)).map(
|
|
218
223
|
(o) => new C({
|
|
219
224
|
name: o.columnId,
|
|
220
225
|
type: o.spec.valueType
|
|
@@ -223,7 +228,7 @@ class V {
|
|
|
223
228
|
}
|
|
224
229
|
async findColumnBy(e, t, a, s) {
|
|
225
230
|
try {
|
|
226
|
-
const
|
|
231
|
+
const n = {
|
|
227
232
|
columnFilter: {
|
|
228
233
|
name: [e],
|
|
229
234
|
...t ? { type: [t] } : {},
|
|
@@ -232,16 +237,16 @@ class V {
|
|
|
232
237
|
},
|
|
233
238
|
compatibleWith: [],
|
|
234
239
|
strictlyCompatible: !1
|
|
235
|
-
}, o = Date.now(), i = await this.pframeDriver.findColumns(this.pframeHandle,
|
|
240
|
+
}, o = Date.now(), i = await this.pframeDriver.findColumns(this.pframeHandle, n), m = [];
|
|
236
241
|
return i.hits.forEach(({ columnId: c, spec: l }) => {
|
|
237
242
|
m.push(new C({ name: c, type: l.valueType }));
|
|
238
243
|
}), m.length > 1 && console.warn(`More than 1 column found for ${e}}`), m.length === 0 ? (console.warn(`No columns found for ${e}}`), null) : m[0];
|
|
239
|
-
} catch (
|
|
240
|
-
throw console.error("PFrame: findColumns error"),
|
|
244
|
+
} catch (n) {
|
|
245
|
+
throw console.error("PFrame: findColumns error"), n;
|
|
241
246
|
}
|
|
242
247
|
}
|
|
243
248
|
}
|
|
244
249
|
export {
|
|
245
|
-
|
|
250
|
+
U as ColumnsProvider
|
|
246
251
|
};
|
|
247
252
|
//# sourceMappingURL=ColumnsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnsProvider.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/pframe/ColumnsProvider.ts"],"sourcesContent":["import {AxisId, ColumnId, isColumnId} from '../spec';\nimport type {PValue} from '../store';\nimport lodash from 'lodash';\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n FindColumnsRequest,\n FindColumnsResponse,\n PColumnSpec,\n AxisId as PFrameAxisId,\n PFrameDriver,\n PFrameHandle,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n PTableVector,\n UniqueValuesRequest,\n ValueType,\n FullPTableColumnData,\n PColumnIdAndSpec,\n} from '@milaboratories/pl-model-common';\nimport {pTableValue} from '@milaboratories/pl-model-common';\n\nexport type TableOuterJoinResult = {\n axesData: Record<string, PValue[]>;\n columnsData: Record<string, PValue[]>;\n columnSpecs: Record<string, PColumnSpec>;\n axesSpecs: Record<string, AxisSpec>;\n}\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\nfunction convertColumnData(type: ValueType, response: PTableVector): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res:PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, {absent: null, na: null}) as PValue;\n }\n return res;\n}\n\nconst debug = false;\nconst LONG_REQUEST = 100;\n\nif (debug) {\n console.log('debug!');\n}\n\nexport class ColumnsProvider {\n pframeHandle: PFrameHandle;\n pframeDriver: PFrameDriver;\n\n constructor(pframeHandle: PFrameHandle, pframeDriver: PFrameDriver) {\n this.pframeHandle = pframeHandle;\n this.pframeDriver = pframeDriver;\n }\n\n async isColumnExisted(id: ColumnId) {\n const spec = await this.getColumnSpecById(id);\n return spec ? true : false;\n }\n\n async getSingleColumnData(id: ColumnId, filters: PTableRecordSingleValueFilterV2[] = []) {\n if (!(await this.isColumnExisted(id))) {\n return {\n axesData: {},\n data: [],\n };\n }\n try {\n const start = Date.now();\n const response: FullPTableColumnData[] = await this.pframeDriver.calculateTableData(this.pframeHandle, {\n src: {\n type: 'column',\n column: id.name as PObjectId,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getSingleColumnData', time);\n }\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(id.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n }\n\n async getColumnUniqueValues(\n id: ColumnId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n if (!(await this.isColumnExisted(id))) {\n return {values: [], overflow: false};\n }\n const request: UniqueValuesRequest = {\n columnId: id.name as PObjectId,\n filters,\n limit,\n };\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getUniqueValues(this.pframeHandle, request);\n let overflow = false;\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${id.name} column`);\n }\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST)\n console.log('getColumnUniqueValues', time, id.type, `${response.values.data.length} items`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n }\n\n async getAxisUniqueValues(\n axisId: AxisId,\n parents: ColumnId[],\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n const columnParents = parents.filter(isColumnId);\n\n const specs: (PColumnSpec | null)[] = await Promise.all(columnParents.map(c => this.getColumnSpecById(c)));\n const axisIdStr = axisId.toCanonicalString();\n // realParents - parent columns that has axisId in its spec\n const realParents = columnParents.filter((c, idx) => {\n const columnSpec = specs[idx];\n return (\n columnSpec !== null &&\n columnSpec.axesSpec.some(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString() === axisIdStr)\n );\n });\n if (realParents.length === 0) {\n return {values: [], overflow: false};\n }\n try {\n const start = Date.now();\n const responses = await Promise.all(\n realParents.map(p =>\n this.pframeDriver.getUniqueValues(this.pframeHandle, {\n columnId: p.name as PObjectId,\n axis: axisId.toPFrameId(),\n filters,\n limit,\n })\n )\n );\n let overflow = false;\n responses.forEach((response, idx) => {\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${realParents[idx].name} column`);\n }\n })\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getAxisUniqueValues', time);\n }\n return {\n values: lodash.uniq(\n lodash.flatten(responses.map(r => {\n return Array.from(r.values.data as ArrayLike<unknown>).map(String);\n })) as string[]\n ),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return {values: [], overflow: false};\n }\n }\n\n async getTableOuterJoin(\n primaryIds: (ColumnId | AxisId)[],\n secondaryIds: (ColumnId | AxisId)[],\n filters: PTableRecordSingleValueFilterV2[] = [],\n primaryInnerJoin = true,\n primarySourcesFixedAxes:{idx:number, value:PValue}[][] = [],\n secondarySourcesFixedAxes:{idx:number, value:PValue}[][] = []\n ): Promise<TableOuterJoinResult> {\n const primaryColumns = primaryIds.filter(isColumnId);\n const secondaryColumns = secondaryIds.filter(isColumnId);\n const request = {\n src: {\n type: 'outer',\n primary: {\n type: primaryInnerJoin ? 'inner' : 'full',\n entries: primaryColumns.map((item, idx) => {\n const axisFilters = primarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\n })\n },\n secondary: secondaryColumns.map((item, idx) => {\n const axisFilters = secondarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\n }),\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>;\n try {\n const start = Date.now();\n const response = await this.pframeDriver.calculateTableData(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getTableOuterJoin', time);\n }\n\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n if (debug) {\n console.log('getTableOuterJoin', `${response[0].data.data.length} items`);\n }\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnsData: columns.reduce((res: Record<string, PValue[]>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnSpecs: columns.reduce((res: Record<string, PColumnSpec>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n axesSpecs: axes.reduce((res: Record<string, AxisSpec>, item) => {\n const spec = item.spec.spec as AxisSpec;\n const id = AxisId.fromAxisSpec(spec);\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n };\n } catch (err) {\n console.error('PFrame: table outer join error');\n console.info('error with request: ', request);\n throw err;\n }\n }\n\n async getColumnSpecById(id: ColumnId): Promise<PColumnSpec | null> {\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getColumnSpec(this.pframeHandle, id.name as PObjectId);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnSpecById', time, response);\n }\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error');\n return null;\n }\n }\n\n async getColumnAxesIds(id: ColumnId): Promise<AxisId[]> {\n return (await this.getColumnSpecById(id))?.axesSpec.map(axisSpec => AxisId.fromAxisSpec(axisSpec)) ?? [];\n }\n\n async getRequestColumnsFromSelectedSources(sources: (ColumnId | AxisId)[]): Promise<PFrameAxisId[]> {\n const result: PFrameAxisId[] = [];\n //NB: we don't need to add axes in request because axes are already in columns\n for (const item of sources) {\n if (isColumnId(item)) {\n const axesSpec = (await this.getColumnSpecById(item))?.axesSpec ?? [];\n result.push(...axesSpec.map(spec => AxisId.fromAxisSpec(spec).toPFrameId()));\n }\n }\n return result;\n }\n\n async getColumnsList() {\n return this.pframeDriver.listColumns(this.pframeHandle);\n }\n\n async getColumnsFull(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<PColumnIdAndSpec[]> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n },\n compatibleWith: await this.getRequestColumnsFromSelectedSources(selectedSources),\n strictlyCompatible, // should be true if we want to get meta and false if X/Y\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnsFull', time);\n }\n const result: PColumnIdAndSpec[] = [];\n response.hits.forEach(item => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(item);\n });\n return result;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n\n async getColumns(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<ColumnId[]> {\n return (await this.getColumnsFull(selectedSources, strictlyCompatible, types, names, annotations)).map(\n item =>\n new ColumnId({\n name: item.columnId,\n type: item.spec.valueType,\n })\n );\n }\n\n async findColumnBy(\n name: string,\n type?: ValueType,\n annotationValue?: FindColumnsRequest['columnFilter']['annotationValue'],\n domainValue?: FindColumnsRequest['columnFilter']['domainValue']\n ): Promise<ColumnId | null> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n name: [name],\n ...(type ? {type: [type]} : {}),\n ...(annotationValue ? {annotationValue} : {}),\n ...(domainValue ? {domainValue} : {}),\n },\n compatibleWith: [] as AxisId[],\n strictlyCompatible: false,\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('findColumnBy', time);\n }\n const result: ColumnId[] = [];\n response.hits.forEach(({columnId, spec}) => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(new ColumnId({name: columnId, type: spec.valueType}));\n });\n if (result.length > 1) {\n console.warn(`More than 1 column found for ${name}}`);\n }\n if (result.length === 0) {\n console.warn(`No columns found for ${name}}`);\n return null;\n }\n return result[0];\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n}\n"],"names":["UNIQUE_VALUES_LIMIT","convertColumnData","type","response","res","i","pTableValue","ColumnsProvider","pframeHandle","pframeDriver","__publicField","id","filters","start","axes","u","item","columns","AxisId","err","limit","request","overflow","axisId","parents","columnParents","isColumnId","specs","c","axisIdStr","realParents","idx","columnSpec","axisSpec","responses","p","lodash","r","primaryIds","secondaryIds","primaryInnerJoin","primarySourcesFixedAxes","secondarySourcesFixedAxes","primaryColumns","secondaryColumns","axisFilters","_a","v","spec","ColumnId","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","name","annotationValue","domainValue","columnId"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ColumnsProvider.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/pframe/ColumnsProvider.ts"],"sourcesContent":["import {AxisId, ColumnId, isColumnId} from '../spec';\nimport type {PValue} from '../store';\nimport lodash from 'lodash';\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n FindColumnsRequest,\n FindColumnsResponse,\n PColumnSpec,\n AxisId as PFrameAxisId,\n PFrameDriver,\n PFrameHandle,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n PTableVector,\n UniqueValuesRequest,\n ValueType,\n FullPTableColumnData,\n PColumnIdAndSpec,\n} from '@milaboratories/pl-model-common';\nimport {pTableValue} from '@milaboratories/pl-model-common';\n\nexport type TableOuterJoinResult = {\n axesData: Record<string, PValue[]>;\n columnsData: Record<string, PValue[]>;\n columnSpecs: Record<string, PColumnSpec>;\n axesSpecs: Record<string, AxisSpec>;\n}\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\nfunction convertColumnData(type: ValueType, response: PTableVector): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res:PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, {absent: null, na: null}) as PValue;\n }\n return res;\n}\n\nconst debug = false;\nconst LONG_REQUEST = 100;\n\nif (debug) {\n console.log('debug!');\n}\n\nexport class ColumnsProvider {\n pframeHandle: PFrameHandle;\n pframeDriver: PFrameDriver;\n\n constructor(pframeHandle: PFrameHandle, pframeDriver: PFrameDriver) {\n this.pframeHandle = pframeHandle;\n this.pframeDriver = pframeDriver;\n }\n\n async isColumnExisted(id: ColumnId) {\n const spec = await this.getColumnSpecById(id);\n return spec ? true : false;\n }\n\n async getSingleColumnData(id: ColumnId, filters: PTableRecordSingleValueFilterV2[] = []) {\n if (!(await this.isColumnExisted(id))) {\n return {\n axesData: {},\n data: [],\n };\n }\n try {\n const start = Date.now();\n const response: FullPTableColumnData[] = await this.pframeDriver.calculateTableData(this.pframeHandle, {\n src: {\n type: 'column',\n column: id.name as PObjectId,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getSingleColumnData', time);\n }\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(id.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n }\n\n async getColumnUniqueValues(\n id: ColumnId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n if (!(await this.isColumnExisted(id))) {\n return {values: [], overflow: false};\n }\n const request: UniqueValuesRequest = {\n columnId: id.name as PObjectId,\n filters,\n limit,\n };\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getUniqueValues(this.pframeHandle, request);\n let overflow = false;\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${id.name} column`);\n }\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST)\n console.log('getColumnUniqueValues', time, id.type, `${response.values.data.length} items`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n }\n\n async getAxisUniqueValues(\n axisId: AxisId,\n parents: ColumnId[],\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n const columnParents = parents.filter(isColumnId);\n\n const specs: (PColumnSpec | null)[] = await Promise.all(columnParents.map(c => this.getColumnSpecById(c)));\n const axisIdStr = axisId.toCanonicalString();\n // realParents - parent columns that has axisId in its spec\n const realParents = columnParents.filter((c, idx) => {\n const columnSpec = specs[idx];\n return (\n columnSpec !== null &&\n columnSpec.axesSpec.some(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString() === axisIdStr)\n );\n });\n if (realParents.length === 0) {\n return {values: [], overflow: false};\n }\n try {\n const start = Date.now();\n const responses = await Promise.all(\n realParents.map(p =>\n this.pframeDriver.getUniqueValues(this.pframeHandle, {\n columnId: p.name as PObjectId,\n axis: axisId.toPFrameId(),\n filters,\n limit,\n })\n )\n );\n let overflow = false;\n responses.forEach((response, idx) => {\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${realParents[idx].name} column`);\n }\n })\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getAxisUniqueValues', time);\n }\n return {\n values: lodash.uniq(\n lodash.flatten(responses.map(r => {\n return Array.from(r.values.data as ArrayLike<unknown>).map(String);\n })) as string[]\n ),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return {values: [], overflow: false};\n }\n }\n\n async getTableOuterJoin(\n primaryIds: (ColumnId | AxisId)[],\n secondaryIds: (ColumnId | AxisId)[],\n filters: PTableRecordSingleValueFilterV2[] = [],\n primaryInnerJoin = true,\n primarySourcesFixedAxes:{idx:number, value:PValue}[][] = [],\n secondarySourcesFixedAxes:{idx:number, value:PValue}[][] = []\n ): Promise<TableOuterJoinResult> {\n const primaryColumns = primaryIds.filter(isColumnId);\n const secondaryColumns = secondaryIds.filter(isColumnId);\n const request = {\n src: {\n type: 'outer',\n primary: {\n type: primaryInnerJoin ? 'inner' : 'full',\n entries: primaryColumns.map((item, idx) => {\n const axisFilters = primarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\n })\n },\n secondary: secondaryColumns.map((item, idx) => {\n const axisFilters = secondarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\n }),\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>;\n try {\n const start = Date.now();\n const response = await this.pframeDriver.calculateTableData(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getTableOuterJoin', time);\n }\n\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n if (debug) {\n console.log('getTableOuterJoin', `${response[0].data.data.length} items`);\n }\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnsData: columns.reduce((res: Record<string, PValue[]>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnSpecs: columns.reduce((res: Record<string, PColumnSpec>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n axesSpecs: axes.reduce((res: Record<string, AxisSpec>, item) => {\n const spec = item.spec.spec as AxisSpec;\n const id = AxisId.fromAxisSpec(spec);\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n };\n } catch (err) {\n console.error('PFrame: table outer join error');\n console.info('error with request: ', request);\n throw err;\n }\n }\n\n async getColumnSpecById(id: ColumnId): Promise<PColumnSpec | null> {\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getColumnSpec(this.pframeHandle, id.name as PObjectId);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnSpecById', time, response);\n }\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error');\n return null;\n }\n }\n\n async getColumnAxesIds(id: ColumnId): Promise<AxisId[]> {\n return (await this.getColumnSpecById(id))?.axesSpec.map(axisSpec => AxisId.fromAxisSpec(axisSpec)) ?? [];\n }\n\n async getRequestColumnsFromSelectedSources(sources: (ColumnId | AxisId)[]): Promise<PFrameAxisId[]> {\n const result: PFrameAxisId[] = [];\n //NB: we don't need to add axes in request because axes are already in columns\n for (const item of sources) {\n if (isColumnId(item)) {\n const axesSpec = (await this.getColumnSpecById(item))?.axesSpec ?? [];\n result.push(...axesSpec.map(spec => AxisId.fromAxisSpec(spec).toPFrameId()));\n }\n }\n return result;\n }\n\n async getColumnsList() {\n return this.pframeDriver.listColumns(this.pframeHandle);\n }\n\n async getColumnsFull(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<PColumnIdAndSpec[]> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n },\n compatibleWith: await this.getRequestColumnsFromSelectedSources(selectedSources),\n strictlyCompatible, // should be true if we want to get meta and false if X/Y\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnsFull', time);\n }\n const result: PColumnIdAndSpec[] = [];\n response.hits.forEach(item => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(item);\n });\n return result;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n\n async getColumns(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<ColumnId[]> {\n return (await this.getColumnsFull(selectedSources, strictlyCompatible, types, names, annotations)).map(\n item =>\n new ColumnId({\n name: item.columnId,\n type: item.spec.valueType,\n })\n );\n }\n\n async findColumnBy(\n name: string,\n type?: ValueType,\n annotationValue?: FindColumnsRequest['columnFilter']['annotationValue'],\n domainValue?: FindColumnsRequest['columnFilter']['domainValue']\n ): Promise<ColumnId | null> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n name: [name],\n ...(type ? {type: [type]} : {}),\n ...(annotationValue ? {annotationValue} : {}),\n ...(domainValue ? {domainValue} : {}),\n },\n compatibleWith: [] as AxisId[],\n strictlyCompatible: false,\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('findColumnBy', time);\n }\n const result: ColumnId[] = [];\n response.hits.forEach(({columnId, spec}) => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(new ColumnId({name: columnId, type: spec.valueType}));\n });\n if (result.length > 1) {\n console.warn(`More than 1 column found for ${name}}`);\n }\n if (result.length === 0) {\n console.warn(`No columns found for ${name}}`);\n return null;\n }\n return result[0];\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n}\n"],"names":["UNIQUE_VALUES_LIMIT","convertColumnData","type","response","res","i","pTableValue","ColumnsProvider","pframeHandle","pframeDriver","__publicField","id","filters","start","axes","u","item","columns","AxisId","err","limit","request","overflow","axisId","parents","columnParents","isColumnId","specs","c","axisIdStr","realParents","idx","columnSpec","axisSpec","responses","p","lodash","r","primaryIds","secondaryIds","primaryInnerJoin","primarySourcesFixedAxes","secondarySourcesFixedAxes","primaryColumns","secondaryColumns","axisFilters","_a","v","n","spec","ColumnId","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","name","annotationValue","domainValue","columnId"],"mappings":"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","x_google_ignoreList":[0]}
|