def set_decomposition_tree(self, tree): if not isinstance(tree, decomposition_tree.DecompositionTree): raise TypeError() self._decomposition_tree = tree for model in tree.get_models(): node = tree.node[model.get_name()] sql_script = _MODEL_SCHEMA_TEMPLATE.format( table_name=model.get_name(), columns=','.join(['%s INTEGER DEFAULT NULL' % name for name in node.get_shared_variables()]), key_columns=','.join(node.get_shared_variables()) ) for dep_node in tree.predecessors(node.get_name()): edge = tree.get_edge_between(dep_node, node.get_name()) shared_vars = edge.get_shared_variables() sql_script += _INDEX_TEMPLATE.format( index='_'.join(shared_vars) + '_index', name=model.get_name(), shared_vars=', '.join(shared_vars)) try: conn = self.get_data_store().get_connection() conn.executescript(sql_script) self.get_data_store().release_connection(conn) except sqlite3.OperationalError, e: logging.warning('SQLite script %s: %s' % (sql_script, e)) raise Error()
def check_columns_values(self, columns_values): """Checks whether the given columns values are correct. :param columns_values: A list of column values. :returns: ``True`` or ``False``. """ raise NotImplementedError() # TODO: solution can be a tuple, list or sparse.base.spmatrix if type(columns_values) in (tuple, list): columns_values = numpy.array(columns_values) if columns_values.shape[0] != self.get_num_columns(): logging.warning("Number of columns values doesn't match number of " "columns: %d != %d", columns_values.shape[0], self.get_num_columns()) return False v = self.rows_coefficients.dot(columns_values) for i in xrange(len(v)): # TODO: add sense. if not v[i] <= self.rows_rhs[i]: return False return True
# Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import sys from les.utils import logging from les.backend_solvers import backend_solvers_pb2 from les.backend_solvers.knapsack_solver import fractional_knapsack_solver try: from les.backend_solvers import scip except ImportError, e: logging.warning('SCIP is not supported: %s', e) _SOLVERS_TABLE = {} # Sync backend solvers IDs. SCIP_ID = backend_solvers_pb2.SCIP FRAKTIONAL_KNAPSACK_SOLVER_ID = getattr(backend_solvers_pb2, 'FRAKTIONAL_KNAPSACK_SOLVER') _DEFAULT_SOLVERS_TABLE = {} if 'les.backend_solvers.scip' in sys.modules: _DEFAULT_SOLVERS_TABLE[SCIP_ID] = scip.SCIP _SOLVERS_TABLE.update(_DEFAULT_SOLVERS_TABLE) _RELAXATION_SOLVERS_TABLE = { FRAKTIONAL_KNAPSACK_SOLVER_ID: fractional_knapsack_solver.FractionalKnapsackSolver,