def test_fit(nrows, ncols, n_components, sparse_input, density, sparse_format, batch_size_divider): if sparse_format == 'csc': pytest.skip("cupyx.scipy.sparse.csc.csc_matrix does not support" " indexing as of cupy 7.6.0") if sparse_input: X = cupyx.scipy.sparse.random(nrows, ncols, density=density, random_state=10, format=sparse_format) else: X, _ = make_blobs(n_samples=nrows, n_features=ncols, random_state=10) cu_ipca = cuIPCA(n_components=n_components, batch_size=int(nrows / batch_size_divider)) cu_ipca.fit(X) cu_t = cu_ipca.transform(X) cu_inv = cu_ipca.inverse_transform(cu_t) sk_ipca = skIPCA(n_components=n_components, batch_size=int(nrows / batch_size_divider)) if sparse_input: X = X.get() else: X = cp.asnumpy(X) sk_ipca.fit(X) sk_t = sk_ipca.transform(X) sk_inv = sk_ipca.inverse_transform(sk_t) assert array_equal(cu_inv, sk_inv, 5e-5, with_sign=True)
def test_partial_fit(nrows, ncols, n_components, density, batch_size_divider): X, _ = make_blobs(n_samples=nrows, n_features=ncols, random_state=10) cu_ipca = cuIPCA(n_components=n_components) sample_size = int(nrows / batch_size_divider) for i in range(0, nrows, sample_size): cu_ipca.partial_fit(X[i:i + sample_size].copy()) cu_t = cu_ipca.transform(X) cu_inv = cu_ipca.inverse_transform(cu_t) sk_ipca = skIPCA(n_components=n_components) X = cp.asnumpy(X) for i in range(0, nrows, sample_size): sk_ipca.partial_fit(X[i:i + sample_size].copy()) sk_t = sk_ipca.transform(X) sk_inv = sk_ipca.inverse_transform(sk_t) assert array_equal(cu_inv, sk_inv, 5e-5, with_sign=True)
def test_exceptions(): X = cupyx.scipy.sparse.eye(10) ipca = cuIPCA() with pytest.raises(TypeError): ipca.partial_fit(X) X = X.toarray() with pytest.raises(NotFittedError): ipca.transform(X) with pytest.raises(NotFittedError): ipca.inverse_transform(X) with pytest.raises(ValueError): cuIPCA(n_components=8).fit(X[:5]) with pytest.raises(ValueError): cuIPCA(n_components=8).fit(X[:, :5])