def test_bincountFn(self): w = vector("w") def ref(data, w=None, minlength=None): size = int(data.max() + 1) if minlength: size = max(size, minlength) if w is not None: out = np.zeros(size, dtype=w.dtype) for i in range(data.shape[0]): out[data[i]] += w[i] else: out = np.zeros(size, dtype=a.dtype) for i in range(data.shape[0]): out[data[i]] += 1 return out for dtype in ( "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", ): x = vector("x", dtype=dtype) a = np.random.randint(1, 51, size=(25)).astype(dtype) weights = np.random.random((25, )).astype(config.floatX) f1 = aesara.function([x], bincount(x)) f2 = aesara.function([x, w], bincount(x, weights=w)) assert (ref(a) == f1(a)).all() assert np.allclose(ref(a, weights), f2(a, weights)) f3 = aesara.function([x], bincount(x, minlength=55)) f4 = aesara.function([x], bincount(x, minlength=5)) assert (ref(a, minlength=55) == f3(a)).all() assert (ref(a, minlength=5) == f4(a)).all() # skip the following test when using unsigned ints if not dtype.startswith("u"): a[0] = -1 f5 = aesara.function([x], bincount(x, assert_nonneg=True)) with pytest.raises(AssertionError): f5(a)
def test_bincountFn(self, dtype): w = vector("w") rng = np.random.default_rng(4282) def ref(data, w=None, minlength=None): size = int(data.max() + 1) if minlength: size = max(size, minlength) if w is not None: out = np.zeros(size, dtype=w.dtype) for i in range(data.shape[0]): out[data[i]] += w[i] else: out = np.zeros(size, dtype=a.dtype) for i in range(data.shape[0]): out[data[i]] += 1 return out x = vector("x", dtype=dtype) a = rng.integers(1, 51, size=(25)).astype(dtype) weights = rng.random((25, )).astype(config.floatX) f1 = aesara.function([x], bincount(x)) f2 = aesara.function([x, w], bincount(x, weights=w)) assert np.array_equal(ref(a), f1(a)) assert np.allclose(ref(a, weights), f2(a, weights)) f3 = aesara.function([x], bincount(x, minlength=55)) f4 = aesara.function([x], bincount(x, minlength=5)) assert np.array_equal(ref(a, minlength=55), f3(a)) assert np.array_equal(ref(a, minlength=5), f4(a)) # skip the following test when using unsigned ints if not dtype.startswith("u"): a[0] = -1 f5 = aesara.function([x], bincount(x, assert_nonneg=True)) with pytest.raises(AssertionError): f5(a)