File size: 2,371 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 71 72 73 74 75 76 77 | """Tests for dynamic-mode gamma estimation."""
import numpy as np
import pytest
def test_dynamic_mode_produces_gamma(preprocessed_adata):
"""Dynamic mode produces a gamma layer."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
# Create a synthetic velocity layer (ds/dt estimate)
n_obs, n_vars = preprocessed_adata.shape
preprocessed_adata.layers["velocity_S"] = np.random.randn(n_obs, n_vars).astype(
np.float32
)
scptr.tl.estimate_gamma(
preprocessed_adata, mode="dynamic", velocity_layer="velocity_S"
)
assert "gamma" in preprocessed_adata.layers
assert preprocessed_adata.layers["gamma"].shape == (n_obs, n_vars)
# Dynamic gamma should be non-negative (clipped)
assert np.all(preprocessed_adata.layers["gamma"] >= 0)
def test_dynamic_mode_logs_params(preprocessed_adata):
"""Dynamic mode logs mode and velocity_layer in uns."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
n_obs, n_vars = preprocessed_adata.shape
preprocessed_adata.layers["velocity_S"] = np.random.randn(n_obs, n_vars).astype(
np.float32
)
scptr.tl.estimate_gamma(
preprocessed_adata, mode="dynamic", velocity_layer="velocity_S"
)
params = preprocessed_adata.uns["scptr"]["estimate_gamma"]
assert params["mode"] == "dynamic"
assert params["velocity_layer"] == "velocity_S"
def test_dynamic_requires_velocity_layer(preprocessed_adata):
"""Dynamic mode without velocity_layer raises ValueError."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
with pytest.raises(ValueError, match="velocity_layer must be provided"):
scptr.tl.estimate_gamma(preprocessed_adata, mode="dynamic")
def test_steady_state_mode_default(preprocessed_adata):
"""Default mode is steady_state and works as before."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
scptr.tl.estimate_gamma(preprocessed_adata)
params = preprocessed_adata.uns["scptr"]["estimate_gamma"]
assert params["mode"] == "steady_state"
def test_unknown_mode_raises(preprocessed_adata):
"""Unknown mode raises ValueError."""
import scptr
scptr.tl.estimate_beta(preprocessed_adata)
with pytest.raises(ValueError, match="Unknown mode"):
scptr.tl.estimate_gamma(preprocessed_adata, mode="invalid")
|