types/representation.types.ts

types/representation.types.ts is a file in GovLab Patterns. 130 lines of code and 16 definitions.

import type { Significance, Uniformity } from "#types/baseline.types";
import type { AnalysisTag } from "#types/axis.types";
import type { Finding } from "#types/finding.types";
import type { Rng } from "#types/seed.types";

export interface Accumulator<S> {
    update: (chunk: readonly unknown[]) => void;
    result: () => S;
    sample: (rng: Rng) => unknown;
}

export interface RepresentationRuntime {
    update: (chunk: readonly unknown[]) => void;
    findings: () => Finding[];
    sample: (rng: Rng) => unknown;
}

export interface RepresentationDefinition {
    name: string;
    applicable: readonly AnalysisTag[];
    create: (field: string) => RepresentationRuntime;
}

export interface DriftContext {
    indexSum: ReadonlyMap<string, number>;
    total: number;
    limit: number;
}

export interface LiftContext {
    records: number;
    limit: number;
}

export interface NumericBounds {
    low: number;
    high: number;
    total: number;
    weighted: number;
}

export interface OutlierContext {
    mean: number;
    stddev: number;
    limit: number;
}

export interface Temporal {
    first: string;
    last: string;
    byMonth: [number, number][];
}

export interface DistributionSummary {
    field: string;
    count: number;
    distinct: number;
    entropyBits: number;
    top: [string, number][];
    witnesses: [string, number][];
    overdue: [string, number][];
    uniformity: Uniformity;
    hot: [string, number][];
    cold: [string, number][];
    drift: [string, number][];
    temporal: Temporal | null;
    complexity: number;
    modeAccuracy: number;
}

export interface VectorSummary {
    field: string;
    count: number;
    minimum: number;
    maximum: number;
    mean: number;
    stddev: number;
    outliers: [number, number, number][];
    autocorrelation: number;
}

export interface SequenceSummary {
    field: string;
    count: number;
    distinct: number;
    longestRun: number;
    changeRatio: number;
    meanRun: number;
    topTransitions: [[string, string], number][];
    lastValue: string | null;
    nextValue: [string, number][];
    runLengths: [number, number][];
    markovAccuracy: number;
    transitionSignificance: Significance;
}

export interface GridSummary {
    field: string;
    points: number;
    distinctCells: number;
    densestCell: string;
    densestCount: number;
}

export interface TreeSummary {
    field: string;
    records: number;
    maxDepth: number;
    totalNodes: number;
    totalLeaves: number;
    maxBranching: number;
    distinctShapes: number;
    keys: [string, number][];
    paths: [string, number][];
    leafTypes: [string, number][];
}

export interface OrderedStats {
    adjacencyRate: number;
    symmetry: number;
    bands: number[];
}

export interface Composition {
    oddRatio: number;
    highRatio: number;
}

export interface GraphSummary {
    field: string;
    records: number;
    edges: number;
    distinctTargets: number;
    maxDegree: number;
    meanDegree: number;
    topPairs: [string[], number][];
    topMembers: [string, number][];
    memberUniformity: Uniformity;
    topLift: [string[], number][];
    composition: Composition | null;
    positional: [number, string, number][];
    distinctSets: number;
    repeatRate: number;
    ordered: OrderedStats | null;
    slotPatterns: [number, string, string, number][];
}