On 7/31/14 17:27 , Mark Brethen wrote:

On Jul 31, 2014, at 3:10 PM, Jonathan Stickel <jjstic...@gmail.com>
wrote:



On 7/29/14 19:48 , Mark Brethen wrote:

On Jul 28, 2014, at 11:56 AM, Jonathan Stickel
<jjstic...@gmail.com> wrote:

Date: Sun, 27 Jul 2014 13:47:20 -0500 From: Mark Brethen
<mark.bret...@gmail.com> Subject: py-cvxopt +DSDP

py-cvxopt installed fine without any errors. However, when I
tried running example code it reports:

Symbol not found: _ATL_cGetNB Referenced from:
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/cvxopt/lapack.so





Why does numpy and cvxopt use Apple's Accelerate framework by default and DSDP use macport's ATLAS?

Ticket #37097 describes issues building DSDP and other ports
that depend on it (like cvxopt) due to linker issues with
building against macports' ATLAS. I uninstalled DSDP and
ATLAS and then patched DSDP as suggested in the ticket, but
when I tried to install DSDP again it failed because it could
not find Apple's Accelerate framework:

:info:build /usr/bin/clang -O3 -arch x86_64 -o maxcut
maxcut.o
/opt/local/var/macports/build/_Users_marbre_ports_math_DSDP/DSDP/work/DSDP5.8/lib/libdsdp.a


-latlas -lm :info:build ld: library not found for -latlas
:info:build clang: error: linker command failed with exit
code 1 (use -v to see invocation)

I guess if you do this, you also need to provide the path to
Apple's Accelerate framework?


It seems that DSDP does not work with Apple's Accelerate
framework, and hence if you use the +dsdp variant for
py-cvxopt (not required), then you must use also use the +atlas
variant for py-cvxopt. I suppose it is a bug that this conflict
is not flagged in the py-cvxopt portfile. You could open a
ticket for that part, if you like. In the meantime, just
reinstall with consistent variants (I recommend using +atlas
for all of the above, including numpy and scipy).

Regards, Jonathan

I was able to build DSDP with Apple's Accelerate.framework by
patching 'make.include' at this line:

-LAPACKBLAS  = -llapack -lblas -lg2c -lm +LAPACKBLAS  =
-Wl,-framework -Wl,Accelerate -lm

and test that it works with the following python program:

from cvxopt.base import matrix,spmatrix from cvxopt import
solvers

clst=[0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 2.0] hlst=[0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0] Gr=[0, 7, 14, 21, 28, 1,
5, 8]+[35]*5 Gc=[0, 1, 2, 3, 4, 5, 6, 7]+range(5)
Gmtr=spmatrix([1.0]*8+[-1.0]*5,Gr,Gc,(36,8)) c=-matrix(clst)
Gs=[-Gmtr] h=[-matrix(hlst,(6,6))] try:
sol=solvers.sdp(c,Gs=Gs,hs=h,solver='dsdp') print 'optimal
value: %.2f'%(1+(matrix(clst,(1,8))*sol['x'])[0],) except: print
'could not use dsdp' sol=solvers.sdp(c,Gs=Gs,hs=h) print 'optimal
value: %.2f'%(1+(matrix(clst,(1,8))*sol['x'])[0],) raise

which returns: 'optimal value: 2.00'


I'd suggest updating the port to use Apple's
accelerated.framework by default (as does numpy and cvxopt).


Mark

Based on this info, I patched the DSDP portfile to use accelerate
framework by default (i.e., no variants) and then to have an atlas
variant. I uploaded patches to the ticket:

https://trac.macports.org/ticket/37097

Jonathan


Was there a particular reason you added the reinplace in the octave
variant? Won't this be replaced by the patch?


Its not in the octave variant block (the way trac shows the patch makes it look that way). See the ticket for more text. I suggest you cc your email on the ticket, and we can continue to discuss (as needed) there.

Thanks,
Jonathan
_______________________________________________
macports-users mailing list
macports-users@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/macports-users

Reply via email to