Skip to content

Commit

Permalink
Fix logging levels
Browse files Browse the repository at this point in the history
  • Loading branch information
flying-sheep committed Feb 12, 2019
1 parent 6c3e929 commit fc84096
Show file tree
Hide file tree
Showing 20 changed files with 67 additions and 72 deletions.
2 changes: 1 addition & 1 deletion scanpy/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def krumsiek11():
"""
filename = os.path.dirname(__file__) + '/krumsiek11.txt'
verbosity_save = sc.settings.verbosity
sc.settings.verbosity = 0 # suppress output...
sc.settings.verbosity = 'error' # suppress output...
adata = sc.read(filename, first_column_names=True)
sc.settings.verbosity = verbosity_save
adata.uns['iroot'] = 0
Expand Down
9 changes: 5 additions & 4 deletions scanpy/neighbors/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@

from .. import settings
from .. import logging as logg
from .. utils import doc_params
from .. import utils
from ..utils import doc_params
from ..logging import _settings_verbosity_greater_or_equal_than
from ..tools._utils import choose_representation, doc_use_rep, doc_n_pcs

N_DCS = 15 # default number of diffusion components
Expand Down Expand Up @@ -93,7 +94,7 @@ def neighbors(
adata.uns['neighbors']['params'] = {'n_neighbors': n_neighbors, 'method': method}
adata.uns['neighbors']['distances'] = neighbors.distances
adata.uns['neighbors']['connectivities'] = neighbors.connectivities
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint(
'added to `.uns[\'neighbors\']`\n'
' \'distances\', distances for each pair of neighbors\n'
Expand Down Expand Up @@ -956,11 +957,11 @@ def _test_embed(self):
"""
# pl.semilogy(w,'x',label=r'$ \widetilde K$')
# pl.show()
if settings.verbosity > 2:
if _settings_verbosity_greater_or_equal_than(3):
# output of spectrum of K for comparison
w, v = np.linalg.eigh(self.K)
logg.msg('spectrum of K (kernel)')
if settings.verbosity > 3:
if _settings_verbosity_greater_or_equal_than(4):
# direct computation of spectrum of T
w, vl, vr = scipy.linalg.eig(self.T, left=True)
logg.msg('spectrum of transition matrix (should be same as of Ktilde)')
2 changes: 1 addition & 1 deletion scanpy/plotting/_anndata.py
Original file line number Diff line number Diff line change
Expand Up @@ -1809,7 +1809,7 @@ def tracksplot(adata, var_names, groupby, use_raw=None, log=False,

# get categories colors:
if groupby + "_colors" not in adata.uns:
from scanpy.plotting._tools.scatterplots import _set_default_colors_for_categorical_obs
from ._tools.scatterplots import _set_default_colors_for_categorical_obs
_set_default_colors_for_categorical_obs(adata, groupby)

groupby_colors = adata.uns[groupby + "_colors"]
Expand Down
10 changes: 4 additions & 6 deletions scanpy/preprocessing/_magic.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
"""Denoise high-dimensional data using MAGIC
"""

import numbers
import numpy as np

from .. import settings
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than


def magic(adata,
Expand Down Expand Up @@ -118,8 +116,8 @@ def magic(adata,
"`copy=True`".format(name_list))
adata = adata.copy() if copy else adata
verbose = settings.verbosity if verbose is None else verbose
if isinstance(verbose, int):
verbose = verbose >= 2
if isinstance(verbose, (str, int)):
verbose = _settings_verbosity_greater_or_equal_than(2)
n_jobs = settings.n_jobs if n_jobs is None else n_jobs

X_magic = MAGIC(k=k,
Expand All @@ -133,7 +131,7 @@ def magic(adata,
**kwargs).fit_transform(adata,
genes=name_list)
logg.info(' finished', time=True,
end=' ' if settings.verbosity > 2 else '\n')
end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
# update AnnData instance
if name_list == "pca_only":
# special case - update adata.obsm with smoothed values
Expand Down
2 changes: 1 addition & 1 deletion scanpy/settings.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Settings
"""

verbosity = 1
verbosity = 'warning'
"""Set global verbosity level.
Level 0: only show 'error' messages.
Expand Down
3 changes: 3 additions & 0 deletions scanpy/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import scanpy

scanpy.settings.verbosity = 'hint'
4 changes: 2 additions & 2 deletions scanpy/tests/test_combat.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import numpy as np
import pandas as pd
import scanpy as sc
import scanpy
from sklearn.metrics import silhouette_score

import scanpy as sc
from scanpy.preprocessing._combat import stand_data


Expand Down
3 changes: 2 additions & 1 deletion scanpy/tests/test_neighbors.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import numpy as np
import pytest
from anndata import AnnData

from scanpy import Neighbors
import pytest

# the input data
X = [[1, 0], [3, 0], [5, 6], [0, 4]]
Expand Down
2 changes: 1 addition & 1 deletion scanpy/tests/test_rank_genes_groups_logreg.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pandas as pd
import numpy as np
import scanpy as sc


def test_rank_genes_groups_with_renamed_categories():
adata = sc.datasets.blobs(n_variables=4, n_centers=3, n_observations=200)
assert np.allclose(adata.X[1], [9.214668, -2.6487126, 4.2020774, 0.51076424])
Expand Down
7 changes: 4 additions & 3 deletions scanpy/tools/_dpt.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import scipy as sp
import networkx as nx
from natsort import natsorted
from .. import settings

from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than
from ..neighbors import Neighbors, OnFlySymMatrix


Expand All @@ -15,7 +16,7 @@ def _diffmap(adata, n_comps=15):
dpt.compute_eigen(n_comps=n_comps)
adata.obsm['X_diffmap'] = dpt.eigen_basis
adata.uns['diffmap_evals'] = dpt.eigen_values
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('added\n'
' \'X_diffmap\', diffmap coordinates (adata.obsm)\n'
' \'diffmap_evals\', eigenvalues of transition matrix (adata.uns)')
Expand Down Expand Up @@ -130,7 +131,7 @@ def dpt(adata, n_dcs=10, n_branchings=0, min_group_size=0.01,
for count, idx in enumerate(dpt.indices): ordering_id[idx] = count
adata.obs['dpt_order'] = ordering_id
adata.obs['dpt_order_indices'] = dpt.indices
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('added\n'
+ (' \'dpt_pseudotime\', the pseudotime (adata.obs)'
if dpt.iroot is not None else '')
Expand Down
5 changes: 3 additions & 2 deletions scanpy/tools/_draw_graph.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import numpy as np
from .. import settings

from .. import utils
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than
from ._utils import get_init_pos_from_paga


Expand Down Expand Up @@ -141,7 +142,7 @@ class of long-established algorithms for visualizing graphs. It has been
adata.uns['draw_graph']['params'] = {'layout': layout, 'random_state': random_state}
key_added = 'X_draw_graph_' + (layout if key_added_ext is None else key_added_ext)
adata.obsm[key_added] = positions
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('added\n'
' \'{}\', graph_drawing coordinates (adata.obsm)'
.format(key_added))
Expand Down
4 changes: 2 additions & 2 deletions scanpy/tools/_leiden.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from scipy import sparse

from .. import utils
from .. import settings
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than

try:
from leidenalg.VertexPartition import MutableVertexPartition
Expand Down Expand Up @@ -132,7 +132,7 @@ def leiden(
random_state=random_state,
n_iterations=n_iterations,
)
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('found {} clusters and added\n'
' \'{}\', the cluster labels (adata.obs, categorical)'
.format(len(np.unique(groups)), key_added))
Expand Down
4 changes: 2 additions & 2 deletions scanpy/tools/_louvain.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from scipy.sparse import spmatrix

from .. import utils
from .. import settings
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than

try:
from louvain.VertexPartition import MutableVertexPartition
Expand Down Expand Up @@ -168,7 +168,7 @@ def louvain(
categories=natsorted(all_groups.unique()))
adata.uns['louvain'] = {}
adata.uns['louvain']['params'] = {'resolution': resolution, 'random_state': random_state}
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('found {} clusters and added\n'
' \'{}\', the cluster labels (adata.obs, categorical)'
.format(n_clusters, key_added))
Expand Down
8 changes: 5 additions & 3 deletions scanpy/tools/_paga.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from collections import namedtuple

import numpy as np
import scipy as sp
from scipy.sparse.csgraph import minimum_spanning_tree

from .. import utils
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than
from ..neighbors import Neighbors
from .. import utils
from .. import settings

_AVAIL_MODELS = {'v1.0', 'v1.2'}

Expand Down Expand Up @@ -94,7 +96,7 @@ def paga(
adata.uns['paga']['transitions_confidence'] = paga.transitions_confidence
# adata.uns['paga']['transitions_ttest'] = paga.transitions_ttest
adata.uns['paga']['groups'] = groups
logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
if use_rna_velocity:
logg.hint(
'added\n'
Expand Down
7 changes: 4 additions & 3 deletions scanpy/tools/_phate.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from .. import settings
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than


def phate(
Expand Down Expand Up @@ -112,8 +113,8 @@ def phate(
logg.info('computing PHATE', r=True)
adata = adata.copy() if copy else adata
verbose = settings.verbosity if verbose is None else verbose
if isinstance(verbose, int):
verbose = verbose >= 2
if isinstance(settings.verbosity, (str, int)):
verbose = _settings_verbosity_greater_or_equal_than(2)
n_jobs = settings.n_jobs if n_jobs is None else n_jobs
try:
import phate
Expand All @@ -138,7 +139,7 @@ def phate(
**kwargs
).fit_transform(adata)
logg.info(' finished', time=True,
end=' ' if settings.verbosity > 2 else '\n')
end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
# update AnnData instance
adata.obsm['X_phate'] = X_phate # annotate samples with PHATE coordinates
logg.hint('added\n'
Expand Down
4 changes: 2 additions & 2 deletions scanpy/tools/_rank_genes_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
from scipy.sparse import issparse

from .. import utils
from .. import settings
from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than
from ..preprocessing._simple import _get_mean_var


Expand Down Expand Up @@ -396,7 +396,7 @@ def rank_genes_groups(
[n for n in rankings_gene_pvals_adj],
dtype=[(rn, 'float64') for rn in groups_order_save])

logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint(
'added to `.uns[\'{}\']`\n'
' \'names\', sorted np.recarray to be indexed by group ids\n'
Expand Down
28 changes: 3 additions & 25 deletions scanpy/tools/_rna_velocity.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import numba
import numpy as np
from numpy.linalg import norm

from .. import logging as logg
from ..neighbors import Neighbors, get_indices_distances_from_sparse_matrix


def compute_velocity_graph(adata, adata_u, X_du):
Expand All @@ -9,14 +11,12 @@ def compute_velocity_graph(adata, adata_u, X_du):
or X_du.shape[0] != adata.shape[0]):
raise ValueError('Number of cells do not match.')

from scanpy.neighbors import Neighbors, get_indices_distances_from_sparse_matrix
neigh = Neighbors(adata)
knn_indices, knn_distances = get_indices_distances_from_sparse_matrix(
neigh.distances, neigh.n_neighbors)
n_obs = adata.n_obs
n_neighbors = neigh.n_neighbors

from numpy.linalg import norm
X_u = adata_u.X.toarray()
X_du = X_du.astype('float32').toarray()

Expand Down Expand Up @@ -58,28 +58,6 @@ def fill_graph():
return graph.tocsr()


def comppute_arrows_embedding():
if 'rna_velocity' not in adata.uns:
raise ValueError('`arrows=True` requires `tl.rna_velocity` to be run before.')
adjacency = adata.uns['rna_velocity']['graph']
# loop over columns of adjacency, this is where transitions start from
from numpy.linalg import norm
V = np.zeros((adjacency.shape[0], 2), dtype='float32')
for i, n in enumerate(adjacency.T): # loop over columns (note the transposition)
for j in n.nonzero()[1]: # these are row indices
diff = adata.obsm['X_' + basis][j] - adata.obsm['X_' + basis][i]
# need the normalized difference vector: the distance in the embedding
# might be completely meaningless
diff /= norm(diff)
V[i] += adjacency[j, i] * diff
logg.hint('added \'V_{}\' to `.obsm`'.format(basis))
adata.obsm['V_' + basis] = V
X = adata.obsm['X_' + basis]
for ax in axs:
quiver_kwds = arrows_kwds if arrows_kwds is not None else {}
ax.quiver(X[:, 0], X[:, 1], V[:, 0], V[:, 1], **quiver_kwds)


def rna_velocity(adata, loomfile, copy=False):
"""Estimate RNA velocity [LaManno17]_
Expand Down
6 changes: 3 additions & 3 deletions scanpy/tools/_score_genes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

import numpy as np
import pandas as pd
import scipy.sparse
from scipy.sparse import issparse
from .. import settings

from .. import logging as logg
from ..logging import _settings_verbosity_greater_or_equal_than


def score_genes(
Expand Down Expand Up @@ -128,7 +128,7 @@ def score_genes(

adata.obs[score_name] = pd.Series(np.array(score).ravel(), index=adata.obs_names)

logg.info(' finished', time=True, end=' ' if settings.verbosity > 2 else '\n')
logg.info(' finished', time=True, end=' ' if _settings_verbosity_greater_or_equal_than(3) else '\n')
logg.hint('added\n'
' \'{}\', score of gene set (adata.obs)'.format(score_name))
return adata if copy else None
Expand Down
Loading

2 comments on commit fc84096

@falexwolf
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool! I had some other solution in mind mid-term (making verbosity a property of a Settings class instance and making sure that the setter would convert to an unambiguous internal representation), but this does the job, too. The only downside of this is that _settings_verbosity_greater_or_equal_than is very long... :)

But we can go away from it in the future if we want.

@flying-sheep
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, this was just a short-term fix since the string levels weren’t supported at all.

I also think we should add some helper function instead of manually calling _settings_verbosity_greater_or_equal_than all the time

Please sign in to comment.