From 0f3ea93977f9d713433880db5a7522ef9b48f731 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Mon, 2 Nov 2020 11:42:48 -0500 Subject: [PATCH 01/33] Update version.py --- python/magic/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/magic/version.py b/python/magic/version.py index f6bb6f4..a1c7d45 100644 --- a/python/magic/version.py +++ b/python/magic/version.py @@ -1 +1 @@ -__version__ = "2.0.4" +__version__ = "2.0.5a0" From f59a8564db4c391c9fb81f38b2fc085a06e3dc64 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:05:03 -0500 Subject: [PATCH 02/33] move to GA --- .github/workflows/deploy.yml | 55 ++++++++++++++++ .github/workflows/pre-commit.yml | 73 ++++++++++++++++++++++ .github/workflows/run_tests.yml | 104 +++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 33 ++++++++++ .pre-commit.r_requirements.txt | 4 ++ 5 files changed, 269 insertions(+) create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/pre-commit.yml create mode 100644 .github/workflows/run_tests.yml create mode 100644 .pre-commit-config.yaml create mode 100644 .pre-commit.r_requirements.txt diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..79bc183 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,55 @@ +name: Publish Python distributions to PyPI + +on: + push: + branches: + - 'master' + - 'test_deploy' + tags: + - '*' + +jobs: + build-n-publish: + name: Build and publish Python distributions to PyPI + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@master + + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + + - name: Install pypa/build + run: >- + cd python && + python -m + pip install + build + --user && + cd .. + + - name: Build a binary wheel and a source tarball + run: >- + cd python && + python -m + build + --sdist + --wheel + --outdir dist/ + . && + cd .. + + - name: Publish distribution to Test PyPI + uses: pypa/gh-action-pypi-publish@master + with: + skip_existing: true + password: ${{ secrets.test_pypi_password }} + repository_url: https://test.pypi.org/legacy/ + + - name: Publish distribution to PyPI + if: startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.pypi_password }} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..cedc3da --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,73 @@ +name: pre-commit +on: + push: + branches-ignore: + - 'master' + +jobs: + pre-commit: + runs-on: ubuntu-latest + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Check Ubuntu version + run: | + echo "UBUNTU_VERSION=`grep DISTRIB_RELEASE /etc/lsb-release | sed 's/.*=//g'`" >> $GITHUB_ENV + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.8" + architecture: "x64" + + - name: Cache R packages + uses: actions/cache@v2 + if: startsWith(runner.os, 'Linux') + with: + path: ${{env.R_LIBS_USER}} + key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('.pre-commit.r_requirements.txt') }}- + restore-keys: | + precommit-${{env.UBUNTU_VERSION}}-renv- + + - name: Install R packages + run: | + if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") + con = file(".pre-commit.r_requirements.txt", "r") + while ( length(pkg <- readLines(con, n = 1)) > 0 ) { + renv::install(pkg) + } + close(con) + shell: Rscript {0} + + - name: Cache pre-commit + uses: actions/cache@v2 + with: + path: ~/.cache/pre-commit + key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}- + + - name: Run pre-commit + uses: pre-commit/action@v2.0.0 + + - name: Commit files + if: failure() + run: | + git checkout -- .github/workflows + if [[ `git status --porcelain --untracked-files=no` ]]; then + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git commit -m "pre-commit" -a + fi + + - name: Push changes + if: failure() + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.ref }} diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml new file mode 100644 index 0000000..c104578 --- /dev/null +++ b/.github/workflows/run_tests.yml @@ -0,0 +1,104 @@ +name: Unit Tests + +on: + push: + branches-ignore: + - 'test_deploy' + pull_request: + branches: + - '*' + +jobs: + + run_tester: + runs-on: ${{ matrix.config.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + + strategy: + fail-fast: false + matrix: + config: + - {name: '3.9', os: ubuntu-latest, python: '3.9' } + - {name: '3.8', os: ubuntu-latest, python: '3.8' } + - {name: '3.7', os: ubuntu-latest, python: '3.7' } + - {name: '3.6', os: ubuntu-latest, python: '3.6' } + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + + - name: Check Ubuntu version + run: | + echo "UBUNTU_VERSION=`grep DISTRIB_RELEASE /etc/lsb-release | sed 's/.*=//g'`" >> $GITHUB_ENV + + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.config.python }} + + - name: Cache Python packages + uses: actions/cache@v2 + with: + path: ${{ env.pythonLocation }} + key: ${{runner.os}}-pip-${{ env.pythonLocation }}-${{ hashFiles('python/setup.py') }} + restore-keys: ${{runner.os}}-pip-${{ env.pythonLocation }}- + + - name: Install package & dependencies + run: | + python -m pip install --upgrade pip + pip install -U wheel setuptools + pip install -U ./python[test] + python -c "import magic" + + - name: Run Python tests + run: | + cd python + nose2 -vvv + cd .. + + - name: Cache R packages + uses: actions/cache@v2 + if: startsWith(runner.os, 'Linux') + with: + path: ${{env.R_LIBS_USER}} + key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('.pre-commit.r_requirements.txt') }}- + restore-keys: | + precommit-${{env.UBUNTU_VERSION}}-renv- + + - name: Install R packages + run: | + if (!require("devtools")) install.packages("devtools", repos="http://cloud.r-project.org") + devtools::install("./Rmagic") + + - name: Run R tests + run: | + cd Rmagic + R CMD build . + R CMD check --as-cran *.tar.gz + cd .. + + - name: Build docs + run: | + cd python + pip install .[doc] + cd doc + make html + cd ../.. + + - name: Coveralls + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_SERVICE_NAME: github + run: | + coveralls + + - name: Upload check results on fail + if: failure() + uses: actions/upload-artifact@master + with: + name: ${{ matrix.config.name }}_results + path: check diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..2a2e3c5 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,33 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + exclude: \.(ai|gz)$ + - repo: https://github.com/timothycrosley/isort + rev: 5.6.4 + hooks: + - id: isort + - repo: https://github.com/psf/black + rev: 20.8b1 + hooks: + - id: black + args: ['--target-version', 'py36'] + - repo: https://github.com/pre-commit/mirrors-autopep8 + rev: v1.5.4 + hooks: + - id: autopep8 + - repo: https://gitlab.com/pycqa/flake8 + rev: 3.8.4 + hooks: + - id: flake8 + additional_dependencies: ['hacking'] + - repo: https://github.com/lorenzwalthert/precommit + rev: v0.1.3 + hooks: + - id: parsable-R + - id: style-files + - id: lintr + verbose: true diff --git a/.pre-commit.r_requirements.txt b/.pre-commit.r_requirements.txt new file mode 100644 index 0000000..b6e70b8 --- /dev/null +++ b/.pre-commit.r_requirements.txt @@ -0,0 +1,4 @@ +docopt +styler +git2r +lintr From e1a89de7115a4332048f3e7ba95e362f06a71e21 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:09:45 -0500 Subject: [PATCH 03/33] remove deprecated arguments, remove python 3.5 --- python/magic/__init__.py | 4 -- python/magic/io.py | 115 ---------------------------------- python/magic/magic.py | 44 ------------- python/magic/preprocessing.py | 17 ----- python/magic/version.py | 2 +- python/setup.py | 19 ++---- python/test/test.py | 1 - 7 files changed, 5 insertions(+), 197 deletions(-) delete mode 100644 python/magic/io.py delete mode 100644 python/magic/preprocessing.py diff --git a/python/magic/__init__.py b/python/magic/__init__.py index 0d129c7..a8e8b6a 100644 --- a/python/magic/__init__.py +++ b/python/magic/__init__.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import - from .magic import MAGIC from .version import __version__ -import magic.io -import magic.preprocessing import magic.plot diff --git a/python/magic/io.py b/python/magic/io.py deleted file mode 100644 index aadbf6d..0000000 --- a/python/magic/io.py +++ /dev/null @@ -1,115 +0,0 @@ -# author: Scott Gigante -# (C) 2018 Krishnaswamy Lab GPLv2 - -from __future__ import print_function, division -import warnings -import scprep - - -def load_csv( - filename, - cell_axis="row", - delimiter=",", - gene_names=True, - cell_names=True, - sparse=False, - **kwargs -): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_tsv( - filename, - cell_axis="row", - delimiter="\t", - gene_names=True, - cell_names=True, - sparse=False, - **kwargs -): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_fcs( - filename, - gene_names=True, - cell_names=True, - sparse=None, - metadata_channels=[ - "Time", - "Event_length", - "DNA1", - "DNA2", - "Cisplatin", - "beadDist", - "bead1", - ], -): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_mtx(mtx_file, cell_axis="row", gene_names=None, cell_names=None, sparse=None): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_10X(data_dir, sparse=True, gene_labels="symbol", allow_duplicates=None): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_10X_zip(filename, sparse=True, gene_labels="symbol", allow_duplicates=None): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) - - -def load_10X_HDF5( - filename, genome=None, sparse=True, gene_labels="symbol", allow_duplicates=None -): - """magic.io is deprecated. Please use scprep.io instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.io is deprecated. Please use scprep.io instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) diff --git a/python/magic/magic.py b/python/magic/magic.py index 65c02bc..757f57c 100644 --- a/python/magic/magic.py +++ b/python/magic/magic.py @@ -6,8 +6,6 @@ (C) 2018 Krishnaswamy Lab GPLv2 """ -from __future__ import print_function, division, absolute_import - import numpy as np import graphtools from sklearn.base import BaseEstimator @@ -91,10 +89,6 @@ class MAGIC(BaseEstimator): verbose : `int` or `boolean`, optional (default: 1) If `True` or `> 0`, print status messages - k : Deprecated for `knn` - - a : Deprecated for `decay` - Attributes ---------- @@ -154,23 +148,7 @@ def __init__( n_jobs=1, random_state=None, verbose=1, - k=None, - a=None, ): - if k is not None: - warnings.warn( - "Parameter `k` is deprecated and will be removed" - " in a future version. Use `knn` instead", - FutureWarning, - ) - knn = k - if a is not None: - warnings.warn( - "Parameter `a` is deprecated and will be removed" - " in a future version. Use `decay` instead", - FutureWarning, - ) - decay = a self.knn = knn self.knn_max = knn_max self.decay = decay @@ -319,10 +297,6 @@ def set_params(self, **params): verbose : `int` or `boolean`, optional (default: 1) If `True` or `> 0`, print status messages - k : Deprecated for `knn` - - a : Deprecated for `decay` - Returns ------- self @@ -336,24 +310,6 @@ def set_params(self, **params): del params["t"] # kernel parameters - if "k" in params and params["k"] != self.knn: - warnings.warn( - "Parameter `k` is deprecated and will be removed" - " in a future version. Use `knn` instead", - FutureWarning, - ) - self.knn = params["k"] - reset_kernel = True - del params["k"] - if "a" in params and params["a"] != self.decay: - warnings.warn( - "Parameter `a` is deprecated and will be removed" - " in a future version. Use `decay` instead", - FutureWarning, - ) - self.decay = params["a"] - reset_kernel = True - del params["a"] if "knn" in params and params["knn"] != self.knn: self.knn = params["knn"] reset_kernel = True diff --git a/python/magic/preprocessing.py b/python/magic/preprocessing.py deleted file mode 100644 index a16e87b..0000000 --- a/python/magic/preprocessing.py +++ /dev/null @@ -1,17 +0,0 @@ -# author: Daniel Burkhardt -# (C) 2017 Krishnaswamy Lab GPLv2 - -from __future__ import print_function, division -import warnings -import scprep - - -def library_size_normalize(data, verbose=False): - """magic.preprocessing is deprecated. Please use scprep.normalize instead. - Read more at http://scprep.readthedocs.io/ - """ - raise RuntimeError( - "magic.preprocessing is deprecated. Please use scprep.normalize instead. " - "Read more at http://scprep.readthedocs.io", - FutureWarning, - ) diff --git a/python/magic/version.py b/python/magic/version.py index a1c7d45..528787c 100644 --- a/python/magic/version.py +++ b/python/magic/version.py @@ -1 +1 @@ -__version__ = "2.0.5a0" +__version__ = "3.0.0" diff --git a/python/setup.py b/python/setup.py index 9535e4a..c6d2135 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,6 +1,6 @@ import os import sys -from setuptools import setup +from setuptools import setup, find_packages install_requires = [ "numpy>=1.14.0", @@ -14,23 +14,13 @@ "scprep>=1.0", ] -test_requires = [ - "nose2", -] - -if sys.version_info[0] == 3: - test_requires += ["anndata"] +test_requires = ["nose2", "anndata"] doc_requires = [ "sphinx", "sphinxcontrib-napoleon", ] -if sys.version_info[:2] < (3, 5): - raise RuntimeError("Python version >=3.5 required.") -elif sys.version_info[:2] >= (3, 6): - test_requires += ["black"] - version_py = os.path.join(os.path.dirname(__file__), "magic", "version.py") version = open(version_py).read().strip().split("=")[-1].replace('"', "").strip() @@ -42,10 +32,9 @@ description="MAGIC", author="", author_email="", - packages=[ - "magic", - ], + packages=find_packages(), license="GNU General Public License Version 2", + python_requires=">=3.6", install_requires=install_requires, extras_require={"test": test_requires, "doc": doc_requires}, test_suite="nose2.collector.collector", diff --git a/python/test/test.py b/python/test/test.py index cb5981b..7c5930f 100644 --- a/python/test/test.py +++ b/python/test/test.py @@ -1,7 +1,6 @@ #!/usr/bin/env python -from __future__ import print_function, division, absolute_import import matplotlib as mpl mpl.use("agg") From 2faec7847586ee81eb7af9b9b90833c90c354509 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:16:01 -0500 Subject: [PATCH 04/33] separate r and python; fix r_libs_user --- .github/workflows/pre-commit.yml | 4 +- .github/workflows/run_tests.yml | 94 ++++++++++++++++++++++++++------ 2 files changed, 79 insertions(+), 19 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index cedc3da..42ac647 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -17,9 +17,11 @@ jobs: with: fetch-depth: 0 - - name: Check Ubuntu version + - name: Set up environment run: | echo "UBUNTU_VERSION=`grep DISTRIB_RELEASE /etc/lsb-release | sed 's/.*=//g'`" >> $GITHUB_ENV + mkdir -p .local/R/site-packages + echo "R_LIBS_USER=`pwd`/.local/R/site-packages" >> $GITHUB_ENV - name: Set up Python uses: actions/setup-python@v2 diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index c104578..b307096 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -10,7 +10,7 @@ on: jobs: - run_tester: + test_python: runs-on: ${{ matrix.config.os }} if: "!contains(github.event.head_commit.message, 'ci skip')" @@ -60,14 +60,87 @@ jobs: nose2 -vvv cd .. + - name: Build docs + run: | + cd python + pip install .[doc] + cd doc + make html + cd ../.. + + - name: Coveralls + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_SERVICE_NAME: github + run: | + coveralls + + - name: Upload check results on fail + if: failure() + uses: actions/upload-artifact@master + with: + name: ${{ matrix.config.name }}_results + path: check + + test_r: + runs-on: ${{ matrix.config.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + + strategy: + fail-fast: false + matrix: + config: + - {name: 'devel', os: ubuntu-latest, r: 'devel' } + - {name: 'release', os: ubuntu-latest, r: 'release' } + - {name: 'oldrel', os: ubuntu-latest, r: 'oldrel' } + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + + - name: Set up environment + run: | + echo "UBUNTU_VERSION=`grep DISTRIB_RELEASE /etc/lsb-release | sed 's/.*=//g'`" >> $GITHUB_ENV + mkdir -p .local/R/site-packages + echo "R_LIBS_USER=`pwd`/.local/R/site-packages" >> $GITHUB_ENV + + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.config.python }} + + - name: Cache Python packages + uses: actions/cache@v2 + with: + path: ${{ env.pythonLocation }} + key: ${{runner.os}}-pip-${{ env.pythonLocation }}-${{ hashFiles('python/setup.py') }} + restore-keys: ${{runner.os}}-pip-${{ env.pythonLocation }}- + + - name: Install package & dependencies + run: | + python -m pip install --upgrade pip + pip install -U wheel setuptools + pip install -U ./python + python -c "import magic" + + - name: Set up R + id: setup-r + uses: r-lib/actions/setup-r@v1 + with: + r-version: ${{ matrix.config.r }} + - name: Cache R packages uses: actions/cache@v2 if: startsWith(runner.os, 'Linux') with: path: ${{env.R_LIBS_USER}} - key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('.pre-commit.r_requirements.txt') }}- + key: test-${{env.UBUNTU_VERSION}}-renv-${{ steps.setup-r.outputs.installed-r-version }}-${{ hashFiles('Rmagic/DESCRIPTION') }}- restore-keys: | - precommit-${{env.UBUNTU_VERSION}}-renv- + test-${{env.UBUNTU_VERSION}}-renv-${{ steps.setup-r.outputs.installed-r-version }}- - name: Install R packages run: | @@ -81,21 +154,6 @@ jobs: R CMD check --as-cran *.tar.gz cd .. - - name: Build docs - run: | - cd python - pip install .[doc] - cd doc - make html - cd ../.. - - - name: Coveralls - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_SERVICE_NAME: github - run: | - coveralls - - name: Upload check results on fail if: failure() uses: actions/upload-artifact@master From 70b718513577245f835f10ad36beafb5eae32d86 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:21:15 -0500 Subject: [PATCH 05/33] install coveralls --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index c6d2135..d732b91 100644 --- a/python/setup.py +++ b/python/setup.py @@ -14,7 +14,7 @@ "scprep>=1.0", ] -test_requires = ["nose2", "anndata"] +test_requires = ["nose2", "anndata", "coverage", "coveralls"] doc_requires = [ "sphinx", From 0f7746d46e1e40a643c3df5bffab515aee9370cc Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:21:23 -0500 Subject: [PATCH 06/33] choose python version for r test --- .github/workflows/run_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index b307096..b1ff302 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -38,7 +38,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: ${{ matrix.config.python }} + python-version: "3.8" - name: Cache Python packages uses: actions/cache@v2 From c0f96c8838ae29626532929f9f184e1e73565de6 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:22:24 -0500 Subject: [PATCH 07/33] install curl --- .github/workflows/pre-commit.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 42ac647..2df815f 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -23,6 +23,12 @@ jobs: mkdir -p .local/R/site-packages echo "R_LIBS_USER=`pwd`/.local/R/site-packages" >> $GITHUB_ENV + - name: Install system dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update -qq + sudo apt-get install -y libcurl4-openssl-dev + - name: Set up Python uses: actions/setup-python@v2 with: From ffeea19be24a265e8cf000aa4a1acbb9f7096451 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:23:20 -0500 Subject: [PATCH 08/33] fix typo --- .github/workflows/run_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index b1ff302..13e44b6 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -38,7 +38,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: "3.8" + python-version: ${{ matrix.config.python }} - name: Cache Python packages uses: actions/cache@v2 @@ -111,7 +111,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: ${{ matrix.config.python }} + python-version: "3.8" - name: Cache Python packages uses: actions/cache@v2 From a512b1635f5c1d20c4c90a5ba7d25d241f741e9d Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:26:55 -0500 Subject: [PATCH 09/33] use rscript --- .github/workflows/run_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 13e44b6..b312ae2 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -146,6 +146,7 @@ jobs: run: | if (!require("devtools")) install.packages("devtools", repos="http://cloud.r-project.org") devtools::install("./Rmagic") + shell: Rscript {0} - name: Run R tests run: | From a2d85d3378786cfbfa25e2c1851955d1a782d9d1 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:27:30 -0500 Subject: [PATCH 10/33] lint --- .github/ISSUE_TEMPLATE/question.md | 2 -- .github/workflows/deploy.yml | 2 +- LICENSE | 1 - README.md | 14 ++++----- Rmagic/DESCRIPTION | 2 +- Rmagic/LICENSE | 1 - Rmagic/R/magic_testdata.R | 2 +- Rmagic/R/utils.R | 4 +-- Rmagic/README.md | 4 +-- Rmagic/inst/CITATION | 28 +++++++++--------- Rmagic/inst/examples/bonemarrow_tutorial.Rmd | 6 ++-- Rmagic/inst/examples/bonemarrow_tutorial.html | 10 +++---- Rmagic/inst/examples/emt_tutorial.Rmd | 6 ++-- Rmagic/inst/examples/emt_tutorial.html | 8 ++--- Rmagic/tests/test_magic.R | 2 +- autoblack.sh | 1 - matlab/compute_kernel.m | 13 ++++----- matlab/compute_optimal_t.m | 11 +------ matlab/load_10x.m | 4 +-- matlab/mmread.m | 29 +++++++++---------- matlab/svdpca.m | 1 - matlab/svdpca_sparse.m | 1 - matlab/test_magic.m | 1 - python/doc/Makefile | 2 +- python/doc/source/api.rst | 2 +- python/doc/source/tutorial.rst | 2 +- python/magic/__init__.py | 4 +-- python/magic/magic.py | 17 ++++++----- python/magic/plot.py | 9 +++--- python/magic/utils.py | 1 + python/setup.py | 3 +- python/test/test.py | 8 ++--- 32 files changed, 93 insertions(+), 108 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 9c4f5c1..6bc5f73 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -6,5 +6,3 @@ labels: question assignees: '' --- - - diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 79bc183..d3aaf49 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,7 +23,7 @@ jobs: - name: Install pypa/build run: >- - cd python && + cd python && python -m pip install build diff --git a/LICENSE b/LICENSE index 8cdb845..23cb790 100644 --- a/LICENSE +++ b/LICENSE @@ -337,4 +337,3 @@ proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - diff --git a/README.md b/README.md index c4225ba..77213fb 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,13 @@ To see how MAGIC can be applied to single-cell RNA-seq, elucidating the epitheli MAGIC has been implemented in Python, Matlab, and R. -#### To get started immediately, check out our tutorials: -##### Python -* [Epithelial-to-Mesenchymal Transition Tutorial](http://nbviewer.jupyter.org/github/KrishnaswamyLab/MAGIC/blob/master/python/tutorial_notebooks/emt_tutorial.ipynb) -* [Bone Marrow Tutorial](http://nbviewer.jupyter.org/github/KrishnaswamyLab/MAGIC/blob/master/python/tutorial_notebooks/bonemarrow_tutorial.ipynb) -##### R -* [Epithelial-to-Mesenchymal Transition Tutorial](http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/emt_tutorial.html) -* [Bone Marrow Tutorial](http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/bonemarrow_tutorial.html) +#### To get started immediately, check out our tutorials: +##### Python +* [Epithelial-to-Mesenchymal Transition Tutorial](http://nbviewer.jupyter.org/github/KrishnaswamyLab/MAGIC/blob/master/python/tutorial_notebooks/emt_tutorial.ipynb) +* [Bone Marrow Tutorial](http://nbviewer.jupyter.org/github/KrishnaswamyLab/MAGIC/blob/master/python/tutorial_notebooks/bonemarrow_tutorial.ipynb) +##### R +* [Epithelial-to-Mesenchymal Transition Tutorial](http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/emt_tutorial.html) +* [Bone Marrow Tutorial](http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/bonemarrow_tutorial.html)

diff --git a/Rmagic/DESCRIPTION b/Rmagic/DESCRIPTION index 8ca343f..9c0a19d 100644 --- a/Rmagic/DESCRIPTION +++ b/Rmagic/DESCRIPTION @@ -3,7 +3,7 @@ Type: Package Title: MAGIC - Markov Affinity-Based Graph Imputation of Cells Version: 2.0.3.999 Authors@R: c(person(given = "David", family = "van Dijk", email = "davidvandijk@gmail.com", role = c("aut")), - person(given = 'Scott', family = 'Gigante', email = 'scott.gigante@yale.edu', role = 'cre', + person(given = 'Scott', family = 'Gigante', email = 'scott.gigante@yale.edu', role = 'cre', comment = c(ORCID = '0000-0002-4544-2764'))) Maintainer: Scott Gigante Description: MAGIC (Markov affinity-based graph imputation of cells) is a method for addressing technical noise in single-cell data, including under-sampling of mRNA molecules, often termed "dropout" which can severely obscure important gene-gene relationships. MAGIC shares information across similar cells, via data diffusion, to denoise the cell count matrix and fill in missing transcripts. Read more: van Dijk et al. (2018) . diff --git a/Rmagic/LICENSE b/Rmagic/LICENSE index 8cdb845..23cb790 100644 --- a/Rmagic/LICENSE +++ b/Rmagic/LICENSE @@ -337,4 +337,3 @@ proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - diff --git a/Rmagic/R/magic_testdata.R b/Rmagic/R/magic_testdata.R index 035d98d..34cd3f4 100644 --- a/Rmagic/R/magic_testdata.R +++ b/Rmagic/R/magic_testdata.R @@ -5,4 +5,4 @@ #' @format A matrix with 500 rows and 197 variables #' #' @source The authors -"magic_testdata" \ No newline at end of file +"magic_testdata" diff --git a/Rmagic/R/utils.R b/Rmagic/R/utils.R index 3b58de6..c2385e9 100644 --- a/Rmagic/R/utils.R +++ b/Rmagic/R/utils.R @@ -66,11 +66,11 @@ load_pymagic <- function() { } #' Check whether MAGIC Python package is available and can be loaded -#' +#' #' This is used primarily to avoid running tests on CRAN #' and elsewhere where the Python package should not be #' installed. -#' +#' #' @export pymagic_is_available <- function() { tryCatch({ diff --git a/Rmagic/README.md b/Rmagic/README.md index 0653025..acef6a2 100644 --- a/Rmagic/README.md +++ b/Rmagic/README.md @@ -138,10 +138,10 @@ library(ggplot2) library(viridis) #> Loading required package: viridisLite library(phateR) -#> +#> #> Attaching package: 'phateR' #> The following object is masked from 'package:Rmagic': -#> +#> #> library.size.normalize ``` diff --git a/Rmagic/inst/CITATION b/Rmagic/inst/CITATION index 3b2b0e1..f8a9b12 100644 --- a/Rmagic/inst/CITATION +++ b/Rmagic/inst/CITATION @@ -2,20 +2,20 @@ bibentry( bibtype="Article", title="Recovering Gene Interactions from Single-Cell Data Using Data Diffusion", author = c( - person("David", "van Dijk"), - person("Roshan", "Sharma"), - person("Juozas", "Nainys"), - person("Kristina", "Yim"), - person("Pooja", "Kathail"), - person("Ambrose J.", "Carr"), - person("Cassandra", "Burdziak"), - person("Kevin R.", "Moon"), - person("Christine L.", "Chaffer"), - person("Diwakar", "Pattabiraman"), - person("Brian", "Bierie"), - person("Linas", "Mazutis"), - person("Guy", "Wolf"), - person("Smita", "Krishnaswamy"), + person("David", "van Dijk"), + person("Roshan", "Sharma"), + person("Juozas", "Nainys"), + person("Kristina", "Yim"), + person("Pooja", "Kathail"), + person("Ambrose J.", "Carr"), + person("Cassandra", "Burdziak"), + person("Kevin R.", "Moon"), + person("Christine L.", "Chaffer"), + person("Diwakar", "Pattabiraman"), + person("Brian", "Bierie"), + person("Linas", "Mazutis"), + person("Guy", "Wolf"), + person("Smita", "Krishnaswamy"), person("Dana", "Pe'er")), year=2018, url="https://www.cell.com/cell/abstract/S0092-8674(18)30724-4", diff --git a/Rmagic/inst/examples/bonemarrow_tutorial.Rmd b/Rmagic/inst/examples/bonemarrow_tutorial.Rmd index 303ae73..c704273 100644 --- a/Rmagic/inst/examples/bonemarrow_tutorial.Rmd +++ b/Rmagic/inst/examples/bonemarrow_tutorial.Rmd @@ -126,7 +126,7 @@ As you can see, the gene-gene relationships are much clearer after MAGIC. These The data is a little too smooth - we can increase `t` from the default value of 3 to increase the amount of diffusion. We pass the original result to the argument `init` to avoid recomputing intermediate steps. ```{r decrease_t} -bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1"), +bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1"), t=4, init=bmmsc_MAGIC) ggplot(bmmsc_MAGIC) + geom_point(aes(Mpo, Klf1, color=Ifitm1)) + @@ -139,7 +139,7 @@ ggsave('BMMSC_data_R_after_magic.png', width=5, height=5) We can visualize the results of MAGIC on PCA with `genes="pca_only"`. ```{r run_pca} -bmmsc_MAGIC_PCA <- magic(bmmsc, genes="pca_only", +bmmsc_MAGIC_PCA <- magic(bmmsc, genes="pca_only", t=4, init=bmmsc_MAGIC) # ggplot(bmmsc_MAGIC_PCA) + geom_point(aes(x=PC1, y=PC2, color=bmmsc_MAGIC$result$Klf1)) + @@ -167,7 +167,7 @@ ggsave('BMMSC_data_R_phate_colored_by_magic.png', width=5, height=5) We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. ```{r run_magic_full_matrix} -bmmsc_MAGIC <- magic(bmmsc, genes="all_genes", +bmmsc_MAGIC <- magic(bmmsc, genes="all_genes", t=4, init=bmmsc_MAGIC) as.data.frame(bmmsc_MAGIC)[1:5, 1:10] ``` diff --git a/Rmagic/inst/examples/bonemarrow_tutorial.html b/Rmagic/inst/examples/bonemarrow_tutorial.html index 701dc4a..292d1c5 100644 --- a/Rmagic/inst/examples/bonemarrow_tutorial.html +++ b/Rmagic/inst/examples/bonemarrow_tutorial.html @@ -1630,10 +1630,10 @@

Loading packages

library(viridis)
## Loading required package: viridisLite
library(phateR)
-
## 
+
##
 ## Attaching package: 'phateR'
## The following object is masked from 'package:Rmagic':
-## 
+##
 ##     library.size.normalize
@@ -1698,7 +1698,7 @@

Running MAGIC

Rerunning MAGIC with new parameters

The data is a little too smooth - we can decrease t from the automatic value to reduce the amount of diffusion. We pass the original result to the argument init to avoid recomputing intermediate steps.

-
bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1"), 
+
bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1"),
                      t=4, init=bmmsc_MAGIC)
 ggplot(bmmsc_MAGIC) +
   geom_point(aes(Mpo, Klf1, color=Ifitm1)) +
@@ -1709,7 +1709,7 @@ 

Rerunning MAGIC with new parameters

Visualizing MAGIC values on PCA

We can visualize the results of MAGIC on PCA with genes="pca_only".

-
bmmsc_MAGIC_PCA <- magic(bmmsc, genes="pca_only", 
+
bmmsc_MAGIC_PCA <- magic(bmmsc, genes="pca_only",
                          t=4, init=bmmsc_MAGIC)
 ggplot(bmmsc_MAGIC_PCA) +
   geom_point(aes(x=PC1, y=PC2, color=bmmsc_MAGIC$result$Klf1)) +
@@ -1732,7 +1732,7 @@ 

Visualizing MAGIC values on PHATE

Using MAGIC for downstream analysis

We can look at the entire smoothed matrix with genes='all_genes', passing the original result to the argument init to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory.

-
bmmsc_MAGIC <- magic(bmmsc, genes="all_genes", 
+
bmmsc_MAGIC <- magic(bmmsc, genes="all_genes",
                      t=4, init=bmmsc_MAGIC)
 as.data.frame(bmmsc_MAGIC)[1:5, 1:10]
diff --git a/Rmagic/inst/examples/emt_tutorial.Rmd b/Rmagic/inst/examples/emt_tutorial.Rmd index c3c898d..5aea713 100644 --- a/Rmagic/inst/examples/emt_tutorial.Rmd +++ b/Rmagic/inst/examples/emt_tutorial.Rmd @@ -126,14 +126,14 @@ ggplot(data_MAGIC) + ggsave('EMT_data_R_after_magic.png', width=5, height=5) ``` -As you can see, the gene-gene relationships are much clearer after MAGIC. +As you can see, the gene-gene relationships are much clearer after MAGIC. ### Visualizing MAGIC values on PCA We can visualize the results of MAGIC on PCA with `genes="pca_only"`. ```{r run_pca} -data_MAGIC_PCA <- magic(data, genes="pca_only", +data_MAGIC_PCA <- magic(data, genes="pca_only", knn=15, init=data_MAGIC) ggplot(data_MAGIC_PCA) + geom_point(aes(x=PC1, y=PC2, color=data_MAGIC$result$VIM)) + @@ -147,7 +147,7 @@ ggsave('EMT_data_R_pca_colored_by_magic.png', width=5, height=5) We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. ```{r run_magic_full_matrix} -data_MAGIC <- magic(data, genes="all_genes", +data_MAGIC <- magic(data, genes="all_genes", knn=15, init=data_MAGIC) as.data.frame(data_MAGIC)[1:5, 1:10] ``` diff --git a/Rmagic/inst/examples/emt_tutorial.html b/Rmagic/inst/examples/emt_tutorial.html index 51a1343..8b66b1f 100644 --- a/Rmagic/inst/examples/emt_tutorial.html +++ b/Rmagic/inst/examples/emt_tutorial.html @@ -1695,10 +1695,10 @@

Loading packages

library(viridis)
## Loading required package: viridisLite
library(phateR)
-
## 
+
##
 ## Attaching package: 'phateR'
## The following object is masked from 'package:Rmagic':
-## 
+##
 ##     library.size.normalize
@@ -1765,7 +1765,7 @@

Running MAGIC

Visualizing MAGIC values on PCA

We can visualize the results of MAGIC on PCA with genes="pca_only".

-
data_MAGIC_PCA <- magic(data, genes="pca_only", 
+
data_MAGIC_PCA <- magic(data, genes="pca_only",
                         knn=15, init=data_MAGIC)
 ggplot(data_MAGIC_PCA) +
   geom_point(aes(x=PC1, y=PC2, color=data_MAGIC$result$VIM)) +
@@ -1777,7 +1777,7 @@ 

Visualizing MAGIC values on PCA

Using MAGIC for downstream analysis

We can look at the entire smoothed matrix with genes='all_genes', passing the original result to the argument init to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory.

-
data_MAGIC <- magic(data, genes="all_genes", 
+
data_MAGIC <- magic(data, genes="all_genes",
                     knn=15, init=data_MAGIC)
 as.data.frame(data_MAGIC)[1:5, 1:10]
diff --git a/Rmagic/tests/test_magic.R b/Rmagic/tests/test_magic.R index 13c949d..d56aa94 100644 --- a/Rmagic/tests/test_magic.R +++ b/Rmagic/tests/test_magic.R @@ -9,7 +9,7 @@ library(viridis) seurat_obj <- function() { # load data data <- read.csv('../../data/HMLE_TGFb_day_8_10.csv.gz') - + seurat_raw_data <- t(data) rownames(seurat_raw_data) <- colnames(data) colnames(seurat_raw_data) <- rownames(data) diff --git a/autoblack.sh b/autoblack.sh index 981a7b4..f8c6210 100644 --- a/autoblack.sh +++ b/autoblack.sh @@ -11,4 +11,3 @@ for file in \$files; do done EOF chmod +x .git/hooks/pre-commit - diff --git a/matlab/compute_kernel.m b/matlab/compute_kernel.m index e7dadd0..28c0728 100644 --- a/matlab/compute_kernel.m +++ b/matlab/compute_kernel.m @@ -1,7 +1,7 @@ function K = compute_alpha_kernel_sparse(data, varargin) % K = computer_alpha_kernel_sparse(data, varargin) % Computes sparse alpha-decay kernel -% varargin: +% varargin: % 'npca' (default = [], no PCA) % Perform fast random PCA before computing distances % 'k' (default = 5) @@ -69,7 +69,7 @@ idx_thresh=find(below_thresh); -if ~isempty(idx_thresh) +if ~isempty(idx_thresh) K=exp(-(kdist(idx_thresh,:)./epsilon(idx_thresh)).^a); K(K<=th)=0; K=K(:); @@ -88,11 +88,11 @@ epsilon2=epsilon(~below_thresh); disp(['Next iteration: k= ' num2str(k_knn)]) [idx2, kdist2]=knnsearch(data_pc,data_pc2,'k',k_knn,'Distance',distfun); - + % Find the points that have large enough distance below_thresh2=kdist2(:,end)>=bth*epsilon2; idx_thresh2=find(below_thresh2); - + if ~isempty(idx_thresh2) K2=exp(-(kdist2(idx_thresh2,:)./epsilon2(idx_thresh2)).^a); K2(K2<=th)=0; @@ -101,7 +101,7 @@ i2=i2(:); idx_temp=idx2(idx_thresh2,:); j2=idx_temp(:); - + i=[i; i2]; j=[j; j2]; K=[K; K2(:)]; @@ -126,7 +126,7 @@ K2(K2<=th)=0; K=[K; K2(:)]; end - + end % Build the kernel @@ -135,4 +135,3 @@ disp ' Symmetrize affinities' K = K + K'; disp ' Done computing kernel' - diff --git a/matlab/compute_optimal_t.m b/matlab/compute_optimal_t.m index c5d6632..b58f3ba 100644 --- a/matlab/compute_optimal_t.m +++ b/matlab/compute_optimal_t.m @@ -32,7 +32,7 @@ data_prev = data_curr; end t_opt = find(error_vec < th, 1, 'first'); - + figure; hold all; plot(1:t_max, error_vec, '*-'); @@ -60,12 +60,3 @@ end disp(['optimal t = ' num2str(t_opt)]); - - - - - - - - - diff --git a/matlab/load_10x.m b/matlab/load_10x.m index 75e95d5..2b5d8e7 100644 --- a/matlab/load_10x.m +++ b/matlab/load_10x.m @@ -10,7 +10,7 @@ if isempty(data_dir) data_dir = './'; elseif data_dir(end) ~= '/' - data_dir = [data_dir '/']; + data_dir = [data_dir '/']; end for i=1:length(varargin)-1 @@ -38,7 +38,7 @@ dataMatrix_cells = table2cell( ... readtable(filename_cells, ... 'FileType','text','ReadVariableNames',0)); - + % Remove empty cells col_keep = any(dataMatrix,1); dataMatrix = dataMatrix(:,col_keep); diff --git a/matlab/mmread.m b/matlab/mmread.m index de60c0b..add56fa 100644 --- a/matlab/mmread.m +++ b/matlab/mmread.m @@ -11,7 +11,7 @@ % 'array' (dense array storage). The data will be duplicated % as appropriate if symmetry is indicated in the header. % -% Optionally, size information about the matrix can be +% Optionally, size information about the matrix can be % obtained by using the return values rows, cols, and % entries, where entries is the number of nonzero entries % in the final matrix. Type information can also be retrieved @@ -31,9 +31,9 @@ end % NOTE: If using a version of Matlab for which strtok is not -% defined, substitute 'gettok' for 'strtok' in the +% defined, substitute 'gettok' for 'strtok' in the % following lines, and download gettok.m from the -% Matrix Market site. +% Matrix Market site. [head0,header] = strtok(header); % see note above [head1,header] = strtok(header); [rep,header] = strtok(header); @@ -44,7 +44,7 @@ field = lower(field); symm = lower(symm); if ( length(symm) == 0 ) - disp(['Not enough words in header line of file ',filename]) + disp(['Not enough words in header line of file ',filename]) disp('Recognized format: ') disp('%%MatrixMarket matrix representation field symmetry') error('Check header line.') @@ -69,7 +69,7 @@ % Read size information, then branch according to % sparse or dense format -if ( strcmp(rep,'coordinate')) % read matrix given in sparse +if ( strcmp(rep,'coordinate')) % read matrix given in sparse % coordinate matrix format [sizeinfo,count] = sscanf(commentline,'%d%d%d'); @@ -86,9 +86,9 @@ rows = sizeinfo(1); cols = sizeinfo(2); entries = sizeinfo(3); - + if ( strcmp(field,'real') || strcmp(field,'integer') ) % real valued entries: - + [T,count] = fscanf(mmfile,'%f',3); T = [T; fscanf(mmfile,'%f')]; if ( size(T) ~= 3*entries ) @@ -100,9 +100,9 @@ end T = reshape(T,3,entries)'; A = sparse(T(:,1), T(:,2), T(:,3), rows , cols); - + elseif ( strcmp(field,'complex')) % complex valued entries: - + T = fscanf(mmfile,'%f',4); T = [T; fscanf(mmfile,'%f')]; if ( size(T) ~= 4*entries ) @@ -114,9 +114,9 @@ end T = reshape(T,4,entries)'; A = sparse(T(:,1), T(:,2), T(:,3) + T(:,4)*sqrt(-1), rows , cols); - + elseif ( strcmp(field,'pattern')) % pattern matrix (no values given): - + T = fscanf(mmfile,'%f',2); T = [T; fscanf(mmfile,'%f')]; if ( size(T) ~= 2*entries ) @@ -131,7 +131,7 @@ end -elseif ( strcmp(rep,'array') ) % read matrix given in dense +elseif ( strcmp(rep,'array') ) % read matrix given in dense % array (column major) format [sizeinfo,count] = sscanf(commentline,'%d%d'); @@ -151,7 +151,7 @@ if ( strcmp(field,'real') || strcmp(field,'integer') ) % real valued entries: A = fscanf(mmfile,'%f',1); A = [A; fscanf(mmfile,'%f')]; - if ( strcmp(symm,'symmetric') | strcmp(symm,'hermitian') | strcmp(symm,'skew-symmetric') ) + if ( strcmp(symm,'symmetric') | strcmp(symm,'hermitian') | strcmp(symm,'skew-symmetric') ) for j=1:cols-1, currenti = j*rows; A = [A(1:currenti); zeros(j,1);A(currenti+1:length(A))]; @@ -176,7 +176,7 @@ tmpi = fscanf(mmfile,'%f',1); A = [A; tmpr + tmpi*i]; end - if ( strcmp(symm,'symmetric') | strcmp(symm,'hermitian') | strcmp(symm,'skew-symmetric') ) + if ( strcmp(symm,'symmetric') | strcmp(symm,'hermitian') | strcmp(symm,'skew-symmetric') ) for j=1:cols-1, currenti = j*rows; A = [A(1:currenti); zeros(j,1);A(currenti+1:length(A))]; @@ -219,4 +219,3 @@ fclose(mmfile); % Done. - diff --git a/matlab/svdpca.m b/matlab/svdpca.m index 727b2e1..5797148 100644 --- a/matlab/svdpca.m +++ b/matlab/svdpca.m @@ -24,4 +24,3 @@ [U,S,V] = randPCA(X, k); Y = U*S*V'; end - diff --git a/matlab/svdpca_sparse.m b/matlab/svdpca_sparse.m index 2172276..ed8b237 100644 --- a/matlab/svdpca_sparse.m +++ b/matlab/svdpca_sparse.m @@ -18,4 +18,3 @@ disp 'No PCA performed' pc = X; end - diff --git a/matlab/test_magic.m b/matlab/test_magic.m index db9f455..42aa6eb 100644 --- a/matlab/test_magic.m +++ b/matlab/test_magic.m @@ -115,4 +115,3 @@ ylabel(h,plot_genes{4}); view([-50 22]); title 'After MAGIC' - diff --git a/python/doc/Makefile b/python/doc/Makefile index acdb12e..c596553 100644 --- a/python/doc/Makefile +++ b/python/doc/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/python/doc/source/api.rst b/python/doc/source/api.rst index 66b6e07..b17b746 100644 --- a/python/doc/source/api.rst +++ b/python/doc/source/api.rst @@ -15,4 +15,4 @@ Plotting .. automodule:: magic.plot :members: :inherited-members: - :show-inheritance: \ No newline at end of file + :show-inheritance: diff --git a/python/doc/source/tutorial.rst b/python/doc/source/tutorial.rst index 94d500b..361713c 100644 --- a/python/doc/source/tutorial.rst +++ b/python/doc/source/tutorial.rst @@ -23,4 +23,4 @@ A second tutorial analyzing myeloid and erythroid cells in mouse bone marrow is .. _here: http://nbviewer.jupyter.org/github/KrishnaswamyLab/magic/blob/master/python/tutorial_notebooks/bonemarrow_tutorial.ipynb -__ here_ \ No newline at end of file +__ here_ diff --git a/python/magic/__init__.py b/python/magic/__init__.py index a8e8b6a..0ec2edc 100644 --- a/python/magic/__init__.py +++ b/python/magic/__init__.py @@ -1,4 +1,4 @@ +import magic.plot + from .magic import MAGIC from .version import __version__ - -import magic.plot diff --git a/python/magic/magic.py b/python/magic/magic.py index 757f57c..68ab2b5 100644 --- a/python/magic/magic.py +++ b/python/magic/magic.py @@ -6,18 +6,19 @@ (C) 2018 Krishnaswamy Lab GPLv2 """ -import numpy as np -import graphtools -from sklearn.base import BaseEstimator -from sklearn.exceptions import NotFittedError -from sklearn.decomposition import PCA +import numbers import warnings + +import graphtools import matplotlib.pyplot as plt -from scipy import sparse, spatial +import numpy as np import pandas as pd -import numbers -import tasklogger import scprep +import tasklogger +from scipy import sparse, spatial +from sklearn.base import BaseEstimator +from sklearn.decomposition import PCA +from sklearn.exceptions import NotFittedError from . import utils diff --git a/python/magic/plot.py b/python/magic/plot.py index 136f778..8f77b15 100644 --- a/python/magic/plot.py +++ b/python/magic/plot.py @@ -1,12 +1,13 @@ # author: Scott Gigante # (C) 2017 Krishnaswamy Lab GPLv2 +import numbers + import matplotlib.pyplot as plt -import pandas as pd import numpy as np -from matplotlib import rc, animation -import numbers +import pandas as pd import scprep +from matplotlib import animation, rc from scipy import sparse from .magic import MAGIC @@ -44,7 +45,7 @@ def animate_magic( dpi=100, ipython_html="jshtml", verbose=False, - **kwargs + **kwargs, ): """Animate a gene-gene relationship with increased diffusion diff --git a/python/magic/utils.py b/python/magic/utils.py index 69a74a3..8456f63 100644 --- a/python/magic/utils.py +++ b/python/magic/utils.py @@ -1,4 +1,5 @@ import numbers + import numpy as np import pandas as pd import scprep diff --git a/python/setup.py b/python/setup.py index d732b91..b3718aa 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,6 +1,7 @@ import os import sys -from setuptools import setup, find_packages + +from setuptools import find_packages, setup install_requires = [ "numpy>=1.14.0", diff --git a/python/test/test.py b/python/test/test.py index 7c5930f..dc0d449 100644 --- a/python/test/test.py +++ b/python/test/test.py @@ -1,12 +1,13 @@ #!/usr/bin/env python +import os +import scprep +import numpy as np +import magic import matplotlib as mpl mpl.use("agg") -import magic -import numpy as np -import scprep try: import anndata @@ -14,7 +15,6 @@ # anndata not installed pass -import os data_path = os.path.join("..", "data", "test_data.csv") if not os.path.isfile(data_path): From e2d7c2dbffdc5e3eba38fc52ae41e4f6c070e3cc Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 10:28:53 -0500 Subject: [PATCH 11/33] lint with flake8 rules --- python/magic/__init__.py | 4 ++-- python/magic/magic.py | 16 ++++++++-------- python/magic/plot.py | 12 ++++++------ python/magic/utils.py | 4 ++-- python/setup.py | 6 +++--- python/test/test.py | 6 +++--- setup.cfg | 24 ++++++++++++++++++++++++ 7 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 setup.cfg diff --git a/python/magic/__init__.py b/python/magic/__init__.py index 0ec2edc..a8e8b6a 100644 --- a/python/magic/__init__.py +++ b/python/magic/__init__.py @@ -1,4 +1,4 @@ -import magic.plot - from .magic import MAGIC from .version import __version__ + +import magic.plot diff --git a/python/magic/magic.py b/python/magic/magic.py index 68ab2b5..6eea3cc 100644 --- a/python/magic/magic.py +++ b/python/magic/magic.py @@ -6,21 +6,21 @@ (C) 2018 Krishnaswamy Lab GPLv2 """ -import numbers -import warnings +from . import utils +from scipy import sparse +from scipy import spatial +from sklearn.base import BaseEstimator +from sklearn.decomposition import PCA +from sklearn.exceptions import NotFittedError import graphtools import matplotlib.pyplot as plt +import numbers import numpy as np import pandas as pd import scprep import tasklogger -from scipy import sparse, spatial -from sklearn.base import BaseEstimator -from sklearn.decomposition import PCA -from sklearn.exceptions import NotFittedError - -from . import utils +import warnings try: import anndata diff --git a/python/magic/plot.py b/python/magic/plot.py index 8f77b15..f4bb930 100644 --- a/python/magic/plot.py +++ b/python/magic/plot.py @@ -1,17 +1,17 @@ # author: Scott Gigante # (C) 2017 Krishnaswamy Lab GPLv2 -import numbers +from .magic import MAGIC +from .utils import in_ipynb +from matplotlib import animation +from matplotlib import rc +from scipy import sparse import matplotlib.pyplot as plt +import numbers import numpy as np import pandas as pd import scprep -from matplotlib import animation, rc -from scipy import sparse - -from .magic import MAGIC -from .utils import in_ipynb def _validate_gene(gene, data): diff --git a/python/magic/utils.py b/python/magic/utils.py index 8456f63..ff595e0 100644 --- a/python/magic/utils.py +++ b/python/magic/utils.py @@ -1,9 +1,9 @@ -import numbers +from scipy import sparse +import numbers import numpy as np import pandas as pd import scprep -from scipy import sparse try: import anndata diff --git a/python/setup.py b/python/setup.py index b3718aa..6f41e99 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,7 +1,7 @@ -import os -import sys +from setuptools import find_packages +from setuptools import setup -from setuptools import find_packages, setup +import os install_requires = [ "numpy>=1.14.0", diff --git a/python/test/test.py b/python/test/test.py index dc0d449..ff023ea 100644 --- a/python/test/test.py +++ b/python/test/test.py @@ -1,11 +1,11 @@ #!/usr/bin/env python -import os -import scprep -import numpy as np import magic import matplotlib as mpl +import numpy as np +import os +import scprep mpl.use("agg") diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..ec27580 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,24 @@ +[flake8] +ignore = + # top-level module docstring + D100, D104, + # space before : conflicts with black + E203 +per-file-ignores = + # imported but unused + __init__.py: F401 + # missing docstring in public function for methods, metrics, datasets + openproblems/tasks/*/*/*.py: D103, E203 + openproblems/tasks/*/*/__init__.py: F401, D103 +max-line-length = 88 +exclude = + .git, + __pycache__, + build, + dist, + Snakefile + +[isort] +profile = black +force_single_line = true +force_alphabetical_sort = true From f751df497119f45077707ac3a39343238a851cd3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Mar 2021 15:37:59 +0000 Subject: [PATCH 12/33] pre-commit --- Rmagic/R/magic.R | 260 +++++++++---------- Rmagic/R/preprocessing.R | 2 +- Rmagic/R/utils.R | 72 ++--- Rmagic/README.Rmd | 34 +-- Rmagic/data-raw/generate_test_data.R | 12 +- Rmagic/inst/examples/bonemarrow_tutorial.Rmd | 64 ++--- Rmagic/inst/examples/emt_tutorial.Rmd | 44 ++-- Rmagic/tests/test_magic.R | 16 +- 8 files changed, 256 insertions(+), 248 deletions(-) diff --git a/Rmagic/R/magic.R b/Rmagic/R/magic.R index e5ff0d9..150c333 100644 --- a/Rmagic/R/magic.R +++ b/Rmagic/R/magic.R @@ -55,80 +55,74 @@ #' #' @examples #' if (pymagic_is_available()) { -#' -#' data(magic_testdata) -#' -#' # Run MAGIC -#' data_magic <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) -#' summary(data_magic) -#' ## CDH1 VIM ZEB1 -#' ## Min. :0.4303 Min. :3.854 Min. :0.01111 -#' ## 1st Qu.:0.4444 1st Qu.:3.947 1st Qu.:0.01145 -#' ## Median :0.4462 Median :3.964 Median :0.01153 -#' ## Mean :0.4461 Mean :3.965 Mean :0.01152 -#' ## 3rd Qu.:0.4478 3rd Qu.:3.982 3rd Qu.:0.01160 -#' ## Max. :0.4585 Max. :4.127 Max. :0.01201 -#' -#' # Plot the result with ggplot2 -#' if (require(ggplot2)) { -#' ggplot(data_magic) + -#' geom_point(aes(x=VIM, y=CDH1, color=ZEB1)) -#' } -#' -#' # Run MAGIC again returning all genes -#' # We use the last run as initialization -#' data_magic <- magic(magic_testdata, genes="all_genes", init=data_magic) -#' # Extract the smoothed data matrix to use in downstream analysis -#' data_smooth <- as.matrix(data_magic) -#' +#' data(magic_testdata) +#' +#' # Run MAGIC +#' data_magic <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) +#' summary(data_magic) +#' ## CDH1 VIM ZEB1 +#' ## Min. :0.4303 Min. :3.854 Min. :0.01111 +#' ## 1st Qu.:0.4444 1st Qu.:3.947 1st Qu.:0.01145 +#' ## Median :0.4462 Median :3.964 Median :0.01153 +#' ## Mean :0.4461 Mean :3.965 Mean :0.01152 +#' ## 3rd Qu.:0.4478 3rd Qu.:3.982 3rd Qu.:0.01160 +#' ## Max. :0.4585 Max. :4.127 Max. :0.01201 +#' +#' # Plot the result with ggplot2 +#' if (require(ggplot2)) { +#' ggplot(data_magic) + +#' geom_point(aes(x = VIM, y = CDH1, color = ZEB1)) +#' } +#' +#' # Run MAGIC again returning all genes +#' # We use the last run as initialization +#' data_magic <- magic(magic_testdata, genes = "all_genes", init = data_magic) +#' # Extract the smoothed data matrix to use in downstream analysis +#' data_smooth <- as.matrix(data_magic) #' } #' #' if (pymagic_is_available() && require(Seurat)) { +#' data(magic_testdata) #' -#' data(magic_testdata) -#' -#' # Create a Seurat object -#' seurat_object <- CreateSeuratObject(counts = t(magic_testdata), assay="RNA") -#' seurat_object <- NormalizeData(object = seurat_object) -#' seurat_object <- ScaleData(object = seurat_object) -#' -#' # Run MAGIC and reset the active assay -#' seurat_object <- magic(seurat_object) -#' seurat_object@active.assay = "MAGIC_RNA" +#' # Create a Seurat object +#' seurat_object <- CreateSeuratObject(counts = t(magic_testdata), assay = "RNA") +#' seurat_object <- NormalizeData(object = seurat_object) +#' seurat_object <- ScaleData(object = seurat_object) #' -#' # Analyze with Seurat -#' VlnPlot(seurat_object, features=c("VIM", "ZEB1", "CDH1")) +#' # Run MAGIC and reset the active assay +#' seurat_object <- magic(seurat_object) +#' seurat_object@active.assay <- "MAGIC_RNA" #' +#' # Analyze with Seurat +#' VlnPlot(seurat_object, features = c("VIM", "ZEB1", "CDH1")) #' } -#' #' @export #' magic <- function(data, ...) { - UseMethod(generic = 'magic', object = data) + UseMethod(generic = "magic", object = data) } #' @rdname magic #' @export #' magic.default <- function( - data, - genes = NULL, - knn = 5, - knn.max = NULL, - decay = 1, - t = 3, - npca = 100, - solver = 'exact', - init = NULL, - t.max = 20, - knn.dist.method = 'euclidean', - verbose = 1, - n.jobs = 1, - seed = NULL, - # deprecated args - k=NULL, alpha=NULL, - ... -) { + data, + genes = NULL, + knn = 5, + knn.max = NULL, + decay = 1, + t = 3, + npca = 100, + solver = "exact", + init = NULL, + t.max = 20, + knn.dist.method = "euclidean", + verbose = 1, + n.jobs = 1, + seed = NULL, + # deprecated args + k = NULL, alpha = NULL, + ...) { # check installation if (!reticulate::py_module_available(module = "magic") || (is.null(pymagic))) load_pymagic() # check for deprecated arguments @@ -149,7 +143,7 @@ magic.default <- function( seed <- check.int.or.null(seed) verbose <- check.int.or.null(verbose) decay <- check.double.or.null(decay) - t <- check.int.or.string(t, 'auto') + t <- check.int.or.string(t, "auto") if (!methods::is(object = data, "Matrix")) { data <- as.matrix(x = data) } @@ -228,11 +222,11 @@ magic.default <- function( colnames(x = result) <- gene_names rownames(x = result) <- rownames(data) result <- as.data.frame(x = result) - result <- list( - "result" = result, - "operator" = operator, - "params" = params - ) + result <- list( + "result" = result, + "operator" = operator, + "params" = params + ) class(x = result) <- c("magic", "list") return(result) } @@ -242,22 +236,21 @@ magic.default <- function( #' @method magic seurat #' magic.seurat <- function( - data, - genes = NULL, - knn = 5, - knn.max = NULL, - decay = 1, - t = 3, - npca = 100, - solver = "exact", - init = NULL, - t.max = 20, - knn.dist.method = 'euclidean', - verbose = 1, - n.jobs = 1, - seed = NULL, - ... -) { + data, + genes = NULL, + knn = 5, + knn.max = NULL, + decay = 1, + t = 3, + npca = 100, + solver = "exact", + init = NULL, + t.max = 20, + knn.dist.method = "euclidean", + verbose = 1, + n.jobs = 1, + seed = NULL, + ...) { if (requireNamespace("Seurat", quietly = TRUE)) { results <- magic( data = as.matrix(x = t(x = data@data)), @@ -307,29 +300,28 @@ magic.seurat <- function( #' @method magic Seurat #' magic.Seurat <- function( - data, - assay = NULL, - genes = NULL, - knn = 5, - knn.max = NULL, - decay = 1, - t = 3, - npca = 100, - solver = 'exact', - init = NULL, - t.max = 20, - knn.dist.method = 'euclidean', - verbose = 1, - n.jobs = 1, - seed = NULL, - ... -) { + data, + assay = NULL, + genes = NULL, + knn = 5, + knn.max = NULL, + decay = 1, + t = 3, + npca = 100, + solver = "exact", + init = NULL, + t.max = 20, + knn.dist.method = "euclidean", + verbose = 1, + n.jobs = 1, + seed = NULL, + ...) { if (requireNamespace("Seurat", quietly = TRUE)) { if (is.null(x = assay)) { assay <- Seurat::DefaultAssay(object = data) } results <- magic( - data = t(x = Seurat::GetAssayData(object = data, slot = 'data', assay = assay)), + data = t(x = Seurat::GetAssayData(object = data, slot = "data", assay = assay)), genes = genes, knn = knn, knn.max = knn.max, @@ -345,11 +337,13 @@ magic.Seurat <- function( seed = seed, ... ) - assay_name <- paste0('MAGIC_', assay) + assay_name <- paste0("MAGIC_", assay) data[[assay_name]] <- Seurat::CreateAssayObject(data = t(x = as.matrix(x = results$result))) - print(paste0("Added MAGIC output to ", assay_name, ". To use it, pass assay='", assay_name, - "' to downstream methods or set DefaultAssay(seurat_object) <- '", assay_name, "'.")) - Seurat::Tool(object = data) <- results[c('operator', 'params')] + print(paste0( + "Added MAGIC output to ", assay_name, ". To use it, pass assay='", assay_name, + "' to downstream methods or set DefaultAssay(seurat_object) <- '", assay_name, "'." + )) + Seurat::Tool(object = data) <- results[c("operator", "params")] return(data) } else { message("Seurat package not available. Running default MAGIC implementation.") @@ -380,26 +374,26 @@ magic.Seurat <- function( #' @param ... Arguments for print() #' @examples #' if (pymagic_is_available()) { -#' -#' data(magic_testdata) -#' data_magic <- magic(magic_testdata) -#' print(data_magic) -#' ## MAGIC with elements -#' ## $result : (500, 197) -#' ## $operator : Python MAGIC operator -#' ## $params : list with elements (data, knn, decay, t, npca, knn.dist.method) -#' +#' data(magic_testdata) +#' data_magic <- magic(magic_testdata) +#' print(data_magic) +#' ## MAGIC with elements +#' ## $result : (500, 197) +#' ## $operator : Python MAGIC operator +#' ## $params : list with elements (data, knn, decay, t, npca, knn.dist.method) #' } #' @rdname print #' @method print magic #' @export print.magic <- function(x, ...) { - result <- paste0("MAGIC with elements\n", - " $result : (", nrow(x$result), ", ", - ncol(x$result), ")\n", - " $operator : Python MAGIC operator\n", - " $params : list with elements (", - paste(names(x$params), collapse = ", "), ")") + result <- paste0( + "MAGIC with elements\n", + " $result : (", nrow(x$result), ", ", + ncol(x$result), ")\n", + " $operator : Python MAGIC operator\n", + " $params : list with elements (", + paste(names(x$params), collapse = ", "), ")" + ) cat(result) } @@ -409,18 +403,16 @@ print.magic <- function(x, ...) { #' @param ... Arguments for summary() #' @examples #' if (pymagic_is_available()) { -#' -#' data(magic_testdata) -#' data_magic <- magic(magic_testdata) -#' summary(data_magic) -#' ## ZEB1 -#' ## Min. :0.01071 -#' ## 1st Qu.:0.01119 -#' ## Median :0.01130 -#' ## Mean :0.01129 -#' ## 3rd Qu.:0.01140 -#' ## Max. :0.01201 -#' +#' data(magic_testdata) +#' data_magic <- magic(magic_testdata) +#' summary(data_magic) +#' ## ZEB1 +#' ## Min. :0.01071 +#' ## 1st Qu.:0.01119 +#' ## Median :0.01130 +#' ## Mean :0.01129 +#' ## 3rd Qu.:0.01140 +#' ## Max. :0.01201 #' } #' @rdname summary #' @method summary magic @@ -463,12 +455,10 @@ as.data.frame.magic <- function(x, ...) { #' @param ... Arguments for ggplot() #' @examples #' if (pymagic_is_available() && require(ggplot2)) { -#' -#' data(magic_testdata) -#' data_magic <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) -#' ggplot(data_magic, aes(VIM, CDH1, colour=ZEB1)) + -#' geom_point() -#' +#' data(magic_testdata) +#' data_magic <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) +#' ggplot(data_magic, aes(VIM, CDH1, colour = ZEB1)) + +#' geom_point() #' } #' @rdname ggplot #' @method ggplot magic diff --git a/Rmagic/R/preprocessing.R b/Rmagic/R/preprocessing.R index b8eb7bd..ac64b9d 100644 --- a/Rmagic/R/preprocessing.R +++ b/Rmagic/R/preprocessing.R @@ -12,7 +12,7 @@ #' @import Matrix #' #' @export -library.size.normalize <- function(data, verbose=FALSE) { +library.size.normalize <- function(data, verbose = FALSE) { if (verbose) { message(paste0( "Normalizing library sizes for ", diff --git a/Rmagic/R/utils.R b/Rmagic/R/utils.R index c2385e9..b985a45 100644 --- a/Rmagic/R/utils.R +++ b/Rmagic/R/utils.R @@ -14,19 +14,23 @@ null_equal <- function(x, y) { #' @importFrom utils packageVersion #' @export check_pymagic_version <- function() { - pyversion <- strsplit(pymagic$`__version__`, '\\.')[[1]] - rversion <- strsplit(as.character(packageVersion("Rmagic")), '\\.')[[1]] + pyversion <- strsplit(pymagic$`__version__`, "\\.")[[1]] + rversion <- strsplit(as.character(packageVersion("Rmagic")), "\\.")[[1]] major_version <- as.integer(rversion[1]) minor_version <- as.integer(rversion[2]) if (as.integer(pyversion[1]) < major_version) { - warning(paste0("Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", - major_version, ".", minor_version, "). Please update with pip ", - "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic().")) + warning(paste0( + "Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", + major_version, ".", minor_version, "). Please update with pip ", + "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + )) return(FALSE) } else if (as.integer(pyversion[2]) < minor_version) { - warning(paste0("Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", - major_version, ".", minor_version, "). Consider updating with pip ", - "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic().")) + warning(paste0( + "Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", + major_version, ".", minor_version, "). Consider updating with pip ", + "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + )) return(FALSE) } return(TRUE) @@ -37,9 +41,9 @@ failed_pymagic_import <- function(e) { message(e) result <- as.character(e) if (length(grep("ModuleNotFoundError: No module named 'magic'", result)) > 0 || - length(grep("ImportError: No module named magic", result)) > 0) { + length(grep("ImportError: No module named magic", result)) > 0) { # not installed - if (utils::menu(c("Yes", "No"), title="Install MAGIC Python package with reticulate?") == 1) { + if (utils::menu(c("Yes", "No"), title = "Install MAGIC Python package with reticulate?") == 1) { install.magic() } } else if (length(grep("r\\-reticulate", reticulate::py_config()$python)) > 0) { @@ -54,7 +58,7 @@ failed_pymagic_import <- function(e) { } load_pymagic <- function() { - delay_load = list(on_load=check_pymagic_version, on_error=failed_pymagic_import) + delay_load <- list(on_load = check_pymagic_version, on_error = failed_pymagic_import) # load if (is.null(pymagic)) { # first time load @@ -73,13 +77,14 @@ load_pymagic <- function() { #' #' @export pymagic_is_available <- function() { - tryCatch({ - reticulate::import("magic")$MAGIC - check_pymagic_version() - }, - error = function(e) { - FALSE - } + tryCatch( + { + reticulate::import("magic")$MAGIC + check_pymagic_version() + }, + error = function(e) { + FALSE + } ) } @@ -104,21 +109,22 @@ pymagic_is_available <- function() { #' #' @export install.magic <- function(envname = "r-reticulate", method = "auto", - conda = "auto", pip=TRUE, ...) { + conda = "auto", pip = TRUE, ...) { message("Attempting to install MAGIC python package with reticulate") - tryCatch({ - reticulate::py_install("magic-impute", - envname = envname, method = method, - conda = conda, pip=pip, ... - ) - message("Install complete. Please restart R and try again.") - }, - error = function(e) { - stop(paste0( - "Cannot locate MAGIC Python package, please install through pip ", - "(e.g. ", reticulate::py_config()$python, " -m pip install magic-impute) and then restart R." - )) - } + tryCatch( + { + reticulate::py_install("magic-impute", + envname = envname, method = method, + conda = conda, pip = pip, ... + ) + message("Install complete. Please restart R and try again.") + }, + error = function(e) { + stop(paste0( + "Cannot locate MAGIC Python package, please install through pip ", + "(e.g. ", reticulate::py_config()$python, " -m pip install magic-impute) and then restart R." + )) + } ) } @@ -134,7 +140,7 @@ pymagic <- NULL ###### check.int <- function(x) { - as.integer(x) + as.integer(x) } check.int.or.null <- function(x) { diff --git a/Rmagic/README.Rmd b/Rmagic/README.Rmd index bcf5f0f..46c8f4b 100644 --- a/Rmagic/README.Rmd +++ b/Rmagic/README.Rmd @@ -130,7 +130,7 @@ The example data is located in the MAGIC R package. ```{r load_data} # load data data(magic_testdata) -magic_testdata[1:5,1:10] +magic_testdata[1:5, 1:10] ``` ### Running MAGIC @@ -139,23 +139,23 @@ Running MAGIC is as simple as running the `magic` function. ```{r run_magic} # run MAGIC -data_MAGIC <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) +data_MAGIC <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) ``` We can plot the data before and after MAGIC to visualize the results. ```{r plot_raw} ggplot(magic_testdata) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` The data suffers from dropout to the point that we cannot infer anything about the gene-gene relationships. ```{r plot_magic} ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` As you can see, the gene-gene relationships are much clearer after MAGIC. @@ -163,17 +163,17 @@ As you can see, the gene-gene relationships are much clearer after MAGIC. The data is sometimes a little too smooth - we can decrease `t` from the automatic value to reduce the amount of diffusion. We pass the original result to the argument `init` to avoid recomputing intermediate steps. ```{r plot_reduced_t} -data_MAGIC <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1"), t=6, init=data_MAGIC) +data_MAGIC <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1"), t = 6, init = data_MAGIC) ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. ```{r run_magic_full_matrix} -data_MAGIC <- magic(magic_testdata, genes="all_genes", t=6, init=data_MAGIC) +data_MAGIC <- magic(magic_testdata, genes = "all_genes", t = 6, init = data_MAGIC) as.data.frame(data_MAGIC)[1:5, 1:10] ``` @@ -184,9 +184,9 @@ We can visualize the results of MAGIC on PCA as follows. ```{r run_pca} data_MAGIC_PCA <- as.data.frame(prcomp(data_MAGIC)$x) ggplot(data_MAGIC_PCA) + - geom_point(aes(x=PC1, y=PC2, color=data_MAGIC$result$VIM)) + - scale_color_viridis(option="B") + - labs(color="VIM") + geom_point(aes(x = PC1, y = PC2, color = data_MAGIC$result$VIM)) + + scale_color_viridis(option = "B") + + labs(color = "VIM") ``` @@ -195,11 +195,11 @@ ggplot(data_MAGIC_PCA) + We can visualize the results of MAGIC on PHATE as follows. We set `t` and `k` manually, because this toy dataset is really too small to make sense with PHATE; however, the default values work well for single-cell genomic data. ```{r run_phate} -data_PHATE <- phate(magic_testdata, k=3, t=15) +data_PHATE <- phate(magic_testdata, k = 3, t = 15) ggplot(data_PHATE) + - geom_point(aes(x=PHATE1, y=PHATE2, color=data_MAGIC$result$VIM)) + - scale_color_viridis(option="B") + - labs(color="VIM") + geom_point(aes(x = PHATE1, y = PHATE2, color = data_MAGIC$result$VIM)) + + scale_color_viridis(option = "B") + + labs(color = "VIM") ``` ## Issues diff --git a/Rmagic/data-raw/generate_test_data.R b/Rmagic/data-raw/generate_test_data.R index f0e86ab..fb8d090 100644 --- a/Rmagic/data-raw/generate_test_data.R +++ b/Rmagic/data-raw/generate_test_data.R @@ -3,13 +3,15 @@ magic_testdata <- read_csv("../../data/HMLE_TGFb_day_8_10.csv.gz") set.seed(42) keep_cols <- colSums(magic_testdata > 0) > 10 keep_rows <- rowSums(magic_testdata) > 2000 -magic_testdata <- magic_testdata[keep_rows,keep_cols] +magic_testdata <- magic_testdata[keep_rows, keep_cols] magic_testdata <- Rmagic::library.size.normalize(magic_testdata) magic_testdata <- sqrt(magic_testdata) -select_cols <- c(colnames(magic_testdata)[ceiling(runif(200) * nrow(magic_testdata))], - c("VIM", "CDH1", "ZEB1")) -magic_testdata <- magic_testdata[,colnames(magic_testdata) %in% select_cols] +select_cols <- c( + colnames(magic_testdata)[ceiling(runif(200) * nrow(magic_testdata))], + c("VIM", "CDH1", "ZEB1") +) +magic_testdata <- magic_testdata[, colnames(magic_testdata) %in% select_cols] select_rows <- ceiling(runif(500) * nrow(magic_testdata)) -magic_testdata <- magic_testdata[select_rows,] +magic_testdata <- magic_testdata[select_rows, ] write_csv(magic_testdata, "../../data/test_data.csv") usethis::use_data(magic_testdata) diff --git a/Rmagic/inst/examples/bonemarrow_tutorial.Rmd b/Rmagic/inst/examples/bonemarrow_tutorial.Rmd index c704273..779b928 100644 --- a/Rmagic/inst/examples/bonemarrow_tutorial.Rmd +++ b/Rmagic/inst/examples/bonemarrow_tutorial.Rmd @@ -60,8 +60,8 @@ In this tutorial, we will analyse myeloid and erythroid cells in mouse bone marr ```{r load_data} # load data bmmsc <- read_csv("https://github.com/KrishnaswamyLab/PHATE/raw/master/data/BMMC_myeloid.csv.gz") -bmmsc <- bmmsc[,2:ncol(bmmsc)] -bmmsc[1:5,1:10] +bmmsc <- bmmsc[, 2:ncol(bmmsc)] +bmmsc[1:5, 1:10] ``` ### Filtering data @@ -71,17 +71,17 @@ First, we need to remove lowly expressed genes and cells with small library size ```{r} # keep genes expressed in at least 10 cells keep_cols <- colSums(bmmsc > 0) > 10 -bmmsc <- bmmsc[,keep_cols] +bmmsc <- bmmsc[, keep_cols] # look at the distribution of library sizes ggplot() + - geom_histogram(aes(x=rowSums(bmmsc)), bins=50) + - geom_vline(xintercept = 1000, color='red') + geom_histogram(aes(x = rowSums(bmmsc)), bins = 50) + + geom_vline(xintercept = 1000, color = "red") ``` ```{r} # keep cells with at least 1000 UMIs keep_rows <- rowSums(bmmsc) > 1000 -bmmsc <- bmmsc[keep_rows,] +bmmsc <- bmmsc[keep_rows, ] ``` ### Normalizing data @@ -99,24 +99,24 @@ Running MAGIC is as simple as running the `magic` function. ```{r run_magic} # run MAGIC -bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1")) +bmmsc_MAGIC <- magic(bmmsc, genes = c("Mpo", "Klf1", "Ifitm1")) ``` We can plot the data before and after MAGIC to visualize the results. ```{r plot_raw} ggplot(bmmsc) + - geom_point(aes(Mpo, Klf1, color=Ifitm1)) + - scale_color_viridis(option="B") -ggsave('BMMSC_data_R_before_magic.png', width=5, height=5) + geom_point(aes(Mpo, Klf1, color = Ifitm1)) + + scale_color_viridis(option = "B") +ggsave("BMMSC_data_R_before_magic.png", width = 5, height = 5) ``` The data suffers from dropout to the point that we cannot infer anything about the gene-gene relationships. ```{r plot_magic} ggplot(bmmsc_MAGIC) + - geom_point(aes(Mpo, Klf1, color=Ifitm1)) + - scale_color_viridis(option="B") + geom_point(aes(Mpo, Klf1, color = Ifitm1)) + + scale_color_viridis(option = "B") ``` As you can see, the gene-gene relationships are much clearer after MAGIC. These relationships also match the biological progression we expect to see - Ifitm1 is a stem cell marker, Klf1 is an erythroid marker, and Mpo is a myeloid marker. @@ -126,12 +126,14 @@ As you can see, the gene-gene relationships are much clearer after MAGIC. These The data is a little too smooth - we can increase `t` from the default value of 3 to increase the amount of diffusion. We pass the original result to the argument `init` to avoid recomputing intermediate steps. ```{r decrease_t} -bmmsc_MAGIC <- magic(bmmsc, genes=c("Mpo", "Klf1", "Ifitm1"), - t=4, init=bmmsc_MAGIC) +bmmsc_MAGIC <- magic(bmmsc, + genes = c("Mpo", "Klf1", "Ifitm1"), + t = 4, init = bmmsc_MAGIC +) ggplot(bmmsc_MAGIC) + - geom_point(aes(Mpo, Klf1, color=Ifitm1)) + - scale_color_viridis(option="B") -ggsave('BMMSC_data_R_after_magic.png', width=5, height=5) + geom_point(aes(Mpo, Klf1, color = Ifitm1)) + + scale_color_viridis(option = "B") +ggsave("BMMSC_data_R_after_magic.png", width = 5, height = 5) ``` ### Visualizing MAGIC values on PCA @@ -139,13 +141,15 @@ ggsave('BMMSC_data_R_after_magic.png', width=5, height=5) We can visualize the results of MAGIC on PCA with `genes="pca_only"`. ```{r run_pca} -bmmsc_MAGIC_PCA <- magic(bmmsc, genes="pca_only", - t=4, init=bmmsc_MAGIC) +bmmsc_MAGIC_PCA <- magic(bmmsc, + genes = "pca_only", + t = 4, init = bmmsc_MAGIC +) # ggplot(bmmsc_MAGIC_PCA) + - geom_point(aes(x=PC1, y=PC2, color=bmmsc_MAGIC$result$Klf1)) + - scale_color_viridis(option="B") + - labs(color="Klf1") -ggsave('BMMSC_data_R_pca_colored_by_magic.png', width=5, height=5) +geom_point(aes(x = PC1, y = PC2, color = bmmsc_MAGIC$result$Klf1)) + + scale_color_viridis(option = "B") + + labs(color = "Klf1") +ggsave("BMMSC_data_R_pca_colored_by_magic.png", width = 5, height = 5) ``` @@ -156,10 +160,10 @@ We can visualize the results of MAGIC on PHATE as follows. ```{r run_phate} bmmsc_PHATE <- phate(bmmsc) ggplot(bmmsc_PHATE) + - geom_point(aes(x=PHATE1, y=PHATE2, color=bmmsc_MAGIC$result$Klf1)) + - scale_color_viridis(option="B") + - labs(color="Klf1") -ggsave('BMMSC_data_R_phate_colored_by_magic.png', width=5, height=5) + geom_point(aes(x = PHATE1, y = PHATE2, color = bmmsc_MAGIC$result$Klf1)) + + scale_color_viridis(option = "B") + + labs(color = "Klf1") +ggsave("BMMSC_data_R_phate_colored_by_magic.png", width = 5, height = 5) ``` ### Using MAGIC for downstream analysis @@ -167,8 +171,10 @@ ggsave('BMMSC_data_R_phate_colored_by_magic.png', width=5, height=5) We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. ```{r run_magic_full_matrix} -bmmsc_MAGIC <- magic(bmmsc, genes="all_genes", - t=4, init=bmmsc_MAGIC) +bmmsc_MAGIC <- magic(bmmsc, + genes = "all_genes", + t = 4, init = bmmsc_MAGIC +) as.data.frame(bmmsc_MAGIC)[1:5, 1:10] ``` diff --git a/Rmagic/inst/examples/emt_tutorial.Rmd b/Rmagic/inst/examples/emt_tutorial.Rmd index 5aea713..6ed284c 100644 --- a/Rmagic/inst/examples/emt_tutorial.Rmd +++ b/Rmagic/inst/examples/emt_tutorial.Rmd @@ -60,7 +60,7 @@ In this tutorial, we will analyze single-cell RNA sequencing of the epithelial t ```{r load_data} # load data data <- read_csv("../../../data/HMLE_TGFb_day_8_10.csv.gz") -data[1:5,1:10] +data[1:5, 1:10] ``` ### Filtering data @@ -70,7 +70,7 @@ First, we need to remove lowly expressed genes. ```{r remove_rare_genes} # keep genes expressed in at least 10 cells keep_cols <- colSums(data > 0) > 10 -data <- data[,keep_cols] +data <- data[, keep_cols] ``` Ordinarily, we would remove cells with small library sizes. In this dataset, it has already been done; however, if you wanted to do that, you could do it with the code below. @@ -78,15 +78,15 @@ Ordinarily, we would remove cells with small library sizes. In this dataset, it ```{r libsize_histogram} # look at the distribution of library sizes ggplot() + - geom_histogram(aes(x=rowSums(data)), bins=50) + - geom_vline(xintercept = 1000, color='red') + geom_histogram(aes(x = rowSums(data)), bins = 50) + + geom_vline(xintercept = 1000, color = "red") ``` ```{r filter_libsize} if (FALSE) { # keep cells with at least 1000 UMIs and at most 15000 keep_rows <- rowSums(data) > 1000 & rowSums(data) < 15000 - data <- data[keep_rows,] + data <- data[keep_rows, ] } ``` @@ -107,23 +107,23 @@ Running MAGIC is as simple as running the `magic` function. Because this dataset ```{r run_magic} # run MAGIC -data_MAGIC <- magic(data, knn=3, genes=c("VIM", "CDH1", "ZEB1")) +data_MAGIC <- magic(data, knn = 3, genes = c("VIM", "CDH1", "ZEB1")) ``` We can plot the data before and after MAGIC to visualize the results. ```{r plot_raw} ggplot(data) + - geom_point(aes(VIM, CDH1, color=ZEB1)) + - scale_color_viridis(option="B") -ggsave('EMT_data_R_before_magic.png', width=5, height=5) + geom_point(aes(VIM, CDH1, color = ZEB1)) + + scale_color_viridis(option = "B") +ggsave("EMT_data_R_before_magic.png", width = 5, height = 5) ``` ```{r plot_magic} ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, color=ZEB1)) + - scale_color_viridis(option="B") -ggsave('EMT_data_R_after_magic.png', width=5, height=5) + geom_point(aes(VIM, CDH1, color = ZEB1)) + + scale_color_viridis(option = "B") +ggsave("EMT_data_R_after_magic.png", width = 5, height = 5) ``` As you can see, the gene-gene relationships are much clearer after MAGIC. @@ -133,13 +133,15 @@ As you can see, the gene-gene relationships are much clearer after MAGIC. We can visualize the results of MAGIC on PCA with `genes="pca_only"`. ```{r run_pca} -data_MAGIC_PCA <- magic(data, genes="pca_only", - knn=15, init=data_MAGIC) +data_MAGIC_PCA <- magic(data, + genes = "pca_only", + knn = 15, init = data_MAGIC +) ggplot(data_MAGIC_PCA) + - geom_point(aes(x=PC1, y=PC2, color=data_MAGIC$result$VIM)) + - scale_color_viridis(option="B") + - labs(color="VIM") -ggsave('EMT_data_R_pca_colored_by_magic.png', width=5, height=5) + geom_point(aes(x = PC1, y = PC2, color = data_MAGIC$result$VIM)) + + scale_color_viridis(option = "B") + + labs(color = "VIM") +ggsave("EMT_data_R_pca_colored_by_magic.png", width = 5, height = 5) ``` ### Using MAGIC for downstream analysis @@ -147,8 +149,10 @@ ggsave('EMT_data_R_pca_colored_by_magic.png', width=5, height=5) We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. ```{r run_magic_full_matrix} -data_MAGIC <- magic(data, genes="all_genes", - knn=15, init=data_MAGIC) +data_MAGIC <- magic(data, + genes = "all_genes", + knn = 15, init = data_MAGIC +) as.data.frame(data_MAGIC)[1:5, 1:10] ``` diff --git a/Rmagic/tests/test_magic.R b/Rmagic/tests/test_magic.R index d56aa94..2cb5f17 100644 --- a/Rmagic/tests/test_magic.R +++ b/Rmagic/tests/test_magic.R @@ -8,12 +8,12 @@ library(viridis) seurat_obj <- function() { # load data - data <- read.csv('../../data/HMLE_TGFb_day_8_10.csv.gz') + data <- read.csv("../../data/HMLE_TGFb_day_8_10.csv.gz") seurat_raw_data <- t(data) rownames(seurat_raw_data) <- colnames(data) colnames(seurat_raw_data) <- rownames(data) - seurat_obj <- Seurat::CreateSeuratObject(raw.data=seurat_raw_data) + seurat_obj <- Seurat::CreateSeuratObject(raw.data = seurat_raw_data) # run MAGIC data_MAGIC <- magic(data) @@ -22,12 +22,12 @@ seurat_obj <- function() { # plot p <- ggplot(data) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") - ggsave('EMT_data_R_before_magic.png', plot=p, width=5, height=5) + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") + ggsave("EMT_data_R_before_magic.png", plot = p, width = 5, height = 5) p_m <- ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") - ggsave('EMT_data_R_after_magic.png', plot=p_m, width=5, height=5) + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") + ggsave("EMT_data_R_after_magic.png", plot = p_m, width = 5, height = 5) } From 91eade0e63194d59c59f157303658300e86fc070 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 11:15:25 -0500 Subject: [PATCH 13/33] install libcurl --- .github/workflows/run_tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index b312ae2..32eb29d 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -113,6 +113,12 @@ jobs: with: python-version: "3.8" + - name: Install system dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update -qq + sudo apt-get install -y libcurl4-openssl-dev + - name: Cache Python packages uses: actions/cache@v2 with: From dc74785e3a64b5b34a3eca95adf8316aba99b5a6 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 11:29:13 -0500 Subject: [PATCH 14/33] flake8 --- python/magic/magic.py | 30 +++++++++--------------------- python/magic/plot.py | 2 -- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/python/magic/magic.py b/python/magic/magic.py index 6eea3cc..29f9d18 100644 --- a/python/magic/magic.py +++ b/python/magic/magic.py @@ -22,12 +22,6 @@ import tasklogger import warnings -try: - import anndata -except ImportError: - # anndata not installed - pass - _logger = tasklogger.get_tasklogger("graphtools") @@ -202,7 +196,7 @@ def _check_params(self): """ utils.check_positive(knn=self.knn) utils.check_int(knn=self.knn, n_jobs=self.n_jobs) - # TODO: epsilon + # TODO(scottgigante): epsilon utils.check_if_not( None, utils.check_positive, @@ -455,11 +449,9 @@ def fit(self, X, graph=None): return self def _parse_genes(self, X, genes): - if ( - genes is None - and (sparse.issparse(X) or scprep.utils.is_sparse_dataframe(X)) - and np.prod(X.shape) > 5000 * 20000 - ): + X_sparse = sparse.issparse(X) or scprep.utils.is_sparse_dataframe(X) + X_large = np.prod(X.shape) > 5000 * 20000 + if genes is None and X_sparse and X_large: warnings.warn( "Returning imputed values for all genes on a ({} x " "{}) matrix will require approximately {:.2f}GB of " @@ -560,15 +552,12 @@ def transform(self, X=None, genes=None, t_max=20, plot_optimal_t=False, ax=None) store_result = True genes = self._parse_genes(X, genes) + genes_is_short = genes and len(genes) < self.graph.data_nu.shape[1] if isinstance(genes, str) and genes == "pca_only": # have to use PCA to return it solver = "approximate" - elif ( - genes is not None - and self.X_magic is None - and len(genes) < self.graph.data_nu.shape[1] - ): + elif self.X_magic is None and genes_is_short: # faster to skip PCA solver = "exact" store_result = False @@ -594,8 +583,8 @@ def transform(self, X=None, genes=None, t_max=20, plot_optimal_t=False, ax=None) _logger.warning( "Running MAGIC with `solver='exact'` on " "{}-dimensional data may take a long time. " - "Consider denoising specific genes with `genes=` or using " - "`solver='approximate'`.".format(X_input.shape[1]) + "Consider denoising specific genes with `genes=` " + "or using `solver='approximate'`.".format(X_input.shape[1]) ) X_magic = self._impute(X_input, t_max=t_max, plot=plot_optimal_t, ax=ax) if store_result: @@ -618,8 +607,7 @@ def transform(self, X=None, genes=None, t_max=20, plot_optimal_t=False, ax=None) return X_magic def fit_transform(self, X, graph=None, **kwargs): - """Computes the diffusion operator and the position of the cells in the - embedding space + """Computes the diffusion operator and the denoised gene expression Parameters ---------- diff --git a/python/magic/plot.py b/python/magic/plot.py index f4bb930..88403f8 100644 --- a/python/magic/plot.py +++ b/python/magic/plot.py @@ -1,11 +1,9 @@ -# author: Scott Gigante # (C) 2017 Krishnaswamy Lab GPLv2 from .magic import MAGIC from .utils import in_ipynb from matplotlib import animation from matplotlib import rc -from scipy import sparse import matplotlib.pyplot as plt import numbers From 33fff9739f00b437b1327a5582ae100575402600 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 11:30:59 -0500 Subject: [PATCH 15/33] install dev deps --- .github/workflows/run_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 32eb29d..610441b 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -151,6 +151,7 @@ jobs: - name: Install R packages run: | if (!require("devtools")) install.packages("devtools", repos="http://cloud.r-project.org") + devtools::install_dev_deps("./Rmagic", upgrade=TRUE) devtools::install("./Rmagic") shell: Rscript {0} From 1130d1e20a1d3be3beafc622bc27a6bd4d76bea2 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 11:41:50 -0500 Subject: [PATCH 16/33] flake8 --- python/magic/utils.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/python/magic/utils.py b/python/magic/utils.py index ff595e0..e045c66 100644 --- a/python/magic/utils.py +++ b/python/magic/utils.py @@ -13,7 +13,7 @@ def check_positive(**params): - """Check that parameters are positive as expected + """Check that parameters are positive as expected. Raises ------ @@ -25,7 +25,7 @@ def check_positive(**params): def check_int(**params): - """Check that parameters are integers as expected + """Check that parameters are integers as expected. Raises ------ @@ -37,7 +37,7 @@ def check_int(**params): def check_if_not(x, *checks, **params): - """Run checks only if parameters are not equal to a specified value + """Run checks only if parameters are not equal to a specified value. Parameters ---------- @@ -61,7 +61,7 @@ def check_if_not(x, *checks, **params): def check_in(choices, **params): - """Checks parameters are in a list of allowed parameters + """Checks parameters are in a list of allowed parameters. Parameters ---------- @@ -85,7 +85,7 @@ def check_in(choices, **params): def check_between(v_min, v_max, **params): - """Checks parameters are in a specified range + """Checks parameters are in a specified range. Parameters ---------- @@ -110,9 +110,7 @@ def check_between(v_min, v_max, **params): def matrix_is_equivalent(X, Y): - """ - Checks matrix equivalence with numpy, scipy and pandas - """ + """Check matrix equivalence with numpy, scipy and pandas.""" if X is Y: return True elif X.shape == Y.shape: @@ -132,6 +130,7 @@ def matrix_is_equivalent(X, Y): def convert_to_same_format(data, target_data, columns=None, prevent_sparse=False): + """Convert data to same format as target data.""" # create new data object if scprep.utils.is_sparse_dataframe(target_data): if prevent_sparse: @@ -174,7 +173,7 @@ def convert_to_same_format(data, target_data, columns=None, prevent_sparse=False def in_ipynb(): - """Check if we are running in a Jupyter Notebook + """Check if we are running in a Jupyter Notebook. Credit to https://stackoverflow.com/a/24937408/3996580 """ @@ -189,6 +188,7 @@ def in_ipynb(): def is_anndata(data): + """Check if an object is an AnnData object.""" try: return isinstance(data, anndata.AnnData) except NameError: @@ -197,6 +197,7 @@ def is_anndata(data): def has_empty_columns(data): + """Check if an object has empty columns.""" try: return np.any(np.array(data.sum(0)) == 0) except AttributeError: From 9f2d13a7780b9ab4c9bbe432f65e2ecde09d802a Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 11:45:33 -0500 Subject: [PATCH 17/33] lint R --- Rmagic/R/magic.R | 22 +++++++++++++++++----- Rmagic/R/utils.R | 32 ++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Rmagic/R/magic.R b/Rmagic/R/magic.R index 150c333..f310fe0 100644 --- a/Rmagic/R/magic.R +++ b/Rmagic/R/magic.R @@ -124,7 +124,8 @@ magic.default <- function( k = NULL, alpha = NULL, ...) { # check installation - if (!reticulate::py_module_available(module = "magic") || (is.null(pymagic))) load_pymagic() + if (!reticulate::py_module_available(module = "magic") || + (is.null(pymagic))) load_pymagic() # check for deprecated arguments if (!is.null(k)) { message("Argument k is deprecated. Using knn instead.") @@ -160,7 +161,11 @@ magic.default <- function( } else { # character vector if (!all(genes %in% colnames(x = data))) { - warning(paste0("Genes ", genes[!(genes %in% colnames(data))], " not found.", collapse = ", ")) + warning(paste0( + "Genes ", + genes[!(genes %in% colnames(data))], + " not found.", + collapse = ", ")) } genes <- which(x = colnames(x = data) %in% genes) gene_names <- colnames(x = data)[genes] @@ -338,10 +343,17 @@ magic.Seurat <- function( ... ) assay_name <- paste0("MAGIC_", assay) - data[[assay_name]] <- Seurat::CreateAssayObject(data = t(x = as.matrix(x = results$result))) + data[[assay_name]] <- Seurat::CreateAssayObject( + data = t(x = as.matrix(x = results$result)) + ) print(paste0( - "Added MAGIC output to ", assay_name, ". To use it, pass assay='", assay_name, - "' to downstream methods or set DefaultAssay(seurat_object) <- '", assay_name, "'." + "Added MAGIC output to ", + assay_name, + ". To use it, pass assay='", + assay_name, + "' to downstream methods or set DefaultAssay(seurat_object) <- '", + assay_name, + "'." )) Seurat::Tool(object = data) <- results[c("operator", "params")] return(data) diff --git a/Rmagic/R/utils.R b/Rmagic/R/utils.R index b985a45..80f14f9 100644 --- a/Rmagic/R/utils.R +++ b/Rmagic/R/utils.R @@ -20,16 +20,30 @@ check_pymagic_version <- function() { minor_version <- as.integer(rversion[2]) if (as.integer(pyversion[1]) < major_version) { warning(paste0( - "Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", - major_version, ".", minor_version, "). Please update with pip ", - "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + "Python MAGIC version ", + pymagic$`__version__`, + " is out of date (recommended: ", + major_version, + ".", + minor_version, + "). Please update with pip ", + "(e.g. ", + reticulate::py_config()$python, + " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." )) return(FALSE) } else if (as.integer(pyversion[2]) < minor_version) { warning(paste0( - "Python MAGIC version ", pymagic$`__version__`, " is out of date (recommended: ", - major_version, ".", minor_version, "). Consider updating with pip ", - "(e.g. ", reticulate::py_config()$python, " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + "Python MAGIC version ", + pymagic$`__version__`, + " is out of date (recommended: ", + major_version, + ".", + minor_version, + "). Consider updating with pip ", + "(e.g. ", + reticulate::py_config()$python, + " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." )) return(FALSE) } @@ -77,8 +91,7 @@ load_pymagic <- function() { #' #' @export pymagic_is_available <- function() { - tryCatch( - { + tryCatch( { reticulate::import("magic")$MAGIC check_pymagic_version() }, @@ -111,8 +124,7 @@ pymagic_is_available <- function() { install.magic <- function(envname = "r-reticulate", method = "auto", conda = "auto", pip = TRUE, ...) { message("Attempting to install MAGIC python package with reticulate") - tryCatch( - { + tryCatch( { reticulate::py_install("magic-impute", envname = envname, method = method, conda = conda, pip = pip, ... From 7684bec4a92141245847610fcfc887a4d3c303c8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Mar 2021 16:53:23 +0000 Subject: [PATCH 18/33] pre-commit --- Rmagic/R/magic.R | 31 +++++++++++++++++-------------- Rmagic/R/utils.R | 46 ++++++++++++++++++++++++---------------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Rmagic/R/magic.R b/Rmagic/R/magic.R index f310fe0..2482510 100644 --- a/Rmagic/R/magic.R +++ b/Rmagic/R/magic.R @@ -124,8 +124,10 @@ magic.default <- function( k = NULL, alpha = NULL, ...) { # check installation - if (!reticulate::py_module_available(module = "magic") || - (is.null(pymagic))) load_pymagic() + if (!reticulate::py_module_available(module = "magic") || + (is.null(pymagic))) { + load_pymagic() + } # check for deprecated arguments if (!is.null(k)) { message("Argument k is deprecated. Using knn instead.") @@ -162,10 +164,11 @@ magic.default <- function( # character vector if (!all(genes %in% colnames(x = data))) { warning(paste0( - "Genes ", - genes[!(genes %in% colnames(data))], - " not found.", - collapse = ", ")) + "Genes ", + genes[!(genes %in% colnames(data))], + " not found.", + collapse = ", " + )) } genes <- which(x = colnames(x = data) %in% genes) gene_names <- colnames(x = data)[genes] @@ -344,16 +347,16 @@ magic.Seurat <- function( ) assay_name <- paste0("MAGIC_", assay) data[[assay_name]] <- Seurat::CreateAssayObject( - data = t(x = as.matrix(x = results$result)) + data = t(x = as.matrix(x = results$result)) ) print(paste0( - "Added MAGIC output to ", - assay_name, - ". To use it, pass assay='", - assay_name, - "' to downstream methods or set DefaultAssay(seurat_object) <- '", - assay_name, - "'." + "Added MAGIC output to ", + assay_name, + ". To use it, pass assay='", + assay_name, + "' to downstream methods or set DefaultAssay(seurat_object) <- '", + assay_name, + "'." )) Seurat::Tool(object = data) <- results[c("operator", "params")] return(data) diff --git a/Rmagic/R/utils.R b/Rmagic/R/utils.R index 80f14f9..8913668 100644 --- a/Rmagic/R/utils.R +++ b/Rmagic/R/utils.R @@ -20,30 +20,30 @@ check_pymagic_version <- function() { minor_version <- as.integer(rversion[2]) if (as.integer(pyversion[1]) < major_version) { warning(paste0( - "Python MAGIC version ", - pymagic$`__version__`, - " is out of date (recommended: ", - major_version, - ".", - minor_version, - "). Please update with pip ", - "(e.g. ", - reticulate::py_config()$python, - " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + "Python MAGIC version ", + pymagic$`__version__`, + " is out of date (recommended: ", + major_version, + ".", + minor_version, + "). Please update with pip ", + "(e.g. ", + reticulate::py_config()$python, + " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." )) return(FALSE) } else if (as.integer(pyversion[2]) < minor_version) { warning(paste0( - "Python MAGIC version ", - pymagic$`__version__`, - " is out of date (recommended: ", - major_version, - ".", - minor_version, - "). Consider updating with pip ", - "(e.g. ", - reticulate::py_config()$python, - " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." + "Python MAGIC version ", + pymagic$`__version__`, + " is out of date (recommended: ", + major_version, + ".", + minor_version, + "). Consider updating with pip ", + "(e.g. ", + reticulate::py_config()$python, + " -m pip install --upgrade magic-impute) or Rmagic::install.magic()." )) return(FALSE) } @@ -91,7 +91,8 @@ load_pymagic <- function() { #' #' @export pymagic_is_available <- function() { - tryCatch( { + tryCatch( + { reticulate::import("magic")$MAGIC check_pymagic_version() }, @@ -124,7 +125,8 @@ pymagic_is_available <- function() { install.magic <- function(envname = "r-reticulate", method = "auto", conda = "auto", pip = TRUE, ...) { message("Attempting to install MAGIC python package with reticulate") - tryCatch( { + tryCatch( + { reticulate::py_install("magic-impute", envname = envname, method = method, conda = conda, pip = pip, ... From 62602ba803c21ffe5e6e4cbb078b75cbd4fb7b70 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 15:13:18 -0500 Subject: [PATCH 19/33] update r hooks --- .pre-commit-config.yaml | 16 ++++++++++++---- python/magic/magic.py | 5 ++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2a2e3c5..2ea254b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,15 @@ repos: - repo: https://github.com/lorenzwalthert/precommit rev: v0.1.3 hooks: - - id: parsable-R - - id: style-files - - id: lintr - verbose: true + - id: parsable-R + - id: style-files + - id: roxygenize + - id: no-browser-statement + - id: deps-in-desc + - id: use-tidy-description + - id: codemeta-description-updated + - id: readme-rmd-rendered + - id: lintr + args: [--warn_only] + verbose: true + diff --git a/python/magic/magic.py b/python/magic/magic.py index 29f9d18..3272acc 100644 --- a/python/magic/magic.py +++ b/python/magic/magic.py @@ -552,7 +552,10 @@ def transform(self, X=None, genes=None, t_max=20, plot_optimal_t=False, ax=None) store_result = True genes = self._parse_genes(X, genes) - genes_is_short = genes and len(genes) < self.graph.data_nu.shape[1] + if genes is None: + genes_is_short = False + else: + genes_is_short = len(genes) < self.graph.data_nu.shape[1] if isinstance(genes, str) and genes == "pca_only": # have to use PCA to return it From 8f02d5ec0c03f78980db796035a5f0624b9c276e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Mar 2021 20:30:13 +0000 Subject: [PATCH 20/33] pre-commit --- .pre-commit-config.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2ea254b..3baaa44 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,4 +38,3 @@ repos: - id: lintr args: [--warn_only] verbose: true - From 6ab1c674b3c1a895e8a443005fe6308c36a5a0b2 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 15:34:48 -0500 Subject: [PATCH 21/33] make r hooks pass --- .pre-commit-config.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2ea254b..7647644 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,14 +28,10 @@ repos: rev: v0.1.3 hooks: - id: parsable-R - - id: style-files - - id: roxygenize - id: no-browser-statement - - id: deps-in-desc - - id: use-tidy-description - - id: codemeta-description-updated - id: readme-rmd-rendered + args: [Rmagic/DESCRIPTION] + - id: style-files - id: lintr args: [--warn_only] verbose: true - From 63aaccd9188843a8c284ad0464232a83dc324489 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 16:39:31 -0500 Subject: [PATCH 22/33] install tinytex --- .github/workflows/run_tests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 610441b..0585ef0 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -155,6 +155,9 @@ jobs: devtools::install("./Rmagic") shell: Rscript {0} + - name: Install tinytex + uses: r-lib/actions/setup-tinytex@v1 + - name: Run R tests run: | cd Rmagic From ee41aef5363ca7e5ce64090ba23047ea060dece6 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 16:59:22 -0500 Subject: [PATCH 23/33] run pre-commit separately for Rmagic --- .github/workflows/pre-commit.yml | 9 + .pre-commit-config.yaml | 11 - Rmagic/.pre-commit-config.yaml | 22 ++ .../.pre-commit.r_requirements.txt | 2 + Rmagic/DESCRIPTION | 43 ++- Rmagic/README.md | 266 ++++++++---------- Rmagic/man/figures/README-plot_magic-1.png | Bin 14879 -> 47822 bytes Rmagic/man/figures/README-plot_raw-1.png | Bin 6915 -> 25359 bytes .../man/figures/README-plot_reduced_t-1.png | Bin 18402 -> 39139 bytes Rmagic/man/figures/README-run_pca-1.png | Bin 20441 -> 49332 bytes Rmagic/man/figures/README-run_phate-1.png | Bin 21066 -> 49736 bytes Rmagic/man/ggplot.Rd | 10 +- Rmagic/man/magic.Rd | 73 +++-- Rmagic/man/magic_testdata.Rd | 4 +- Rmagic/man/print.Rd | 16 +- Rmagic/man/summary.Rd | 22 +- 16 files changed, 243 insertions(+), 235 deletions(-) create mode 100644 Rmagic/.pre-commit-config.yaml rename .pre-commit.r_requirements.txt => Rmagic/.pre-commit.r_requirements.txt (57%) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 2df815f..461a8d2 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -63,6 +63,15 @@ jobs: - name: Run pre-commit uses: pre-commit/action@v2.0.0 + - name: Run pre-commit + run: | + cd Rmagic + git init + git add * + pre-commit run --all-files + rm -rf .git + cd .. + - name: Commit files if: failure() run: | diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7647644..d155f0b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,14 +24,3 @@ repos: hooks: - id: flake8 additional_dependencies: ['hacking'] - - repo: https://github.com/lorenzwalthert/precommit - rev: v0.1.3 - hooks: - - id: parsable-R - - id: no-browser-statement - - id: readme-rmd-rendered - args: [Rmagic/DESCRIPTION] - - id: style-files - - id: lintr - args: [--warn_only] - verbose: true diff --git a/Rmagic/.pre-commit-config.yaml b/Rmagic/.pre-commit-config.yaml new file mode 100644 index 0000000..3aa9116 --- /dev/null +++ b/Rmagic/.pre-commit-config.yaml @@ -0,0 +1,22 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + exclude: \.(ai|gz)$ + - repo: https://github.com/lorenzwalthert/precommit + rev: v0.1.3 + hooks: + - id: parsable-R + - id: no-browser-statement + - id: readme-rmd-rendered + - id: deps-in-desc + exclude: data\-raw + - id: use-tidy-description + - id: style-files + - id: lintr + args: [--warn_only] + verbose: true + - id: roxygenize diff --git a/.pre-commit.r_requirements.txt b/Rmagic/.pre-commit.r_requirements.txt similarity index 57% rename from .pre-commit.r_requirements.txt rename to Rmagic/.pre-commit.r_requirements.txt index b6e70b8..7992131 100644 --- a/.pre-commit.r_requirements.txt +++ b/Rmagic/.pre-commit.r_requirements.txt @@ -2,3 +2,5 @@ docopt styler git2r lintr +roxygen2 +precommit diff --git a/Rmagic/DESCRIPTION b/Rmagic/DESCRIPTION index 9c0a19d..24a46c3 100644 --- a/Rmagic/DESCRIPTION +++ b/Rmagic/DESCRIPTION @@ -1,26 +1,39 @@ -Package: Rmagic Type: Package +Package: Rmagic Title: MAGIC - Markov Affinity-Based Graph Imputation of Cells Version: 2.0.3.999 -Authors@R: c(person(given = "David", family = "van Dijk", email = "davidvandijk@gmail.com", role = c("aut")), - person(given = 'Scott', family = 'Gigante', email = 'scott.gigante@yale.edu', role = 'cre', - comment = c(ORCID = '0000-0002-4544-2764'))) +Authors@R: + c(person(given = "David", + family = "van Dijk", + role = "aut", + email = "davidvandijk@gmail.com"), + person(given = "Scott", + family = "Gigante", + role = "cre", + email = "scott.gigante@yale.edu", + comment = c(ORCID = "0000-0002-4544-2764"))) Maintainer: Scott Gigante -Description: MAGIC (Markov affinity-based graph imputation of cells) is a method for addressing technical noise in single-cell data, including under-sampling of mRNA molecules, often termed "dropout" which can severely obscure important gene-gene relationships. MAGIC shares information across similar cells, via data diffusion, to denoise the cell count matrix and fill in missing transcripts. Read more: van Dijk et al. (2018) . +Description: MAGIC (Markov affinity-based graph imputation of + cells) is a method for addressing technical noise in single-cell data, + including under-sampling of mRNA molecules, often termed "dropout" + which can severely obscure important gene-gene relationships. MAGIC + shares information across similar cells, via data diffusion, to + denoise the cell count matrix and fill in missing transcripts. Read + more: van Dijk et al. (2018) . +License: GPL-2 | file LICENSE Depends: - R (>= 3.3), - Matrix (>= 1.2-0) + Matrix (>= 1.2-0), + R (>= 3.3) Imports: + ggplot2, methods, - stats, reticulate (>= 1.4), - ggplot2 + stats Suggests: - Seurat (>= 3.0.0), + phateR, readr, - viridis, - phateR -License: GPL-2 | file LICENSE -LazyData: true -RoxygenNote: 7.0.2 + Seurat (>= 3.0.0), + viridis Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.1.1 diff --git a/Rmagic/README.md b/Rmagic/README.md index acef6a2..1779cbe 100644 --- a/Rmagic/README.md +++ b/Rmagic/README.md @@ -1,95 +1,79 @@ -Rmagic -================ - -true +--- +title : Rmagic +output: github_document +toc: true +--- -[![Latest PyPI -version](https://img.shields.io/pypi/v/magic-impute.svg)](https://pypi.org/project/magic-impute/) -[![Latest CRAN -version](https://img.shields.io/cran/v/Rmagic.svg)](https://cran.r-project.org/package=Rmagic) -[![Travis CI -Build](https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master)](https://travis-ci.com/KrishnaswamyLab/MAGIC) -[![Read the -Docs](https://img.shields.io/readthedocs/magic.svg)](https://magic.readthedocs.io/) -[![Cell Publication -DOI](https://zenodo.org/badge/DOI/10.1016/j.cell.2018.05.061.svg)](https://www.cell.com/cell/abstract/S0092-8674\(18\)30724-4) + + +[![Latest PyPI version](https://img.shields.io/pypi/v/magic-impute.svg)](https://pypi.org/project/magic-impute/) +[![Latest CRAN version](https://img.shields.io/cran/v/Rmagic.svg)](https://cran.r-project.org/package=Rmagic) +[![Travis CI Build](https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master)](https://travis-ci.com/KrishnaswamyLab/MAGIC) +[![Read the Docs](https://img.shields.io/readthedocs/magic.svg)](https://magic.readthedocs.io/) +[![Cell Publication DOI](https://zenodo.org/badge/DOI/10.1016/j.cell.2018.05.061.svg)](https://www.cell.com/cell/abstract/S0092-8674(18)30724-4) [![Twitter](https://img.shields.io/twitter/follow/KrishnaswamyLab.svg?style=social&label=Follow)](https://twitter.com/KrishnaswamyLab) -[![Github -Stars](https://img.shields.io/github/stars/KrishnaswamyLab/MAGIC.svg?style=social&label=Stars)](https://github.com/KrishnaswamyLab/MAGIC/) +[![Github Stars](https://img.shields.io/github/stars/KrishnaswamyLab/MAGIC.svg?style=social&label=Stars)](https://github.com/KrishnaswamyLab/MAGIC/) -Markov Affinity-based Graph Imputation of Cells (MAGIC) is an algorithm -for denoising and imputation of single cells applied to single-cell RNA -sequencing data, as described in Van Dijk D *et al.* (2018), *Recovering -Gene Interactions from Single-Cell Data Using Data Diffusion*, Cell -. -

+Markov Affinity-based Graph Imputation of Cells (MAGIC) is an algorithm for denoising and imputation of single cells applied to single-cell RNA sequencing data, as described in Van Dijk D *et al.* (2018), *Recovering Gene Interactions from Single-Cell Data Using Data Diffusion*, Cell . +

-
Magic reveals the interaction between Vimentin (VIM), Cadherin-1 -(CDH1), and Zinc finger E-box-binding homeobox 1 (ZEB1, encoded by -colors). - +
+Magic reveals the interaction between Vimentin (VIM), Cadherin-1 (CDH1), and Zinc finger E-box-binding homeobox 1 (ZEB1, encoded by colors). +

- - MAGIC imputes missing data values on sparse data sets, restoring the - structure of the data - - It also proves dimensionality reduction and gene expression - visualizations - - MAGIC can be performed on a variety of datasets - - Here, we show the usage of MAGIC on a toy dataset - - You can view further examples of MAGIC on real data in our notebooks - under - `inst/examples`: - - - - +* MAGIC imputes missing data values on sparse data sets, restoring the structure of the data +* It also proves dimensionality reduction and gene expression visualizations +* MAGIC can be performed on a variety of datasets +* Here, we show the usage of MAGIC on a toy dataset +* You can view further examples of MAGIC on real data in our notebooks under `inst/examples`: + * http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/EMT_tutorial.html + * http://htmlpreview.github.io/?https://github.com/KrishnaswamyLab/MAGIC/blob/master/Rmagic/inst/examples/bonemarrow_tutorial.html ## Table of Contents - - [Installation](#installation) - - [Installation from CRAN and - PyPi](#installation-from-cran-and-pypi) - - [Installation with devtools and - reticulate](#installation-with-devtools-and-reticulate) - - [Installation from source](#installation-from-source) - - [Quick Start](#quick-start) - - [Tutorial](#tutorial) - - [Issues](#issues) - - [FAQ](#faq) - - [Help](#help) + * [Installation](#installation) + * [Installation from CRAN and PyPi](#installation-from-cran-and-pypi) + * [Installation with devtools and reticulate](#installation-with-devtools-and-reticulate) + * [Installation from source](#installation-from-source) + * [Quick Start](#quick-start) + * [Tutorial](#tutorial) + * [Issues](#issues) + * [FAQ](#faq) + * [Help](#help) ## Installation To use MAGIC, you will need to install both the R and Python packages. -If `python` or `pip` are not installed, you will need to install them. -We recommend [Miniconda3](https://conda.io/miniconda.html) to install -Python and `pip` together, or otherwise you can install `pip` from -. +If `python` or `pip` are not installed, you will need to install them. We recommend [Miniconda3](https://conda.io/miniconda.html) to install Python and `pip` together, or otherwise you can install `pip` from https://pip.pypa.io/en/stable/installing/. #### Installation from CRAN In R, run this command to install MAGIC and all dependencies: -``` r + +```r install.packages("Rmagic") ``` -In a terminal, run the following command to install the Python -repository. +In a terminal, run the following command to install the Python repository. + -``` bash +```bash pip install --user magic-impute ``` #### Installaton from source -To install the very latest version of MAGIC, you can install from GitHub -with the following commands run in a terminal. +To install the very latest version of MAGIC, you can install from GitHub with the following commands run in a terminal. + -``` bash +```bash git clone https://github.com/KrishnaswamyLab/MAGIC cd MAGIC/python python setup.py install --user @@ -99,10 +83,10 @@ R CMD INSTALL . ## Quick Start -If you have loaded a data matrix `data` in R (cells on rows, genes on -columns) you can run PHATE as follows: +If you have loaded a data matrix `data` in R (cells on rows, genes on columns) you can run PHATE as follows: -``` r + +```r library(phateR) data_phate <- phate(data) ``` @@ -111,18 +95,19 @@ data_phate <- phate(data) #### Extra packages for the tutorial -We’ll install a couple more tools for this tutorial. +We'll install a couple more tools for this tutorial. + -``` r +```r if (!require(viridis)) install.packages("viridis") if (!require(ggplot2)) install.packages("ggplot2") if (!require(phateR)) install.packages("phateR") ``` -If you have never used PHATE, you should also install PHATE from the -command line as follows: +If you have never used PHATE, you should also install PHATE from the command line as follows: + -``` bash +```bash pip install --user phate ``` @@ -130,11 +115,11 @@ pip install --user phate We load the Rmagic package and a few others for convenience functions. -``` r + +```r library(Rmagic) #> Loading required package: Matrix library(ggplot2) -#> Warning: package 'ggplot2' was built under R version 3.5.3 library(viridis) #> Loading required package: viridisLite library(phateR) @@ -149,125 +134,123 @@ library(phateR) The example data is located in the MAGIC R package. -``` r + +```r # load data data(magic_testdata) -magic_testdata[1:5,1:10] -#> A1BG-AS1 AAMDC AAMP AARSD1 ABCA12 ABCG2 ABHD13 -#> 6564 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 -#> 3835 0.0000000 0.8714711 0.0000000 0 0 0 0.8714711 -#> 6318 0.7739207 0.0000000 0.7739207 0 0 0 0.0000000 -#> 3284 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 -#> 1171 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 -#> AC007773.2 AC011998.4 AC013470.6 -#> 6564 0 0 0 -#> 3835 0 0 0 -#> 6318 0 0 0 -#> 3284 0 0 0 -#> 1171 0 0 0 +magic_testdata[1:5, 1:10] +#> A1BG-AS1 AAMDC AAMP AARSD1 ABCA12 ABCG2 ABHD13 AC007773.2 +#> 6564 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 0 +#> 3835 0.0000000 0.8714711 0.0000000 0 0 0 0.8714711 0 +#> 6318 0.7739207 0.0000000 0.7739207 0 0 0 0.0000000 0 +#> 3284 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 0 +#> 1171 0.0000000 0.0000000 0.0000000 0 0 0 0.0000000 0 +#> AC011998.4 AC013470.6 +#> 6564 0 0 +#> 3835 0 0 +#> 6318 0 0 +#> 3284 0 0 +#> 1171 0 0 ``` ### Running MAGIC Running MAGIC is as simple as running the `magic` function. -``` r + +```r # run MAGIC -data_MAGIC <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) +data_MAGIC <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) ``` We can plot the data before and after MAGIC to visualize the results. -``` r + +```r ggplot(magic_testdata) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` - +plot of chunk plot_raw + +The data suffers from dropout to the point that we cannot infer anything about the gene-gene relationships. -The data suffers from dropout to the point that we cannot infer anything -about the gene-gene relationships. -``` r +```r ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` - +plot of chunk plot_magic + +As you can see, the gene-gene relationships are much clearer after MAGIC. -As you can see, the gene-gene relationships are much clearer after -MAGIC. +The data is sometimes a little too smooth - we can decrease `t` from the automatic value to reduce the amount of diffusion. We pass the original result to the argument `init` to avoid recomputing intermediate steps. -The data is sometimes a little too smooth - we can decrease `t` from the -automatic value to reduce the amount of diffusion. We pass the original -result to the argument `init` to avoid recomputing intermediate -steps. -``` r -data_MAGIC <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1"), t=6, init=data_MAGIC) +```r +data_MAGIC <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1"), t = 6, init = data_MAGIC) ggplot(data_MAGIC) + - geom_point(aes(VIM, CDH1, colour=ZEB1)) + - scale_colour_viridis(option="B") + geom_point(aes(VIM, CDH1, colour = ZEB1)) + + scale_colour_viridis(option = "B") ``` - +plot of chunk plot_reduced_t -We can look at the entire smoothed matrix with `genes='all_genes'`, -passing the original result to the argument `init` to avoid recomputing -intermediate steps. Note that this matrix may be large and could take up -a lot of -memory. -``` r -data_MAGIC <- magic(magic_testdata, genes="all_genes", t=6, init=data_MAGIC) +We can look at the entire smoothed matrix with `genes='all_genes'`, passing the original result to the argument `init` to avoid recomputing intermediate steps. Note that this matrix may be large and could take up a lot of memory. + + +```r +data_MAGIC <- magic(magic_testdata, genes = "all_genes", t = 6, init = data_MAGIC) as.data.frame(data_MAGIC)[1:5, 1:10] #> A1BG-AS1 AAMDC AAMP AARSD1 ABCA12 ABCG2 -#> 6564 0.02565716 0.06303703 0.1726791 0.01559474 0.03114244 0.01423031 -#> 3835 0.02535551 0.06286382 0.1678011 0.01547390 0.03017628 0.01428737 -#> 6318 0.02619089 0.06298015 0.1744098 0.01514747 0.03145176 0.01477152 -#> 3284 0.02517645 0.06254417 0.1684572 0.01559623 0.03015758 0.01414733 -#> 1171 0.02651602 0.06289360 0.1729842 0.01514780 0.03162480 0.01480426 -#> ABHD13 AC007773.2 AC011998.4 AC013470.6 -#> 6564 0.07100262 0.001129400 0.001880153 0.003215547 -#> 3835 0.06989726 0.001086716 0.001847604 0.002833342 -#> 6318 0.07165035 0.001203505 0.002044504 0.003550067 -#> 3284 0.07066602 0.001039065 0.001723499 0.002822357 -#> 1171 0.07094679 0.001236082 0.002133401 0.003450875 +#> 6564 0.03332336 0.06672377 0.1718769 0.01765440 0.03641116 0.01703004 +#> 3835 0.03142519 0.06720022 0.1568662 0.01619578 0.03338187 0.01729001 +#> 6318 0.03519781 0.06551774 0.1811869 0.01462556 0.03595934 0.02094741 +#> 3284 0.03130388 0.06374405 0.1621586 0.01686944 0.03288072 0.01786413 +#> 1171 0.03515109 0.06447265 0.1735847 0.01444976 0.03791399 0.01995593 +#> ABHD13 AC007773.2 AC011998.4 AC013470.6 +#> 6564 0.07692547 0.0007960324 0.001382103 0.002978190 +#> 3835 0.07578407 0.0007146892 0.001206586 0.002613474 +#> 6318 0.08120989 0.0011273292 0.001594218 0.005743911 +#> 3284 0.07568180 0.0007009115 0.001017284 0.002982551 +#> 1171 0.07975672 0.0010427596 0.001982926 0.005315534 ``` ### Visualizing MAGIC values on PCA We can visualize the results of MAGIC on PCA as follows. -``` r + +```r data_MAGIC_PCA <- as.data.frame(prcomp(data_MAGIC)$x) ggplot(data_MAGIC_PCA) + - geom_point(aes(x=PC1, y=PC2, color=data_MAGIC$result$VIM)) + - scale_color_viridis(option="B") + - labs(color="VIM") + geom_point(aes(x = PC1, y = PC2, color = data_MAGIC$result$VIM)) + + scale_color_viridis(option = "B") + + labs(color = "VIM") ``` - +plot of chunk run_pca + ### Visualizing MAGIC values on PHATE -We can visualize the results of MAGIC on PHATE as follows. We set `t` -and `k` manually, because this toy dataset is really too small to make -sense with PHATE; however, the default values work well for single-cell -genomic data. +We can visualize the results of MAGIC on PHATE as follows. We set `t` and `k` manually, because this toy dataset is really too small to make sense with PHATE; however, the default values work well for single-cell genomic data. + -``` r -data_PHATE <- phate(magic_testdata, k=3, t=15) +```r +data_PHATE <- phate(magic_testdata, k = 3, t = 15) #> Argument k is deprecated. Using knn instead. ggplot(data_PHATE) + - geom_point(aes(x=PHATE1, y=PHATE2, color=data_MAGIC$result$VIM)) + - scale_color_viridis(option="B") + - labs(color="VIM") + geom_point(aes(x = PHATE1, y = PHATE2, color = data_MAGIC$result$VIM)) + + scale_color_viridis(option = "B") + + labs(color = "VIM") ``` - +plot of chunk run_phate ## Issues @@ -281,7 +264,7 @@ To be consistent with common functions such as PCA data. - **I have installed MAGIC in Python, but Rmagic says it is not - installed\!** + installed!** Check your `reticulate::py_discover_config("magic")` and compare it to the version of Python in which you installed PHATE (run `which python` @@ -296,8 +279,7 @@ You can read more about `Renviron` at ### Help -Please let us know of any issues at the [GitHub -repository](https://github.com/KrishnaswamyLab/MAGIC/issues). If you +Please let us know of any issues at the [GitHub repository](https://github.com/KrishnaswamyLab/MAGIC/issues). If you have any questions or require assistance using MAGIC, please read the documentation by running `help(Rmagic::magic)` or contact us at . diff --git a/Rmagic/man/figures/README-plot_magic-1.png b/Rmagic/man/figures/README-plot_magic-1.png index 6a44fa4fae86f4f264b190c888ef09f432174e3f..2dbe056302be74a0cff23f0d7930651598a25178 100644 GIT binary patch literal 47822 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

V3Zb7I%y%s$jz@lDN2Q|j=|Z%yyT?v5 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 literal 14879 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 literal 6915 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 Sp4j{|>#&Wpb;+UM!G8nPNKNAa diff --git a/Rmagic/man/figures/README-plot_reduced_t-1.png b/Rmagic/man/figures/README-plot_reduced_t-1.png index 9153f679177620baf9167a3f4a63412ae0a9f8f6..06281dc688f13c79b5049f9a093cccac5c2a4569 100644 GIT binary patch literal 39139 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

8`difz};QdHNg0?UXmA0up0#Sd0 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 Gpnn1J4MODr literal 18402 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 A9smFU diff --git a/Rmagic/man/figures/README-run_pca-1.png b/Rmagic/man/figures/README-run_pca-1.png index f7f1fb4969540512c6d530498d0da18000b92044..43693bd9af758fd1f3047ab698a218289e05fb69 100644 GIT binary patch literal 49332 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 literal 20441 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 E7r;=}o&W#< diff --git a/Rmagic/man/figures/README-run_phate-1.png b/Rmagic/man/figures/README-run_phate-1.png index 0ebf4e1a3d0b62fa7daf553005eeb4cc81f58361..cbd40fb0f5b0ec6498090288efc345d139bd973c 100644 GIT binary patch literal 49736 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

  • +zh`&f$z_ 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 literal 21066 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 ICg-#N2E)qlMF0Q* diff --git a/Rmagic/man/ggplot.Rd b/Rmagic/man/ggplot.Rd index a6a9d6d..fd0f87b 100644 --- a/Rmagic/man/ggplot.Rd +++ b/Rmagic/man/ggplot.Rd @@ -16,11 +16,9 @@ Passes the smoothed data matrix to ggplot } \examples{ if (pymagic_is_available() && require(ggplot2)) { - -data(magic_testdata) -data_magic <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) -ggplot(data_magic, aes(VIM, CDH1, colour=ZEB1)) + - geom_point() - + data(magic_testdata) + data_magic <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) + ggplot(data_magic, aes(VIM, CDH1, colour = ZEB1)) + + geom_point() } } diff --git a/Rmagic/man/magic.Rd b/Rmagic/man/magic.Rd index 5468e57..360e98b 100644 --- a/Rmagic/man/magic.Rd +++ b/Rmagic/man/magic.Rd @@ -142,50 +142,45 @@ van Dijk et al, 2018. } \examples{ if (pymagic_is_available()) { - -data(magic_testdata) - -# Run MAGIC -data_magic <- magic(magic_testdata, genes=c("VIM", "CDH1", "ZEB1")) -summary(data_magic) -## CDH1 VIM ZEB1 -## Min. :0.4303 Min. :3.854 Min. :0.01111 -## 1st Qu.:0.4444 1st Qu.:3.947 1st Qu.:0.01145 -## Median :0.4462 Median :3.964 Median :0.01153 -## Mean :0.4461 Mean :3.965 Mean :0.01152 -## 3rd Qu.:0.4478 3rd Qu.:3.982 3rd Qu.:0.01160 -## Max. :0.4585 Max. :4.127 Max. :0.01201 - -# Plot the result with ggplot2 -if (require(ggplot2)) { - ggplot(data_magic) + - geom_point(aes(x=VIM, y=CDH1, color=ZEB1)) -} - -# Run MAGIC again returning all genes -# We use the last run as initialization -data_magic <- magic(magic_testdata, genes="all_genes", init=data_magic) -# Extract the smoothed data matrix to use in downstream analysis -data_smooth <- as.matrix(data_magic) - + data(magic_testdata) + + # Run MAGIC + data_magic <- magic(magic_testdata, genes = c("VIM", "CDH1", "ZEB1")) + summary(data_magic) + ## CDH1 VIM ZEB1 + ## Min. :0.4303 Min. :3.854 Min. :0.01111 + ## 1st Qu.:0.4444 1st Qu.:3.947 1st Qu.:0.01145 + ## Median :0.4462 Median :3.964 Median :0.01153 + ## Mean :0.4461 Mean :3.965 Mean :0.01152 + ## 3rd Qu.:0.4478 3rd Qu.:3.982 3rd Qu.:0.01160 + ## Max. :0.4585 Max. :4.127 Max. :0.01201 + + # Plot the result with ggplot2 + if (require(ggplot2)) { + ggplot(data_magic) + + geom_point(aes(x = VIM, y = CDH1, color = ZEB1)) + } + + # Run MAGIC again returning all genes + # We use the last run as initialization + data_magic <- magic(magic_testdata, genes = "all_genes", init = data_magic) + # Extract the smoothed data matrix to use in downstream analysis + data_smooth <- as.matrix(data_magic) } if (pymagic_is_available() && require(Seurat)) { + data(magic_testdata) -data(magic_testdata) + # Create a Seurat object + seurat_object <- CreateSeuratObject(counts = t(magic_testdata), assay = "RNA") + seurat_object <- NormalizeData(object = seurat_object) + seurat_object <- ScaleData(object = seurat_object) -# Create a Seurat object -seurat_object <- CreateSeuratObject(counts = t(magic_testdata), assay="RNA") -seurat_object <- NormalizeData(object = seurat_object) -seurat_object <- ScaleData(object = seurat_object) - -# Run MAGIC and reset the active assay -seurat_object <- magic(seurat_object) -seurat_object@active.assay = "MAGIC_RNA" - -# Analyze with Seurat -VlnPlot(seurat_object, features=c("VIM", "ZEB1", "CDH1")) + # Run MAGIC and reset the active assay + seurat_object <- magic(seurat_object) + seurat_object@active.assay <- "MAGIC_RNA" + # Analyze with Seurat + VlnPlot(seurat_object, features = c("VIM", "ZEB1", "CDH1")) } - } diff --git a/Rmagic/man/magic_testdata.Rd b/Rmagic/man/magic_testdata.Rd index 1237bae..8e384dc 100644 --- a/Rmagic/man/magic_testdata.Rd +++ b/Rmagic/man/magic_testdata.Rd @@ -4,7 +4,9 @@ \name{magic_testdata} \alias{magic_testdata} \title{Fake scRNAseq data for examples} -\format{A matrix with 500 rows and 197 variables} +\format{ +A matrix with 500 rows and 197 variables +} \source{ The authors } diff --git a/Rmagic/man/print.Rd b/Rmagic/man/print.Rd index 5050af7..fb5d4be 100644 --- a/Rmagic/man/print.Rd +++ b/Rmagic/man/print.Rd @@ -16,14 +16,12 @@ This avoids spamming the user's console with a list of many large matrices } \examples{ if (pymagic_is_available()) { - -data(magic_testdata) -data_magic <- magic(magic_testdata) -print(data_magic) -## MAGIC with elements -## $result : (500, 197) -## $operator : Python MAGIC operator -## $params : list with elements (data, knn, decay, t, npca, knn.dist.method) - + data(magic_testdata) + data_magic <- magic(magic_testdata) + print(data_magic) + ## MAGIC with elements + ## $result : (500, 197) + ## $operator : Python MAGIC operator + ## $params : list with elements (data, knn, decay, t, npca, knn.dist.method) } } diff --git a/Rmagic/man/summary.Rd b/Rmagic/man/summary.Rd index daf446c..6f5c85e 100644 --- a/Rmagic/man/summary.Rd +++ b/Rmagic/man/summary.Rd @@ -16,17 +16,15 @@ Summarize a MAGIC object } \examples{ if (pymagic_is_available()) { - -data(magic_testdata) -data_magic <- magic(magic_testdata) -summary(data_magic) -## ZEB1 -## Min. :0.01071 -## 1st Qu.:0.01119 -## Median :0.01130 -## Mean :0.01129 -## 3rd Qu.:0.01140 -## Max. :0.01201 - + data(magic_testdata) + data_magic <- magic(magic_testdata) + summary(data_magic) + ## ZEB1 + ## Min. :0.01071 + ## 1st Qu.:0.01119 + ## Median :0.01130 + ## Mean :0.01129 + ## 3rd Qu.:0.01140 + ## Max. :0.01201 } } From 14d2233746629f99d7e85feff1d2fca84d33a0c4 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 17:01:11 -0500 Subject: [PATCH 24/33] install R packages properly --- .github/workflows/pre-commit.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 461a8d2..cf72d42 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -35,6 +35,15 @@ jobs: python-version: "3.8" architecture: "x64" + - name: Cache pre-commit + uses: actions/cache@v2 + with: + path: ~/.cache/pre-commit + key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}- + + - name: Run pre-commit + uses: pre-commit/action@v2.0.0 + - name: Cache R packages uses: actions/cache@v2 if: startsWith(runner.os, 'Linux') @@ -47,23 +56,14 @@ jobs: - name: Install R packages run: | if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") - con = file(".pre-commit.r_requirements.txt", "r") + con = file("Rmagic/.pre-commit.r_requirements.txt", "r") while ( length(pkg <- readLines(con, n = 1)) > 0 ) { renv::install(pkg) } close(con) shell: Rscript {0} - - name: Cache pre-commit - uses: actions/cache@v2 - with: - path: ~/.cache/pre-commit - key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}- - - - name: Run pre-commit - uses: pre-commit/action@v2.0.0 - - - name: Run pre-commit + - name: Run pre-commit for R run: | cd Rmagic git init From e03641b0a84724e53dc8a5e97b0071aaec7b399b Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 17:03:07 -0500 Subject: [PATCH 25/33] fix cache --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index cf72d42..7aa6e8f 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -49,7 +49,7 @@ jobs: if: startsWith(runner.os, 'Linux') with: path: ${{env.R_LIBS_USER}} - key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('.pre-commit.r_requirements.txt') }}- + key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('Rmagic/.pre-commit.r_requirements.txt') }}- restore-keys: | precommit-${{env.UBUNTU_VERSION}}-renv- From da511506df044a153fb5341d63ef1b020903d89f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Mar 2021 22:06:13 +0000 Subject: [PATCH 26/33] pre-commit --- Rmagic/DESCRIPTION | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Rmagic/DESCRIPTION b/Rmagic/DESCRIPTION index 24a46c3..bca3bb9 100644 --- a/Rmagic/DESCRIPTION +++ b/Rmagic/DESCRIPTION @@ -13,13 +13,13 @@ Authors@R: email = "scott.gigante@yale.edu", comment = c(ORCID = "0000-0002-4544-2764"))) Maintainer: Scott Gigante -Description: MAGIC (Markov affinity-based graph imputation of - cells) is a method for addressing technical noise in single-cell data, - including under-sampling of mRNA molecules, often termed "dropout" - which can severely obscure important gene-gene relationships. MAGIC - shares information across similar cells, via data diffusion, to - denoise the cell count matrix and fill in missing transcripts. Read - more: van Dijk et al. (2018) . +Description: MAGIC (Markov affinity-based graph imputation of cells) is a + method for addressing technical noise in single-cell data, including + under-sampling of mRNA molecules, often termed "dropout" which can + severely obscure important gene-gene relationships. MAGIC shares + information across similar cells, via data diffusion, to denoise the + cell count matrix and fill in missing transcripts. Read more: van Dijk + et al. (2018) . License: GPL-2 | file LICENSE Depends: Matrix (>= 1.2-0), From dca7c6613bf6ff8086d302d50fb181d17ff379bb Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Wed, 10 Mar 2021 17:12:00 -0500 Subject: [PATCH 27/33] install Rmagic for precommit roxygenize --- .github/workflows/pre-commit.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 7aa6e8f..ad5b983 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -49,8 +49,9 @@ jobs: if: startsWith(runner.os, 'Linux') with: path: ${{env.R_LIBS_USER}} - key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('Rmagic/.pre-commit.r_requirements.txt') }}- + key: precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('Rmagic/.pre-commit.r_requirements.txt') }}-${{ hashFiles('Rmagic/DESCRIPTION') }}- restore-keys: | + precommit-${{env.UBUNTU_VERSION}}-renv-${{ hashFiles('Rmagic/.pre-commit.r_requirements.txt') }}- precommit-${{env.UBUNTU_VERSION}}-renv- - name: Install R packages @@ -61,6 +62,9 @@ jobs: renv::install(pkg) } close(con) + if (!require("devtools")) install.packages("devtools", repos="http://cloud.r-project.org") + devtools::install_dev_deps("./Rmagic", upgrade=TRUE) + devtools::install("./Rmagic") shell: Rscript {0} - name: Run pre-commit for R From fec82894154b5142b64ce49b3cce748a5cdb3d01 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 10:06:13 -0500 Subject: [PATCH 28/33] fix coercian of array to boolean --- Rmagic/R/magic.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Rmagic/R/magic.R b/Rmagic/R/magic.R index 2482510..b14ac88 100644 --- a/Rmagic/R/magic.R +++ b/Rmagic/R/magic.R @@ -150,7 +150,9 @@ magic.default <- function( if (!methods::is(object = data, "Matrix")) { data <- as.matrix(x = data) } - if (is.null(x = genes) || is.na(x = genes)) { + if (is.null(x = genes)) { + gene_names <- colnames(x = data) + } else if (is.na(x = genes)) { genes <- NULL gene_names <- colnames(x = data) } else if (is.numeric(x = genes)) { From dd2cef51db47b8a6e2ecc6eab3582c49d18e050b Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 10:07:29 -0500 Subject: [PATCH 29/33] install pandoc --- .github/workflows/run_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 0585ef0..d92afb4 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -117,7 +117,7 @@ jobs: if: runner.os == 'Linux' run: | sudo apt-get update -qq - sudo apt-get install -y libcurl4-openssl-dev + sudo apt-get install -y libcurl4-openssl-dev pandoc - name: Cache Python packages uses: actions/cache@v2 From eebe112df39752bce690f9110f09366d66817d90 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 10:08:14 -0500 Subject: [PATCH 30/33] don't package pre-commit config --- Rmagic/.Rbuildignore | 1 + 1 file changed, 1 insertion(+) diff --git a/Rmagic/.Rbuildignore b/Rmagic/.Rbuildignore index b0dc269..685fd5c 100644 --- a/Rmagic/.Rbuildignore +++ b/Rmagic/.Rbuildignore @@ -1,3 +1,4 @@ ^data-raw$ ^tests$ ^README\.Rmd$ +^.pre\-commit.*$ From a6454dc9b5946aacd3ce2b816c999076a7c36007 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 10:17:05 -0500 Subject: [PATCH 31/33] fix null / na check --- Rmagic/R/magic.R | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Rmagic/R/magic.R b/Rmagic/R/magic.R index b14ac88..03374ca 100644 --- a/Rmagic/R/magic.R +++ b/Rmagic/R/magic.R @@ -150,9 +150,7 @@ magic.default <- function( if (!methods::is(object = data, "Matrix")) { data <- as.matrix(x = data) } - if (is.null(x = genes)) { - gene_names <- colnames(x = data) - } else if (is.na(x = genes)) { + if (length(genes) <= 1 && (is.null(x = genes) || is.na(x = genes))) { genes <- NULL gene_names <- colnames(x = data) } else if (is.numeric(x = genes)) { From 1602600a99bfb2cd6fa0fc956de8bb3af8928b34 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 10:57:25 -0500 Subject: [PATCH 32/33] don't test oldrel --- .github/workflows/run_tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index d92afb4..9e1bfcc 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -92,7 +92,6 @@ jobs: config: - {name: 'devel', os: ubuntu-latest, r: 'devel' } - {name: 'release', os: ubuntu-latest, r: 'release' } - - {name: 'oldrel', os: ubuntu-latest, r: 'oldrel' } steps: - name: Cancel Previous Runs From 3d5c7ba6ac1d16ce974d09f3f7e1c8609bbe9cf1 Mon Sep 17 00:00:00 2001 From: Scott Gigante Date: Thu, 11 Mar 2021 11:04:48 -0500 Subject: [PATCH 33/33] update contributing to reference pre-commit, remove travis --- .travis.yml | 68 ------------------------------------- CONTRIBUTING.md | 2 +- README.md | 2 +- Rmagic/README.Rmd | 2 +- Rmagic/README.md | 2 +- autoblack.sh | 13 ------- python/README.rst | 6 ++-- python/doc/source/index.rst | 2 +- 8 files changed, 8 insertions(+), 89 deletions(-) delete mode 100644 .travis.yml delete mode 100644 autoblack.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cfba9b6..0000000 --- a/.travis.yml +++ /dev/null @@ -1,68 +0,0 @@ -# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r - -language: r -sudo: required - -os: - - linux - -dist: - - xenial - -r: - - oldrel - - release - - devel - -addons: - apt: - sources: - - deadsnakes - packages: - - libhdf5-dev - - python3.6-dev - -cache: - - packages - - apt - - directories: - - $HOME/.cache/pip - -before_install: - - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - - sudo python3.6 get-pip.py - - mkdir -p ~/bin && export PATH=~/bin/:$PATH - - ln -s $(which python3.6) ~/bin/python - - ln -s $(which pip3.6) ~/bin/pip - - sudo pip install --upgrade pip - - pip install --user -q phate - -install: - - cd python; pip install --user -q . - - cd ../Rmagic; R -e 'install.packages("devtools", repos="http://cloud.r-project.org")' - - R -e 'install.packages("BiocManager", repos="http://cloud.r-project.org"); BiocManager::install("multtest")' - - R -e 'devtools::install_deps(dep = T, upgrade="always")' - - cd .. - -script: - - python -c "import magic" - - cd Rmagic; R CMD build . - - R CMD check *tar.gz - - cd ../python; pip install --user -q .[test] - - if [ "$TRAVIS_PYTHON_VERSION" != "3.5" ]; then black . --check --diff -t py35; fi - - python setup.py test - - pip install --user -q .[doc] - - cd doc; make html; cd .. - -deploy: - provider: pypi - user: scottgigante - password: ${PYPI_PASSWORD} - distributions: sdist bdist_wheel - skip_existing: true - skip_cleanup: true - on: - tags: true - branch: master - -warnings_are_errors: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 17c75d4..11bfb4a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,7 +25,7 @@ Code Style and Testing Contributors are encouraged to write tests for their code, but if you do not know how to do so, please do not feel discouraged from contributing code! Others can always help you test your contribution. -Python code style is dictated by [`black`](https://pypi.org/project/black/#installation-and-usage). To automatically reformat your code when you run `git commit`, you can run `./autoblack.sh` in the root directory of this project to add a hook to your `git` repository. +Code style is dictated by [`black`](https://pypi.org/project/black/#installation-and-usage) and [OpenStack](https://docs.openstack.org/hacking/latest/user/hacking.html#styleguide). Styling is automatically applied by [`pre-commit`](https://github.com/pre-commit/pre-commit). Code of Conduct --------------- diff --git a/README.md b/README.md index 77213fb..801c1d6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Markov Affinity-based Graph Imputation of Cells (MAGIC) [![Latest PyPI version](https://img.shields.io/pypi/v/magic-impute.svg)](https://pypi.org/project/magic-impute/) [![Latest CRAN version](https://img.shields.io/cran/v/Rmagic.svg)](https://cran.r-project.org/package=Rmagic) -[![Travis CI Build](https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master)](https://travis-ci.com/KrishnaswamyLab/MAGIC) +[![GitHub Actions Build](https://img.shields.io/github/workflow/status/KrishnaswamyLab/MAGIC/Unit%20Tests/master?label=Github%20Actions)](https://github.com/KrishnaswamyLab/MAGIC/actions) [![Read the Docs](https://img.shields.io/readthedocs/magic.svg)](https://magic.readthedocs.io/) [![Cell Publication DOI](https://zenodo.org/badge/DOI/10.1016/j.cell.2018.05.061.svg)](https://www.cell.com/cell/abstract/S0092-8674(18)30724-4) [![Twitter](https://img.shields.io/twitter/follow/KrishnaswamyLab.svg?style=social&label=Follow)](https://twitter.com/KrishnaswamyLab) diff --git a/Rmagic/README.Rmd b/Rmagic/README.Rmd index 46c8f4b..1ab80fe 100644 --- a/Rmagic/README.Rmd +++ b/Rmagic/README.Rmd @@ -17,7 +17,7 @@ knitr::opts_chunk$set( [![Latest PyPI version](https://img.shields.io/pypi/v/magic-impute.svg)](https://pypi.org/project/magic-impute/) [![Latest CRAN version](https://img.shields.io/cran/v/Rmagic.svg)](https://cran.r-project.org/package=Rmagic) -[![Travis CI Build](https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master)](https://travis-ci.com/KrishnaswamyLab/MAGIC) +[![GitHub Actions Build](https://img.shields.io/github/workflow/status/KrishnaswamyLab/MAGIC/Unit%20Tests/master?label=Github%20Actions)](https://github.com/KrishnaswamyLab/MAGIC/actions) [![Read the Docs](https://img.shields.io/readthedocs/magic.svg)](https://magic.readthedocs.io/) [![Cell Publication DOI](https://zenodo.org/badge/DOI/10.1016/j.cell.2018.05.061.svg)](https://www.cell.com/cell/abstract/S0092-8674(18)30724-4) [![Twitter](https://img.shields.io/twitter/follow/KrishnaswamyLab.svg?style=social&label=Follow)](https://twitter.com/KrishnaswamyLab) diff --git a/Rmagic/README.md b/Rmagic/README.md index 1779cbe..69fb231 100644 --- a/Rmagic/README.md +++ b/Rmagic/README.md @@ -10,7 +10,7 @@ toc: true [![Latest PyPI version](https://img.shields.io/pypi/v/magic-impute.svg)](https://pypi.org/project/magic-impute/) [![Latest CRAN version](https://img.shields.io/cran/v/Rmagic.svg)](https://cran.r-project.org/package=Rmagic) -[![Travis CI Build](https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master)](https://travis-ci.com/KrishnaswamyLab/MAGIC) +[![GitHub Actions Build](https://img.shields.io/github/workflow/status/KrishnaswamyLab/MAGIC/Unit%20Tests/master?label=Github%20Actions)](https://github.com/KrishnaswamyLab/MAGIC/actions) [![Read the Docs](https://img.shields.io/readthedocs/magic.svg)](https://magic.readthedocs.io/) [![Cell Publication DOI](https://zenodo.org/badge/DOI/10.1016/j.cell.2018.05.061.svg)](https://www.cell.com/cell/abstract/S0092-8674(18)30724-4) [![Twitter](https://img.shields.io/twitter/follow/KrishnaswamyLab.svg?style=social&label=Follow)](https://twitter.com/KrishnaswamyLab) diff --git a/autoblack.sh b/autoblack.sh deleted file mode 100644 index f8c6210..0000000 --- a/autoblack.sh +++ /dev/null @@ -1,13 +0,0 @@ -cat <> .git/hooks/pre-commit -#!/bin/sh - -set -e - -files=\$(git diff --staged --name-only --diff-filter=d -- "*.py") - -for file in \$files; do - black -q -t py35 \$file - git add \$file -done -EOF -chmod +x .git/hooks/pre-commit diff --git a/python/README.rst b/python/README.rst index 11e4f33..40ac954 100644 --- a/python/README.rst +++ b/python/README.rst @@ -8,9 +8,9 @@ Markov Affinity-based Graph Imputation of Cells (MAGIC) .. image:: https://img.shields.io/cran/v/Rmagic.svg :target: https://cran.r-project.org/package=Rmagic :alt: Latest CRAN version -.. image:: https://api.travis-ci.com/KrishnaswamyLab/MAGIC.svg?branch=master - :target: https://travis-ci.com/KrishnaswamyLab/MAGIC - :alt: Travis CI Build +.. image:: https://img.shields.io/github/workflow/status/KrishnaswamyLab/MAGIC/Unit%20Tests/master?label=Github%20Actions + :target: https://github.com/KrishnaswamyLab/MAGIC/actions + :alt: GitHub Actions Build .. image:: https://img.shields.io/readthedocs/magic.svg :target: https://magic.readthedocs.io/ :alt: Read the Docs diff --git a/python/doc/source/index.rst b/python/doc/source/index.rst index b22df14..51873a7 100644 --- a/python/doc/source/index.rst +++ b/python/doc/source/index.rst @@ -12,7 +12,7 @@ MAGIC - Markov Affinity-based Graph Imputation of Cells .. raw:: html - Travis CI Build + GitHub Actions Build .. raw:: html