def test_complex_parse(self): self.assertEquals( utils.parse_label_vector( "A^4 + B^4*C^3 + D^2 *E * F^1 + G^4.3*H + J^0*G^6 * G^-6"), [[("A", 4)], [("B", 4), ("C", 3)], [("D", 2), ("E", 1), ("F", 1)], [("G", 4.3), ("H", 1)]])
def test_parsing_with_columns(self): self.assertEquals(utils.parse_label_vector("A + B^2 + C^3 + A*B", columns=["C", "A", "B"]), [ [(1, 1)], [(2, 2)], [(0, 3)], [(1, 1), (2, 1)] ])
def test_valid_label_vector(self): label_vector = [ [("A", 4)], [("B", 4), ("C", 3)], [("D", 2), ("E", 1), ("F", 1)], [("G", 4.3), ("H", 1)] ] self.assertTrue(utils.is_structured_label_vector(label_vector)) self.assertEquals(label_vector, utils.parse_label_vector(label_vector))
def test_complex_parse(self): self.assertEquals(utils.parse_label_vector( "A^4 + B^4*C^3 + D^2 *E * F^1 + G^4.3*H + J^0*G^6 * G^-6"), [ [("A", 4)], [("B", 4), ("C", 3)], [("D", 2), ("E", 1), ("F", 1)], [("G", 4.3), ("H", 1)] ] )
def test_set_label_vector(self): m = self.get_model() label_vector = "A + B + C + D + E" m.label_vector = label_vector self.assertEqual(m.label_vector, utils.parse_label_vector(label_vector)) self.assertEqual("1 + A + B + C + D + E", m.human_readable_label_vector) with self.assertRaises(ValueError): m.label_vector = "A + G" m.label_vector = None self.assertIsNone(m.label_vector) for item in (True, False, 0, 1.0): with self.assertRaises(TypeError): m.label_vector = item
def test_valid_label_vector(self): label_vector = [[("A", 4)], [("B", 4), ("C", 3)], [("D", 2), ("E", 1), ("F", 1)], [("G", 4.3), ("H", 1)]] self.assertTrue(utils.is_structured_label_vector(label_vector)) self.assertEquals(label_vector, utils.parse_label_vector(label_vector))
def test_parsing_with_columns(self): self.assertEquals( utils.parse_label_vector("A + B^2 + C^3 + A*B", columns=["C", "A", "B"]), [[(1, 1)], [(2, 2)], [(0, 3)], [(1, 1), (2, 1)]])
def test_single_term(self): self.assertEquals([[("A", 1)]], utils.parse_label_vector("A"))
def test_infinte_powers(self): # Ha! with self.assertRaises(ValueError): utils.parse_label_vector("A^inf") with self.assertRaises(ValueError): utils.parse_label_vector("A^-inf")
def test_remove_irrelevant_terms(self): self.assertEquals([[("A", 2)]], utils.parse_label_vector("A^2 + B^0"))
def test_sum_negative_terms(self): self.assertEquals([[("A", -7)]], utils.parse_label_vector("A^-3 * A^-4"))
def test_single_term_explicit_float_negative(self): self.assertEquals([[("A", -1.5)]], utils.parse_label_vector("A^-1.5"))
def test_sum_terms(self): self.assertEquals([[("A", 5)]], utils.parse_label_vector("A^3 * A^2"))
def test_no_genuine_term(self): with self.assertRaises(ValueError): utils.parse_label_vector("A^0")
def test_single_term_explicit_float(self): self.assertEquals([[("A", 1.2)]], utils.parse_label_vector("A^1.2"))
def test_invalid_powers(self): with self.assertRaises(ValueError): utils.parse_label_vector("A^B")
def test_parse_mixed_cross_terms(self): self.assertEquals([[("A", 2.0), ("B", -4.23), ("C", 1)]], utils.parse_label_vector("A^2.0 * B^-4.23 * C"))
def test_nan_powers(self): with self.assertRaises(ValueError): utils.parse_label_vector("A^nan")
def test_ignore_irrelevant_terms(self): self.assertEquals([[("A", 3)]], utils.parse_label_vector("A^3 * B^0"))