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
« 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)
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
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))
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))
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))
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))
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)
110 assert_frame_equal(result_df, expected_df)
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))
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
146 result_df = adjust_times(df)
147 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore
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
164 result_df = adjust_times(df)
165 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore
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
195 result_df = adjust_times(df)
196 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore
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
222 result_df = adjust_times(df)
223 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore
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
255 result_df = adjust_times(df)
257 assert_frame_equal(result_df.sort_index(axis=1), expected_df.sort_index(axis=1)) # type: ignore