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))
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())
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())
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())
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()