Skip to content

Commit c4ecacc

Browse files
author
Christoph Heindl
committed
updated tests and workflow file
1 parent a3b3cd9 commit c4ecacc

File tree

2 files changed

+233
-101
lines changed

2 files changed

+233
-101
lines changed

.github/workflows/python-package.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ jobs:
2525
python-version: ${{ matrix.python-version }}
2626
- name: Install dependencies
2727
run: |
28-
python -m pip install --upgrade pip
28+
# The following is commented due to issue in package lap
29+
# python -m pip install --upgrade pip
30+
pip install --upgrade pip==22.0.3
2931
python -m pip install flake8 pytest pytest-benchmark
3032
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
3133
pip install lap scipy "ortools<9.4" lapsolver munkres

motmetrics/tests/test_mot.py

Lines changed: 230 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -36,62 +36,66 @@ def test_events():
3636
acc.update([], [], [], frameid=5)
3737

3838
expect = mm.MOTAccumulator.new_event_dataframe()
39-
expect.loc[(0, 0), :] = ['RAW', np.nan, np.nan, np.nan]
40-
expect.loc[(0, 1), :] = ['RAW', np.nan, 1, np.nan]
41-
expect.loc[(0, 2), :] = ['RAW', np.nan, 2, np.nan]
42-
expect.loc[(0, 3), :] = ['FP', np.nan, 1, np.nan]
43-
expect.loc[(0, 4), :] = ['FP', np.nan, 2, np.nan]
44-
45-
expect.loc[(1, 0), :] = ['RAW', np.nan, np.nan, np.nan]
46-
expect.loc[(1, 1), :] = ['RAW', 1, np.nan, np.nan]
47-
expect.loc[(1, 2), :] = ['RAW', 2, np.nan, np.nan]
48-
expect.loc[(1, 3), :] = ['MISS', 1, np.nan, np.nan]
49-
expect.loc[(1, 4), :] = ['MISS', 2, np.nan, np.nan]
50-
51-
expect.loc[(2, 0), :] = ['RAW', np.nan, np.nan, np.nan]
52-
expect.loc[(2, 1), :] = ['RAW', 1, 1, 1.0]
53-
expect.loc[(2, 2), :] = ['RAW', 1, 2, 0.5]
54-
expect.loc[(2, 3), :] = ['RAW', 2, 1, 0.3]
55-
expect.loc[(2, 4), :] = ['RAW', 2, 2, 1.0]
56-
expect.loc[(2, 5), :] = ['MATCH', 1, 2, 0.5]
57-
expect.loc[(2, 6), :] = ['MATCH', 2, 1, 0.3]
58-
59-
expect.loc[(3, 0), :] = ['RAW', np.nan, np.nan, np.nan]
60-
expect.loc[(3, 1), :] = ['RAW', 1, 1, 0.2]
61-
expect.loc[(3, 2), :] = ['RAW', 2, 2, 0.1]
62-
expect.loc[(3, 3), :] = ['TRANSFER', 1, 1, 0.2]
63-
expect.loc[(3, 4), :] = ['SWITCH', 1, 1, 0.2]
64-
expect.loc[(3, 5), :] = ['TRANSFER', 2, 2, 0.1]
65-
expect.loc[(3, 6), :] = ['SWITCH', 2, 2, 0.1]
66-
67-
expect.loc[(4, 0), :] = ['RAW', np.nan, np.nan, np.nan]
68-
expect.loc[(4, 1), :] = ['RAW', 1, 1, 5.]
69-
expect.loc[(4, 2), :] = ['RAW', 1, 2, 1.]
70-
expect.loc[(4, 3), :] = ['RAW', 2, 1, 1.]
71-
expect.loc[(4, 4), :] = ['RAW', 2, 2, 5.]
72-
expect.loc[(4, 5), :] = ['MATCH', 1, 1, 5.]
73-
expect.loc[(4, 6), :] = ['MATCH', 2, 2, 5.]
74-
75-
expect.loc[(5, 0), :] = ['RAW', np.nan, np.nan, np.nan]
76-
77-
pd.util.testing.assert_frame_equal(acc.events, expect)
39+
expect.loc[(0, 0), :] = ["RAW", np.nan, np.nan, np.nan]
40+
expect.loc[(0, 1), :] = ["RAW", np.nan, 1, np.nan]
41+
expect.loc[(0, 2), :] = ["RAW", np.nan, 2, np.nan]
42+
expect.loc[(0, 3), :] = ["FP", np.nan, 1, np.nan]
43+
expect.loc[(0, 4), :] = ["FP", np.nan, 2, np.nan]
44+
45+
expect.loc[(1, 0), :] = ["RAW", np.nan, np.nan, np.nan]
46+
expect.loc[(1, 1), :] = ["RAW", 1, np.nan, np.nan]
47+
expect.loc[(1, 2), :] = ["RAW", 2, np.nan, np.nan]
48+
expect.loc[(1, 3), :] = ["MISS", 1, np.nan, np.nan]
49+
expect.loc[(1, 4), :] = ["MISS", 2, np.nan, np.nan]
50+
51+
expect.loc[(2, 0), :] = ["RAW", np.nan, np.nan, np.nan]
52+
expect.loc[(2, 1), :] = ["RAW", 1, 1, 1.0]
53+
expect.loc[(2, 2), :] = ["RAW", 1, 2, 0.5]
54+
expect.loc[(2, 3), :] = ["RAW", 2, 1, 0.3]
55+
expect.loc[(2, 4), :] = ["RAW", 2, 2, 1.0]
56+
expect.loc[(2, 5), :] = ["MATCH", 1, 2, 0.5]
57+
expect.loc[(2, 6), :] = ["MATCH", 2, 1, 0.3]
58+
59+
expect.loc[(3, 0), :] = ["RAW", np.nan, np.nan, np.nan]
60+
expect.loc[(3, 1), :] = ["RAW", 1, 1, 0.2]
61+
expect.loc[(3, 2), :] = ["RAW", 2, 2, 0.1]
62+
expect.loc[(3, 3), :] = ["TRANSFER", 1, 1, 0.2]
63+
expect.loc[(3, 4), :] = ["SWITCH", 1, 1, 0.2]
64+
expect.loc[(3, 5), :] = ["TRANSFER", 2, 2, 0.1]
65+
expect.loc[(3, 6), :] = ["SWITCH", 2, 2, 0.1]
66+
67+
expect.loc[(4, 0), :] = ["RAW", np.nan, np.nan, np.nan]
68+
expect.loc[(4, 1), :] = ["RAW", 1, 1, 5.0]
69+
expect.loc[(4, 2), :] = ["RAW", 1, 2, 1.0]
70+
expect.loc[(4, 3), :] = ["RAW", 2, 1, 1.0]
71+
expect.loc[(4, 4), :] = ["RAW", 2, 2, 5.0]
72+
expect.loc[(4, 5), :] = ["MATCH", 1, 1, 5.0]
73+
expect.loc[(4, 6), :] = ["MATCH", 2, 2, 5.0]
74+
75+
expect.loc[(5, 0), :] = ["RAW", np.nan, np.nan, np.nan]
76+
77+
pd.testing.assert_frame_equal(acc.events, expect)
7878

7979

8080
def test_max_switch_time():
8181
"""Tests max_switch_time option."""
8282
acc = mm.MOTAccumulator(max_switch_time=1)
8383
acc.update([1, 2], [1, 2], [[1, 0.5], [0.3, 1]], frameid=1) # 1->a, 2->b
84-
frameid = acc.update([1, 2], [1, 2], [[0.5, np.nan], [np.nan, 0.5]], frameid=2) # 1->b, 2->a
84+
frameid = acc.update(
85+
[1, 2], [1, 2], [[0.5, np.nan], [np.nan, 0.5]], frameid=2
86+
) # 1->b, 2->a
8587

8688
df = acc.events.loc[frameid]
87-
assert ((df.Type == 'SWITCH') | (df.Type == 'RAW') | (df.Type == 'TRANSFER')).all()
89+
assert ((df.Type == "SWITCH") | (df.Type == "RAW") | (df.Type == "TRANSFER")).all()
8890

8991
acc = mm.MOTAccumulator(max_switch_time=1)
9092
acc.update([1, 2], [1, 2], [[1, 0.5], [0.3, 1]], frameid=1) # 1->a, 2->b
91-
frameid = acc.update([1, 2], [1, 2], [[0.5, np.nan], [np.nan, 0.5]], frameid=5) # Later frame 1->b, 2->a
93+
frameid = acc.update(
94+
[1, 2], [1, 2], [[0.5, np.nan], [np.nan, 0.5]], frameid=5
95+
) # Later frame 1->b, 2->a
9296

9397
df = acc.events.loc[frameid]
94-
assert ((df.Type == 'MATCH') | (df.Type == 'RAW') | (df.Type == 'TRANSFER')).all()
98+
assert ((df.Type == "MATCH") | (df.Type == "RAW") | (df.Type == "TRANSFER")).all()
9599

96100

97101
def test_auto_id():
@@ -121,65 +125,191 @@ def test_merge_dataframes():
121125
acc.update([1, 2], [1, 2], [[1, 0.5], [0.3, 1]], frameid=2)
122126
acc.update([1, 2], [1, 2], [[0.2, np.nan], [np.nan, 0.1]], frameid=3)
123127

124-
r, mappings = mm.MOTAccumulator.merge_event_dataframes([acc.events, acc.events], return_mappings=True)
128+
r, mappings = mm.MOTAccumulator.merge_event_dataframes(
129+
[acc.events, acc.events], return_mappings=True
130+
)
125131

126132
expect = mm.MOTAccumulator.new_event_dataframe()
127133

128-
expect.loc[(0, 0), :] = ['RAW', np.nan, np.nan, np.nan]
129-
expect.loc[(0, 1), :] = ['RAW', np.nan, mappings[0]['hid_map'][1], np.nan]
130-
expect.loc[(0, 2), :] = ['RAW', np.nan, mappings[0]['hid_map'][2], np.nan]
131-
expect.loc[(0, 3), :] = ['FP', np.nan, mappings[0]['hid_map'][1], np.nan]
132-
expect.loc[(0, 4), :] = ['FP', np.nan, mappings[0]['hid_map'][2], np.nan]
133-
134-
expect.loc[(1, 0), :] = ['RAW', np.nan, np.nan, np.nan]
135-
expect.loc[(1, 1), :] = ['RAW', mappings[0]['oid_map'][1], np.nan, np.nan]
136-
expect.loc[(1, 2), :] = ['RAW', mappings[0]['oid_map'][2], np.nan, np.nan]
137-
expect.loc[(1, 3), :] = ['MISS', mappings[0]['oid_map'][1], np.nan, np.nan]
138-
expect.loc[(1, 4), :] = ['MISS', mappings[0]['oid_map'][2], np.nan, np.nan]
139-
140-
expect.loc[(2, 0), :] = ['RAW', np.nan, np.nan, np.nan]
141-
expect.loc[(2, 1), :] = ['RAW', mappings[0]['oid_map'][1], mappings[0]['hid_map'][1], 1]
142-
expect.loc[(2, 2), :] = ['RAW', mappings[0]['oid_map'][1], mappings[0]['hid_map'][2], 0.5]
143-
expect.loc[(2, 3), :] = ['RAW', mappings[0]['oid_map'][2], mappings[0]['hid_map'][1], 0.3]
144-
expect.loc[(2, 4), :] = ['RAW', mappings[0]['oid_map'][2], mappings[0]['hid_map'][2], 1.0]
145-
expect.loc[(2, 5), :] = ['MATCH', mappings[0]['oid_map'][1], mappings[0]['hid_map'][2], 0.5]
146-
expect.loc[(2, 6), :] = ['MATCH', mappings[0]['oid_map'][2], mappings[0]['hid_map'][1], 0.3]
147-
148-
expect.loc[(3, 0), :] = ['RAW', np.nan, np.nan, np.nan]
149-
expect.loc[(3, 1), :] = ['RAW', mappings[0]['oid_map'][1], mappings[0]['hid_map'][1], 0.2]
150-
expect.loc[(3, 2), :] = ['RAW', mappings[0]['oid_map'][2], mappings[0]['hid_map'][2], 0.1]
151-
expect.loc[(3, 3), :] = ['TRANSFER', mappings[0]['oid_map'][1], mappings[0]['hid_map'][1], 0.2]
152-
expect.loc[(3, 4), :] = ['SWITCH', mappings[0]['oid_map'][1], mappings[0]['hid_map'][1], 0.2]
153-
expect.loc[(3, 5), :] = ['TRANSFER', mappings[0]['oid_map'][2], mappings[0]['hid_map'][2], 0.1]
154-
expect.loc[(3, 6), :] = ['SWITCH', mappings[0]['oid_map'][2], mappings[0]['hid_map'][2], 0.1]
134+
expect.loc[(0, 0), :] = ["RAW", np.nan, np.nan, np.nan]
135+
expect.loc[(0, 1), :] = ["RAW", np.nan, mappings[0]["hid_map"][1], np.nan]
136+
expect.loc[(0, 2), :] = ["RAW", np.nan, mappings[0]["hid_map"][2], np.nan]
137+
expect.loc[(0, 3), :] = ["FP", np.nan, mappings[0]["hid_map"][1], np.nan]
138+
expect.loc[(0, 4), :] = ["FP", np.nan, mappings[0]["hid_map"][2], np.nan]
139+
140+
expect.loc[(1, 0), :] = ["RAW", np.nan, np.nan, np.nan]
141+
expect.loc[(1, 1), :] = ["RAW", mappings[0]["oid_map"][1], np.nan, np.nan]
142+
expect.loc[(1, 2), :] = ["RAW", mappings[0]["oid_map"][2], np.nan, np.nan]
143+
expect.loc[(1, 3), :] = ["MISS", mappings[0]["oid_map"][1], np.nan, np.nan]
144+
expect.loc[(1, 4), :] = ["MISS", mappings[0]["oid_map"][2], np.nan, np.nan]
145+
146+
expect.loc[(2, 0), :] = ["RAW", np.nan, np.nan, np.nan]
147+
expect.loc[(2, 1), :] = [
148+
"RAW",
149+
mappings[0]["oid_map"][1],
150+
mappings[0]["hid_map"][1],
151+
1,
152+
]
153+
expect.loc[(2, 2), :] = [
154+
"RAW",
155+
mappings[0]["oid_map"][1],
156+
mappings[0]["hid_map"][2],
157+
0.5,
158+
]
159+
expect.loc[(2, 3), :] = [
160+
"RAW",
161+
mappings[0]["oid_map"][2],
162+
mappings[0]["hid_map"][1],
163+
0.3,
164+
]
165+
expect.loc[(2, 4), :] = [
166+
"RAW",
167+
mappings[0]["oid_map"][2],
168+
mappings[0]["hid_map"][2],
169+
1.0,
170+
]
171+
expect.loc[(2, 5), :] = [
172+
"MATCH",
173+
mappings[0]["oid_map"][1],
174+
mappings[0]["hid_map"][2],
175+
0.5,
176+
]
177+
expect.loc[(2, 6), :] = [
178+
"MATCH",
179+
mappings[0]["oid_map"][2],
180+
mappings[0]["hid_map"][1],
181+
0.3,
182+
]
183+
184+
expect.loc[(3, 0), :] = ["RAW", np.nan, np.nan, np.nan]
185+
expect.loc[(3, 1), :] = [
186+
"RAW",
187+
mappings[0]["oid_map"][1],
188+
mappings[0]["hid_map"][1],
189+
0.2,
190+
]
191+
expect.loc[(3, 2), :] = [
192+
"RAW",
193+
mappings[0]["oid_map"][2],
194+
mappings[0]["hid_map"][2],
195+
0.1,
196+
]
197+
expect.loc[(3, 3), :] = [
198+
"TRANSFER",
199+
mappings[0]["oid_map"][1],
200+
mappings[0]["hid_map"][1],
201+
0.2,
202+
]
203+
expect.loc[(3, 4), :] = [
204+
"SWITCH",
205+
mappings[0]["oid_map"][1],
206+
mappings[0]["hid_map"][1],
207+
0.2,
208+
]
209+
expect.loc[(3, 5), :] = [
210+
"TRANSFER",
211+
mappings[0]["oid_map"][2],
212+
mappings[0]["hid_map"][2],
213+
0.1,
214+
]
215+
expect.loc[(3, 6), :] = [
216+
"SWITCH",
217+
mappings[0]["oid_map"][2],
218+
mappings[0]["hid_map"][2],
219+
0.1,
220+
]
155221

156222
# Merge duplication
157-
expect.loc[(4, 0), :] = ['RAW', np.nan, np.nan, np.nan]
158-
expect.loc[(4, 1), :] = ['RAW', np.nan, mappings[1]['hid_map'][1], np.nan]
159-
expect.loc[(4, 2), :] = ['RAW', np.nan, mappings[1]['hid_map'][2], np.nan]
160-
expect.loc[(4, 3), :] = ['FP', np.nan, mappings[1]['hid_map'][1], np.nan]
161-
expect.loc[(4, 4), :] = ['FP', np.nan, mappings[1]['hid_map'][2], np.nan]
162-
163-
expect.loc[(5, 0), :] = ['RAW', np.nan, np.nan, np.nan]
164-
expect.loc[(5, 1), :] = ['RAW', mappings[1]['oid_map'][1], np.nan, np.nan]
165-
expect.loc[(5, 2), :] = ['RAW', mappings[1]['oid_map'][2], np.nan, np.nan]
166-
expect.loc[(5, 3), :] = ['MISS', mappings[1]['oid_map'][1], np.nan, np.nan]
167-
expect.loc[(5, 4), :] = ['MISS', mappings[1]['oid_map'][2], np.nan, np.nan]
168-
169-
expect.loc[(6, 0), :] = ['RAW', np.nan, np.nan, np.nan]
170-
expect.loc[(6, 1), :] = ['RAW', mappings[1]['oid_map'][1], mappings[1]['hid_map'][1], 1]
171-
expect.loc[(6, 2), :] = ['RAW', mappings[1]['oid_map'][1], mappings[1]['hid_map'][2], 0.5]
172-
expect.loc[(6, 3), :] = ['RAW', mappings[1]['oid_map'][2], mappings[1]['hid_map'][1], 0.3]
173-
expect.loc[(6, 4), :] = ['RAW', mappings[1]['oid_map'][2], mappings[1]['hid_map'][2], 1.0]
174-
expect.loc[(6, 5), :] = ['MATCH', mappings[1]['oid_map'][1], mappings[1]['hid_map'][2], 0.5]
175-
expect.loc[(6, 6), :] = ['MATCH', mappings[1]['oid_map'][2], mappings[1]['hid_map'][1], 0.3]
176-
177-
expect.loc[(7, 0), :] = ['RAW', np.nan, np.nan, np.nan]
178-
expect.loc[(7, 1), :] = ['RAW', mappings[1]['oid_map'][1], mappings[1]['hid_map'][1], 0.2]
179-
expect.loc[(7, 2), :] = ['RAW', mappings[1]['oid_map'][2], mappings[1]['hid_map'][2], 0.1]
180-
expect.loc[(7, 3), :] = ['TRANSFER', mappings[1]['oid_map'][1], mappings[1]['hid_map'][1], 0.2]
181-
expect.loc[(7, 4), :] = ['SWITCH', mappings[1]['oid_map'][1], mappings[1]['hid_map'][1], 0.2]
182-
expect.loc[(7, 5), :] = ['TRANSFER', mappings[1]['oid_map'][2], mappings[1]['hid_map'][2], 0.1]
183-
expect.loc[(7, 6), :] = ['SWITCH', mappings[1]['oid_map'][2], mappings[1]['hid_map'][2], 0.1]
184-
185-
pd.util.testing.assert_frame_equal(r, expect)
223+
expect.loc[(4, 0), :] = ["RAW", np.nan, np.nan, np.nan]
224+
expect.loc[(4, 1), :] = ["RAW", np.nan, mappings[1]["hid_map"][1], np.nan]
225+
expect.loc[(4, 2), :] = ["RAW", np.nan, mappings[1]["hid_map"][2], np.nan]
226+
expect.loc[(4, 3), :] = ["FP", np.nan, mappings[1]["hid_map"][1], np.nan]
227+
expect.loc[(4, 4), :] = ["FP", np.nan, mappings[1]["hid_map"][2], np.nan]
228+
229+
expect.loc[(5, 0), :] = ["RAW", np.nan, np.nan, np.nan]
230+
expect.loc[(5, 1), :] = ["RAW", mappings[1]["oid_map"][1], np.nan, np.nan]
231+
expect.loc[(5, 2), :] = ["RAW", mappings[1]["oid_map"][2], np.nan, np.nan]
232+
expect.loc[(5, 3), :] = ["MISS", mappings[1]["oid_map"][1], np.nan, np.nan]
233+
expect.loc[(5, 4), :] = ["MISS", mappings[1]["oid_map"][2], np.nan, np.nan]
234+
235+
expect.loc[(6, 0), :] = ["RAW", np.nan, np.nan, np.nan]
236+
expect.loc[(6, 1), :] = [
237+
"RAW",
238+
mappings[1]["oid_map"][1],
239+
mappings[1]["hid_map"][1],
240+
1,
241+
]
242+
expect.loc[(6, 2), :] = [
243+
"RAW",
244+
mappings[1]["oid_map"][1],
245+
mappings[1]["hid_map"][2],
246+
0.5,
247+
]
248+
expect.loc[(6, 3), :] = [
249+
"RAW",
250+
mappings[1]["oid_map"][2],
251+
mappings[1]["hid_map"][1],
252+
0.3,
253+
]
254+
expect.loc[(6, 4), :] = [
255+
"RAW",
256+
mappings[1]["oid_map"][2],
257+
mappings[1]["hid_map"][2],
258+
1.0,
259+
]
260+
expect.loc[(6, 5), :] = [
261+
"MATCH",
262+
mappings[1]["oid_map"][1],
263+
mappings[1]["hid_map"][2],
264+
0.5,
265+
]
266+
expect.loc[(6, 6), :] = [
267+
"MATCH",
268+
mappings[1]["oid_map"][2],
269+
mappings[1]["hid_map"][1],
270+
0.3,
271+
]
272+
273+
expect.loc[(7, 0), :] = ["RAW", np.nan, np.nan, np.nan]
274+
expect.loc[(7, 1), :] = [
275+
"RAW",
276+
mappings[1]["oid_map"][1],
277+
mappings[1]["hid_map"][1],
278+
0.2,
279+
]
280+
expect.loc[(7, 2), :] = [
281+
"RAW",
282+
mappings[1]["oid_map"][2],
283+
mappings[1]["hid_map"][2],
284+
0.1,
285+
]
286+
expect.loc[(7, 3), :] = [
287+
"TRANSFER",
288+
mappings[1]["oid_map"][1],
289+
mappings[1]["hid_map"][1],
290+
0.2,
291+
]
292+
expect.loc[(7, 4), :] = [
293+
"SWITCH",
294+
mappings[1]["oid_map"][1],
295+
mappings[1]["hid_map"][1],
296+
0.2,
297+
]
298+
expect.loc[(7, 5), :] = [
299+
"TRANSFER",
300+
mappings[1]["oid_map"][2],
301+
mappings[1]["hid_map"][2],
302+
0.1,
303+
]
304+
expect.loc[(7, 6), :] = [
305+
"SWITCH",
306+
mappings[1]["oid_map"][2],
307+
mappings[1]["hid_map"][2],
308+
0.1,
309+
]
310+
311+
idx = expect.index
312+
expect.index = expect.index.set_levels(
313+
[idx.levels[0].astype(object), idx.levels[1].astype(object)]
314+
)
315+
pd.testing.assert_frame_equal(r, expect)

0 commit comments

Comments
 (0)