Ejemplo n.º 1
0
    def test__compute_valid_bad_degree(self):
        from bezier import _helpers

        degree = 4
        num_nodes = ((degree + 1) * (degree + 2)) // 2
        nodes = np.zeros((2, num_nodes), order="F")
        surface = self._make_one(nodes, degree=degree)
        with self.assertRaises(_helpers.UnsupportedDegree) as exc_info:
            surface._compute_valid()
        self.assertEqual(exc_info.exception.degree, degree)
        self.assertEqual(exc_info.exception.supported, (1, 2, 3))
Ejemplo n.º 2
0
 def test__compute_valid_linear(self):
     # Positively signed Jacobian (i.e. edges have inward normals).
     nodes = self.UNIT_TRIANGLE
     surface = self._make_one(nodes, 1)
     self.assertTrue(surface._compute_valid())
     # Change the nodes from counterclockwise to clockwise, so the
     # Jacobian becomes negatively signed.
     nodes = np.asfortranarray(nodes[:, (1, 0, 2)])
     surface = self._make_one(nodes, 1, _copy=False)
     self.assertFalse(surface._compute_valid())
     # Collinear.
     nodes = np.asfortranarray([[0.0, 1.0, 2.0], [0.0, 2.0, 4.0]])
     surface = self._make_one(nodes, 1, _copy=False)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 3
0
 def test__compute_valid_invalid_linear(self):
     nodes = np.asfortranarray([
         [0.0, 0.0, 0.0],
         [1.0, 2.0, 2.0],
         [2.0, 4.0, 4.0],
     ])
     surface = self._make_one(nodes, 1)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 4
0
 def test__compute_valid_quadratic(self):
     # Positively signed Jacobian (i.e. edges have inward normals).
     nodes = np.asfortranarray([
         [0.0, 0.5, 1.0, 0.1875, 0.625, 0.0],
         [0.0, -0.1875, 0.0, 0.5, 0.625, 1.0],
     ])
     surface = self._make_one(nodes, 2, _copy=False)
     self.assertTrue(surface._compute_valid())
     # Change the nodes from counterclockwise to clockwise, so the
     # Jacobian becomes negatively signed.
     nodes = np.asfortranarray(nodes[:, (2, 1, 0, 4, 3, 5)])
     surface = self._make_one(nodes, 2, _copy=False)
     self.assertFalse(surface._compute_valid())
     # Mixed sign Jacobian: B(L1, L2, L3) = [L1^2 + L2^2, L2^2 + L3^2]
     nodes = np.asfortranarray([[1.0, 0.0, 1.0, 0.0, 0.0, 0.0],
                                [0.0, 0.0, 1.0, 0.0, 0.0, 1.0]])
     surface = self._make_one(nodes, 2, _copy=False)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 5
0
 def test__compute_valid_cubic(self):
     # Positively signed Jacobian (i.e. edges have inward normals).
     nodes = np.asfortranarray([
         [0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.25, 0.0, 1.25, 0.0],
         [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.25, 2.0, 2.25, 3.0],
     ])
     surface = self._make_one(nodes, 3, _copy=False)
     self.assertTrue(surface._compute_valid())
     # Change the nodes from counterclockwise to clockwise, so the
     # Jacobian becomes negatively signed.
     nodes = np.asfortranarray(nodes[:, (3, 2, 1, 0, 6, 5, 4, 8, 7, 9)])
     surface = self._make_one(nodes, 3, _copy=False)
     self.assertFalse(surface._compute_valid())
     # Mixed sign Jacobian: B(L1, L2, L3) = [L1^3 + L2^3, L2^3 + L3^3]
     nodes = np.asfortranarray([
         [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
         [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
     ])
     surface = self._make_one(nodes, 3, _copy=False)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 6
0
 def test__compute_valid_quadratic_valid(self):
     nodes = np.asfortranarray([
         [0.0, 0.0],
         [0.5, -0.1875],
         [1.0, 0.0],
         [0.1875, 0.5],
         [0.625, 0.625],
         [0.0, 1.0],
     ])
     surface = self._make_one(nodes, 2)
     self.assertTrue(surface._compute_valid())
Ejemplo n.º 7
0
 def test__compute_valid_quadratic_invalid(self):
     # B(L1, L2, L3) = [L1^2 + L2^2, L2^2 + L3^2]
     nodes = np.asfortranarray([
         [1.0, 0.0],
         [0.0, 0.0],
         [1.0, 1.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [0.0, 1.0],
     ])
     surface = self._make_one(nodes, 2)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 8
0
 def test__compute_valid_cubic_valid(self):
     nodes = np.asfortranarray([
         [0.0, 0.0],
         [1.0, 0.0],
         [2.0, 0.0],
         [3.0, 0.0],
         [0.0, 1.0],
         [1.0, 1.0],
         [2.25, 1.25],
         [0.0, 2.0],
         [1.25, 2.25],
         [0.0, 3.0],
     ])
     surface = self._make_one(nodes, 3)
     self.assertTrue(surface._compute_valid())
Ejemplo n.º 9
0
 def test__compute_valid_cubic_invalid(self):
     # B(L1, L2, L3) = [L1^3 + L2^3, L2^3 + L3^3]
     nodes = np.asfortranarray([
         [1.0, 0.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [1.0, 1.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [0.0, 0.0],
         [0.0, 1.0],
     ])
     surface = self._make_one(nodes, 3)
     self.assertFalse(surface._compute_valid())
Ejemplo n.º 10
0
 def test__compute_valid_bad_dimension(self):
     nodes = np.zeros((3, 6), order="F")
     surface = self._make_one(nodes, 2)
     with self.assertRaises(NotImplementedError):
         surface._compute_valid()
Ejemplo n.º 11
0
 def test__compute_valid_bad_degree(self):
     nodes = np.zeros((15, 2), order='F')
     surface = self._make_one(nodes, 4)
     with self.assertRaises(NotImplementedError):
         surface._compute_valid()
Ejemplo n.º 12
0
 def test__compute_valid_valid_linear(self):
     surface = self._make_one(self.UNIT_TRIANGLE, 1)
     self.assertTrue(surface._compute_valid())