def range_in(x, y, p): if is_scalar(x) or not is_scalar(y): return x else: splitY = int((x.shape[0] - 1) * (y + 1) / 2.0) splitP = int((x.shape[0] - 1) * (p + 1) / 2.0) start = min(splitY, splitP) end = max(splitY, splitP) return np.copy(x[start:end + 1])
def differences(x, y, p): if is_scalar(x): return x else: z = x.flatten() if z.size > 2: return np.copy(np.diff(x.flatten())) else: return z
def test_pass_through(self): inp = 1 exp = True act = supp.is_scalar(inp) self.assertEqual(exp, act) inp = np.array([1]) exp = False act = supp.is_scalar(inp) self.assertEqual(exp, act) inp = np.array([[1], [2]]) exp = False act = supp.is_scalar(inp) self.assertEqual(exp, act) inp = np.array([[1], [2]]) exp = False act = supp.is_scalar(inp) self.assertEqual(exp, act) inp = np.array([1, 2, 3]) exp = False act = supp.is_scalar(inp) self.assertEqual(exp, act)
def f_last(x, y, p): if is_scalar(x): return x else: z = x.flatten() return z[len(z) - 1]
def f_first(x, y, p): if is_scalar(x): return x else: return x.flatten()[0]
def vectorize(x, y, p): if is_scalar(x): return x else: return np.copy(x.flatten())
def index_p(x, y, p): if is_scalar(x): return x else: splitP = int((x.shape[0] - 1) * (p + 1) / 2.0) return np.copy(x[splitP])
def index_y(x, y, p): if is_scalar(x) or not is_scalar(y): return x else: splitY = int((x.shape[0] - 1) * (y + 1) / 2.0) return np.copy(x[splitY])
def ones(x, y, p): if is_scalar(x): return np.array([1]) else: return np.ones(x.shape)
def zeros(x, y, p): if is_scalar(x): return np.array([0]) else: return np.zeros(x.shape)
def constvectord(x, y, p): if is_scalar(x): return np.array([p]) else: return np.full(x.shape, p)
def split_after(x, y, p): if is_scalar(x): return x else: splitIndex = int((x.shape[0] - 1) * (p + 1) / 2.0) return np.copy(x[splitIndex:])
def vec_from_double(x, y, p): if is_scalar(x): return np.array([x]) else: return x
def transpose(x, y, p): if is_scalar(x): return x else: return np.transpose(x)
def rotate(x, y, p): if is_scalar(x): return x else: return np.roll(x, int(np.ceil(p)))
def split_before(x, y, p): if is_scalar(x): return x else: splitIndex = int((x.shape[0] - 1) * (p + 1) / 2.0) return np.copy(x[:splitIndex + 1])