astro-informatics / purify

Next-generation radio interferometric imaging.
https://astro-informatics.github.io/purify
GNU General Public License v2.0
16 stars 11 forks source link

Algo_factory test with ForwardBackward failing #313

Closed tkoskela closed 1 year ago

tkoskela commented 1 year ago

We get a segfault from is_converged() function. The problem appears to be happening inside the g_proximal proximal_norm within the objective_convergence function

Thread 1 "test_algo_facto" received signal SIGSEGV, Segmentation fault.
0x000055555562c3b8 in Eigen::DenseStorage<std::complex<double>, -1, -1, 1, 0>::rows (this=0x0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/DenseStorage.h:544
544         EIGEN_DEVICE_FUNC Index rows(void) const {return m_rows;}
(gdb) bt
#0  0x000055555562c3b8 in Eigen::DenseStorage<std::complex<double>, -1, -1, 1, 0>::rows (this=0x0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/DenseStorage.h:544
#1  0x000055555562399a in Eigen::PlainObjectBase<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> >::rows (this=0x0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/PlainObjectBase.h:151
#2  0x00005555556846d5 in Eigen::ArrayWrapper<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const>::rows (this=0x7fffffffc5f0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/ArrayWrapper.h:64
#3  0x00005555556ca5be in Eigen::EigenBase<Eigen::ArrayWrapper<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const> >::rows (this=0x7fffffffc5f0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/EigenBase.h:59
#4  0x00005555556c6c91 in Eigen::EigenBase<Eigen::ArrayWrapper<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const> >::size (this=0x7fffffffc5f0)
    at /home/mmcleod/.conan/data/eigen/3.3.7/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/Eigen/src/Core/EigenBase.h:66
#5  0x00005555556c5af3 in sopt::l1_norm<Eigen::ArrayWrapper<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const>, Eigen::ArrayWrapper<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const> > (input=..., 
    weights=...) at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/maths.h:118
#6  0x00005555556c49f7 in sopt::l1_norm<Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> > (input=..., weight=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/maths.h:125
#7  0x00005555556c3776 in sopt::algorithm::L1GProximal<std::complex<double> >::proximal_norm (this=0x55555671ebe0, x=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/l1_g_proximal.h:52
#8  0x0000555555643159 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::objective_convergence (this=0x5555565d84b0, obj_comm=..., scalvar=..., x=..., residual=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:319
#9  0x0000555555634a42 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::is_converged (this=0x5555565d84b0, scalvar=..., x=..., residual=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:331
#10 0x0000555555629e13 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::operator()(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&) const::{lambda(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&)#2}::operator()(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&) (this=0x5555565d84b0, x=..., residual=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:271
--Type <RET> for more, q to quit, c to continue without paging--
#11 0x000055555564366c in std::_Function_handler<bool (Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&), sopt::algorithm::ImagingForwardBackward<std::complex<double> >::operator()(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&) const::{lambda(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&)#2}>::_M_invoke(std::_Any_data const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&) (__functor=..., __args#0=..., __args#1=...) at /usr/include/c++/9/bits/std_function.h:285
#12 0x0000555555642e77 in std::function<bool (Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&)>::operator()(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1> const&) const (this=0x7fffffffcb80, __args#0=..., __args#1=...) at /usr/include/c++/9/bits/std_function.h:688
#13 0x000055555565187a in sopt::algorithm::ForwardBackward<std::complex<double> >::is_converged (this=0x7fffffffcb50, x=..., residual=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/forward_backward.h:132
#14 0x0000555555643e03 in sopt::algorithm::ForwardBackward<std::complex<double> >::operator() (this=0x7fffffffcb50, out=..., x_guess=..., res_guess=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/forward_backward.h:274
#15 0x00005555556351b7 in sopt::algorithm::ForwardBackward<std::complex<double> >::operator() (this=0x7fffffffcb50, out=..., guess=std::tuple containing = {...})
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/forward_backward.h:149
#16 0x000055555562a3a3 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::operator() (this=0x5555565d84b0, out=..., guess=..., res=...)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:283
#17 0x00005555556224a7 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::operator() (this=0x5555565d84b0, out=..., guess=std::tuple containing = {...})
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:161
#18 0x000055555561b518 in sopt::algorithm::ImagingForwardBackward<std::complex<double> >::operator() (this=0x5555565d84b0)
    at /home/mmcleod/.conan/data/sopt/4.0.0/_/_/package/bae3b45c509735da37c9f0e38d6e5a1de907180c/include/sopt/imaging_forward_backward.h:187
#19 0x00005555555fe7f8 in C_A_T_C_H_T_E_S_T_0 () at /home/mmcleod/lexci/purify/cpp/tests/algo_factory.cc:172
#20 0x00005555556f7124 in Catch::TestInvokerAsFunction::invoke (this=0x5555565d33f0) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:14332
#21 0x00005555556f6361 in Catch::TestCase::invoke (this=0x5555565fa8f0) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:14171
#22 0x00005555556f08d6 in Catch::RunContext::invokeActiveTestCase (this=0x7fffffffd7c0) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:13027
#23 0x00005555556f05fa in Catch::RunContext::runCurrentTest (this=0x7fffffffd7c0, redirectedCout="", redirectedCerr="")
    at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:13000
--Type <RET> for more, q to quit, c to continue without paging--
#24 0x00005555556ef0bc in Catch::RunContext::runTest (this=0x7fffffffd7c0, testCase=...) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:12761
#25 0x00005555556f21b5 in Catch::(anonymous namespace)::TestGroup::execute (this=0x7fffffffd7b0)
    at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:13354
#26 0x00005555556f3577 in Catch::Session::runInternal (this=0x7fffffffda60) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:13564
#27 0x00005555556f326d in Catch::Session::run (this=0x7fffffffda60) at /home/mmcleod/.conan/data/catch2/2.13.9/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/catch2/catch.hpp:13520
#28 0x00005555557098a1 in main (argc=1, argv=0x7fffffffdca8) at /home/mmcleod/lexci/purify/cpp/tests/common_catch_main.cc:24
tkoskela commented 1 year ago

My hypothesis is that we are not setting something we should in https://github.com/astro-informatics/purify/blob/31dcff9be82dafcf6c44fd10cd5644579a2a1f34/cpp/purify/algorithm_factory.h#L169-L190

We could compare to e.g. tests in sopt https://github.com/astro-informatics/sopt/blob/ae4c48e397b99d6b27b727744da292cb3f1817ce/cpp/tests/inpainting.cc#L59-L76 to figure out what is missing.

tkoskela commented 1 year ago

@mmcleod89 I assume this should have been closed by #315?

mmcleod89 commented 1 year ago

Yeah this is one of the things that was fixed, although it wasn't actually fixed by #315 but by a separate bug fix within SOPT itself. Do we want to close it now, or wait for the fix to be propagated to the main?

tkoskela commented 1 year ago

I suppose we can link this to ~#315~, I mean #302