def test_upper_bounds(self):
        dofs = DOFs(x=np.array([1, 2, 3]),
                    names=np.array(['x', 'y', 'z']),
                    free=np.array([True, True, False]))
        self.assertTrue(np.allclose(dofs.upper_bounds,
                                    np.array([np.inf, np.inf])))

        with self.assertRaises(ValueError):
            dofs.upper_bounds = np.array([1000.0, 1001.0, 1002.0])
        with self.assertRaises(ValueError):
            dofs.upper_bounds = np.array([1000.0])
        dofs.upper_bounds = np.array([1000.0, 1001.0])
        self.assertTrue(np.allclose(dofs.upper_bounds,
                                    np.array([1000.0, 1001.0])))

        dofs.unfix_all()
        self.assertTrue(np.allclose(dofs.upper_bounds,
                                    np.array([1000.0, 1001.0, np.inf])))

        dofs.upper_bounds = np.array([1000.0, 1001.0, 1002.])
        self.assertTrue(np.allclose(dofs.upper_bounds,
                                    np.array([1000.0, 1001.0, 1002.0])))

        with self.assertRaises(ValueError):
            dofs.upper_bounds = np.array([1000.0])
        with self.assertRaises(ValueError):
            dofs.upper_bounds = np.array([1000.0, 1001.0])
    def test_x(self):
        # Test the getter
        fixed_dofs = DOFs(x=np.array([1, 2, 3]),
                          names=np.array(['x', 'y', 'z']),
                          free=np.array([False, False, False]))
        free_dofs = DOFs(x=np.array([1, 2, 3]),
                         names=np.array(['x', 'y', 'z']),
                         free=np.array([True, True, True]))
        one_fixed_dofs = DOFs(x=np.array([1, 2, 3]),
                              names=np.array(['x', 'y', 'z']),
                              free=np.array([True, True, False]))
        self.assertTrue(np.allclose(fixed_dofs.x, np.array([])))
        self.assertTrue(np.allclose(free_dofs.x, np.array([1, 2, 3])))
        self.assertTrue(np.allclose(one_fixed_dofs.x, np.array([1, 2])))

        # Test the setter

        # Use full array size
        with self.assertRaises(ValueError):
            fixed_dofs.x = np.array([4, 5, 6])
        with self.assertRaises(ValueError):
            one_fixed_dofs.x = np.array([4, 5, 6])

        free_dofs.x = np.array([4, 5, 6])
        self.assertTrue(np.allclose(free_dofs.x, np.array([4, 5, 6])))
        one_fixed_dofs.x = np.array([4, 5])
        self.assertTrue(np.allclose(one_fixed_dofs.full_x, np.array([4, 5, 3])))
 def test_update_lower_bound(self):
     dofs = DOFs(x=np.array([1, 2, 3]),
                 names=np.array(['x', 'y', 'z']),
                 free=np.array([True, True, False]),
                 lower_bounds=np.array([-100.0, -101.0, -102.0]),
                 upper_bounds=np.array([100.0, 101.0, 102.0]))
     dofs.update_lower_bound("x", -200)
     self.assertTrue(np.allclose(dofs.lower_bounds,
                                 np.array([-200.0, -101.0])))
 def test_full_x(self):
     fixed_dofs = DOFs(x=np.array([1, 2, 3]),
                       names=np.array(['x', 'y', 'z']),
                       free=np.array([False, False, False]))
     free_dofs = DOFs(x=np.array([1, 2, 3]),
                      names=np.array(['x', 'y', 'z']),
                      free=np.array([True, True, True]))
     one_fixed_dofs = DOFs(x=np.array([1, 2, 3]),
                           names=np.array(['x', 'y', 'z']),
                           free=np.array([True, True, False]))
     output = np.array([1, 2, 3])
     self.assertTrue(np.allclose(fixed_dofs.full_x, output))
     self.assertTrue(np.allclose(free_dofs.full_x, output))
     self.assertTrue(np.allclose(one_fixed_dofs.full_x, output))
 def test_bounds(self):
     dofs = DOFs(x=np.array([1, 2, 3]),
                 names=np.array(['x', 'y', 'z']),
                 free=np.array([True, True, False]),
                 lower_bounds=np.array([-100.0, -101.0, -102.0]),
                 upper_bounds=np.array([100.0, 101.0, 102.0]))
     bounds = dofs.bounds
     self.assertTrue(np.allclose(bounds[0],
                                 np.array([-100.0, -101.0]))
                     and np.allclose(bounds[1],
                                     np.array([100.0, 101.0])))
 def test_any_fixed(self):
     free_dofs = DOFs(x=np.array([1, 2, 3]),
                      names=np.array(['x', 'y', 'z']),
                      free=np.array([True, True, True]))
     self.assertFalse(free_dofs.any_fixed())
     one_fixed_dofs = DOFs(x=np.array([1, 2, 3]),
                           names=np.array(['x', 'y', 'z']),
                           free=np.array([True, True, False]))
     self.assertTrue(one_fixed_dofs.any_fixed())
 def test_init(self):
     # Create an empty dof and check all the methods
     empty_dof = DOFs()
     empty_dof.fix_all()
     empty_dof.unfix_all()
     self.assertFalse(empty_dof.any_free())
     self.assertFalse(empty_dof.any_fixed())
     self.assertTrue(empty_dof.all_free())
     self.assertTrue(empty_dof.all_fixed())
     empty_dof.x = []  # This statement working is what is desired
     self.assertTrue(len(empty_dof) == 0)
     self.assertTrue(empty_dof.reduced_len == 0)