Skip to content

Commit 1e37ed6

Browse files
Merge pull request #735 from Starlitnightly/master
Added tutorial of external velocity calculation and integration
2 parents ced6380 + 6d04cd3 commit 1e37ed6

File tree

6 files changed

+31
-9
lines changed

6 files changed

+31
-9
lines changed

docs/tutorials/index_conventional.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
66
notebooks/200_zebrafish
77
notebooks/201_dynamo_beyondvelo
8+
notebooks/202_extvelo
89
910
```

docs/tutorials/notebooks

dynamo/tools/_extvelo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from anndata import AnnData
22
from typing import Literal, List
33
import os
4+
from ..tools._track import monitor
45

56

7+
@monitor
68
def extvelo(
79
adata: AnnData,
810
method: Literal["latentvelo",

dynamo/tools/_track.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,23 @@ def _get_type_desc(self, obj):
6464
else:
6565
return f"({type(obj).__name__})"
6666

67+
def _get_column_type(self, series):
68+
"""Helper to get a simplified type description for a Series."""
69+
dtype = series.dtype
70+
if isinstance(dtype, pd.CategoricalDtype):
71+
return "category"
72+
dt_str = str(dtype)
73+
if "int" in dt_str: return "int"
74+
if "float" in dt_str: return "float"
75+
if "object" in dt_str or "str" in dt_str: return "str"
76+
return dt_str
77+
6778
def _snapshot(self, adata):
6879
"""Captures keys, types, and shapes for comparison."""
6980
snapshot = {
7081
"shape": adata.shape,
71-
"obs": set(adata.obs.columns),
72-
"var": set(adata.var.columns),
82+
"obs": {c: self._get_column_type(adata.obs[c]) for c in adata.obs.columns},
83+
"var": {c: self._get_column_type(adata.var[c]) for c in adata.var.columns},
7384
"uns": set(adata.uns.keys()),
7485
# For complex slots, store a dict of {key: description_string}
7586
"obsm": {k: self._get_type_desc(v) for k, v in adata.obsm.items()},
@@ -146,8 +157,8 @@ def _print_report(self, start, end, duration):
146157
print(f"{Style.BLUE}{V}{Style.RESET}{separator_text}{padding}{Style.BLUE}{V}{Style.RESET}")
147158

148159
# Sections - use 6-char width for consistency
149-
self._print_section("OBS", start['obs'], end['obs'], width, title_width=6)
150-
self._print_section("VAR", start['var'], end['var'], width, title_width=6)
160+
self._print_section("OBS", set(start['obs'].keys()), set(end['obs'].keys()), width, descriptions=end['obs'], title_width=6)
161+
self._print_section("VAR", set(start['var'].keys()), set(end['var'].keys()), width, descriptions=end['var'], title_width=6)
151162
self._print_section("UNS", start['uns'], end['uns'], width, is_uns=True, title_width=6)
152163
self._print_section("OBSP", set(start['obsp'].keys()), set(end['obsp'].keys()), width, descriptions=end['obsp'], title_width=6)
153164
self._print_section("OBSM", set(start['obsm'].keys()), set(end['obsm'].keys()), width, descriptions=end['obsm'], title_width=6)
@@ -176,8 +187,8 @@ def _print_section(self, title, start_keys, end_keys, width, is_uns=False, descr
176187
prefix_visible = f" {' ' * spaces_needed} │"
177188

178189
if is_uns:
179-
content = f"{prefix_colored} {Style.GREEN}{key}{Style.RESET}"
180-
visible_content = f"{prefix_visible} {key}"
190+
content = f"{prefix_colored} {Style.GREEN}{Style.RESET} {Style.YELLOW}{key}{Style.RESET}"
191+
visible_content = f"{prefix_visible} {key}"
181192

182193
padding = " " * (width - 2 - len(visible_content))
183194
print(f"{V}{content}{padding}{V}")

dynamo/tools/pseudotime_velocity.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
from scipy.sparse import csr_matrix, diags, issparse
1111

1212
from ..dynamo_logger import LoggerManager
13+
from ..tools._track import monitor
1314
from .connectivity import adj_to_knn, knn_to_adj
1415
from .graph_operators import build_graph, gradop
1516
from .utils import projection_with_transition_matrix
1617

17-
18+
@monitor
1819
def pseudotime_velocity(
1920
adata: anndata.AnnData,
2021
pseudotime: str = "pseudotime",
@@ -126,6 +127,13 @@ def pseudotime_velocity(
126127
logger.info_insert_adata(add_tkey, "obsp")
127128
adata.obsp[add_tkey] = T
128129

130+
if 'use_for_pca' in adata.var.keys():
131+
adata.var[f'use_for_dynamics'] = adata.var['use_for_pca']
132+
adata.var[f'use_for_transition'] = adata.var['use_for_pca']
133+
else:
134+
adata.var[f'use_for_dynamics'] = True
135+
adata.var[f'use_for_transition'] = True
136+
129137
if dynamics_info:
130138
if "dynamics" not in adata.uns_keys():
131139
logger.info_insert_adata("dynamics", "uns")

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def read_requirements(path):
1717
if __name__ == "__main__":
1818
setup(
1919
name="dynamo-release",
20-
version="v1.4.3-rc1",
20+
version="v1.4.3",
2121
python_requires=">=3.9",
2222
install_requires=read_requirements("requirements.txt"),
2323
extras_require={

0 commit comments

Comments
 (0)