pyfauxseq 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,208 @@
1
+ # From https://github.com/github/gitignore/blob/main/Python.gitignore 2025-07-30
2
+
3
+ # Byte-compiled / optimized / DLL files
4
+ __pycache__/
5
+ *.py[codz]
6
+ *$py.class
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ share/python-wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .nox/
45
+ .coverage
46
+ .coverage.*
47
+ .cache
48
+ nosetests.xml
49
+ coverage.xml
50
+ *.cover
51
+ *.py.cover
52
+ .hypothesis/
53
+ .pytest_cache/
54
+ cover/
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+ local_settings.py
63
+ db.sqlite3
64
+ db.sqlite3-journal
65
+
66
+ # Flask stuff:
67
+ instance/
68
+ .webassets-cache
69
+
70
+ # Scrapy stuff:
71
+ .scrapy
72
+
73
+ # Sphinx documentation
74
+ docs/_build/
75
+
76
+ # PyBuilder
77
+ .pybuilder/
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ # For a library or package, you might want to ignore these files since the code is
89
+ # intended to run in multiple environments; otherwise, check them in:
90
+ # .python-version
91
+
92
+ # pipenv
93
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
95
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
96
+ # install all needed dependencies.
97
+ #Pipfile.lock
98
+
99
+ # UV
100
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
101
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
102
+ # commonly ignored for libraries.
103
+ #uv.lock
104
+
105
+ # poetry
106
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
107
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
108
+ # commonly ignored for libraries.
109
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
110
+ #poetry.lock
111
+ #poetry.toml
112
+
113
+ # pdm
114
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
115
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
116
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
117
+ #pdm.lock
118
+ #pdm.toml
119
+ .pdm-python
120
+ .pdm-build/
121
+
122
+ # pixi
123
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
124
+ #pixi.lock
125
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
126
+ # in the .venv directory. It is recommended not to include this directory in version control.
127
+ .pixi
128
+
129
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
130
+ __pypackages__/
131
+
132
+ # Celery stuff
133
+ celerybeat-schedule
134
+ celerybeat.pid
135
+
136
+ # SageMath parsed files
137
+ *.sage.py
138
+
139
+ # Environments
140
+ .env
141
+ .envrc
142
+ .venv
143
+ env/
144
+ venv/
145
+ ENV/
146
+ env.bak/
147
+ venv.bak/
148
+
149
+ # Spyder project settings
150
+ .spyderproject
151
+ .spyproject
152
+
153
+ # Rope project settings
154
+ .ropeproject
155
+
156
+ # mkdocs documentation
157
+ /site
158
+
159
+ # mypy
160
+ .mypy_cache/
161
+ .dmypy.json
162
+ dmypy.json
163
+
164
+ # Pyre type checker
165
+ .pyre/
166
+
167
+ # pytype static type analyzer
168
+ .pytype/
169
+
170
+ # Cython debug symbols
171
+ cython_debug/
172
+
173
+ # PyCharm
174
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
175
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
176
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
177
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
178
+ #.idea/
179
+
180
+ # Abstra
181
+ # Abstra is an AI-powered process automation framework.
182
+ # Ignore directories containing user credentials, local state, and settings.
183
+ # Learn more at https://abstra.io/docs
184
+ .abstra/
185
+
186
+ # Visual Studio Code
187
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
188
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
189
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
190
+ # you could uncomment the following to ignore the entire vscode folder
191
+ # .vscode/
192
+
193
+ # Ruff stuff:
194
+ .ruff_cache/
195
+
196
+ # PyPI configuration file
197
+ .pypirc
198
+
199
+ # Marimo
200
+ marimo/_static/
201
+ marimo/_lsp/
202
+ __marimo__/
203
+
204
+ # Streamlit
205
+ .streamlit/secrets.toml
206
+ # pixi environments
207
+ .pixi/*
208
+ !.pixi/config.toml
@@ -0,0 +1,111 @@
1
+ # Contributing
2
+
3
+ Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
4
+
5
+ You can contribute in many ways:
6
+
7
+ ## Types of Contributions
8
+
9
+ ### Report Bugs
10
+
11
+ Report bugs at https://github.com/bharathananth/pyfauxseq/issues.
12
+
13
+ If you are reporting a bug, please include:
14
+
15
+ - Your operating system name and version.
16
+ - Any details about your local setup that might be helpful in troubleshooting.
17
+ - Detailed steps to reproduce the bug.
18
+
19
+ ### Fix Bugs
20
+
21
+ Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it.
22
+
23
+ ### Implement Features
24
+
25
+ Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it.
26
+
27
+ ### Write Documentation
28
+
29
+ Python Implementation of the R package fauxseq could always use more documentation, whether as part of the official docs, in docstrings, or even on the web in blog posts, articles, and such.
30
+
31
+ ### Submit Feedback
32
+
33
+ The best way to send feedback is to file an issue at https://github.com/bharathananth/pyfauxseq/issues.
34
+
35
+ If you are proposing a feature:
36
+
37
+ - Explain in detail how it would work.
38
+ - Keep the scope as narrow as possible, to make it easier to implement.
39
+ - Remember that this is a volunteer-driven project, and that contributions are welcome :)
40
+
41
+ ## Get Started!
42
+
43
+ Ready to contribute? Here's how to set up `pyfauxseq` for local development.
44
+
45
+ 1. Fork the `pyfauxseq` repo on GitHub.
46
+ 2. Clone your fork locally:
47
+
48
+ ```sh
49
+ git clone git@github.com:your_name_here/pyfauxseq.git
50
+ ```
51
+
52
+ 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:
53
+
54
+ ```sh
55
+ mkvirtualenv pyfauxseq
56
+ cd pyfauxseq/
57
+ python setup.py develop
58
+ ```
59
+
60
+ 4. Create a branch for local development:
61
+
62
+ ```sh
63
+ git checkout -b name-of-your-bugfix-or-feature
64
+ ```
65
+
66
+ Now you can make your changes locally.
67
+
68
+ 5. When you're done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:
69
+
70
+ ```sh
71
+ make lint
72
+ make test
73
+ # Or
74
+ make test-all
75
+ ```
76
+
77
+ To get flake8 and tox, just pip install them into your virtualenv.
78
+
79
+ 6. Commit your changes and push your branch to GitHub:
80
+
81
+ ```sh
82
+ git add .
83
+ git commit -m "Your detailed description of your changes."
84
+ git push origin name-of-your-bugfix-or-feature
85
+ ```
86
+
87
+ 7. Submit a pull request through the GitHub website.
88
+
89
+ ## Pull Request Guidelines
90
+
91
+ Before you submit a pull request, check that it meets these guidelines:
92
+
93
+ 1. The pull request should include tests.
94
+ 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.md.
95
+ 3. The pull request should work for Python 3.12 and 3.13. Tests run in GitHub Actions on every pull request to the main branch, make sure that the tests pass for all supported Python versions.
96
+
97
+ ## Deploying
98
+
99
+ A reminder for the maintainers on how to deploy. Make sure all your changes are committed (including an entry in HISTORY.md). Then run:
100
+
101
+ ```sh
102
+ bump2version patch # possible: major / minor / patch
103
+ git push
104
+ git push --tags
105
+ ```
106
+
107
+ You can set up a [GitHub Actions workflow](https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-python#publishing-to-pypi) to automatically deploy your package to PyPI when you push a new tag.
108
+
109
+ ## Code of Conduct
110
+
111
+ Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
@@ -0,0 +1,5 @@
1
+ # History
2
+
3
+ ## 0.1.0 (2026-03-18)
4
+
5
+ * First release on PyPI.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025, Bharath Ananthasubramaniam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,67 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyfauxseq
3
+ Version: 0.1.0
4
+ Summary: This package can generate synthetic timeseries RNA-seq data with a fraction of rhythmic genes and empirical relationship between mean expression and variability across replicates of genes.
5
+ Project-URL: bugs, https://github.com/bharathananth/pyfauxseq/issues
6
+ Project-URL: homepage, https://github.com/bharathananth/pyfauxseq
7
+ Project-URL: documentation, https://bharathananth.github.io/pypfauxseq
8
+ Author-email: Bharath Ananthasubramaniam <bharath.ananthasubramaniam@hu-berlin.de>
9
+ Maintainer-email: Bharath Ananthasubramaniam <bharath.ananthasubramaniam@hu-berlin.de>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Healthcare Industry
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: numpy
21
+ Requires-Dist: pandas
22
+ Requires-Dist: scipy
23
+ Provides-Extra: docs
24
+ Requires-Dist: mkdocs; extra == 'docs'
25
+ Requires-Dist: mkdocs-material; extra == 'docs'
26
+ Requires-Dist: mkdocstrings-python; extra == 'docs'
27
+ Provides-Extra: test
28
+ Requires-Dist: coverage; extra == 'test'
29
+ Requires-Dist: hypothesis; extra == 'test'
30
+ Requires-Dist: pytest; extra == 'test'
31
+ Requires-Dist: ruff; extra == 'test'
32
+ Requires-Dist: ty; extra == 'test'
33
+ Description-Content-Type: text/markdown
34
+
35
+ # pyfauxseq
36
+ ### A python Implementation of the R package fauxseq
37
+
38
+ ![PyPI - Version](https://img.shields.io/pypi/v/pyfauxseq)
39
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyfauxseq)
40
+ ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/bharathananth/pyfauxseq/total)
41
+
42
+ ## What pyfauxseq does
43
+
44
+ This package can generate synthetic timeseries RNA-seq data with a fraction of rhythmic genes and empirical relationship between mean expression and variability across replicates of genes.
45
+
46
+ `pyfauxseq` improves upon previous tools as follows:
47
+ - generates negative-binomial count data with empirically-estimated mean-dispersion properties.
48
+ - generates data with either differential expression or differential rhythmicity or both.
49
+
50
+ ## How to install pyfauxseq
51
+ ```python -m pip install pyfauxseq```
52
+
53
+ ## Get started with pyfauxseq
54
+ Get started with synthetic RNA-seq data with the ground truth with the default parameters using
55
+ ```python
56
+ import pyfauxseq as pf
57
+ sim_data = pf.generate_rhythmic_rnaseq()
58
+ sim_data["counts"] # the count data
59
+ sim_data["params"] # parameters of the rhythmic genes
60
+ sim_data["exp_design"] # time labels of the individual sample (columns) of count data
61
+ ```
62
+ ## How to cite pyfauxseq
63
+ Please cite this software using CITATION.CFF or the "Cite this repository" link in the right sidebar.
64
+
65
+ ## Credits
66
+
67
+ This package was created with [Cookiecutter](https://github.com/audreyfeldroy/cookiecutter) and the [audreyfeldroy/cookiecutter-pypackage](https://github.com/audreyfeldroy/cookiecutter-pypackage) project template.
@@ -0,0 +1,33 @@
1
+ # pyfauxseq
2
+ ### A python Implementation of the R package fauxseq
3
+
4
+ ![PyPI - Version](https://img.shields.io/pypi/v/pyfauxseq)
5
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyfauxseq)
6
+ ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/bharathananth/pyfauxseq/total)
7
+
8
+ ## What pyfauxseq does
9
+
10
+ This package can generate synthetic timeseries RNA-seq data with a fraction of rhythmic genes and empirical relationship between mean expression and variability across replicates of genes.
11
+
12
+ `pyfauxseq` improves upon previous tools as follows:
13
+ - generates negative-binomial count data with empirically-estimated mean-dispersion properties.
14
+ - generates data with either differential expression or differential rhythmicity or both.
15
+
16
+ ## How to install pyfauxseq
17
+ ```python -m pip install pyfauxseq```
18
+
19
+ ## Get started with pyfauxseq
20
+ Get started with synthetic RNA-seq data with the ground truth with the default parameters using
21
+ ```python
22
+ import pyfauxseq as pf
23
+ sim_data = pf.generate_rhythmic_rnaseq()
24
+ sim_data["counts"] # the count data
25
+ sim_data["params"] # parameters of the rhythmic genes
26
+ sim_data["exp_design"] # time labels of the individual sample (columns) of count data
27
+ ```
28
+ ## How to cite pyfauxseq
29
+ Please cite this software using CITATION.CFF or the "Cite this repository" link in the right sidebar.
30
+
31
+ ## Credits
32
+
33
+ This package was created with [Cookiecutter](https://github.com/audreyfeldroy/cookiecutter) and the [audreyfeldroy/cookiecutter-pypackage](https://github.com/audreyfeldroy/cookiecutter-pypackage) project template.
@@ -0,0 +1,9 @@
1
+ ---
2
+ hide:
3
+ - navigation
4
+ ---
5
+
6
+ # API Documentation
7
+ ::: pyfauxseq.generate_rnaseq.generate_rhythmic_rnaseq
8
+
9
+ ::: pyfauxseq.generate_rnaseq.generate_diffrhythmic_rnaseq
@@ -0,0 +1,46 @@
1
+ ---
2
+ hide:
3
+ - navigation
4
+ ---
5
+
6
+ # Getting Started
7
+
8
+ ## Installation
9
+
10
+ ### Stable release
11
+
12
+ To install Python Implementation of the R package fauxseq, run this command in your terminal:
13
+
14
+ ```sh
15
+ uv add pyfauxseq
16
+ ```
17
+
18
+ Or if you prefer to use `pip`:
19
+
20
+ ```sh
21
+ pip install pyfauxseq
22
+ ```
23
+
24
+ ### From source
25
+
26
+ The source files for Python Implementation of the R package fauxseq can be downloaded from the [Github repo](https://github.com/bharathananth/pyfauxseq).
27
+
28
+ You can either clone the public repository:
29
+
30
+ ```sh
31
+ git clone git://github.com/bharathananth/pyfauxseq
32
+ ```
33
+
34
+ ## Generate synthetic rhythmic RNA-seq data
35
+ ```python
36
+ import pyfauxseq as pf
37
+ ```
38
+ For timeseries data under one condition:
39
+ ```python
40
+ sim_data = pf.generate_rhythmic_rnaseq()
41
+ ```
42
+ For timeseries data under two condition:
43
+ ```python
44
+ sim_data = pf.generate_diffrhythmic_rnaseq()
45
+ ```
46
+ The parameters to customize the data are listed in [API Documentation](api_documentation.md)
@@ -0,0 +1,19 @@
1
+ ---
2
+ hide:
3
+ - navigation
4
+ - toc
5
+ - title
6
+ ---
7
+ # pyfauxseq
8
+ ## A synthetic timeseries RNA-seq data generator
9
+ ![Data](https://img.shields.io/badge/RNA--seq-Synthetic_timeseries-blue)
10
+ ![Purpose](https://img.shields.io/badge/Purpose-Benchmarking-green)
11
+ [![PyPI version](https://img.shields.io/pypi/v/pyfauxseq.svg)](https://pypi.org/project/pyfauxseq/)
12
+ [![Supported Python versions](https://img.shields.io/pypi/pyversions/pyfauxseq.svg)](https://pypi.org/project/pyfauxseq/)
13
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
+ [![Build Status](https://github.com/bharathananth/pyfauxseq/actions/workflows/test.yml/badge.svg)](https://github.com/bharathananth/pyfauxseq/actions)
15
+ [![codecov](https://codecov.io/gh/bharathananth/pyfauxseq/branch/main/graph/badge.svg)](https://codecov.io/gh/bharathananth/pyfauxseq)
16
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
17
+
18
+ ## Why **pyfauxseq**?
19
+ `pyfauxseq` and its R sister `fauxseq` arose out of a desire to systematically compare methods comparing temporal changes in gene expression in one or two conditions. This package delivers real-world like RNAseq data with ground truth to help with benchmarking and method development.
@@ -0,0 +1,145 @@
1
+ [project]
2
+ name = "pyfauxseq"
3
+ version = "0.1.0"
4
+ description = "This package can generate synthetic timeseries RNA-seq data with a fraction of rhythmic genes and empirical relationship between mean expression and variability across replicates of genes."
5
+ readme = {"file" = "README.md", "content-type" = "text/markdown"}
6
+ requires-python = ">= 3.10"
7
+ license = "MIT"
8
+ authors = [
9
+ {name = "Bharath Ananthasubramaniam", email = "bharath.ananthasubramaniam@hu-berlin.de"}
10
+ ]
11
+ maintainers = [
12
+ {name = "Bharath Ananthasubramaniam", email = "bharath.ananthasubramaniam@hu-berlin.de"}
13
+ ]
14
+ keywords = []
15
+ classifiers = [
16
+ "Programming Language :: Python :: 3",
17
+ "Topic :: Scientific/Engineering :: Bio-Informatics",
18
+ "Operating System :: OS Independent",
19
+ "Intended Audience :: Science/Research",
20
+ "Intended Audience :: Healthcare Industry",
21
+ "Development Status :: 5 - Production/Stable",
22
+ "License :: OSI Approved :: MIT License"
23
+ ]
24
+ dependencies = [
25
+ "numpy",
26
+ "scipy",
27
+ "pandas"]
28
+
29
+ [build-system]
30
+ requires = ["hatchling"]
31
+ build-backend = "hatchling.build"
32
+
33
+ [project.optional-dependencies]
34
+ test = [
35
+ "coverage", # testing
36
+ "pytest", # testing
37
+ "ruff", # linting
38
+ "ty", # checking types
39
+ "hypothesis", # for CBT
40
+ ]
41
+ docs = [
42
+ "mkdocs",
43
+ "mkdocs-material",
44
+ "mkdocstrings-python"
45
+ ]
46
+
47
+ [project.urls]
48
+ bugs = "https://github.com/bharathananth/pyfauxseq/issues"
49
+ homepage = "https://github.com/bharathananth/pyfauxseq"
50
+ documentation = "https://bharathananth.github.io/pypfauxseq"
51
+
52
+ [tool.hatch.build.targets.sdist]
53
+ # Hatchling includes README, LICENSE, and pyproject.toml by default.
54
+ include = [
55
+ "/CONTRIBUTING.md",
56
+ "/HISTORY.md",
57
+ "/docs",
58
+ ]
59
+
60
+ [tool.hatch.build.targets.wheel]
61
+ packages = ["src/pyfauxseq"]
62
+
63
+ [tool.hatch.envs.default]
64
+ installer = "uv"
65
+
66
+ [tool.ty]
67
+ # All rules are enabled as "error" by default; no need to specify unless overriding.
68
+ # Example override: relax a rule for the entire project (uncomment if needed).
69
+ # rules.TY015 = "warn" # For invalid-argument-type, warn instead of error.
70
+
71
+ [tool.ty.src]
72
+ exclude = ["tests"]
73
+
74
+ [tool.ruff]
75
+ line-length = 88
76
+ extend-exclude = ["tests"]
77
+
78
+ [tool.ruff.format]
79
+ quote-style = "double"
80
+ indent-style = "space"
81
+ docstring-code-format = true
82
+
83
+ [tool.ruff.lint]
84
+ select = [
85
+ "E", # pycodestyle errors
86
+ "W", # pycodestyle warnings
87
+ "F", # Pyflakes
88
+ "I", # isort
89
+ "B", # flake8-bugbear
90
+ "UP", # pyupgrade
91
+ "D", # pydocstyle (enforces docstring conventions like PEP 257)
92
+ "SIM", # flake8-simplify
93
+ "RUF", # Ruff-specific rules
94
+ ]
95
+
96
+ [tool.ruff.lint.pydocstyle]
97
+ convention = "numpy" # Options: "google", "numpy", or "pep257"
98
+
99
+ [tool.uv]
100
+ package = true
101
+
102
+ [tool.pixi.workspace]
103
+ channels = ["conda-forge"]
104
+ platforms = ["linux-64", "osx-64", "win-64", "osx-arm64"]
105
+
106
+ [tool.pixi.pypi-dependencies]
107
+ pyfauxseq = { path = ".", editable = true }
108
+
109
+ [tool.pixi.environments]
110
+ default = { solve-group = "default" }
111
+ test = { features = ["test"], solve-group = "default" }
112
+ dev = ["docs", "lint", "test", "usage"]
113
+
114
+ [tool.pixi.tasks]
115
+ test = { cmd = "pytest", default-environment = "test" }
116
+
117
+ [tool.pixi.feature.test.dependencies]
118
+ pytest = ">=9.0.2,<10"
119
+ hypothesis = ">=6.151.9,<7"
120
+ ipython = ">=9.11.0,<10"
121
+
122
+ [tool.pixi.feature.docs.dependencies]
123
+ mkdocs = "<2.0.0"
124
+ mkdocs-material = "*"
125
+ mkdocstrings-python = "*"
126
+
127
+ [tool.pixi.feature.lint.dependencies]
128
+ ruff = "*"
129
+ ty = "*"
130
+ pandas-stubs = "*"
131
+ validate-pyproject = ">=0.25,<0.26"
132
+
133
+ [tool.pixi.feature.usage.dependencies]
134
+ matplotlib = "*"
135
+ numpy = "*"
136
+ scipy = "*"
137
+ ipython = ">=9.16.1,<10"
138
+ jupyter = ">=1.1.1,<2"
139
+ notebook = ">=7.6.2,<8"
140
+ ipykernel = ">=7.3.0,<8"
141
+ anndata = ">=0.13.2,<0.14"
142
+ nbstripout = ">=0.9.1,<0.10"
143
+
144
+ [dependency-groups]
145
+ usage = ["pydeseq2"]