"""
This type stub file was generated by pyright.
"""

import json
from typing import Dict, List, Optional, Type, Union
from .choco_api import CHOCO_CMD
from .coin_api import COINMP_DLL, COIN_CMD, CYLP, PULP_CBC_CMD, YAPOSIB
from .copt_api import COPT, COPT_CMD, COPT_DLL
from .core import LpSolver, LpSolver_CMD, PulpSolverError
from .cplex_api import CPLEX, CPLEX_CMD, CPLEX_PY
from .glpk_api import GLPK, GLPK_CMD, PYGLPK
from .gurobi_api import GUROBI, GUROBI_CMD
from .highs_api import HiGHS, HiGHS_CMD
from .mipcl_api import MIPCL_CMD
from .mosek_api import MOSEK
from .sas_api import SAS94, SASCAS, SASsolver
from .scip_api import FSCIP, FSCIP_CMD, SCIP, SCIP_CMD, SCIP_PY
from .xpress_api import XPRESS, XPRESS_CMD, XPRESS_PY
from .cuopt_api import CUOPT

"""
This type stub file was generated by pyright.
"""
_all_solvers: List[Type[LpSolver]] = ...
LpSolverDefault: Optional[Union[PULP_CBC_CMD, GLPK_CMD, COIN_CMD]] = ...
if PULP_CBC_CMD().available():
    LpSolverDefault = ...
else:
    LpSolverDefault = ...
def getSolver(solver: str, *args, **kwargs) -> LpSolver:
    """
    Instantiates a solver from its name

    :param str solver: solver name to create
    :param args: additional arguments to the solver
    :param kwargs: additional keyword arguments to the solver
    :return: solver of type :py:class:`LpSolver`
    """
    ...

def getSolverFromDict(data: Dict[str, Union[str, bool, float, int]]) -> LpSolver:
    """
    Instantiates a solver from a dictionary with its data

    :param dict data: a dictionary with, at least an "solver" key with the name
        of the solver to create
    :return: a solver of type :py:class:`LpSolver`
    :raises PulpSolverError: if the dictionary does not have the "solver" key
    :rtype: LpSolver
    """
    ...

def getSolverFromJson(filename: str) -> LpSolver:
    """
    Instantiates a solver from a json file with its data

    :param str filename: name of the json file to read
    :return: a solver of type :py:class:`LpSolver`
    :rtype: LpSolver
    """
    ...

def listSolvers(onlyAvailable: bool = ...) -> List[str]:
    """
    List the names of all the existing solvers in PuLP

    :param bool onlyAvailable: if True, only show the available solvers
    :return: list of solver names
    :rtype: list
    """
    ...

