Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/tutorials/index_conventional.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
notebooks/200_zebrafish
notebooks/201_dynamo_beyondvelo
notebooks/202_extvelo
```
2 changes: 1 addition & 1 deletion docs/tutorials/notebooks
Submodule notebooks updated 1 files
+1,273 −0 202_extvelo.ipynb
2 changes: 2 additions & 0 deletions dynamo/tools/_extvelo.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from anndata import AnnData
from typing import Literal, List
import os
from ..tools._track import monitor


@monitor
def extvelo(
adata: AnnData,
method: Literal["latentvelo",
Expand Down
23 changes: 17 additions & 6 deletions dynamo/tools/_track.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,23 @@ def _get_type_desc(self, obj):
else:
return f"({type(obj).__name__})"

def _get_column_type(self, series):
"""Helper to get a simplified type description for a Series."""
dtype = series.dtype
if isinstance(dtype, pd.CategoricalDtype):
return "category"
dt_str = str(dtype)
if "int" in dt_str: return "int"
if "float" in dt_str: return "float"
if "object" in dt_str or "str" in dt_str: return "str"
return dt_str

def _snapshot(self, adata):
"""Captures keys, types, and shapes for comparison."""
snapshot = {
"shape": adata.shape,
"obs": set(adata.obs.columns),
"var": set(adata.var.columns),
"obs": {c: self._get_column_type(adata.obs[c]) for c in adata.obs.columns},
"var": {c: self._get_column_type(adata.var[c]) for c in adata.var.columns},
"uns": set(adata.uns.keys()),
# For complex slots, store a dict of {key: description_string}
"obsm": {k: self._get_type_desc(v) for k, v in adata.obsm.items()},
Expand Down Expand Up @@ -146,8 +157,8 @@ def _print_report(self, start, end, duration):
print(f"{Style.BLUE}{V}{Style.RESET}{separator_text}{padding}{Style.BLUE}{V}{Style.RESET}")

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

if is_uns:
content = f"{prefix_colored} {Style.GREEN}{key}{Style.RESET}"
visible_content = f"{prefix_visible} {key}"
content = f"{prefix_colored} {Style.GREEN}{Style.RESET} {Style.YELLOW}{key}{Style.RESET}"
visible_content = f"{prefix_visible} {key}"

padding = " " * (width - 2 - len(visible_content))
print(f"{V}{content}{padding}{V}")
Expand Down
10 changes: 9 additions & 1 deletion dynamo/tools/pseudotime_velocity.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
from scipy.sparse import csr_matrix, diags, issparse

from ..dynamo_logger import LoggerManager
from ..tools._track import monitor
from .connectivity import adj_to_knn, knn_to_adj
from .graph_operators import build_graph, gradop
from .utils import projection_with_transition_matrix


@monitor
def pseudotime_velocity(
adata: anndata.AnnData,
pseudotime: str = "pseudotime",
Expand Down Expand Up @@ -126,6 +127,13 @@ def pseudotime_velocity(
logger.info_insert_adata(add_tkey, "obsp")
adata.obsp[add_tkey] = T

if 'use_for_pca' in adata.var.keys():
adata.var[f'use_for_dynamics'] = adata.var['use_for_pca']
adata.var[f'use_for_transition'] = adata.var['use_for_pca']
else:
adata.var[f'use_for_dynamics'] = True
adata.var[f'use_for_transition'] = True

if dynamics_info:
if "dynamics" not in adata.uns_keys():
logger.info_insert_adata("dynamics", "uns")
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def read_requirements(path):
if __name__ == "__main__":
setup(
name="dynamo-release",
version="v1.4.3-rc1",
version="v1.4.3",
python_requires=">=3.9",
install_requires=read_requirements("requirements.txt"),
extras_require={
Expand Down
Loading