code: def get_principal_axes(self):
          
          # Perform eigendecomposition - returns in order P, B, T
          _ = self.eigendecompose(normalise=True)
          principal_axes = GCMTPrincipalAxes()
          # Eigenvalues
          principal_axes.p_axis = {'eigenvalue': self.eigenvalues[0]}
          principal_axes.b_axis = {'eigenvalue': self.eigenvalues[1]}
          principal_axes.t_axis = {'eigenvalue': self.eigenvalues[2]}
          # Eigen vectors
          # 1) P axis
          azim, plun = utils.get_azimuth_plunge(self.eigenvectors[:, 0], True)
          principal_axes.p_axis['azimuth'] = azim
          principal_axes.p_axis['plunge'] = plun
          # 2) B axis
          azim, plun = utils.get_azimuth_plunge(self.eigenvectors[:, 1], True)
          principal_axes.b_axis['azimuth'] = azim
          principal_axes.b_axis['plunge'] = plun
          # 3) T axis
          azim, plun = utils.get_azimuth_plunge(self.eigenvectors[:, 2], True)
          principal_axes.t_axis['azimuth'] = azim
          principal_axes.t_axis['plunge'] = plun
          return principal_axes
docs: Uses the eigendecomposition to extract the principal axes from the 
          moment tensor - returning an instance of the GCMTPrincipalAxes class