Spaces:
Sleeping
Sleeping
# The Selector library provides a set of tools for selecting a | |
# subset of the dataset and computing diversity. | |
# | |
# Copyright (C) 2023 The QC-Devs Community | |
# | |
# This file is part of Selector. | |
# | |
# Selector is free software; you can redistribute it and/or | |
# modify it under the terms of the GNU General Public License | |
# as published by the Free Software Foundation; either version 3 | |
# of the License, or (at your option) any later version. | |
# | |
# Selector is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License | |
# along with this program; if not, see <http://www.gnu.org/licenses/> | |
# | |
# -- | |
[project] | |
# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ | |
name = "selector" | |
version = "0.0.1" | |
description = "Molecule selection with maximum diversity." | |
readme = "README.md" | |
#requires-python = ">=3.9,<4.0" | |
requires-python = ">=3.9" | |
# "LICENSE" is name of the license file, which must be in root of project folder | |
license = {file = "LICENSE"} | |
authors = [ | |
{name = "QC-Devs Community", email = "qcdevs@gmail.com"}, | |
] | |
keywords = [ | |
"subset selection", | |
"variable selection", | |
"chemical diversity", | |
"compound selection", | |
"maximum diversity", | |
"chemical library design", | |
"compound acquisition", | |
] | |
# https://pypi.org/classifiers/ | |
# Add PyPI classifiers here | |
classifiers = [ | |
"Development Status :: 5 - Production/Stable", | |
"Environment :: Console", | |
"License :: OSI Approved :: GNU (Version 3)", | |
"Natural Language :: English", | |
"Operating System :: MacOS", | |
"Operating System :: Microsoft :: Windows", | |
"Operating System :: POSIX", | |
"Operating System :: POSIX :: Linux", | |
"Programming Language :: Python", | |
"Programming Language :: Python :: 3", | |
"Programming Language :: Python :: 3.9", | |
"Programming Language :: Python :: 3.10", | |
"Programming Language :: Python :: 3.11", | |
] | |
# Required dependencies for install/usage of your package or application | |
# If you don't have any dependencies, leave this section empty | |
# Format for dependency strings: https://peps.python.org/pep-0508/ | |
dependencies = [ | |
"bitarray~=2.5.1", | |
"importlib-resources>=5.6.0", | |
"numpy>=1.21.2", | |
"pandas>=1.3.5", | |
"pytest>=6.2.5", | |
"scikit-learn>=1.0.1", | |
"scipy==1.11.1", | |
"setuptools>=58.0.4", | |
] | |
[project.scripts] | |
# Command line interface entrypoint scripts | |
# selector = "selector.__main__:main" | |
[project.urls] | |
# Use PyPI-standard names here | |
# Homepage | |
# Documentation | |
# Changelog | |
# Issue Tracker | |
# Source | |
# Discord server | |
homepage = "https://github.com/theochem/Selector" | |
documentation = "https://selector.qcdevs.org/" | |
repository = "https://github.com/theochem/Selector" | |
# Development dependencies | |
# pip install -e .[lint,test,exe] | |
# pip install -e .[dev] | |
[project.optional-dependencies] | |
lint = [ | |
# ruff linter checks for issues and potential bugs | |
"ruff", | |
# checks for unused code | |
# "vulture", | |
# # required for codespell to parse pyproject.toml | |
# "tomli", | |
# # validation of pyproject.toml | |
# "validate-pyproject[all]", | |
# automatic sorting of imports | |
"isort", | |
# # automatic code formatting to follow a consistent style | |
# "black", | |
] | |
test = [ | |
# Handles most of the testing work, including execution | |
# Docs: https://docs.pytest.org/en/stable/contents.html | |
"pytest==7.4.0", | |
# required by pytest | |
"hypothesis", | |
# "Coverage" is how much of the code is actually run (it's "coverage") | |
# Generates coverage reports from test suite runs | |
"pytest-cov>=3.0.0", | |
"tomli", | |
"scikit-learn>=1.0.1", | |
# Better parsing of doctests | |
"xdoctest", | |
# Colors for doctest output | |
"Pygments", | |
] | |
exe = [ | |
"setuptools", | |
"wheel", | |
"build", | |
"tomli", | |
"pyinstaller", | |
"staticx;platform_system=='Linux'", | |
] | |
dev = [ | |
# https://hynek.me/articles/python-recursive-optional-dependencies/ | |
"selector[lint,test,exe]", | |
# # Code quality tools | |
# "mypy", | |
# # Improved exception traceback output | |
# # https://github.com/qix-/better-exceptions | |
# "better_exceptions", | |
# # Analyzing dependencies | |
# # install graphviz to generate graphs | |
# "graphviz", | |
# "pipdeptree", | |
] | |
[tool.setuptools] | |
# https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html | |
platforms = ["Linux", "Windows", "MacOS"] | |
include-package-data = true | |
# This just means it's safe to zip up the bdist | |
zip-safe = true | |
# Non-code data that should be included in the package source code | |
# https://setuptools.pypa.io/en/latest/userguide/datafiles.html | |
[tool.setuptools.package-data] | |
selector = ["*.xml"] | |
# Python modules and packages that are included in the | |
# distribution package (and therefore become importable) | |
[tool.setuptools.packages.find] | |
exclude = ["tests", "tests_*", "examples"] | |
# PDM example | |
#[tool.pdm.scripts] | |
#isort = "isort selector" | |
#black = "black selector" | |
#format = {composite = ["isort", "black"]} | |
#check_isort = "isort --check selector tests" | |
#check_black = "black --check selector tests" | |
#vulture = "vulture --min-confidence 100 selector tests" | |
#ruff = "ruff check selector tests" | |
#fix = "ruff check --fix selector tests" | |
#codespell = "codespell --toml ./pyproject.toml" | |
#lint = {composite = ["vulture", "codespell", "ruff", "check_isort", "check_black"]} | |
#[tool.codespell] | |
## codespell supports pyproject.toml since version 2.2.2 | |
## NOTE: the "tomli" package must be installed for this to work | |
## https://github.com/codespell-project/codespell#using-a-config-file | |
## NOTE: ignore words for codespell must be lowercase | |
#check-filenames = "" | |
#ignore-words-list = "word,another,something" | |
#skip = "htmlcov,.doctrees,*.pyc,*.class,*.ico,*.out,*.PNG,*.inv,*.png,*.jpg,*.dot" | |
[tool.black] | |
line-length = 100 | |
# If you need to exclude directories from being reformatted by black | |
# force-exclude = ''' | |
# ( | |
# somedirname | |
# | dirname | |
# | filename\.py | |
# ) | |
# ''' | |
[tool.isort] | |
profile = "black" | |
known_first_party = ["selector"] | |
# If you need to exclude files from having their imports sorted | |
#extend_skip_glob = [ | |
# "selector/somefile.py", | |
# "selector/somedir/*", | |
#] | |
# https://beta.ruff.rs/docs | |
[tool.ruff] | |
line-length = 100 | |
show-source = true | |
# Rules: https://beta.ruff.rs/docs/rules | |
# If you violate a rule, lookup the rule on the Rules page in ruff docs. | |
# Many rules have links you can click with a explanation of the rule and how to fix it. | |
# If there isn't a link, go to the project the rule was source from (e.g. flake8-bugbear) | |
# and review it's docs for the corresponding rule. | |
# If you're still confused, ask a fellow developer for assistance. | |
# You can also run "ruff rule <rule>" to explain a rule on the command line, without a browser or internet access. | |
select = [ | |
"E", # pycodestyle | |
"F", # Pyflakes | |
"W", # Warning | |
"B", # flake8-bugbear | |
"A", # flake8-builtins | |
"C4", # flake8-comprehensions | |
"T10", # flake8-debugger | |
"EXE", # flake8-executable, | |
"ISC", # flake8-implicit-str-concat | |
"G", # flake8-logging-format | |
"PIE", # flake8-pie | |
"T20", # flake8-print | |
"PT", # flake8-pytest-style | |
"RSE", # flake8-raise | |
"RET", # flake8-return | |
"TID", # flake8-tidy-imports | |
"ARG", # flake8-unused-arguments | |
"PGH", # pygrep-hooks | |
"PLC", # Pylint Convention | |
"PLE", # Pylint Errors | |
"PLW", # Pylint Warnings | |
"RUF", # Ruff-specific rules | |
# ** Things to potentially enable in the future ** | |
# DTZ requires all usage of datetime module to have timezone-aware | |
# objects (so have a tz argument or be explicitly UTC). | |
# "DTZ", # flake8-datetimez | |
# "PTH", # flake8-use-pathlib | |
# "SIM", # flake8-simplify | |
] | |
# Files to exclude from linting | |
extend-exclude = [ | |
"*.pyc", | |
"__pycache__", | |
"*.egg-info", | |
".eggs", | |
# check point files of jupyter notebooks | |
"*.ipynb_checkpoints", | |
".tox", | |
".git", | |
"build", | |
"dist", | |
"docs", | |
"examples", | |
"htmlcov", | |
"notebooks", | |
".cache", | |
"_version.py", | |
] | |
# Linting error codes to ignore | |
ignore = [ | |
"F403", # unable to detect undefined names from star imports | |
"F405", # undefined locals from star imports | |
"W605", # invalid escape sequence | |
"A003", # shadowing python builtins | |
"RET505", # unnecessary 'else' after 'return' statement | |
"RET504", # Unnecessary variable assignment before return statement | |
"RET507", # Unnecessary {branch} after continue statement | |
"PT011", # pytest-raises-too-broad | |
"PT012", # pytest.raises() block should contain a single simple statement | |
"PLW0603", # Using the global statement to update is discouraged | |
"PLW2901", # for loop variable overwritten by assignment target | |
"G004", # Logging statement uses f-string | |
"PIE790", # no-unnecessary-pass | |
"PIE810", # multiple-starts-ends-with | |
"PGH003", # Use specific rule codes when ignoring type issues | |
"PLC1901", # compare-to-empty-string | |
] | |
# Linting error codes to ignore on a per-file basis | |
[tool.ruff.per-file-ignores] | |
"__init__.py" = ["F401", "E501"] | |
"selector/somefile.py" = ["E402", "E501"] | |
"selector/somedir/*" = ["E501"] | |
# Configuration for mypy | |
# https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml-file | |
[tool.mypy] | |
python_version = "3.9" | |
follow_imports = "skip" | |
ignore_missing_imports = true | |
files = "selector" # directory mypy should analyze | |
# Directories to exclude from mypy's analysis | |
exclude = [ | |
"selector/somedir", | |
"selector/somefile\\.py", | |
"dirname", | |
] | |
# Configuration for pytest | |
# https://docs.pytest.org/en/latest/reference/customize.html#pyproject-toml | |
[tool.pytest.ini_options] | |
addopts = [ | |
# Allow test files to have the same name in different directories. | |
"--import-mode=importlib", | |
"--cache-clear", | |
"--showlocals", | |
"-v", | |
"-r a", | |
"--cov-report=term-missing", | |
"--cov=selector", | |
] | |
# directory containing the tests | |
testpaths = [ | |
"selector/tests", | |
"selector/methods/tests", | |
] | |
norecursedirs = [ | |
".vscode", | |
"__pycache__", | |
"build", | |
] | |
# Warnings that should be ignored | |
filterwarnings = [ | |
"ignore::DeprecationWarning" | |
] | |
# custom markers that can be used using pytest.mark | |
markers = [ | |
"slow: lower-importance tests that take an excessive amount of time", | |
] | |
# Configuration for coverage.py | |
[tool.coverage.run] | |
# files or directories to exclude from coverage calculations | |
omit = [ | |
'selector/somedir/*', | |
'selector/somefile.py', | |
] | |
# Configuration for vulture | |
[tool.vulture] | |
# Files or directories to exclude from vulture | |
# The syntax is a little funky | |
exclude = [ | |
"somedir", | |
"*somefile.py", | |
] | |
# configuration for bandit | |
[tool.bandit] | |
exclude_dirs = [ | |
"selector/tests", | |
"selector/methods", | |
] | |
skips = [ | |
"B101", # Ignore assert statements | |
"B311", # Ignore pseudo-random generators | |
"B404", # Ignore subprocess import | |
"B603", # Ignore subprocess call | |
"B607", # Ignore subprocess call | |
] | |