예제 #1
0
    def test__compute_valid_bad_degree(self):
        from bezier.hazmat import helpers

        degree = 4
        num_nodes = ((degree + 1) * (degree + 2)) // 2
        nodes = np.zeros((2, num_nodes), order="F")
        triangle = self._make_one(nodes, degree=degree)
        with self.assertRaises(helpers.UnsupportedDegree) as exc_info:
            triangle._compute_valid()
        self.assertEqual(exc_info.exception.degree, degree)
        self.assertEqual(exc_info.exception.supported, (1, 2, 3))
예제 #2
0
 def test__compute_valid_linear(self):
     # Positively signed Jacobian (i.e. edges have inward normals).
     nodes = self.UNIT_TRIANGLE
     triangle = self._make_one(nodes, 1)
     self.assertTrue(triangle._compute_valid())
     # Change the nodes from counterclockwise to clockwise, so the
     # Jacobian becomes negatively signed.
     nodes = np.asfortranarray(nodes[:, (1, 0, 2)])
     triangle = self._make_one(nodes, 1, copy=False)
     self.assertFalse(triangle._compute_valid())
     # Collinear.
     nodes = np.asfortranarray([[0.0, 1.0, 2.0], [0.0, 2.0, 4.0]])
     triangle = self._make_one(nodes, 1, copy=False)
     self.assertFalse(triangle._compute_valid())
예제 #3
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],
     ])
     triangle = self._make_one(nodes, 2, copy=False)
     self.assertTrue(triangle._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)])
     triangle = self._make_one(nodes, 2, copy=False)
     self.assertFalse(triangle._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]])
     triangle = self._make_one(nodes, 2, copy=False)
     self.assertFalse(triangle._compute_valid())
예제 #4
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],
     ])
     triangle = self._make_one(nodes, 3, copy=False)
     self.assertTrue(triangle._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)])
     triangle = self._make_one(nodes, 3, copy=False)
     self.assertFalse(triangle._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],
     ])
     triangle = self._make_one(nodes, 3, copy=False)
     self.assertFalse(triangle._compute_valid())
예제 #5
0
 def test__compute_valid_bad_dimension(self):
     nodes = np.zeros((3, 6), order="F")
     triangle = self._make_one(nodes, 2)
     with self.assertRaises(NotImplementedError):
         triangle._compute_valid()