|
a |
|
b/pyproject.toml |
|
|
1 |
[build-system] |
|
|
2 |
build-backend = "hatchling.build" |
|
|
3 |
requires = ["hatchling"] |
|
|
4 |
|
|
|
5 |
[project] |
|
|
6 |
name = "nichecompass" |
|
|
7 |
version = "0.2.3" |
|
|
8 |
description = "End-to-end analysis of spatial multi-omics data" |
|
|
9 |
readme = "README.md" |
|
|
10 |
requires-python = ">=3.9" |
|
|
11 |
license = {file = "LICENSE"} |
|
|
12 |
authors = [ |
|
|
13 |
{name = "Sebastian Birk"}, |
|
|
14 |
] |
|
|
15 |
maintainers = [ |
|
|
16 |
{name = "Sebastian Birk", email = "sebastian.birk@outlook.com"}, |
|
|
17 |
] |
|
|
18 |
urls.Documentation = "https://nichecompass.readthedocs.io/" |
|
|
19 |
urls.Source = "https://github.com/Lotfollahi-lab/nichecompass" |
|
|
20 |
urls.Home-page = "https://github.com/Lotfollahi-lab/nichecompass" |
|
|
21 |
classifiers = [ |
|
|
22 |
"Development Status :: 3 - Alpha", |
|
|
23 |
"Intended Audience :: Science/Research", |
|
|
24 |
"Natural Language :: English", |
|
|
25 |
"Programming Language :: Python :: 3.9", |
|
|
26 |
"Operating System :: POSIX :: Linux", |
|
|
27 |
"Topic :: Scientific/Engineering :: Bio-Informatics", |
|
|
28 |
] |
|
|
29 |
dependencies = [ |
|
|
30 |
"mlflow>=1.28.0", |
|
|
31 |
"pyreadr>=0.4.6", |
|
|
32 |
"scanpy>=1.9.3,<1.10.0", |
|
|
33 |
"torch-geometric>=2.2.0", |
|
|
34 |
"omnipath>=1.0.7", |
|
|
35 |
"decoupler>=1.4.0", |
|
|
36 |
"numpy<2", |
|
|
37 |
] |
|
|
38 |
optional-dependencies.dev = [ |
|
|
39 |
"pre-commit", |
|
|
40 |
"twine>=4.0.2", |
|
|
41 |
] |
|
|
42 |
optional-dependencies.docs = [ |
|
|
43 |
"docutils>=0.8,!=0.18.*,!=0.19.*", |
|
|
44 |
"sphinx>=4.1", |
|
|
45 |
"sphinx-book-theme>=1.0.0", |
|
|
46 |
"myst-nb", |
|
|
47 |
"myst-parser", |
|
|
48 |
"sphinxcontrib-bibtex>=1.0.0", |
|
|
49 |
"sphinx-autodoc-typehints", |
|
|
50 |
"sphinx_rtd_theme", |
|
|
51 |
"sphinxext-opengraph", |
|
|
52 |
"sphinx-copybutton", |
|
|
53 |
"sphinx-design", |
|
|
54 |
"sphinx-hoverxref", |
|
|
55 |
# For notebooks |
|
|
56 |
"ipykernel", |
|
|
57 |
"ipython", |
|
|
58 |
"pandas", |
|
|
59 |
] |
|
|
60 |
optional-dependencies.docsbuild = [ |
|
|
61 |
"nichecompass[docs,benchmarking,multimodal]" |
|
|
62 |
] # docs build dependencies |
|
|
63 |
optional-dependencies.tests = [ |
|
|
64 |
"pytest", |
|
|
65 |
"coverage", |
|
|
66 |
] |
|
|
67 |
optional-dependencies.benchmarking = [ |
|
|
68 |
"scib-metrics>=0.3.3", |
|
|
69 |
"pynndescent>=0.5.8", |
|
|
70 |
"scikit-misc>=0.3.0", |
|
|
71 |
"squidpy>=1.2.2", |
|
|
72 |
"jax==0.4.7", |
|
|
73 |
"jaxlib==0.4.7" |
|
|
74 |
] |
|
|
75 |
optional-dependencies.multimodal = [ |
|
|
76 |
"scglue>=0.3.2", |
|
|
77 |
] |
|
|
78 |
optional-dependencies.tutorials = [ |
|
|
79 |
"jupyter", |
|
|
80 |
] |
|
|
81 |
all = ["nichecompass[dev,docs,tests,benchmarking,multimodal,tutorials]"] |
|
|
82 |
|
|
|
83 |
[tool.coverage.run] |
|
|
84 |
source = ["nichecompass"] |
|
|
85 |
omit = [ |
|
|
86 |
"**/test_*.py", |
|
|
87 |
] |
|
|
88 |
|
|
|
89 |
[tool.pytest.ini_options] |
|
|
90 |
testpaths = ["tests"] |
|
|
91 |
xfail_strict = true |
|
|
92 |
addopts = [ |
|
|
93 |
"--import-mode=importlib", # allow using test files with same name |
|
|
94 |
] |
|
|
95 |
|
|
|
96 |
[tool.ruff] |
|
|
97 |
line-length = 120 |
|
|
98 |
src = ["src"] |
|
|
99 |
extend-include = ["*.ipynb"] |
|
|
100 |
|
|
|
101 |
[tool.ruff.format] |
|
|
102 |
docstring-code-format = true |
|
|
103 |
|
|
|
104 |
[tool.ruff.lint] |
|
|
105 |
select = [ |
|
|
106 |
"F", # Errors detected by Pyflakes |
|
|
107 |
"E", # Error detected by Pycodestyle |
|
|
108 |
"W", # Warning detected by Pycodestyle |
|
|
109 |
"I", # isort |
|
|
110 |
"D", # pydocstyle |
|
|
111 |
"B", # flake8-bugbear |
|
|
112 |
"TID", # flake8-tidy-imports |
|
|
113 |
"C4", # flake8-comprehensions |
|
|
114 |
"BLE", # flake8-blind-except |
|
|
115 |
"UP", # pyupgrade |
|
|
116 |
"RUF100", # Report unused noqa directives |
|
|
117 |
] |
|
|
118 |
ignore = [ |
|
|
119 |
# line too long -> we accept long comment lines; formatter gets rid of long code lines |
|
|
120 |
"E501", |
|
|
121 |
# Do not assign a lambda expression, use a def -> lambda expression assignments are convenient |
|
|
122 |
"E731", |
|
|
123 |
# allow I, O, l as variable names -> I is the identity matrix |
|
|
124 |
"E741", |
|
|
125 |
# Missing docstring in public package |
|
|
126 |
"D104", |
|
|
127 |
# Missing docstring in public module |
|
|
128 |
"D100", |
|
|
129 |
# Missing docstring in __init__ |
|
|
130 |
"D107", |
|
|
131 |
# Errors from function calls in argument defaults. These are fine when the result is immutable. |
|
|
132 |
"B008", |
|
|
133 |
# __magic__ methods are are often self-explanatory, allow missing docstrings |
|
|
134 |
"D105", |
|
|
135 |
# first line should end with a period [Bug: doesn't work with single-line docstrings] |
|
|
136 |
"D400", |
|
|
137 |
# First line should be in imperative mood; try rephrasing |
|
|
138 |
"D401", |
|
|
139 |
## Disable one in each pair of mutually incompatible rules |
|
|
140 |
# We don’t want a blank line before a class docstring |
|
|
141 |
"D203", |
|
|
142 |
# We want docstrings to start immediately after the opening triple quote |
|
|
143 |
"D213", |
|
|
144 |
] |
|
|
145 |
|
|
|
146 |
[tool.ruff.lint.pydocstyle] |
|
|
147 |
convention = "numpy" |
|
|
148 |
|
|
|
149 |
[tool.ruff.lint.per-file-ignores] |
|
|
150 |
"docs/*" = ["I"] |
|
|
151 |
"tests/*" = ["D"] |
|
|
152 |
"*/__init__.py" = ["F401"] |
|
|
153 |
|
|
|
154 |
[tool.cruft] |
|
|
155 |
skip = [ |
|
|
156 |
"tests", |
|
|
157 |
"src/**/__init__.py", |
|
|
158 |
"src/**/basic.py", |
|
|
159 |
"docs/api.md", |
|
|
160 |
"docs/changelog.md", |
|
|
161 |
"docs/references.bib", |
|
|
162 |
"docs/references.md", |
|
|
163 |
"docs/notebooks/example.ipynb", |
|
|
164 |
] |