#!/usr/bin/env python3
# type: ignore
import random
from collections import defaultdict
from tqdm import tqdm
from openpilot . selfdrive . car . fw_versions import match_fw_to_car_fuzzy
from openpilot . selfdrive . car . toyota . values import FW_VERSIONS as TOYOTA_FW_VERSIONS
from openpilot . selfdrive . car . honda . values import FW_VERSIONS as HONDA_FW_VERSIONS
from openpilot . selfdrive . car . hyundai . values import FW_VERSIONS as HYUNDAI_FW_VERSIONS
from openpilot . 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 ( _ , 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 } " )