#!/usr/bin/env python3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  os 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  sys 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  argparse 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  cereal  import  log 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  common . basedir  import  BASEDIR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								os . environ [ ' BASEDIR ' ]  =  BASEDIR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								def  get_arg_parser ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  parser  =  argparse . ArgumentParser ( 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      description = " Compare two result files " , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      formatter_class = argparse . ArgumentDefaultsHelpFormatter ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  parser . add_argument ( " dir1 " ,  nargs = ' ? ' ,  default = ' /data/ubloxdc ' , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                      help = " Directory path 1 from which events are loaded " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  parser . add_argument ( " dir2 " ,  nargs = ' ? ' ,  default = ' /data/ubloxdpy ' , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                      help = " Directory path 2 from which msgs are loaded " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  parser 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								def  read_file ( fn ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  with  open ( fn ,  ' rb ' )  as  f : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  f . read ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								def  compare_results ( dir1 ,  dir2 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  onlyfiles1  =  [ f  for  f  in  os . listdir ( dir1 )  if  os . path . isfile ( os . path . join ( dir1 ,  f ) ) ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  onlyfiles1 . sort ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  onlyfiles2  =  [ f  for  f  in  os . listdir ( dir2 )  if  os . path . isfile ( os . path . join ( dir2 ,  f ) ) ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  onlyfiles2 . sort ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  len ( onlyfiles1 )  !=  len ( onlyfiles2 ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    print ( ' len mismatch:  {}  !=  {} ' . format ( len ( onlyfiles1 ) ,  len ( onlyfiles2 ) ) ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  - 1 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  events1  =  [ log . Event . from_bytes ( read_file ( os . path . join ( dir1 ,  f ) ) )  for  f  in  onlyfiles1 ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  events2  =  [ log . Event . from_bytes ( read_file ( os . path . join ( dir2 ,  f ) ) )  for  f  in  onlyfiles2 ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  for  i  in  range ( len ( events1 ) ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  events1 [ i ] . which ( )  !=  events2 [ i ] . which ( ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      print ( ' event  {}  type mismatch:  {}  !=  {} ' . format ( i ,  events1 [ i ] . which ( ) ,  events2 [ i ] . which ( ) ) ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  - 2 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  events1 [ i ] . which ( )  ==  ' gpsLocationExternal ' : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      old_gps  =  events1 [ i ] . gpsLocationExternal 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      gps  =  events2 [ i ] . gpsLocationExternal 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      # print(gps, old_gps) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      attrs  =  [ ' flags ' ,  ' latitude ' ,  ' longitude ' ,  ' altitude ' ,  ' speed ' ,  ' bearing ' , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								               ' accuracy ' ,  ' timestamp ' ,  ' source ' ,  ' vNED ' ,  ' verticalAccuracy ' ,  ' bearingAccuracy ' ,  ' speedAccuracy ' ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      for  attr  in  attrs : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        o  =  getattr ( old_gps ,  attr ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        n  =  getattr ( gps ,  attr ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  attr  ==  ' vNED ' : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          if  len ( o )  !=  len ( n ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            print ( ' Gps vNED len mismatch ' ,  o ,  n ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  - 3 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          else : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            for  i  in  range ( len ( o ) ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								              if  abs ( o [ i ]  -  n [ i ] )  >  1e-3 : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                print ( ' Gps vNED mismatch ' ,  o ,  n ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                return 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        elif  o  !=  n : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' Gps mismatch ' ,  attr ,  o ,  n ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          return  - 4 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    elif  events1 [ i ] . which ( )  ==  ' ubloxGnss ' : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      old_gnss  =  events1 [ i ] . ubloxGnss 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      gnss  =  events2 [ i ] . ubloxGnss 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  old_gnss . which ( )  ==  ' measurementReport '  and  gnss . which ( )  ==  ' measurementReport ' : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        attrs  =  [ ' gpsWeek ' ,  ' leapSeconds ' ,  ' measurements ' ,  ' numMeas ' ,  ' rcvTow ' ,  ' receiverStatus ' ,  ' schema ' ] 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        for  attr  in  attrs : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          o  =  getattr ( old_gnss . measurementReport ,  attr ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          n  =  getattr ( gnss . measurementReport ,  attr ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          if  str ( o )  !=  str ( n ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            print ( ' measurementReport  {}  mismatched ' . format ( attr ) ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  - 5 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  not  ( str ( old_gnss . measurementReport )  ==  str ( gnss . measurementReport ) ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' Gnss measurementReport mismatched! ' ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' gnss measurementReport old ' ,  old_gnss . measurementReport . measurements ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' gnss measurementReport new ' ,  gnss . measurementReport . measurements ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          return  - 6 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      elif  old_gnss . which ( )  ==  ' ephemeris '  and  gnss . which ( )  ==  ' ephemeris ' : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  not  ( str ( old_gnss . ephemeris )  ==  str ( gnss . ephemeris ) ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' Gnss ephemeris mismatched! ' ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' gnss ephemeris old ' ,  old_gnss . ephemeris ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          print ( ' gnss ephemeris new ' ,  gnss . ephemeris ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          return  - 7 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  print ( ' All  {}  events matched! ' . format ( len ( events1 ) ) ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  0 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								if  __name__  ==  " __main__ " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  args  =  get_arg_parser ( ) . parse_args ( sys . argv [ 1 : ] ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  compare_results ( args . dir1 ,  args . dir2 )