import type { Die } from '../core/dies.js';
export interface BoxplotDatum {
    label: string;
    min: number;
    q1: number;
    median: number;
    q3: number;
    max: number;
    count: number;
}
export interface BoxplotItem {
    label?: string;
    dies?: Die[];
    /**
     * Precomputed per-test five-number summaries for this item (e.g.
     * `StatsSummary.stats.perTestStats`, or one lot wafer's
     * `LotStatsSummary.perWaferTestStats[i].tests`) — already computed once by
     * `analyzeWaferMap`. When the requested `testNumber` is present here,
     * `buildTestBoxplotData` uses it directly instead of re-scanning `dies`.
     */
    testStats?: Array<{
        testNumber: number;
        min: number;
        q1: number;
        median: number;
        q3: number;
        max: number;
        count: number;
    }>;
}
/**
 * One row per item, for `testNumber`. Items with no valid values for that
 * test get `count: 0`. Excludes `partial`/`edge-excluded` dies via
 * `isYieldEligibleDie` when falling back to a raw scan — the same
 * population every other per-test computation in this package uses, so a
 * boxplot's stats agree with the summary panel's for the same wafer/test.
 */
export declare function buildTestBoxplotData(items: BoxplotItem[], testNumber: number): BoxplotDatum[];
//# sourceMappingURL=boxplot.d.ts.map