docs: def rot(self, x, fun, rot=1, args=()):
          """returns ``fun(rotation(x), *args)``, ie. `fun` applied to a rotated argument"""
          if len(np.shape(array(x))) > 1:  # parallelized
              res = []
              for x in x:
                  res.append(self.rot(x, fun, rot, args))
              return res
  
          if rot:
              return fun(rotate(x, *args))
          else:
              return fun(x)