def test_partial_fit(nrows, ncols, n_components, density, batch_size_divider, whiten): X, _ = make_blobs(n_samples=nrows, n_features=ncols, random_state=10) cu_ipca = cuIPCA(n_components=n_components, whiten=whiten) 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, whiten=whiten) 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_fit(nrows, ncols, n_components, sparse_input, density, sparse_format, batch_size_divider, whiten): 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, whiten=whiten, 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, whiten=whiten, 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)