def solver(self, value): not_valid_interface = SolverNotFound( '%s is not a valid solver interface. Pick from %s, or specify an ' 'optlang interface (e.g. optlang.glpk_interface).' % ( value, list(solvers.keys()))) if isinstance(value, six.string_types): try: interface = solvers[interface_to_str(value)] except KeyError: raise not_valid_interface elif isinstance(value, types.ModuleType) and hasattr(value, 'Model'): interface = value elif isinstance(value, optlang.interface.Model): interface = value.interface else: raise not_valid_interface # Do nothing if the solver did not change if self.problem == interface: return self._solver = interface.Model.clone(self._solver)
def __init__(self, appdata: CnaData): QDialog.__init__(self) self.setWindowTitle("Configure COBRApy") self.appdata = appdata self.layout = QVBoxLayout() # allow MILP solvers only? avail_solvers = list(set(solvers.keys()) - {'scipy'}) # SCIPY currently not even usable for FBA h2 = QHBoxLayout() label = QLabel("Default solver:\n(set when loading a model)") h2.addWidget(label) self.default_solver = QComboBox() self.default_solver.addItems(avail_solvers) self.default_solver.setCurrentIndex(avail_solvers.index(interface_to_str(cobra.Configuration().solver))) h2.addWidget(self.default_solver) self.layout.addItem(h2) h9 = QHBoxLayout() label = QLabel("Solver for current model:") h9.addWidget(label) self.current_solver = QComboBox() self.current_solver.addItems(avail_solvers) self.current_solver.setCurrentIndex(avail_solvers.index(interface_to_str(appdata.project.cobra_py_model.problem))) h9.addWidget(self.current_solver) self.layout.addItem(h9) h7 = QHBoxLayout() label = QLabel( "Number of processes for multiprocessing (e.g. FVA):") h7.addWidget(label) self.num_processes = QLineEdit() self.num_processes.setFixedWidth(100) self.num_processes.setText(str(cobra.Configuration().processes)) validator = QIntValidator(1, cpu_count(), self) self.num_processes.setValidator(validator) h7.addWidget(self.num_processes) self.layout.addItem(h7) h8 = QHBoxLayout() label = QLabel( "Default tolerance:\n(set when loading a model)") h8.addWidget(label) self.default_tolerance = QLineEdit() self.default_tolerance.setFixedWidth(100) self.default_tolerance.setText(str(cobra.Configuration().tolerance)) validator = QDoubleValidator(self) validator.setBottom(1e-9) # probably a reasonable consensus value self.default_tolerance.setValidator(validator) h8.addWidget(self.default_tolerance) self.layout.addItem(h8) h10 = QHBoxLayout() label = QLabel( "Tolerance for current model:") h10.addWidget(label) self.current_tolerance = QLineEdit() self.current_tolerance.setFixedWidth(100) self.current_tolerance.setText(str(self.appdata.project.cobra_py_model.tolerance)) validator = QDoubleValidator(self) validator.setBottom(0) self.current_tolerance.setValidator(validator) h10.addWidget(self.current_tolerance) self.layout.addItem(h10) l2 = QHBoxLayout() self.button = QPushButton("Apply Changes") self.cancel = QPushButton("Close") l2.addWidget(self.button) l2.addWidget(self.cancel) self.layout.addItem(l2) self.setLayout(self.layout) self.cancel.clicked.connect(self.reject) self.button.clicked.connect(self.apply)
"""Test optimization functions.""" from .fixtures import community import cobra from cobra.util.solver import solvers import numpy as np import pytest from micom.solution import CommunitySolution stable = ["glpk", "cplex"] solvers = [s for s in solvers.keys() if s in stable] def test_community_objective(community): x = community.optimize() y = community.optimize(fluxes=True) assert isinstance(x, CommunitySolution) assert np.allclose(x.growth_rate, 0.873922) assert np.allclose(x.members.growth_rate.dropna().sum(), 4 * 0.873922) assert isinstance(y, CommunitySolution) assert y.fluxes.shape[0] == 5 def test_individual_objective(community): growth_rates = community.optimize_all() assert np.allclose(growth_rates, 4 * 0.873922)