forked from fastcluster/fastcluster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.py
132 lines (119 loc) · 6.77 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env python
# -*- coding: utf-8 -*-
u'''
fastcluster: Fast hierarchical clustering routines for R and Python
Copyright:
* Until package version 1.1.23: © 2011 Daniel Müllner <http://danifold.net>
* All changes from version 1.1.24 on: © Google Inc. <http://google.com>
'''
import os
import sys
import numpy
from setuptools import setup, Extension
from io import open
with open('fastcluster.py', encoding='utf_8') as f:
for line in f:
if line.find('__version_info__ =') == 0:
version = '.'.join(line.split("'")[1:-1:2])
break
print('Fastcluster version: ' + version)
print('Python version: ' + sys.version)
setup(name='fastcluster',
version=version,
py_modules=['fastcluster'],
description='Fast hierarchical clustering routines for R and Python.',
long_description=u"""
This library provides Python functions for hierarchical clustering. It
generates hierarchical clusters from distance matrices or from vector data.
This module is intended to replace the functions
```
linkage, single, complete, average, weighted, centroid, median, ward
```
in the module [`scipy.cluster.hierarchy`](
https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html) with the same
functionality but much faster algorithms. Moreover, the function
`linkage_vector` provides memory-efficient clustering for vector data.
The interface is very similar to MATLAB's Statistics Toolbox API to make code
easier to port from MATLAB to Python/NumPy. The core implementation of this
library is in C++ for efficiency.
**User manual:** [fastcluster.pdf](
https://github.com/dmuellner/fastcluster/raw/master/docs/fastcluster.pdf).
The “Yule” distance function changed in fastcluster version 1.2.0. This is
following a [change in SciPy 1.6.3](
https://github.com/scipy/scipy/commit/3b22d1da98dc1b5f64bc944c21f398d4ba782bce).
It is recommended to use fastcluster version 1.1.x together with SciPy versions
before 1.6.3 and fastcluster 1.2.x with SciPy ≥1.6.3.
The fastcluster package is considered stable and will undergo few changes
from now on. If some years from now there have not been any updates, this does
not necessarily mean that the package is unmaintained but maybe it just was
not necessary to correct anything. Of course, please still report potential
bugs and incompatibilities to [email protected]. You may also use
[my GitHub repository](https://github.com/dmuellner/fastcluster/)
for bug reports, pull requests etc.
Note that [PyPI](https://pypi.org/project/fastcluster/) and [my GitHub
repository](https://github.com/dmuellner/fastcluster/) host the source code
for the Python interface only. The archive with both the R and the Python
interface is available on
[CRAN](https://CRAN.R-project.org/package=fastcluster) and the GitHub repository
[“cran/fastcluster”](https://github.com/cran/fastcluster). Even though I appear
as the author also of this second GitHub repository, this is just an automatic,
read-only mirror of the CRAN archive, so please do not attempt to report bugs or
contact me via this repository.
Installation files for Windows are provided on [PyPI](
https://pypi.org/project/fastcluster/#files) and on [Christoph Gohlke's web
page](http://www.lfd.uci.edu/~gohlke/pythonlibs/#fastcluster).
Christoph Dalitz wrote a pure [C++ interface to fastcluster](
https://lionel.kr.hs-niederrhein.de/~dalitz/data/hclust/).
Reference: Daniel Müllner, *fastcluster: Fast Hierarchical, Agglomerative
Clustering Routines for R and Python*, Journal of Statistical Software, **53**
(2013), no. 9, 1–18, https://doi.org/10.18637/jss.v053.i09.
""",
long_description_content_type='text/markdown',
python_requires='>=3',
requires=['numpy'],
install_requires=["numpy>=1.9"],
extras_require={'test': ['scipy>=1.6.3']},
provides=['fastcluster'],
ext_modules=[Extension('_fastcluster',
['src/fastcluster_python.cpp'],
extra_compile_args=['/EHsc'] if os.name == 'nt' else [],
include_dirs=[numpy.get_include()],
# Feel free to uncomment the line below if you use the GCC.
# This switches to more aggressive optimization and turns
# more warning switches on. No warning should appear in
# the compilation process.
#
# Also, the author's Python distribution generates debug
# symbols by default. This can be turned off, resulting a in
# much smaller compiled library.
#
# Optimization
#extra_compile_args=['-O2', '-g0', '-march=native', '-mtune=native', '-fno-math-errno'],
#
# List of all warning switches, somewhere from stackoverflow.com
#extra_compile_args=['-Wall', '-Weffc++', '-Wextra', '-Wall', '-Wcast-align', '-Wchar-subscripts', '-Wcomment', '-Wconversion', '-Wsign-conversion', '-Wdisabled-optimization', '-Wfloat-equal', '-Wformat', '-Wformat=2', '-Wformat-nonliteral', '-Wformat-security', '-Wformat-y2k', '-Wimport', '-Winit-self', '-Winline', '-Winvalid-pch', '-Wunsafe-loop-optimizations', '-Wmissing-braces', '-Wmissing-field-initializers', '-Wmissing-format-attribute', '-Wmissing-include-dirs', '-Wmissing-noreturn', '-Wpacked', '-Wparentheses', '-Wpointer-arith', '-Wredundant-decls', '-Wreturn-type', '-Wsequence-point', '-Wshadow', '-Wsign-compare', '-Wstack-protector', '-Wstrict-aliasing', '-Wstrict-aliasing=2', '-Wswitch', '-Wswitch-enum', '-Wtrigraphs', '-Wuninitialized', '-Wunknown-pragmas', '-Wunreachable-code', '-Wunused', '-Wunused-function', '-Wunused-label', '-Wunused-parameter', '-Wunused-value', '-Wunused-variable', '-Wvariadic-macros', '-Wvolatile-register-var', '-Wwrite-strings', '-Wlong-long', '-Wpadded', '-Wcast-qual', '-Wswitch-default', '-Wnon-virtual-dtor', '-Wold-style-cast', '-Woverloaded-virtual', '-Waggregate-return', '-Werror'],
#
# Linker optimization
#extra_link_args=['-Wl,--strip-all'],
)],
keywords=['dendrogram', 'linkage', 'cluster', 'agglomerative',
'hierarchical', 'hierarchy', 'ward'],
author=u"Daniel Müllner",
author_email="[email protected]",
license="BSD <http://opensource.org/licenses/BSD-2-Clause>",
classifiers=[
"Topic :: Scientific/Engineering :: Information Analysis",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Scientific/Engineering :: Bio-Informatics",
"Topic :: Scientific/Engineering :: Mathematics",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: C++",
"Operating System :: OS Independent",
"License :: OSI Approved :: BSD License",
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
"Intended Audience :: Science/Research",
"Development Status :: 5 - Production/Stable"],
url='http://danifold.net',
test_suite='tests.fastcluster_test',
)