FIXED: Invert TRS Mismatch ============================== * Fixed with epsilon handling in nglmext::compDiff2. ISSUE --------- Need improved matrix comparison, with separate handling of translation and rotation portions. :: simon:opticks blyth$ tboolean-;tboolean-0-deserialize (lldb) target create "NCSGDeserializeTest" Current executable set to 'NCSGDeserializeTest' (x86_64). (lldb) settings set -- target.run-args "/tmp/blyth/opticks/tboolean-0-" (lldb) r Process 37780 launched: '/usr/local/opticks/lib/NCSGDeserializeTest' (x86_64) 2017-05-02 21:10:09.568 INFO [3740425] [main@37] argc 2 argv[0] NCSGDeserializeTest VERBOSITY 0 2017-05-02 21:10:09.577 INFO [3740425] [NTxt::read@63] NTxt::read path /tmp/blyth/opticks/tboolean-0-/csg.txt lines 12231 2017-05-02 21:10:09.577 INFO [3740425] [NCSG::Deserialize@715] NCSG::Deserialize VERBOSITY 0 basedir /tmp/blyth/opticks/tboolean-0- txtpath /tmp/blyth/opticks/tboolean-0-/csg.txt nbnd 12231 2017-05-02 21:10:09.577 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/12230 2017-05-02 21:10:09.578 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/12229 2017-05-02 21:10:09.578 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/12228 2017-05-02 21:10:09.579 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/12227 ... 2017-05-02 21:10:09.818 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/11418 2017-05-02 21:10:09.818 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/11417 2017-05-02 21:10:09.819 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/11416 2017-05-02 21:10:09.819 INFO [3740425] [NCSG::load@208] NCSG::load /tmp/blyth/opticks/tboolean-0-/11415 nglmext::invert_trs polar_decomposition inverse and straight inverse are mismatched diff 0.00012207 diff2 0.00012207 diffFractional 2 trs 0.354 0.354 -0.866 0.000 0.612 0.612 0.500 0.000 0.707 -0.707 0.000 0.000 6342.316 -2384.416 3909.600 1.000 isirit 0.354 0.612 0.707 0.000 0.354 0.612 -0.707 0.000 -0.866 0.500 0.000 0.000 1986.484 -4378.509 -6170.732 1.000 i_trs 0.354 0.612 0.707 -0.000 0.354 0.612 -0.707 0.000 -0.866 0.500 0.000 -0.000 1986.484 -4378.509 -6170.732 1.000 [ 0.353553: 0.353553: 0: 1][ 0.612372: 0.612372: 0: 1][ 0.707107: 0.707107: 0: 1][ 0: -0: 0: nan] [ 0.353553: 0.353553: 0: 1][ 0.612372: 0.612372: 0: 1][ -0.707107: -0.707107: 0: 1][ 0: 0: 0: nan] [ -0.866025: -0.866025: 0: 1][ 0.5: 0.5:5.96046e-08: 1][2.16489e-17: 0:2.16489e-17: inf][ 0: -0: 0: nan] [ 1986.48: 1986.48:0.00012207: 1][ -4378.51: -4378.51: 0: 1][ -6170.73: -6170.73: 0: 1][ 1: 1: 0: 1] Assertion failed: (match), function invert_trs, file /Users/blyth/opticks/opticksnpy/NGLMExt.cpp, line 154. Process 37780 stopped * thread #1: tid = 0x391309, 0x00007fff96061866 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT frame #0: 0x00007fff96061866 libsystem_kernel.dylib`__pthread_kill + 10 libsystem_kernel.dylib`__pthread_kill + 10: -> 0x7fff96061866: jae 0x7fff96061870 ; __pthread_kill + 20 0x7fff96061868: movq %rax, %rdi 0x7fff9606186b: jmp 0x7fff9605e175 ; cerror_nocancel 0x7fff96061870: retq (lldb) bt * thread #1: tid = 0x391309, 0x00007fff96061866 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00007fff96061866 libsystem_kernel.dylib`__pthread_kill + 10 frame #1: 0x00007fff8d6fe35c libsystem_pthread.dylib`pthread_kill + 92 frame #2: 0x00007fff9444eb1a libsystem_c.dylib`abort + 125 frame #3: 0x00007fff944189bf libsystem_c.dylib`__assert_rtn + 321 frame #4: 0x00000001008bd2db libNPY.dylib`nglmext::invert_trs(trs=0x00007fff5fbfd6b0)0> const&) + 2667 at NGLMExt.cpp:154 frame #5: 0x00000001006cdcbe libNPY.dylib`NPY::make_triple_transforms(src=0x00000001034ee720) + 238 at NPY.cpp:952 frame #6: 0x000000010089047a libNPY.dylib`NCSG::loadTransforms(this=0x00000001034ee2d0) + 1450 at NCSG.cpp:169 frame #7: 0x0000000100890f3e libNPY.dylib`NCSG::load(this=0x00000001034ee2d0) + 510 at NCSG.cpp:213 frame #8: 0x00000001008952a1 libNPY.dylib`NCSG::Deserialize(basedir=0x00007fff5fbff124, trees=0x00007fff5fbfeb30, verbosity=0) + 2353 at NCSG.cpp:734 frame #9: 0x0000000100004d4b NCSGDeserializeTest`test_Deserialize(basedir=0x00007fff5fbff124, verbosity=0) + 171 at NCSGDeserializeTest.cc:27 frame #10: 0x0000000100005194 NCSGDeserializeTest`main(argc=2, argv=0x00007fff5fbfee00) + 916 at NCSGDeserializeTest.cc:42 frame #11: 0x00007fff914d45fd libdyld.dylib`start + 1 (lldb) f 6 frame #6: 0x000000010089047a libNPY.dylib`NCSG::loadTransforms(this=0x00000001034ee2d0) + 1450 at NCSG.cpp:169 166 167 assert(NTRAN == 2 || NTRAN == 3); 168 -> 169 NPY* transforms = NTRAN == 2 ? NPY::make_paired_transforms(src) : NPY::make_triple_transforms(src) ; 170 assert(transforms->hasShape(ni,NTRAN,4,4)); 171 172 m_transforms = transforms ; (lldb) f 5 frame #5: 0x00000001006cdcbe libNPY.dylib`NPY::make_triple_transforms(src=0x00000001034ee720) + 238 at NPY.cpp:952 949 for(unsigned i=0 ; i < ni ; i++) 950 { 951 glm::mat4 t = src->getMat4(i); -> 952 glm::mat4 v = nglmext::invert_trs( t ); 953 glm::mat4 q = glm::transpose( v ) ; 954 955 dst->setMat4(t, i, 0 ); (lldb)