Skip to content

Commit

Permalink
Make github workflow work (#1)
Browse files Browse the repository at this point in the history
Fix github workflow for tests and dependencies

---------

Co-authored-by: Philipp A. <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Nov 9, 2024
1 parent 8c20963 commit 6d2c1ca
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 67 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Changelog

## [Unreleased]

-

## [0.1.0] - 2024-08-21

- Moved all files from repo to scverse cookiecutter project template
- Moved all files from repo to scverse cookiecutter project template
70 changes: 35 additions & 35 deletions docs/make.bat
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)

if "%1" == "" goto help

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%

:end
popd
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)

if "%1" == "" goto help

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%

:end
popd
1 change: 0 additions & 1 deletion docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
sphinx
sphinx-autodoc-typehints
sphinx_rtd_theme

12 changes: 7 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ name = "drvi"
version = "0.1.0"
description = "Disentangled Generative Representation of Single Cell Omics"
readme = "README.md"
requires-python = ">=3.10,<3.12"
license = {file = "LICENSE"}
requires-python = ">=3.10,<3.13"
license = "BSD-3-Clause"
authors = [
{name = "Amir Ali Moinfar"},
]
Expand All @@ -21,11 +21,11 @@ urls.Home-page = "https://github.com/theislab/drvi"

# Please make an issue if you need wider range of versions
dependencies = [
"torch==2.1.0",
"torch>=2.1.0,<2.4",
"lightning>=2.0,<2.1",
"scanpy==1.9.5",
"scikit-learn>=1.5.1",
"scipy>=1.11.3",
"scipy>=1.11.3,<1.13",
"scvi-tools==1.0.4",
## TODO: Remove when scvi-tools and jax become ok again
"jax<=0.4.20",
Expand All @@ -34,7 +34,6 @@ dependencies = [
"anndata>=0.10.2",
"numpy>=1.16.1", # for np.linspace
"pandas>=1.2.0",
"merlin-dataloader==23.8.0",
## TODO: update this when this is resolved: https://github.com/boto/botocore/issues/2926
# lightning-cloud depends on boto3 that is currently not compatible with urllib3 so resolution takes forever
"urllib3<2",
Expand Down Expand Up @@ -71,6 +70,9 @@ tutorials = [
"leidenalg",
"gprofiler",
]
merlin = [
"merlin-dataloader==23.8.0",
]

[tool.coverage.run]
source = ["drvi"]
Expand Down
2 changes: 1 addition & 1 deletion src/drvi/scvi_tools_based/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
if console.is_jupyter is True:
console.is_jupyter = False
ch = RichHandler(show_path=False, console=console, show_time=False)
formatter = logging.Formatter("drvi: %(message)s")
formatter = logging.Formatter("DRVI: %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)

Expand Down
22 changes: 17 additions & 5 deletions src/drvi/scvi_tools_based/merlin_data/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
from drvi.scvi_tools_based.merlin_data import fields
import importlib
import logging

from ._data import MerlinData
from ._data_loader import MerlinTransformedDataLoader
from ._data_manager import MerlinDataManager
from ._data_splitter import MerlinDataSplitter
logger = logging.getLogger(__name__)

if importlib.util.find_spec("merlin"):
from . import fields
from ._data import MerlinData
from ._data_loader import MerlinTransformedDataLoader
from ._data_manager import MerlinDataManager
from ._data_splitter import MerlinDataSplitter
else:
fields = None
MerlinData = None
MerlinTransformedDataLoader = None
MerlinDataManager = None
MerlinDataSplitter = None
logger.warning("Merlin is not installed. To use merline dataloader please install it.")

__all__ = [
"MerlinData",
Expand Down
3 changes: 1 addition & 2 deletions src/drvi/scvi_tools_based/merlin_data/_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
from typing import Literal
from uuid import uuid4

import merlin.dtypes
import merlin.schema
import merlin.io
import pandas as pd
import pyarrow.parquet as pq
from scvi.data import _constants
Expand Down
39 changes: 22 additions & 17 deletions src/drvi/scvi_tools_based/model/_drvi.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,8 @@
MerlinDataSplitter,
MerlinTransformedDataLoader,
)
from drvi.scvi_tools_based.merlin_data.fields import (
MerlinCategoricalJointObsField,
MerlinCategoricalObsField,
MerlinLayerField,
MerlinNumericalJointObsField,
from drvi.scvi_tools_based.merlin_data import (
fields as melin_fields,
)
from drvi.scvi_tools_based.model.base import DRVIArchesMixin, GenerativeMixin
from drvi.scvi_tools_based.module import DRVIModule
Expand All @@ -38,7 +35,7 @@ class DRVI(VAEMixin, DRVIArchesMixin, UnsupervisedTrainingMixin, BaseModelClass,
Parameters
----------
adata
AnnData object that has been registered via :meth:`~mypackage.MyModel.setup_anndata`.
AnnData object that has been registered via :meth:`~drvi.model.DRVI.setup_anndata`.
n_latent
Dimensionality of the latent space.
encoder_dims
Expand All @@ -52,7 +49,7 @@ class DRVI(VAEMixin, DRVIArchesMixin, UnsupervisedTrainingMixin, BaseModelClass,
categorical_covariates
Categorical Covariates as a list of texts. You can specify emb dimension by appending @dim to each cpvariate.
**model_kwargs
Keyword args for :class:`~mypackage.MyModule`
Keyword args for :class:`~drvi.model.DRVI`
Examples
--------
Expand All @@ -77,12 +74,16 @@ def __init__(
super().__init__(adata)

# TODO: Remove later. Currently used to detect autoreload problems sooner.
if isinstance(adata, MerlinData):
self._data_splitter_cls = MerlinDataSplitter
elif isinstance(adata, AnnData):
if isinstance(adata, AnnData):
pass
elif MerlinData is not None and isinstance(adata, MerlinData):
self._data_splitter_cls = MerlinDataSplitter
else:
raise ValueError("Only AnnData and MerlinData is supported")
raise ValueError(
"Only AnnData and MerlinData are supported. "
"If you have passes an instalce of MerlinData and still get this error, "
"make sure merlin is installed as a dependency."
)

categorical_covariates_info = FeatureInfoList(categorical_covariates, axis="obs", default_dim=10)
if REGISTRY_KEYS.CAT_COVS_KEY in self.adata_manager.data_registry:
Expand Down Expand Up @@ -185,10 +186,10 @@ def setup_merlin_data(
setup_method_args["drvi_version"] = drvi.__version__

fields = [
MerlinLayerField(REGISTRY_KEYS.X_KEY, layer, is_count_data=is_count_data),
MerlinCategoricalObsField(REGISTRY_KEYS.LABELS_KEY, labels_key),
MerlinCategoricalJointObsField(REGISTRY_KEYS.CAT_COVS_KEY, categorical_covariate_keys),
MerlinNumericalJointObsField(REGISTRY_KEYS.CONT_COVS_KEY, continuous_covariate_keys),
melin_fields.MerlinLayerField(REGISTRY_KEYS.X_KEY, layer, is_count_data=is_count_data),
melin_fields.MerlinCategoricalObsField(REGISTRY_KEYS.LABELS_KEY, labels_key),
melin_fields.MerlinCategoricalJointObsField(REGISTRY_KEYS.CAT_COVS_KEY, categorical_covariate_keys),
melin_fields.MerlinNumericalJointObsField(REGISTRY_KEYS.CONT_COVS_KEY, continuous_covariate_keys),
]
merlin_manager = MerlinDataManager(fields, setup_method_args=setup_method_args)
merlin_manager.register_fields(merlin_data, **kwargs)
Expand Down Expand Up @@ -224,7 +225,7 @@ def _make_data_loader(
return super()._make_data_loader(
adata, indices, batch_size, shuffle, data_loader_class, **data_loader_kwargs
)
elif isinstance(adata, MerlinData):
elif MerlinData is not None and isinstance(adata, MerlinData):
adata_manager = self.get_anndata_manager(adata)
if adata_manager is None:
raise AssertionError(
Expand All @@ -241,4 +242,8 @@ def _make_data_loader(
**data_loader_kwargs,
)
else:
raise ValueError("Only AnnData and MerlinData is supported")
raise ValueError(
"Only AnnData and MerlinData are supported. "
"If you have passes an instalce of MerlinData and still get this error, "
"make sure merlin is installed as a dependency."
)

0 comments on commit 6d2c1ca

Please sign in to comment.