scPTR / tests /conftest.py
bryan7264's picture
Add files using upload-large-folder tool
9d901ad verified
Raw
History Blame Contribute Delete
2.2 kB
"""Shared test fixtures for scPTR tests."""
import numpy as np
import pytest
from anndata import AnnData
from scipy.sparse import csr_matrix
@pytest.fixture
def synthetic_adata():
"""Create a synthetic AnnData with unspliced/spliced layers (500 cells, 200 genes)."""
np.random.seed(42)
n_obs, n_vars = 500, 200
# Simulate spliced counts (Poisson-like)
spliced = np.random.exponential(5, size=(n_obs, n_vars)).astype(np.float32)
# Simulate unspliced as fraction of spliced with noise
unspliced = (spliced * np.random.uniform(0.05, 0.5, size=(1, n_vars))
+ np.random.exponential(0.5, size=(n_obs, n_vars))).astype(np.float32)
adata = AnnData(
X=csr_matrix(spliced),
layers={
"spliced": csr_matrix(spliced),
"unspliced": csr_matrix(unspliced),
},
)
adata.obs_names = [f"cell_{i}" for i in range(n_obs)]
adata.var_names = [f"gene_{i}" for i in range(n_vars)]
return adata
@pytest.fixture
def preprocessed_adata(synthetic_adata):
"""Synthetic AnnData that has been through the preprocessing pipeline."""
import scptr
scptr.pp.filter_genes(synthetic_adata, min_unspliced_counts=1, min_unspliced_cells=1)
scptr.pp.normalize_layers(synthetic_adata)
scptr.pp.neighbors(synthetic_adata, n_neighbors=30)
scptr.pp.smooth_layers(synthetic_adata)
return synthetic_adata
@pytest.fixture
def analyzed_adata(preprocessed_adata):
"""Preprocessed AnnData that has been through core analysis."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
scptr.tl.estimate_gamma(preprocessed_adata)
scptr.tl.variance_decomposition(preprocessed_adata)
scptr.tl.pt_states(preprocessed_adata)
return preprocessed_adata
@pytest.fixture
def velocity_adata(preprocessed_adata):
"""Preprocessed AnnData with a synthetic velocity layer for dynamic gamma testing."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
n_obs, n_vars = preprocessed_adata.shape
np.random.seed(99)
preprocessed_adata.layers["velocity_S"] = np.random.randn(n_obs, n_vars).astype(
np.float32
)
return preprocessed_adata