octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Release candidate for Qhull 2012.1


From: Brad Barber
Subject: Re: Release candidate for Qhull 2012.1
Date: Sun, 29 Jan 2012 19:46:55 -0500

>Looking at the Octave implementation, it looks to me (my c++ is weak so 
>skepticism of my reading is merited) like Octave passing "Qt" in this instance 
>if no options are specified.

That would explain the behavior on Lion, but the Fedora results indicate that 
'Qt' is  not given as the default option list.  All platforms should use the 
same default option string, otherwise 'm' programs will not be portable.

This looks like an Octave bug.  Octave should follow MathWork's conventions and 
make option 'Qt' the default on all platforms.  This changes the testcase.
    http://www.mathworks.com/help/techdoc/ref/convhulln.html
    http://www.qhull.org/html/qh-optq.htm#Qt

MathWork's documentation also indicates 'Qx' for 5-d and higher.  This option 
is not needed since it is automatically set by Qhull in 5-d and higher (unless 
'Q0' is set).
   http://www.qhull.org/html/qh-optq.htm#Qx

Without option 'Qt', users need to distinguish simplicial facets from 
non-simplicial facets (in 3-d, triangles vs. squares and other polygons).    
Modeling codes typically require simplicial facets.

                                                --Brad


At 07:15 PM 1/29/2012, Ben Abbott wrote:

>On Jan 29, 2012, at 5:35 PM, Brad Barber wrote:
>
>> At 01:13 AM 1/29/2012, you wrote:
>> 
>>> ________________________________________
>>> From: address@hidden address@hidden on behalf of Brad Barber address@hidden
>>> Sent: Saturday, January 28, 2012 11:54 AM
>>> To: address@hidden
>>> Subject: Release candidate for Qhull 2012.1
>>> 
>>> Hi all,
>>> 
>>> See below for the Qhull 2012.1 release candidate.  It is not deployed to 
>>> qhull.org, because I need feedback on the changes.   The goal of this 
>>> release is to clean up the builds and make them suitable to Octave, R, and 
>>> other users.
>>> 
>>> If something is broken for you in Qhull 2012.1, please let me know.
>>> 
>>> Qhull 2012.1 adds libqhull.so for Octave and other users.  This shared 
>>> library uses a static global data structure .   It is the same as the 
>>> debian build, Qhull 2009.1.  To help avoid confusion, libqhull6_p.so is the 
>>> new name for qhull with a dynamic global data structure (-Dqh_QHpointer).
>>> 
>>> Qhull 2012.1 fixes strict aliasing in qset.c and adds a qset test program.
>>> 
>>> 
>>> Qhull 2012.1 includes a draft debian build in the 'config/' directory.  
>>> Someone will need to verify that it works.   As before, it produces 
>>> libqhull.so and the qhull executables.  It could be updated to match the 
>>> other builds.
>>> 
>>> A later version of Qhull may include a third interface to get rid of global 
>>> variables.  It would pass qh_qhT as a parameter to each function call.  
>>> There would be a single source tree using a macro to enable the extra 
>>> parameter.  There would be a third shared library, tentatively named 
>>> libqhull7_t.so for "threading".   If so, the C++ interface will probably 
>>> switch to this library.
>>> 
>>>  http://gitorious.org/qhull/
>>>  http://gitorious.org/qhull/qhull/blobs/master/src/Changes.txt
>>>  http://www.qhull.org/download/qhull-2012.1-src-tgz.md5sum
>>>  http://www.qhull.org/download/qhull-2012.1-src.tgz
>>>  http://www.qhull.org/download/qhull-2012.1-zip.md5sum
>>>  http://www.qhull.org/download/qhull-2012.1.md5sum
>>>  http://www.qhull.org/download/qhull-2012.1.zip
>>> 
>>> Many thanks for helping with qhull.
>>> 
>>>                                       --Brad
>>> 
>>> 
>>> 
>>> I built Octave on Lion with this version of Qhull and this went OK.  It did 
>>> fail one of the make check tests on convhulln:
>>> octave:1> test convhulln
>>> ***** testif HAVE_QHULL
>>> cube = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
>>> [h, v] = convhulln (cube);
>>> assert (size (h), [6 4]);
>>> h = sortrows (sort (h, 2), [1:4]);
>>> assert (h, [1 2 3 4; 1 2 5 6; 1 4 5 8; 2 3 6 7; 3 4 7 8; 5 6 7 8]);
>>> assert (v, 1, 10*eps);
>>> !!!!! test failed
>>> assert (size (h),[6, 4]) expected
>>>  6   4
>>> but got
>>>  12    3
>>> values do not match
>>> 
>>> The same error also occured with the Qhull package from MacPorts (2011.2).  
>>> The difference was that I did not have to apply Ben's patch using when 
>>> building against this version.  Not applying Ben's patch to 2011.2 resulted 
>>> in many more make check failures.  
>>> 
>>> Any idea what could be happening to cause this to fail on Lion, but pass on 
>>> Fedora?  
>> 
>
>> Hi Melvin,
>> 
>> Many thanks for testing convhulln on Lion and Fedora.
>> 
>> Your results for Lion indicate that Qhull triangulated the output instead of 
>> retaining the cube's facets.  My guess is that for Lion, someone had set 
>> options 'QJ' or 'Qt' which request triangulated output.  You can test this 
>> case, by adding 'FO' to the option list (look for Qtriangulate or QJoggle in 
>> the returned "Options selected").  
>> 
>> Try running the qhull program directly on Lion.   Here are the results with 
>> and without triangulation.  
>> 
>> # Convex hull of a cube without triangulation
>> rbox c | qhull i
>> 6
>> 4 6 2 0
>> 1 5 4 0
>> 5 7 6 4
>> 3 1 0 2
>> 7 3 2 6
>> 3 7 5 1
>> 
>> # Convex hull of a cube with triangulation
>> rbox c | qhull Qt i
>> 12
>> 6 2 0
>> 4 6 0
>> 5 4 0
>> 1 5 0
>> 5 6 4
>> 6 5 7
>> 2 3 0
>> 3 1 0
>> 6 3 2
>> 3 6 7
>> 3 5 1
>> 5 3 7
>> 
>> If you do not find the reason, please send me the log file from option T4.
>> 
>>                                --Brad
>
>I'm not sure it is a Lion thing or an Octave thing. The failure on Lion/Octave 
>is part of Octave's test suite. The tests are part of convhulln.cc.
>
>        
> http://hg.savannah.gnu.org/hgweb/octave/file/b4d7de953066/src/DLD-FUNCTIONS/convhulln.cc
>
>Per your (Brad) suggestion, I added "FO" to the options for the test that had 
>been failing (1st of the three tests below).
>
>%!testif HAVE_QHULL
>%! cube = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
>%! [h, v] = convhulln (cube, {"FO"});
>%! assert (size (h), [6 4]); 
>%! h = sortrows (sort (h, 2), [1:4]);
>%! assert (h, [1 2 3 4; 1 2 5 6; 1 4 5 8; 2 3 6 7; 3 4 7 8; 5 6 7 8]);
>%! assert (v, 1, 10*eps);
>
>%!testif HAVE_QHULL
>%! cube = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
>%! [h, v] = convhulln (cube, "QJ");
>%! assert (size (h), [12 3]); 
>%! assert (sortrows (sort (h, 2), [1:3]), [1 2 4; 1 2 5; 1 4 5; 2 3 4; 2 3 6; 
>2 5 6; 3 4 8; 3 6 7; 3 7 8; 4 5 8; 5 6 8; 6 7 8]);
>%! assert (v, 1.0, 1e6*eps);
>
>%!testif HAVE_QHULL
>%! tetrahedron = [1 1 1;-1 -1 1;-1 1 -1;1 -1 -1];
>%! [h, v] = convhulln (tetrahedron);
>%! h = sortrows (sort (h, 2), [1 2 3]);
>%! assert (h, [1 2 3;1 2 4; 1 3 4; 2 3 4]);
>%! assert (v, 8/3, 10*eps);
>
>With "FO" the tests all pass.
>
>>> test convhulln.cc
>Options selected for Qhull 2011.2 2011/11/29:
>  run-id 1048646918  _pre-merge  _zero-centrum  _max-width  1
>  Error-roundoff 1.4e-15  _one-merge 9.7e-15  _near-inside 4.9e-14
>  Visible-distance 2.8e-15  U-coplanar-distance 2.8e-15  Width-outside 5.5e-15
>  _wide-facet 1.7e-14
>PASSES 3 out of 3 tests
>
>Looking at the qhull docs, I'm not sure that adding "FO" is expected for fix 
>the problem, but just provide some information about which options were 
>specified.
>
>So, I tried passing an empty cellstring {""}, and that fixed the problem.
>
>test convhulln.cc
>PASSES 3 out of 3 tests
>
>Looking at the Octave implementation, it looks to me (my c++ is weak so 
>skepticism of my reading is merited) like Octave passing "Qt" in this instance 
>if no options are specified.
>
>Does this mean that we have found an Octave bug ?
>
>Ben
>
>
>
>
>-----
>No virus found in this message.
>Checked by AVG - www.avg.com
>Version: 10.0.1416 / Virus Database: 2109/4775 - Release Date: 01/29/12



reply via email to

[Prev in Thread] Current Thread [Next in Thread]