{"version":3,"sources":["../src/lib/format.ts","../src/lib/rng.ts","../src/lib/clone.ts","../src/lib/defaults.ts","../src/lib/config.ts","../src/lib/errors.ts","../src/lib/validation.ts","../src/core/selection.ts","../src/lib/fitness-cache.ts","../src/lib/stats.ts","../src/lib/metrics.ts","../src/core/engine.ts","../src/core/engine-async.ts","../src/lib/estimate.ts","../src/lib/progress.ts","../src/lib/problem.ts","../src/index.ts"],"names":["formatResult","res","_a","_b","_c","_d","lastMean","lastInvalid","validShare","m","fmt","n","mulberry32","seed","s","fn","t","defaultClone","g","sc","defaults_exports","__export","DEFAULT_CONCURRENCY","DEFAULT_CROSSOVER_CHILDREN","DEFAULT_CX_PROB","DEFAULT_ELITE","DEFAULT_GENERATIONS","DEFAULT_IMMIGRATION","DEFAULT_MAX_EVALUATIONS","DEFAULT_MAX_WALL_MS","DEFAULT_MUT_PROB","DEFAULT_POP_SIZE","DEFAULT_STALL","DEFAULT_TARGET_FITNESS","DEFAULT_TOURNAMENT","popSize","normalizeConfigBase","cfg","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","elite","maxWallMs","cxProb","mutProb","GPLiteError","message","code","ConfigError","ProblemError","EvolutionError","validateConfig","sum","validateProblem","problem","tournament","size","pop","rng","best","i","c","FitnessCache","opts","k","f","e","computePopulationStats","finiteSum","finiteCount","invalidCount","mean","buildRunMetrics","counters","generations","crossoverChildren","immigration","stall","targetFitness","maxEvaluations","elitesPerGen","GPLite","base","__spreadProps","__spreadValues","what","v","metrics","initStart","initTimeMs","history","meanHistory","invalidHistory","validShareHistory","bestGenomeHistory","a","b","elapsedMs","w","gen","bestGenome","stopReason","stageMaxMs","onGen","payload","cxChildrenTarget","targetChildren","next","nextStageMax","produced","p1","p2","pa","pb","cxT0","children","cxDt","numToTake","child","evalT0","evalDt","mutChildrenTarget","p","before","mutT0","mutDt","immigrantsPerGen","genome","got","t0","lastStageMax","baseSlots","initialPop","nextStop","slots","test","fitness","result","passed","error","GPLiteAsync","timeExceeded","__async","target","seedGenomes","seedIdx","inFlight","schedule","task","remainingSlots","remainingEvals","canStart","idx","item","scheduleCrossover","maxChildren","out","canStartTasks","remaining","crossoversNeeded","startNow","left","slotsLeft","scheduleMut","head","timeoutMs","parent","timer","controller","onParentAbort","fitnessP","timeoutP","resolve","initResult","exact","min","max","greaterThan","lessThan","estimateRun","expectedGenerations","childrenFromBreedingPerGen","pairsPerGen","selectionsPerGen","init","perGen","plannedTotal","expectedTotal","cappedByMaxEvaluations","perEvalMs","perGenOverheadMs","perRunOverheadMs","timeInit","timePerGen","timePlannedTotal","timeExpectedTotal","cappedByMaxWall","perEvalCost","monetary","estimateFromMetrics","units","evals","timeMs","cost","createProgressTracker","total","firstEndElapsed","prevEndElapsed","sumIntervals","intervals","lastInterval","latest","snapshotFrom","info","dt","observed","fractionByGenerations","avg","initMs","estimatedTotalMs","remainingMs","fractionTime","snap","progressLogger","every","log","wantHeader","headerPrinted","formatNum","createProblem","spec","mutate","crossover","createRandom","isValid","repair","distance","cr","cx","_ctx","run","args","initialPopulation","iterations","createIdx","finalCxProb","finalImmigration","finalMutProb"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { GPResult } from \"../types\"\n\n/**\n * formatResult: Pretty-print summary of a GP run.\n */\nexport function formatResult<T>(res: GPResult<T>): string {\n  const lastMean = res.avgFitnessHistory?.at(-1)\n  const lastInvalid = res.invalidCountHistory?.at(-1)\n  const validShare = res.validShareHistory?.at(-1)\n  const m = res.metrics\n\n  const lines = [\n    `GP Result`,\n    `  bestFitness: ${fmt(res.bestFitness)}`,\n    `  generations: ${res.generations}`,\n    `  stopReason: ${res.stopReason ?? \"generations\"}`,\n    res.elapsedMs !== undefined ? `  elapsedMs: ${res.elapsedMs}` : undefined,\n    m\n      ? `  cfg: pop=${m.config.popSize}, gens=${m.config.generations}, cx=${m.config.cxProb}, mut=${m.config.mutProb}, imm=${m.config.immigration}, tour=${m.config.tournament}, stall=${m.config.stall}`\n      : undefined,\n    lastMean !== undefined ? `  avgFitness(last): ${fmt(lastMean)}` : undefined,\n    lastInvalid !== undefined ? `  invalidCount(last): ${lastInvalid}` : undefined,\n    validShare !== undefined ? `  validShare(last): ${(validShare * 100).toFixed(1)}%` : undefined,\n    m\n      ? `  evaluations: ${m.evaluations} (invalid: ${m.invalidEvaluations}, repaired: ${m.repaired}, repairFailures: ${m.repairFailures})`\n      : undefined,\n    m ? `  fitnessIssues: errors=${m.fitnessErrors}, nonFinite=${m.nonFiniteFitness}` : undefined,\n    m\n      ? `  ops: mutations=${m.mutations}, crossovers=${m.crossovers}, selections=${m.selections}, immigrants=${m.immigrants}, elites/gen=${m.elitesPerGen}`\n      : undefined,\n    m ? `  budgets: wallMs=${m.config.maxWallMs}, evals=${m.config.maxEvaluations}` : undefined,\n  ].filter(Boolean) as string[]\n\n  return lines.join(\"\\n\")\n}\n\nfunction fmt(n: number): string {\n  if (!Number.isFinite(n)) return String(n)\n  return n % 1 === 0 ? String(n) : n.toFixed(4)\n}\n","import type { RNG } from \"../types\"\n\nexport function mulberry32(seed = Date.now()): RNG {\n  let s = seed >>> 0\n  const fn = (): number => {\n    s |= 0\n    s = Math.imul(s + 0x6d2b79f5, 1) | 0\n    let t = Math.imul(s ^ (s >>> 15), 1 | s)\n    t ^= t + Math.imul(t ^ (t >>> 7), 61 | t)\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n  }\n  return {\n    next: fn,\n    // Use Math.floor to avoid 32-bit signed overflow behavior\n    int: (n: number) => Math.floor(n * fn()),\n  }\n}\n","type StructuredCloneGlobal = { structuredClone?: <U>(x: U) => U }\n\n/**\n * Default genome clone function with deep copy support.\n *\n * IMPORTANT: This function requires `structuredClone` (Node >=17, modern browsers)\n * for deep cloning complex objects. Without it, nested structures (arrays within\n * objects, objects within arrays) will NOT be properly cloned, leading to\n * mutation bugs.\n *\n * If `structuredClone` is unavailable and your genomes are complex, provide\n * a custom `clone` function via `GPConfig.clone` to ensure proper immutability.\n *\n * Fallback behavior (when structuredClone unavailable):\n * - Primitives: returned as-is (safe)\n * - Arrays: shallow copy via slice() (UNSAFE for nested structures)\n * - Objects: shallow copy via spread operator (UNSAFE for nested structures)\n *\n * @throws {Error} When structuredClone is unavailable and genome is non-primitive\n */\nexport function defaultClone<T>(g: T): T {\n  // Primitive values are always safe to return as-is\n  if (g === null || g === undefined) return g\n  const isPrimitive =\n    typeof g === \"string\" ||\n    typeof g === \"number\" ||\n    typeof g === \"boolean\" ||\n    typeof g === \"bigint\" ||\n    typeof g === \"symbol\"\n  if (isPrimitive) return g\n\n  // Try to use structuredClone for deep copies\n  try {\n    const sc = (globalThis as unknown as StructuredCloneGlobal).structuredClone\n    if (typeof sc === \"function\") {\n      return sc(g)\n    }\n  } catch {\n    // structuredClone may throw on unclonable values (functions, etc.)\n    // Fall through to manual handling\n  }\n\n  // FAIL-FAST: If structuredClone is unavailable for complex objects,\n  // throw an error rather than silently producing shallow copies that\n  // can cause hard-to-debug mutation bugs\n  throw new Error(\n    \"defaultClone: structuredClone unavailable. \" +\n      \"Please provide a custom clone function via GPConfig.clone \" +\n      \"or upgrade to Node >=17 / modern browser. \" +\n      \"Shallow cloning complex genomes can cause mutation bugs.\",\n  )\n}\n","export const DEFAULT_POP_SIZE = 100\nexport const DEFAULT_GENERATIONS = 1000\nexport const DEFAULT_ELITE = (popSize: number) => Math.max(1, Math.floor(0.02 * popSize))\nexport const DEFAULT_CX_PROB = 0.8\nexport const DEFAULT_MUT_PROB = 0.2\nexport const DEFAULT_CROSSOVER_CHILDREN = 1\nexport const DEFAULT_IMMIGRATION = 0.02\nexport const DEFAULT_TOURNAMENT = 3\nexport const DEFAULT_STALL = 50\nexport const DEFAULT_TARGET_FITNESS = Infinity\nexport const DEFAULT_MAX_WALL_MS = Infinity\nexport const DEFAULT_MAX_EVALUATIONS = Infinity\nexport const DEFAULT_CONCURRENCY = 1\n","import type { GPConfig } from \"../types\"\nimport {\n  DEFAULT_POP_SIZE,\n  DEFAULT_GENERATIONS,\n  DEFAULT_ELITE,\n  DEFAULT_CX_PROB,\n  DEFAULT_CROSSOVER_CHILDREN,\n  DEFAULT_IMMIGRATION,\n  DEFAULT_TOURNAMENT,\n  DEFAULT_STALL,\n  DEFAULT_TARGET_FITNESS,\n  DEFAULT_MAX_WALL_MS,\n  DEFAULT_MAX_EVALUATIONS,\n  DEFAULT_CONCURRENCY,\n} from \"./defaults\"\n\n/**\n * Normalize GPConfig to shared defaults without instantiating the engine.\n *\n * Guidance:\n * - Breeding proportions: Pc + Pm = 1 (immigration is separate).\n * - If mutProb is omitted, we derive it as 1 - cxProb.\n * - timeLimitMs is a deprecated alias of maxWallMs (kept for back-compat).\n */\nexport function normalizeConfigBase<T>(\n  cfg: GPConfig<T>,\n): Required<\n  Pick<\n    GPConfig<T>,\n    | \"popSize\"\n    | \"generations\"\n    | \"elite\"\n    | \"cxProb\"\n    | \"mutProb\"\n    | \"crossoverChildren\"\n    | \"immigration\"\n    | \"tournament\"\n    | \"stall\"\n    | \"targetFitness\"\n    | \"timeLimitMs\"\n    | \"maxWallMs\"\n    | \"maxEvaluations\"\n    | \"concurrency\"\n  >\n> {\n  const popSize = cfg.popSize ?? DEFAULT_POP_SIZE\n  const elite = cfg.elite ?? DEFAULT_ELITE(popSize)\n  const maxWallMs = cfg.maxWallMs ?? cfg.timeLimitMs ?? DEFAULT_MAX_WALL_MS\n  const cxProb = cfg.cxProb ?? DEFAULT_CX_PROB\n  // Ensure breeding operator simplex when caller omits mutProb\n  const mutProb = cfg.mutProb ?? 1 - cxProb\n  return {\n    popSize,\n    generations: cfg.generations ?? DEFAULT_GENERATIONS,\n    elite,\n    cxProb,\n    mutProb,\n    crossoverChildren: cfg.crossoverChildren ?? DEFAULT_CROSSOVER_CHILDREN,\n    immigration: cfg.immigration ?? DEFAULT_IMMIGRATION,\n    tournament: cfg.tournament ?? DEFAULT_TOURNAMENT,\n    stall: cfg.stall ?? DEFAULT_STALL,\n    targetFitness: cfg.targetFitness ?? DEFAULT_TARGET_FITNESS,\n    timeLimitMs: maxWallMs,\n    maxWallMs,\n    maxEvaluations: cfg.maxEvaluations ?? DEFAULT_MAX_EVALUATIONS,\n    concurrency: cfg.concurrency ?? DEFAULT_CONCURRENCY,\n  }\n}\n","export class GPLiteError extends Error {\n  readonly code?: string\n  constructor(message: string, code?: string) {\n    super(message)\n    this.name = \"GPLiteError\"\n    if (code) this.code = code\n  }\n}\n\nexport class ConfigError extends GPLiteError {\n  constructor(message: string, code?: string) {\n    super(message, code)\n    this.name = \"ConfigError\"\n  }\n}\n\nexport class ProblemError extends GPLiteError {\n  constructor(message: string, code?: string) {\n    super(message, code)\n    this.name = \"ProblemError\"\n  }\n}\n\nexport class EvolutionError extends GPLiteError {\n  constructor(message: string, code?: string) {\n    super(message, code)\n    this.name = \"EvolutionError\"\n  }\n}\n","import type { GPConfig, GPProblem } from \"../types\"\nimport { ConfigError, ProblemError } from \"./errors\"\n\n/**\n * Validate GPConfig values and cross-field invariants.\n *\n * Highlights:\n * - Probabilities must be in [0,1].\n * - If both cxProb and mutProb are provided, they must sum to 1 (immigration is separate).\n * - Elite and population sizes must be non-negative integers; elite ≤ popSize is checked at engine construction time.\n * - Time/evaluation budgets must be finite and ≥ 0.\n */\nexport function validateConfig<T>(cfg: GPConfig<T>): void {\n  if (cfg.popSize !== undefined && (cfg.popSize < 2 || !Number.isInteger(cfg.popSize))) {\n    throw new ConfigError(\"Population size must be an integer >= 2\", \"E_CFG_POPSIZE\")\n  }\n  if (cfg.generations !== undefined && (cfg.generations < 1 || !Number.isInteger(cfg.generations))) {\n    throw new ConfigError(\"Generations must be an integer >= 1\", \"E_CFG_GENERATIONS\")\n  }\n  if (cfg.elite !== undefined && (cfg.elite < 0 || !Number.isInteger(cfg.elite))) {\n    throw new ConfigError(\"Elite count must be a non-negative integer\", \"E_CFG_ELITE\")\n  }\n  if (cfg.cxProb !== undefined && (cfg.cxProb < 0 || cfg.cxProb > 1)) {\n    throw new ConfigError(\"Crossover probability must be between 0 and 1\", \"E_CFG_CXPROB\")\n  }\n  if (cfg.mutProb !== undefined && (cfg.mutProb < 0 || cfg.mutProb > 1)) {\n    throw new ConfigError(\"Mutation probability must be between 0 and 1\", \"E_CFG_MUTPROB\")\n  }\n  if (cfg.immigration !== undefined && (cfg.immigration < 0 || cfg.immigration > 1)) {\n    throw new ConfigError(\"Immigration rate must be between 0 and 1\", \"E_CFG_IMMIGRATION\")\n  }\n  // Operation proportions: enforce breeding operator sum to 1 within epsilon\n  // Only validate the sum when BOTH cxProb and mutProb are explicitly provided.\n  if (cfg.cxProb !== undefined && cfg.mutProb !== undefined) {\n    const sum = cfg.cxProb + cfg.mutProb\n    if (Math.abs(sum - 1) > 1e-6) {\n      throw new ConfigError(\"cxProb + mutProb must sum to 1 (immigration is separate)\", \"E_CFG_PROPORTIONS_SUM\")\n    }\n  }\n  if (cfg.tournament !== undefined && (cfg.tournament < 1 || !Number.isInteger(cfg.tournament))) {\n    throw new ConfigError(\"Tournament size must be an integer >= 1\", \"E_CFG_TOURNAMENT\")\n  }\n  if (cfg.maxWallMs !== undefined && (cfg.maxWallMs < 0 || !Number.isFinite(cfg.maxWallMs))) {\n    throw new ConfigError(\"maxWallMs must be a finite number >= 0\", \"E_CFG_MAX_WALL\")\n  }\n  if (cfg.maxEvaluations !== undefined && (cfg.maxEvaluations < 0 || !Number.isFinite(cfg.maxEvaluations))) {\n    throw new ConfigError(\"maxEvaluations must be a finite number >= 0\", \"E_CFG_MAX_EVALS\")\n  }\n  if (cfg.concurrency !== undefined && (!Number.isInteger(cfg.concurrency) || cfg.concurrency < 1)) {\n    throw new ConfigError(\"concurrency must be an integer >= 1\", \"E_CFG_CONCURRENCY\")\n  }\n  if (cfg.fitnessTimeoutMs !== undefined && (cfg.fitnessTimeoutMs < 0 || !Number.isFinite(cfg.fitnessTimeoutMs))) {\n    throw new ConfigError(\"fitnessTimeoutMs must be a finite number >= 0\", \"E_CFG_FITNESS_TIMEOUT\")\n  }\n  if (cfg.stall !== undefined && (cfg.stall < 0 || !Number.isInteger(cfg.stall))) {\n    throw new ConfigError(\"stall must be a non-negative integer\", \"E_CFG_STALL\")\n  }\n  if (cfg.targetFitness !== undefined && !Number.isFinite(cfg.targetFitness) && cfg.targetFitness !== Infinity) {\n    throw new ConfigError(\"targetFitness must be a finite number or Infinity\", \"E_CFG_TARGET_FITNESS\")\n  }\n}\n\nexport function validateProblem<T>(problem: GPProblem<T>): void {\n  if (typeof problem.fitness !== \"function\") {\n    throw new ProblemError(\"Problem must have a fitness function\", \"E_PROBLEM_FITNESS\")\n  }\n  if (typeof problem.createRandom !== \"function\") {\n    throw new ProblemError(\"Problem must have a createRandom function\", \"E_PROBLEM_CREATE\")\n  }\n  if (typeof problem.crossover !== \"function\") {\n    throw new ProblemError(\"Problem must have a crossover function\", \"E_PROBLEM_CROSSOVER\")\n  }\n  if (typeof problem.mutate !== \"function\") {\n    throw new ProblemError(\"Problem must have a mutate function\", \"E_PROBLEM_MUTATE\")\n  }\n}\n","import type { Selector } from \"../types\"\n\n/**\n * Tournament selection: sample `size` individuals and pick the best fitness.\n * Small size keeps pressure low; larger size increases selection pressure.\n */\nexport function tournament<T>(size = 3): Selector<T> {\n  return (pop, rng) => {\n    let best = rng.int(pop.length)\n    for (let i = 1; i < size; ++i) {\n      const c = rng.int(pop.length)\n      if (pop[c].f > pop[best].f) best = c\n    }\n    return best\n  }\n}\n","/**\n * FitnessCache centralizes optional memoization for fitness values.\n * - Supports key-based Map via `fitnessKey`\n * - Falls back to reference-identity WeakMap for object genomes\n * - No-ops when disabled\n */\nexport interface FitnessCacheOptions<T> {\n  enabled: boolean\n  fitnessKey?: (g: Readonly<T>) => string\n}\n\nexport class FitnessCache<T> {\n  private byKey?: Map<string, number>\n  private byRef?: WeakMap<object, number>\n  private keyFn?: (g: Readonly<T>) => string\n\n  constructor(opts: FitnessCacheOptions<T>) {\n    if (!opts.enabled) return\n    if (opts.fitnessKey) {\n      this.keyFn = opts.fitnessKey\n      this.byKey = new Map<string, number>()\n    } else {\n      this.byRef = new WeakMap<object, number>()\n    }\n  }\n\n  get(g: Readonly<T>): number | undefined {\n    if (this.keyFn && this.byKey) {\n      try {\n        const k = this.keyFn(g)\n        return this.byKey.get(k)\n      } catch {\n        return undefined\n      }\n    }\n    if (this.byRef && typeof g === \"object\" && g !== null) {\n      return this.byRef.get(g as unknown as object)\n    }\n    return undefined\n  }\n\n  set(g: Readonly<T>, f: number): void {\n    if (!Number.isFinite(f)) return\n    if (this.keyFn && this.byKey) {\n      try {\n        const k = this.keyFn(g)\n        this.byKey.set(k, f)\n      } catch {\n        // ignore\n      }\n      return\n    }\n    if (this.byRef && typeof g === \"object\" && g !== null) {\n      this.byRef.set(g as unknown as object, f)\n    }\n  }\n}\n","/**\n * Compute simple per-generation stats from a population.\n */\nexport function computePopulationStats<T>(pop: Array<{ g: T; f: number }>): {\n  best: number\n  mean: number\n  invalidCount: number\n  finiteCount: number\n} {\n  let best = -Infinity\n  let finiteSum = 0\n  let finiteCount = 0\n  let invalidCount = 0\n  for (let i = 0; i < pop.length; i++) {\n    const f = pop[i].f\n    if (f > best) best = f\n    if (Number.isFinite(f)) {\n      finiteSum += f\n      finiteCount++\n    } else {\n      invalidCount++\n    }\n  }\n  const mean = finiteCount ? finiteSum / finiteCount : -Infinity\n  return { best, mean, invalidCount, finiteCount }\n}\n","import type { GPMetrics } from \"../types\"\n\nexport interface CounterSnapshot {\n  evaluations: number\n  invalidEvaluations: number\n  repaired: number\n  repairFailures: number\n  fitnessErrors: number\n  nonFiniteFitness: number\n  mutations: number\n  crossovers: number\n  selections: number\n  immigrants: number\n}\n\nexport interface ConfigSnapshot {\n  popSize: number\n  generations: number\n  cxProb: number\n  mutProb: number\n  crossoverChildren: number\n  immigration: number\n  tournament: number\n  stall: number\n  targetFitness: number\n  maxWallMs: number\n  maxEvaluations: number\n  elitesPerGen: number\n}\n\nexport function buildRunMetrics(counters: CounterSnapshot, cfg: ConfigSnapshot): GPMetrics {\n  const {\n    popSize,\n    generations,\n    cxProb,\n    mutProb,\n    crossoverChildren,\n    immigration,\n    tournament,\n    stall,\n    targetFitness,\n    maxWallMs,\n    maxEvaluations,\n    elitesPerGen,\n  } = cfg\n  return {\n    evaluations: counters.evaluations,\n    invalidEvaluations: counters.invalidEvaluations,\n    repaired: counters.repaired,\n    repairFailures: counters.repairFailures,\n    fitnessErrors: counters.fitnessErrors,\n    nonFiniteFitness: counters.nonFiniteFitness,\n    mutations: counters.mutations,\n    crossovers: counters.crossovers,\n    selections: counters.selections,\n    immigrants: counters.immigrants,\n    elitesPerGen,\n    config: {\n      popSize,\n      generations,\n      cxProb,\n      mutProb,\n      crossoverChildren,\n      immigration,\n      tournament,\n      stall,\n      targetFitness,\n      maxWallMs,\n      maxEvaluations,\n    },\n  }\n}\n","import { defaultClone } from \"../lib/clone\"\nimport { normalizeConfigBase } from \"../lib/config\"\nimport { ConfigError, EvolutionError } from \"../lib/errors\"\nimport { validateConfig, validateProblem } from \"../lib/validation\"\nimport { mulberry32 } from \"../lib/rng\"\nimport type { GPConfig, GPMetrics, GPProblem, GPResult, OnGeneration, RNG, Selector, StopReason } from \"../types\"\nimport { tournament } from \"./selection\"\nimport { FitnessCache } from \"../lib/fitness-cache\"\nimport { computePopulationStats } from \"../lib/stats\"\nimport { buildRunMetrics } from \"../lib/metrics\"\n\n/**\n * GPLiten: a minimal, zero-dependency genetic programming/algorithm engine.\n *\n * - Synchronous operations only (fitness/mutate/crossover are sync)\n * - Deterministic RNG via `mulberry32`\n * - Early stopping via `targetFitness` and `stall` window\n * - Optional problem hooks: `isValid`, `repair`\n */\ntype EngineSyncConfig<T> = ReturnType<typeof normalizeConfigBase<T>> & {\n  rng: RNG\n  selector: Selector<T>\n  hooks: import(\"../types\").GPHooks<T>\n  clone: (g: Readonly<T>) => T\n  cacheFitness: boolean\n  fitnessKey?: (g: Readonly<T>) => string\n}\n\n/**\n * Synchronous GP/GA engine.\n *\n * Generation lifecycle (per t):\n * 1) Evaluate/repair initial population (t=0) or carry `pop` from previous gen.\n * 2) Compute stats and invoke hooks.\n * 3) Build next population `next`:\n *    - Copy `elite` best individuals unchanged (identity preserved).\n *    - Produce breeding children to fill up to `popSize - immigrantsPerGen`:\n *      - Allocate crossover child target from `cxProb`.\n *      - Fill the remainder with mutation children (since Pc + Pm = 1).\n *    - Append immigrants (sampled via createRandom) to reach `popSize`.\n * 4) Apply budgets/stop checks and repeat.\n *\n * Invariants:\n * - Pc + Pm = 1 (immigration is separate), E + M + N = λ each gen.\n * - Elites are copied without modification; identity is preserved across gens.\n * - Metrics counters reflect actual operations and evaluations.\n */\nexport class GPLite<T> {\n  readonly cfg: EngineSyncConfig<T>\n  readonly rng: RNG\n  private select: Selector<T>\n  // Fitness memoization helper\n  private fitnessCache: FitnessCache<T>\n  private problemSync: {\n    createRandom(rng: RNG): T\n    fitness(g: T): number\n    mutate(g: T, rng: RNG): T\n    crossover(a: T, b: T, rng: RNG): T[]\n    isValid?(g: T): boolean\n    repair?(g: T, rng: RNG): T\n    distance?(a: T, b: T): number\n  }\n\n  constructor(\n    private problem: GPProblem<T>,\n    cfg: GPConfig<T> = {},\n  ) {\n    // Validate inputs for clearer developer feedback\n    validateProblem(problem)\n    validateConfig(cfg)\n    const base = normalizeConfigBase(cfg)\n    this.cfg = {\n      ...base,\n      rng: cfg.rng ?? (cfg.seed !== undefined ? mulberry32(cfg.seed) : mulberry32()),\n      selector: cfg.selector ?? tournament(base.tournament),\n      hooks: cfg.hooks ?? {},\n      clone: cfg.clone ?? defaultClone,\n      cacheFitness: cfg.cacheFitness ?? false,\n      fitnessKey: cfg.fitnessKey,\n    }\n    this.rng = this.cfg.rng\n    this.select = this.cfg.selector\n    // Setup optional fitness cache\n    this.fitnessCache = new FitnessCache<T>({\n      enabled: !!cfg.cacheFitness,\n      fitnessKey: cfg.fitnessKey,\n    })\n    // Narrow to sync-only variant for the sync engine; runtime guards will enforce.\n    this.problemSync = this.problem as unknown as GPLite<T>[\"problemSync\"]\n    if (this.cfg.elite > this.cfg.popSize) {\n      throw new ConfigError(\"Elite count cannot exceed population size\", \"E_CFG_ELITE_GT_POP\")\n    }\n    // allow tournament sizes larger than population (sampling with replacement)\n  }\n\n  static seed(seed: number) {\n    return mulberry32(seed)\n  }\n\n  private assertNotPromise<TV>(what: string, v: TV): TV {\n    if (v && typeof (v as unknown as { then?: unknown }).then === \"function\") {\n      throw new EvolutionError(\n        `${what} returned a Promise in sync engine. Use GPLiteAsync.run or make ${what} synchronous.`,\n        \"E_SYNC_PROMISE\",\n      )\n    }\n    return v\n  }\n\n  /**\n   * Initialize the population by creating and evaluating individuals.\n   * Returns the population and the time taken for initialization.\n   */\n  private initializePopulation(\n    metrics: Pick<\n      GPMetrics,\n      \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\"\n    >,\n  ): { pop: Array<{ g: T; f: number }>; initTimeMs: number } {\n    const initStart = Date.now()\n    const pop: Array<{ g: T; f: number }> = Array.from({ length: this.cfg.popSize }, () => {\n      const g = this.problemSync.createRandom(this.rng)\n      this.assertNotPromise(\"createRandom\", g)\n      return { g, f: this.safeFitness(g, metrics) }\n    })\n    const initTimeMs = Date.now() - initStart\n    return { pop, initTimeMs }\n  }\n\n  /**\n   * Compute population statistics and update history arrays.\n   * Sorts the population by fitness (best first).\n   */\n  private computeGenerationStats(\n    pop: Array<{ g: T; f: number }>,\n    history: number[],\n    meanHistory: number[],\n    invalidHistory: number[],\n    validShareHistory: number[],\n    bestGenomeHistory: T[],\n  ): { best: number; mean: number; invalidCount: number; finiteCount: number } {\n    pop.sort((a, b) => b.f - a.f)\n    const { best, mean, invalidCount, finiteCount } = computePopulationStats(pop)\n    history.push(best)\n    bestGenomeHistory.push(pop[0].g)\n    meanHistory.push(mean)\n    invalidHistory.push(invalidCount)\n    validShareHistory.push(finiteCount / pop.length)\n    return { best, mean, invalidCount, finiteCount }\n  }\n\n  /**\n   * Check all stop conditions and return the stop reason if any.\n   */\n  private checkStopConditions(\n    best: number,\n    history: number[],\n    elapsedMs: number,\n    metrics: Pick<GPMetrics, \"evaluations\">,\n  ): StopReason | undefined {\n    if (best >= this.cfg.targetFitness) return \"target\"\n    if (elapsedMs >= this.cfg.maxWallMs) return \"time\"\n    if (metrics.evaluations >= this.cfg.maxEvaluations) return \"evaluations\"\n    const w = this.cfg.stall\n    if (w && history.length > w && history[history.length - 1] <= history[history.length - 1 - w]) {\n      return \"stall\"\n    }\n    return undefined\n  }\n\n  /**\n   * Invoke generation lifecycle hooks with computed stats.\n   */\n  private invokeGenerationHooks(\n    gen: number,\n    best: number,\n    mean: number,\n    invalidCount: number,\n    finiteCount: number,\n    popSize: number,\n    bestGenome: T,\n    elapsedMs: number,\n    stopReason: StopReason | undefined,\n    stageMaxMs: { init?: number; evaluation?: number; mutation?: number; crossover?: number },\n    onGen?: OnGeneration<T>,\n  ): void {\n    const payload = {\n      generation: gen,\n      bestFitness: best,\n      avgFitness: mean,\n      popSize,\n      invalidCount,\n      validShare: finiteCount / popSize,\n      bestGenome,\n      elapsedMs,\n      stopReason,\n      stageMaxMs,\n    }\n    onGen?.(payload)\n    this.cfg.hooks.onGenerationEnd?.(payload)\n    this.cfg.hooks.onIteration?.(payload)\n  }\n\n  /**\n   * Produce crossover children to add to the next generation.\n   * Returns children produced and updates metrics and timing.\n   */\n  private produceCrossoverChildren(\n    pop: Array<{ g: T; f: number }>,\n    cxChildrenTarget: number,\n    targetChildren: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"crossovers\" | \"selections\">,\n    nextStageMax: { evaluation?: number; mutation?: number; crossover?: number },\n  ): StopReason | undefined {\n    let produced = 0\n    while (produced < cxChildrenTarget) {\n      const p1 = this.select(pop, this.rng)\n      const p2 = this.select(pop, this.rng)\n      metrics.selections += 2\n      const pa = this.cfg.clone(pop[p1].g)\n      const pb = this.cfg.clone(pop[p2].g)\n      const cxT0 = Date.now()\n      const children = this.problemSync.crossover(pa, pb, this.rng)\n      const cxDt = Date.now() - cxT0\n      if (cxDt > (nextStageMax.crossover ?? 0)) nextStageMax.crossover = cxDt\n\n      this.assertNotPromise(\"crossover\", children)\n      metrics.crossovers += 1\n\n      // Guard against empty crossover results to prevent infinite loops\n      if (!Array.isArray(children) || children.length === 0) {\n        throw new EvolutionError(\"crossover must return a non-empty array of children\", \"E_EMPTY_CROSSOVER\")\n      }\n\n      // Process each child from crossover\n      const numToTake = Math.min(children.length, cxChildrenTarget - produced, targetChildren - next.length)\n      for (let i = 0; i < numToTake; i++) {\n        let child = children[i]\n        if (child === pa || child === pb) child = this.cfg.clone(child)\n\n        const evalT0 = Date.now()\n        const f = this.safeFitness(child, metrics)\n        const evalDt = Date.now() - evalT0\n        if (evalDt > (nextStageMax.evaluation ?? 0)) nextStageMax.evaluation = evalDt\n        next.push({ g: child, f })\n        produced += 1\n\n        if (metrics.evaluations >= this.cfg.maxEvaluations) {\n          return \"evaluations\"\n        }\n      }\n    }\n    return undefined\n  }\n\n  /**\n   * Produce mutation children to add to the next generation.\n   * Returns stop reason if budget exceeded, updates metrics and timing.\n   */\n  private produceMutationChildren(\n    pop: Array<{ g: T; f: number }>,\n    mutChildrenTarget: number,\n    targetChildren: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"mutations\" | \"selections\">,\n    nextStageMax: { evaluation?: number; mutation?: number; crossover?: number },\n  ): StopReason | undefined {\n    for (let i = 0; i < mutChildrenTarget && next.length < targetChildren; i++) {\n      const p = this.select(pop, this.rng)\n      metrics.selections += 1\n      const before = this.cfg.clone(pop[p].g)\n      const mutT0 = Date.now()\n      let child = this.problemSync.mutate(before, this.rng)\n      const mutDt = Date.now() - mutT0\n      if (mutDt > (nextStageMax.mutation ?? 0)) nextStageMax.mutation = mutDt\n      this.assertNotPromise(\"mutate\", child)\n      if (child === before) child = this.cfg.clone(child)\n      metrics.mutations += 1\n      {\n        const evalT0 = Date.now()\n        const f = this.safeFitness(child, metrics)\n        const evalDt = Date.now() - evalT0\n        if (evalDt > (nextStageMax.evaluation ?? 0)) nextStageMax.evaluation = evalDt\n        next.push({ g: child, f })\n      }\n      if (metrics.evaluations >= this.cfg.maxEvaluations) {\n        return \"evaluations\"\n      }\n    }\n    return undefined\n  }\n\n  /**\n   * Produce immigrants to add to the next generation.\n   * Returns stop reason if budget exceeded, updates metrics.\n   */\n  private produceImmigrants(\n    immigrantsPerGen: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"immigrants\">,\n    nextStageMax: { evaluation?: number; mutation?: number; crossover?: number },\n  ): StopReason | undefined {\n    for (let i = 0; i < immigrantsPerGen; ++i) {\n      const g = this.problemSync.createRandom(this.rng)\n      this.assertNotPromise(\"createRandom\", g)\n      {\n        const evalT0 = Date.now()\n        const f = this.safeFitness(g, metrics)\n        const evalDt = Date.now() - evalT0\n        if (evalDt > (nextStageMax.evaluation ?? 0)) nextStageMax.evaluation = evalDt\n        next.push({ g, f })\n      }\n      metrics.immigrants += 1\n      if (metrics.evaluations >= this.cfg.maxEvaluations) {\n        return \"evaluations\"\n      }\n    }\n    return undefined\n  }\n\n  /**\n   * Build the final GPResult object.\n   */\n  private buildFinalResult(\n    pop: Array<{ g: T; f: number }>,\n    history: number[],\n    bestGenomeHistory: T[],\n    meanHistory: number[],\n    invalidHistory: number[],\n    validShareHistory: number[],\n    elapsedMs: number,\n    stopReason: StopReason,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"mutations\" | \"crossovers\" | \"selections\" | \"immigrants\">,\n  ): GPResult<T> {\n    pop.sort((a, b) => b.f - a.f)\n    return {\n      bestGenome: pop[0].g,\n      bestFitness: pop[0].f,\n      generations: history.length,\n      bestFitnessHistory: history,\n      bestGenomeHistory,\n      elapsedMs,\n      stopReason,\n      avgFitnessHistory: meanHistory,\n      invalidCountHistory: invalidHistory,\n      validShareHistory,\n      metrics: buildRunMetrics(metrics, {\n        popSize: this.cfg.popSize,\n        generations: this.cfg.generations,\n        cxProb: this.cfg.cxProb,\n        mutProb: this.cfg.mutProb,\n        crossoverChildren: this.cfg.crossoverChildren,\n        immigration: this.cfg.immigration,\n        tournament: this.cfg.tournament,\n        stall: this.cfg.stall,\n        targetFitness: this.cfg.targetFitness,\n        maxWallMs: this.cfg.maxWallMs,\n        maxEvaluations: this.cfg.maxEvaluations,\n        elitesPerGen: this.cfg.elite,\n      }),\n    }\n  }\n\n  /** Guard fitness evaluation and invalid genomes. */\n  private safeFitness(\n    g: T,\n    metrics?: Pick<\n      GPMetrics,\n      \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\"\n    >,\n  ): number {\n    let genome = g\n    if (metrics) {\n      metrics.evaluations += 1 // count attempts even if served from cache\n    }\n\n    // Cache lookup (finite-only values are cached)\n    {\n      const got = this.fitnessCache.get(genome)\n      if (got !== undefined) return got\n    }\n\n    // Validate and potentially repair\n    if (this.problemSync.isValid && !this.problemSync.isValid(genome)) {\n      if (this.problemSync.repair) {\n        genome = this.problemSync.repair(genome, this.rng)\n        this.assertNotPromise(\"repair\", genome)\n        // If still invalid after repair, assign worst fitness\n        if (!this.problemSync.isValid(genome)) {\n          if (metrics) {\n            metrics.invalidEvaluations += 1\n            metrics.repairFailures += 1\n          }\n          return -Infinity\n        }\n        if (metrics) metrics.repaired += 1\n      } else {\n        if (metrics) metrics.invalidEvaluations += 1\n        return -Infinity\n      }\n    }\n\n    // Evaluate fitness with safety checks\n    try {\n      const f = this.problemSync.fitness(genome)\n      this.assertNotPromise(\"fitness\", f)\n      // Handle various edge cases\n      if (!Number.isFinite(f) || f !== f) {\n        if (metrics) {\n          metrics.invalidEvaluations += 1\n          metrics.nonFiniteFitness += 1\n        }\n        return -Infinity\n      }\n      // Cache finite values only\n      this.fitnessCache.set(genome, f)\n      return f\n    } catch {\n      // If fitness function throws, treat as invalid\n      if (metrics) {\n        metrics.invalidEvaluations += 1\n        metrics.fitnessErrors += 1\n      }\n      return -Infinity\n    }\n  }\n\n  /**\n   * Execute the evolutionary loop (synchronous).\n   *\n   * Note on callbacks: `onGen` is a convenience alias to observe per-generation\n   * progress. For most integrations, prefer the structured lifecycle hooks\n   * provided via `new GPLite(problem, { hooks: { ... } })` — e.g.\n   * `onGenerationStart`, `onGenerationEnd`, or `onIteration` — to keep the\n   * problem definition pure and avoid coupling domain logic with progress I/O.\n   */\n  run(onGen?: OnGeneration<T>): GPResult<T> {\n    const t0 = Date.now()\n    // Track per-generation max timings for observability\n    let lastStageMax: {\n      init?: number\n      evaluation?: number\n      mutation?: number\n      crossover?: number\n    } = {}\n    let stopReason: StopReason | undefined\n    // metrics counters\n    const metrics = {\n      evaluations: 0,\n      invalidEvaluations: 0,\n      repaired: 0,\n      repairFailures: 0,\n      fitnessErrors: 0,\n      nonFiniteFitness: 0,\n      mutations: 0,\n      crossovers: 0,\n      selections: 0,\n      immigrants: 0,\n    }\n    // constants derived from config\n    const baseSlots = Math.max(0, this.cfg.popSize - this.cfg.elite)\n    const immigrantsPerGen = Math.min(Math.round(baseSlots * this.cfg.immigration), baseSlots)\n    // 1. initialise population\n    const { pop: initialPop, initTimeMs } = this.initializePopulation(metrics)\n    let pop = initialPop\n    // Capture total initialization wall time for generation 0 reporting\n    lastStageMax = { init: initTimeMs }\n    // budget check after initialisation\n    if (metrics.evaluations >= this.cfg.maxEvaluations) {\n      pop.sort((a, b) => b.f - a.f)\n      return {\n        bestGenome: pop[0].g,\n        bestFitness: pop[0].f,\n        generations: 0, // No generations run, only init\n        bestFitnessHistory: [pop[0].f],\n        bestGenomeHistory: [pop[0].g],\n        elapsedMs: Date.now() - t0,\n        stopReason: \"evaluations\",\n        avgFitnessHistory: [-Infinity],\n        invalidCountHistory: [0],\n        validShareHistory: [1],\n        metrics: buildRunMetrics(metrics, {\n          popSize: this.cfg.popSize,\n          generations: this.cfg.generations,\n          cxProb: this.cfg.cxProb,\n          mutProb: this.cfg.mutProb,\n          crossoverChildren: this.cfg.crossoverChildren,\n          immigration: this.cfg.immigration,\n          tournament: this.cfg.tournament,\n          stall: this.cfg.stall,\n          targetFitness: this.cfg.targetFitness,\n          maxWallMs: this.cfg.maxWallMs,\n          maxEvaluations: this.cfg.maxEvaluations,\n          elitesPerGen: this.cfg.elite,\n        }),\n      }\n    }\n\n    const history: number[] = []\n    const meanHistory: number[] = []\n    const invalidHistory: number[] = []\n    const validShareHistory: number[] = []\n    const bestGenomeHistory: T[] = []\n    for (let gen = 0; gen < this.cfg.generations; ++gen) {\n      // lifecycle hook: signal generation start\n      this.cfg.hooks.onGenerationStart?.({\n        generation: gen,\n        popSize: this.cfg.popSize,\n        elapsedMs: Date.now() - t0,\n      })\n\n      // Compute stats and update histories\n      const { best, mean, invalidCount, finiteCount } = this.computeGenerationStats(\n        pop,\n        history,\n        meanHistory,\n        invalidHistory,\n        validShareHistory,\n        bestGenomeHistory,\n      )\n\n      // Check stop conditions\n      const nextStop = this.checkStopConditions(best, history, Date.now() - t0, metrics)\n\n      // Invoke lifecycle hooks\n      this.invokeGenerationHooks(\n        gen,\n        best,\n        mean,\n        invalidCount,\n        finiteCount,\n        pop.length,\n        pop[0].g,\n        Date.now() - t0,\n        nextStop,\n        lastStageMax,\n        onGen,\n      )\n\n      if (nextStop) {\n        stopReason = nextStop\n        break\n      }\n\n      // 2. next population – start with elites\n      const next: typeof pop = pop.slice(0, this.cfg.elite)\n\n      // 3. breeding\n      // Track maxima for work performed to produce the NEXT population\n      const nextStageMax: {\n        evaluation?: number\n        mutation?: number\n        crossover?: number\n      } = {}\n      const targetChildren = this.cfg.popSize - immigrantsPerGen\n\n      // Breeding allocation: allocate fixed child counts based on Pc (crossover)\n      // and fill the remainder with mutation. Immigration is already reserved\n      // via `targetChildren`, so we never subtract it again here.\n      const slots = targetChildren - next.length\n      const cxChildrenTarget = Math.min(slots, Math.round((this.cfg.popSize - this.cfg.elite) * this.cfg.cxProb))\n      const mutChildrenTarget = Math.max(0, slots - cxChildrenTarget)\n\n      // Produce crossover children\n      stopReason = this.produceCrossoverChildren(pop, cxChildrenTarget, targetChildren, next, metrics, nextStageMax)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      // Produce mutation children\n      stopReason = this.produceMutationChildren(pop, mutChildrenTarget, targetChildren, next, metrics, nextStageMax)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      // 4. Produce immigrants\n      stopReason = this.produceImmigrants(immigrantsPerGen, next, metrics, nextStageMax)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      // Carry forward the maxima for reporting on the next iteration\n      lastStageMax = {\n        init: undefined,\n        evaluation: nextStageMax.evaluation,\n        mutation: nextStageMax.mutation,\n        crossover: nextStageMax.crossover,\n      }\n      pop = next\n    }\n\n    stopReason ??= \"generations\"\n    return this.buildFinalResult(\n      pop,\n      history,\n      bestGenomeHistory,\n      meanHistory,\n      invalidHistory,\n      validShareHistory,\n      Date.now() - t0,\n      stopReason,\n      metrics,\n    )\n  }\n\n  // (Intentionally no async iterator here to keep footprint minimal.)\n\n  /**\n   * Run unit tests defined in the problem to validate the fitness function.\n   * Returns an array of test results.\n   */\n  runUnitTests(): Array<{\n    name: string\n    genome: T\n    fitness: number\n    passed: boolean\n    error?: string\n  }> {\n    if (!this.problem.unitTests || this.problem.unitTests.length === 0) {\n      return []\n    }\n\n    return this.problem.unitTests.map(test => {\n      try {\n        const fitness = this.safeFitness(test.genome)\n\n        const result = test.test(fitness)\n        const passed = result === true\n        const error = typeof result === \"string\" ? result : undefined\n\n        return {\n          name: test.name,\n          genome: test.genome,\n          fitness,\n          passed,\n          error,\n        }\n      } catch (e) {\n        return {\n          name: test.name,\n          genome: test.genome,\n          fitness: -Infinity,\n          passed: false,\n          error: `Fitness evaluation failed: ${e instanceof Error ? e.message : String(e)}`,\n        }\n      }\n    })\n  }\n}\n","import { defaultClone } from \"../lib/clone\"\nimport { normalizeConfigBase } from \"../lib/config\"\nimport { ConfigError, EvolutionError } from \"../lib/errors\"\nimport { validateConfig, validateProblem } from \"../lib/validation\"\nimport { mulberry32 } from \"../lib/rng\"\nimport type {\n  GPConfig,\n  GPHooks,\n  GPMetrics,\n  GPProblem,\n  GPResult,\n  OnGeneration,\n  RNG,\n  Selector,\n  StopReason,\n} from \"../types\"\nimport { tournament } from \"./selection\"\nimport { FitnessCache } from \"../lib/fitness-cache\"\nimport { computePopulationStats } from \"../lib/stats\"\nimport { buildRunMetrics } from \"../lib/metrics\"\n\ntype EngineAsyncConfig<T> = ReturnType<typeof normalizeConfigBase<T>> & {\n  rng: RNG\n  selector: Selector<T>\n  hooks: GPHooks<T>\n  clone: (g: Readonly<T>) => T\n  cacheFitness: boolean\n  fitnessKey?: (g: Readonly<T>) => string\n  signal?: AbortSignal\n  fitnessTimeoutMs: number\n  initialPopulation?: ReadonlyArray<T>\n}\n\n/**\n * Asynchronous GP/GA engine.\n *\n * Mirrors the synchronous engine but allows async `createRandom`, `fitness`,\n * `mutate`, and `crossover`. Concurrency controls the number of in-flight tasks.\n *\n * Key points for newcomers:\n * - Pc + Pm = 1 (immigration handled separately after breeding).\n * - Per-evaluation timeout (`fitnessTimeoutMs`) marks fitness as invalid (-Infinity).\n * - Budgets (`maxWallMs`, `maxEvaluations`) are respected between awaited phases.\n */\nexport class GPLiteAsync<T> {\n  readonly cfg: EngineAsyncConfig<T>\n  readonly rng: RNG\n  private select: Selector<T>\n  // Fitness memoization helper\n  private fitnessCache: FitnessCache<T>\n\n  constructor(\n    private problem: GPProblem<T>,\n    cfg: GPConfig<T> = {},\n  ) {\n    validateProblem(problem)\n    validateConfig(cfg)\n    const base = normalizeConfigBase(cfg)\n    this.cfg = {\n      ...base,\n      rng: cfg.rng ?? (cfg.seed !== undefined ? mulberry32(cfg.seed) : mulberry32()),\n      selector: cfg.selector ?? tournament(base.tournament),\n      hooks: cfg.hooks ?? {},\n      clone: cfg.clone ?? defaultClone,\n      cacheFitness: cfg.cacheFitness ?? false,\n      fitnessKey: cfg.fitnessKey,\n      signal: cfg.signal,\n      fitnessTimeoutMs: cfg.fitnessTimeoutMs ?? Infinity,\n      initialPopulation: cfg.initialPopulation,\n    }\n    this.rng = this.cfg.rng\n    this.select = this.cfg.selector\n    // Setup optional fitness cache\n    this.fitnessCache = new FitnessCache<T>({\n      enabled: !!this.cfg.cacheFitness,\n      fitnessKey: this.cfg.fitnessKey,\n    })\n    if (this.cfg.elite > this.cfg.popSize) {\n      throw new ConfigError(\"Elite count cannot exceed population size\")\n    }\n  }\n\n  static seed(seed: number) {\n    return mulberry32(seed)\n  }\n\n  /**\n   * Initialize the population asynchronously with concurrency control.\n   * Returns the population and optional stop reason if budgets are exhausted.\n   */\n  private async initializePopulation(\n    metrics: Pick<\n      GPMetrics,\n      \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\"\n    >,\n    timeExceeded: () => boolean,\n  ): Promise<{ pop: Array<{ g: T; f: number }>; stopReason?: StopReason }> {\n    const pop: Array<{ g: T; f: number }> = []\n    let stopReason: StopReason | undefined\n    const target = this.cfg.popSize\n    const seedGenomes: ReadonlyArray<T> | undefined = this.cfg.initialPopulation\n    let seedIdx = 0\n    const inFlight: Array<Promise<{ g: T; f: number }>> = []\n    const schedule = () => {\n      const task = (async () => {\n        const g =\n          seedGenomes && seedIdx < seedGenomes.length\n            ? (seedGenomes[seedIdx++] as T)\n            : await this.problem.createRandom(this.rng, {\n                signal: this.cfg.signal,\n              })\n        const f = await this.safeFitness(g, metrics)\n        return { g, f }\n      })()\n      inFlight.push(task)\n    }\n\n    while (pop.length < target) {\n      if (this.cfg.signal?.aborted) {\n        stopReason = \"aborted\"\n        break\n      }\n      if (timeExceeded()) {\n        stopReason = \"time\"\n        break\n      }\n      const remainingSlots = target - pop.length - inFlight.length\n      const remainingEvals = this.cfg.maxEvaluations - metrics.evaluations - inFlight.length\n      if (remainingEvals <= 0) {\n        stopReason = \"evaluations\"\n        break\n      }\n      const canStart = Math.min(\n        Math.max(0, this.cfg.concurrency - inFlight.length),\n        Math.max(0, remainingSlots),\n        Math.max(0, remainingEvals),\n      )\n      for (let i = 0; i < canStart; i++) schedule()\n      if (!inFlight.length) break\n      const idx = await Promise.race(inFlight.map((p, i) => p.then(() => i)))\n      const done = inFlight.splice(idx, 1)[0]\n      const item = await done\n      pop.push(item)\n    }\n\n    return { pop, stopReason }\n  }\n\n  /**\n   * Compute population statistics and update history arrays.\n   * Sorts the population by fitness (best first).\n   */\n  private computeGenerationStats(\n    pop: Array<{ g: T; f: number }>,\n    history: number[],\n    meanHistory: number[],\n    invalidHistory: number[],\n    validShareHistory: number[],\n    bestGenomeHistory: T[],\n  ): { best: number; mean: number; invalidCount: number; finiteCount: number } {\n    pop.sort((a, b) => b.f - a.f)\n    const { best, mean, invalidCount, finiteCount } = computePopulationStats(pop)\n    history.push(best)\n    bestGenomeHistory.push(pop[0].g)\n    meanHistory.push(mean)\n    invalidHistory.push(invalidCount)\n    validShareHistory.push(finiteCount / pop.length)\n    return { best, mean, invalidCount, finiteCount }\n  }\n\n  /**\n   * Check all stop conditions and return the stop reason if any.\n   */\n  private checkStopConditions(\n    best: number,\n    history: number[],\n    elapsedMs: number,\n    metrics: Pick<GPMetrics, \"evaluations\">,\n  ): StopReason | undefined {\n    if (this.cfg.signal?.aborted) return \"aborted\"\n    if (best >= this.cfg.targetFitness) return \"target\"\n    if (elapsedMs >= this.cfg.maxWallMs) return \"time\"\n    if (metrics.evaluations >= this.cfg.maxEvaluations) return \"evaluations\"\n    const w = this.cfg.stall\n    if (w && history.length > w && history[history.length - 1] <= history[history.length - 1 - w]) {\n      return \"stall\"\n    }\n    return undefined\n  }\n\n  /**\n   * Invoke generation lifecycle hooks with computed stats.\n   */\n  private invokeGenerationHooks(\n    gen: number,\n    best: number,\n    mean: number,\n    invalidCount: number,\n    finiteCount: number,\n    popSize: number,\n    bestGenome: T,\n    elapsedMs: number,\n    stopReason: StopReason | undefined,\n    onGen?: OnGeneration<T>,\n  ): void {\n    const payload = {\n      generation: gen,\n      bestFitness: best,\n      avgFitness: mean,\n      popSize,\n      invalidCount,\n      validShare: finiteCount / popSize,\n      bestGenome,\n      elapsedMs,\n      stopReason,\n    }\n    onGen?.(payload)\n    this.cfg.hooks.onGenerationEnd?.(payload)\n    this.cfg.hooks.onIteration?.(payload)\n  }\n\n  /**\n   * Produce crossover children asynchronously with concurrency control.\n   * Returns stop reason if budget exceeded, updates metrics.\n   */\n  private async produceCrossoverChildren(\n    pop: Array<{ g: T; f: number }>,\n    cxChildrenTarget: number,\n    targetChildren: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"crossovers\" | \"selections\">,\n    timeExceeded: () => boolean,\n  ): Promise<StopReason | undefined> {\n    let produced = 0\n    const inFlight: Array<Promise<Array<{ g: T; f: number }>>> = []\n    const scheduleCrossover = (maxChildren: number) => {\n      const task = (async () => {\n        const p1 = this.select(pop, this.rng)\n        const p2 = this.select(pop, this.rng)\n        metrics.selections += 2\n        const pa = this.cfg.clone(pop[p1].g)\n        const pb = this.cfg.clone(pop[p2].g)\n        metrics.crossovers += 1\n        const children = await this.problem.crossover(pa, pb, this.rng, {\n          signal: this.cfg.signal,\n        })\n\n        // Guard against empty crossover results to prevent infinite loops\n        if (!Array.isArray(children) || children.length === 0) {\n          throw new EvolutionError(\"crossover must return a non-empty array of children\", \"E_EMPTY_CROSSOVER\")\n        }\n\n        const out: Array<{ g: T; f: number }> = []\n        const numToTake = Math.min(children.length, maxChildren)\n        for (let i = 0; i < numToTake; i++) {\n          let child = children[i]\n          if (child === pa || child === pb) child = this.cfg.clone(child)\n          out.push({ g: child, f: await this.safeFitness(child, metrics) })\n        }\n        return out\n      })()\n      inFlight.push(task)\n    }\n\n    while (produced < cxChildrenTarget) {\n      if (timeExceeded()) return \"time\"\n      if (this.cfg.signal?.aborted) return \"aborted\"\n      const remainingEvals = this.cfg.maxEvaluations - metrics.evaluations\n      if (remainingEvals <= 0) return \"evaluations\"\n      const canStartTasks = this.cfg.concurrency - inFlight.length\n      if (canStartTasks > 0) {\n        const remaining = cxChildrenTarget - produced\n        const crossoversNeeded = Math.ceil(remaining / this.cfg.crossoverChildren)\n        const startNow = Math.min(canStartTasks, crossoversNeeded)\n        for (let i = 0; i < startNow; i++) {\n          const left = cxChildrenTarget - produced\n          const maxChildren = Math.min(left, this.cfg.crossoverChildren)\n          scheduleCrossover(maxChildren)\n          produced += maxChildren\n        }\n      }\n      if (!inFlight.length) break\n      const idx = await Promise.race(inFlight.map((p, i) => p.then(() => i)))\n      const done = inFlight.splice(idx, 1)[0]\n      const res = await done\n      const slotsLeft = targetChildren - next.length\n      for (let i = 0; i < Math.min(slotsLeft, res.length); i++) next.push(res[i])\n    }\n    return undefined\n  }\n\n  /**\n   * Produce mutation children asynchronously with concurrency control.\n   * Returns stop reason if budget exceeded, updates metrics.\n   */\n  private async produceMutationChildren(\n    pop: Array<{ g: T; f: number }>,\n    mutChildrenTarget: number,\n    targetChildren: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"mutations\" | \"selections\">,\n    timeExceeded: () => boolean,\n  ): Promise<StopReason | undefined> {\n    const inFlight: Array<Promise<{ g: T; f: number }>> = []\n    const scheduleMut = () => {\n      const task = (async () => {\n        const p = this.select(pop, this.rng)\n        metrics.selections += 1\n        const before = this.cfg.clone(pop[p].g)\n        let child: T = (await this.problem.mutate(before, this.rng, {\n          signal: this.cfg.signal,\n        })) as T\n        if (child === before) child = this.cfg.clone(child)\n        metrics.mutations += 1\n        return { g: child, f: await this.safeFitness(child, metrics) }\n      })()\n      inFlight.push(task)\n    }\n    let produced = 0\n    while (produced < mutChildrenTarget && next.length < targetChildren) {\n      if (timeExceeded()) return \"time\"\n      if (this.cfg.signal?.aborted) return \"aborted\"\n      const remainingEvals = this.cfg.maxEvaluations - metrics.evaluations\n      if (remainingEvals <= 0) return \"evaluations\"\n      const canStart = this.cfg.concurrency - inFlight.length\n      for (let i = 0; i < Math.min(canStart, mutChildrenTarget - produced); i++) {\n        scheduleMut()\n        produced += 1\n      }\n      if (!inFlight.length) break\n      const idx = await Promise.race(inFlight.map((p, i) => p.then(() => i)))\n      const done = inFlight.splice(idx, 1)[0]\n      const item = await done\n      if (next.length < targetChildren) next.push(item)\n    }\n    return undefined\n  }\n\n  /**\n   * Produce immigrants asynchronously.\n   * Returns stop reason if budget exceeded, updates metrics.\n   */\n  private async produceImmigrants(\n    immigrantsPerGen: number,\n    next: Array<{ g: T; f: number }>,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"immigrants\">,\n    timeExceeded: () => boolean,\n  ): Promise<StopReason | undefined> {\n    for (let i = 0; i < immigrantsPerGen; ++i) {\n      if (timeExceeded()) return \"time\"\n      if (this.cfg.signal?.aborted) return \"aborted\"\n      const g = await this.problem.createRandom(this.rng, {\n        signal: this.cfg.signal,\n      })\n      next.push({ g, f: await this.safeFitness(g, metrics) })\n      metrics.immigrants += 1\n      if (metrics.evaluations >= this.cfg.maxEvaluations) {\n        return \"evaluations\"\n      }\n    }\n    return undefined\n  }\n\n  /**\n   * Build the final GPResult object.\n   */\n  private buildFinalResult(\n    pop: Array<{ g: T; f: number }>,\n    history: number[],\n    bestGenomeHistory: T[],\n    meanHistory: number[],\n    invalidHistory: number[],\n    validShareHistory: number[],\n    elapsedMs: number,\n    stopReason: StopReason,\n    metrics: Pick<GPMetrics, \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\" | \"mutations\" | \"crossovers\" | \"selections\" | \"immigrants\">,\n  ): GPResult<T> {\n    pop.sort((a, b) => b.f - a.f)\n    const head = pop[0] ?? { g: undefined as unknown as T, f: -Infinity }\n    return {\n      bestGenome: head.g,\n      bestFitness: head.f,\n      generations: history.length,\n      bestFitnessHistory: history,\n      bestGenomeHistory,\n      elapsedMs,\n      stopReason,\n      avgFitnessHistory: meanHistory,\n      invalidCountHistory: invalidHistory,\n      validShareHistory,\n      metrics: buildRunMetrics(metrics, {\n        popSize: this.cfg.popSize,\n        generations: this.cfg.generations,\n        cxProb: this.cfg.cxProb,\n        mutProb: this.cfg.mutProb,\n        crossoverChildren: this.cfg.crossoverChildren,\n        immigration: this.cfg.immigration,\n        tournament: this.cfg.tournament,\n        stall: this.cfg.stall,\n        targetFitness: this.cfg.targetFitness,\n        maxWallMs: this.cfg.maxWallMs,\n        maxEvaluations: this.cfg.maxEvaluations,\n        elitesPerGen: this.cfg.elite,\n      }),\n    }\n  }\n\n  private async safeFitness(\n    g: T,\n    metrics?: Pick<\n      GPMetrics,\n      \"evaluations\" | \"invalidEvaluations\" | \"repaired\" | \"repairFailures\" | \"fitnessErrors\" | \"nonFiniteFitness\"\n    >,\n  ): Promise<number> {\n    let genome = g\n    if (metrics) metrics.evaluations += 1\n\n    // Cache lookup first\n    {\n      const got = this.fitnessCache.get(genome)\n      if (got !== undefined) return got\n    }\n\n    try {\n      if (this.problem.isValid && !(await this.problem.isValid(genome, { signal: this.cfg.signal }))) {\n        if (this.problem.repair) {\n          genome = await this.problem.repair(genome, this.rng, {\n            signal: this.cfg.signal,\n          })\n          if (!(await this.problem.isValid(genome, { signal: this.cfg.signal }))) {\n            if (metrics) {\n              metrics.invalidEvaluations += 1\n              metrics.repairFailures += 1\n            }\n            return -Infinity\n          }\n          if (metrics) metrics.repaired += 1\n        } else {\n          if (metrics) metrics.invalidEvaluations += 1\n          return -Infinity\n        }\n      }\n\n      // Compose per-evaluation timeout with external abort signal\n      const timeoutMs = this.cfg.fitnessTimeoutMs\n      const parent = this.cfg.signal\n      let timer: ReturnType<typeof setTimeout> | undefined\n      const controller = new AbortController()\n      const onParentAbort = () => controller.abort(parent?.reason)\n      if (parent?.aborted) controller.abort(parent.reason)\n      else if (parent) parent.addEventListener(\"abort\", onParentAbort)\n      const fitnessP = Promise.resolve(this.problem.fitness(genome, { signal: controller.signal })).catch(\n        () => -Infinity,\n      )\n      const timeoutP = new Promise<number>(resolve => {\n        if (Number.isFinite(timeoutMs) && timeoutMs >= 0) {\n          timer = setTimeout(() => {\n            try {\n              controller.abort(new Error(\"fitness timeout\"))\n            } catch {}\n            resolve(-Infinity)\n          }, timeoutMs)\n        }\n      })\n\n      const f = Number.isFinite(timeoutMs) && timeoutMs >= 0 ? await Promise.race([fitnessP, timeoutP]) : await fitnessP\n\n      if (timer) clearTimeout(timer)\n      if (parent) parent.removeEventListener(\"abort\", onParentAbort)\n      if (!Number.isFinite(f) || f !== f) {\n        if (metrics) {\n          metrics.invalidEvaluations += 1\n          metrics.nonFiniteFitness += 1\n        }\n        return -Infinity\n      }\n      // Cache finite values only\n      this.fitnessCache.set(genome, f)\n      return f\n    } catch {\n      if (metrics) {\n        metrics.invalidEvaluations += 1\n        metrics.fitnessErrors += 1\n      }\n      return -Infinity\n    }\n  }\n\n  /**\n   * Execute the evolutionary loop (asynchronous).\n   *\n   * Note on callbacks: `onGen` is a convenience alias to observe per-generation\n   * progress. For most integrations, prefer the structured lifecycle hooks via\n   * `new GPLiteAsync(problem, { hooks: { ... } })` — e.g. `onGenerationStart`,\n   * `onGenerationEnd`, or `onIteration` — to keep the problem definition pure\n   * and avoid coupling domain logic with progress I/O.\n   */\n  async run(onGen?: OnGeneration<T>): Promise<GPResult<T>> {\n    const t0 = Date.now()\n    const timeExceeded = () => Date.now() - t0 >= this.cfg.maxWallMs\n    let stopReason: StopReason | undefined\n\n    const metrics = {\n      evaluations: 0,\n      invalidEvaluations: 0,\n      repaired: 0,\n      repairFailures: 0,\n      fitnessErrors: 0,\n      nonFiniteFitness: 0,\n      mutations: 0,\n      crossovers: 0,\n      selections: 0,\n      immigrants: 0,\n    }\n\n    const baseSlots = Math.max(0, this.cfg.popSize - this.cfg.elite)\n    const immigrantsPerGen = Math.min(Math.round(baseSlots * this.cfg.immigration), baseSlots)\n\n    // Build initial population with concurrency, honoring budgets; support optional initialPopulation\n    const initResult = await this.initializePopulation(metrics, timeExceeded)\n    let pop = initResult.pop\n    if (initResult.stopReason) {\n      stopReason = initResult.stopReason\n    }\n\n    if (stopReason || metrics.evaluations >= this.cfg.maxEvaluations || timeExceeded()) {\n      pop.sort((a, b) => b.f - a.f)\n      const head = pop[0] ?? ({ g: undefined as unknown as T, f: -Infinity })\n      return {\n        bestGenome: head.g,\n        bestFitness: head.f,\n        generations: 0,\n        bestFitnessHistory: pop.length ? [head.f] : [],\n        bestGenomeHistory: pop.length ? [head.g] : [],\n        elapsedMs: Date.now() - t0,\n        stopReason: stopReason ?? (metrics.evaluations >= this.cfg.maxEvaluations ? \"evaluations\" : \"time\"),\n        avgFitnessHistory: pop.length ? [-Infinity] : [],\n        invalidCountHistory: pop.length ? [0] : [],\n        validShareHistory: pop.length ? [1] : [],\n        metrics: buildRunMetrics(metrics, {\n          popSize: this.cfg.popSize,\n          generations: this.cfg.generations,\n          cxProb: this.cfg.cxProb,\n          mutProb: this.cfg.mutProb,\n          crossoverChildren: this.cfg.crossoverChildren,\n          immigration: this.cfg.immigration,\n          tournament: this.cfg.tournament,\n          stall: this.cfg.stall,\n          targetFitness: this.cfg.targetFitness,\n          maxWallMs: this.cfg.maxWallMs,\n          maxEvaluations: this.cfg.maxEvaluations,\n          elitesPerGen: this.cfg.elite,\n        }),\n      }\n    }\n\n    const history: number[] = []\n    const meanHistory: number[] = []\n    const invalidHistory: number[] = []\n    const validShareHistory: number[] = []\n    const bestGenomeHistory: T[] = []\n\n    for (let gen = 0; gen < this.cfg.generations; ++gen) {\n      this.cfg.hooks.onGenerationStart?.({\n        generation: gen,\n        popSize: this.cfg.popSize,\n        elapsedMs: Date.now() - t0,\n      })\n\n      // Compute stats and update histories\n      const { best, mean, invalidCount, finiteCount } = this.computeGenerationStats(\n        pop,\n        history,\n        meanHistory,\n        invalidHistory,\n        validShareHistory,\n        bestGenomeHistory,\n      )\n\n      // Check stop conditions\n      const nextStop = this.checkStopConditions(best, history, Date.now() - t0, metrics)\n\n      // Invoke lifecycle hooks\n      this.invokeGenerationHooks(gen, best, mean, invalidCount, finiteCount, pop.length, pop[0].g, Date.now() - t0, nextStop, onGen)\n\n      if (nextStop) {\n        stopReason = nextStop\n        break\n      }\n\n      const next: typeof pop = pop.slice(0, this.cfg.elite)\n\n      // Proportions: allocate fixed counts for children\n      const targetChildren = this.cfg.popSize - immigrantsPerGen\n      const slots = targetChildren - next.length\n      // We already reserved immigrant slots via targetChildren; do not subtract again here.\n      const cxChildrenTarget = Math.min(slots, Math.round((this.cfg.popSize - this.cfg.elite) * this.cfg.cxProb))\n      const mutChildrenTarget = Math.max(0, slots - cxChildrenTarget)\n\n      // Produce crossover children\n      stopReason = await this.produceCrossoverChildren(pop, cxChildrenTarget, targetChildren, next, metrics, timeExceeded)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      // Produce mutation children\n      stopReason = await this.produceMutationChildren(pop, mutChildrenTarget, targetChildren, next, metrics, timeExceeded)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      // Produce immigrants\n      stopReason = await this.produceImmigrants(immigrantsPerGen, next, metrics, timeExceeded)\n      if (stopReason) {\n        pop = next\n        break\n      }\n\n      pop = next\n    }\n\n    stopReason ??= \"generations\"\n    return this.buildFinalResult(\n      pop,\n      history,\n      bestGenomeHistory,\n      meanHistory,\n      invalidHistory,\n      validShareHistory,\n      Date.now() - t0,\n      stopReason,\n      metrics,\n    )\n  }\n\n  /**\n   * Run unit tests defined in the problem to validate the fitness function.\n   * Returns an array of test results.\n   */\n  async runUnitTests(): Promise<\n    Array<{\n      name: string\n      genome: T\n      fitness: number\n      passed: boolean\n      error?: string\n    }>\n  > {\n    if (!this.problem.unitTests || this.problem.unitTests.length === 0) {\n      return []\n    }\n\n    return Promise.all(\n      this.problem.unitTests.map(async test => {\n        try {\n          const fitness = await this.safeFitness(test.genome)\n\n          // Check constraints\n          const { exact, min, max, greaterThan, lessThan } = test.expect\n          let passed = true\n          let error: string | undefined\n\n          if (exact !== undefined && fitness !== exact) {\n            passed = false\n            error = `Expected exactly ${exact}, got ${fitness}`\n          }\n          if (min !== undefined && fitness < min) {\n            passed = false\n            error = `Expected at least ${min}, got ${fitness}`\n          }\n          if (max !== undefined && fitness > max) {\n            passed = false\n            error = `Expected at most ${max}, got ${fitness}`\n          }\n          if (greaterThan !== undefined && fitness <= greaterThan) {\n            passed = false\n            error = `Expected greater than ${greaterThan}, got ${fitness}`\n          }\n          if (lessThan !== undefined && fitness >= lessThan) {\n            passed = false\n            error = `Expected less than ${lessThan}, got ${fitness}`\n          }\n\n          return {\n            name: test.name,\n            genome: test.genome,\n            fitness,\n            passed,\n            error,\n          }\n        } catch (e) {\n          return {\n            name: test.name,\n            genome: test.genome,\n            fitness: -Infinity,\n            passed: false,\n            error: `Fitness evaluation failed: ${e instanceof Error ? e.message : String(e)}`,\n          }\n        }\n      }),\n    )\n  }\n}\n","import type { GPConfig, GPMetrics } from \"../types\"\nimport { normalizeConfigBase } from \"./config\"\n\nexport interface CostModel {\n  /** Estimated milliseconds per fitness evaluation (defaults to 0). */\n  perEvaluationMs?: number\n  /** Optional monetary cost per fitness evaluation (generic units). */\n  perEvaluationCost?: number\n  /** Fixed overhead per generation in milliseconds (loop bookkeeping). */\n  perGenerationOverheadMs?: number\n  /** One-time overhead per run in milliseconds (setup/teardown). */\n  perRunOverheadMs?: number\n}\n\nexport interface RunEstimate {\n  evaluations: {\n    init: number\n    perGen: number\n    plannedTotal: number\n    expectedTotal: number\n    cappedByMaxEvaluations?: number\n  }\n  timeMs?: {\n    init: number\n    perGen: number\n    plannedTotal: number\n    expectedTotal: number\n    cappedByMaxWall?: number\n  }\n  monetary?: {\n    perEval: number\n    plannedTotal: number\n    expectedTotal: number\n  }\n  operations: {\n    immigrantsPerGen: number\n    childrenFromBreedingPerGen: number\n    pairsPerGen: number\n    selectionsPerGen: number\n    expectedCrossoversPerGen: number\n    expectedMutationsPerGen: number\n  }\n  notes: string[]\n}\n\n/**\n * Normalize GPConfig to mirror GPLite defaults without instantiating the engine.\n */\n// uses shared normalization from config.ts\n\n/**\n * Estimate planned and expected costs for a run given a config.\n * - Generic: uses counts of fitness evaluations + optional unit costs.\n * - Time and budget caps are applied to provide \"capped\" views.\n */\nexport function estimateRun<T>(\n  cfg: GPConfig<T> = {},\n  opts: {\n    /** If provided, overrides `cfg.generations` for expected scenario. */\n    expectedGenerations?: number\n    /** Generic cost and time units. */\n    units?: CostModel\n  } = {},\n): RunEstimate {\n  const c = normalizeConfigBase(cfg)\n  const expectedGenerations = opts.expectedGenerations ?? c.generations\n  const immigrantsPerGen = Math.floor(c.popSize * c.immigration)\n  const childrenFromBreedingPerGen = Math.max(0, c.popSize - c.elite - immigrantsPerGen)\n  const pairsPerGen = Math.ceil(childrenFromBreedingPerGen / 2)\n  const selectionsPerGen = pairsPerGen * 2\n\n  const init = c.popSize\n  // Each full generation evaluates exactly popSize - elite new individuals\n  const perGen = Math.max(0, c.popSize - c.elite)\n  const plannedTotal = init + c.generations * perGen\n  const expectedTotal = init + expectedGenerations * perGen\n  const cappedByMaxEvaluations = Math.min(expectedTotal, c.maxEvaluations)\n\n  const perEvalMs = opts.units?.perEvaluationMs ?? 0\n  const perGenOverheadMs = opts.units?.perGenerationOverheadMs ?? 0\n  const perRunOverheadMs = opts.units?.perRunOverheadMs ?? 0\n\n  const timeInit = init * perEvalMs + perRunOverheadMs\n  const timePerGen = perGen * perEvalMs + perGenOverheadMs\n  const timePlannedTotal = timeInit + c.generations * timePerGen\n  const timeExpectedTotal = timeInit + expectedGenerations * timePerGen\n  const cappedByMaxWall = Math.min(timeExpectedTotal, c.maxWallMs)\n\n  const perEvalCost = opts.units?.perEvaluationCost\n  const monetary =\n    perEvalCost !== undefined\n      ? {\n          perEval: perEvalCost,\n          plannedTotal: plannedTotal * perEvalCost,\n          expectedTotal: expectedTotal * perEvalCost,\n        }\n      : undefined\n\n  return {\n    evaluations: {\n      init,\n      perGen,\n      plannedTotal,\n      expectedTotal,\n      cappedByMaxEvaluations: Number.isFinite(c.maxEvaluations) ? cappedByMaxEvaluations : undefined,\n    },\n    timeMs:\n      perEvalMs || perGenOverheadMs || perRunOverheadMs\n        ? {\n            init: timeInit,\n            perGen: timePerGen,\n            plannedTotal: timePlannedTotal,\n            expectedTotal: timeExpectedTotal,\n            cappedByMaxWall: Number.isFinite(c.maxWallMs) ? cappedByMaxWall : undefined,\n          }\n        : undefined,\n    monetary,\n    operations: {\n      immigrantsPerGen,\n      childrenFromBreedingPerGen,\n      pairsPerGen,\n      selectionsPerGen,\n      expectedCrossoversPerGen: pairsPerGen * c.cxProb,\n      expectedMutationsPerGen: childrenFromBreedingPerGen * c.mutProb,\n    },\n    notes: [\n      \"Estimates assume no early stop (target/stall/time/evaluations).\",\n      \"Per-generation evaluations equal popSize - elite by construction.\",\n      \"Crossovers are counted per parent-pair; mutations per child genome.\",\n    ],\n  }\n}\n\n/**\n * Compute realized cost from a completed run's metrics (post‑hoc).\n */\nexport function estimateFromMetrics(m: GPMetrics, units: CostModel = {}) {\n  const evals = m.evaluations\n  const timeMs = (units.perEvaluationMs ?? 0) * evals\n  const cost = units.perEvaluationCost !== undefined ? units.perEvaluationCost * evals : undefined\n  return {\n    evaluations: evals,\n    timeMs: units.perEvaluationMs !== undefined ? timeMs : undefined,\n    monetary: cost !== undefined ? { total: cost, perEval: units.perEvaluationCost! } : undefined,\n  }\n}\n","import type { GPHooks, GenerationInfo, StopReason } from \"../types\"\n\n// Lightweight, zero-dep time/generation progress tracker built on hooks\nexport interface ProgressSnapshot {\n  generation: number\n  generationsObserved: number\n  totalGenerations: number\n  fractionByGenerations: number\n  stopReason?: StopReason\n  time: {\n    elapsedMs: number\n    initMs?: number\n    lastGenMs?: number\n    perGenMsAvg?: number\n    estimatedTotalMs?: number\n    remainingMs?: number\n    fractionTime?: number\n  }\n}\n\nexport interface ProgressTrackerOptions<T> {\n  totalGenerations: number\n  onUpdate?: (p: ProgressSnapshot, info: GenerationInfo<T>) => void\n}\n\nexport function createProgressTracker<T>(opts: ProgressTrackerOptions<T>) {\n  const total = Math.max(1, Math.floor(opts.totalGenerations))\n  let firstEndElapsed: number | undefined\n  let prevEndElapsed: number | undefined\n  let sumIntervals = 0\n  let intervals = 0\n  let lastInterval: number | undefined\n  let latest: ProgressSnapshot = {\n    generation: -1,\n    generationsObserved: 0,\n    totalGenerations: total,\n    fractionByGenerations: 0,\n    time: { elapsedMs: 0 },\n  }\n\n  function snapshotFrom(info: GenerationInfo<T>): ProgressSnapshot {\n    if (firstEndElapsed === undefined) {\n      firstEndElapsed = info.elapsedMs\n      prevEndElapsed = info.elapsedMs\n    } else if (prevEndElapsed !== undefined) {\n      const dt = info.elapsedMs - prevEndElapsed\n      if (dt >= 0) {\n        sumIntervals += dt\n        intervals += 1\n        lastInterval = dt\n      }\n      prevEndElapsed = info.elapsedMs\n    }\n\n    const observed = info.generation + 1\n    const fractionByGenerations = Math.max(0, Math.min(1, observed / total))\n    const avg = intervals > 0 ? sumIntervals / intervals : undefined\n    const initMs = firstEndElapsed\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- avg can be undefined when intervals is 0\n    const estimatedTotalMs = initMs !== undefined && avg !== undefined ? initMs + avg * (total - 1) : undefined\n    const remainingMs = estimatedTotalMs !== undefined ? Math.max(0, estimatedTotalMs - info.elapsedMs) : undefined\n    const fractionTime =\n      estimatedTotalMs !== undefined ? Math.max(0, Math.min(1, info.elapsedMs / estimatedTotalMs)) : undefined\n\n    latest = {\n      generation: info.generation,\n      generationsObserved: observed,\n      totalGenerations: total,\n      fractionByGenerations,\n      stopReason: info.stopReason,\n      time: {\n        elapsedMs: info.elapsedMs,\n        initMs,\n        lastGenMs: lastInterval,\n        perGenMsAvg: avg,\n        estimatedTotalMs,\n        remainingMs,\n        fractionTime,\n      },\n    }\n    return latest\n  }\n\n  const hooks: GPHooks<T> = {\n    onGenerationEnd(info) {\n      const snap = snapshotFrom(info)\n      opts.onUpdate?.(snap, info)\n    },\n  }\n\n  return {\n    hooks,\n    get(): ProgressSnapshot {\n      return latest\n    },\n    reset(): void {\n      firstEndElapsed = undefined\n      prevEndElapsed = undefined\n      sumIntervals = 0\n      intervals = 0\n      lastInterval = undefined\n      latest = {\n        generation: -1,\n        generationsObserved: 0,\n        totalGenerations: total,\n        fractionByGenerations: 0,\n        time: { elapsedMs: 0 },\n      }\n    },\n  }\n}\n\nexport interface ProgressLoggerOptions {\n  /** Log every N generations (default 1) */\n  every?: number\n  /** Print a one-time header before the first log (default true) */\n  header?: boolean\n  /** Custom sink for log lines (default console.log) */\n  log?: (line: string) => void\n}\n\n/**\n * progressLogger: tiny, zero-dep progress logger for hooks or onGen.\n *\n * Usage:\n *  - As a hook: new GPLite(problem, { hooks: { onIteration: progressLogger() } })\n *  - As onGen: gp.run(progressLogger())\n */\nexport function progressLogger<T = unknown>(opts: ProgressLoggerOptions = {}): (info: GenerationInfo<T>) => void {\n  const every = Math.max(1, opts.every ?? 1)\n  const log = opts.log ?? ((s: string) => console.log(s))\n  const wantHeader = opts.header ?? true\n  let headerPrinted = false\n\n  const formatNum = (n: number) => (Number.isFinite(n) && n % 1 === 0 ? String(n) : Number.isFinite(n) ? n.toFixed(4) : String(n))\n\n  return function onGen(info: GenerationInfo<T>) {\n    if (info.generation % every !== 0) return\n    if (wantHeader && !headerPrinted) {\n      log(\"generation\\tbest\\tavg\\tpop\\telapsedMs\")\n      headerPrinted = true\n    }\n    log(\n      `${info.generation}\\t${formatNum(info.bestFitness)}\\t${formatNum(info.avgFitness)}\\t${info.popSize}\\t${info.elapsedMs}`,\n    )\n  }\n}\n","import type { GPProblem, RNG } from \"../types\"\nimport { ProblemError } from \"./errors\"\n\nexport interface CreateProblemSpec<T> {\n  /** Fitness score: higher is better (must be finite). */\n  fitness: GPProblem<T>[\"fitness\"]\n  /** Return a mutated copy of the genome. */\n  mutate: GPProblem<T>[\"mutate\"]\n  /** Optional crossover; defaults to identity (returns parents). */\n  crossover?: GPProblem<T>[\"crossover\"]\n  /**\n   * Optional random initializer; if omitted, provide `init` and we will\n   * generate via a few mutation steps from that seed.\n   */\n  createRandom?: GPProblem<T>[\"createRandom\"]\n  /** Optional deterministic seed factory used to derive createRandom. */\n  init?: () => T\n  /** Optional hooks forwarded as-is. */\n  isValid?: GPProblem<T>[\"isValid\"]\n  repair?: GPProblem<T>[\"repair\"]\n  distance?: GPProblem<T>[\"distance\"]\n}\n\n/**\n * createProblem: convenience to build a GPProblem with sane defaults.\n *\n * If `createRandom` is not provided, you can supply `init()` and a random\n * genome will be produced by applying 1..3 mutation steps from the seed.\n * If neither is provided, an error is thrown (we cannot generically create T).\n */\nexport function createProblem<T>(spec: CreateProblemSpec<T>): GPProblem<T> {\n  const { fitness, mutate, crossover, createRandom, init, isValid, repair, distance } = spec\n\n  if (typeof fitness !== \"function\") throw new ProblemError(\"fitness must be a function\", \"E_INVALID_FITNESS_FN\")\n  if (typeof mutate !== \"function\") throw new ProblemError(\"mutate must be a function\", \"E_INVALID_MUTATE_FN\")\n\n  let cr: (rng: RNG) => T\n  if (createRandom) {\n    // Delegate to user-supplied initializer (sync or async allowed by engine choice)\n    // For the sync engine, callers should provide a sync createRandom.\n    cr = rng => createRandom(rng) as T\n  } else if (init) {\n    cr = rng => {\n      let g = init() as T\n      const n = 1 + rng.int(3)\n      for (let i = 0; i < n; i++) g = mutate(g, rng) as T\n      return g\n    }\n  } else {\n    throw new ProblemError(\n      \"createProblem requires either createRandom or init to generate genomes\",\n      \"E_MISSING_INIT_RANDOM\",\n    )\n  }\n\n  const cx: GPProblem<T>[\"crossover\"] = crossover ?? ((a, _b) => [a as T])\n\n  const problem: GPProblem<T> = {\n    createRandom: (rng, _ctx) => cr(rng),\n    fitness,\n    mutate,\n    crossover: cx,\n    isValid,\n    repair,\n    distance,\n  }\n  return problem\n}\n","// re-export all types and utilities\nexport { formatResult } from \"./lib/format\"\nexport { mulberry32 } from \"./lib/rng\"\nexport type {\n  GPConfig,\n  GPHooks,\n  GPMetrics,\n  GPProblem,\n  GPAsyncContext,\n  MaybePromise,\n  GPResult,\n  OnGeneration,\n  RNG,\n  Selector,\n  GPProgress,\n  StopReason,\n  GenerationInfo,\n  GenerationStartInfo,\n  IterationInfo,\n} from \"./types\"\n// first-class public types from estimation utilities\nexport type { CostModel, RunEstimate } from \"./lib/estimate\"\n\n// engine exports\nexport { GPLite } from \"./core/engine\"\nexport { GPLiteAsync } from \"./core/engine-async\"\nexport { tournament } from \"./core/selection\"\n\n// error utilities (opt-in)\nexport { ConfigError, EvolutionError, GPLiteError, ProblemError } from \"./lib/errors\"\nexport { validateConfig, validateProblem } from \"./lib/validation\"\n\n// estimator utilities (generic cost/time projection)\nexport { estimateFromMetrics, estimateRun } from \"./lib/estimate\"\n// tiny built-in logger and progress tracker\nexport { progressLogger, createProgressTracker } from \"./lib/progress\"\nexport type { ProgressSnapshot } from \"./lib/progress\"\nexport { createProblem } from \"./lib/problem\"\n// Optional: expose library defaults for discoverability\nexport * as defaults from \"./lib/defaults\"\n\n// Minimal entrypoint: stable, typed signature\nimport type { GPResult, RNG } from \"./types\"\nimport { GPLite } from \"./core/engine\"\nimport { DEFAULT_CX_PROB } from \"./lib/defaults\"\nimport { ProblemError } from \"./lib/errors\"\n\nexport function run<T>(args: {\n  /** Fixed initial population of candidate genomes */\n  initialPopulation: ReadonlyArray<T>\n  /** Fitness score: higher is better (must be finite) */\n  fitness: (g: Readonly<T>) => number\n  /** Return a mutated copy of the genome */\n  mutate: (g: Readonly<T>, rng: RNG) => T\n  /** Optional: create a fresh random genome (required if immigration > 0) */\n  createRandom?: (rng: RNG) => T\n  /** Optional: crossover operator for children */\n  crossover?: (a: Readonly<T>, b: Readonly<T>, rng: RNG) => T[]\n  /** Number of generations to run */\n  iterations: number\n  /** Optional: crossover probability (default 0 if no crossover given) */\n  cxProb?: number\n  /** Optional: mutation probability (default 1 for minimal API) */\n  mutProb?: number\n  /** Optional: immigrants share per generation (0..1). Requires createRandom. */\n  immigration?: number\n}): GPResult<T> {\n  const { initialPopulation, fitness, mutate, iterations, createRandom, crossover, cxProb, mutProb, immigration } = args\n  if (!Array.isArray(initialPopulation) || initialPopulation.length === 0) {\n    throw new ProblemError(\"initialPopulation must be a non-empty array\", \"E_INVALID_POP\")\n  }\n  if (typeof fitness !== \"function\") {\n    throw new ProblemError(\"fitness must be a function\", \"E_INVALID_FITNESS_FN\")\n  }\n  if (typeof mutate !== \"function\") {\n    throw new ProblemError(\"mutate must be a function\", \"E_INVALID_MUTATE_FN\")\n  }\n  if (!Number.isInteger(iterations) || iterations < 0) {\n    throw new ProblemError(\"iterations must be a non-negative integer\", \"E_INVALID_ITERATIONS\")\n  }\n  if ((immigration ?? 0) > 0 && typeof createRandom !== \"function\") {\n    throw new ProblemError(\"immigration > 0 requires a createRandom(rng) function\", \"E_RUN_NEEDS_CREATE_RANDOM\")\n  }\n\n  // Provide a lightweight problem wrapper; defaults favor mutation-only\n  let createIdx = 0\n  const problem = {\n    createRandom(rng: RNG): T {\n      // Priority: caller createRandom if provided\n      if (typeof createRandom === \"function\") return createRandom(rng)\n      // Fallback: use initial population first, then mutate a random existing genome\n      if (createIdx < initialPopulation.length) {\n        return initialPopulation[createIdx++] as T\n      }\n      const base = initialPopulation[rng.int(initialPopulation.length)] as T\n      return mutate(base, rng)\n    },\n    fitness(g: Readonly<T>): number {\n      return fitness(g)\n    },\n    mutate(g: Readonly<T>, rng: RNG): T {\n      return mutate(g, rng)\n    },\n    crossover(a: Readonly<T>, b: Readonly<T>, rng: RNG): T[] {\n      if (typeof crossover === \"function\") return crossover(a, b, rng)\n      // Default: pass-through (no crossover)\n      return [a as T]\n    },\n  }\n\n  // Calculate probabilities ensuring breeding operators sum to 1\n  const hasCrossover = typeof crossover === \"function\"\n  const finalCxProb = hasCrossover ? (cxProb ?? DEFAULT_CX_PROB) : (cxProb ?? 0)\n  const finalImmigration = immigration ?? 0\n\n  // If mutProb is not provided, calculate it so cx+mut=1 (immigration is separate)\n  const finalMutProb = mutProb ?? 1 - finalCxProb\n\n  const gp = new GPLite<T>(problem, {\n    popSize: initialPopulation.length,\n    generations: iterations,\n    cxProb: finalCxProb,\n    mutProb: finalMutProb,\n    immigration: finalImmigration,\n  })\n  return gp.run()\n}\n"]}