docs: def cigar(self, x, rot=0, cond=1e6, noise=0):
          """Cigar test objective function"""
          if rot:
              x = rotate(x)
          x = [x] if isscalar(x[0]) else x  # scalar into list
          f = [(x[0]**2 + cond * sum(x[1:]**2)) * np.exp(noise * np.random.randn(1)[0] / len(x)) for x in x]
          return f if len(f) > 1 else f[0]  # 1-element-list into scalar