/**
 * @typedef SelectedRowsOptions
 * @property {Array<number | Array<number>>} selectedRows - Row indices, for ordering and filtering rows. Used by the HorizontalMultivecTrack.
 * @property {'mean' | 'sum' | 'variance' | 'deviation'} selectedRowsAggregationMode - The aggregation function to use ("mean", "sum", etc).
 * @property {boolean} selectedRowsAggregationWithRelativeHeight - Whether the height of row groups should be relative to the size of the group.
 * @property {'client' | 'server'} selectedRowsAggregationMethod - Where will the aggregation be performed? Possible values: "client", "server".
 */
/**
 * This function takes in tile data and other rendering parameters,
 * and generates an array of pixel data that can be passed to a canvas
 * (and subsequently passed to a PIXI sprite).
 *
 * @param {number} size - `data` parameter length. Often set to a tile's `tile.tileData.dense.length` value.
 * @param {Array<number> | Float32Array} data - The tile data array.
 * @param {'log' | 'linear'} valueScaleType 'log' or 'linear'.
 * @param {[number, number]} valueScaleDomain
 * @param {number} pseudocount - The pseudocount is generally the minimum non-zero value and is
 * used so that our log scaling doesn't lead to NaN values.
 * @param {ReadonlyArray<readonly [r: number, g: number, b: number, a: number]>} colorScale
 * @param {boolean} ignoreUpperRight
 * @param {boolean} ignoreLowerLeft
 * @param {readonly [numRows: number, numCols: number] | null} shape - Array `[numRows, numCols]`, used when iterating over a subset of rows,
 * when one needs to know the width of each column.
 * @param {[r: number, g: number, b: number, a: number] | null} zeroValueColor - The color to use for rendering zero data values, [r, g, b, a].
 * @param {Partial<SelectedRowsOptions> | null} selectedRowsOptions - Rendering options when using a `selectRows` track option.
 *
 * @returns {Uint8ClampedArray} A flattened array of pixel values.
 */
export function workerSetPix(size: number, data: Array<number> | Float32Array, valueScaleType: "log" | "linear", valueScaleDomain: [number, number], pseudocount: number, colorScale: ReadonlyArray<readonly [r: number, g: number, b: number, a: number]>, ignoreUpperRight?: boolean, ignoreLowerLeft?: boolean, shape?: readonly [numRows: number, numCols: number] | null, zeroValueColor?: [r: number, g: number, b: number, a: number] | null, selectedRowsOptions?: Partial<SelectedRowsOptions> | null): Uint8ClampedArray;
/**
 * @typedef TileData<Server>
 * @property {string} server
 * @property {string} tileId
 * @property {number} zoomLevel
 * @property {[number] | [number, number]} tilePos
 * @property {string} tilesetUid
 */
/**
 * @typedef DenseTileData
 * @property {string} server
 * @property {string} tileId
 * @property {number} zoomLevel
 * @property {[number] | [number, number]} tilePos
 * @property {string} tilesetUid
 * @property {Float32Array} dense
 * @property {string} dtype
 * @property {DenseDataExtrema1D | DenseDataExtrema2D} denseDataExtrema
 * @property {number} minNonZero
 * @property {number} maxNonZero
 */
/**
 * @template T
 * @typedef {Omit<T, keyof DenseTileData> & (TileData | DenseTileData)} CompletedTileData
 */
/**
 * @typedef TileResponse
 * @property {string} [dense] - a base64 encoded string
 * @property {string} [tilePositionId] - The position of the tile
 */
/**
 * Convert a response from the tile server to data that can be used by higlass.
 *
 * WARNING: Mutates the data object.
 *
 * @template {TileResponse} T
 * @param {Record<string, T>} inputData
 * @param {string} server
 * @param {ReadonlyArray<string>} theseTileIds
 *
 * @returns {Record<string, CompletedTileData<T>>}
 *
 * Trevor: This function is littered with ts-expect-error comments because
 * the type of mutation happening to the input object is very tricky to type.
 * The type signature of the function tries to adequately describe the mutation,
 * to outside users.
 */
export function tileResponseToData<T extends TileResponse>(inputData: Record<string, T>, server: string, theseTileIds: ReadonlyArray<string>): Record<string, CompletedTileData<T>>;
/**
 * Fetch tiles from the server.
 *
 * @template {TileResponse} T
 *
 * @param {Object} request
 * @param {string} request.server
 * @param {ReadonlyArray<string>} request.tileIds
 * @param {ReadonlyArray<{ tilesetUid: string, tileIds: Array<string>, options?: Record<string, unknown> }>} request.body
 * @param {Object} options
 * @param {string | null} [options.authHeader]
 * @param {import("pub-sub-es").PubSub} [options.pubSub]
 * @param {string} options.sessionId
 */
export function workerFetchTiles<T extends TileResponse>(request: {
    server: string;
    tileIds: ReadonlyArray<string>;
    body: ReadonlyArray<{
        tilesetUid: string;
        tileIds: Array<string>;
        options?: Record<string, unknown>;
    }>;
}, options: {
    authHeader?: string | null | undefined;
    pubSub?: import("pub-sub-es").PubSub | undefined;
    sessionId: string;
}): Promise<void | Record<string, CompletedTileData<TileResponse>>>;
export type SelectedRowsOptions = {
    /**
     * - Row indices, for ordering and filtering rows. Used by the HorizontalMultivecTrack.
     */
    selectedRows: Array<number | Array<number>>;
    /**
     * - The aggregation function to use ("mean", "sum", etc).
     */
    selectedRowsAggregationMode: "mean" | "sum" | "variance" | "deviation";
    /**
     * - Whether the height of row groups should be relative to the size of the group.
     */
    selectedRowsAggregationWithRelativeHeight: boolean;
    /**
     * - Where will the aggregation be performed? Possible values: "client", "server".
     */
    selectedRowsAggregationMethod: "client" | "server";
};
/**
 * <Server>
 */
export type TileData = {
    server: string;
    tileId: string;
    zoomLevel: number;
    tilePos: [number] | [number, number];
    tilesetUid: string;
};
export type DenseTileData = {
    server: string;
    tileId: string;
    zoomLevel: number;
    tilePos: [number] | [number, number];
    tilesetUid: string;
    dense: Float32Array;
    dtype: string;
    denseDataExtrema: DenseDataExtrema1D | DenseDataExtrema2D;
    minNonZero: number;
    maxNonZero: number;
};
export type CompletedTileData<T> = Omit<T, keyof DenseTileData> & (TileData | DenseTileData);
export type TileResponse = {
    /**
     * - a base64 encoded string
     */
    dense?: string | undefined;
    /**
     * - The position of the tile
     */
    tilePositionId?: string | undefined;
};
import DenseDataExtrema1D from '../utils/DenseDataExtrema1D';
import DenseDataExtrema2D from '../utils/DenseDataExtrema2D';
