#!/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 } " )