Во время выполнения Ctest: «ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()» - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь установить библиотеку 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

...