From e653863dc40542c0b1453804c829115a4049f6db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20Kubler?= <gregoire.kubler@proton.me>
Date: Wed, 26 Jun 2024 17:35:15 +0200
Subject: [PATCH] feat : split the whole pyproject.toml back in multiple pieces
 as setuptools generates bugs when both are coexisting

---
 .gitlab/ci/cibuildwheel.toml |  28 ++
 .pylintrc                    | 645 +++++++++++++++++++++++++++++++++++
 pyproject.toml               | 384 ---------------------
 setup.py                     |  56 ++-
 4 files changed, 712 insertions(+), 401 deletions(-)
 create mode 100644 .gitlab/ci/cibuildwheel.toml
 create mode 100644 .pylintrc
 delete mode 100644 pyproject.toml

diff --git a/.gitlab/ci/cibuildwheel.toml b/.gitlab/ci/cibuildwheel.toml
new file mode 100644
index 000000000..acdcd940d
--- /dev/null
+++ b/.gitlab/ci/cibuildwheel.toml
@@ -0,0 +1,28 @@
+[tool.cibuildwheel]
+build-frontend = "build"
+test-requires = "pytest"
+test-command = "pytest {package}/aidge_core/unit_tests"
+# uncomment to run cibuildwheel locally on selected distros
+# build=[
+#     "cp38-manylinux_x86_64",
+#     "cp39-manylinux_x86_64",
+#     "cp310-manylinux_x86_64"
+# ]
+
+### AIDGE DEPENDENCIES DECLARATION
+[tool.cibuildwheel.linux.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.windows.environment]
+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 = [
+    "powershell -File .\\.gitlab\\ci\\cibuildwheel_build_deps_before_build_wheel.ps1"
+    ]
+
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 000000000..4fd004268
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,645 @@
+[MASTER]
+
+# 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
+
+# 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. (This is an alternative name to extension-pkg-allow-list
+# for backward compatibility.)
+extension-pkg-whitelist=
+
+# Return non-zero exit code if any of these messages/categories are detected,
+# even if score is above --fail-under value. Syntax same as enable. Messages
+# specified are enabled, while categories only check already-enabled messages.
+fail-on=
+
+# Specify a score threshold to be exceeded before program exits with error.
+fail-under=0.0
+
+# Files or directories to be skipped. They should be base names, not paths.
+ignore=CVS
+
+# Add files or directories matching the regex patterns to the ignore-list. The
+# regex matches against paths.
+ignore-paths=
+
+# Files or directories matching the regex patterns are skipped. The regex
+# matches against base names, not paths.
+ignore-patterns=
+
+# Python code to execute, usually for sys.path manipulation such as
+# pygtk.require().
+#init-hook=
+
+# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
+# number of processors available to use.
+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
+
+# List of plugins (as comma separated values of python module names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+# Pickle collected data for later comparisons.
+persistent=yes
+
+# When enabled, pylint would attempt to guess common misconfiguration and emit
+# user-friendly hints instead of false-positive error messages.
+suggestion-mode=yes
+
+# Allow loading of arbitrary C extensions. Extensions are imported into the
+# active Python interpreter and may run arbitrary code.
+unsafe-load-any-extension=no
+
+
+[MESSAGES CONTROL]
+
+# Only show warnings with the listed confidence levels. Leave empty to show
+# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
+confidence=
+
+# 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 reenable 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=print-statement,
+        parameter-unpacking,
+        unpacking-in-except,
+        old-raise-syntax,
+        backtick,
+        long-suffix,
+        old-ne-operator,
+        old-octal-literal,
+        import-star-module-level,
+        non-ascii-bytes-literal,
+        raw-checker-failed,
+        bad-inline-option,
+        locally-disabled,
+        file-ignored,
+        suppressed-message,
+        useless-suppression,
+        deprecated-pragma,
+        use-symbolic-message-instead,
+        apply-builtin,
+        basestring-builtin,
+        buffer-builtin,
+        cmp-builtin,
+        coerce-builtin,
+        execfile-builtin,
+        file-builtin,
+        long-builtin,
+        raw_input-builtin,
+        reduce-builtin,
+        standarderror-builtin,
+        unicode-builtin,
+        xrange-builtin,
+        coerce-method,
+        delslice-method,
+        getslice-method,
+        setslice-method,
+        no-absolute-import,
+        old-division,
+        dict-iter-method,
+        dict-view-method,
+        next-method-called,
+        metaclass-assignment,
+        indexing-exception,
+        raising-string,
+        reload-builtin,
+        oct-method,
+        hex-method,
+        nonzero-method,
+        cmp-method,
+        input-builtin,
+        round-builtin,
+        intern-builtin,
+        unichr-builtin,
+        map-builtin-not-iterating,
+        zip-builtin-not-iterating,
+        range-builtin-not-iterating,
+        filter-builtin-not-iterating,
+        using-cmp-argument,
+        eq-without-hash,
+        div-method,
+        idiv-method,
+        rdiv-method,
+        exception-message-attribute,
+        invalid-str-codec,
+        sys-max-int,
+        bad-python3-import,
+        deprecated-string-function,
+        deprecated-str-translate-call,
+        deprecated-itertools-function,
+        deprecated-types-field,
+        next-method-defined,
+        dict-items-not-iterating,
+        dict-keys-not-iterating,
+        dict-values-not-iterating,
+        deprecated-operator-function,
+        deprecated-urllib-function,
+        xreadlines-attribute,
+        deprecated-sys-function,
+        exception-escape,
+        comprehension-escape,
+        c-extension-no-member,
+        too-many-locals,
+        missing-class-docstring,
+        missing-function-docstring,
+        too-many-ancestor,
+        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
+
+
+[REPORTS]
+
+# Python expression which should return a score less than or equal to 10. You
+# have access to the variables 'error', 'warning', 'refactor', and 'convention'
+# 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)
+
+# Template used to display messages. This is a python new-style format string
+# used to format the message information. See doc for all details.
+#msg-template=
+
+# Set the output format. Available formats are text, parseable, colorized, json
+# and msvs (visual studio). You can also give a reporter class, e.g.
+# mypackage.mymodule.MyReporterClass.
+output-format=text
+
+# Tells whether to display a full report or only the messages.
+reports=no
+
+# Activate the evaluation score.
+score=yes
+
+
+[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
+
+
+[BASIC]
+
+# Naming style matching correct argument names.
+argument-naming-style=snake_case
+
+# Regular expression matching correct argument names. Overrides argument-
+# naming-style.
+#argument-rgx=
+
+# Naming style matching correct attribute names.
+attr-naming-style=snake_case
+
+# Regular expression matching correct attribute names. Overrides attr-naming-
+# style.
+#attr-rgx=
+
+# Bad variable names which should always be refused, separated by a comma.
+bad-names=foo,
+          bar,
+          baz,
+          toto,
+          tutu,
+          tata
+
+# Bad variable names regexes, separated by a comma. If names match any regex,
+# they will always be refused
+bad-names-rgxs=
+
+# Naming style matching correct class attribute names.
+class-attribute-naming-style=any
+
+# Regular expression matching correct class attribute names. Overrides class-
+# attribute-naming-style.
+#class-attribute-rgx=
+
+# Naming style matching correct class constant names.
+class-const-naming-style=UPPER_CASE
+
+# Regular expression matching correct class constant names. Overrides class-
+# const-naming-style.
+#class-const-rgx=
+
+# Naming style matching correct class names.
+class-naming-style=PascalCase
+
+# Regular expression matching correct class names. Overrides class-naming-
+# style.
+#class-rgx=
+
+# Naming style matching correct constant names.
+const-naming-style=UPPER_CASE
+
+# Regular expression matching correct constant names. Overrides const-naming-
+# style.
+#const-rgx=
+
+# 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
+
+# Regular expression matching correct function names. Overrides function-
+# naming-style.
+#function-rgx=
+
+# Good variable names which should always be accepted, separated by a comma.
+good-names=i,
+           j,
+           k,
+           ex,
+           Run,
+           _,
+
+# Good variable names regexes, separated by a comma. If names match any regex,
+# they will always be accepted
+good-names-rgxs=
+
+# Include a hint for the correct naming format with invalid-name.
+include-naming-hint=no
+
+# Naming style matching correct inline iteration names.
+inlinevar-naming-style=any
+
+# Regular expression matching correct inline iteration names. Overrides
+# inlinevar-naming-style.
+#inlinevar-rgx=
+
+# Naming style matching correct method names.
+method-naming-style=snake_case
+
+# Regular expression matching correct method names. Overrides method-naming-
+# style.
+#method-rgx=
+
+# Naming style matching correct module names.
+module-naming-style=snake_case
+
+# Regular expression matching correct module names. Overrides module-naming-
+# style.
+#module-rgx=
+
+# Colon-delimited sets of names that determine each other's naming style when
+# the name regexes allow several styles.
+name-group=
+
+# 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
+
+# Regular expression matching correct variable names. Overrides variable-
+# naming-style.
+#variable-rgx=
+
+
+[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
+
+# Allow the body of a class to be on the same line as the declaration if body
+# contains single statement.
+single-line-class-stmt=no
+
+# Allow the body of an if to be on the same line as the test if there is no
+# else.
+single-line-if-stmt=no
+
+
+[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
+
+
+[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=
+
+
+[SIMILARITIES]
+
+# Comments are removed from the similarity computation
+ignore-comments=yes
+
+# Docstrings are removed from the similarity computation
+ignore-docstrings=yes
+
+# Imports are removed from the similarity computation
+ignore-imports=no
+
+# Signatures are removed from the similarity computation
+ignore-signatures=no
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+
+[SPELLING]
+
+# Limits count of emitted suggestions for spelling mistakes.
+max-spelling-suggestions=4
+
+# Spelling dictionary name. Available dictionaries: none. To make it work,
+# install the 'python-enchant' package.
+spelling-dict=
+
+# List of comma separated words that should be considered directives if they
+# appear and the beginning of a comment and should not be checked.
+spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:
+
+# List of comma separated words that should not be checked.
+spelling-ignore-words=
+
+# A path to a file that contains the private dictionary; one word per line.
+spelling-private-dict-file=
+
+# Tells whether to store unknown words to the private dictionary (see the
+# --spelling-private-dict-file option) instead of raising a message.
+spelling-store-unknown-words=no
+
+
+[STRING]
+
+# This flag controls whether inconsistent-quotes generates a warning when the
+# character used as a quote delimiter is used inconsistently within a module.
+check-quote-consistency=no
+
+# This flag controls whether the implicit-str-concat should generate a warning
+# on implicit string concatenation in sequences defined over several lines.
+check-str-concat-over-line-jumps=no
+
+
+[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
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E1101 when accessed. Python regular
+# expressions are accepted.
+generated-members=
+
+# 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=yes
+
+# Tells whether to warn about missing members when the owner of the attribute
+# is inferred to be None.
+ignore-none=yes
+
+# 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=yes
+
+# 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,
+
+# 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
+
+# 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=yes
+
+# 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
+
+# List of decorators that change the signature of a decorated function.
+signature-mutators=
+
+
+[VARIABLES]
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid defining new builtins when possible.
+additional-builtins=
+
+# Tells whether unused global variables should be treated as a violation.
+allow-global-unused-variables=yes
+
+# List of names allowed to shadow builtins
+allowed-redefined-builtins=
+
+# 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. Default to name
+# with leading underscore.
+ignored-argument-names=_.*|^ignored_|^unused_
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# List of qualified module names which can have objects that can redefine
+# builtins.
+redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
+
+
+[CLASSES]
+
+# Warn about protected attribute access inside special methods
+check-protected-access-in-special-methods=no
+
+# 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
+
+
+[DESIGN]
+
+# List of qualified class names to ignore when countint class parents (see
+# R0901)
+ignored-parents=
+
+# 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
+
+
+[IMPORTS]
+
+# List of modules that can be imported at any level, not just the top level
+# one.
+allow-any-import-level=
+
+# Allow wildcard imports from modules that define __all__.
+allow-wildcard-with-all=no
+
+# Analyse import fallback blocks. This can be used to support both Python 2 and
+# 3 compatible code, which means that the block might have code that exists
+# only in one or another interpreter, leading to false positives when analysed.
+analyse-fallback-blocks=no
+
+# Deprecated modules which should not be used, separated by a comma.
+deprecated-modules=
+
+# Output a graph (.gv or any supported image format) of external dependencies
+# to the given file (report RP0402 must not be disabled).
+ext-import-graph=
+
+# Output a graph (.gv or any supported image format) of all (i.e. internal and
+# external) dependencies to the given file (report RP0402 must not be
+# disabled).
+import-graph=
+
+# Output a graph (.gv or any supported image format) of internal dependencies
+# to the given file (report RP0402 must not be disabled).
+int-import-graph=
+
+# Force import order to recognize a module as part of the standard
+# compatibility libraries.
+known-standard-library=
+
+# Force import order to recognize a module as part of a third party library.
+known-third-party=enchant
+
+# Couples of modules and preferred modules, separated by a comma.
+preferred-modules=
+
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when being caught. Defaults to
+# "BaseException, Exception".
+overgeneral-exceptions=BaseException,
+                       Exception
+
diff --git a/pyproject.toml b/pyproject.toml
deleted file mode 100644
index 2184db5ff..000000000
--- a/pyproject.toml
+++ /dev/null
@@ -1,384 +0,0 @@
-[project]
-name = "aidge_core"
-description="Core algorithms for operators and graph of the AIDGE framework"
-dependencies = [
-    "numpy>=1.21.6",
-    "Jinja2>=3.1.2"
-]
-requires-python = ">= 3.7"
-readme = "README.md"
-license = { file = "LICENSE" }
-classifiers = [ 
-    "Development Status :: 2 - Pre-Alpha",
-    "Programming Language :: Python :: 3"
-    ]
-dynamic = ["version"] # defined in tool.setuptools_scm
-
-[project.optional-dependencies]
-test = [
-    "pytest"
-]
-
-[build-system]
-requires = [
-    "setuptools>=64",
-    "setuptools_scm[toml]==7.1.0",
-    "cmake>=3.27.9",
-    "toml"
-]
-build-backend = "setuptools.build_meta"
-
-#####################################################
-# SETUPTOOLS
-[tool.setuptools]
-[tool.setuptools.packages.find]
-where = ["."]  # list of folders that contain the packages (["."] by default)
-include = ["aidge_core*"]  # package names should match these glob patterns (["*"] by default)
-exclude = ["aidge_core.unit_tests*"]  # exclude packages matching these glob patterns (empty by default)
-namespaces = false  # to disable scanning PEP 420 namespaces (true by default)
-# SETUPTOOLS_SCM
-[tool.setuptools_scm]
-write_to = "aidge_core/_version.py"
-
-#####################################################
-# CIBUILDWHEEL
-[tool.cibuildwheel]
-build-frontend = "build"
-test-requires = "pytest"
-test-command = "pytest {package}/aidge_core/unit_tests"
-# uncomment to run cibuildwheel locally on selected distros
-# build=[
-#     "cp38-manylinux_x86_64",
-#     "cp39-manylinux_x86_64",
-#     "cp310-manylinux_x86_64"
-# ]
-
-### AIDGE DEPENDENCIES DECLARATION
-[tool.cibuildwheel.linux.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.windows.environment]
-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 = [
-    "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.11"
-
-# 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"]
diff --git a/setup.py b/setup.py
index b055ad47b..dd61a3bba 100644
--- a/setup.py
+++ b/setup.py
@@ -1,3 +1,4 @@
+#! /usr/bin/env python3
 import sys
 import os
 import shutil
@@ -6,16 +7,21 @@ import multiprocessing
 
 from math import ceil
 
-import toml
-
+from setuptools import setup, Extension, find_packages
 from setuptools import setup, Extension
 from setuptools.command.build_ext import build_ext
 
+#######################################################
+# DEPENDENCIES
+third_party_dependencies = ["numpy>=1.21.6", "Jinja2>=3.1.2"]
+aidge_optional_dependencies = {"test": ["pytest"]}
+
 
-def get_project_name() -> str:
-    with open(pathlib.Path().absolute() / "pyproject.toml", "r") as file:
-        project_toml = toml.load(file)
-        return project_toml["project"]["name"]
+def clean_eggs():
+    eggs_dir = ".eggs"
+    if os.path.isdir(eggs_dir):
+        shutil.rmtree(eggs_dir)
+        print(f"Removed {eggs_dir} directory")
 
 
 class CMakeExtension(Extension):
@@ -47,9 +53,9 @@ class CMakeBuild(build_ext):
             else os.environ["AIDGE_PYTHON_BUILD_TYPE"]
         )
         install_path = (
-            os.path.join(sys.prefix, "lib", "libAidge")
-            if "AIDGE_INSTALL" not in os.environ
-            else os.environ["AIDGE_INSTALL"]
+            os.environ["AIDGE_INSTALL"]
+            if "AIDGE_INSTALL" in os.environ
+            else os.path.join(sys.prefix, "lib", "libAidge")
         )
         self.spawn(
             [
@@ -71,11 +77,11 @@ class CMakeBuild(build_ext):
             self.spawn(["cmake", "--install", ".", "--config", compile_type])
         os.chdir(str(cwd))
 
-        aidge_package = build_lib / (get_project_name())
+        aidge_package = build_lib / "aidge_core"
+        print(f"aidge_package path = {aidge_package.absolute()}")
 
         # Get "aidge core" package
-        # ext_lib = build_temp
-        print(build_temp.absolute())
+        print(f"Build directory = {build_temp.absolute()}")
         # Copy all shared object files from build_temp/lib to aidge_package
         for root, _, files in os.walk(build_temp.absolute()):
             for file in files:
@@ -83,19 +89,35 @@ class CMakeBuild(build_ext):
                     root != str(aidge_package.absolute())
                 ):
                     currentFile = os.path.join(root, file)
+                    print(f"currentFile = {currentFile}")
                     shutil.copy(currentFile, str(aidge_package.absolute()))
 
-        # Copy version.txt in aidge_package
-        os.chdir(os.path.dirname(__file__))
-        shutil.copy("version.txt", str(aidge_package.absolute()))
-
 
 if __name__ == "__main__":
     setup(
+        name="aidge_core",
+        description="Core algorithms for operators and graph of the AIDGE framework",
+        python_requires=">=3.7",
+        setup_requires=[
+            "setuptools>=64",
+            "setuptools_scm[toml]==7.1.0",
+            "cmake>=3.27.9",
+        ],
+        install_require=third_party_dependencies,
+        extras_require=aidge_optional_dependencies,
+        readme="README.md",
+        license="LICENSE",
+        classifiers=[
+            "Development Status :: 2 - Pre-Alpha",
+            "Programming Language :: Python :: 3",
+        ],
+        use_scm_version=True,
+        packages=find_packages(where="."),
         include_package_data=True,
-        ext_modules=[CMakeExtension(get_project_name())],
+        ext_modules=[CMakeExtension("aidge_core")],
         cmdclass={
             "build_ext": CMakeBuild,
         },
         zip_safe=False,
     )
+    clean_eggs()
-- 
GitLab