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