Coverage for gpkit/tests/t_keydict.py: 100%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

58 statements  

1"""Test KeyDict class""" 

2import unittest 

3import numpy as np 

4from gpkit import Variable, VectorVariable 

5import gpkit 

6from gpkit.keydict import KeyDict 

7from gpkit.tests.helpers import run_tests 

8 

9 

10class TestKeyDict(unittest.TestCase): 

11 """TestCase for the KeyDict class""" 

12 

13 def test_nonnumeric(self): 

14 x = VectorVariable(2, "x") 

15 kd = KeyDict() 

16 kd[x[1]] = "2" 

17 self.assertTrue(np.isnan(kd[x[0]])) 

18 self.assertEqual(kd[x[1]], "2") 

19 self.assertNotIn(x[0], kd) 

20 self.assertIn(x[1], kd) 

21 

22 def test_setattr(self): 

23 kd = KeyDict() 

24 x = Variable("x", lineage=(("test", 0),)) 

25 kd[x] = 1 

26 self.assertIn(x, kd) 

27 self.assertEqual(set(kd), set([x.key])) 

28 

29 def test_getattr(self): 

30 kd = KeyDict() 

31 x = Variable("x", lineage=[("Motor", 0)]) 

32 kd[x] = 52 

33 self.assertEqual(kd[x], 52) 

34 self.assertEqual(kd[x.key], 52) 

35 self.assertEqual(kd["x"], 52) 

36 self.assertEqual(kd["Motor.x"], 52) 

37 self.assertNotIn("x.Someothermodelname", kd) 

38 

39 def test_failed_getattr(self): 

40 kd = KeyDict() 

41 with self.assertRaises(KeyError): 

42 _ = kd["waldo"] 

43 # issue 893: failed __getitem__ caused state change 

44 self.assertNotIn("waldo", kd) 

45 waldo = Variable("waldo") 

46 kd.update({waldo: 5}) 

47 res = kd["waldo"] 

48 self.assertEqual(res, 5) 

49 self.assertIn("waldo", kd) 

50 

51 def test_vector(self): 

52 v = VectorVariable(3, "v") 

53 kd = KeyDict() 

54 kd[v] = np.array([2, 3, 4]) 

55 self.assertTrue(all(kd[v] == kd[v.key])) # pylint:disable=no-member 

56 self.assertTrue(all(kd["v"] == np.array([2, 3, 4]))) 

57 self.assertEqual(v[0].key.idx, (0,)) 

58 self.assertEqual(kd[v][0], kd[v[0]]) 

59 self.assertEqual(kd[v][0], 2) 

60 kd[v[0]] = 6 

61 self.assertEqual(kd[v][0], kd[v[0]]) 

62 self.assertEqual(kd[v][0], 6) 

63 self.assertTrue(all(kd[v] == np.array([6, 3, 4]))) 

64 v = VectorVariable(3, "v", "m") 

65 kd[v] = np.array([2, 3, 4]) 

66 if gpkit.units: 

67 kd[v[0]] = gpkit.units("inch") 

68 

69 

70TESTS = [TestKeyDict] 

71 

72 

73if __name__ == "__main__": # pragma: no cover 

74 run_tests(TESTS)