[project] name="aidge_core" description="Core algorithms for operators and graph of the AIDGE framework" dependencies = [ "numpy>=1.21.6", "Jinja2>=3.1.2", "matplotlib" ] requires-python = ">= 3.7" readme = "README.md" license = { file = "LICENSE" } classifiers = [ "Development Status :: 2 - Pre-Alpha", "Programming Language :: Python :: 3" ] dynamic = ["version"] # defined by pbr [project.urls] Homepage = "https://www.deepgreen.ai/en/platform" Documentation = "https://eclipse-aidge.readthedocs.io/en/latest/" Repository = "https://gitlab.eclipse.org/eclipse/aidge/aidge_core" Issues = "https://gitlab.eclipse.org/eclipse/aidge/aidge_core/-/issues/" Changelog = "https://gitlab.eclipse.org/eclipse/aidge/aidge_core/-/releases" [project.optional-dependencies] test = [ "pytest" ] [build-system] requires = [ "setuptools>=64", "cmake>=3.18.4.post1", "pbr" ] build-backend = "setuptools.build_meta" ##################################################### # SETUPTOOLS [tool.setuptools] [tool.setuptools.packages.find] where = ["."] # list of folders that contain the packages (["."] by default) include = [ # package names should match these glob patterns (["*"] by default) "aidge_core*" ] exclude = [ # exclude packages matching these glob patterns (empty by default) ".unit_tests", ".unit_tests.static", ".aidge_export_aidge.__pycache__", ".aidge_export_aidge.utils.__pycache__", ] ##################################################### # CIBUILDWHEEL [tool.cibuildwheel] build-frontend = "build" test-requires = "pytest" # WARNING: in the test suite the `test_export.py` used to be skipped # because it did not build when the python embedded interpreter is not available # as it is the case for cibuildwheel containers. # Now the build system takes care of this and skips the generation of a standalone # executable when it is not possible. # The root causes for this conditional build is that 1. the python embedded interpreter # is not alweays available, and 2. the aidge_core library depends on it as of now. # Hopefully this latter dependency may be removed in the future, simplifying the build. test-command = "pytest -v --capture=no {package}/aidge_core/unit_tests" # uncomment to run cibuildwheel locally on selected distros # build=[ # "cp38-manylinux_x86_64", # "cp39-manylinux_x86_64", # "cp38-win_amd64", # "cp39-win_amd64", # "cp310-win_amd64", # ] ### AIDGE DEPENDENCIES DECLARATION [tool.cibuildwheel.environment] # aidge_core do not rely on any aidge dependency, hence this string is empty AIDGE_DEPENDENCIES = "" # format => "dep_1 dep_2 ... dep_n" AIDGE_INSTALL="/AIDGE_INSTALL_CIBUILDWHEEL" [tool.cibuildwheel.linux] before-build = [ "bash .gitlab/ci/cibuildwheel_build_deps_before_build_wheel.sh /host" ] [tool.cibuildwheel.windows] before-build = [ "python -m pip debug -v", "powershell -File .\\.gitlab\\ci\\cibuildwheel_build_deps_before_build_wheel.ps1" ] ##################################################### # PYLINT [tool.pylint.main] # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. extension-pkg-allow-list = ["aidge_core", "torch", "tensorflow"] # Files or directories to be skipped. They should be base names, not paths. ignore = ["CVS"] # List of module names for which member attributes should not be checked (useful # for modules/projects where namespaces are manipulated during runtime and thus # existing member attributes cannot be deduced by static analysis). It supports # qualified module names, as well as Unix pattern matching. ignored-modules = ["aidge_core"] # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use, and will cap the count on Windows to # avoid hangs. jobs = 1 # Control the amount of potential inferred values when inferring a single object. # This can help the performance when dealing with large functions or complex, # nested conditions. limit-inference-results = 100 # Pickle collected data for later comparisons. persistent = true # Minimum Python version to use for version dependent checks. Will default to the # version used to run pylint. py-version = "3.7" # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. suggestion-mode = true [tool.pylint.basic] # Naming style matching correct argument names. argument-naming-style = "snake_case" # Naming style matching correct attribute names. attr-naming-style = "snake_case" # Bad variable names which should always be refused, separated by a comma. bad-names = ["foo", "bar", "baz", "toto", "tutu", "tata"] # Naming style matching correct class attribute names. class-attribute-naming-style = "any" # Naming style matching correct class constant names. class-const-naming-style = "UPPER_CASE" # Naming style matching correct class names. class-naming-style = "PascalCase" # Naming style matching correct constant names. const-naming-style = "UPPER_CASE" # Minimum line length for functions/classes that require docstrings, shorter ones # are exempt. docstring-min-length = -1 # Naming style matching correct function names. function-naming-style = "snake_case" # Good variable names which should always be accepted, separated by a comma. good-names = ["i", "j", "k", "ex", "Run", "_"] # Naming style matching correct inline iteration names. inlinevar-naming-style = "any" # Naming style matching correct method names. method-naming-style = "snake_case" # Naming style matching correct module names. module-naming-style = "snake_case" # Regular expression which should only match function or class names that do not # require a docstring. no-docstring-rgx = "^_" # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. These # decorators are taken in consideration only for invalid-name. property-classes = ["abc.abstractproperty"] # Naming style matching correct variable names. variable-naming-style = "snake_case" [tool.pylint.classes] # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods = ["__init__", "__new__", "setUp", "__post_init__"] # List of member names, which should be excluded from the protected access # warning. exclude-protected = ["_asdict", "_fields", "_replace", "_source", "_make"] # List of valid names for the first argument in a class method. valid-classmethod-first-arg = ["cls"] # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg = ["cls"] [tool.pylint.design] # Maximum number of arguments for function / method. max-args = 5 # Maximum number of attributes for a class (see R0902). max-attributes = 7 # Maximum number of boolean expressions in an if statement (see R0916). max-bool-expr = 5 # Maximum number of branch for function / method body. max-branches = 12 # Maximum number of locals for function / method body. max-locals = 15 # Maximum number of parents for a class (see R0901). max-parents = 7 # Maximum number of public methods for a class (see R0904). max-public-methods = 20 # Maximum number of return / yield for function / method body. max-returns = 6 # Maximum number of statements in function / method body. max-statements = 50 # Minimum number of public methods for a class (see R0903). min-public-methods = 2 [tool.pylint.exceptions] # Exceptions that will emit a warning when caught. overgeneral-exceptions = ["BaseException", "Exception"] [tool.pylint.format] # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. # expected-line-ending-format = # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines = "^\\s*(# )?<?https?://\\S+>?$" # Number of spaces of indent required inside a hanging or continued line. indent-after-paren = 4 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string = " " # Maximum number of characters on a single line. max-line-length = 200 # Maximum number of lines in a module. max-module-lines = 1000 [tool.pylint.imports] # Force import order to recognize a module as part of a third party library. known-third-party = ["enchant"] [tool.pylint.logging] # The type of string formatting that logging methods do. `old` means using % # formatting, `new` is for `{}` formatting. logging-format-style = "old" # Logging modules to check that the string format arguments are in logging # function parameter format. logging-modules = ["logging"] [tool.pylint."messages control"] # Only show warnings with the listed confidence levels. Leave empty to show all. # Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. confidence = ["HIGH", "CONTROL_FLOW", "INFERENCE", "INFERENCE_FAILURE", "UNDEFINED"] # Disable the message, report, category or checker with the given id(s). You can # either give multiple identifiers separated by comma (,) or put this option # multiple times (only on the command line, not in the configuration file where # it should appear only once). You can also use "--disable=all" to disable # everything first and then re-enable specific checks. For example, if you want # to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". disable = ["raw-checker-failed", "bad-inline-option", "locally-disabled", "file-ignored", "suppressed-message", "useless-suppression", "deprecated-pragma", "use-symbolic-message-instead", "use-implicit-booleaness-not-comparison-to-string", "use-implicit-booleaness-not-comparison-to-zero", "too-many-locals", "missing-class-docstring", "missing-function-docstring", "too-many-arguments", "protected-access", "too-many-branches", "too-many-ancestors", "wrong-import-order", "wrong-import-position"] # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where it # should appear only once). See also the "--disable" option for examples. enable = ["c-extension-no-member"] [tool.pylint.method_args] # List of qualified names (i.e., library.method) which require a timeout # parameter e.g. 'requests.api.get,requests.api.post' timeout-methods = ["requests.api.delete", "requests.api.get", "requests.api.head", "requests.api.options", "requests.api.patch", "requests.api.post", "requests.api.put", "requests.api.request"] [tool.pylint.miscellaneous] # List of note tags to take in consideration, separated by a comma. notes = ["FIXME", "XXX", "TODO"] # Regular expression of note tags to take in consideration. # notes-rgx = [tool.pylint.refactoring] # Maximum number of nested blocks for function / method body max-nested-blocks = 5 # Complete name of functions that never returns. When checking for inconsistent- # return-statements if a never returning function is called then it will be # considered as an explicit return statement and no message will be printed. never-returning-functions = ["sys.exit", "argparse.parse_error"] # Let 'consider-using-join' be raised when the separator to join on would be non- # empty (resulting in expected fixes of the type: ``"- " + " - ".join(items)``) suggest-join-with-non-empty-separator = true [tool.pylint.reports] # Python expression which should return a score less than or equal to 10. You # have access to the variables 'fatal', 'error', 'warning', 'refactor', # 'convention', and 'info' which contain the number of messages in each category, # as well as 'statement' which is the total number of statements analyzed. This # score is used by the global evaluation report (RP0004). evaluation = "10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)" # Activate the evaluation score. score = true [tool.pylint.similarities] # Comments are removed from the similarity computation ignore-comments = true # Docstrings are removed from the similarity computation ignore-docstrings = true # Minimum lines number of a similarity. min-similarity-lines = 4 [tool.pylint.spelling] # Limits count of emitted suggestions for spelling mistakes. max-spelling-suggestions = 4 # List of comma separated words that should be considered directives if they # appear at the beginning of a comment and should not be checked. spelling-ignore-comment-directives = "fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:" [tool.pylint.typecheck] # List of decorators that produce context managers, such as # contextlib.contextmanager. Add to this list to register other decorators that # produce valid context managers. contextmanager-decorators = ["contextlib.contextmanager"] # Tells whether missing members accessed in mixin class should be ignored. A # class is considered mixin if its name matches the mixin-class-rgx option. # Tells whether to warn about missing members when the owner of the attribute is # inferred to be None. ignore-none = true # This flag controls whether pylint should warn about no-member and similar # checks whenever an opaque object is returned when inferring. The inference can # return multiple potential results while evaluating a Python object, but some # branches might not be evaluated, which results in partial inference. In that # case, it might be useful to still emit no-member and other checks for the rest # of the inferred objects. ignore-on-opaque-inference = true # List of symbolic message names to ignore for Mixin members. ignored-checks-for-mixins = ["no-member", "not-async-context-manager", "not-context-manager", "attribute-defined-outside-init"] # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of # qualified names. ignored-classes = ["optparse.Values", "thread._local", "_thread._local", "aidge.global_variables", "aidge.cells.abstract_cell.Trainable", "torch", "tensorflow"] # Show a hint with possible names when a member name was not found. The aspect of # finding the hint is based on edit distance. missing-member-hint = true # The minimum edit distance a name should have in order to be considered a # similar match for a missing member name. missing-member-hint-distance = 1 # The total number of similar names that should be taken in consideration when # showing a hint for a missing member. missing-member-max-choices = 1 # Regex pattern to define which classes are considered mixins. mixin-class-rgx = ".*[Mm]ixin" [tool.pylint.variables] # Tells whether unused global variables should be treated as a violation. allow-global-unused-variables = true # List of strings which can identify a callback function by name. A callback name # must start or end with one of those strings. callbacks = ["cb_", "_cb"] # A regular expression matching the name of dummy variables (i.e. expected to not # be used). dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_" # Argument names that match this expression will be ignored. ignored-argument-names = "_.*|^ignored_|^unused_" # List of qualified module names which can have objects that can redefine # builtins. redefining-builtins-modules = ["six.moves", "past.builtins", "future.builtins", "builtins", "io"]