Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cpmpy/solvers/TEMPLATE.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def native_model(self):
"""
return self.TPL_model

def solve(self, time_limit=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, **kwargs):
"""
Call the TEMPLATE solver

Expand Down Expand Up @@ -469,7 +469,7 @@ def add(self, cpm_expr_orig):
# Other functions from SolverInterface that you can overwrite:
# solveAll, solution_hint, get_core

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
A shorthand to (efficiently) compute all (optimal) solutions, map them to CPMpy and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/choco.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def native_model(self):
"""
return self.chc_model

def solve(self, time_limit=None, **kwargs):
def solve(self, time_limit: Optional[float]=None, **kwargs):
"""
Call the Choco solver

Expand Down Expand Up @@ -230,7 +230,7 @@ def solve(self, time_limit=None, **kwargs):

return has_sol

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all (optimal) solutions, map them to CPMpy and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/cplex.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ def native_model(self):
"""
return self.cplex_model

def solve(self, time_limit=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, **kwargs):
"""
Call the cplex solver

Expand Down Expand Up @@ -509,7 +509,7 @@ def solution_hint(self, cpm_vars, vals):

self.cplex_model.add_mip_start(warmstart)

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit: Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/cpo.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def native_model(self):
"""
return self.cpo_model

def solve(self, time_limit=None, solution_callback=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, solution_callback=None, **kwargs):
"""
Call the CP Optimizer solver

Expand Down Expand Up @@ -253,7 +253,7 @@ def solve(self, time_limit=None, solution_callback=None, **kwargs):

return has_sol

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
A shorthand to (efficiently) compute all (optimal) solutions, map them to CPMpy and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/exact.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def _fillVars(self):
for cpm_var, val in zip(lst_vars,exact_vals):
cpm_var._value = bool(val) if isinstance(cpm_var, _BoolVarImpl) else val # xct value is always an int

def solve(self, time_limit=None, assumptions=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, assumptions=None, **kwargs):
"""
Call Exact

Expand Down Expand Up @@ -274,7 +274,7 @@ def _update_time(self, timelim, start, end):
if timelim == 0: timelim = -1
return timelim

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally, display the solutions.

Expand Down
5 changes: 3 additions & 2 deletions cpmpy/solvers/gcs.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ def supported():
# try to import the package
try:
import gcspy
pkg_resources.require("gcspy>=0.1.8")
return True
except ModuleNotFoundError:
return False
Expand Down Expand Up @@ -148,7 +149,7 @@ def native_model(self):
def has_objective(self):
return self.objective_var is not None

def solve(self, time_limit=None, prove=False, proof_name=None, proof_location=".",
def solve(self, time_limit:Optional[float]=None, prove=False, proof_name=None, proof_location=".",
verify=False, verify_time_limit=None, veripb_args = [], display_verifier_output=True, **kwargs):
"""
Run the Glasgow Constraint Solver, get just one (optimal) solution.
Expand Down Expand Up @@ -250,7 +251,7 @@ def solve(self, time_limit=None, prove=False, proof_name=None, proof_location=".

return has_sol

def solveAll(self, time_limit=None, display=None, solution_limit=None, call_from_model=False,
def solveAll(self, time_limit:Optional[float]=None, display=None, solution_limit=None, call_from_model=False,
prove=False, proof_name=None, proof_location=".", verify=False, verify_time_limit=None, veripb_args = [],
display_verifier_output=True, **kwargs):
"""
Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/gurobi.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def native_model(self):
return self.grb_model


def solve(self, time_limit=None, solution_callback=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, solution_callback=None, **kwargs):
"""
Call the gurobi solver

Expand Down Expand Up @@ -499,7 +499,7 @@ def solution_hint(self, cpm_vars, vals):
for cpm_var, val in zip(cpm_vars, vals):
self.solver_var(cpm_var).setAttr("VarHintVal", val)

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/hexaly.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def __init__(self, cpm_model=None, subsolver=None):
def native_model(self):
return self.hex_model

def solve(self, time_limit=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, **kwargs):
"""
Call the Hexaly solver

Expand Down Expand Up @@ -397,7 +397,7 @@ def _hex_expr(self, cpm_expr):
raise NotImplementedError(f"Unexpected expression {cpm_expr}")


def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
A shorthand to (efficiently) compute all solutions, map them to CPMpy and optionally display the solutions.

Expand Down
8 changes: 4 additions & 4 deletions cpmpy/solvers/minizinc.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def native_model(self):
return self.mzn_model


def _pre_solve(self, time_limit=None, **kwargs):
def _pre_solve(self, time_limit:Optional[float]=None, **kwargs):
""" shared by solve() and solveAll() """
import minizinc

Expand All @@ -306,7 +306,7 @@ def _pre_solve(self, time_limit=None, **kwargs):
kwargs['output-time'] = True # required for time getting
return (kwargs, mzn_inst)

def solve(self, time_limit=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, **kwargs):
"""
Call the MiniZinc solver

Expand Down Expand Up @@ -439,7 +439,7 @@ def mzn_time_to_seconds(self, time):
else:
raise NotImplementedError # unexpected type for time

async def _solveAll(self, display=None, time_limit=None, solution_limit=None, **kwargs):
async def _solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, **kwargs):
""" Special 'async' function because mzn.solutions() is async """

# ensure all vars are known to solver
Expand Down Expand Up @@ -813,7 +813,7 @@ def zero_based(array):
# default (incl name-compatible global constraints...)
return "{}([{}])".format(expr.name, ",".join(args_str))

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally display the solutions.

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/ortools.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def native_model(self):
return self.ort_model


def solve(self, time_limit=None, assumptions=None, solution_callback=None, **kwargs):
def solve(self, time_limit:Optional[float]=None, assumptions=None, solution_callback=None, **kwargs):
"""
Call the CP-SAT solver

Expand Down Expand Up @@ -277,7 +277,7 @@ def solve(self, time_limit=None, assumptions=None, solution_callback=None, **kwa
cpm_var._value = None
return has_sol

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
A shorthand to (efficiently) compute all solutions, map them to CPMpy and optionally display the solutions.

Expand Down
2 changes: 1 addition & 1 deletion cpmpy/solvers/pindakaas.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def __init__(self, cpm_model=None, subsolver=None):
def native_model(self):
return self.pdk_solver

def solve(self, time_limit=None, assumptions=None):
def solve(self, time_limit:Optional[float]=None, assumptions=None):
"""
Solve the encoded CPMpy model given optional time limit and assumptions, returning whether a solution was found.

Expand Down
2 changes: 1 addition & 1 deletion cpmpy/solvers/pumpkin.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def native_model(self):
return self.pum_solver


def solve(self, time_limit=None, prove=False, proof_name="proof.drcp", proof_location=".", assumptions=None):
def solve(self, time_limit:Optional[float]=None, prove=False, proof_name="proof.drcp", proof_location=".", assumptions=None):
"""
Call the Pumpkin solver

Expand Down
2 changes: 1 addition & 1 deletion cpmpy/solvers/pysat.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ def native_model(self):
return self.pysat_solver


def solve(self, time_limit=None, assumptions=None):
def solve(self, time_limit:Optional[float]=None, assumptions=None):
"""
Call the PySAT solver

Expand Down
4 changes: 2 additions & 2 deletions cpmpy/solvers/pysdd.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ def native_model(self):
"""
return self.pysdd_root

def solve(self, time_limit=None, assumptions=None):
def solve(self, time_limit:Optional[float]=None, assumptions=None):
"""
See if an arbitrary model exists

Expand Down Expand Up @@ -181,7 +181,7 @@ def solve(self, time_limit=None, assumptions=None):

return has_sol

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally display the solutions.

Expand Down
13 changes: 3 additions & 10 deletions cpmpy/solvers/solver_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,19 +138,12 @@ def objective(self, expr, minimize):
def status(self):
return self.cpm_status

def solve(self, model, time_limit=None):
def solve(self,time_limit:Optional[float]=None):
"""
Build the CPMpy model into solver-supported model ready for solving
and returns the answer (True/False/objective.value())
Call the underlying solver.

Overwrites self.cpm_status

:param model: CPMpy model to be parsed.
:type model: Model

:param time_limit: optional, time limit in seconds
:type time_limit: int or float

:return: Bool:
- True if a solution is found (not necessarily optimal, e.g. could be after timeout)
- False if no solution is found
Expand Down Expand Up @@ -236,7 +229,7 @@ def __add__(self, cpm_expr):

# OPTIONAL functions

def solveAll(self, display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs):
def solveAll(self, display=None, time_limit:Optional[float]=None, solution_limit=None, call_from_model=False, **kwargs):
"""
Compute all solutions and optionally display the solutions.

Expand Down
2 changes: 1 addition & 1 deletion cpmpy/solvers/z3.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def native_model(self):
return self.z3_solver


def solve(self, time_limit=None, assumptions=[], **kwargs):
def solve(self, time_limit:Optional[float]=None, assumptions=[], **kwargs):
"""
Call the z3 solver

Expand Down
Loading