Coverage for flexnetsim/bitrate.py: 100%

58 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-22 20:03 +0000

1import json 

2 

3 

4class Bitrate(): 

5 def __init__(self, bit_rate): 

6 self.__bit_rate = bit_rate 

7 self.__modulation = [] 

8 self.__slots = [] 

9 self.__reach = [] 

10 

11 @property 

12 def bit_rate(self): 

13 return self.__bit_rate 

14 

15 @property 

16 def modulation(self): 

17 return self.__modulation 

18 

19 @property 

20 def slots(self): 

21 return self.__slots 

22 

23 @property 

24 def reach(self): 

25 return self.__reach 

26 

27 def add_modulation(self, modulation: str, slots: int, reach): 

28 self.modulation.append(modulation) 

29 self.slots.append(slots) 

30 self.reach.append(reach) 

31 

32 def get_modulation(self, pos: int): 

33 if pos >= len(self.modulation): 

34 raise ValueError( 

35 f"Bitrate {self.bit_rate} does not have more than {len(self.modulation)} modulations") 

36 

37 return self.modulation[pos] 

38 

39 def get_number_of_slots(self, pos: int): 

40 if pos >= len(self.slots): 

41 raise ValueError( 

42 f"Bitrate {self.bit_rate} does not have more than {len(self.slots)} modulations") 

43 return self.slots[pos] 

44 

45 def get_reach(self, pos: int): 

46 if pos >= len(self.reach): 

47 raise ValueError( 

48 f"Bitrate {self.bit_rate} does not have more than {len(self.reach)} modulations") 

49 return self.reach[pos] 

50 

51 def read_bit_rate_file(filename: str): 

52 f = open(filename) 

53 bit_rate_file = json.load(f) 

54 f.close() 

55 vect = [] 

56 

57 for x in bit_rate_file: 

58 bit_rate = int(x) 

59 number_of_modulations = len(bit_rate_file[x]) 

60 

61 aux = Bitrate(bit_rate) 

62 for i in range(number_of_modulations): 

63 for j in bit_rate_file[x][i].items(): 

64 modulation = j[0] 

65 reach = int(j[1]["reach"]) 

66 slots = int(j[1]["slots"]) 

67 

68 if (reach < 0) and (slots < 0): 

69 raise ValueError( 

70 "Value entered for slots and reach is less than zero") 

71 

72 if reach < 0: 

73 raise ValueError( 

74 "Value entered for reach is less than zero") 

75 

76 if slots < 0: 

77 raise ValueError( 

78 "Value entered for slots is less than zero") 

79 

80 aux.add_modulation(modulation, slots, reach) 

81 

82 vect.append(aux) 

83 return vect