import numpy as np def circular_1d(x, c): """ Wrap values in circular space to smallest magnitude representation :param x: n, | values in circular space (eg S^1) :param c: period of circular space [0, c) (eg 2pi) :return: n, | distances """ b = np.array([-c, 0]) d = np.min(np.abs((x % c) + b[:, np.newaxis]), axis=0) return d