Skip to content

Commit

Permalink
Test auto update
Browse files Browse the repository at this point in the history
  • Loading branch information
flying-sheep committed Sep 8, 2023
1 parent ddba0bc commit 282125a
Show file tree
Hide file tree
Showing 13 changed files with 59 additions and 38 deletions.
4 changes: 2 additions & 2 deletions .azure-pipelines.yml
Expand Up @@ -16,8 +16,8 @@ jobs:
Python3.11:
python.version: "3.11"
RUN_COVERAGE: yes
Python3.8:
python.version: "3.8"
Python3.9:
python.version: "3.9"
PreRelease:
python.version: "3.11"
PRERELEASE_DEPENDENCIES: yes
Expand Down
6 changes: 4 additions & 2 deletions anndata/__init__.py
Expand Up @@ -10,7 +10,7 @@
except ModuleNotFoundError:
raise RuntimeError(
"anndata is not correctly installed. Please install it, e.g. with pip."
)
) from None

# Allowing notes to be added to exceptions. See: https://github.com/scverse/anndata/issues/868
import sys
Expand Down Expand Up @@ -39,7 +39,9 @@
ImplicitModificationWarning,
ExperimentalFeatureWarning,
)
from . import experimental

if True: # Bypass isort, this needs to come last
from . import experimental


def read(*args, **kwargs):
Expand Down
6 changes: 3 additions & 3 deletions anndata/_core/aligned_mapping.py
@@ -1,9 +1,9 @@
from abc import ABC, abstractmethod
from collections import abc as cabc
from copy import copy
from typing import Union, Optional, Type, ClassVar, TypeVar # Special types
from typing import Iterator, Mapping, Sequence # ABCs
from typing import Tuple, List, Dict # Generic base types
from typing import Union, Optional, Type, ClassVar, TypeVar
from typing import Iterator, Mapping, Sequence
from typing import Tuple, List, Dict
import warnings

import numpy as np
Expand Down
4 changes: 2 additions & 2 deletions anndata/_io/utils.py
Expand Up @@ -204,7 +204,7 @@ def func_wrapper(*args, **kwargs):
break
try:
return func(*args, **kwargs)
except Exception as e:
except Exception as e: # noqa: BLE001
re_raise_error(e, elem, elem.name, "read")

return func_wrapper
Expand Down Expand Up @@ -237,7 +237,7 @@ def func_wrapper(*args, **kwargs):
break
try:
return func(*args, **kwargs)
except Exception as e:
except Exception as e: # noqa: BLE001
re_raise_error(e, elem, key, "writ")

return func_wrapper
Expand Down
2 changes: 1 addition & 1 deletion anndata/_io/write.py
Expand Up @@ -54,7 +54,7 @@ def write_csvs(
value = value[None]
try:
df = pd.DataFrame(value)
except Exception as e:
except Exception as e: # noqa: BLE001
warnings.warn(
f"Omitting to write {key!r} of type {type(e)}.",
WriteWarning,
Expand Down
4 changes: 2 additions & 2 deletions anndata/experimental/merge.py
Expand Up @@ -108,7 +108,7 @@ def as_group(store, *args, **kwargs) -> Union[ZarrGroup, H5Group]:
raise NotImplementedError("This is not yet implemented.")


@as_group.register
@as_group.register(os.PathLike)
def _(store: os.PathLike, *args, **kwargs) -> Union[ZarrGroup, H5Group]:
if store.suffix == ".h5ad":
import h5py
Expand All @@ -119,7 +119,7 @@ def _(store: os.PathLike, *args, **kwargs) -> Union[ZarrGroup, H5Group]:
return zarr.open_group(store, *args, **kwargs)


@as_group.register
@as_group.register(str)
def _(store: str, *args, **kwargs) -> Union[ZarrGroup, H5Group]:
return as_group(Path(store), *args, **kwargs)

Expand Down
20 changes: 11 additions & 9 deletions anndata/tests/test_base.py
@@ -1,3 +1,4 @@
from functools import partial
from itertools import product
import warnings

Expand All @@ -9,6 +10,7 @@
from scipy.sparse import csr_matrix, issparse

from anndata import AnnData
from anndata._core.raw import Raw
from anndata.tests.helpers import assert_equal, gen_adata


Expand Down Expand Up @@ -422,15 +424,15 @@ def test_equality_comparisons():
adata1 = AnnData(np.array([[1, 2], [3, 4], [5, 6]]))
adata2 = AnnData(np.array([[1, 2], [3, 4], [5, 6]]))
with pytest.raises(NotImplementedError):
adata1 == adata1
adata1 == adata1 # noqa: B015
with pytest.raises(NotImplementedError):
adata1 == adata2
adata1 == adata2 # noqa: B015
with pytest.raises(NotImplementedError):
adata1 != adata2
adata1 != adata2 # noqa: B015
with pytest.raises(NotImplementedError):
adata1 == 1
adata1 == 1 # noqa: B015
with pytest.raises(NotImplementedError):
adata1 != 1
adata1 != 1 # noqa: B015


def test_rename_categories():
Expand Down Expand Up @@ -494,19 +496,19 @@ def assert_same_op_result(a1, a2, op):

for obs_k, layer in product(["a", "b", "c", "anno1"], [None, "x2"]):
assert_same_op_result(
adata, adata_dense, lambda x: x.obs_vector(obs_k, layer=layer)
adata, adata_dense, partial(AnnData.obs_vector, k=obs_k, layer=layer)
)

for obs_k in ["a", "b", "c"]:
assert_same_op_result(adata, adata_dense, lambda x: x.raw.obs_vector(obs_k))
assert_same_op_result(adata.raw, adata_dense.raw, partial(Raw.obs_vector, k=obs_k))

for var_k, layer in product(["s1", "s2", "anno2"], [None, "x2"]):
assert_same_op_result(
adata, adata_dense, lambda x: x.var_vector(var_k, layer=layer)
adata, adata_dense, partial(AnnData.var_vector, k=var_k, layer=layer)
)

for var_k in ["s1", "s2", "anno2"]:
assert_same_op_result(adata, adata_dense, lambda x: x.raw.var_vector(var_k))
assert_same_op_result(adata.raw, adata_dense.raw, partial(Raw.var_vector, k=var_k))


def test_1d_slice_dtypes():
Expand Down
4 changes: 2 additions & 2 deletions anndata/tests/test_concatenate.py
Expand Up @@ -1347,8 +1347,8 @@ def test_concatenate_size_0_dim():
b = gen_adata((5, 0))

# Mostly testing that this doesn't error
a.concatenate([b]).shape == (10, 0)
b.concatenate([a]).shape == (10, 0)
assert a.concatenate([b]).shape == (10, 0)
assert b.concatenate([a]).shape == (10, 0)


def test_concat_null_X():
Expand Down
10 changes: 5 additions & 5 deletions anndata/tests/test_dask.py
Expand Up @@ -82,7 +82,7 @@ def test_dask_write(adata, tmp_path, diskfmt):
write(orig, pth)
curr = read(pth)

with pytest.raises(Exception):
with pytest.raises(AssertionError):
assert_equal(curr.obsm["a"], curr.obsm["b"])

assert_equal(curr.varm["a"], orig.varm["a"])
Expand Down Expand Up @@ -120,7 +120,7 @@ def test_dask_distributed_write(adata, tmp_path, diskfmt):
write_elem(g, "", orig)
curr = read_elem(g)

with pytest.raises(Exception):
with pytest.raises(AssertionError):
assert_equal(curr.obsm["a"], curr.obsm["b"])

assert_equal(curr.varm["a"], orig.varm["a"])
Expand Down Expand Up @@ -157,7 +157,7 @@ def test_dask_to_memory_check_array_types(adata, tmp_path, diskfmt):

mem = orig.to_memory()

with pytest.raises(Exception):
with pytest.raises(AssertionError):
assert_equal(curr.obsm["a"], curr.obsm["b"])

assert_equal(curr.varm["a"], orig.varm["a"])
Expand Down Expand Up @@ -195,7 +195,7 @@ def test_dask_to_memory_copy_check_array_types(adata, tmp_path, diskfmt):

mem = orig.to_memory(copy=True)

with pytest.raises(Exception):
with pytest.raises(AssertionError):
assert_equal(curr.obsm["a"], curr.obsm["b"])

assert_equal(curr.varm["a"], orig.varm["a"])
Expand Down Expand Up @@ -225,7 +225,7 @@ def test_dask_copy_check_array_types(adata):
orig = adata
curr = adata.copy()

with pytest.raises(Exception):
with pytest.raises(AssertionError):
assert_equal(curr.obsm["a"], curr.obsm["b"])

assert_equal(curr.varm["a"], orig.varm["a"])
Expand Down
4 changes: 2 additions & 2 deletions anndata/tests/test_io_utils.py
@@ -1,4 +1,4 @@
from contextlib import suppress
from contextlib import nullcontext

import pytest
import zarr
Expand Down Expand Up @@ -33,7 +33,7 @@ def read_attr(_):
raise NotImplementedError()

group = group_fn(tmp_path)
with group if hasattr(group, "__enter__") else suppress():
with group if hasattr(group, "__enter__") else nullcontext():
group["X"] = [1, 2, 3]
group.create_group("group")

Expand Down
4 changes: 2 additions & 2 deletions anndata/utils.py
Expand Up @@ -273,11 +273,11 @@ def convert_dictionary_to_structured_array(source: Mapping[str, Sequence[Any]]):
else np.asarray(col).astype("U")
for col in source.values()
]
except UnicodeEncodeError:
except UnicodeEncodeError as e:
raise ValueError(
"Currently only support ascii strings. "
"Don’t use “ö” etc. for sample annotation."
)
) from e

# if old_index_key not in source:
# names.append(new_index_key)
Expand Down
2 changes: 2 additions & 0 deletions docs/release-notes/0.10.0.md
Expand Up @@ -24,6 +24,8 @@
```{rubric} Other updates
```

- Bump minimum python version to 3.9 {pr}`820` {user}`flying-sheep`

```{rubric} Deprecations
```

Expand Down
27 changes: 21 additions & 6 deletions pyproject.toml
Expand Up @@ -5,7 +5,7 @@ requires = ["hatchling", "hatch-vcs"]
[project]
name = "anndata"
description = "Annotated data."
requires-python = ">=3.8"
requires-python = ">=3.9"
license = "BSD-3-Clause"
authors = [
{name = "Philipp Angerer"},
Expand All @@ -29,7 +29,6 @@ classifiers = [
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
Expand Down Expand Up @@ -128,21 +127,37 @@ markers = ["gpu: mark test to run on GPU"]

[tool.ruff]
ignore = [
# TODO: add `stacklevel` arg to all `warn` calls
"B028",
# dict() calls are prettier for kwargs dicts
"C408",
# line too long -> we accept long comment lines; black gets rid of long code lines
"E501",
# Do not assign a lambda expression, use a def -> Scanpy allows lambda expression assignments,
# Do not assign a lambda expression, use a def -> AnnData allows lambda expression assignments
"E731",
# allow I, O, l as variable names -> I is the identity matrix, i, j, k, l is reasonable indexing notation
"E741",
]
select = [
"E",
"F",
"W",
"F", # Errors detected by Pyflakes
"E", # Error detected by Pycodestyle
"W", # Warning detected by Pycodestyle
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"BLE", # flake8-blind-except
"UP", # pyupgrade
"TCH", # manage type checking blocks
"RUF100", # Report unused noqa directives
]
[tool.ruff.per-file-ignores]
# E721 comparing types, but we specifically are checking that we aren't getting subtypes (views)
"anndata/tests/test_readwrite.py" = ["E721"]
[tool.ruff.isort]
known-first-party = ["anndata"]
required-imports = ["from __future__ import annotations"]
[tool.ruff.flake8-bugbear]
extend-immutable-calls = ["slice"]

[tool.codespell]
skip = ".git,*.pdf,*.svg"
Expand Down

0 comments on commit 282125a

Please sign in to comment.