ripser.py icon indicating copy to clipboard operation
ripser.py copied to clipboard

Build failure on GNU/Linux (GCC 11.1.0 and Python 3.9.6 on Arch Linux)

Open mahdisarikhani opened this issue 4 years ago • 2 comments

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.

mahdisarikhani avatar Sep 03 '21 19:09 mahdisarikhani

Thanks for notifying us. Are you interested in submitting a PR with your suggested changes?

sauln avatar Sep 05 '21 15:09 sauln

Sure, I have submitted the PR.

mahdisarikhani avatar Sep 05 '21 16:09 mahdisarikhani

This should be fixed in the most recent release! We can re-open if not

ctralie avatar Aug 16 '22 13:08 ctralie