Coverage for tests/test_adjust_time.py: 99%

95 statements  

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

1import sys 

2import os 

3# Определите путь до корня проекта 

4project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) 

5if project_root not in sys.path: 

6 sys.path.append(project_root) 

7 

8import pandas as pd 

9from pandas.testing import assert_frame_equal 

10from statistic.adjust_time import adjust_time1 

11from statistic.adjust_time import adjust_times 

12 

13def test_adjust_time1_two_orders(): 

14 data = { 

15 'time': [pd.Timestamp('2023-01-01 10:00:00'), pd.Timestamp('2023-01-01 10:00:00')], 

16 'wenz': ['A', 'A'] 

17 } 

18 df = pd.DataFrame(data) 

19 expected_data = { 

20 'time': [pd.Timestamp('2023-01-01 09:55:00'), pd.Timestamp('2023-01-01 10:00:00')], 

21 'wenz': ['A', 'A'] 

22 } 

23 expected_df = pd.DataFrame(expected_data) 

24 result_df = adjust_time1(df) 

25 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) 

26 

27def test_adjust_time1_three_orders(): 

28 data = { 

29 'time': [pd.Timestamp('2023-01-01 10:00:00')] * 3, 

30 'wenz': ['A', 'A', 'A'] 

31 } 

32 df = pd.DataFrame(data) 

33 expected_data = { 

34 'time': [pd.Timestamp('2023-01-01 09:55:00'), pd.Timestamp('2023-01-01 10:00:00'), pd.Timestamp('2023-01-01 10:05:00')], 

35 'wenz': ['A', 'A', 'A'] 

36 } 

37 expected_df = pd.DataFrame(expected_data) 

38 result_df = adjust_time1(df) 

39 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) 

40 

41def test_adjust_time1_four_orders(): 

42 data = { 

43 'time': [pd.Timestamp('2023-01-01 10:00:00')] * 4, 

44 'wenz': ['A', 'A', 'A', 'A'] 

45 } 

46 df = pd.DataFrame(data) 

47 expected_data = { 

48 'time': [ 

49 pd.Timestamp('2023-01-01 09:50:00'), 

50 pd.Timestamp('2023-01-01 09:55:00'), 

51 pd.Timestamp('2023-01-01 10:00:00'), 

52 pd.Timestamp('2023-01-01 10:05:00') 

53 ], 

54 'wenz': ['A', 'A', 'A', 'A'] 

55 } 

56 expected_df = pd.DataFrame(expected_data) 

57 result_df = adjust_time1(df) 

58 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) 

59 

60def test_adjust_time1_five_orders(): 

61 data = { 

62 'time': [pd.Timestamp('2023-01-01 10:00:00')] * 5, 

63 'wenz': ['A', 'A', 'A', 'A', 'A'] 

64 } 

65 df = pd.DataFrame(data) 

66 expected_data = { 

67 'time': [ 

68 pd.Timestamp('2023-01-01 09:50:00'), 

69 pd.Timestamp('2023-01-01 09:55:00'), 

70 pd.Timestamp('2023-01-01 10:00:00'), 

71 pd.Timestamp('2023-01-01 10:05:00'), 

72 pd.Timestamp('2023-01-01 10:10:00') 

73 ], 

74 'wenz': ['A', 'A', 'A', 'A', 'A'] 

75 } 

76 expected_df = pd.DataFrame(expected_data) 

77 result_df = adjust_time1(df) 

78 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) 

79 

80def test_adjust_time1_multygroup(): 

81 data = { 

82 'time': [pd.Timestamp('2023-01-01 10:00:00')] * 15, 

83 'wenz': ['A', 'A', 'A', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'A', 'B', 'B', 'A', 'A'] 

84 } 

85 df = pd.DataFrame(data) 

86 expected_data = { 

87 'time': [ 

88 pd.Timestamp('2023-01-01 09:49:00'), 

89 pd.Timestamp('2023-01-01 09:50:00'), 

90 pd.Timestamp('2023-01-01 09:50:00'), 

91 pd.Timestamp('2023-01-01 09:54:00'), 

92 pd.Timestamp('2023-01-01 09:54:00'), 

93 pd.Timestamp('2023-01-01 09:55:00'), 

94 pd.Timestamp('2023-01-01 09:55:00'), 

95 pd.Timestamp('2023-01-01 10:00:00'), 

96 pd.Timestamp('2023-01-01 10:00:00'), 

97 pd.Timestamp('2023-01-01 10:05:00'), 

98 pd.Timestamp('2023-01-01 10:05:00'), 

99 pd.Timestamp('2023-01-01 10:06:00'), 

100 pd.Timestamp('2023-01-01 10:10:00'), 

101 pd.Timestamp('2023-01-01 10:10:00'), 

102 pd.Timestamp('2023-01-01 10:11:00') 

103 ], 

104 'wenz': ['A', 'A', 'B', 'A', 'B','A', 'B', 'A', 'B', 'A','B', 'A', 'A', 'B', 'A'] 

105 } 

106 expected_df = pd.DataFrame(expected_data) 

107 result_df = adjust_time1(df) 

108 result_df.reset_index(drop=True, inplace=True) 

109 

110 assert_frame_equal(result_df, expected_df) 

111 

112def test_adjust_time1_no_changes(): 

113 data = { 

114 'time': [pd.Timestamp('2023-01-01 10:00:00'), pd.Timestamp('2023-01-01 10:10:00')], 

115 'wenz': ['A', 'A'] 

116 } 

117 df = pd.DataFrame(data) 

118 expected_df = df.copy() 

119 result_df = adjust_time1(df) 

120 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) 

121 

122def test_adjust_times_combined_adjustments(): 

123 data = { 

124 'time': [ 

125 pd.Timestamp('2023-01-01 10:00:00'), 

126 pd.Timestamp('2023-01-01 10:00:00'), 

127 pd.Timestamp('2023-01-01 10:05:00'), 

128 pd.Timestamp('2023-01-01 10:10:00') 

129 ], 

130 'wenz': ['A', 'A', 'B', 'B'] 

131 } 

132 df = pd.DataFrame(data) 

133 expected_data = { 

134 'time': [ 

135 pd.Timestamp('2023-01-01 09:55:00'), 

136 pd.Timestamp('2023-01-01 10:02:00'), 

137 pd.Timestamp('2023-01-01 10:05:00'), 

138 pd.Timestamp('2023-01-01 10:12:00') 

139 ], 

140 'wenz': ['A', 'A', 'B', 'B'] 

141 } 

142 expected_df = pd.DataFrame(expected_data) 

143 expected_df = expected_df.sort_values("time").reset_index(drop=True) 

144 expected_df.index = expected_df.index + 1 

145 

146 result_df = adjust_times(df) 

147 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore 

148 

149def test_adjust_times_no_changes_needed(): 

150 data = { 

151 'time': [ 

152 pd.Timestamp('2023-01-01 10:00:00'), 

153 pd.Timestamp('2023-01-01 10:10:00'), 

154 pd.Timestamp('2023-01-01 10:20:00'), 

155 pd.Timestamp('2023-01-01 10:30:00') 

156 ], 

157 'wenz': ['A', 'A', 'B', 'B'] 

158 } 

159 df = pd.DataFrame(data) 

160 expected_df = df.copy() 

161 expected_df = expected_df.sort_values("time").reset_index(drop=True) 

162 expected_df.index = expected_df.index + 1 

163 

164 result_df = adjust_times(df) 

165 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore 

166 

167def test_adjust_times_multiple_groups(): 

168 data = { 

169 'time': [ 

170 pd.Timestamp('2023-01-01 10:00:00'), 

171 pd.Timestamp('2023-01-01 10:00:00'), 

172 pd.Timestamp('2023-01-01 10:00:00'), 

173 pd.Timestamp('2023-01-01 10:10:00'), 

174 pd.Timestamp('2023-01-01 10:10:00'), 

175 pd.Timestamp('2023-01-01 10:10:00') 

176 ], 

177 'wenz': ['A', 'A', 'A', 'B', 'B', 'B'] 

178 } 

179 df = pd.DataFrame(data) 

180 expected_data = { 

181 'time': [ 

182 pd.Timestamp('2023-01-01 09:55:00'), 

183 pd.Timestamp('2023-01-01 10:02:00'), 

184 pd.Timestamp('2023-01-01 10:09:00'), 

185 pd.Timestamp('2023-01-01 10:05:00'), 

186 pd.Timestamp('2023-01-01 10:12:00'), 

187 pd.Timestamp('2023-01-01 10:19:00') 

188 ], 

189 'wenz': ['A', 'A', 'A', 'B', 'B', 'B'] 

190 } 

191 expected_df = pd.DataFrame(expected_data) 

192 expected_df = expected_df.sort_values("time").reset_index(drop=True) 

193 expected_df.index = expected_df.index + 1 

194 

195 result_df = adjust_times(df) 

196 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore 

197 

198def test_adjust_times_single_group(): 

199 data = { 

200 'time': [ 

201 pd.Timestamp('2023-01-01 10:00:00'), 

202 pd.Timestamp('2023-01-01 10:00:00'), 

203 pd.Timestamp('2023-01-01 10:00:00'), 

204 pd.Timestamp('2023-01-01 10:00:00') 

205 ], 

206 'wenz': ['A', 'A', 'A', 'A'] 

207 } 

208 df = pd.DataFrame(data) 

209 expected_data = { 

210 'time': [ 

211 pd.Timestamp('2023-01-01 09:50:00'), 

212 pd.Timestamp('2023-01-01 09:57:00'), 

213 pd.Timestamp('2023-01-01 10:04:00'), 

214 pd.Timestamp('2023-01-01 10:11:00') 

215 ], 

216 'wenz': ['A', 'A', 'A', 'A'] 

217 } 

218 expected_df = pd.DataFrame(expected_data) 

219 expected_df = expected_df.sort_values("time").reset_index(drop=True) 

220 expected_df.index = expected_df.index + 1 

221 

222 result_df = adjust_times(df) 

223 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore 

224 

225def test_adjust_time_orders_multygroup_in_on_time(): 

226 data = { 

227 'time': [pd.Timestamp('2023-01-01 10:00:00')] * 15, 

228 'wenz': ['A', 'A', 'A', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'A', 'B', 'B', 'A', 'A'] 

229 } 

230 df = pd.DataFrame(data) 

231 expected_data = { 

232 'time': [ 

233 pd.Timestamp('2023-01-01 09:49:00'), 

234 pd.Timestamp('2023-01-01 09:50:00'), 

235 pd.Timestamp('2023-01-01 09:56:00'), 

236 pd.Timestamp('2023-01-01 09:57:00'), 

237 pd.Timestamp('2023-01-01 10:03:00'), 

238 pd.Timestamp('2023-01-01 10:04:00'), 

239 pd.Timestamp('2023-01-01 10:10:00'), 

240 pd.Timestamp('2023-01-01 10:11:00'), 

241 pd.Timestamp('2023-01-01 10:17:00'), 

242 pd.Timestamp('2023-01-01 10:18:00'), 

243 pd.Timestamp('2023-01-01 10:24:00'), 

244 pd.Timestamp('2023-01-01 10:25:00'), 

245 pd.Timestamp('2023-01-01 10:31:00'), 

246 pd.Timestamp('2023-01-01 10:38:00'), 

247 pd.Timestamp('2023-01-01 10:45:00') 

248 ], 

249 'wenz': ["A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "A", "A"] 

250 } 

251 expected_df = pd.DataFrame(expected_data) 

252 expected_df = expected_df.sort_values("time").reset_index(drop=True) 

253 expected_df.index = expected_df.index + 1 

254 

255 result_df = adjust_times(df) 

256 

257 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore