ripser.py
ripser.py copied to clipboard
Build failure on GNU/Linux (GCC 11.1.0 and Python 3.9.6 on Arch Linux)
Hi there,
Installing ripser.py on GNU/Linux with GCC 11 fails with the following error:
$ python setup.py install --user
running install
running bdist_egg
running egg_info
writing ripser.egg-info/PKG-INFO
writing dependency_links to ripser.egg-info/dependency_links.txt
writing requirements to ripser.egg-info/requires.txt
writing top-level names to ripser.egg-info/top_level.txt
reading manifest file 'ripser.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE.txt'
writing manifest file 'ripser.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
running build_ext
building 'pyRipser' extension
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -DUSE_COEFFICIENTS=1 -DNDEBUG=1 -DASSEMBLE_REDUCTION_MATRIX=1 -I./ripser -I/usr/include/python3.9 -I/usr/lib/python3.9/site-packages/numpy/core/include -c ripser/pyRipser.cpp -o build/temp.linux-x86_64-3.9/ripser/pyRipser.o -Ofast -D_hypot=hypot -std=c++11
In file included from /usr/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h:1944,
from /usr/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
from /usr/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h:4,
from ripser/pyRipser.cpp:672:
/usr/lib/python3.9/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
17 | #warning "Using deprecated NumPy API, disable it with " \
| ^~~~~~~
In file included from ripser/pyRipser.cpp:685:
ripser/ripser.cpp:163:13: warning: attribute ignored in declaration of ‘struct entry_t’ [-Wattributes]
163 | PACK(struct entry_t {
| ^~~~~~~
ripser/ripser.cpp:160:49: note: in definition of macro ‘PACK’
160 | #define PACK( ... ) __attribute__((__packed__)) __VA_ARGS__
| ^~~~~~~~~~~
ripser/ripser.cpp:163:13: note: attribute for ‘struct entry_t’ must follow the ‘struct’ keyword
163 | PACK(struct entry_t {
| ^~~~~~~
ripser/ripser.cpp:160:49: note: in definition of macro ‘PACK’
160 | #define PACK( ... ) __attribute__((__packed__)) __VA_ARGS__
| ^~~~~~~~~~~
ripser/ripser.cpp: In member function ‘void ripser<DistanceMatrix>::compute_dim_0_pairs(std::vector<std::pair<float, long int> >&, std::vector<std::pair<float, long int> >&)’:
ripser/ripser.cpp:707:26: error: ‘numeric_limits’ is not a member of ‘std’
707 | std::numeric_limits<value_t>::infinity());
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:707:48: error: expected primary-expression before ‘>’ token
707 | std::numeric_limits<value_t>::infinity());
| ^
ripser/ripser.cpp:707:51: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
707 | std::numeric_limits<value_t>::infinity());
| ^~~~~~~~
| isfinite
ripser/ripser.cpp: In member function ‘void ripser<DistanceMatrix>::compute_pairs(std::vector<std::pair<float, long int> >&, ripser<DistanceMatrix>::entry_hash_map&, index_t)’:
ripser/ripser.cpp:923:30: error: ‘numeric_limits’ is not a member of ‘std’
923 | std::numeric_limits<value_t>::infinity());
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:923:52: error: expected primary-expression before ‘>’ token
923 | std::numeric_limits<value_t>::infinity());
| ^
ripser/ripser.cpp:923:55: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
923 | std::numeric_limits<value_t>::infinity());
| ^~~~~~~~
| isfinite
ripser/ripser.cpp: In function ‘ripserResults rips_dm(float*, int, int, int, float, int)’:
ripser/ripser.cpp:1146:24: error: ‘numeric_limits’ is not a member of ‘std’
1146 | value_t min = std::numeric_limits<value_t>::infinity(),
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1146:46: error: expected primary-expression before ‘>’ token
1146 | value_t min = std::numeric_limits<value_t>::infinity(),
| ^
ripser/ripser.cpp:1146:49: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
1146 | value_t min = std::numeric_limits<value_t>::infinity(),
| ^~~~~~~~
| isfinite
ripser/ripser.cpp:1153:27: error: ‘numeric_limits’ is not a member of ‘std’
1153 | if (threshold == std::numeric_limits<value_t>::max() ||
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1153:49: error: expected primary-expression before ‘>’ token
1153 | if (threshold == std::numeric_limits<value_t>::max() ||
| ^
ripser/ripser.cpp:1153:52: error: ‘::max’ has not been declared; did you mean ‘std::max’?
1153 | if (threshold == std::numeric_limits<value_t>::max() ||
| ^~~
| std::max
In file included from /usr/include/c++/11.1.0/algorithm:62,
from ripser/ripser.cpp:41,
from ripser/pyRipser.cpp:685:
/usr/include/c++/11.1.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
3467 | max(initializer_list<_Tp> __l, _Compare __comp)
| ^~~
In file included from ripser/pyRipser.cpp:685:
ripser/ripser.cpp:1154:27: error: ‘numeric_limits’ is not a member of ‘std’
1154 | threshold == std::numeric_limits<value_t>::infinity()) {
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1154:49: error: expected primary-expression before ‘>’ token
1154 | threshold == std::numeric_limits<value_t>::infinity()) {
| ^
ripser/ripser.cpp:1154:52: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
1154 | threshold == std::numeric_limits<value_t>::infinity()) {
| ^~~~~~~~
| isfinite
ripser/ripser.cpp:1155:41: error: ‘numeric_limits’ is not a member of ‘std’
1155 | value_t enclosing_radius = std::numeric_limits<value_t>::infinity();
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1155:63: error: expected primary-expression before ‘>’ token
1155 | value_t enclosing_radius = std::numeric_limits<value_t>::infinity();
| ^
ripser/ripser.cpp:1155:66: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
1155 | value_t enclosing_radius = std::numeric_limits<value_t>::infinity();
| ^~~~~~~~
| isfinite
ripser/ripser.cpp:1157:33: error: ‘numeric_limits’ is not a member of ‘std’
1157 | value_t r_i = -std::numeric_limits<value_t>::infinity();
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1157:55: error: expected primary-expression before ‘>’ token
1157 | value_t r_i = -std::numeric_limits<value_t>::infinity();
| ^
ripser/ripser.cpp:1157:58: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
1157 | value_t r_i = -std::numeric_limits<value_t>::infinity();
| ^~~~~~~~
| isfinite
ripser/ripser.cpp:1167:9: error: ‘max’ was not declared in this scope; did you mean ‘std::max’?
1167 | max = std::max(max, d);
| ^~~
| std::max
In file included from /usr/include/c++/11.1.0/algorithm:62,
from ripser/ripser.cpp:41,
from ripser/pyRipser.cpp:685:
/usr/include/c++/11.1.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
3467 | max(initializer_list<_Tp> __l, _Compare __comp)
| ^~~
In file included from ripser/pyRipser.cpp:685:
ripser/ripser.cpp:1168:9: error: ‘max_finite’ was not declared in this scope; did you mean ‘isfinite’?
1168 | max_finite = d != std::numeric_limits<value_t>::infinity()
| ^~~~~~~~~~
| isfinite
ripser/ripser.cpp:1168:32: error: ‘numeric_limits’ is not a member of ‘std’
1168 | max_finite = d != std::numeric_limits<value_t>::infinity()
| ^~~~~~~~~~~~~~
ripser/ripser.cpp:1168:54: error: expected primary-expression before ‘>’ token
1168 | max_finite = d != std::numeric_limits<value_t>::infinity()
| ^
ripser/ripser.cpp:1168:57: error: ‘::infinity’ has not been declared; did you mean ‘isfinite’?
1168 | max_finite = d != std::numeric_limits<value_t>::infinity()
| ^~~~~~~~
| isfinite
ripser/ripser.cpp:1176:22: error: ‘max’ was not declared in this scope; did you mean ‘std::max’?
1176 | if (threshold >= max) {
| ^~~
| std::max
In file included from /usr/include/c++/11.1.0/algorithm:62,
from ripser/ripser.cpp:41,
from ripser/pyRipser.cpp:685:
/usr/include/c++/11.1.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
3467 | max(initializer_list<_Tp> __l, _Compare __comp)
| ^~~
error: command '/usr/bin/gcc' failed with exit code 1
I think it is because of header dependency changes in GCC 11. The error should be fixed by including <limits> in ripser/ripser.cpp.
Thanks for notifying us. Are you interested in submitting a PR with your suggested changes?
Sure, I have submitted the PR.
This should be fixed in the most recent release! We can re-open if not