import type { DiceExpression, DiceReducer } from './dice-expression'; import type { Expression } from './program'; import { Roller } from './roller'; type Distribution = Map; export declare function reduceValues(values: number[], reducer: DiceReducer): number; export interface MonteCarloResult { mean: number; stddev: number; min: number; max: number; distribution: Map; percentile: (p: number) => number; /** Fraction of trials that produced an undefined outcome (currently: * division by zero). The numeric stats above are conditional on the * outcome being defined; `distribution` sums to 1. `0` means every * trial was defined. */ undefinedMass: number; } export interface SummaryResult { min: number; max: number; mean: number; stddev: number; distribution: Map; percentiles: Record; } interface MonteCarloOptions { trials?: number; /** * Roller to sample with. Inject a seeded/deterministic roller for * reproducible results (e.g. in tests); defaults to one backed by * `Math.random`. Mirrors {@link MonteCarloAsyncOptions.roller}. */ roller?: Roller; } export interface MonteCarloAsyncOptions { trials?: number; chunkSize?: number; roller?: Roller; } export interface MonteCarloProgress { completed: number; total: number; result: MonteCarloResult; } export declare const DiceStats: { distribution(expr: Expression | DiceExpression, onStep?: (work: number) => void): Distribution; mean(expr: Expression | DiceExpression): number; stddev(expr: Expression | DiceExpression): number; min(expr: Expression | DiceExpression): number; max(expr: Expression | DiceExpression): number; percentile(expr: Expression | DiceExpression, p: number): number; monteCarlo(expr: Expression | DiceExpression, options?: MonteCarloOptions): MonteCarloResult; monteCarloAsync(expr: Expression | DiceExpression, options?: MonteCarloAsyncOptions): AsyncGenerator; summary(expr: Expression | DiceExpression): SummaryResult; }; export {};