From 91c3100b99237666f6f5e531deeae73d662ab8e9 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Sun, 15 May 2022 21:46:07 -0400 Subject: [PATCH 1/7] explicitly convert spmatrix --- scprep/run/conversion.py | 14 ++++++++++++++ test/test_run.py | 2 ++ 2 files changed, 16 insertions(+) diff --git a/scprep/run/conversion.py b/scprep/run/conversion.py index 1024df86..52284ce2 100644 --- a/scprep/run/conversion.py +++ b/scprep/run/conversion.py @@ -46,6 +46,18 @@ def _pysce2rpy(pyobject): return pyobject +def _rpyspmatrix2py(robject): + if utils._try_import("anndata2ri"): + robject = anndata2ri.scipy2ri.rpy2py(robject) + return robject + + +def _pyspmatrix2rpy(pyobject): + if utils._try_import("anndata2ri"): + pyobject = anndata2ri.scipy2ri.py2rpy(pyobject) + return pyobject + + def _is_r_object(obj): return "rpy2.robjects" in str(type(obj)) or "rpy2.rinterface" in str(type(obj)) @@ -75,6 +87,7 @@ def rpy2py(robject): """ for converter in [ _rpynull2py, + _rpyspmatrix2py, _rpysce2py, rpy2.robjects.pandas2ri.rpy2py, _rpylist2py, @@ -118,6 +131,7 @@ def py2rpy(pyobject): """ for converter in [ _pynull2rpy, + _pyspmatrix2rpy, _pysce2rpy, rpy2.robjects.pandas2ri.py2rpy, rpy2.robjects.numpy2ri.py2rpy, diff --git a/test/test_run.py b/test/test_run.py index aa728b39..e3e20499 100644 --- a/test/test_run.py +++ b/test/test_run.py @@ -596,6 +596,8 @@ def test_conversion_spmatrix(): assert isinstance(x, scipy.sparse.csc_matrix) assert x.shape == (2, 3) assert np.all(x.toarray() == np.array([[1, 3, 5], [2, 4, 6]])) + y = scprep.run.conversion.py2rpy(x) + assert (scprep.run.conversion.rpy2py(y) != x).nnz == 0 def test_conversion_dataframe(): x = scprep.run.conversion.rpy2py( From 84c48eee7e8a5f5dec11ba7ea9973dad8815fc82 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Sun, 15 May 2022 21:47:34 -0400 Subject: [PATCH 2/7] bump version --- scprep/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scprep/version.py b/scprep/version.py index c68196d1..a955fdae 100644 --- a/scprep/version.py +++ b/scprep/version.py @@ -1 +1 @@ -__version__ = "1.2.0" +__version__ = "1.2.1" From 9d8e463a4c1484f0d8c9adfcae23adb110a17113 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 May 2022 01:49:17 +0000 Subject: [PATCH 3/7] pre-commit --- scprep/stats.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scprep/stats.py b/scprep/stats.py index b79bbaff..afb9c4a0 100644 --- a/scprep/stats.py +++ b/scprep/stats.py @@ -550,7 +550,7 @@ def differential_expression( X, Y, measure="difference", direction="both", gene_names=None, n_jobs=-2 ): """Calculate the most significant genes between two datasets. - + If using ``measure="emd"``, the test statistic is multiplied by the sign of the mean differencein order to allow for distinguishing between positive and negative shifts. To ignore this, use ``direction="both"`` to sort by the From 184ca840f367d2f4658942a60aaf61baa3f54241 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Sun, 15 May 2022 21:50:48 -0400 Subject: [PATCH 4/7] flake8 --- scprep/stats.py | 1 - test/test_stats.py | 1 - 2 files changed, 2 deletions(-) diff --git a/scprep/stats.py b/scprep/stats.py index b79bbaff..52977888 100644 --- a/scprep/stats.py +++ b/scprep/stats.py @@ -11,7 +11,6 @@ import numbers import numpy as np import pandas as pd -import scipy.sparse import warnings plt = matplotlib.pyplot diff --git a/test/test_stats.py b/test/test_stats.py index ae93a952..09598b85 100644 --- a/test/test_stats.py +++ b/test/test_stats.py @@ -7,7 +7,6 @@ import numpy as np import os -import scipy.sparse import scprep import warnings From 85c1203b1f20941b4430d9ce65566cf52ea35fc1 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Sun, 15 May 2022 21:54:10 -0400 Subject: [PATCH 5/7] more restricted use --- scprep/run/conversion.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scprep/run/conversion.py b/scprep/run/conversion.py index 52284ce2..7d9de527 100644 --- a/scprep/run/conversion.py +++ b/scprep/run/conversion.py @@ -1,3 +1,5 @@ +import scipy.sparse + from .. import utils from .._lazyload import anndata2ri from .._lazyload import rpy2 @@ -53,7 +55,7 @@ def _rpyspmatrix2py(robject): def _pyspmatrix2rpy(pyobject): - if utils._try_import("anndata2ri"): + if utils._try_import("anndata2ri") and isinstance(pyobject, scipy.sparse.spmatrix): pyobject = anndata2ri.scipy2ri.py2rpy(pyobject) return pyobject @@ -87,8 +89,8 @@ def rpy2py(robject): """ for converter in [ _rpynull2py, - _rpyspmatrix2py, _rpysce2py, + _rpyspmatrix2py, rpy2.robjects.pandas2ri.rpy2py, _rpylist2py, rpy2.robjects.numpy2ri.rpy2py, @@ -131,8 +133,8 @@ def py2rpy(pyobject): """ for converter in [ _pynull2rpy, - _pyspmatrix2rpy, _pysce2rpy, + _pyspmatrix2rpy, rpy2.robjects.pandas2ri.py2rpy, rpy2.robjects.numpy2ri.py2rpy, rpy2.robjects.conversion.py2rpy, From a54288a33dbbb0e8da4b2a3d9f5f356c2d581f7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 May 2022 01:54:52 +0000 Subject: [PATCH 6/7] pre-commit --- scprep/run/conversion.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scprep/run/conversion.py b/scprep/run/conversion.py index 7d9de527..fa03bc70 100644 --- a/scprep/run/conversion.py +++ b/scprep/run/conversion.py @@ -1,10 +1,9 @@ -import scipy.sparse - from .. import utils from .._lazyload import anndata2ri from .._lazyload import rpy2 import numpy as np +import scipy.sparse import warnings From 2657d07469deb74a96e1e315dea623836e8cde2e Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Sun, 15 May 2022 22:05:02 -0400 Subject: [PATCH 7/7] need rpy2 3.4.2 per https://github.com/theislab/anndata2ri/issues/63 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f594ac43..1a220d9a 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ "mock", "h5py", "matplotlib>=3.0", - "rpy2>=3.0", + "rpy2>=3.0,<3.4.3", "black", ]