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
.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" "------" "----" ; \

View File

@@ -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 = '''
/(

View File

@@ -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

View File

@@ -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