docs: def R_rot(th):
      """Return a rotation matrix.
  
      Parameters
      ----------
      th: array, shape (n, m)
          Angles by which to rotate about each m rotational degree of freedom
          (m=1 in 2 dimensions, m=3 in 3 dimensions).
  
      Returns
      -------
      R: array, shape (n, m, m)
      """
      try:
          dof = th.shape[-1]
      # If th is a python float
      except AttributeError:
          dof = 1
          th = np.array([th])
      except IndexError:
          dof = 1
          th = np.array([th])
      # If th is a numpy float, i.e. 0d array
      if dof == 1:
          return R_rot_2d(th)
      elif dof == 3:
          return R_rot_3d(th)
      else:
          raise Exception('Rotation matrix not implemented in this dimension')