original_docstring: 
  	S = GetStructuralTranslationCoefficients(OrderS,OrderR)
  	Computes the 'Structural Translation Coefficients' used in Spherical
  	Harmonic translation routines, as defined in section 3.2.1 of: 
  	Gumerov, N., & Duraiswami, R. (2005). Fast Multipole Methods for the
  	Helmholtz Equation in Three Dimensions (1st ed.). Elsevier Science.
  	Arguments:
  	OrderS    Order of the source   (non-negative real integer scalar)
  	OrderR    Order of the receiver (non-negative real integer scalar)
  	Returned variable is a 3D array of size [(OrderR+1)**2, (OrderS+1)**2,
  	(OrderR+OrderS+1)**2]. 
  	
docstring: S = GetStructuralTranslationCoefficients(OrderS,OrderR)
  Computes the 'Structural Translation Coefficients' used in Spherical
  Harmonic translation routines, as defined in section 3.2.1 of:
  Gumerov, N., & Duraiswami, R.
docstring_tokens: S = GetStructuralTranslationCoefficients ( OrderS OrderR ) Computes the ' Structural Translation Coefficients ' used in Spherical Harmonic translation routines as defined in section 3 . 2 . 1 of : Gumerov N . & Duraiswami R .
code: def GetStructuralTranslationCoefficients(OrderS,OrderR):
  	"""
  	S = GetStructuralTranslationCoefficients(OrderS,OrderR)
  	Computes the 'Structural Translation Coefficients' used in Spherical
  	Harmonic translation routines, as defined in section 3.2.1 of: 
  	Gumerov, N., & Duraiswami, R. (2005). Fast Multipole Methods for the
  	Helmholtz Equation in Three Dimensions (1st ed.). Elsevier Science.
  	Arguments:
  	OrderS    Order of the source   (non-negative real integer scalar)
  	OrderR    Order of the receiver (non-negative real integer scalar)
  	Returned variable is a 3D array of size [(OrderR+1)**2, (OrderS+1)**2,
  	(OrderR+OrderS+1)**2]. 
  	"""
  
  	# Order required for translation:
  	OrderT = OrderS + OrderR
  
  	# Allocate cell array:
  	S = np.zeros(((OrderT+1)**2, (OrderR+1)**2, (OrderS+1)**2), dtype = np.complex64)
  
  	# Loop over translation order (n2 & m2):
  	for nT in  np.arange(OrderT+1, dtype = np.float64): # n'' in book
  		for mT in np.arange(-nT, nT+1, dtype = np.float64): # m'' in book
  			iT = sub2indSH(mT,nT)
  			if mT < 0: # because m'' is negated
  				epT = (-1)**mT
  			else:
  				epT = 1.0
  
  			# Loop over source order (nS & mS):
  			for nS in np.arange(OrderS+1, dtype = np.float64): # n in book
  				for mS in np.arange(-nS, nS+1, dtype = np.float64): # m in book
  					if mS > 0:
  						epS = (-1)**mS
  					else:
  						epS = 1.0
  
  					# Loop over recevier order (nR & mR):
  					for nR in np.arange(OrderR+1, dtype = np.float64): # n' in book
  						for mR in np.arange(-nR, nR+1, dtype = np.float64): # m' in book
  							if mR < 0: # because m' is negated
  								epR = (-1)**mR
  							else:
  								epR = 1.0
  
  							# Compute coefficient if within non-zero range:
  							if nT >= abs(nR-nS) and nT <= (nR+nS):
  								S[int(iT), int(sub2indSH(mR,nR)), int(sub2indSH(mS,nS))] = (
  											1j**(nR+nT-nS) * epS * epR * epT 
  											* np.sqrt(4*np.pi*(2*nS+1)*(2*nR+1)*(2*nT+1))
  											* Wigner3jSymbol(nS, nR, nT, mS, -mR, -mT)
  											* Wigner3jSymbol(nS, nR, nT, 0, 0, 0) 
  											)
  
  	return S
code_tokens: def GetStructuralTranslationCoefficients ( OrderS , OrderR ) : OrderT = OrderS + OrderR S = np . zeros ( ( ( OrderT + 1 ) ** 2 , ( OrderR + 1 ) ** 2 , ( OrderS + 1 ) ** 2 ) , dtype = np . complex64 ) for nT in np . arange ( OrderT + 1 , dtype = np . float64 ) : for mT in np . arange ( - nT , nT + 1 , dtype = np . float64 ) : iT = sub2indSH ( mT , nT ) if mT < 0 : epT = ( - 1 ) ** mT else : epT = 1.0 for nS in np . arange ( OrderS + 1 , dtype = np . float64 ) : for mS in np . arange ( - nS , nS + 1 , dtype = np . float64 ) : if mS > 0 : epS = ( - 1 ) ** mS else : epS = 1.0 for nR in np . arange ( OrderR + 1 , dtype = np . float64 ) : for mR in np . arange ( - nR , nR + 1 , dtype = np . float64 ) : if mR < 0 : epR = ( - 1 ) ** mR else : epR = 1.0 if nT >= abs ( nR - nS ) and nT <= ( nR + nS ) : S [ int ( iT ) , int ( sub2indSH ( mR , nR ) ) , int ( sub2indSH ( mS , nS ) ) ] = ( 1j ** ( nR + nT - nS ) * epS * epR * epT * np . sqrt ( 4 * np . pi * ( 2 * nS + 1 ) * ( 2 * nR + 1 ) * ( 2 * nT + 1 ) ) * Wigner3jSymbol ( nS , nR , nT , mS , - mR , - mT ) * Wigner3jSymbol ( nS , nR , nT , 0 , 0 , 0 ) ) return S
short_docstring: S = GetStructuralTranslationCoefficients(OrderS,OrderR)
  Computes the 'Structural Translation Coefficients' used in Spherical
  Harmonic translation routines, as defined in section 3.2.1 of:
  Gumerov, N., & Duraiswami, R. (2005).
short_docstring_tokens: S = GetStructuralTranslationCoefficients ( OrderS OrderR ) Computes the ' Structural Translation Coefficients ' used in Spherical Harmonic translation routines as defined in section 3 . 2 . 1 of : Gumerov N . & Duraiswami R . ( 2005 ) .
comment: """
  	S = GetStructuralTranslationCoefficients(OrderS,OrderR)
  	Computes the 'Structural Translation Coefficients' used in Spherical
  	Harmonic translation routines, as defined in section 3.2.1 of: 
  	Gumerov, N., & Duraiswami, R. (2005). Fast Multipole Methods for the
  	Helmholtz Equation in Three Dimensions (1st ed.). Elsevier Science.
  	Arguments:
  	OrderS    Order of the source   (non-negative real integer scalar)
  	OrderR    Order of the receiver (non-negative real integer scalar)
  	Returned variable is a 3D array of size [(OrderR+1)**2, (OrderS+1)**2,
  	(OrderR+OrderS+1)**2]. 
  	"""$SEP$# Order required for translation:$SEP$# Allocate cell array:$SEP$# Loop over translation order (n2 & m2):$SEP$# n'' in book$SEP$# m'' in book$SEP$# because m'' is negated$SEP$# Loop over source order (nS & mS):$SEP$# n in book$SEP$# m in book$SEP$# Loop over recevier order (nR & mR):$SEP$# n' in book$SEP$# m' in book$SEP$# because m' is negated$SEP$# Compute coefficient if within non-zero range: