code: def _rotate(lon, lat, theta, axis='x'):
      
      # Convert input to numpy arrays in radians
      lon, lat = np.atleast_1d(lon, lat)
      lon, lat = map(np.radians, [lon, lat])
      theta = np.radians(theta)
  
      # Convert to cartesian coords for the rotation
      x, y, z = sph2cart(lon, lat)
  
      lookup = {'x':_rotate_x, 'y':_rotate_y, 'z':_rotate_z}
      X, Y, Z = lookup[axis](x, y, z, theta)
  
      # Now convert back to spherical coords (longitude and latitude, ignore R)
      lon, lat = cart2sph(X,Y,Z)
      return lon, lat
docs: Rotate "lon", "lat" coords (in _degrees_) about the X-axis by "theta"
      degrees.  This effectively simulates rotating a physical stereonet.
      Returns rotated lon, lat coords in _radians_).