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
10 changes: 6 additions & 4 deletions dingo/PolytopeSampler.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,19 @@ def get_polytope(self):
max_objective,
) = self._metabolic_network.fba()

if (
self._parameters["remove_redundant_facets"]
):
solver_name = self._parameters["solver"]
if solver_name is None:
solver_name = self._metabolic_network.parameters["solver"]

if self._parameters["remove_redundant_facets"]:

A, b, Aeq, beq = remove_redundant_facets(
self._metabolic_network.lb,
self._metabolic_network.ub,
self._metabolic_network.S,
self._metabolic_network.objective_function,
self._parameters["opt_percentage"],
self._parameters["solver"],
solver_name,
)
else:

Expand Down
38 changes: 15 additions & 23 deletions dingo/pyoptinterface_based_impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@

default_solver = "highs"


def resolve_solver_name(solver_name=None):
if solver_name is None:
return default_solver
return solver_name

def set_default_solver(solver_name):
global default_solver
default_solver = solver_name
Expand Down Expand Up @@ -48,8 +54,7 @@ def fba(lb, ub, S, c, solver_name=None):
optimum_value = 0
optimum_sol = np.zeros(n)
try:
if solver_name is None:
solver_name = default_solver
solver_name = resolve_solver_name(solver_name)
SOLVER = get_solver(solver_name)
# Create a model
model = SOLVER.Model()
Expand Down Expand Up @@ -79,12 +84,8 @@ def fba(lb, ub, S, c, solver_name=None):
optimum_sol[i] = model.get_value(v[i])
return optimum_sol, optimum_value

except poi.TerminationStatusCode.NUMERICAL_ERROR as e:
print(f"A numerical error occurred: {e}")
except poi.TerminationStatusCode.OTHER_ERROR as e:
print(f"An error occurred: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
raise RuntimeError(f"FBA failed while using solver '{solver_name}'.") from e


def fva(lb, ub, S, c, opt_percentage=100, solver_name=None):
Expand Down Expand Up @@ -125,8 +126,7 @@ def fva(lb, ub, S, c, opt_percentage=100, solver_name=None):
)

try:
if solver_name is None:
solver_name = default_solver
solver_name = resolve_solver_name(solver_name)
SOLVER = get_solver(solver_name)
# Create a model
model = SOLVER.Model()
Expand Down Expand Up @@ -186,12 +186,8 @@ def fva(lb, ub, S, c, opt_percentage=100, solver_name=None):
max_biomass_objective,
)

except poi.TerminationStatusCode.NUMERICAL_ERROR as e:
print(f"A numerical error occurred: {e}")
except poi.TerminationStatusCode.OTHER_ERROR as e:
print(f"An error occurred: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
raise RuntimeError(f"FVA failed while using solver '{solver_name}'.") from e


def inner_ball(A, b, solver_name=None):
Expand All @@ -218,8 +214,7 @@ def inner_ball(A, b, solver_name=None):
column = np.asarray(extra_column)
A_expand = np.c_[A, column]

if solver_name is None:
solver_name = default_solver
solver_name = resolve_solver_name(solver_name)
SOLVER = get_solver(solver_name)
model = SOLVER.Model()
model.set_model_attribute(poi.ModelAttribute.Silent, True)
Expand Down Expand Up @@ -262,8 +257,7 @@ def set_model(n, lb, ub, Aeq, beq, A, b, solver_name=None):
but without an objective function.
"""
# Create a model
if solver_name is None:
solver_name = default_solver
solver_name = resolve_solver_name(solver_name)
SOLVER = get_solver(solver_name)
model = SOLVER.Model()
model.set_model_attribute(poi.ModelAttribute.Silent, True)
Expand Down Expand Up @@ -488,9 +482,7 @@ def remove_redundant_facets(lb, ub, S, c, opt_percentage=100, solver_name=None):
A_res = np.ascontiguousarray(A_res, dtype="float")
return A_res, b_res, Aeq_res, beq_res

except poi.TerminationStatusCode.NUMERICAL_ERROR as e:
print(f"A numerical error occurred: {e}")
except poi.TerminationStatusCode.OTHER_ERROR as e:
print(f"An error occurred: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
raise RuntimeError(
f"Redundant facet removal failed while using solver '{solver_name}'."
) from e