diff --git a/tests/benchmarks/test_bench_detrending.py b/tests/benchmarks/test_bench_detrending.py new file mode 100644 index 0000000..4786702 --- /dev/null +++ b/tests/benchmarks/test_bench_detrending.py @@ -0,0 +1,36 @@ +"""Detrending method benchmarks: delta, identity, z-score, second-difference.""" + +import numpy as np +import pytest + +from delaynet import detrend + +TS_LEN = 1000 + +_rng = np.random.default_rng(2154) +_ts = _rng.normal(0, 1, TS_LEN) +_ts_wave = np.sin(np.linspace(0, 4 * np.pi, TS_LEN)) + + +@pytest.mark.benchmark(group="detrend") +@pytest.mark.parametrize( + "method,kwargs,data", + [ + ("delta", {"window_size": 10}, _ts), + ("delta", {"window_size": 100}, _ts), + ("identity", {}, _ts), + ("z_score", {"periodicity": 1}, _ts), + ("z_score", {"periodicity": 10, "max_periods": 5}, _ts), + ("second_difference", {}, _ts_wave), + ], + ids=[ + "delta-w10", + "delta-w100", + "identity", + "z_score-p1", + "z_score-p10", + "second_difference", + ], +) +def test_detrend_method(benchmark, method, kwargs, data): + benchmark(detrend, data, method=method, **kwargs) diff --git a/tests/benchmarks/test_bench_metrics.py b/tests/benchmarks/test_bench_metrics.py index 10d1a9a..153263f 100644 --- a/tests/benchmarks/test_bench_metrics.py +++ b/tests/benchmarks/test_bench_metrics.py @@ -5,6 +5,7 @@ from delaynet.connectivities.continuous_ordinal_patterns import random_patterns from delaynet.connectivities.granger import gt_multi_lag +from delaynet.connectivities.gravity import gravity from delaynet.connectivities.linear_correlation import linear_correlation from delaynet.connectivities.rank_correlation import rank_correlation from delaynet.connectivities.mutual_information import mutual_information @@ -37,6 +38,11 @@ def test_continuous_metric(benchmark, metric_func, kwargs): benchmark(metric_func, TS1, TS2, lag_steps=LAG_STEPS, **kwargs) +@pytest.mark.benchmark(group="metrics") +def test_gravity(benchmark): + benchmark(gravity, TS1, TS2, lag_steps=LAG_STEPS, n_tests=N_TESTS) + + @pytest.mark.benchmark(group="metrics") def test_granger_f_test(benchmark): ts = gen_delayed_causal_network(ts_len=50, n_nodes=5, l_dens=0.3, rng=0)[2].T diff --git a/tests/benchmarks/test_bench_network_analysis.py b/tests/benchmarks/test_bench_network_analysis.py new file mode 100644 index 0000000..10d643e --- /dev/null +++ b/tests/benchmarks/test_bench_network_analysis.py @@ -0,0 +1,41 @@ +"""Network analysis metric benchmarks: global efficiency, transitivity, etc.""" + +import numpy as np +import pytest + +from delaynet.network_analysis import global_efficiency, transitivity, link_density + +N_NODES = 50 +DENSITY = 0.3 + +_rng = np.random.default_rng(152) +_adj = (_rng.uniform(0, 1, (N_NODES, N_NODES)) < DENSITY).astype(float) +np.fill_diagonal(_adj, 0) + +# ensure at least some structure: a directed chain +for i in range(N_NODES - 1): + _adj[i, i + 1] = 1.0 + +# symmetric version for undirected metrics +_adj_sym = (_adj + _adj.T) > 0 +_adj_sym = _adj_sym.astype(float) + + +@pytest.mark.benchmark(group="network-analysis") +@pytest.mark.parametrize( + "metric_func, kwargs, data", + [ + (global_efficiency, {"directed": True}, _adj), + (global_efficiency, {"directed": False}, _adj_sym), + (transitivity, {}, _adj_sym), + (link_density, {"directed": True}, _adj), + ], + ids=[ + "global_efficiency-dir", + "global_efficiency-undir", + "transitivity", + "link_density", + ], +) +def test_network_metric(benchmark, metric_func, kwargs, data): + benchmark(metric_func, data, **kwargs)