File size: 2,195 Bytes
9d901ad | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | """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
|