{"version":3,"file":"index.node.cjs","sources":["index.node.js"],"sourcesContent":["import { readFileSync } from 'fs';\n\n/** Loads a fresh HiGHS WebAssembly module with the given options. */\nasync function loadHiGHSModule(options) {\n    const createModule = await loadHiGHSFactory();\n    const consoleConfig = options?.console ?? { log: null, error: null };\n    const moduleOptions = {\n        print: consoleConfig.log ?? (() => { }),\n        printErr: consoleConfig.error ?? (() => { }),\n    };\n    return createModule(moduleOptions);\n}\nasync function loadHiGHSFactory() {\n    const { default: HiGHSModuleFactory } = await import(new URL('../build/highs.js', import.meta.url).href);\n    return HiGHSModuleFactory;\n}\n\nconst HIGHS_STATUS_MAP = {\n    0: 'unknown', // kNotset\n    1: 'error', // kLoadError\n    2: 'error', // kModelError\n    3: 'error', // kPresolveError\n    4: 'error', // kSolveError\n    5: 'error', // kPostsolveError\n    6: 'error', // kModelEmpty\n    7: 'optimal', // kOptimal\n    8: 'infeasible', // kInfeasible\n    9: 'unboundedorinfeasible', // kUnboundedOrInfeasible\n    10: 'unbounded', // kUnbounded\n    11: 'objectivebound', // kObjectiveBound\n    12: 'objectivetarget', // kObjectiveTarget\n    13: 'timelimit', // kTimeLimit\n    14: 'iterationlimit', // kIterationLimit\n    15: 'unknown', // kUnknown\n    16: 'solutionlimit', // kSolutionLimit\n    17: 'unknown', // kInterrupt\n    18: 'unknown', // kMemoryLimit\n    19: 'unknown', // kHighsInterrupt\n};\n/** Low-level wrapper around the HiGHS optimization solver. */\nlet HiGHS$1 = class HiGHS {\n    constructor(module, highsPtr) {\n        this.freed = false;\n        this.module = module;\n        this.highsPtr = highsPtr;\n    }\n    /** Creates a new HiGHS solver instance. */\n    static async create(options) {\n        const module = await loadHiGHSModule(options);\n        const highsPtr = module.ccall('Highs_create', 'number', [], []);\n        if (highsPtr === 0) {\n            throw new Error('Highs_create failed to create instance');\n        }\n        return new HiGHS(module, highsPtr);\n    }\n    /** Parses a problem from a string in the given format (e.g., 'lp', 'mps'). */\n    async parse(content, format) {\n        this.ensureNotFreed();\n        const filename = `/tmp/problem.${format}`;\n        this.module.FS.writeFile(filename, content);\n        try {\n            const status = this.module.ccall('Highs_readModel', 'number', ['number', 'string'], [this.highsPtr, filename]);\n            if (status !== 0) {\n                throw new Error(`Highs_readModel failed with status ${status}`);\n            }\n        }\n        finally {\n            try {\n                this.module.FS.unlink(filename);\n            }\n            catch {\n                // Ignore cleanup errors\n            }\n        }\n    }\n    /** Sets a HiGHS option by name. Supports boolean, integer, real, and string values. */\n    setParam(name, value) {\n        this.ensureNotFreed();\n        if (typeof value === 'boolean') {\n            this.module.ccall('Highs_setBoolOptionValue', 'number', ['number', 'string', 'number'], [this.highsPtr, name, value ? 1 : 0]);\n        }\n        else if (typeof value === 'string') {\n            this.module.ccall('Highs_setStringOptionValue', 'number', ['number', 'string', 'string'], [this.highsPtr, name, value]);\n        }\n        else if (Number.isInteger(value)) {\n            this.module.ccall('Highs_setIntOptionValue', 'number', ['number', 'string', 'number'], [this.highsPtr, name, value]);\n        }\n        else {\n            this.module.ccall('Highs_setDoubleOptionValue', 'number', ['number', 'string', 'number'], [this.highsPtr, name, value]);\n        }\n    }\n    /** Solves the loaded problem and returns the result. */\n    async solve() {\n        this.ensureNotFreed();\n        this.module.ccall('Highs_run', 'number', ['number'], [this.highsPtr]);\n        const statusCode = this.module.ccall('Highs_getModelStatus', 'number', ['number'], [this.highsPtr]);\n        const status = HIGHS_STATUS_MAP[statusCode] ?? 'unknown';\n        const result = { status };\n        if (status === 'optimal' || status === 'timelimit' ||\n            status === 'solutionlimit' || status === 'objectivebound' ||\n            status === 'objectivetarget') {\n            result.objective = this.module.ccall('Highs_getObjectiveValue', 'number', ['number'], [this.highsPtr]);\n            result.solution = this.extractSolution();\n        }\n        return result;\n    }\n    extractSolution() {\n        const solution = new Map();\n        const numCol = this.module.ccall('Highs_getNumCol', 'number', ['number'], [this.highsPtr]);\n        const colValuePtr = this.module._malloc(numCol * 8);\n        try {\n            this.module.ccall('Highs_getSolution', 'number', ['number', 'number', 'number', 'number', 'number'], [this.highsPtr, colValuePtr, 0, 0, 0]);\n            const nameBufferSize = 256;\n            const namePtr = this.module._malloc(nameBufferSize);\n            try {\n                for (let i = 0; i < numCol; i++) {\n                    this.module.ccall('Highs_getColName', 'number', ['number', 'number', 'number'], [this.highsPtr, i, namePtr]);\n                    const name = this.module.UTF8ToString(namePtr);\n                    const value = this.module.getValue(colValuePtr + i * 8, 'double');\n                    solution.set(name, value);\n                }\n            }\n            finally {\n                this.module._free(namePtr);\n            }\n        }\n        finally {\n            this.module._free(colValuePtr);\n        }\n        return solution;\n    }\n    /** Frees the HiGHS instance. Safe to call multiple times. */\n    free() {\n        if (this.freed) {\n            return;\n        }\n        this.freed = true;\n        this.module.ccall('Highs_destroy', null, ['number'], [this.highsPtr]);\n    }\n    ensureNotFreed() {\n        if (this.freed) {\n            throw new Error('HiGHS instance has been freed');\n        }\n    }\n};\n\n/** A linear constraint: expr sense rhs (e.g., x + y <= 10). */\nclass Constraint {\n    /** @internal Use leq(), geq(), or eq() methods on expressions instead. */\n    constructor(expr, sense, rhs, name) {\n        this.expr = expr;\n        this.sense = sense;\n        this.rhs = rhs;\n        this.name = name;\n    }\n}\n\n/** A linear expression: sum of terms plus a constant. */\nclass LinExpr {\n    /** @internal Use variable arithmetic methods (plus, minus, times) instead. */\n    constructor(terms, constant) {\n        this.terms = terms;\n        this.constant = constant;\n    }\n    /** Returns this + other. */\n    plus(other) {\n        if (typeof other === 'number') {\n            return new LinExpr(this.terms, this.constant + other);\n        }\n        if (other instanceof LinExpr) {\n            return new LinExpr([...this.terms, ...other.terms], this.constant + other.constant);\n        }\n        return new LinExpr([...this.terms, { coeff: 1, var: other }], this.constant);\n    }\n    /** Returns this - other. */\n    minus(other) {\n        if (typeof other === 'number') {\n            return new LinExpr(this.terms, this.constant - other);\n        }\n        if (other instanceof LinExpr) {\n            const negatedTerms = other.terms.map((t) => ({ coeff: -t.coeff, var: t.var }));\n            return new LinExpr([...this.terms, ...negatedTerms], this.constant - other.constant);\n        }\n        return new LinExpr([...this.terms, { coeff: -1, var: other }], this.constant);\n    }\n    /** Returns coeff * this. */\n    times(coeff) {\n        return new LinExpr(this.terms.map((t) => ({ coeff: t.coeff * coeff, var: t.var })), this.constant * coeff);\n    }\n    /** Returns -this. */\n    neg() {\n        return this.times(-1);\n    }\n    /** Returns a constraint: this <= rhs. */\n    leq(rhs) {\n        return new Constraint(this, '<=', rhs);\n    }\n    /** Returns a constraint: this >= rhs. */\n    geq(rhs) {\n        return new Constraint(this, '>=', rhs);\n    }\n    /** Returns a constraint: this == rhs. */\n    eq(rhs) {\n        return new Constraint(this, '=', rhs);\n    }\n}\n\n/** A decision variable in an optimization model. */\nclass Var {\n    /** @internal Use Model.numVar(), Model.intVar(), or Model.boolVar() instead. */\n    constructor(name, type, lb, ub) {\n        this.name = name;\n        this.type = type;\n        this.lb = lb;\n        this.ub = ub;\n    }\n    toExpr() {\n        return new LinExpr([{ coeff: 1, var: this }], 0);\n    }\n    /** Returns this + other. */\n    plus(other) {\n        return this.toExpr().plus(other);\n    }\n    /** Returns this - other. */\n    minus(other) {\n        return this.toExpr().minus(other);\n    }\n    /** Returns coeff * this. */\n    times(coeff) {\n        return new LinExpr([{ coeff, var: this }], 0);\n    }\n    /** Returns -this. */\n    neg() {\n        return this.times(-1);\n    }\n    /** Returns a constraint: this <= rhs. */\n    leq(rhs) {\n        return this.toExpr().leq(rhs);\n    }\n    /** Returns a constraint: this >= rhs. */\n    geq(rhs) {\n        return this.toExpr().geq(rhs);\n    }\n    /** Returns a constraint: this == rhs. */\n    eq(rhs) {\n        return this.toExpr().eq(rhs);\n    }\n}\n\n/** The result of solving a Model. */\nclass Solution {\n    /** @internal Use Model.solve() to obtain a Solution. */\n    constructor(result) {\n        this.status = result.status;\n        this.objective = result.objective;\n        this.values = result.solution ?? new Map();\n    }\n    /** Returns the value of a variable in the solution, or undefined if not found. */\n    getValue(variable) {\n        return this.values.get(variable.name);\n    }\n}\n\nfunction toLPFormat(input) {\n    const lines = [];\n    if (input.sense === 'maximize') {\n        lines.push('Maximize');\n    }\n    else {\n        lines.push('Minimize');\n    }\n    if (input.objective) {\n        lines.push(`  obj: ${formatExpr(input.objective)}`);\n    }\n    else {\n        lines.push('  obj: 0');\n    }\n    lines.push('Subject To');\n    let constraintIndex = 0;\n    for (const constraint of input.constraints) {\n        const name = constraint.name ?? `c${constraintIndex++}`;\n        const exprStr = formatExpr(constraint.expr);\n        const senseStr = constraint.sense === '=' ? '=' : constraint.sense;\n        const rhs = constraint.rhs - constraint.expr.constant;\n        lines.push(`  ${name}: ${exprStr} ${senseStr} ${formatNumber(rhs)}`);\n    }\n    const boundsLines = [];\n    const generalVars = [];\n    const binaryVars = [];\n    for (const v of input.variables) {\n        if (v.type === 'binary') {\n            binaryVars.push(v.name);\n        }\n        else {\n            if (v.type === 'integer') {\n                generalVars.push(v.name);\n            }\n            const hasNonDefaultBounds = v.lb !== 0 || v.ub !== Infinity;\n            if (hasNonDefaultBounds) {\n                if (v.ub === Infinity) {\n                    boundsLines.push(`  ${formatNumber(v.lb)} <= ${v.name}`);\n                }\n                else {\n                    boundsLines.push(`  ${formatNumber(v.lb)} <= ${v.name} <= ${formatNumber(v.ub)}`);\n                }\n            }\n        }\n    }\n    if (boundsLines.length > 0) {\n        lines.push('Bounds');\n        lines.push(...boundsLines);\n    }\n    if (generalVars.length > 0) {\n        lines.push('General');\n        lines.push(`  ${generalVars.join(' ')}`);\n    }\n    if (binaryVars.length > 0) {\n        lines.push('Binary');\n        lines.push(`  ${binaryVars.join(' ')}`);\n    }\n    lines.push('End');\n    return lines.join('\\n') + '\\n';\n}\nfunction formatExpr(expr) {\n    const consolidated = consolidateTerms(expr);\n    if (consolidated.length === 0) {\n        return '0';\n    }\n    const parts = [];\n    for (let i = 0; i < consolidated.length; i++) {\n        const { coeff, varName } = consolidated[i];\n        if (coeff === 0)\n            continue;\n        if (i === 0) {\n            if (coeff === 1) {\n                parts.push(varName);\n            }\n            else if (coeff === -1) {\n                parts.push(`- ${varName}`);\n            }\n            else if (coeff < 0) {\n                parts.push(`- ${formatNumber(-coeff)} ${varName}`);\n            }\n            else {\n                parts.push(`${formatNumber(coeff)} ${varName}`);\n            }\n        }\n        else {\n            if (coeff === 1) {\n                parts.push(`+ ${varName}`);\n            }\n            else if (coeff === -1) {\n                parts.push(`- ${varName}`);\n            }\n            else if (coeff < 0) {\n                parts.push(`- ${formatNumber(-coeff)} ${varName}`);\n            }\n            else {\n                parts.push(`+ ${formatNumber(coeff)} ${varName}`);\n            }\n        }\n    }\n    return parts.join(' ') || '0';\n}\nfunction consolidateTerms(expr) {\n    const coeffMap = new Map();\n    for (const term of expr.terms) {\n        const current = coeffMap.get(term.var.name) ?? 0;\n        coeffMap.set(term.var.name, current + term.coeff);\n    }\n    const result = [];\n    for (const [varName, coeff] of coeffMap) {\n        if (coeff !== 0) {\n            result.push({ coeff, varName });\n        }\n    }\n    return result;\n}\nfunction formatNumber(n) {\n    if (Number.isInteger(n)) {\n        return n.toString();\n    }\n    return n.toString();\n}\n\n/**\n * Converts a model to fixed MPS format. Uses the modern \"free\" MPS format\n * which doesn't require strict column alignment.\n */\nfunction toMPSFormat(input) {\n    const lines = [];\n    const constraintNames = [];\n    lines.push('NAME          problem');\n    if (input.sense === 'maximize') {\n        lines.push('OBJSENSE');\n        lines.push(' MAX');\n    }\n    // ROWS section: objective and constraints\n    lines.push('ROWS');\n    lines.push(' N  obj');\n    let constraintIndex = 0;\n    for (const constraint of input.constraints) {\n        const name = constraint.name ?? `c${constraintIndex++}`;\n        constraintNames.push(name);\n        const rowType = constraint.sense === '<=' ? 'L' : constraint.sense === '>=' ? 'G' : 'E';\n        lines.push(` ${rowType}  ${name}`);\n    }\n    // COLUMNS section: variable coefficients\n    lines.push('COLUMNS');\n    // Build coefficient map: varName -> { rowName -> coeff }\n    const varCoeffs = new Map();\n    for (const v of input.variables) {\n        varCoeffs.set(v.name, new Map());\n    }\n    // Add objective coefficients\n    if (input.objective) {\n        for (const term of input.objective.terms) {\n            const coeffs = varCoeffs.get(term.var.name);\n            const current = coeffs.get('obj') ?? 0;\n            coeffs.set('obj', current + term.coeff);\n        }\n    }\n    // Add constraint coefficients\n    for (let i = 0; i < input.constraints.length; i++) {\n        const constraint = input.constraints[i];\n        const rowName = constraintNames[i];\n        for (const term of constraint.expr.terms) {\n            const coeffs = varCoeffs.get(term.var.name);\n            const current = coeffs.get(rowName) ?? 0;\n            coeffs.set(rowName, current + term.coeff);\n        }\n    }\n    // Output columns, marking integer variables\n    const integerVars = input.variables.filter(v => v.type === 'integer' || v.type === 'binary');\n    const continuousVars = input.variables.filter(v => v.type === 'continuous');\n    for (const v of continuousVars) {\n        const coeffs = varCoeffs.get(v.name);\n        for (const [rowName, coeff] of coeffs) {\n            if (coeff !== 0) {\n                lines.push(`    ${v.name}  ${rowName}  ${coeff}`);\n            }\n        }\n    }\n    if (integerVars.length > 0) {\n        lines.push(\"    MARKER    'MARKER'  'INTORG'\");\n        for (const v of integerVars) {\n            const coeffs = varCoeffs.get(v.name);\n            for (const [rowName, coeff] of coeffs) {\n                if (coeff !== 0) {\n                    lines.push(`    ${v.name}  ${rowName}  ${coeff}`);\n                }\n            }\n        }\n        lines.push(\"    MARKER    'MARKER'  'INTEND'\");\n    }\n    // RHS section\n    lines.push('RHS');\n    for (let i = 0; i < input.constraints.length; i++) {\n        const constraint = input.constraints[i];\n        const rowName = constraintNames[i];\n        const rhs = constraint.rhs - constraint.expr.constant;\n        if (rhs !== 0) {\n            lines.push(`    rhs  ${rowName}  ${rhs}`);\n        }\n    }\n    // BOUNDS section\n    const hasBounds = input.variables.some(v => v.type !== 'binary' && (v.lb !== 0 || v.ub !== Infinity));\n    const hasBinary = input.variables.some(v => v.type === 'binary');\n    if (hasBounds || hasBinary) {\n        lines.push('BOUNDS');\n        for (const v of input.variables) {\n            if (v.type === 'binary') {\n                lines.push(` BV bnd  ${v.name}`);\n            }\n            else {\n                if (v.lb !== 0) {\n                    lines.push(` LO bnd  ${v.name}  ${v.lb}`);\n                }\n                if (v.ub !== Infinity) {\n                    lines.push(` UP bnd  ${v.name}  ${v.ub}`);\n                }\n                else if (v.lb === 0) {\n                    lines.push(` PL bnd  ${v.name}`);\n                }\n            }\n        }\n    }\n    lines.push('ENDATA');\n    return lines.join('\\n') + '\\n';\n}\n\n/** Computes tight lower and upper bounds on a linear expression from variable bounds. */\nfunction exprBounds(expr) {\n    if (expr instanceof Var) {\n        return { lb: expr.lb, ub: expr.ub };\n    }\n    let lb = expr.constant;\n    let ub = expr.constant;\n    for (const term of expr.terms) {\n        if (term.coeff > 0) {\n            lb += term.coeff * term.var.lb;\n            ub += term.coeff * term.var.ub;\n        }\n        else {\n            lb += term.coeff * term.var.ub;\n            ub += term.coeff * term.var.lb;\n        }\n    }\n    return { lb, ub };\n}\n/** Returns true if the expression is guaranteed to take integer values. */\nfunction isIntegral(expr) {\n    if (expr instanceof Var) {\n        return expr.type === 'integer' || expr.type === 'binary';\n    }\n    if (!Number.isInteger(expr.constant))\n        return false;\n    for (const term of expr.terms) {\n        const varIsInt = term.var.type === 'integer' || term.var.type === 'binary';\n        if (!varIsInt || !Number.isInteger(term.coeff))\n            return false;\n    }\n    return true;\n}\n/** @internal Validates that a variable is binary, throwing if not. */\nfunction assertBinary(v, context) {\n    const isBinary = v.type === 'binary' ||\n        (v.type === 'integer' && v.lb === 0 && v.ub === 1);\n    if (!isBinary) {\n        throw new Error(`${context}: variable '${v.name}' must be binary`);\n    }\n}\n\n/** Returns the sum of the given variables, expressions, and constants. */\nfunction sum(...items) {\n    let result = new LinExpr([], 0);\n    for (const item of items) {\n        result = result.plus(item);\n    }\n    return result;\n}\n\nfunction isBinary(v) {\n    return v.type === 'binary' || (v.type === 'integer' && v.lb === 0 && v.ub === 1);\n}\n/** High-level model builder for optimization problems. */\nclass Model {\n    constructor() {\n        this.variables = [];\n        this.constraints = [];\n        this.objective = null;\n        this.sense = 'minimize';\n        this.varCounter = 0;\n    }\n    /** Creates a continuous variable with the given bounds and optional name. */\n    numVar(lb = 0, ub = Infinity, name) {\n        const varName = name ?? `x${this.varCounter++}`;\n        const v = new Var(varName, 'continuous', lb, ub);\n        this.variables.push(v);\n        return v;\n    }\n    /** Creates an integer variable with the given bounds and optional name. */\n    intVar(lb = 0, ub = Infinity, name) {\n        const varName = name ?? `x${this.varCounter++}`;\n        const v = new Var(varName, 'integer', lb, ub);\n        this.variables.push(v);\n        return v;\n    }\n    /** Creates a binary (0-1) variable with an optional name. */\n    boolVar(name) {\n        const varName = name ?? `x${this.varCounter++}`;\n        const v = new Var(varName, 'binary', 0, 1);\n        this.variables.push(v);\n        return v;\n    }\n    /** Adds a constraint to the model with an optional name. */\n    addConstraint(constraint, name) {\n        if (name !== undefined)\n            constraint.name = name;\n        this.constraints.push(constraint);\n    }\n    /** Sets the objective to minimize the given expression. */\n    minimize(expr) {\n        this.objective = expr instanceof Var ? expr.times(1) : expr;\n        this.sense = 'minimize';\n    }\n    /** Sets the objective to maximize the given expression. */\n    maximize(expr) {\n        this.objective = expr instanceof Var ? expr.times(1) : expr;\n        this.sense = 'maximize';\n    }\n    /** Returns a variable equal to the logical AND of the given binary variables. */\n    and(...vars) {\n        if (vars.length === 0)\n            throw new Error('and() requires at least 1 variable');\n        if (vars.length === 1)\n            return vars[0];\n        for (const v of vars)\n            assertBinary(v, 'and()');\n        const z = this.boolVar();\n        for (const v of vars)\n            this.addConstraint(z.minus(v).leq(0));\n        this.addConstraint(sum(z, ...vars.map((v) => v.neg())).geq(1 - vars.length));\n        return z;\n    }\n    /** Returns a variable equal to the logical OR of the given binary variables. */\n    or(...vars) {\n        if (vars.length === 0)\n            throw new Error('or() requires at least 1 variable');\n        if (vars.length === 1)\n            return vars[0];\n        for (const v of vars)\n            assertBinary(v, 'or()');\n        const z = this.boolVar();\n        for (const v of vars)\n            this.addConstraint(z.minus(v).geq(0));\n        this.addConstraint(sum(...vars).minus(z).geq(0));\n        return z;\n    }\n    /** Returns a variable equal to the logical NOT of a binary variable. */\n    not(x) {\n        assertBinary(x, 'not()');\n        const z = this.boolVar();\n        this.addConstraint(z.plus(x).eq(1));\n        return z;\n    }\n    /** Returns a variable equal to the XOR of two binary variables. */\n    xor(x, y, options) {\n        assertBinary(x, 'xor()');\n        assertBinary(y, 'xor()');\n        const z = this.boolVar();\n        if (options?.method === 'compact') {\n            const w = this.and(x, y);\n            this.addConstraint(z.minus(x).minus(y).plus(w.times(2)).eq(0));\n        }\n        else {\n            this.addConstraint(z.minus(x).minus(y).leq(0));\n            this.addConstraint(z.minus(x).plus(y).geq(0));\n            this.addConstraint(z.plus(x).minus(y).geq(0));\n            this.addConstraint(z.plus(x).plus(y).leq(2));\n        }\n        return z;\n    }\n    /** Adds an implication constraint: x=1 implies y=1. */\n    addImplication(x, y) {\n        assertBinary(x, 'addImplication()');\n        assertBinary(y, 'addImplication()');\n        this.addConstraint(x.minus(y).leq(0));\n    }\n    /** Adds a cardinality constraint: at most k of the given variables are 1. */\n    addAtMost(k, ...vars) {\n        for (const v of vars)\n            assertBinary(v, 'addAtMost()');\n        this.addConstraint(sum(...vars).leq(k));\n    }\n    /** Adds a cardinality constraint: at least k of the given variables are 1. */\n    addAtLeast(k, ...vars) {\n        for (const v of vars)\n            assertBinary(v, 'addAtLeast()');\n        this.addConstraint(sum(...vars).geq(k));\n    }\n    /** Adds a cardinality constraint: exactly k of the given variables are 1. */\n    addExactly(k, ...vars) {\n        for (const v of vars)\n            assertBinary(v, 'addExactly()');\n        this.addConstraint(sum(...vars).eq(k));\n    }\n    /**\n     * Adds an indicator constraint: when delta equals the active value, the\n     * given constraint is enforced via Big-M relaxation.\n     */\n    addIndicator(delta, constraint, options) {\n        assertBinary(delta, 'addIndicator()');\n        const active = options?.active ?? 1;\n        const { expr, sense, rhs } = constraint;\n        if (sense === '<=' || sense === '=') {\n            const M = options?.bigM ?? this.computeBigM(expr, rhs, '<=', 'addIndicator()');\n            if (active === 1) {\n                this.addConstraint(expr.plus(delta.times(M)).leq(rhs + M));\n            }\n            else {\n                this.addConstraint(expr.minus(delta.times(M)).leq(rhs));\n            }\n        }\n        if (sense === '>=' || sense === '=') {\n            const M = options?.bigM ?? this.computeBigM(expr, rhs, '>=', 'addIndicator()');\n            if (active === 1) {\n                this.addConstraint(expr.minus(delta.times(M)).geq(rhs - M));\n            }\n            else {\n                this.addConstraint(expr.plus(delta.times(M)).geq(rhs));\n            }\n        }\n    }\n    /**\n     * Returns a variable equal to the absolute value of the given expression,\n     * using sign decomposition with a boolean selector variable.\n     */\n    abs(expr, options) {\n        const e = expr instanceof Var ? expr.times(1) : expr;\n        const { lb: L, ub: U } = options?.bigM != null\n            ? { lb: -options.bigM, ub: options.bigM }\n            : this.finiteBounds(e, 'abs()');\n        const posMax = Math.max(U, 0);\n        const negMax = Math.max(-L, 0);\n        const xPlus = this.numVar(0, posMax);\n        const xMinus = this.numVar(0, negMax);\n        const delta = this.boolVar();\n        const t = this.numVar(0, Math.max(posMax, negMax));\n        this.addConstraint(e.minus(xPlus).plus(xMinus).eq(0));\n        this.addConstraint(xPlus.plus(xMinus).minus(t).eq(0));\n        this.addConstraint(xPlus.minus(delta.times(posMax)).leq(0));\n        this.addConstraint(xMinus.plus(delta.times(negMax)).leq(negMax));\n        return t;\n    }\n    /**\n     * Returns a variable equal to the maximum of the given expressions, using\n     * Big-M with boolean selectors.\n     */\n    max(exprs, options) {\n        if (exprs.length === 0)\n            throw new Error('max() requires at least 1 expression');\n        if (exprs.length === 1) {\n            const e = exprs[0];\n            if (e instanceof Var)\n                return e;\n            const t = this.numVar(-Infinity, Infinity);\n            this.addConstraint(e.minus(t).eq(0));\n            return t;\n        }\n        const es = exprs.map((e) => (e instanceof Var ? e.times(1) : e));\n        const bounds = es.map((e) => options?.bigM != null\n            ? { lb: -options.bigM, ub: options.bigM }\n            : this.finiteBounds(e, 'max()'));\n        const maxUb = Math.max(...bounds.map((b) => b.ub));\n        const minLb = Math.min(...bounds.map((b) => b.lb));\n        const deltas = es.map(() => this.boolVar());\n        const t = this.numVar(minLb, maxUb);\n        for (let i = 0; i < es.length; i++) {\n            const Mi = maxUb - bounds[i].lb;\n            this.addConstraint(t.minus(es[i]).geq(0));\n            this.addConstraint(t.minus(es[i]).plus(deltas[i].times(Mi)).leq(Mi));\n        }\n        this.addConstraint(sum(...deltas).eq(1));\n        return t;\n    }\n    /**\n     * Returns a variable equal to the minimum of the given expressions, using\n     * Big-M with boolean selectors.\n     */\n    min(exprs, options) {\n        if (exprs.length === 0)\n            throw new Error('min() requires at least 1 expression');\n        if (exprs.length === 1) {\n            const e = exprs[0];\n            if (e instanceof Var)\n                return e;\n            const t = this.numVar(-Infinity, Infinity);\n            this.addConstraint(e.minus(t).eq(0));\n            return t;\n        }\n        const es = exprs.map((e) => (e instanceof Var ? e.times(1) : e));\n        const bounds = es.map((e) => options?.bigM != null\n            ? { lb: -options.bigM, ub: options.bigM }\n            : this.finiteBounds(e, 'min()'));\n        const maxUb = Math.max(...bounds.map((b) => b.ub));\n        const minLb = Math.min(...bounds.map((b) => b.lb));\n        const t = this.numVar(minLb, maxUb);\n        const deltas = es.map(() => this.boolVar());\n        for (let i = 0; i < es.length; i++) {\n            const Mi = bounds[i].ub - minLb;\n            this.addConstraint(t.minus(es[i]).leq(0));\n            this.addConstraint(t.minus(es[i]).minus(deltas[i].times(Mi)).geq(-Mi));\n        }\n        this.addConstraint(sum(...deltas).eq(1));\n        return t;\n    }\n    /**\n     * Returns a variable equal to the product of two variables. Automatically\n     * selects the formulation based on variable types.\n     */\n    product(x, y, options) {\n        const xBin = isBinary(x);\n        const yBin = isBinary(y);\n        if (xBin && yBin) {\n            return this.and(x, y);\n        }\n        if (!xBin && !yBin) {\n            throw new Error('product() requires at least one binary variable; ' +\n                'for continuous*continuous use McCormick envelopes (not yet supported)');\n        }\n        const [delta, z] = xBin ? [x, y] : [y, x];\n        const { lb: L, ub: U } = options?.bigM != null\n            ? { lb: -options.bigM, ub: options.bigM }\n            : this.finiteBounds(z, 'product()');\n        const w = this.numVar(Math.min(L, 0), Math.max(U, 0));\n        this.addConstraint(w.minus(delta.times(U)).leq(0));\n        this.addConstraint(w.minus(delta.times(L)).geq(0));\n        this.addConstraint(w.minus(z).minus(delta.times(L)).leq(-L));\n        this.addConstraint(w.minus(z).minus(delta.times(U)).geq(-U));\n        return w;\n    }\n    /**\n     * Creates a semi-continuous variable that is either 0 or in [lb, ub].\n     * Requires 0 < lb <= ub.\n     */\n    semiContVar(lb, ub, name) {\n        if (lb <= 0 || ub < lb) {\n            throw new Error('semiContVar(): requires 0 < lb <= ub');\n        }\n        const x = this.numVar(0, ub, name);\n        const delta = this.boolVar();\n        this.addConstraint(x.minus(delta.times(lb)).geq(0));\n        this.addConstraint(x.minus(delta.times(ub)).leq(0));\n        return x;\n    }\n    /**\n     * Returns quotient and remainder variables for integer division of expr by d.\n     * Requires expr >= 0 with finite upper bound, and d a positive integer.\n     */\n    divMod(expr, d) {\n        if (!Number.isInteger(d) || d <= 0) {\n            throw new Error('divMod(): d must be a positive integer');\n        }\n        const e = expr instanceof Var ? expr.times(1) : expr;\n        const { lb, ub } = this.finiteBounds(e, 'divMod()');\n        if (lb < 0) {\n            throw new Error('divMod(): expression must be non-negative');\n        }\n        const q = this.intVar(0, Math.floor(ub / d));\n        const r = this.intVar(0, d - 1);\n        this.addConstraint(e.minus(q.times(d)).minus(r).eq(0));\n        return { quotient: q, remainder: r };\n    }\n    /** Enforces that at least one of the two constraints holds. */\n    addEitherOr(c1, c2, options) {\n        const delta = this.boolVar();\n        this.addIndicator(delta, c1, { active: 0, bigM: options?.bigM });\n        this.addIndicator(delta, c2, { active: 1, bigM: options?.bigM });\n    }\n    /**\n     * Returns a binary variable delta where delta=1 iff the constraint is satisfied.\n     * Supports <=, >=, and = senses.\n     */\n    reify(constraint, options) {\n        const { expr, sense, rhs } = constraint;\n        if (sense === '<=') {\n            return this.reifyLeqInternal(expr, rhs, options);\n        }\n        if (sense === '>=') {\n            return this.reifyLeqInternal(expr.neg(), -rhs, options);\n        }\n        return this.reifyEqInternal(expr, rhs, options);\n    }\n    reifyLeqInternal(expr, rhs, options) {\n        const { lb, ub } = options?.bigM != null\n            ? { lb: -options.bigM + rhs, ub: options.bigM + rhs }\n            : this.finiteBounds(expr, 'reify()');\n        const M = ub - rhs;\n        const m = lb - rhs;\n        const eps = options?.epsilon ?? this.defaultEpsilon(expr, rhs);\n        const delta = this.boolVar();\n        this.addConstraint(expr.plus(delta.times(M)).leq(rhs + M));\n        this.addConstraint(expr.minus(delta.times(m - eps)).geq(rhs + eps));\n        return delta;\n    }\n    reifyEqInternal(expr, rhs, options) {\n        const { lb, ub } = options?.bigM != null\n            ? { lb: -options.bigM + rhs, ub: options.bigM + rhs }\n            : this.finiteBounds(expr, 'reify()');\n        const Mpos = ub - rhs;\n        const Mneg = rhs - lb;\n        const M = Math.max(Mpos, Mneg);\n        const eps = options?.epsilon ?? this.defaultEpsilon(expr, rhs);\n        const delta = this.boolVar();\n        const mu = this.boolVar();\n        this.addConstraint(expr.plus(delta.times(M)).leq(rhs + M));\n        this.addConstraint(expr.minus(delta.times(M)).geq(rhs - M));\n        this.addConstraint(expr.plus(delta.times(M + eps)).plus(mu.times(M + eps)).geq(rhs + eps));\n        this.addConstraint(expr.minus(delta.times(M + eps)).plus(mu.times(M + eps)).leq(rhs - eps + (M + eps)));\n        return delta;\n    }\n    defaultEpsilon(expr, rhs) {\n        return isIntegral(expr) && Number.isInteger(rhs) ? 1 : 1e-6;\n    }\n    computeBigM(expr, rhs, sense, context) {\n        const { lb, ub } = this.finiteBounds(expr, context);\n        return sense === '<=' ? ub - rhs : rhs - lb;\n    }\n    finiteBounds(expr, context) {\n        const b = exprBounds(expr);\n        if (!isFinite(b.lb) || !isFinite(b.ub)) {\n            throw new Error(`${context}: cannot auto-compute Big-M because expression has infinite bounds. ` +\n                'Either bound all variables or provide an explicit { bigM } option.');\n        }\n        return b;\n    }\n    /** Prints the model in the specified format (defaults to LP). */\n    print(format = 'lp') {\n        const input = {\n            objective: this.objective,\n            sense: this.sense,\n            constraints: this.constraints,\n            variables: this.variables,\n        };\n        return format === 'mps' ? toMPSFormat(input) : toLPFormat(input);\n    }\n    /** Solves the model and returns the solution. */\n    async solve(options) {\n        const lpString = this.print();\n        const highs = await HiGHS$1.create(options);\n        try {\n            await highs.parse(lpString, 'lp');\n            const result = await highs.solve();\n            return new Solution(result);\n        }\n        finally {\n            highs.free();\n        }\n    }\n}\n\n/** HiGHS solver with Node.js-specific file reading support. */\nclass HiGHS extends HiGHS$1 {\n    /** Reads a problem from a file path. The format is inferred from the extension. */\n    async readProblem(path) {\n        const content = readFileSync(path, 'utf-8');\n        const ext = path.split('.').pop() || 'lp';\n        await this.parse(content, ext);\n    }\n    static async create(options) {\n        const base = await HiGHS$1.create(options);\n        return Object.setPrototypeOf(base, HiGHS.prototype);\n    }\n}\n\nexport { Constraint, HiGHS, LinExpr, Model, Solution, Var, exprBounds, isIntegral, sum };\n//# sourceMappingURL=index.node.js.map\n"],"names":["readFileSync"],"mappings":"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"}