original_docstring: 
  		lbl1: assumed to be Nx3 or Nx2
  					pitch, yaw, roll if 3
            pitch, yaw otherwise
  		lbl2: same format as lbl1
  		isOpRadian: True  - output in radians
  								False - output in degrees
  	
docstring: assumed to be Nx3 or Nx2
  pitch, yaw, roll if 3
  pitch, yaw otherwise
  lbl2: same format as lbl1
  isOpRadian: True  - output in radians
  False - output in degrees
docstring_tokens: assumed to be Nx3 or Nx2 pitch yaw roll if 3 pitch yaw otherwise lbl2 : same format as lbl1 isOpRadian : True - output in radians False - output in degrees
code: def delta_rots(lbl1, lbl2, isOpRadian=False, opDeltaOnly=True):
  	'''
  		lbl1: assumed to be Nx3 or Nx2
  					pitch, yaw, roll if 3
            pitch, yaw otherwise
  		lbl2: same format as lbl1
  		isOpRadian: True  - output in radians
  								False - output in degrees
  	'''
  	N1, s1 = lbl1.shape
  	assert s1 == 2 or s1 ==3
  	N2, s2 = lbl2.shape
  	assert N1==N2 and s1==s2
  	if s1 == 2:
  		p1, y1 = lbl1[:,0], lbl1[:,1]
  		p2, y2 = lbl2[:,0], lbl2[:,1]
  		r1, r2 = np.zeros((N1,)), np.zeros((N1,))
  	else:
  		p1, y1, r1 = lbl1[:,0], lbl1[:,1], lbl1[:,2]
  		p2, y2, r2 = lbl2[:,0], lbl2[:,1], lbl2[:,2]
  	deltaRot, rot1, rot2 = [], [], []
  	for n in range(N1):
  		rMat1      = t3eu.euler2mat(p1[n], y1[n], r1[n], 'szxy')
  		rMat2      = t3eu.euler2mat(p2[n], y2[n], r2[n], 'szxy')
  		dRotMat    = np.dot(rMat2, rMat1.transpose())
  		pitch, yaw, roll = t3eu.mat2euler(dRotMat, 'szxy')
  		_, dtheta  = t3eu.euler2axangle(pitch, yaw, roll, 'szxy')
  		_, theta1  = t3eu.euler2axangle(p1[n], y1[n], r1[n], 'szxy') 
  		_, theta2  = t3eu.euler2axangle(p2[n], y2[n], r2[n], 'szxy') 
  		deltaRot.append(dtheta)
  		rot1.append(theta1)
  		rot2.append(theta2)
  	if not isOpRadian:
  		deltaRot = [(x * 180.)/np.pi for x in deltaRot]
  		rot1     = [(x * 180.)/np.pi for x in rot1]
  		rot2     = [(x * 180.)/np.pi for x in rot2]
  	if opDeltaOnly:
  		return deltaRot
  	else:
  		return deltaRot, rot1, rot2
code_tokens: def delta_rots ( lbl1 , lbl2 , isOpRadian = False , opDeltaOnly = True ) : N1 , s1 = lbl1 . shape assert s1 == 2 or s1 == 3 N2 , s2 = lbl2 . shape assert N1 == N2 and s1 == s2 if s1 == 2 : p1 , y1 = lbl1 [ : , 0 ] , lbl1 [ : , 1 ] p2 , y2 = lbl2 [ : , 0 ] , lbl2 [ : , 1 ] r1 , r2 = np . zeros ( ( N1 , ) ) , np . zeros ( ( N1 , ) ) else : p1 , y1 , r1 = lbl1 [ : , 0 ] , lbl1 [ : , 1 ] , lbl1 [ : , 2 ] p2 , y2 , r2 = lbl2 [ : , 0 ] , lbl2 [ : , 1 ] , lbl2 [ : , 2 ] deltaRot , rot1 , rot2 = [ ] , [ ] , [ ] for n in range ( N1 ) : rMat1 = t3eu . euler2mat ( p1 [ n ] , y1 [ n ] , r1 [ n ] , 'szxy' ) rMat2 = t3eu . euler2mat ( p2 [ n ] , y2 [ n ] , r2 [ n ] , 'szxy' ) dRotMat = np . dot ( rMat2 , rMat1 . transpose ( ) ) pitch , yaw , roll = t3eu . mat2euler ( dRotMat , 'szxy' ) _ , dtheta = t3eu . euler2axangle ( pitch , yaw , roll , 'szxy' ) _ , theta1 = t3eu . euler2axangle ( p1 [ n ] , y1 [ n ] , r1 [ n ] , 'szxy' ) _ , theta2 = t3eu . euler2axangle ( p2 [ n ] , y2 [ n ] , r2 [ n ] , 'szxy' ) deltaRot . append ( dtheta ) rot1 . append ( theta1 ) rot2 . append ( theta2 ) if not isOpRadian : deltaRot = [ ( x * 180. ) / np . pi for x in deltaRot ] rot1 = [ ( x * 180. ) / np . pi for x in rot1 ] rot2 = [ ( x * 180. ) / np . pi for x in rot2 ] if opDeltaOnly : return deltaRot else : return deltaRot , rot1 , rot2
short_docstring: lbl1: assumed to be Nx3 or Nx2
  pitch, yaw, roll if 3
  pitch, yaw otherwise
  lbl2: same format as lbl1
  isOpRadian: True  - output in radians
  False - output in degrees
short_docstring_tokens: lbl1 : assumed to be Nx3 or Nx2 pitch yaw roll if 3 pitch yaw otherwise lbl2 : same format as lbl1 isOpRadian : True - output in radians False - output in degrees
comment: '''
  		lbl1: assumed to be Nx3 or Nx2
  					pitch, yaw, roll if 3
            pitch, yaw otherwise
  		lbl2: same format as lbl1
  		isOpRadian: True  - output in radians
  								False - output in degrees
  	'''