Я пытаюсь установить библиотеку BoostNumpy [1], которая отправляет меня в . / Configure и make test executet by ctest.В терминале появляется следующее сообщение об ошибке:
Test project /home/miquel/Desktop/Uni/KaluzaKleinDM/BoostNumpy-master/build
Start 1: dtype_test
1/4 Test #1: dtype_test ....................... Passed 0.13 sec
Start 2: ndarray_test
2/4 Test #2: ndarray_test ..................... Passed 0.10 sec
Start 3: indexing_test
3/4 Test #3: indexing_test .................... Passed 0.07 sec
Start 4: dstream_test
4/4 Test #4: dstream_test .....................***Failed Error regular expression found in output. Regex=[ERROR\:] 0.19 sec
75% tests passed, 1 tests failed out of 4
Total Test time (real) = 0.49 sec
The following tests FAILED:
4 - dstream_test (Failed)
Errors while running CTest
Makefile:85: recipe for target 'test' failed
make: *** [test] Error 8
Очевидно, что существует проблема с четвертым тестом.Я использовал (ctest -r dstream_test -VV) в терминале для полного отображения ошибок, следуя тому, что было рекомендовано в [2].Следующее сообщение появляется несколько раз:
ERROR: test_binary_functions (__main__.TestDstream)
4: ----------------------------------------------------------------------
4: Traceback (most recent call last):
4: File "/home/miquel/Desktop/Uni/KaluzaKleinDM/BoostNumpy-master/test/dstream_test.py", line 90, in test_binary_functions
4: dstream_test_module.binary_to_T_mult__double(a1, a2, out=o)
4: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
dstream_test.py - файл Python.Я посмотрел на него, и он полон строк вроде (здесь, в частности, я показываю строки 88, 89, 90 и 91):
88 # Test the out keyword argument.
89 o = np.empty((self.N,), dtype=np.float64)
90 dstream_test_module.binary_to_T_mult__double(a1, a2, out=o)
91 self.assertTrue((o == r).all())
Я не могу обернуть голову вокруг этого.Этот код не мой, но вы можете найти его в [1], что заставляет меня задуматься, до какой степени я должен что-либо изменить.Строка 90 вызывает функцию в модуле (dstream_test_module), который является внутренним для программы.Файл модуля - dstream_test_module.cpp, который является файлом C ++.Я не знаком с C ++, но в файле я нашел вызывающие подпрограммы (эта для функции в строке 90):
// Binary non-void-return functions.
ds::def("binary_to_T_mult__double", &test::binary_to_T_mult<double>, (bp::args("v1"),"v2"));
ds::def("binary_to_T_mult__explmapping__double", &test::binary_to_T_mult<double>, (bp::args("v1"),"v2")
, ((ds::scalar(), ds::scalar()) >> ds::scalar()));
ds::def("binary_to_T_mult__allow_threads__double", &test::binary_to_T_mult<double>, (bp::args("v1"),"v2")
, ds::allow_threads());
ds::def("binary_to_T_mult__min_thread_size__double", &test::binary_to_T_mult<double>, (bp::args("v1"),"v2")
, ds::min_thread_size<32>());
ds::def("binary_to_vectorT__tuple__double", &test::binary_to_vectorT<double>, (bp::args("v1"),"v2")
, ((ds::scalar(), ds::scalar()) >> (ds::scalar(), ds::scalar())));
ds::def("binary_to_vectorT__array__double", &test::binary_to_vectorT<double>, (bp::args("v1"),"v2")
, ((ds::scalar(), ds::scalar()) >> ds::array<2>()));
Здесь мы не видим out = o аргумент принимается.Фактически, если я уберу аргумент out = o , сообщение об ошибке исчезнет, но это не должно быть решением, так как в этом случае мы просто пропускаем тест.Все остальные сообщения об ошибках следуют аналогичной схеме.Кто-нибудь знает, что с этим можно сделать?
[1] [https://github.com/martwo/BoostNumpy] [2] [ Как найти ошибку при выполнении ctest