Fuzzy match on ECU FW versions (#20687)
* Fuzzy match on 3+ ECUs
* reuse dict
* exclude some shared ecus to be sure
* show alert for fuzzy match
* use title case
* require community toggle
* refactor
* do both exact and fuzzy in test script
* update test script
* add fuzz test and lower matches to >= 2
* strip alert length
* sort mismatches
* add fw tests to test_startup
* bump cereal
old-commit-hash: e4f73fbda5
commatwo_master
parent
c0ac9bb63c
commit
ee0e80a6d4
9 changed files with 266 additions and 46 deletions
@ -1 +1 @@ |
||||
Subproject commit 957147cb8428d984a776ca468f866160f3b71bbc |
||||
Subproject commit b39c6fc26d93ca776b27a2e4005b12ae85e7bacc |
@ -0,0 +1,52 @@ |
||||
#!/usr/bin/env python3 |
||||
# type: ignore |
||||
import random |
||||
from collections import defaultdict |
||||
|
||||
from tqdm import tqdm |
||||
|
||||
from selfdrive.car.fw_versions import match_fw_to_car_fuzzy |
||||
from selfdrive.car.toyota.values import FW_VERSIONS as TOYOTA_FW_VERSIONS |
||||
from selfdrive.car.honda.values import FW_VERSIONS as HONDA_FW_VERSIONS |
||||
from selfdrive.car.hyundai.values import FW_VERSIONS as HYUNDAI_FW_VERSIONS |
||||
from selfdrive.car.volkswagen.values import FW_VERSIONS as VW_FW_VERSIONS |
||||
|
||||
|
||||
FWS = {} |
||||
FWS.update(TOYOTA_FW_VERSIONS) |
||||
FWS.update(HONDA_FW_VERSIONS) |
||||
FWS.update(HYUNDAI_FW_VERSIONS) |
||||
FWS.update(VW_FW_VERSIONS) |
||||
|
||||
if __name__ == "__main__": |
||||
total = 0 |
||||
match = 0 |
||||
wrong_match = 0 |
||||
confusions = defaultdict(set) |
||||
|
||||
for _ in tqdm(range(1000)): |
||||
for candidate, fws in FWS.items(): |
||||
fw_dict = {} |
||||
for (tp, addr, subaddr), fw_list in fws.items(): |
||||
fw_dict[(addr, subaddr)] = random.choice(fw_list) |
||||
|
||||
matches = match_fw_to_car_fuzzy(fw_dict, log=False, exclude=candidate) |
||||
|
||||
total += 1 |
||||
if len(matches) == 1: |
||||
if list(matches)[0] == candidate: |
||||
match += 1 |
||||
else: |
||||
confusions[candidate] |= matches |
||||
wrong_match += 1 |
||||
|
||||
print() |
||||
for candidate, wrong_matches in sorted(confusions.items()): |
||||
print(candidate, wrong_matches) |
||||
|
||||
print() |
||||
print(f"Total fuzz cases: {total}") |
||||
print(f"Correct matches: {match}") |
||||
print(f"Wrong matches: {wrong_match}") |
||||
|
||||
|
Loading…
Reference in new issue