import  unittest 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  random 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  timeit 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  common . kalman . simple_kalman  import  KF1D 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  common . kalman . simple_kalman_old  import  KF1D  as  KF1D_old 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  TestSimpleKalman ( unittest . TestCase ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  setUp ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dt  =  0.01 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x0_0  =  0.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x1_0  =  0.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    A0_0  =  1.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    A0_1  =  dt 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    A1_0  =  0.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    A1_1  =  1.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    C0_0  =  1.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    C0_1  =  0.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    K0_0  =  0.12287673 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    K1_0  =  0.29666309 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    self . kf_old  =  KF1D_old ( x0 = np . array ( [ [ x0_0 ] ,  [ x1_0 ] ] ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           A = np . array ( [ [ A0_0 ,  A0_1 ] ,  [ A1_0 ,  A1_1 ] ] ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           C = np . array ( [ C0_0 ,  C0_1 ] ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           K = np . array ( [ [ K0_0 ] ,  [ K1_0 ] ] ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . kf  =  KF1D ( x0 = [ [ x0_0 ] ,  [ x1_0 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   A = [ [ A0_0 ,  A0_1 ] ,  [ A1_0 ,  A1_1 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   C = [ C0_0 ,  C0_1 ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   K = [ [ K0_0 ] ,  [ K1_0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  test_getter_setter ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . kf . x  =  [ [ 1.0 ] ,  [ 1.0 ] ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . assertEqual ( self . kf . x ,  [ [ 1.0 ] ,  [ 1.0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  update_returns_state ( self ) : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  self . kf . update ( 100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . assertEqual ( x ,  self . kf . x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  test_old_equal_new ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  _  in  range ( 1000 ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      v_wheel  =  random . uniform ( 0 ,  200 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      x_old  =  self . kf_old . update ( v_wheel ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      x  =  self . kf . update ( v_wheel ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Compare the output x, verify that the error is less than 1e-4 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      np . testing . assert_almost_equal ( x_old [ 0 ] ,  x [ 0 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      np . testing . assert_almost_equal ( x_old [ 1 ] ,  x [ 1 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  test_new_is_faster ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setup  =  """ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  common . kalman . simple_kalman  import  KF1D 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  common . kalman . simple_kalman_old  import  KF1D  as  KF1D_old 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dt  =  0.01 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								x0_0  =  0.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								x1_0  =  0.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								A0_0  =  1.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								A0_1  =  dt 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								A1_0  =  0.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								A1_1  =  1.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								C0_0  =  1.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								C0_1  =  0.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								K0_0  =  0.12287673 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								K1_0  =  0.29666309 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								kf_old  =  KF1D_old ( x0 = np . array ( [ [ x0_0 ] ,  [ x1_0 ] ] ) , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  A = np . array ( [ [ A0_0 ,  A0_1 ] ,  [ A1_0 ,  A1_1 ] ] ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  C = np . array ( [ C0_0 ,  C0_1 ] ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  K = np . array ( [ [ K0_0 ] ,  [ K1_0 ] ] ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								kf  =  KF1D ( x0 = [ [ x0_0 ] ,  [ x1_0 ] ] , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          A = [ [ A0_0 ,  A0_1 ] ,  [ A1_0 ,  A1_1 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          C = [ C0_0 ,  C0_1 ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          K = [ [ K0_0 ] ,  [ K1_0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    kf_speed  =  timeit . timeit ( " kf.update(1234) " ,  setup = setup ,  number = 10000 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    kf_old_speed  =  timeit . timeit ( " kf_old.update(1234) " ,  setup = setup ,  number = 10000 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . assertTrue ( kf_speed  <  kf_old_speed  /  4 ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unittest . main ( )