Coverage for /home/ubuntu/flatiron/python/flatiron/core/validators.py: 100%

42 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-08 21:55 +0000

1import math 

2# ------------------------------------------------------------------------------ 

3 

4 

5''' 

6The validators module is function library for validating config attributes. 

7''' 

8 

9 

10def is_even(number): 

11 # type: (int) -> int 

12 ''' 

13 Validates that number is even. 

14 

15 Args: 

16 number (int): Number. 

17 

18 Raises: 

19 ValueError: If number is not even. 

20 

21 Returns: 

22 int: Input number. 

23 ''' 

24 if number % 2 != 0: 

25 msg = f'{number} is not an even number.' 

26 raise ValueError(msg) 

27 return number 

28 

29 

30def is_odd(number): 

31 # type: (int) -> int 

32 ''' 

33 Validates that number is odd. 

34 

35 Args: 

36 number (int): Number. 

37 

38 Raises: 

39 ValueError: If number is not odd. 

40 

41 Returns: 

42 int: Input number. 

43 ''' 

44 if number % 2 == 0: 

45 msg = f'{number} is not an odd number.' 

46 raise ValueError(msg) 

47 return number 

48 

49 

50def is_base_two(number): 

51 # type: (int) -> int 

52 ''' 

53 Validates that number is base two. 

54 

55 Args: 

56 number (int): Number. 

57 

58 Raises: 

59 ValueError: If number is not base two. 

60 

61 Returns: 

62 int: Input number. 

63 ''' 

64 exp = math.log2(number) 

65 if exp != int(exp): 

66 msg = f'{number} is not a base two number.' 

67 raise ValueError(msg) 

68 return number 

69 

70 

71def is_padding(pad_type): 

72 # type: (str) -> str 

73 ''' 

74 Validates that pad_type is a legal padding type. 

75 

76 Args: 

77 pad_type (str): Padding type. 

78 

79 Raises: 

80 ValueError: If padding type is not legal. 

81 

82 Returns: 

83 str: Input padding type. 

84 ''' 

85 legal = ['valid', 'same'] 

86 if pad_type not in legal: 

87 msg = f'{pad_type} is not a legal padding type. Legal types: {legal}.' 

88 raise ValueError(msg) 

89 return pad_type 

90 

91 

92def is_callback_mode(mode): 

93 # type: (str) -> str 

94 ''' 

95 Validates that mode is a legal calback mode. 

96 

97 Args: 

98 mode (str): Callback mode. 

99 

100 Raises: 

101 ValueError: If mode type is not legal. 

102 

103 Returns: 

104 str: Input callback mode. 

105 ''' 

106 legal = ['auto', 'min', 'max'] 

107 if mode not in legal: 

108 msg = f'{mode} is not a legal callback mode. Legal types: {legal}.' 

109 raise ValueError(msg) 

110 return mode 

111 

112 

113def is_pipeline_method(method): 

114 # type: (str) -> str 

115 ''' 

116 Validates that method is a legal pipeline method. 

117 

118 Args: 

119 mode (str): Pipeline method. 

120 

121 Raises: 

122 ValueError: If method is not legal. 

123 

124 Returns: 

125 str: Input pipeline method. 

126 ''' 

127 legal = [ 

128 'load', 

129 'train_test_split', 

130 'unload', 

131 'build', 

132 'compile', 

133 'train', 

134 ] 

135 if method not in legal: 

136 msg = f'{method} is not a legal pipeline method. Legal methods: {legal}.' 

137 raise ValueError(msg) 

138 return method 

139 

140 

141def is_engine(engine): 

142 # type: (str) -> str 

143 ''' 

144 Validates that engine is a legal deep learning framework. 

145 

146 Args: 

147 engine (str): Deep learning framework. 

148 

149 Raises: 

150 ValueError: If engine is not legal. 

151 

152 Returns: 

153 str: Input engine. 

154 ''' 

155 legal = ['tensorflow', 'torch'] 

156 if engine not in legal: 

157 msg = f'{engine} is not a legal deep learning framework. Legal engines: {legal}.' 

158 raise ValueError(msg) 

159 return engine