code: def get_ggt(self, n, u):
          
          gk = self[0].einsum_sequence([n, u, n, u])
          result = -(2*gk*np.outer(u, u) + self[0].einsum_sequence([n, n])
                     + self[1].einsum_sequence([n, u, n, u])) / (2*gk)
          return result
docs: Gets the Generalized Gruneisen tensor for a given
          third-order elastic tensor expansion.
  
          Args:
              n (3x1 array-like): normal mode direction
              u (3x1 array-like): polarization direction