Change project builder to hatch

Update actions in Makefile
This commit is contained in:
2024-08-14 09:41:45 +02:00
parent b627bb7531
commit 85b56785c8
4 changed files with 45 additions and 43 deletions

View File

@@ -1,46 +1,36 @@
SHELL := /bin/bash SHELL := /bin/bash
.DEFAULT_GOAL := help .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: ## Run tests with coverage
coverage erase @coverage erase
coverage run -m unittest -v stree.tests @coverage run -m unittest -v stree.tests
coverage report -m @coverage report -m
deps: ## Install dependencies
pip install -r requirements.txt
devdeps: ## Install development dependencies
pip install black pip-audit flake8 mypy coverage
lint: ## Lint and static-check lint: ## Lint and static-check
black stree @black stree
flake8 stree @flake8 stree
mypy stree
push: ## Push code with tags
git push && git push --tags
test: ## Run tests test: ## Run tests
python -m unittest -v stree.tests @python -m unittest -v stree.tests
doc: ## Update documentation doc: ## Update documentation
make -C docs --makefile=Makefile html @make -C docs --makefile=Makefile html
build: ## Build package build: ## Build package
rm -fr dist/* @rm -fr dist/*
rm -fr build/* @rm -fr build/*
python setup.py sdist bdist_wheel @hatch build
doc-clean: ## Update documentation doc-clean: ## Clean documentation folders
make -C docs --makefile=Makefile clean @make -C docs --makefile=Makefile clean
audit: ## Audit pip audit: ## Audit pip
pip-audit @pip-audit
help: ## Show help message help: ## Show this help message
@IFS=$$'\n' ; \ @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 "%s\n\n" "Usage: make [task]"; \
printf "%-20s %s\n" "task" "help" ; \ printf "%-20s %s\n" "task" "help" ; \
printf "%-20s %s\n" "------" "----" ; \ printf "%-20s %s\n" "------" "----" ; \

View File

@@ -1,17 +1,10 @@
[build-system] [build-system]
requires = ["setuptools", "scikit-learn>1.0", "numpy", "mufs"] requires = ["hatchling"]
build-backend = "setuptools.build_meta" build-backend = "hatchling.build"
[tool.setuptools]
packages = ["stree"]
license-files = ["LICENSE"]
[tool.setuptools.dynamic]
version = { attr = "stree.__version__" }
[project] [project]
name = "STree" name = "STree"
dependencies = ["scikit-learn>1.0", "numpy", "mufs"] dependencies = ["scikit-learn>1.0", "mufs"]
license = { file = "LICENSE" } license = { file = "LICENSE" }
description = "Oblique decision tree with svm nodes." description = "Oblique decision tree with svm nodes."
readme = "README.md" readme = "README.md"
@@ -45,12 +38,19 @@ classifiers = [
] ]
[project.optional-dependencies] [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] [project.urls]
Code = "https://github.com/Doctorado-ML/STree" Code = "https://github.com/Doctorado-ML/STree"
Documentation = "https://stree.readthedocs.io/en/latest/index.html" 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] [tool.coverage.run]
branch = true branch = true
source = ["stree"] source = ["stree"]
@@ -62,7 +62,7 @@ fail_under = 100
[tool.black] [tool.black]
line-length = 79 line-length = 79
target_version = ['py311'] target-version = ["py311"]
include = '\.pyi?$' include = '\.pyi?$'
exclude = ''' exclude = '''
/( /(

View File

@@ -414,7 +414,8 @@ class Splitter:
) )
return tuple( return tuple(
sorted( sorted(
range(len(feature_list)), key=lambda sub: feature_list[sub] range(len(feature_list)),
key=lambda sub: feature_list[sub],
)[-max_features:] )[-max_features:]
) )
@@ -529,7 +530,10 @@ class Splitter:
return entropy return entropy
def information_gain( 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: ) -> float:
"""Compute information gain of a split candidate """Compute information gain of a split candidate

View File

@@ -175,7 +175,8 @@ class Stree(BaseEstimator, ClassifierMixin):
return __version__ return __version__
def __call__(self) -> str: 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() return self.version()
def _more_tags(self) -> dict: def _more_tags(self) -> dict:
@@ -188,7 +189,10 @@ class Stree(BaseEstimator, ClassifierMixin):
return {"requires_y": True} return {"requires_y": True}
def fit( 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": ) -> "Stree":
"""Build the tree based on the dataset of samples and its labels """Build the tree based on the dataset of samples and its labels
@@ -343,7 +347,11 @@ class Stree(BaseEstimator, ClassifierMixin):
) )
node.set_down( node.set_down(
self._train( 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 return node