Skip to content

Commit 64b7f95

Browse files
committed
more
1 parent ae8d9d1 commit 64b7f95

File tree

8 files changed

+169
-71
lines changed

8 files changed

+169
-71
lines changed

.github/workflows/cibuildwheel.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: quitefastmst wheels
2+
3+
on: workflow_dispatch
4+
5+
env:
6+
# TODO: manylinux aarch64
7+
# TODO: macos arm64
8+
CIBW_SKIP: cp2* pp* cp35* cp36* cp37* cp38* #*-win32 *-musllinux* *-macosx_*_universal2* *win_arm64* *-manylinux_arm64 *-manylinux_i686 *-manylinux_ppc64le *-manylinux_s390x *-manylinux_aarch64
9+
#CIBW_TEST_SKIP: "*-macosx_arm64"
10+
#CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
11+
CIBW_ARCHS: all
12+
13+
jobs:
14+
build_wheels:
15+
name: Build wheels on ${{ matrix.os }}
16+
runs-on: ${{ matrix.os }}
17+
strategy:
18+
matrix:
19+
os: [ubuntu-latest, windows-latest, macos-13, macos-14, macos-15]
20+
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- uses: actions/setup-python@v5
25+
26+
- name: Install requirements and build wheels
27+
run: |
28+
python -m pip install --upgrade pip
29+
python -m pip install --upgrade twine build wheel
30+
python -m pip install --upgrade numpy scipy cython
31+
python -m pip install --upgrade -r requirements.txt
32+
python -m pip install --upgrade cibuildwheel
33+
python -m cibuildwheel --output-dir wheelhouse
34+
35+
- uses: actions/upload-artifact@v4
36+
with:
37+
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
38+
path: ./wheelhouse/*.whl

.github/workflows/py.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: quitefastmst for Python
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
pull_request:
7+
branches: [ master ]
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
15+
16+
env:
17+
R_LIBS_SITE: /usr/lib/R/site-library
18+
19+
steps:
20+
- uses: actions/checkout@v4
21+
- name: Set up Python ${{ matrix.python-version }}
22+
uses: actions/setup-python@v5
23+
with:
24+
python-version: ${{ matrix.python-version }}
25+
- name: Install dependencies
26+
run: |
27+
sudo apt-get -y install libcurl4-openssl-dev python3-dev
28+
python3 -m venv python-venv
29+
source python-venv/bin/activate
30+
python3 -m pip install --upgrade pip
31+
if [ -f requirements.txt ]; then python3 -m pip install -r requirements.txt --upgrade; fi
32+
python3 -m pip install wheel scikit-learn scipy pytest --upgrade
33+
- name: Test and check Python
34+
run: |
35+
source python-venv/bin/activate
36+
python3 -m pip install .
37+
pytest

.github/workflows/r.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: quitefastmst for R
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
pull_request:
7+
branches: [ master ]
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
- name: Install dependencies
15+
run: |
16+
#sudo apt-get update
17+
#sudo apt-get -y upgrade
18+
sudo apt-get -y install libcurl4-openssl-dev r-base-dev
19+
sudo Rscript -e "install.packages(c('Rcpp', 'tinytest'))"
20+
- name: Test and check R
21+
run: |
22+
#sudo make r-check
23+
cd .. && sudo R CMD build quitefastmst && sudo R_DEFAULT_INTERNET_TIMEOUT=240 _R_CHECK_CRAN_INCOMING_REMOTE_=FALSE _R_CHECK_FORCE_SUGGESTS_=0 R CMD check `ls -t quitefastmst*.tar.gz | head -1` --as-cran --no-manual

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: quitefastmst
22
Type: Package
3-
Title: Euclidean and Mutual Reachability Distance Minimum Spanning Trees
3+
Title: Euclidean and Mutual Reachability Minimum Spanning Trees
44
Version: 0.9.0
55
Date: 2025-07-21
66
Authors@R: c(

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ weave:
6666
news:
6767
cd .devel/sphinx && cp ../../NEWS news.md
6868

69-
html: python r news weave rd2myst weave-examples
69+
html: news weave rd2myst weave-examples
7070
rm -rf .devel/sphinx/_build/
7171
cd .devel/sphinx && make html
7272
.devel/sphinx/fix-html.sh .devel/sphinx/_build/html/rapi/
@@ -75,7 +75,7 @@ html: python r news weave rd2myst weave-examples
7575
@echo "*** Browse the generated documentation at"\
7676
"file://`pwd`/.devel/sphinx/_build/html/index.html"
7777

78-
docs: html
78+
docs: python r html
7979
@echo "*** Making 'docs' is only recommended when publishing the "\
8080
"official release, because it updates the package homepage."
8181
@echo "*** Therefore, we check if the package version is like 1.2.3 "\

NEWS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Changelog
22

3-
## to-be 1.0.0 ... (2025-xx-xx)
3+
## to-be 0.9.0 ... (2025-xx-xx)
44

55
* TO DO [R] Initial CRAN release.
66

README.md

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,84 @@
11
<a href="https://quitefastmst.gagolewski.com"><img src="https://www.gagolewski.com/_static/img/quitefastmst.png" align="right" height="128" width="128" /></a>
2-
# [**quitefastmst**](https://quitefastmst.gagolewski.com/) Package for R and Python
2+
# [*quitefastmst*](https://quitefastmst.gagolewski.com/) Package for R and Python
33

4-
**TO DO: this package is a work in progress**
4+
**TO DO: this package is a work in progress****check back later**
55

6-
**check back later**
76

8-
9-
10-
11-
### *quitefastmst*: Euclidean and Mutual Reachability Distance Minimum Spanning Trees
7+
### *quitefastmst*: Euclidean and Mutual Reachability Minimum Spanning Trees
128

139

1410
![quitefastmst for Python](https://github.com/gagolews/quitefastmst/workflows/quitefastmst%20for%20Python/badge.svg)
1511
![quitefastmst for R](https://github.com/gagolews/quitefastmst/workflows/quitefastmst%20for%20R/badge.svg)
1612

1713

18-
> A comprehensive tutorial, benchmarks, and a reference manual is available
19-
at <https://quitefastmst.gagolewski.com/>.
2014

2115

16+
Package **features**:
2217

23-
## Author and Contributors
18+
* [Euclidean Minimum Spanning Trees](https://en.wikipedia.org/wiki/Euclidean_minimum_spanning_tree)
19+
using single-, sesqui-, and dual-tree Borůvka algorithms – quite fast
20+
in spaces of low intrinsic dimensionality,
2421

25-
**Author and Maintainer**: [Marek Gagolewski](https://www.gagolewski.com/)
22+
* support for mutual reachability distances based on the Euclidean metric
23+
(like in the HDBSCAN\* algorithm; see Campello, Moulavi, Sander, 2013),
2624

25+
* Euclidean nearest neighbours with nicely-optimised K-d trees,
2726

28-
## About
27+
* relatively fast fallback algorithms for spaces of higher dimensionality,
2928

30-
TO DO
29+
* supports multiprocessing via OpenMP.
3130

32-
Package features:
3331

34-
* Euclidean Minimum Spanning Trees using single, sesqui, and
35-
dual-tree Boruvka algorithms – fast in spaces of low intrinsic dimensionality
32+
Refer to the package **homepage** at <https://quitefastmst.gagolewski.com/>
33+
for the reference manual, tutorials, examples, and benchmarks.
3634

37-
* support for mutual reachability distances based on the Euclidean metric
38-
(like in the HDBSCAN\* algorithm)
35+
**Author and maintainer**: [Marek Gagolewski](https://www.gagolewski.com/)
3936

40-
* Euclidean nearest neighbours with nicely-optimised K-d trees (support
41-
parallel processing)
4237

43-
* fallback algorithms for spaces of higher dimensionality
38+
Possible applications in data analysis:
39+
clustering (HDBSCAN\*, Genie, Single linkage, etc.),
40+
classification and regression (k-nearest neighbours),
41+
outlier and noise point detection, and many more.
4442

4543

4644

45+
## How to Install
4746

48-
## Examples, Tutorials, and Documentation
47+
### Python Version
4948

50-
TO DO
49+
To install from [PyPI](https://pypi.org/project/quitefastmst), call:
5150

52-
*To learn more about R, check out Marek's open-access (free!) textbook*
53-
[Deep R Programming](https://deepr.gagolewski.com/).
51+
```bash
52+
pip3 install quitefastmst # python3 -m pip install quitefastmst
53+
```
5454

55-
*To learn more about Python, check out Marek's recent open-access (free!) textbook*
55+
*To learn more about Python, check out my open-access textbook*
5656
[Minimalist Data Wrangling in Python](https://datawranglingpy.gagolewski.com/).
5757

5858

5959

60-
## How to Install
61-
62-
### Python Version
63-
64-
TO DO
65-
66-
6760
### R Version
6861

69-
TO DO
62+
To install from [CRAN](https://CRAN.R-project.org/package=quitefastmst), call:
7063

64+
```r
65+
install.packages("quitefastmst")
66+
```
67+
68+
*To learn more about R, check out my open-access textbook*
69+
[Deep R Programming](https://deepr.gagolewski.com/).
7170

7271

7372

7473
### Other
7574

76-
The core functionality is implemented in the form of a header-only
77-
C++ library. It can thus be easily adapted for use in other projects.
75+
The core functionality is implemented in the form of a C++ library.
76+
It can thus be easily adapted for use in other projects.
7877

7978
New contributions are welcome, e.g., Julia, Matlab/GNU Octave wrappers.
8079

8180

8281

83-
8482
## License
8583

8684
Copyright (C) 2025–2025 Marek Gagolewski <https://www.gagolewski.com/>
@@ -100,56 +98,58 @@ received a copy of the License along with this program. If not, see
10098

10199
## References
102100

103-
Borůvka O., O jistém problému minimálním,
104-
Práce Moravské Přírodovědecké Společnosti 3, 1926, 37–58.
101+
Borůvka, O., O jistém problému minimálním,
102+
*Práce Moravské Přírodovědecké Společnosti* **3**, 1926, 37–58.
105103

106-
Bentley J.L., Multidimensional binary search trees used for associative
107-
searching, Communications of the ACM 18(9), 509–517, 1975,
108-
DOI:10.1145/361002.361007.
104+
Bentley, J.L., Multidimensional binary search trees used for associative
105+
searching, *Communications of the ACM* **18**(9), 509–517, 1975,
106+
[DOI: 10.1145/361002.361007](https://doi.org/10.1145/361002.361007).
109107

110-
Campello R.J.G.B., Moulavi D., Zimek A., Sander J., Hierarchical
108+
Campello, R.J.G.B., Moulavi, D., Zimek, A., Sander, J., Hierarchical
111109
density estimates for data clustering, visualization, and outlier detection,
112-
ACM Transactions on Knowledge Discovery from Data (TKDD) 10(1),
113-
2015, 1–51, DOI:10.1145/2733381.
110+
*ACM Transactions on Knowledge Discovery from Data (TKDD)* **10**(1),
111+
2015, 1–51, [DOI: 10.1145/2733381](https://doi.org/10.1145/2733381).
114112

115-
Campello R.J.G.B., Moulavi D., Sander J.,
113+
Campello, R.J.G.B., Moulavi, D., Sander, J.,
116114
Density-based clustering based on hierarchical density estimates,
117115
*Lecture Notes in Computer Science* **7819**, 2013, 160–172.
118116
[DOI: 10.1007/978-3-642-37456-2_14](https://doi.org/10.1007/978-3-642-37456-2_14).
119117

120-
Gagolewski M., Cena A., Bartoszuk M., Brzozowski L.,
118+
Gagolewski, M., Cena, A., Bartoszuk, M., Brzozowski, L.,
121119
Clustering with minimum spanning trees: How good can it be?,
122120
*Journal of Classification* **42**, 2025, 90–112.
123121
[DOI: 10.1007/s00357-024-09483-1](https://doi.org/10.1007/s00357-024-09483-1).
124122

125-
Gagolewski M., A framework for benchmarking clustering algorithms,
123+
Gagolewski, M., A framework for benchmarking clustering algorithms,
126124
*SoftwareX* **20**, 2022, 101270.
127125
[DOI: 10.1016/j.softx.2022.101270](https://doi.org/10.1016/j.softx.2022.101270).
128126
<https://clustering-benchmarks.gagolewski.com/>.
129127

130-
Jarník V., O jistém problému minimálním,
131-
Práce Moravské Přírodovědecké Společnosti 6, 1930, 57–63.
128+
Jarník, V., O jistém problému minimálním,
129+
*Práce Moravské Přírodovědecké Společnosti* **6**, 1930, 57–63.
130+
131+
Maneewongvatana, S., Mount, D.M., It's okay to be skinny, if your friends
132+
are fat, *The 4th CGC Workshop on Computational Geometry*, 1999.
132133

133-
Maneewongvatana S., Mount D.M., It's okay to be skinny, if your friends
134-
are fat, The 4th CGC Workshop on Computational Geometry, 1999.
134+
March, W.B., Parikshit, R., Gray, A.G., Fast Euclidean minimum spanning
135+
tree: Algorithm, analysis, and applications,
136+
*Proc. 16th ACM SIGKDD Intl. Conf. Knowledge Discovery and Data Mining (KDD '10)*, 2010, 603–612.
135137

136-
March W.B., Parikshit R., Gray A.G., Fast Euclidean minimum spanning
137-
tree: Algorithm, analysis, and applications, Proc. 16th ACM SIGKDD Intl.
138-
Conf. Knowledge Discovery and Data Mining (KDD '10), 2010, 603–612.
139138
Olson C.F., Parallel algorithms for hierarchical clustering,
140-
Parallel Computing 21(8), 1995, 1313–1325.
139+
*Parallel Computing* **21**(8), 1995, 1313–1325.
141140

142-
McInnes L., Healy J., Accelerated hierarchical density-based
143-
clustering, IEEE Intl. Conf. Data Mining Workshops (ICMDW), 2017, 33–42,
144-
DOI:10.1109/ICDMW.2017.12.
141+
McInnes, L., Healy, J., Accelerated hierarchical density-based
142+
clustering, *IEEE Intl. Conf. Data Mining Workshops (ICMDW)*, 2017, 33–42,
143+
[DOI: 10.1109/ICDMW.2017.12](https://doi.org/10.1109/ICDMW.2017.12).
145144

146-
Prim R., Shortest connection networks and some generalizations,
147-
The Bell System Technical Journal 36(6), 1957, 1389–1401.
145+
Prim, R., Shortest connection networks and some generalizations,
146+
*The Bell System Technical Journal* **36**(6), 1957, 1389–1401.
148147

149-
Sample N., Haines M., Arnold M., Purcell T., Optimizing search
150-
strategies in K-d Trees, 5th WSES/IEEE Conf. on Circuits, Systems,
151-
Communications & Computers (CSCC'01), 2001.
148+
Sample, N., Haines, M., Arnold, M., Purcell, T.,
149+
Optimizing search strategies in K-d Trees,
150+
*5th WSES/IEEE Conf. on Circuits, Systems, Communications & Computers (CSCC'01)*,
151+
2001.
152152

153153

154-
See the package's [homepage](https://quitefastmst.gagolewski.com/) for more
155-
references.
154+
See the package's [homepage](https://quitefastmst.gagolewski.com/)
155+
for more references.

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def build_extensions(self):
142142
setuptools.setup(
143143
name="quitefastmst",
144144
version=__version__,
145-
description="quitefastmst: Euclidean and Mutual Reachability Distance Minimum Spanning Trees",
145+
description="quitefastmst: Euclidean and Mutual Reachability Minimum Spanning Trees",
146146
long_description=long_description,
147147
long_description_content_type="text/markdown",
148148
author="Marek Gagolewski",

0 commit comments

Comments
 (0)