Exemplo n.º 1
0
 def setUp(self):
     self.model = Model()
     x = Variable('x', lb=0, ub=10)
     y = Variable('y', lb=0, ub=10)
     constr = Constraint(1. * x + y, lb=3, name="constr1")
     obj = Objective(2 * x + y)
     self.model.add(x)
     self.model.add(y)
     self.model.add(constr)
     self.model.objective = obj
Exemplo n.º 2
0
 def test_variable_independence(self):
     model = Model()
     x = Variable('x', lb=0, ub=20)
     self.assertNotEqual(id(x), id(self.model.variables['x']))
     y = Variable('y', lb=0, ub=10)
     constr = Constraint(1. * x + y, lb=3, name="constr1")
     model.add(constr)
     self.assertNotEqual(id(self.model.variables['x']), id(model.variables['x']))
     self.assertNotEqual(id(self.model.variables['y']), id(model.variables['y']))
     self.assertNotEqual(self.model.variables['y'].problem, model)
     self.assertNotEqual(self.model.variables['x'].problem, model)
     x.lb = -10
     self.assertNotEqual(self.model.variables['x'].lb, model.variables['x'].lb)
Exemplo n.º 3
0
 def test_variable_independence(self):
     model = Model()
     x = Variable('x', lb=0, ub=20)
     self.assertNotEqual(id(x), id(self.model.variables['x']))
     y = Variable('y', lb=0, ub=10)
     constr = Constraint(1. * x + y, lb=3, name="constr1")
     model.add(constr)
     self.assertNotEqual(id(self.model.variables['x']),
                         id(model.variables['x']))
     self.assertNotEqual(id(self.model.variables['y']),
                         id(model.variables['y']))
     self.assertNotEqual(self.model.variables['y'].problem, model)
     self.assertNotEqual(self.model.variables['x'].problem, model)
     x.lb = -10
     self.assertNotEqual(self.model.variables['x'].lb,
                         model.variables['x'].lb)
Exemplo n.º 4
0
 def setUp(self):
     self.model = Model()
     x = Variable('x', lb=0, ub=10)
     y = Variable('y', lb=0, ub=10)
     constr = Constraint(1. * x + y, lb=3, name="constr1")
     obj = Objective(2 * x + y)
     self.model.add(x)
     self.model.add(y)
     self.model.add(constr)
     self.model.objective = obj
Exemplo n.º 5
0
 def test_create_empty_model(self):
     model = Model()
     self.assertEqual(len(model.constraints), 0)
     self.assertEqual(len(model.variables), 0)
     self.assertEqual(model.objective.expression, 0)
Exemplo n.º 6
0
class TestModel(TestCase):
    def setUp(self):
        self.model = Model()
        x = Variable('x', lb=0, ub=10)
        y = Variable('y', lb=0, ub=10)
        constr = Constraint(1. * x + y, lb=3, name="constr1")
        obj = Objective(2 * x + y)
        self.model.add(x)
        self.model.add(y)
        self.model.add(constr)
        self.model.objective = obj

    def test_read_only_attributes(self):
        self.assertRaises(AttributeError, setattr, self.model, 'variables',
                          'Foo')
        self.assertRaises(AttributeError, setattr, self.model, 'constraints',
                          'Foo')
        self.assertRaises(AttributeError, setattr, self.model, 'status', 'Foo')

    def test_create_empty_model(self):
        model = Model()
        self.assertEqual(len(model.constraints), 0)
        self.assertEqual(len(model.variables), 0)
        self.assertEqual(model.objective.expression, 0)

    def test_add_variable(self):
        var = Variable('z')
        self.model.add(var)
        self.assertTrue(var in self.model.variables.values())
        self.assertEqual(self.model.variables.values().count(var), 1)
        self.assertEqual(self.model.variables['z'].problem, var.problem)
        var = Variable(
            'asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf',
            lb=-13)
        self.model.add(var)
        self.assertTrue(var in self.model.variables.values())
        self.assertEqual(self.model.variables['z'].lb, None)
        self.assertEqual(self.model.variables['z'].ub, None)
        self.assertEqual(
            self.model.variables[
                'asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf']
            .lb, -13)
        self.assertEqual(
            self.model.variables[
                'asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf']
            .ub, None)

    def test_add_variable_twice_raises(self):
        var = Variable('x')
        self.model.add(var)
        self.assertRaises(ContainerAlreadyContains, self.model.update)

    def test_remove_add_variable(self):
        var = self.model.variables[0]
        self.model.remove(var)
        self.model.add(var)
        self.model.update()

    def test_remove_add_remove_variable(self):
        var = self.model.variables[0]
        self.model.remove(var)
        self.model.add(var)
        # self.assertRaises(ContainerAlreadyContains, self.model.remove, var)

    def test_add_existing_variable(self):
        var = self.model.variables[0]
        self.model.add(var)
        self.assertRaises(Exception, self.model.update)

    def test_remove_constraint(self):
        self.model.remove('constr1')
        self.assertEqual(list(self.model.constraints), [])

    def test_add_remove_constraint(self):
        c = Constraint(self.model.variables.x + self.model.variables.y, lb=10)
        self.model.add(c)
        self.assertEqual(list(self.model.constraints),
                         [self.model.constraints['constr1'], c])
        self.model.remove(c)
        self.model.update()
        self.assertEqual(list(self.model.constraints),
                         [self.model.constraints['constr1']])

    def test_add_remove_collection(self):
        c = Constraint(self.model.variables.x + self.model.variables.y, lb=10)
        c2 = Constraint(3. * self.model.variables.x + self.model.variables.y,
                        lb=10)
        self.model.add([c, c2])
        self.assertEqual(list(self.model.constraints),
                         [self.model.constraints['constr1'], c, c2])
        self.model.remove([c, 'constr1', c2])
        self.assertEqual(list(self.model.constraints), [])

    def test_removing_objective_raises(self):
        self.assertRaises(TypeError, self.model.remove, self.model.objective)

    def test_removing_crap_raises(self):
        self.assertRaises(TypeError, self.model.remove, dict)

    def test_remove_variable_str(self):
        var = self.model.variables['y']
        self.model.remove(var.name)
        self.assertNotIn(var, self.model.variables.values())
        self.assertEqual(var.problem, None)
        self.assertEqual(
            self.model.__str__(),
            'Maximize\n2.0*x\nsubject to\nconstr1: 3 <= 1.0*x\nBounds\n0 <= x <= 10'
        )

    def test_number_objective(self):
        self.model.objective = Objective(0.)
        self.assertEqual(self.model.objective.__str__(), 'Maximize\n0')

    def test_add_differing_interface_type_raises(self):
        from optlang import glpk_interface as glpk
        x, y = glpk.Variable('x'), glpk.Variable('y')
        constraint = glpk.Constraint(x + y)
        objective = glpk.Objective(1. * x)
        self.assertRaises(TypeError, self.model.add, x)
        self.assertRaises(TypeError, self.model.add, constraint)
        self.assertRaises(TypeError, self.model.add, objective)

    def test_setting_binary_bounds(self):
        self.model.variables['x'].type = 'binary'
        self.assertEqual(self.model.variables['x'].lb, 0)
        self.assertEqual(self.model.variables['x'].ub, 1)

    def test_non_integer_bound_on_integer_variable_raises(self):
        self.model.variables['x'].type = 'integer'
        self.assertRaises(ValueError, setattr, self.model.variables['x'], 'lb',
                          3.3)

    def test_non_0_or_1_bound_on_binary_variable_raises(self):
        self.model.variables['x'].type = 'integer'
        self.assertRaises(ValueError, setattr, self.model.variables['x'], 'lb',
                          3.3)

    def test_false_objective_direction_raises(self):
        self.assertRaises(ValueError, setattr, self.model.objective,
                          'direction', 'neither_min_nor_max')

    def test_all_entities_point_to_correct_model(self):
        for variable in self.model.variables.values():
            self.assertEqual(variable.problem, self.model)
        for constraint in self.model.constraints:
            self.assertEqual(constraint.problem, self.model)
        self.assertEqual(self.model.objective.problem, self.model)

    def test_variable_independence(self):
        model = Model()
        x = Variable('x', lb=0, ub=20)
        self.assertNotEqual(id(x), id(self.model.variables['x']))
        y = Variable('y', lb=0, ub=10)
        constr = Constraint(1. * x + y, lb=3, name="constr1")
        model.add(constr)
        self.assertNotEqual(id(self.model.variables['x']),
                            id(model.variables['x']))
        self.assertNotEqual(id(self.model.variables['y']),
                            id(model.variables['y']))
        self.assertNotEqual(self.model.variables['y'].problem, model)
        self.assertNotEqual(self.model.variables['x'].problem, model)
        x.lb = -10
        self.assertNotEqual(self.model.variables['x'].lb,
                            model.variables['x'].lb)

    def test_primal_and_dual_values(self):
        model = self.model
        self.assertTrue(
            all([primal is None for primal in model.primal_values.values()]))
        self.assertTrue(
            all([
                constraint_primal is None
                for constraint_primal in model.constraint_values.values()
            ]))
        self.assertTrue(
            all([sp is None for sp in model.shadow_prices.values()]))
        self.assertTrue(
            all([rc is None for rc in model.reduced_costs.values()]))

    def test_interface(self):
        self.assertEqual(self.model.interface,
                         sys.modules["optlang.interface"])
Exemplo n.º 7
0
class TestModel(TestCase):
    def setUp(self):
        self.model = Model()
        x = Variable('x', lb=0, ub=10)
        y = Variable('y', lb=0, ub=10)
        constr = Constraint(1. * x + y, lb=3, name="constr1")
        obj = Objective(2 * x + y)
        self.model.add(x)
        self.model.add(y)
        self.model.add(constr)
        self.model.objective = obj

    def test_read_only_attributes(self):
        self.assertRaises(AttributeError, setattr, self.model, 'variables', 'Foo')
        self.assertRaises(AttributeError, setattr, self.model, 'constraints', 'Foo')
        self.assertRaises(AttributeError, setattr, self.model, 'status', 'Foo')

    def test_create_empty_model(self):
        model = Model()
        self.assertEqual(len(model.constraints), 0)
        self.assertEqual(len(model.variables), 0)
        self.assertEqual(model.objective.expression - 0, 0)

    def test_add_variable(self):
        var = Variable('z')
        self.model.add(var)
        self.assertTrue(var in self.model.variables.values())
        self.assertEqual(self.model.variables.values().count(var), 1)
        self.assertEqual(self.model.variables['z'].problem, var.problem)
        var = Variable('asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf', lb=-13)
        self.model.add(var)
        self.assertTrue(var in self.model.variables.values())
        self.assertEqual(self.model.variables['z'].lb, None)
        self.assertEqual(self.model.variables['z'].ub, None)
        self.assertEqual(self.model.variables['asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf'].lb,
                         -13)
        self.assertEqual(self.model.variables['asdfasdflkjasdflkjasdlkjsadflkjasdflkjasdlfkjasdlfkjasdlkfjasdf'].ub,
                         None)

    def test_add_variable_twice_raises(self):
        var = Variable('x')
        self.model.add(var)
        self.assertRaises(ContainerAlreadyContains, self.model.update)

    def test_remove_add_variable(self):
        var = self.model.variables[0]
        self.model.remove(var)
        self.model.add(var)
        self.model.update()

    def test_remove_add_remove_variable(self):
        var = self.model.variables[0]
        self.model.remove(var)
        self.model.add(var)
        # self.assertRaises(ContainerAlreadyContains, self.model.remove, var)

    def test_add_existing_variable(self):
        var = self.model.variables[0]
        self.model.add(var)
        self.assertRaises(Exception, self.model.update)

    def test_remove_constraint(self):
        self.model.remove('constr1')
        self.assertEqual(list(self.model.constraints), [])

    def test_add_remove_constraint(self):
        c = Constraint(self.model.variables.x + self.model.variables.y, lb=10)
        self.model.add(c)
        self.assertEqual(list(self.model.constraints), [self.model.constraints['constr1'], c])
        self.model.remove(c)
        self.model.update()
        self.assertEqual(list(self.model.constraints), [self.model.constraints['constr1']])

    def test_add_remove_collection(self):
        c = Constraint(self.model.variables.x + self.model.variables.y, lb=10)
        c2 = Constraint(3. * self.model.variables.x + self.model.variables.y, lb=10)
        self.model.add([c, c2])
        self.assertEqual(list(self.model.constraints), [self.model.constraints['constr1'], c, c2])
        self.model.remove([c, 'constr1', c2])
        self.assertEqual(list(self.model.constraints), [])

    def test_removing_objective_raises(self):
        self.assertRaises(TypeError, self.model.remove, self.model.objective)

    def test_removing_crap_raises(self):
        self.assertRaises(TypeError, self.model.remove, dict)

    def test_remove_variable_str(self):
        var = self.model.variables['y']
        self.model.remove(var.name)
        self.assertNotIn(var, self.model.variables.values())
        self.assertEqual(var.problem, None)
        self.assertEqual(self.model.objective.direction, "max")
        self.assertEqual(
            (self.model.objective.expression - (2.0 * self.model.variables.x)).expand() - 0, 0
        )
        self.assertEqual(len(self.model.variables), 1)
        self.assertEqual(len(self.model.constraints), 1)
        self.assertEqual((self.model.variables[0].lb, self.model.variables[0].ub), (0, 10))
        self.assertEqual(self.model.constraints[0].lb, 3)
        self.assertEqual(
            (self.model.constraints[0].expression - (1.0 * self.model.variables.x)).expand() - 0, 0
        )
        # self.assertEqual(self.model.__str__(), 'Maximize\n2.0*x\nsubject to\nconstr1: 3 <= 1.0*x\nBounds\n0 <= x <= 10')

    def test_number_objective(self):
        self.model.objective = Objective(0.)
        self.assertIn('Maximize\n0', self.model.objective.__str__())

    def test_add_differing_interface_type_raises(self):
        from optlang import glpk_interface as glpk
        x, y = glpk.Variable('x'), glpk.Variable('y')
        constraint = glpk.Constraint(x + y)
        objective = glpk.Objective(1. * x)
        self.assertRaises(TypeError, self.model.add, x)
        self.assertRaises(TypeError, self.model.add, constraint)
        self.assertRaises(TypeError, self.model.add, objective)

    def test_setting_binary_bounds(self):
        self.model.variables['x'].type = 'binary'
        self.assertEqual(self.model.variables['x'].lb, 0)
        self.assertEqual(self.model.variables['x'].ub, 1)

    def test_non_integer_bound_on_integer_variable_raises(self):
        self.model.variables['x'].type = 'integer'
        self.assertRaises(ValueError, setattr, self.model.variables['x'], 'lb', 3.3)

    def test_non_0_or_1_bound_on_binary_variable_raises(self):
        self.model.variables['x'].type = 'integer'
        self.assertRaises(ValueError, setattr, self.model.variables['x'], 'lb', 3.3)

    def test_false_objective_direction_raises(self):
        self.assertRaises(ValueError, setattr, self.model.objective, 'direction', 'neither_min_nor_max')

    def test_all_entities_point_to_correct_model(self):
        for variable in self.model.variables.values():
            self.assertEqual(variable.problem, self.model)
        for constraint in self.model.constraints:
            self.assertEqual(constraint.problem, self.model)
        self.assertEqual(self.model.objective.problem, self.model)

    def test_variable_independence(self):
        model = Model()
        x = Variable('x', lb=0, ub=20)
        self.assertNotEqual(id(x), id(self.model.variables['x']))
        y = Variable('y', lb=0, ub=10)
        constr = Constraint(1. * x + y, lb=3, name="constr1")
        model.add(constr)
        self.assertNotEqual(id(self.model.variables['x']), id(model.variables['x']))
        self.assertNotEqual(id(self.model.variables['y']), id(model.variables['y']))
        self.assertNotEqual(self.model.variables['y'].problem, model)
        self.assertNotEqual(self.model.variables['x'].problem, model)
        x.lb = -10
        self.assertNotEqual(self.model.variables['x'].lb, model.variables['x'].lb)

    def test_primal_and_dual_values(self):
        model = self.model
        self.assertTrue(all([primal is None for primal in model.primal_values.values()]))
        self.assertTrue(all([constraint_primal is None for constraint_primal in model.constraint_values.values()]))
        self.assertTrue(all([sp is None for sp in model.shadow_prices.values()]))
        self.assertTrue(all([rc is None for rc in model.reduced_costs.values()]))

    def test_interface(self):
        self.assertEqual(self.model.interface, sys.modules["optlang.interface"])
Exemplo n.º 8
0
 def setUp(self):
     self.model = Model()
     self.container = self.model.variables
Exemplo n.º 9
0
class ContainerTestCase(unittest.TestCase):
    def setUp(self):
        self.model = Model()
        self.container = self.model.variables

    def test_container_from_iterable(self):
        variables_iterable = [Variable("v" + str(i), lb=10, ub=100) for i in range(10000)]
        container = Container(variables_iterable)
        self.assertEqual(len(container), 10000)
        for index, variable in enumerate(variables_iterable):
            self.assertEqual(container[index], variable)
            self.assertEqual(container[variable.name], variable)

    def test_container_from_iterable_with_items_without_name_attribute_raise(self):
        variables_iterable = ['v' + str(i) for i in range(10000)]
        self.assertRaises(AttributeError, Container, variables_iterable)

    def test_container_append(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertEqual(len(self.container), 1)
        self.assertEqual(self.container['blub'], var)
        self.assertEqual(self.container[0], var)

    def test_dir(self):
        var = Variable('blub')
        self.container.append(var)
        print(dir(self.container))
        self.assertEqual(dir(self.container),
                         ['__contains__', '__delitem__', '__dict__', '__dir__', '__doc__', '__getattr__', '__getitem__',
                          '__getstate__', '__init__', '__iter__', '__len__', '__module__', '__setitem__',
                          '__setstate__', '__weakref__', '_check_for_name_attribute', '_reindex', 'append', 'blub',
                          'clear', 'extend', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys',
                          'itervalues', 'keys', 'update_key', 'values'])

    def test_del_by_index(self):
        variables_iterable = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        container = Container(variables_iterable)
        del container[10]
        for i, variable in enumerate(container):
            if i < 10:
                self.assertEqual(int(variable.name.replace('v', '')), i)
            else:
                self.assertEqual(int(variable.name.replace('v', '')) - 1, i)

    def test_del_by_key(self):
        variables_iterable = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        container = Container(variables_iterable)
        del container["v333"]
        for i, variable in enumerate(container):
            if i < 333:
                self.assertEqual(int(variable.name.replace('v', '')), i)
            else:
                self.assertEqual(int(variable.name.replace('v', '')) - 1, i)

    def test_non_name_item_raises(self):
        self.assertRaises(AttributeError, self.container.append, 3)

    def test_add_already_existing_item_raises(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertRaises(Exception, self.container.append, var)

        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(100)]
        self.container.extend(variables)
        self.assertRaises(Exception, self.container.extend, variables)

    def test_clear(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        self.container.clear()
        self.assertEqual(len(self.container), 0)
        self.assertEqual(self.container._object_list, [])
        self.assertEqual(self.container._indices, {})
        self.assertEqual(self.container._dict, {})

    def test_extend(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)

    def test_iterkeys(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        generator = self.container.iterkeys()
        self.assertEqual(list(generator), [item.name for item in self.container])

    def test_keys(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        keys = self.container.keys()
        self.assertEqual(keys, [item.name for item in self.container])

    def test_itervalues(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        generator = self.container.itervalues()
        self.assertEqual(list(generator), variables)

    def test_values(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        values = self.container.values()
        self.assertEqual(values, variables)

    def test_iteritems(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        generator = self.container.iteritems()
        self.assertEqual(list(generator), [(variable.name, variable) for variable in variables])

    def test_fromkeys(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(1000)]
        self.container.extend(variables)
        sub_container = self.container.fromkeys(('v1', 'v66', 'v999'))
        print(sub_container._object_list)
        lookalike = Container([variables[i] for i in (1, 66, 999)])
        print(lookalike._object_list)
        self.assertEqual(sub_container._object_list, lookalike._object_list)
        # self.assertEqual(sub_container._name_list, lookalike._name_list)
        self.assertEqual(sub_container._dict, lookalike._dict)

    def test_get(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertEqual(self.container.get('blub'), var)
        self.assertEqual(self.container.get('blurb', None), None)

    def test_has_key(self):
        self.assertFalse('blurb' in self.container)
        self.assertFalse(self.container.has_key('blurb'))  # noqa: W601
        var = Variable('blurb')
        self.container.append(var)
        self.assertTrue('blurb' in self.container)
        self.assertTrue(self.container.has_key('blurb'))  # noqa: W601

    def test_getattr(self):
        var = Variable('variable1')
        self.container.append(var)
        self.assertEqual(self.container.variable1, var)
        self.assertRaises(AttributeError, getattr, self.container, 'not_existing_variable')

    def test_setitem(self):
        var = Variable('blub')
        self.assertRaises(IndexError, self.container.__setitem__, 0, var)
        self.container.append(var)
        self.assertEqual(self.container[0], var)
        var2 = Variable('blib')
        self.container[0] = var2
        self.assertEqual(self.container[0], var2)

        var3 = Variable("blab")
        self.assertRaises(ValueError, self.container.__setitem__, "blub", var3)
        self.container["blab"] = var3
        self.assertIs(self.container["blab"], var3)
        self.assertIs(self.container[1], var3)

        var4 = Variable("blab")
        self.container["blab"] = var4
        self.assertFalse(var3 in self.container)
        self.assertIs(self.container["blab"], var4)
        self.assertIs(self.container[1], var4)

        self.assertRaises(ValueError, self.container.__setitem__, 1, var2)
        self.container[1] = var3
        self.assertIs(self.container["blab"], var3)
        self.assertIs(self.container[1], var3)
        self.container.update_key("blab")

    def test_change_object_name(self):
        var = Variable('blub')
        self.model.add(var)
        self.model.update()
        var.name = 'blurg'
        self.assertEqual(self.container.keys(), ['blurg'])
        self.assertEqual(self.container['blurg'], var)

    def test_iter_container_len_change_raises(self):
        def _(container):
            for item in container:
                del container[item.name]

        variables_iterable = [Variable("v" + str(i), lb=10, ub=100) for i in range(10)]
        container = Container(variables_iterable)
        self.assertRaises(RuntimeError, _, container)

    def test_pickle(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(100)]
        self.container.extend(variables)
        unpickled = pickle.loads(pickle.dumps(self.container))
        self.assertEquals(unpickled[0].name, variables[0].name)
Exemplo n.º 10
0
 def setUp(self):
     self.model = Model()
     self.container = self.model.variables
Exemplo n.º 11
0
class ContainerTestCase(unittest.TestCase):
    def setUp(self):
        self.model = Model()
        self.container = self.model.variables

    def test_container_from_iterable(self):
        variables_iterable = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(10000)
        ]
        container = Container(variables_iterable)
        self.assertEqual(len(container), 10000)
        for index, variable in enumerate(variables_iterable):
            self.assertEqual(container[index], variable)
            self.assertEqual(container[variable.name], variable)

    def test_container_from_iterable_with_items_without_name_attribute_raise(
            self):
        variables_iterable = ['v' + str(i) for i in range(10000)]
        self.assertRaises(AttributeError, Container, variables_iterable)

    def test_container_append(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertEqual(len(self.container), 1)
        self.assertEqual(self.container['blub'], var)
        self.assertEqual(self.container[0], var)

    def test_dir(self):
        var = Variable('blub')
        self.container.append(var)
        print(dir(self.container))
        self.assertEqual(dir(self.container), [
            '__contains__', '__delitem__', '__dict__', '__dir__', '__doc__',
            '__getattr__', '__getitem__', '__getstate__', '__init__',
            '__iter__', '__len__', '__module__', '__setitem__', '__setstate__',
            '__weakref__', '_check_for_name_attribute', '_reindex', 'append',
            'blub', 'clear', 'extend', 'fromkeys', 'get', 'has_key', 'items',
            'iteritems', 'iterkeys', 'itervalues', 'keys', 'update_key',
            'values'
        ])

    def test_del_by_index(self):
        variables_iterable = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        container = Container(variables_iterable)
        del container[10]
        for i, variable in enumerate(container):
            if i < 10:
                self.assertEqual(int(variable.name.replace('v', '')), i)
            else:
                self.assertEqual(int(variable.name.replace('v', '')) - 1, i)

    def test_del_by_key(self):
        variables_iterable = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        container = Container(variables_iterable)
        del container["v333"]
        for i, variable in enumerate(container):
            if i < 333:
                self.assertEqual(int(variable.name.replace('v', '')), i)
            else:
                self.assertEqual(int(variable.name.replace('v', '')) - 1, i)

    def test_non_name_item_raises(self):
        self.assertRaises(AttributeError, self.container.append, 3)

    def test_add_already_existing_item_raises(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertRaises(Exception, self.container.append, var)

        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(100)]
        self.container.extend(variables)
        self.assertRaises(Exception, self.container.extend, variables)

    def test_clear(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        self.container.clear()
        self.assertEqual(len(self.container), 0)
        self.assertEqual(self.container._object_list, [])
        self.assertEqual(self.container._indices, {})
        self.assertEqual(self.container._dict, {})

    def test_extend(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)

    def test_iterkeys(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        generator = self.container.iterkeys()
        self.assertEqual(list(generator),
                         [item.name for item in self.container])

    def test_keys(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        keys = self.container.keys()
        self.assertEqual(keys, [item.name for item in self.container])

    def test_itervalues(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        generator = self.container.itervalues()
        self.assertEqual(list(generator), variables)

    def test_values(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        values = self.container.values()
        self.assertEqual(values, variables)

    def test_iteritems(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        generator = self.container.iteritems()
        self.assertEqual(list(generator),
                         [(variable.name, variable) for variable in variables])

    def test_fromkeys(self):
        variables = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(1000)
        ]
        self.container.extend(variables)
        sub_container = self.container.fromkeys(('v1', 'v66', 'v999'))
        print(sub_container._object_list)
        lookalike = Container([variables[i] for i in (1, 66, 999)])
        print(lookalike._object_list)
        self.assertEqual(sub_container._object_list, lookalike._object_list)
        # self.assertEqual(sub_container._name_list, lookalike._name_list)
        self.assertEqual(sub_container._dict, lookalike._dict)

    def test_get(self):
        var = Variable('blub')
        self.container.append(var)
        self.assertEqual(self.container.get('blub'), var)
        self.assertEqual(self.container.get('blurb', None), None)

    def test_has_key(self):
        self.assertFalse('blurb' in self.container)
        self.assertFalse(self.container.has_key('blurb'))  # noqa: W601
        var = Variable('blurb')
        self.container.append(var)
        self.assertTrue('blurb' in self.container)
        self.assertTrue(self.container.has_key('blurb'))  # noqa: W601

    def test_getattr(self):
        var = Variable('variable1')
        self.container.append(var)
        self.assertEqual(self.container.variable1, var)
        self.assertRaises(AttributeError, getattr, self.container,
                          'not_existing_variable')

    def test_setitem(self):
        var = Variable('blub')
        self.assertRaises(IndexError, self.container.__setitem__, 0, var)
        self.container.append(var)
        self.assertEqual(self.container[0], var)
        var2 = Variable('blib')
        self.container[0] = var2
        self.assertEqual(self.container[0], var2)

        var3 = Variable("blab")
        self.assertRaises(ValueError, self.container.__setitem__, "blub", var3)
        self.container["blab"] = var3
        self.assertIs(self.container["blab"], var3)
        self.assertIs(self.container[1], var3)

        var4 = Variable("blab")
        self.container["blab"] = var4
        self.assertFalse(var3 in self.container)
        self.assertIs(self.container["blab"], var4)
        self.assertIs(self.container[1], var4)

        self.assertRaises(ValueError, self.container.__setitem__, 1, var2)
        self.container[1] = var3
        self.assertIs(self.container["blab"], var3)
        self.assertIs(self.container[1], var3)
        self.container.update_key("blab")

    def test_change_object_name(self):
        var = Variable('blub')
        self.model.add(var)
        self.model.update()
        var.name = 'blurg'
        self.assertEqual(self.container.keys(), ['blurg'])
        self.assertEqual(self.container['blurg'], var)

    def test_iter_container_len_change_raises(self):
        def _(container):
            for item in container:
                del container[item.name]

        variables_iterable = [
            Variable("v" + str(i), lb=10, ub=100) for i in range(10)
        ]
        container = Container(variables_iterable)
        self.assertRaises(RuntimeError, _, container)

    def test_pickle(self):
        variables = [Variable("v" + str(i), lb=10, ub=100) for i in range(100)]
        self.container.extend(variables)
        unpickled = pickle.loads(pickle.dumps(self.container))
        self.assertEquals(unpickled[0].name, variables[0].name)
Exemplo n.º 12
0
 def test_change_problem(self):
     model = Model()
     self.var.problem = model
     self.assertEqual(self.var.problem, model)