Skip to content

Commit

Permalink
Merge pull request #830 from fsschneider/pyproject.toml
Browse files Browse the repository at this point in the history
Switch to `pyproject.toml`
  • Loading branch information
priyakasimbeg authored Feb 5, 2025
2 parents 6c8fd56 + 50658bc commit c1f182e
Show file tree
Hide file tree
Showing 4 changed files with 330 additions and 319 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
- name: Install yapf
run: |
python -m pip install --upgrade pip
pip install yapf==0.32
pip install yapf==0.32 toml
- name: Run yapf
run: |
yapf . --diff --recursive
329 changes: 329 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,329 @@
###############################################################################
# MLCommons Algorithmic Efficiency. #
###############################################################################

[project]
name = "algorithmic_efficiency"
dynamic = ["version"]
description = "Codebase for the AlgoPerf: Training Algorithms benchmark"
authors = [
{ name = "MLCommons Algorithms Working Group", email = "[email protected]" },
]
license = { text = "Apache 2.0" }
readme = "README.md"
requires-python = ">=3.8"
keywords = [
"algoperf",
"algorithmic-efficiency",
"machine-learning",
"deep-learning",
"optimization",
"benchmarking",
"training-methods",
]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
"absl-py==1.4.0",
"networkx==3.1",
"docker==7.0.0",
"numpy>=1.23",
"pandas>=2.0.1",
"tensorflow==2.12.0",
"tensorflow-datasets==4.9.2",
"tensorflow-probability==0.20.0",
"tensorflow-addons==0.20.0",
"gputil==1.4.0",
"psutil==5.9.5",
"clu==0.0.7",
"matplotlib>=3.7.2",
"tabulate==0.9.0",
]

[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
py-modules = ["submission_runner"]
include-package-data = true
zip-safe = false

[tool.setuptools.packages]
find = {} # Scanning implicit namespaces is active by default

[tool.setuptools.dynamic]
version = { attr = "algorithmic_efficiency.__version__" }

###############################################################################
# (Optional) Dependencies #
###############################################################################
[project.optional-dependencies]
# All workloads
full = [
"algorithmic_efficiency[criteo1tb,fastmri,ogbg,librispeech_conformer,wmt]",
]
# All workloads plus development dependencies
full_dev = ["algorithmic_efficiency[full,dev]"]
# Dependencies for developing the package
dev = [
"isort==5.12.0",
"pylint==2.17.4",
"pytest==7.3.1",
"yapf==0.33.0",
"pre-commit==3.3.1",
]

# Workloads
criteo1tb = ["scikit-learn==1.2.2"]
fastmri = ["h5py==3.8.0", "scikit-image==0.20.0"]
ogbg = ["jraph==0.0.6.dev0", "scikit-learn==1.2.2"]
librispeech_conformer = [
"sentencepiece==0.1.99",
"tensorflow-text==2.12.1",
"pydub==0.25.1",
]
wmt = ["sentencepiece==0.1.99", "tensorflow-text==2.12.1", "sacrebleu==1.3.1"]

# Frameworks
jax_core_deps = [
"flax==0.6.10",
"optax==0.1.5",
# Todo(kasimbeg): verify if this is necessary after we upgrade jax.
"chex==0.1.7",
"ml_dtypes==0.2.0",
"protobuf==4.25.3",
]
jax_cpu = [
"jax==0.4.10",
"jaxlib==0.4.10",
"algorithmic_efficiency[jax_core_deps]",
]
jax_gpu = [
"jax==0.4.10",
"jaxlib==0.4.10+cuda12.cudnn88",
"algorithmic_efficiency[jax_core_deps]",
]
pytorch_cpu = ["torch==2.1.0", "torchvision==0.16.0"]
pytorch_gpu = [
"torch==2.1.0",
"torchvision==0.16.0",
] # Note: omit the cuda suffix and installing from the appropriate wheel will result in using locally installed CUDA.
wandb = ["wandb==0.16.5"]

###############################################################################
# Linting Configurations #
###############################################################################

# yapf configuration
[tool.yapf]
based_on_style = "yapf"
each_dict_entry_on_separate_line = false
split_all_top_level_comma_separated_values = true

# isort configuration
[tool.isort]
profile = "google"

# pylint configuration
[tool.pylint.MASTER]
persistent = false
ignore = "get_references_web.py,get_references_web_single_group.py"

[tool.pylint.REPORTS]
reports = false
msg-template = "{msg_id}:{line:3} {obj}: {msg} [{symbol}]"

[tool.pylint.MESSAGES_CONTROL]
enable = "indexing-exception,old-raise-syntax"

[tool.pylint.BASIC]
# Required attributes for module, separated by a comma
#required-attributes=
# Regular expression which should only match the name
# of functions or classes which do not require a docstring.
no-docstring-rgx = "(__.*__|main)"
# Min length in lines of a function that requires a docstring.
docstring-min-length = 10
# Regular expression which should only match correct module names. The
# leading underscore is sanctioned for private modules by Google's style
# guide.
#
# There are exceptions to the basic rule (_?[a-z][a-z0-9_]*) to cover
# requirements of Python's module system.
module-rgx = "^(_?[a-z][a-z0-9_]*)|__init__$"
# Regular expression which should only match correct module level names
const-rgx = "^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$"
# Regular expression which should only match correct class attribute
class-attribute-rgx = "^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$"
# Regular expression which should only match correct class names
class-rgx = "^_?[A-Z][a-zA-Z0-9]*$"
# Regular expression which should only match correct function names.
# 'camel_case' and 'snake_case' group names are used for consistency of naming
# styles across functions and methods.
function-rgx = "^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*)|(?P<snake_case>_?[a-z][a-z0-9_]*))$"
# Regular expression which should only match correct method names.
# 'camel_case' and 'snake_case' group names are used for consistency of naming
# styles across functions and methods. 'exempt' indicates a name which is
# consistent with all naming styles.
method-rgx = "(?x)^(?:(?P<exempt>_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|_testDatasetSize|setUpClass|test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|(?:test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next|(?P<camel_case>_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P<snake_case>_{0,2}[a-z][a-z0-9_]*))$"
# Regular expression which should only match correct instance attribute names
attr-rgx = "^_{0,2}[a-z][a-z0-9_]*$"
# Regular expression which should only match correct argument names
argument-rgx = "^[a-z][a-z0-9_]*$"
# Regular expression which should only match correct variable names
variable-rgx = "^[a-z][a-z0-9_]*$"
# Regular expression which should only match correct list comprehension /
# generator expression variable names
inlinevar-rgx = "^[a-z][a-z0-9_]*$"
# Good variable names which should always be accepted, separated by a comma
good-names = "main,_"
# Bad variable names which should always be refused, separated by a comma
bad-names = ""
# List of builtins function names that should not be used, separated by a comma
#bad-functions=input,apply,reduce
# List of decorators that define properties, such as abc.abstractproperty.
property-classes = "abc.abstractproperty"

[tool.pylint.typecheck]
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members = true

# List of decorators that create context managers from functions, such as
# contextlib.contextmanager.
contextmanager-decorators = [
"contextlib.contextmanager",
"contextlib2.contextmanager",
]

[tool.pylint.VARIABLES]
# Tells whether we should check for unused import in __init__ files.
init-import = false

# A regular expression matching names used for dummy variables (i.e. not used).
dummy-variables-rgx = "^\\*{0,2}(_$|unused_|dummy_)"

# List of additional names supposed to be defined in builtins.
additional-builtins = []

[tool.pylint.CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods = ["__init__", "__new__", "setUp"]

# Valid names for the first argument to a class method.
valid-classmethod-first-arg = ["cls", "class_"]

[tool.pylint.EXCEPTIONS]
overgeneral-exceptions = [
"builtins.StandardError",
"builtins.Exception",
"builtins.BaseException",
]

[tool.pylint.IMPORTS]
# Deprecated modules which should not be used, separated by a comma
deprecated-modules = ["regsub", "TERMIOS", "Bastion", "rexec", "sets"]

[tool.pylint.FORMAT]
# List of checkers and warnings to disable.
disable = [
"abstract-method",
"access-member-before-definition",
"arguments-differ",
"assignment-from-no-return",
"attribute-defined-outside-init",
"bad-mcs-classmethod-argument",
"bad-option-value",
"c-extension-no-member",
"consider-merging-isinstance",
"consider-using-dict-comprehension",
"consider-using-enumerate",
"consider-using-in",
"consider-using-set-comprehension",
"consider-using-ternary",
"deprecated-method",
"design",
"file-ignored",
"fixme",
"global-statement",
"import-error",
"inconsistent-return-statements",
"invalid-unary-operand-type",
"len-as-condition",
"locally-disabled",
"locally-enabled",
"misplaced-comparison-constant",
"missing-docstring",
"multiple-imports",
"no-else-return",
"no-member",
"no-name-in-module",
"no-self-use",
"no-value-for-parameter",
"not-an-iterable",
"not-context-manager",
"pointless-except",
"protected-access",
"redefined-argument-from-local",
"signature-differs",
"similarities",
"simplifiable-if-expression",
"star-args",
"super-init-not-called",
"suppressed-message",
"too-many-function-args",
"trailing-comma-tuple",
"trailing-newlines",
"ungrouped-imports",
"unnecessary-pass",
"unsubscriptable-object",
"unused-argument",
"useless-object-inheritance",
"useless-return",
"useless-suppression",
"wrong-import-order",
"wrong-import-position",
"unneeded-not",
"unexpected-keyword-arg",
"redundant-keyword-arg",
"unspecified-encoding",
"logging-fstring-interpolation",
"consider-using-f-string",
"use-dict-literal",
]
# Maximum number of characters on a single line.
max-line-length = 80
ignore-long-lines = "(?x)(^\\s*(import|from)\\s|^\\s*(\\#\\ )?<?(https?|ftp):\\/\\/[^\\s\\/$.?#].[^\\s]*>?$|^[a-zA-Z_][a-zA-Z0-9_]*\\s*=\\s*('[^']\\S+'|\"[^\"]\\S+\"))"
# Maximum number of lines in a module
max-module-lines = 99999
# String used as indentation unit. We differ from PEP8's normal 4 spaces.
indent-string = ' '
single-line-if-stmt = true
# Do not warn about multiple statements on a single line for constructs like
# if test: stmt
[tool.pylint.LOGGING]
logging-modules = "logging,absl.logging"
# Add logging modules.
[tool.pylint.MISCELLANEOUS]
# Maximum line length for lambdas
#short-func-length=1
# List of module members that should be marked as deprecated.
# All of the string functions are listed in 4.1.4 Deprecated string functions
# in the Python 2.4 docs.
#deprecated-members=string.atof,string.atoi,string.atol,string.capitalize,string.expandtabs,string.find,string.rfind,string.index,string.rindex,string.count,string.lower,string.split,string.rsplit,string.splitfields,string.join,string.joinfields,string.lstrip,string.rstrip,string.strip,string.swapcase,string.translate,string.upper,string.ljust,string.rjust,string.center,string.zfill,string.replace,sys.exitfunc,sys.maxint
# List of exceptions that do not need to be mentioned in the Raises section of
# a docstring.
#ignore-exceptions=AssertionError,NotImplementedError,StopIteration,TypeError
# Number of spaces of indent required when the last token on the preceding line
# is an open (, [, or {.
indent-after-paren = 4
Loading

0 comments on commit c1f182e

Please sign in to comment.