From 85b56785c88a3c37b5e7fbe57a329ba410ee97ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Wed, 14 Aug 2024 09:41:45 +0200 Subject: [PATCH] Change project builder to hatch Update actions in Makefile --- Makefile | 42 ++++++++++++++++-------------------------- pyproject.toml | 24 ++++++++++++------------ stree/Splitter.py | 8 ++++++-- stree/Strees.py | 14 +++++++++++--- 4 files changed, 45 insertions(+), 43 deletions(-) diff --git a/Makefile b/Makefile index 9725e52..32e3db2 100644 --- a/Makefile +++ b/Makefile @@ -1,46 +1,36 @@ SHELL := /bin/bash .DEFAULT_GOAL := help -.PHONY: coverage deps help lint push test doc build +.PHONY: audit coverage help lint test doc doc-clean build coverage: ## Run tests with coverage - coverage erase - coverage run -m unittest -v stree.tests - coverage report -m - -deps: ## Install dependencies - pip install -r requirements.txt - -devdeps: ## Install development dependencies - pip install black pip-audit flake8 mypy coverage + @coverage erase + @coverage run -m unittest -v stree.tests + @coverage report -m lint: ## Lint and static-check - black stree - flake8 stree - mypy stree - -push: ## Push code with tags - git push && git push --tags + @black stree + @flake8 stree test: ## Run tests - python -m unittest -v stree.tests + @python -m unittest -v stree.tests doc: ## Update documentation - make -C docs --makefile=Makefile html + @make -C docs --makefile=Makefile html build: ## Build package - rm -fr dist/* - rm -fr build/* - python setup.py sdist bdist_wheel + @rm -fr dist/* + @rm -fr build/* + @hatch build -doc-clean: ## Update documentation - make -C docs --makefile=Makefile clean +doc-clean: ## Clean documentation folders + @make -C docs --makefile=Makefile clean audit: ## Audit pip - pip-audit + @pip-audit -help: ## Show help message +help: ## Show this help message @IFS=$$'\n' ; \ - help_lines=(`fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ + help_lines=(`grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ printf "%s\n\n" "Usage: make [task]"; \ printf "%-20s %s\n" "task" "help" ; \ printf "%-20s %s\n" "------" "----" ; \ diff --git a/pyproject.toml b/pyproject.toml index 184dff4..c7a6a28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,17 +1,10 @@ [build-system] -requires = ["setuptools", "scikit-learn>1.0", "numpy", "mufs"] -build-backend = "setuptools.build_meta" - -[tool.setuptools] -packages = ["stree"] -license-files = ["LICENSE"] - -[tool.setuptools.dynamic] -version = { attr = "stree.__version__" } +requires = ["hatchling"] +build-backend = "hatchling.build" [project] name = "STree" -dependencies = ["scikit-learn>1.0", "numpy", "mufs"] +dependencies = ["scikit-learn>1.0", "mufs"] license = { file = "LICENSE" } description = "Oblique decision tree with svm nodes." readme = "README.md" @@ -45,12 +38,19 @@ classifiers = [ ] [project.optional-dependencies] -dev = ["black", "flake8", "mypy", "coverage"] +dev = ["black", "flake8", "coverage", "hatch", "pip-audit"] +doc = ["sphinx", "myst-parser", "sphinx_rtd_theme", "sphinx-autodoc-typehints"] [project.urls] Code = "https://github.com/Doctorado-ML/STree" Documentation = "https://stree.readthedocs.io/en/latest/index.html" +[tool.hatch.version] +path = "stree/_version.py" + +[tool.hatch.build.targets.sdist] +include = ["/stree"] + [tool.coverage.run] branch = true source = ["stree"] @@ -62,7 +62,7 @@ fail_under = 100 [tool.black] line-length = 79 -target_version = ['py311'] +target-version = ["py311"] include = '\.pyi?$' exclude = ''' /( diff --git a/stree/Splitter.py b/stree/Splitter.py index 72867ac..051aab9 100644 --- a/stree/Splitter.py +++ b/stree/Splitter.py @@ -414,7 +414,8 @@ class Splitter: ) return tuple( sorted( - range(len(feature_list)), key=lambda sub: feature_list[sub] + range(len(feature_list)), + key=lambda sub: feature_list[sub], )[-max_features:] ) @@ -529,7 +530,10 @@ class Splitter: return entropy def information_gain( - self, labels: np.array, labels_up: np.array, labels_dn: np.array + self, + labels: np.array, + labels_up: np.array, + labels_dn: np.array, ) -> float: """Compute information gain of a split candidate diff --git a/stree/Strees.py b/stree/Strees.py index 4c242fd..e8ebdc8 100644 --- a/stree/Strees.py +++ b/stree/Strees.py @@ -175,7 +175,8 @@ class Stree(BaseEstimator, ClassifierMixin): return __version__ def __call__(self) -> str: - """Only added to comply with scikit-learn base estimator for ensemble""" + """Only added to comply with scikit-learn base sestimator for ensembles + """ return self.version() def _more_tags(self) -> dict: @@ -188,7 +189,10 @@ class Stree(BaseEstimator, ClassifierMixin): return {"requires_y": True} def fit( - self, X: np.ndarray, y: np.ndarray, sample_weight: np.array = None + self, + X: np.ndarray, + y: np.ndarray, + sample_weight: np.array = None, ) -> "Stree": """Build the tree based on the dataset of samples and its labels @@ -343,7 +347,11 @@ class Stree(BaseEstimator, ClassifierMixin): ) node.set_down( self._train( - X_D, y_d, sw_d, depth + 1, title + f" - Down({depth+1})" + X_D, + y_d, + sw_d, + depth + 1, + title + f" - Down({depth+1})", ) ) return node