B <ÓFd#Mã @s,dZddlmZmZmZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ej ddkr€ddlmZddlmZnddlmZddlmZdd lmZdd lmZddlZdd lmZdd lmZdd lmZmZmZddlm Z m!Z!m"Z"ddl#m$Z%ddl&m'Z'ddl(Zddl)Z)ddl*Z*ddl+Z+dddœZ,e,e+ -¡dZ.dd„Z/ej+dkrŽdej0 1ej2j3d¡gZ4gZ5gZ6dgZ7gZ8gZ9nPe/dddddge.ƒZ4gZ5dd d!d"d#d$d%gZ6dd&d'd(gZ7e/d)d*dge.ƒZ8d+d,d!gZ9ej0 :d-¡r*e d.ƒZ;e;r*ej0 e=d-g¡e9 >d/d0g¡ddl?Z@dZAz’y&eBejCd1ƒZAe@jDd2d3ge@jEeAd4ZFWneGefk rxYnNXeHeF I¡d J¡ K¡ƒZLeFjMdkrÆe8ej0 1d5eL¡g7Z8e4ej0 1d5eL¡g7Z4WdeAdk rÜeA N¡Xej0 1ejOd6¡e4kr8e4 Pdej0 1ejOd6¡¡e6 Qej0 1ejOd7¡¡e7 Qej0 1ejOd8¡¡d9d:„e4DƒZ4d;d:„e5DƒZ5dd?„ZSdßd@dA„ZTGdBdC„dCeƒZUGdDdE„dEeUƒZVGdFdG„dGeUƒZWGdHdI„dIeWƒZXGdJdK„dKeUƒZYGdLdM„dMeYƒZZGdNdO„dOeUƒZ[GdPdQ„dQeUƒZ\GdRdS„dSeUƒZ]GdTdU„dUeUƒZ^GdVdW„dWeUƒZ_GdXdY„dYe`ƒZaGdZd[„d[eaƒZbGd\d]„d]eaƒZcGd^d_„d_ecƒZdGd`da„daecƒZeGdbdc„dcecƒZfGddde„deecƒZgGdfdg„dgecƒZhGdhdi„diecƒZiGdjdk„dkecƒZjGdldm„dmeaƒZkGdndo„doeaƒZlGdpdq„dqelƒZmGdrds„dselƒZnGdtdu„dueaƒZoGdvdw„dweoƒZpGdxdy„dyeoƒZqGdzd{„d{epƒZrGd|d}„d}eoƒZsGd~d„deqƒZtGd€d„deoƒZuGd‚dƒ„dƒeuƒZvGd„d…„d…euƒZwGd†d‡„d‡evƒZxGdˆd‰„d‰euƒZyGdŠd‹„d‹ewƒZzGdŒd„deaƒZ{GdŽd„deaƒZ|dZ}iZ~d‘d’„ZGd“d”„d”eaƒZ€Gd•d–„d–eaƒZGd—d˜„d˜eaƒZ‚Gd™dš„dše‚ƒZƒGd›dœ„dœeƒƒZ„Gddž„dže‚ƒZ…GdŸd „d eaƒZ†Gd¡d¢„d¢eaƒZ‡Gd£d¤„d¤eaƒZˆGd¥d¦„d¦eˆƒZ‰Gd§d¨„d¨eˆƒZŠGd©dª„dªeˆƒZ‹Gd«d¬„d¬eaƒZŒGd­d®„d®eaƒZGd¯d°„d°eaƒZŽGd±d²„d²eaƒZGd³d´„d´eaƒZGdµd¶„d¶eƒZ‘Gd·d¸„d¸eƒZ’Gd¹dº„dºeƒZ“Gd»d¼„d¼eƒZ”Gd½d¾„d¾eƒZ•Gd¿dÀ„dÀeƒZ–GdÁd„dÂeƒZ—GdÃdÄ„dÄeƒZ˜GdÅdÆ„dÆeƒZ™GdÇdÈ„dÈeƒZšGdÉdÊ„dÊeaƒZ›GdËdÌ„dÌeaƒZœdÍd΄ZddÏdÐddÑœZždÒdÓdÔdÕdÖœZŸd×dØ„Z dàdÚdÛ„Z¡dádÜdÝ„Z¢e£dÞkr(e¢ƒdS)âak This file defines a set of system_info classes for getting information about various resources (libraries, library directories, include directories, etc.) in the system. Currently, the following classes are available: atlas_info atlas_threads_info atlas_blas_info atlas_blas_threads_info lapack_atlas_info lapack_atlas_threads_info atlas_3_10_info atlas_3_10_threads_info atlas_3_10_blas_info, atlas_3_10_blas_threads_info, lapack_atlas_3_10_info lapack_atlas_3_10_threads_info blas_info lapack_info openblas_info blis_info blas_opt_info # usage recommended lapack_opt_info # usage recommended fftw_info,dfftw_info,sfftw_info fftw_threads_info,dfftw_threads_info,sfftw_threads_info djbfft_info x11_info lapack_src_info blas_src_info numpy_info numarray_info numpy_info boost_python_info agg2_info wx_info gdk_pixbuf_xlib_2_info gdk_pixbuf_2_info gdk_x11_2_info gtkp_x11_2_info gtkp_2_info xft_info freetype2_info umfpack_info Usage: info_dict = get_info() where is a string 'atlas','x11','fftw','lapack','blas', 'lapack_src', 'blas_src', etc. For a complete list of allowed names, see the definition of get_info() function below. Returned info_dict is a dictionary which is compatible with distutils.setup keyword arguments. If info_dict == {}, then the asked resource is not available (system_info could not find it). Several *_info classes specify an environment variable to specify the locations of software. When setting the corresponding environment variable to 'None' then the software will be ignored, even when it is available in system. Global parameters: system_info.search_static_first - search static libraries (.a) in precedence to shared ones (.so, .sl) if enabled. system_info.verbosity - output the results to stdout if enabled. The file 'site.cfg' is looked for in 1) Directory of main setup.py file being run. 2) Home directory of user running the setup.py file as ~/.numpy-site.cfg 3) System wide directory (location of this file...) The first one found is used to get system configuration options The format is that used by ConfigParser (i.e., Windows .INI style). The section ALL has options that are the default for each section. The available sections are fftw, atlas, and x11. Appropriate defaults are used if nothing is specified. The order of finding the locations of resources is the following: 1. environment variable 2. section in site.cfg 3. ALL section in site.cfg Only the first complete match is returned. Example: ---------- [ALL] library_dirs = /usr/lib:/usr/local/lib:/opt/lib include_dirs = /usr/include:/usr/local/include:/opt/include src_dirs = /usr/local/src:/opt/src # search static libraries (.a) in preference to shared ones (.so) search_static_first = 0 [fftw] fftw_libs = rfftw, fftw fftw_opt_libs = rfftw_threaded, fftw_threaded # if the above aren't found, look for {s,d}fftw_libs and {s,d}fftw_opt_libs [atlas] library_dirs = /usr/lib/3dnow:/usr/lib/3dnow/atlas # for overriding the names of the atlas libraries atlas_libs = lapack, f77blas, cblas, atlas [x11] library_dirs = /usr/X11R6/lib include_dirs = /usr/X11R6/include ---------- Authors: Pearu Peterson , February 2002 David M. Cooke , April 2002 Copyright 2002 Pearu Peterson all rights reserved, Pearu Peterson Permission to use, modify, and distribute this software is given under the terms of the NumPy (BSD style) license. See LICENSE.txt that came with this distribution for specifics. NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. é)ÚdivisionÚabsolute_importÚprint_functionN)Úglob)Úreduceé)Ú NoOptionError)ÚRawConfigParser)ÚDistutilsError)Ú Distribution)Úlog)Ú get_platform)Úfind_executableÚ exec_commandÚ get_pythonexe)Ú is_sequenceÚ is_stringÚget_shared_lib_extension)Úconfig)Ú get_exceptioné é@)Z32bitZ64bitcCsD|dkrtdƒ‚|dkr|Sg}x|D]}| |d|g¡q&W|S)aèReturn a list of library paths valid on 32 or 64 bit systems. Inputs: paths : sequence A sequence of strings (typically paths) bits : int An integer, the only valid values are 32 or 64. A ValueError exception is raised otherwise. Examples: Consider a list of directories >>> paths = ['/usr/X11R6/lib','/usr/X11/lib','/usr/lib'] For a 32-bit platform, this is already valid: >>> np.distutils.system_info.libpaths(paths,32) ['/usr/X11R6/lib', '/usr/X11/lib', '/usr/lib'] On 64 bits, we prepend the '64' postfix >>> np.distutils.system_info.libpaths(paths,64) ['/usr/X11R6/lib64', '/usr/X11R6/lib', '/usr/X11/lib64', '/usr/X11/lib', '/usr/lib64', '/usr/lib'] )rrz+Invalid bit size in libpaths: 32 or 64 onlyrÚ64)Ú ValueErrorÚextend)ÚpathsÚbitsÚoutÚp©rúN/opt/alt/python37/lib64/python3.7/site-packages/numpy/distutils/system_info.pyÚlibpaths¤s r!Úwin32zC:\ÚlibsÚ.z/usr/local/libz/opt/libz/usr/libz/opt/local/libz/sw/libz/usr/local/includez /opt/includez /usr/includez/opt/local/include/ufsparsez/opt/local/includez /sw/includez/usr/include/suitesparsez/usr/local/srcz/opt/srcz/sw/srcz/usr/X11R6/libz /usr/X11/libz/usr/X11R6/includez/usr/X11/includez /usr/lib/X11z/usr/lib/*/libX11.soz/usr/lib/X11/includez/usr/include/X11ÚwZgccz-print-multiarch)ÚstdoutÚstderrz /usr/lib/ÚlibÚincludeÚsrccCsg|]}tj |¡r|‘qSr)ÚosÚpathÚisdir)Ú.0Ú_mrrr ú sr0cCsg|]}tj |¡r|‘qSr)r+r,r-)r.r/rrr r0 scCsg|]}tj |¡r|‘qSr)r+r,r-)r.r/rrr r0 scCsg|]}tj |¡r|‘qSr)r+r,r-)r.r/rrr r0 scCsÐg}yt}Wntk r*tjd}Yn:Xtj tj tj |¡¡d|¡}tj  |¡rd|  |¡ytj  d¡}Wnt k rˆYn&Xtj ||¡}tj  |¡r®|  |¡tj  |¡rÌ|  tj |¡¡|S)z¸Returns a list of files named 'fname' from 1) System-wide directory (directory-location of this module) 2) Users HOME directory (os.environ['HOME']) 3) Local directory rú~) Ú__file__Ú NameErrorÚsysÚargvr+r,ÚjoinÚsplitÚabspathÚisfileÚappendÚ expanduserÚKeyError)ZfnameÚ filenamesÚfZsysfileZ user_filerrr Úget_standard_files&     r?c>Cs˜tttttttttt t t t t ttttttttttttttttttt t!t"t#t#t$t%t&t't(t)t*t+t+t,t,t-t.t.t/t/t0t0t1t1t2t3t4t5dœ= 6| 7¡t8¡}|ƒ 9|¡S)zg notfound_action: 0 - do nothing 1 - display warning message 2 - raise error )=ÚatlasÚ atlas_threadsÚ atlas_blasÚatlas_blas_threadsÚ lapack_atlasZlapack_atlas_threadsÚ atlas_3_10Úatlas_3_10_threadsÚatlas_3_10_blasÚatlas_3_10_blas_threadsZlapack_atlas_3_10Zlapack_atlas_3_10_threadsÚmklÚopenblasÚopenblas_lapackÚblisÚ lapack_mklÚblas_mklÚx11Zfft_optÚfftwÚfftw2Úfftw3ÚdfftwÚsfftwÚ fftw_threadsÚ dfftw_threadsÚ sfftw_threadsÚdjbfftÚblasÚlapackÚ lapack_srcÚblas_srcÚnumpyÚf2pyÚNumericÚnumericÚnumarrayÚnumerixZ lapack_optZblas_optÚ boost_pythonÚagg2ÚwxÚgdk_pixbuf_xlib_2zgdk-pixbuf-xlib-2.0Ú gdk_pixbuf_2zgdk-pixbuf-2.0ÚgdkÚgdk_2zgdk-2.0Ú gdk_x11_2z gdk-x11-2.0Ú gtkp_x11_2z gtk+-x11-2.0Úgtkp_2zgtk+-2.0ÚxftÚ freetype2ÚumfpackÚamd):Ú atlas_infoÚatlas_threads_infoÚatlas_blas_infoÚatlas_blas_threads_infoÚlapack_atlas_infoÚlapack_atlas_threads_infoÚatlas_3_10_infoÚatlas_3_10_threads_infoÚatlas_3_10_blas_infoÚatlas_3_10_blas_threads_infoÚlapack_atlas_3_10_infoÚlapack_atlas_3_10_threads_infoÚmkl_infoÚ openblas_infoÚopenblas_lapack_infoÚ blis_infoÚlapack_mkl_infoÚ blas_mkl_infoÚx11_infoÚ fft_opt_infoÚ fftw_infoÚ fftw2_infoÚ fftw3_infoÚ dfftw_infoÚ sfftw_infoÚfftw_threads_infoÚdfftw_threads_infoÚsfftw_threads_infoÚ djbfft_infoÚ blas_infoÚ lapack_infoÚlapack_src_infoÚ blas_src_infoÚ numpy_infoÚ f2py_infoÚ Numeric_infoÚ numarray_infoÚ numerix_infoÚlapack_opt_infoÚ blas_opt_infoÚboost_python_infoÚ agg2_infoÚwx_infoÚgdk_pixbuf_xlib_2_infoÚgdk_pixbuf_2_infoÚgdk_infoÚ gdk_2_infoÚgdk_x11_2_infoÚgtkp_x11_2_infoÚ gtkp_2_infoÚxft_infoÚfreetype2_infoÚ umfpack_infoÚamd_infoÚgetÚlowerÚ system_infoÚget_info)ÚnameÚnotfound_actionZclrrr rª4s~ rªc@seZdZdZdS)Ú NotFoundErrorz1Some third-party program or library is not found.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr r­~sr­c@seZdZdZdS)ÚAtlasNotFoundErrorzî Atlas (http://math-atlas.sourceforge.net/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [atlas]) or by setting the ATLAS environment variable.N)r®r¯r°r±rrrr r²‚sr²c@seZdZdZdS)ÚLapackNotFoundErrorzì Lapack (http://www.netlib.org/lapack/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [lapack]) or by setting the LAPACK environment variable.N)r®r¯r°r±rrrr r³Šsr³c@seZdZdZdS)ÚLapackSrcNotFoundErrorzð Lapack (http://www.netlib.org/lapack/) sources not found. Directories to search for the sources can be specified in the numpy/distutils/site.cfg file (section [lapack_src]) or by setting the LAPACK_SRC environment variable.N)r®r¯r°r±rrrr r´’sr´c@seZdZdZdS)ÚBlasNotFoundErrorzä Blas (http://www.netlib.org/blas/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [blas]) or by setting the BLAS environment variable.N)r®r¯r°r±rrrr rµšsrµc@seZdZdZdS)ÚBlasSrcNotFoundErrorzè Blas (http://www.netlib.org/blas/) sources not found. Directories to search for the sources can be specified in the numpy/distutils/site.cfg file (section [blas_src]) or by setting the BLAS_SRC environment variable.N)r®r¯r°r±rrrr r¶¢sr¶c@seZdZdZdS)ÚFFTWNotFoundErrorzÝ FFTW (http://www.fftw.org/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [fftw]) or by setting the FFTW environment variable.N)r®r¯r°r±rrrr r·ªsr·c@seZdZdZdS)ÚDJBFFTNotFoundErrorzê DJBFFT (http://cr.yp.to/djbfft.html) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [djbfft]) or by setting the DJBFFT environment variable.N)r®r¯r°r±rrrr r¸²sr¸c@seZdZdZdS)ÚNumericNotFoundErrorzv Numeric (http://www.numpy.org/) module not found. Get it from above location, install it, and retry setup.py.N)r®r¯r°r±rrrr r¹ºsr¹c@seZdZdZdS)ÚX11NotFoundErrorzX11 libraries not found.N)r®r¯r°r±rrrr rºÀsrºc@seZdZdZdS)ÚUmfpackNotFoundErrora UMFPACK sparse solver (http://www.cise.ufl.edu/research/sparse/umfpack/) not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [umfpack]) or by setting the UMFPACK environment variable.N)r®r¯r°r±rrrr r»Äsr»c@sìeZdZdZdZdZdZdZiZe Z e e dfdd„Z dd „Zd d „Zd d „Zdd„Zdd„Zd5dd„Zdd„Zd6dd„Zd7dd„Zd8dd„Zd9d d!„Zd"d#„Zd:d%d&„Zd'd(„Zgfd)d*„Zgfd+d,„Zd-d.„Zd/d0„Zd1d2„Z d3d4„Z!dS);r©z= get_info() is the only public method. Don't use others. ZALLNréc Cs²i|j_g|_tj |¡tj |¡tj t¡dtj t¡t|j ƒdddœ}t |ƒ|_ g|_ |j   tdƒ¡|j   tdƒ¡| ¡|jdk rž|j  |jd¡|_ t|j tƒs®t‚dS)NÚ)Ú library_dirsÚ include_dirsÚruntime_library_dirsÚrpathÚsrc_dirsÚsearch_static_firstÚextra_compile_argsÚextra_link_argsz.numpy-site.cfgzsite.cfgrÃ)Ú __class__ÚinfoZlocal_prefixesr+Úpathsepr6Údefault_runtime_dirsÚdefault_src_dirsÚstrrÃÚ ConfigParserÚcpÚfilesrr?Úparse_config_filesÚsectionZ getbooleanÚ isinstanceÚintÚAssertionError)ÚselfÚdefault_lib_dirsÚdefault_include_dirsÚ verbosityÚdefaultsrrr Ú__init__Ùs$        zsystem_info.__init__cCs8|j |j¡|j |j¡s4|jdk r4|j |j¡dS)N)rÍÚreadrÎZ has_sectionrÐZ add_section)rÔrrr rÏòs zsystem_info.parse_config_filescCs¼| ¡}| ¡}| ¡}| |jdd¡i}xˆ|D]€}| ||g¡}|dk r\t|f|Žnt d|¡|r4| ||g¡}|dk r¦|d=| d¡|d<t|f|Žq4t d|¡q4W|S)NrÁ)Úkeyz"Library %s was not found. IgnoringÚ librariesr¾rÀz*Runtime library %s was not found. Ignoring) Ú get_librariesÚ get_lib_dirsÚget_runtime_lib_dirsrÚ check_libsÚ dict_appendr rÇÚpop)rÔr#ÚdirsZr_dirsrÇr(Úirrr Úcalc_libraries_infoøs$ zsystem_info.calc_libraries_infocKs>|r,| ¡}t|f|Ž| ¡}t|f|Ž||j|jj<dS)N)råráÚcalc_extra_infoÚ saved_resultsrÆr®)rÔrÇZlib_infoÚ extra_inforrr Úset_infos   zsystem_info.set_infocCs|jj|jkS)N)rÆr®rç)rÔrrr Úhas_info szsystem_info.has_infocCs@i}x6dD].}|j |j|¡}|r ||gi}t|f|Žq W|S)z˜ Updates the information in the current information with respect to these flags: extra_compile_args extra_link_args )rÄrÅ)rÍr§rÐrá)rÔrÇrÛÚoptÚtmprrr ræ#s  zsystem_info.calc_extra_infocCs<d}| ¡s¦d}t |jjd¡t|dƒr4| ¡|r€| ¡s€|dkr\tj|j j ddn$|dkrt|  |j j ¡‚n t t |ƒƒ‚| ¡sœt d¡|  ¡n t d¡|j |jj¡}|jdkr2|r2x^| ¡D]R\}}t|ƒ}|d krt|ƒd kr|d d …d |dd …}t d||¡qÒWt d¡t |¡S)zu Return a dictonary with items that are compatible with numpy.distutils.setup keyword arguments. rr¼ú:Ú calc_infoé)Ú stacklevelz NOT AVAILABLEz FOUND:)ÚsourcesrÜiNéxz ... ... ...iˆÿÿÿz %s = %sr½)rêr rÇrÆr®ÚhasattrrîÚwarningsÚwarnÚ notfounderrorr±rÚreprrérçr§r×ÚitemsrËÚlenÚcopyZdeepcopy)rÔr¬ÚflagÚresÚkÚvrrr rª2s4      zsystem_info.get_infocCsZ|j ||¡ tj¡}|j}|rtt|ƒrt|d}x|D]}|tjkr6|}Pq6W|d|kspt  d|d|f¡|}|rÆ|tjkrÆtj|}|dkr´t  d|j j d|f¡gStj   |¡rPtj  |¡g|}t|dgƒ}t|ƒdkrÆtj  |¡} tj  | ¡d} | dd …d krÆt  d |jd| d d…f¡| d d…|jd<nv| tj¡} g} x\| D]T}tj  |¡rf|  |¡x4d D],} tj  || ¡} tj  | ¡rˆ|  | ¡qˆWqfW| |}|j |j|¡ tj¡}| |¡g}xT|D]L}t|ƒdkr(tj  |¡s(tjd |ddqò||krò| |¡qòWt d|d |¡¡|S)Néÿÿÿÿrz Setting %s=%sÚNonezDisabled %s: %sz (%s is None)Ú _lib_namesr¼rr(z#Replacing _lib_names[0]==%r with %r)r)r(zSpecified path %s is invalid.rï)rðz ( %s = %s )rí)rÍr§r7r+rÈÚ dir_env_varrÚenvironr rÇrÆr®r,r9ÚdirnameÚgetattrrùÚbasenameÚsplitextrr-r:r6rÐrrôrõÚdebug)rÔrÐrÛrãZenv_varZe0ÚeÚdÚlÚbZdsZds2ZddZd1Z default_dirsZretrrr Ú get_pathsVsd              zsystem_info.get_pathsr¾cCs| |j|¡S)N)r rÐ)rÔrÛrrr rÞszsystem_info.get_lib_dirsrÀcCs | |j|¡}|dgkrg}|S)Nr½)r rÐ)rÔrÛr,rrr rßs z system_info.get_runtime_lib_dirsr¿cCs| |j|¡S)N)r rÐ)rÔrÛrrr Úget_include_dirs–szsystem_info.get_include_dirsrÂcCs| |j|¡S)N)r rÐ)rÔrÛrrr Ú get_src_dirs™szsystem_info.get_src_dirscCs^y|j |j|¡}Wn*tk r>|s,gSt|ƒr:|gS|SXdd„dd„| d¡DƒDƒS)NcSsg|] }|r|‘qSrr)r.r rrr r0¥sz(system_info.get_libs..cSsg|] }| ¡‘qSr)Ústrip)r.Úarrr r0¥sú,)rÍr§rÐrrr7)rÔrÛÚdefaultr#rrr Úget_libsœszsystem_info.get_libsrÜcCs*t|dƒr|j||jdS| |d¡SdS)Nr)rr½)rórr)rÔrÛrrr rݧs zsystem_info.get_librariescCsbdg}tjdkr| d¡|jr,|tg}n tg|}tjdkrJ| d¡tjdkr^| d¡|S)Nz.ar"z.libÚcygwinz.dll.aÚdarwinz.dylib)r4Úplatformr:rÃÚso_ext)rÔZ static_extsÚextsrrr Úlibrary_extensions­s        zsystem_info.library_extensionscCsR| ¡}d}x(|D] }| ||||g¡}|dk rPqW|sNt dd |¡|¡|S)zåIf static or shared libraries are available then return their info dictionary. Checks for all libraries as shared libraries first, then static (or vice versa if self.search_static_first is True). Nz libraries %s not found in %sr)rÚ _check_libsr rÇr6)rÔÚlib_dirsr#Úopt_libsrrÇÚextrrr rà»s zsystem_info.check_libscCs4| ¡}| ||||¡}|s0t dd |¡|¡|S)z’If static or shared libraries are available then return their info dictionary. Checks each library for shared or static. z libraries %s not found in %sr)rrr rÇr6)rÔrr#rrrÇrrr Ú check_libs2Ís zsystem_info.check_libs2cCsˆt|ƒs t‚tjdkr ddg}ndg}x\|D]T}x&|D]}| ||||¡}|r6Pq6W|r,t|ƒdkslt‚|dkr||d7}|Sq,WdS)Nr"r½r(r¼z.dll.az.dllF)rrÓr4rÚ combine_pathsrù)rÔÚlib_dirr(rÚ lib_prefixesrÚprefixrrrr Ú _find_libÛs     zsystem_info._find_libc Cs^gg}}xJ|D]B}x<|D]4}| |||¡}|r| |¡||krL| |¡PqWqW||fS)N)r$r:) rÔrr#rÚ found_dirsÚ found_libsr(r!Z found_librrr Ú _find_libsòs      zsystem_info._find_libsc CsŽt|ƒs|g}| |||¡\}}t|ƒdkr†t|ƒt|ƒkr†| |||¡\}}| |¡x|D]} | |kr^| | ¡q^W||dœ} | SdSdS)zxFind mandatory and optional libs in expected paths. Missing optional libraries are silently forgotten. r)rÜr¾N)rr'rùrr:) rÔrr#rrr%r&Zopt_found_dirsZopt_found_libsr!rÇrrr rÿs   zsystem_info._check_libscGst|d|jiŽS)zjReturn a list of existing paths composed by all combinations of items from the arguments. r×)r r×)rÔÚargsrrr r szsystem_info.combine_paths)r)r¾)rÀ)r¿)rÂ)rÜ)"r®r¯r°r±rÐrrÃr×rçr­rörÕrÖrÙrÏrårérêrærªr rÞrßrrrrÝrràrr$r'rr rrrr r©Ìs<   $7        r©c@seZdZdd„ZdS)r„cCsXi}tdƒptdƒptdƒ}tdƒ}|rTt|f|Ž|rDt|f|Ž|jf|ŽdSdS)NrRrQrSrX)rªráré)rÔrÇr…rrrr rîs   zfft_opt_info.calc_infoN)r®r¯r°rîrrrr r„sr„c@sTeZdZdZdZeZddgdgdgdœdddgd d gd gdœgZd d „Zdd„Z dS)r…rPÚFFTWrRzfftw3.h)Ú SCIPY_FFTW3_HN)r«r#ÚincludesÚmacrosrQÚrfftwzfftw.hzrfftw.h)Ú SCIPY_FFTW_HNcCsÒ| ¡}| ¡}| |jd|d¡}| ||¡}|dk r d}xF|D]>}t| ||d¡ƒt|dƒkrDt||gdd}|g}PqDW|rœt||dd nd}|dk r¸|jf|Žd St   d |d ¡d SdS)z8Returns True on successful version detection, else FalseZ_libsr#Nrr+)r¿r¼r,)Ú define_macrosTz %s not foundr«F) rÞrrrÐràrùr rárér rÇ)rÔZ ver_paramrÚ incl_dirsr#rÇrûr rrr Ú calc_ver_info7s*   zfftw_info.calc_ver_infocCs x|jD]}| |¡rPqWdS)N)Úver_infor1)rÔrärrr rîQs  zfftw_info.calc_infoN) r®r¯r°rÐrr·rör2r1rîrrrr r…)s r…c@s2eZdZdZdZeZdddgddgdgdœgZd S) r†rPr)rQr-zfftw.hzrfftw.h)r.N)r«r#r+r,N)r®r¯r°rÐrr·rör2rrrr r†Wsr†c@s.eZdZdZdZeZddgdgdgdœgZdS)r‡rRZFFTW3zfftw3.h)r*N)r«r#r+r,N)r®r¯r°rÐrr·rör2rrrr r‡csr‡c@s.eZdZdZdZdddgddgdgdœgZd S) rˆrPr)rSZdrfftwzdfftw.hzdrfftw.h)Z SCIPY_DFFTW_HN)r«r#r+r,N)r®r¯r°rÐrr2rrrr rˆos rˆc@s.eZdZdZdZdddgddgdgdœgZd S) r‰rPr)rTZsrfftwzsfftw.hzsrfftw.h)Z SCIPY_SFFTW_HN)r«r#r+r,N)r®r¯r°rÐrr2rrrr r‰xs r‰c@s.eZdZdZdZdddgddgdgd œgZd S) rŠrPr)z fftw threadsZ rfftw_threadsrUzfftw_threads.hzrfftw_threads.h)ZSCIPY_FFTW_THREADS_HN)r«r#r+r,N)r®r¯r°rÐrr2rrrr rŠs rŠc@s.eZdZdZdZdddgddgdgd œgZd S) r‹rPr)z dfftw threadsZdrfftw_threadsrVzdfftw_threads.hzdrfftw_threads.h)ZSCIPY_DFFTW_THREADS_HN)r«r#r+r,N)r®r¯r°rÐrr2rrrr r‹Šs r‹c@s.eZdZdZdZdddgddgdgd œgZd S) rŒrPr)z sfftw threadsZsrfftw_threadsrWzsfftw_threads.hzsrfftw_threads.h)ZSCIPY_SFFTW_THREADS_HN)r«r#r+r,N)r®r¯r°rÐrr2rrrr rŒ“s rŒc@s(eZdZdZdZeZdd„Zdd„ZdS)rrXZDJBFFTcCsHt |||¡}g}x&|D]}| | |dg¡|g¡qWdd„|DƒS)NrXcSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0¦sz)djbfft_info.get_paths..)r©r rr )rÔrÐrÛÚpre_dirsrãr rrr r ¡s  zdjbfft_info.get_pathscCs¾| ¡}| ¡}d}xP|D]H}| |dg¡}|r:d|i}P| |ddtg¡}|rdg|gdœ}PqW|dkrrdSxF|D]>}t| |ddg¡ƒd krxt||gd gd |jf|ŽdSqxWdS) Nzdjbfft.aZ extra_objectsz libdjbfft.aZ libdjbfftrX)rÜr¾zfftc8.hz fftfreq.hrï)ZSCIPY_DJBFFT_HN)r¿r/)rÞrr rrùráré)rÔrr0rÇr rrrr rî¨s*    zdjbfft_info.calc_infoN) r®r¯r°rÐrr¸rör rîrrrr rœs rc@s2eZdZdZdZdgZdd„Zdd„Zdd „Zd S) r}rIÚMKLROOTZmkl_rtc CsBtj dd¡}|dk r|Stj dd¡ tj¡}d}tj |¡rzt|dƒ*}x"|D]}| ¡}|rR|  |¡qRWWdQRXg}xZ|D]R}| tj ¡}x@|D]8} |   d¡rštj   |d|  | ¡d…¡}|  |¡PqšWq„Wxb|D]Z}ttj  |dd¡ƒ} | ttj  |d ¡ƒ7} x*| D]"}tj tj  |d ¡¡r|SqWqàWdS) Nr4ZLD_LIBRARY_PATHr½z/etc/ld.so.confÚrrIrïÚ*zmkl*r()r+rr§r7rÈr,r9Úopenrr:ÚsepÚ startswithr6Úindexrr-) rÔÚmklrootrZ ld_so_confr>r Zintel_mkl_dirsr,Z path_atomsÚmrãrrr Úget_mkl_rootdirÅs4           zmkl_info.get_mkl_rootdircCs~| ¡}|dkrt |¡n^ddlm}| ¡r6d}n| ¡rL| ¡rLd}nd}tj|tj   |d|¡gtj   |d¡gddS) Nr¼)ÚcpurZintel64Z32r(r))rÕrÖ) r=r©rÙZcpuinfor>Z is_ItaniumZis_IntelZis_64bitr+r,r6)rÔr;r>Zpltrrr rÙás  zmkl_info.__init__cCsr| ¡}| ¡}| d|j¡}| ||¡}|dkr6dSt|ddg|dtjdkrTnt|dgd|jf|ŽdS)NÚmkl_libs)Z SCIPY_MKL_HN)Ú HAVE_CBLASN)r/r¿r"Zpthread)rÜ) rÞrrÚ_lib_mklrrár4rré)rÔrr0r?rÇrrr rîòs  zmkl_info.calc_infoN) r®r¯r°rÐrrAr=rÙrîrrrr r}Às r}c@s eZdZdS)rN)r®r¯r°rrrr rsrc@s eZdZdS)r‚N)r®r¯r°rrrr r‚sr‚c@s\eZdZdZdZddgZejdd…dkr8dgZd gZ n dgZd gZ e Z d d „Z d d„Z dS)rqr@ÚATLASÚf77blasÚcblasNéZfreebsdZatlas_rZ alapack_rrZc CsPt |||¡}g}x.|D]&}| | |dddddg¡|g¡qWdd„|DƒS)Nzatlas*zATLAS*ZsseZ3dnowZsse2cSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0sz(atlas_info.get_paths..)r©r rr )rÔrÐrÛr3rãr rrr r s  zatlas_info.get_pathscCs°| ¡}i}| d|j|j¡}| d|j¡}d}d}d}xh|D]`}| ||g¡}| |dgg¡} |dk r˜|g| |ddg¡} | | |g¡}|dk r˜P|r@|}q@Wt |j ¡|dkr¼|}|dkrÈdS|  ¡} | || d¡pädg} | d} | rt j   | ¡} t|| gdd |d <|dk r:t|f|Žt|f|Žntd|d krrt|f|Žt|d gd |jf|ŽdSt|f|Žt|dgd d} tj| dd|jf|ŽdS|dd}|d d}d}dg}tjdkræ| d¡xT| ¡D]H}x8|D]0}t j  ||||¡}t j  |¡rú|}PqúW|rðPqðW|dk r†t  |¡d}|dkr~d||df} tj| ddnd|d <tf|Ž\}}t|f|Ž|jf|ŽdS)NÚ atlas_libsÚ lapack_libsrDzatlas*zATLAS*zcblas.hr)r¿ÚcÚlanguagerÜ)ÚATLAS_WITH_LAPACK_ATLASN)r/)ÚATLAS_WITHOUT_LAPACKNzÎ ********************************************************************* Could not find lapack library within the ATLAS installation. ********************************************************************* rï)rðr¾r(r"r½éi€>aM ********************************************************************* Lapack library (from ATLAS) is probably incomplete: size of %s is %sk (expected >4000k) Follow the instructions in the KNOWN PROBLEMS section of the file numpy/INSTALL.txt. ********************************************************************* iÚf77)rÞrrÚ _lib_atlasÚ _lib_lapackrr r rÇrÆrr+r,rrárérôrõr4rr:rr6ÚexistsÚstatÚget_atlas_version)rÔrrÇrFrGr@rZZatlas_1r rDZ lib_dirs2r¿ÚhÚmessageZ lapack_dirZ lapack_nameZ lapack_libr"r r#ÚfnZszÚ atlas_versionÚatlas_extra_inforrr rî!sˆ                  zatlas_info.calc_info)r®r¯r°rÐrrr4rrNrOr²rör rîrrrr rq srqc@seZdZddgZdd„ZdS)rsrCrDc CsÆ| ¡}i}| d|j|j¡}| ||g¡}|dkr:dS| ¡}| ||d¡pVdg}|d}|r~tj  |¡}t ||gdd|d<dg|d<t f|Ž\}}t |f|Žt |f|Ž|j f|ŽdS) NrFzcblas.hr)r¿rHrI)r@Nr/) rÞrrrNrrr r+r,rrárRré) rÔrrÇrFr@r¿rSrVrWrrr rî}s(     zatlas_blas_info.calc_infoN)r®r¯r°rrîrrrr rszsrsc@seZdZddgZddgZdS)rrÚPTATLASrBÚ ptf77blasÚptcblasN)r®r¯r°rrrrrr rr—srrc@seZdZddgZddgZdS)rtrXrBrYrZN)r®r¯r°rrrrrr rtœsrtc@seZdZdgejZdS)rurDN)r®r¯r°rqrrrrr ru¡sruc@seZdZdgejZdS)rvrDN)r®r¯r°rrrrrrr rv¥srvc@seZdZdgZeZeZdS)rwÚsatlasN)r®r¯r°rrNrOrrrr rw©srwc@seZdZdgZdd„ZdS)ryr[c CsÀ| ¡}i}| d|j¡}| ||g¡}|dkr4dS| ¡}| ||d¡pPdg}|d}|rxtj |¡}t ||gdd|d<dg|d<t f|Ž\}}t |f|Žt |f|Ž|j f|ŽdS) NrFzcblas.hr)r¿rHrI)r@Nr/) rÞrrrrr r+r,rrárRré) rÔrrÇrFr@r¿rSrVrWrrr rî²s(     zatlas_3_10_blas_info.calc_infoN)r®r¯r°rrîrrrr ry¯sryc@s"eZdZddgZdgZeZeZdS)rxrXrBÚtatlasN)r®r¯r°rrrNrOrrrr rxÌsrxc@seZdZddgZdgZdS)rzrXrBr\N)r®r¯r°rrrrrr rzÓsrzc@s eZdZdS)r{N)r®r¯r°rrrr r{Øsr{c@s eZdZdS)r|N)r®r¯r°rrrr r|Üsr|c@s&eZdZdZdZdgZeZdd„ZdS)rrZZLAPACKcCsH| ¡}| d|j¡}| ||g¡}|dkr0dSd|d<|jf|ŽdS)NrGrMrI)rÞrrràré)rÔrrGrÇrrr rîæszlapack_info.calc_infoN) r®r¯r°rÐrrr³rörîrrrr ràs rc@s(eZdZdZdZeZdd„Zdd„ZdS)rr[Z LAPACK_SRCc CsJt |||¡}g}x(|D] }| |g| |ddg¡¡qWdd„|DƒS)Nz LAPACK*/SRCZSRCcSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0ûsz-lapack_src_info.get_paths..)r©r rr )rÔrÐrÛr3rãr rrr r ös   zlapack_src_info.get_pathscsž| ¡}d‰x(|D] }tj tj |d¡¡r|‰PqWˆs>dSd}d}d}d}d}|d}|d } ||} ||} ||d } ||d } d }d }dd„||  ¡Dƒdd„| |  ¡Dƒdd„|  ¡Dƒdd„|  ¡Dƒdd„||| ¡Dƒ}‡fdd„|Dƒ}tj ˆdd¡‰|‡fdd„dDƒ7}|‡fdd„dDƒ7}|‡fdd„dDƒ7}|‡fdd„dDƒ7}dd„|Dƒ}|ddœ}|jf|ŽdS)Nr½zdgesv.fzB ilaenv ieeeck lsame lsamen xerbla iparmq a bdsdc bdsqr disna labad lacpy ladiv lae2 laebz laed0 laed1 laed2 laed3 laed4 laed5 laed6 laed7 laed8 laed9 laeda laev2 lagtf lagts lamch lamrg lanst lapy2 lapy3 larnv larrb larre larrf lartg laruv las2 lascl lasd0 lasd1 lasd2 lasd3 lasd4 lasd5 lasd6 lasd7 lasd8 lasd9 lasda lasdq lasdt laset lasq1 lasq2 lasq3 lasq4 lasq5 lasq6 lasr lasrt lassq lasv2 pttrf stebz stedc steqr sterf larra larrc larrd larr larrk larrj larrr laneg laisnan isnan lazq3 lazq4 a  gbbrd gbcon gbequ gbrfs gbsv gbsvx gbtf2 gbtrf gbtrs gebak gebal gebd2 gebrd gecon geequ gees geesx geev geevx gegs gegv gehd2 gehrd gelq2 gelqf gels gelsd gelss gelsx gelsy geql2 geqlf geqp3 geqpf geqr2 geqrf gerfs gerq2 gerqf gesc2 gesdd gesv gesvd gesvx getc2 getf2 getrf getri getrs ggbak ggbal gges ggesx ggev ggevx ggglm gghrd gglse ggqrf ggrqf ggsvd ggsvp gtcon gtrfs gtsv gtsvx gttrf gttrs gtts2 hgeqz hsein hseqr labrd lacon laein lags2 lagtm lahqr lahrd laic1 lals0 lalsa lalsd langb lange langt lanhs lansb lansp lansy lantb lantp lantr lapll lapmt laqgb laqge laqp2 laqps laqsb laqsp laqsy lar1v lar2v larf larfb larfg larft larfx largv larrv lartv larz larzb larzt laswp lasyf latbs latdf latps latrd latrs latrz latzm lauu2 lauum pbcon pbequ pbrfs pbstf pbsv pbsvx pbtf2 pbtrf pbtrs pocon poequ porfs posv posvx potf2 potrf potri potrs ppcon ppequ pprfs ppsv ppsvx pptrf pptri pptrs ptcon pteqr ptrfs ptsv ptsvx pttrs ptts2 spcon sprfs spsv spsvx sptrf sptri sptrs stegr stein sycon syrfs sysv sysvx sytf2 sytrf sytri sytrs tbcon tbrfs tbtrs tgevc tgex2 tgexc tgsen tgsja tgsna tgsy2 tgsyl tpcon tprfs tptri tptrs trcon trevc trexc trrfs trsen trsna trsyl trti2 trtri trtrs tzrqf tzrzf lacn2 lahr2 stemr laqr0 laqr1 laqr2 laqr3 laqr4 laqr5 a¾ laexc lag2 lagv2 laln2 lanv2 laqtr lasy2 opgtr opmtr org2l org2r orgbr orghr orgl2 orglq orgql orgqr orgr2 orgrq orgtr orm2l orm2r ormbr ormhr orml2 ormlq ormql ormqr ormr2 ormr3 ormrq ormrz ormtr rscl sbev sbevd sbevx sbgst sbgv sbgvd sbgvx sbtrd spev spevd spevx spgst spgv spgvd spgvx sptrd stev stevd stevr stevx syev syevd syevr syevx sygs2 sygst sygv sygvd sygvx sytd2 sytrd a² bdsqr hbev hbevd hbevx hbgst hbgv hbgvd hbgvx hbtrd hecon heev heevd heevr heevx hegs2 hegst hegv hegvd hegvx herfs hesv hesvx hetd2 hetf2 hetrd hetrf hetri hetrs hpcon hpev hpevd hpevx hpgst hpgv hpgvd hpgvx hprfs hpsv hpsvx hptrd hptrf hptri hptrs lacgv lacp2 lacpy lacrm lacrt ladiv laed0 laed7 laed8 laesy laev2 lahef lanhb lanhe lanhp lanht laqhb laqhe laqhp larcm larnv lartg lascl laset lasr lassq pttrf rot spmv spr stedc steqr symv syr ung2l ung2r ungbr unghr ungl2 unglq ungql ungqr ungr2 ungrq ungtr unm2l unm2r unmbr unmhr unml2 unmlq unmql unmqr unmr2 unmr3 unmrq unmrz unmtr upgtr upmtr z econd z secnd z srot srscl z drot drscl z icmax1 scsum1 z izmax1 dzsum1 cSsg|] }d|‘qS)zs%s.fr)r.r>rrr r0Qsz-lapack_src_info.calc_info..cSsg|] }d|‘qS)zd%s.fr)r.r>rrr r0RscSsg|] }d|‘qS)zc%s.fr)r.r>rrr r0SscSsg|] }d|‘qS)zz%s.fr)r.r>rrr r0TscSsg|] }d|‘qS)z%s.fr)r.r>rrr r0Uscsg|]}tj ˆ|¡‘qSr)r+r,r6)r.r>)Úsrc_dirrr r0Vsz..ZINSTALLcsg|]}tj ˆ|d¡‘qS)zlamch.f)r+r,r6)r.r)Úsrc_dir2rr r0YsZsdczcsg|]}tj ˆ|d¡‘qS)zlarfp.f)r+r,r6)r.r)r]rr r0[scs"g|]}tj ˆd|d¡‘qS)Úilazlr.f)r+r,r6)r.r)r]rr r0\scs"g|]}tj ˆd|d¡‘qS)r_zlc.f)r+r,r6)r.r)r]rr r0]scSsg|]}tj |¡r|‘qSr)r+r,r9)r.r>rrr r0asrM)rñrI)rr+r,r9r6r7ré)rÔrÂr ZallauxZlauxZlasrcZsd_lasrcZcz_lasrcZsclauxZdzlauxZslasrcZdlasrcZclasrcZzlasrcZoclasrcZozlasrcrñrÇr)r]r^r rîýs>      j zlapack_src_info.calc_infoN) r®r¯r°rÐrr´rör rîrrrr rñs rzŽ /* This file is generated from numpy/distutils/system_info.py */ void ATL_buildinfo(void); int main(void) { ATL_buildinfo(); return 0; } c Ksú| dg¡}| dg¡}t|ƒt|ƒf}|tkr8t|Sttƒƒ}d}i}yx|jt||tjdkd\}}|rÀt   d|t j ¡rÀ|jt|dg|tjdkd\}}|sÀt j ddd t|d d gd Wn–tk rXx0|D](}t   d |¡} | rø|  d¡}|dk rÚPqÚW|dkrtj dd¡}|r\d+[.]\d+[.]\d+)_ÚversionZ ATLAS_VERSIONZ ATLAS_INFOz"\"%s\"")r/)Ú NO_ATLAS_INFOrÿz?.?.?z*ATLAS version (?P\d+[.]\d+[.]\d+)zundefined symbol: ATL_buildinfoz3.2.1_pre3.3.6z Status: %dz Output: %s)rcéþÿÿÿ)r§ÚtupleÚ_cached_atlas_versionÚ cmd_configr Z get_outputÚatlas_version_c_textr©r×ÚreÚsearchÚMrôrõráÚ ExceptionÚgroupr+rr rÇ) rrÜr¾rÛrHrVrÇÚsÚor<Úresultrrr rRqsf              rRc@seZdZeZdd„ZdS)r—cCsštdƒ}|r|jf|ŽdStdƒ}|r8|jf|ŽdStdƒ}|sLtdƒ}|sXtdƒ}|sdtdƒ}tjdkr\|s\|s\|s\g}g}tƒdd…d ks¼d tƒks¼d tƒks¼d t ¡krÂd }nd }tj d¡r|ræ| dg¡n | dg¡| ddg¡n|r$| dg¡n | dg¡| ddg¡|r\|j||ddgddSd }d }i} |r˜|  dg¡} d| ksŽd| kr’d }|} n&t j t j ddd }d }t| dgd|r$tdƒ} | ràt| f| ŽnDt j tj ddtd ƒ} | st j tj dddSt| d!| fgd"|rŠtd#ƒ} | rFt| f| ŽnDt j tj ddtd$ƒ}|sxt j tj dddSt| d%|fgd"|jf| ŽdS)&NrMrKrFrErAr@réüÿÿÿÚi386ÚintelÚx86_64r¼rz0/System/Library/Frameworks/Accelerate.framework/z-msse3z -faltivecz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/z -Wl,vecLib)rcr)r@N)rÄrÅr/r/)rJN)rKNrï)rð)rcr¼)r/rZr[Z flapack_src)rÜrYr\Ú fblas_src)rªrér4rr r+r,rPrr§rôrõr²r±rár³r´rµr¶)rÔrr~rqr(Ú link_argsrsZ need_lapackÚ need_blasrÇr rrrŽr‘rrr rî¾s–           zlapack_opt_info.calc_infoN)r®r¯r°r³rörîrrrr r—ºsr—c@seZdZeZdd„ZdS)r˜c CsDtdƒ}|r|jf|ŽdStdƒ}|r8|jf|ŽdStdƒ}|rT|jf|ŽdStdƒ}|shtdƒ}|sttdƒ}|s€tdƒ}tjdkr˜|s˜|s˜|s˜|s˜g}g}tƒd d…d ksÞd tƒksÞd tƒksÞd t ¡kräd }nd}tj d¡r2|r | dg¡n | dg¡| dg¡| ddg¡nHtj d¡rz|rT| dg¡n | dg¡| dg¡| ddg¡|r˜|j||ddgddSd}i} |r¬|} n"t j t j ddd }t | dgd|r4tdƒ} | rðt | f| ŽnDt j tj ddtdƒ} | s"t j tj dddSt | d | fgd!|jf| ŽdS)"NrNrLrJrHrGrCrBrrqrrrsrtr¼rz0/System/Library/Frameworks/Accelerate.framework/z-msse3z -faltivecz5-I/System/Library/Frameworks/vecLib.framework/Headersz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/z -Wl,vecLib)rcr)r@N)rÄrÅr/rï)rð)rcr¼)r/rYr\ru)rÜ)rªrér4rr r+r,rPrrôrõr²r±rárµr¶) rÔr‚r€r~rqr(rvrsrwrÇrŽr‘rrr rî#s†          zblas_opt_info.calc_infoN)r®r¯r°rµrörîrrrr r˜sr˜c@s.eZdZdZdZdgZeZdd„Zdd„Z dS)rŽrYZBLAScCs| ¡}| d|j¡}| ||g¡}|dkr0dS| ¡|d<t ¡dkrRd|d<n.| |¡}|dk r€d|d<|g|d<dg|d <|jf|ŽdS) NÚ blas_libsr¿ZWindowsrMrIrHrÜ)r@Nr/) rÞrrràrrÚsystemÚ has_cblasré)rÔrrxrÇr(rrr rîs      zblas_info.calc_infoc Cs d}tj ¡}| d¡t ¡}d}tj |d¡}zÜt |dƒ}|  |¡WdQRXy˜|j |g||  ¡d}y4|j |tj |d¡dg|d | d g¡d d}WnHtjjk rè|j |tj |d¡d g|d | d g¡d d }YnXWntjjk r d}YnXWdt |¡X|S) NFr½zÒ#include int main(int argc, const char *argv[]) { double a[4] = {1,2,3,4}; double b[4] = {5,6,7,8}; return cblas_ddot(4, a, 1, b, 1) > 10; }zsource.cÚwt)Ú output_dirr¿za.outrDr¾rÅ)rÜr¾Úextra_postargsrY)Ú distutilsÚ ccompilerÚ new_compilerÚ customizeÚtempfileÚmkdtempr+r,r6r7ÚwriteÚcompilerÚlink_executabler§Ú LinkErrorZ CompileErrorÚshutilÚrmtree) rÔrÇrürHÚtmpdirrnr*r>Úobjrrr rz•s8      zblas_info.has_cblasN) r®r¯r°rÐrrrµrörîrzrrrr rŽys rŽc@s.eZdZdZdZdgZeZdd„Zdd„Z dS)r~rJÚOPENBLAScCsdS)NTr)rÔrÇrrr Úcheck_embedded_lapackÉsz#openblas_info.check_embedded_lapackcCsŒ| ¡}| d|j¡}||jkr.| d|j¡}| ||g¡}|dkrHdS| ¡}t|f|Ž| |¡sjdSd|d<dg|d<|jf|ŽdS)NrÜÚ openblas_libsrHrI)r@Nr/)rÞrrràrærárré)rÔrrŽrÇrèrrr rîÌs    zopenblas_info.calc_infoN) r®r¯r°rÐrrrµrörrîrrrr r~Ãs r~c@s&eZdZdZdZdgZeZdd„ZdS)rrJrŒc Csæd}tj ¡}| d¡t ¡}d}tj |d¡}tj |d¡}y |d}Wng}YnXzvt |dƒ} |   |¡WdQRX|j |g|d} y$|j | ||d |d |d d }Wntjj k rÐd}YnXWdt |¡X|S) NFr½z~void zungqr(); int main(int argc, const char *argv[]) { zungqr_(); return 0; }zsource.cza.outrÅr{)r|rÜr¾)rÜr¾r}T)r~rr€rr‚rƒr+r,r6r7r„r…r†r‡rˆr‰) rÔrÇrürHrŠrnr*rZ extra_argsr>r‹rrr rès0      z*openblas_lapack_info.check_embedded_lapackN) r®r¯r°rÐrrrµrörrrrr râs rc@s&eZdZdZdZdgZeZdd„ZdS)r€rLZBLIScCsr| ¡}| d|j¡}||jkr.| d|j¡}| ||g¡}|dkrHdS| ¡}t|ddg|d|jf|ŽdS)NrÜÚ blis_libsrH)r@N)rIr/r¿)rÞrrrrráré)rÔrrrÇr0rrr rîs zblis_info.calc_infoN) r®r¯r°rÐrrrµrörîrrrr r€ s r€c@s(eZdZdZdZeZdd„Zdd„ZdS)r‘r\ZBLAS_SRCcCsHt |||¡}g}x&|D]}| |g| |dg¡¡qWdd„|DƒS)NrYcSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0-sz+blas_src_info.get_paths..)r©r rr )rÔrÐrÛr3rãr rrr r (s  zblas_src_info.get_pathscs| ¡}d‰x(|D] }tj tj |d¡¡r|‰PqWˆs>dSd}d}d}‡fdd„||| ¡Dƒ}dd„|Dƒ}|d d œ}|jf|ŽdS) Nr½zdaxpy.fao caxpy csscal dnrm2 dzasum saxpy srotg zdotc ccopy cswap drot dznrm2 scasum srotm zdotu cdotc dasum drotg icamax scnrm2 srotmg zdrot cdotu daxpy drotm idamax scopy sscal zdscal crotg dcabs1 drotmg isamax sdot sswap zrotg cscal dcopy dscal izamax snrm2 zaxpy zscal csrot ddot dswap sasum srot zcopy zswap scabs1 aÐ cgbmv chpmv ctrsv dsymv dtrsv sspr2 strmv zhemv ztpmv cgemv chpr dgbmv dsyr lsame ssymv strsv zher ztpsv cgerc chpr2 dgemv dsyr2 sgbmv ssyr xerbla zher2 ztrmv cgeru ctbmv dger dtbmv sgemv ssyr2 zgbmv zhpmv ztrsv chbmv ctbsv dsbmv dtbsv sger stbmv zgemv zhpr chemv ctpmv dspmv dtpmv ssbmv stbsv zgerc zhpr2 cher ctpsv dspr dtpsv sspmv stpmv zgeru ztbmv cher2 ctrmv dspr2 dtrmv sspr stpsv zhbmv ztbsv zÛ cgemm csymm ctrsm dsyrk sgemm strmm zhemm zsyr2k chemm csyr2k dgemm dtrmm ssymm strsm zher2k zsyrk cher2k csyrk dsymm dtrsm ssyr2k zherk ztrmm cherk ctrmm dsyr2k ssyrk zgemm zsymm ztrsm csg|]}tj ˆ|d¡‘qS)z.f)r+r,r6)r.r>)r]rr r0Osz+blas_src_info.calc_info..cSsg|]}tj |¡r|‘qSr)r+r,r9)r.r>rrr r0RsrM)rñrI)rr+r,r9r6r7ré)rÔrÂr Zblas1Zblas2Zblas3rñrÇr)r]r rî/s     zblas_src_info.calc_infoN) r®r¯r°rÐrr¶rör rîrrrr r‘#s r‘c@s$eZdZdZeZdd„Zdd„ZdS)rƒrOcCstj|ttddS)N)rÕrÖ)r©rÙÚdefault_x11_lib_dirsÚdefault_x11_include_dirs)rÔrrr rÙ[szx11_info.__init__cCstjdkrdS| ¡}| ¡}| ddg¡}| ||g¡}|dkrFdSd}x|D]}| |d¡rP|}PqPW|dk r€t||gd|jf|ŽdS)N)r"Úx11_libsÚX11zX11/X.h)r¿) r4rrÞrrràr ráré)rÔrr¿r’rÇÚinc_dirr rrr rî`s    zx11_info.calc_infoN)r®r¯r°rÐrºrörÙrîrrrr rƒWsrƒc@s(eZdZdZdZeZdd„Zdd„ZdS)Ú _numpy_infor_cCsg}y†t|jƒ}g}x*|j tj¡D]}|dkr2P| |¡q$Wy| t|dƒƒ¡Wntk rjYnX| t j j tj  |¡d¡Wnt k ržYnXt j   ¡}| |¡t j j dd}||krÔ| |¡x4tD],}tj  |tj |¡¡}||krÚ| |¡qÚWtj|g|ddS)Nr(Z get_include)r#T)Ú plat_specific)rÕrÖ)Ú __import__Ú modulenamer2r7r+r8r:rÚAttributeErrorr~Ú sysconfigÚget_python_incr6Ú ImportErrorrÖr,rr©rÙ)rÔr¿Úmoduler#r«Z py_incl_dirÚ py_pincl_dirr rrr rÙxs8      z_numpy_info.__init__c Csäyt|jƒ}Wntk r"dSXi}g}xHdD]@}t||dƒ}|dkrLq2|j ¡dd|f|j ¡dfg}Pq2Wt||d| ¡}d}x*|D]"}| |tj   |jd¡¡r”|}Pq”W|dk rÐt||gd|rà|j f|ŽdS)N)Ú __version__rbZ_VERSIONz"\"%s\"")r/z arrayobject.h)r¿) r—r˜rœrÚupperrárr r+r,r6ré) rÔrrÇr,rþZvrsr¿r”r rrr rîšs8       z_numpy_info.calc_infoN) r®r¯r°rÐr˜r¹rörÙrîrrrr r•ss "r•c@seZdZdZdZdS)r•raN)r®r¯r°rÐr˜rrrr r•¹sr•c@seZdZdZdZdS)r”r_N)r®r¯r°rÐr˜rrrr r”¾sr”c@seZdZdZdZdS)r’r]N)r®r¯r°rÐr˜rrrr r’Ãsr’c@seZdZdZdd„ZdS)r–rbcCs>d}t d¡rt d¡df}|ddkrÚd}yddl}d}Wnœtk rØttƒƒ}yddl}d}Wnltk rÒttƒƒ}yddl}d}Wn<tk rÌttƒƒ}t  |¡t  |¡t  |¡YnXYnXYnX|d  ¡  ¡|df}|dd krt d |d|dfƒ‚|dtj d<|jft|dƒŽdS) N)NNZNUMERIXzenvironment varr)r]Ú defaulted)r`r¡)rar¡r¼)r`rar]zonumerix selector must be either 'Numeric' or 'numarray' or 'numpy' but the value obtained from the %s was '%s'.)r+Úgetenvr]rœrËrr_rar rÇrr¨rrrérª)rÔZwhichr]Zmsg1r_Zmsg2raZmsg3rrr rîËs:       znumerix_info.calc_infoN)r®r¯r°rÐrîrrrr r–Èsr–c@seZdZdd„ZdS)r“cCs^yddlm}Wntk r$dSXtj tj |j¡d¡}|jtj |d¡g|gddS)Nrr*zfortranobject.c)rñr¿) Z numpy.f2pyr^rœr+r,r6rr2ré)rÔr^Zf2py_dirrrr rîîs zf2py_info.calc_infoN)r®r¯r°rîrrrr r“ísr“c@s$eZdZdZdZdd„Zdd„ZdS)r™rcZBOOSTcCsHt |||¡}g}x&|D]}| |g| |dg¡¡qWdd„|DƒS)Nzboost*cSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0sz/boost_python_info.get_paths..)r©r rr )rÔrÐrÛr3rãr rrr r ýs  zboost_python_info.get_pathsc CsÞ| ¡}d}x.|D]&}tj tj |dddd¡¡r|}PqW|sDdStj ¡g}tjjdd}||krp| |¡tj |ddd¡}t tj |d¡ƒ}|t tj |d d¡ƒ7}d |g||d œfg|gd œ}|rÚ|j f|ŽdS) Nr½r#Úpythonr*z module.cppT)r–z*.cppr6Zboost_python_src)r¿rñ)rÜr¿) rr+r,r9r6r~ršr›r:rré) rÔrÂr]r Z py_incl_dirsržZsrcs_dirZbpl_srcsrÇrrr rîs.      zboost_python_info.calc_infoN)r®r¯r°rÐrr rîrrrr r™ùsr™c@s$eZdZdZdZdd„Zdd„ZdS)ršrdZAGG2cCsHt |||¡}g}x&|D]}| |g| |dg¡¡qWdd„|DƒS)Nzagg2*cSsg|]}tj |¡r|‘qSr)r+r,r-)r.r rrr r0)sz'agg2_info.get_paths..)r©r rr )rÔrÐrÛr3rãr rrr r $s  zagg2_info.get_pathscCsÔ| ¡}d}x*|D]"}tj tj |dd¡¡r|}PqW|s@dStjdkrdttj |dddd¡ƒ}n.ttj |dd¡ƒ}|tj |dddd ¡g7}d |tj |d ¡gd œfgtj |d ¡gd œ}|rÐ|jf|ŽdS)Nr½r*zagg_affine_matrix.cppr"rzagg_win32_bmp.cppz*.cppr“zagg_platform_support.cppZagg2_srcr))rñr¿)rÜr¿) rr+r,r9r6r4rrré)rÔrÂr]r Z agg2_srcsrÇrrr rî+s,     zagg2_info.calc_infoN)r®r¯r°rÐrr rîrrrr rš sršc@sDeZdZdZdZdZdZdZdZdZ dZ dd„Z d d „Z d d „Z dS) Ú_pkg_config_infoNZ PKG_CONFIGz pkg-configr½z --modversionz--cflagscCs|jtjkrtj|jS|jS)N)Úconfig_env_varr+rÚdefault_config_exe)rÔrrr Úget_config_exeTs  z_pkg_config_info.get_config_execCs2|d|jd|}t|dd\}}|s.|SdS)Nú r)r`)Úappend_config_exer)rÔÚ config_exeZoptionÚcmdrnrorrr Úget_config_outputYsz"_pkg_config_info.get_config_outputcCs„t| ¡ƒ}|s(t d||jf¡dSi}g}g}g}g}g}g}| ||j¡} | r | |jj   d¡d  ¡d| f¡|j r | |j d|   dd¡df¡|jrÖ| |d¡} | rÖ| |jd|   dd¡df¡| |d¡} | rPxf|   ¡D]Z} | dd …d kr| | d d…¡qò| dd …d krB| | d d…¡qò| | ¡qòW| ||j¡} | rxœ|   ¡D]} | dd …d kr˜| | d d…¡nd| dd …d kròd| krÚ| d d…  d¡\} }| | |f¡n| | d d…df¡n | | ¡qnW|rt||d|r&t||d|r8t||d|rJt||d|r\t||d|rnt||d|r€|jf|ŽdS)Nz-File not found: %s. Cannot determine %s info.r$rÿz"\"%s\""z_%sÚ_z --releasez--libsrïz-lz-Lz-Iz-Dú=)r/)rÜ)r¾)r¿)rÅ)rÄ)rr§r rõrÐr¬Ú version_flagr:rÆr®r7r Úversion_macro_nameÚreplaceÚrelease_macro_nameÚ cflags_flagráré)rÔrªrÇr,rÜr¾r¿rÅrÄrbÚreleaseÚoptsrëÚnrþrrr rî_st              z_pkg_config_info.calc_info)r®r¯r°rÐr¥r¦r©r°r²r¯r³r§r¬rîrrrr r¤Jsr¤c@s,eZdZdZdZdZdZdZdZdZ dZ d S) r›reZ WX_CONFIGz wx-configr½Z WX_VERSIONZ WX_RELEASEz --versionz --cxxflagsN) r®r¯r°rÐr¥r¦r©r°r²r¯r³rrrr r›Ÿsr›c@seZdZdZdZdZdS)rœrfzgdk-pixbuf-xlib-2.0ZGDK_PIXBUF_XLIB_VERSIONN)r®r¯r°rÐr©r°rrrr rœªsrœc@seZdZdZdZdZdS)rrgzgdk-pixbuf-2.0ZGDK_PIXBUF_VERSIONN)r®r¯r°rÐr©r°rrrr r°src@seZdZdZdZdZdS)r rjz gdk-x11-2.0ZGDK_X11_VERSIONN)r®r¯r°rÐr©r°rrrr r ¶sr c@seZdZdZdZdZdS)rŸrizgdk-2.0Ú GDK_VERSIONN)r®r¯r°rÐr©r°rrrr rŸ¼srŸc@seZdZdZdZdZdS)ržrhr·N)r®r¯r°rÐr©r°rrrr ržÂsržc@seZdZdZdZdZdS)r¡rkz gtk+-x11-2.0ZGTK_X11_VERSIONN)r®r¯r°rÐr©r°rrrr r¡Èsr¡c@seZdZdZdZdZdS)r¢rlzgtk+-2.0Z GTK_VERSIONN)r®r¯r°rÐr©r°rrrr r¢Îsr¢c@seZdZdZdZdZdS)r£rmZ XFT_VERSIONN)r®r¯r°rÐr©r°rrrr r£Ôsr£c@seZdZdZdZdZdS)r¤rnZFREETYPE2_VERSIONN)r®r¯r°rÐr©r°rrrr r¤Úsr¤c@s"eZdZdZdZdgZdd„ZdS)r¦rpZAMDcCsž| ¡}| d|j¡}| ||g¡}|dkr0dS| ¡}d}x.|D]&}| |d¡}|rBtj |d¡}PqBW|dk rŽt ||gdgd|gd|j f|ŽdS)NÚamd_libszamd.hr)Z SCIPY_AMD_HNz-I)r¿r/Ú swig_opts) rÞrrràrr r+r,rráré)rÔrr¸rÇr¿r”r rrrr rîås$   zamd_info.calc_infoN)r®r¯r°rÐrrrîrrrr r¦àsr¦c@s&eZdZdZdZeZdgZdd„ZdS)r¥roZUMFPACKc Cs¼| ¡}| d|j¡}| ||g¡}|dkr0dS| ¡}d}x4|D],}| |ddgd¡}|rBtj |d¡}PqBW|dk r”t ||gdgd|gdt d ƒ}t |ft d ƒŽ|j f|ŽdS) NÚ umfpack_libsr½roz umfpack.hr)ZSCIPY_UMFPACK_HNz-I)r¿r/r¹rp) rÞrrràrr r+r,rrárªré) rÔrrºrÇr¿r”r rrprrr rî s(  zumfpack_info.calc_infoN) r®r¯r°rÐrr»rörrîrrrr r¥þs r¥c Osêg}x*|D]"}|sq t|ƒr"|g}| |¡q W|}|s/ ózcombine_paths..rrïNz (paths: %s)r) rr:rùrÚmaprrr+r,r6r r r)r(Úkwsr5rrpZa0Za1rrr r  s(   ""r r¼rï)rHzc++rMrarHzc++rMra)rr¼rïrc s’g}xf| ¡D]Z\‰}ˆdkr*| |¡qˆˆkr`ˆdkrP‡‡fdd„|Dƒqhˆˆ |¡q|ˆˆ<qW|rŽttdd„|Dƒƒ}|ˆd<dS)NrI)r¾r¿rÄrÅrÀr/cs&g|]}|ˆˆkrˆˆ |¡‘qSr)r:)r.Zvv)r rýrr r0H szdict_append..cSsg|]}t |d¡‘qS)r)Ú language_mapr§)r.r rrr r0N s)rør:rÚinv_language_mapÚmax)r r¾Z languagesrþr r)r rýr rá> s  rá©NcCsHddl}| d¡}|jddddddd |j|d d…d \}}||fS) Nrzusage: %prog [-v] [info objs]z-vz --verboseÚ store_trueÚverboseFz"be verbose and print more messages)ÚactionÚdestrÚhelpr¼)r()ÚoptparseZ OptionParserZ add_optionÚ parse_args)r5rÈÚparserrµr(rrr Ú parseCmdLineS s  rËc Csddl}|dkrtj}t|ƒ\}}|jr6t tj¡n t tj¡g}x.|D]&}|dd…dkrh|d}|  |¡qLW| }t ƒ  ¡}xb|  ¡D]V\}} |  | ¡s¤qt| tƒr| tkr¸q|sÒ||krÆq|| |¡=| ƒ} d| _|  ¡} qW|rt dd |¡¡dS)NréûÿÿÿZ_inforïzInfo classes not defined: %sr)Úinspectr4r5rËrÄr Z set_thresholdÚDEBUGÚINFOr:ÚglobalsrúrøZisclassÚ issubclassr©r:r×rªrÇr6) r5rÍrµr(Z show_onlyr¶Úshow_allZ_gdict_r«rHZconfr5rrr rÒ^ s8       rÒÚ__main__)r)rÂ)N)¤r±Z __future__rrrr4r+rirúrôrÚ functoolsrÚ version_inforÌrr Z configparserZdistutils.errorsr Zdistutils.distr Zdistutils.sysconfigr~r Zdistutils.utilr Znumpy.distutils.exec_commandrrrZnumpy.distutils.misc_utilrrrZnumpy.distutils.command.configrrgZnumpy.distutils.compatrZdistutils.ccompilerr‚rˆrZ_bitsZ architectureZ platform_bitsr!r,r6ršZ EXEC_PREFIXrÕrÉrÖrÊrr‘rPZglobbed_x11_dirr7Z x11_so_dirrÚ subprocessZsprìr7ÚdevnullÚPopenÚPIPErÚOSErrorrËZ communicateÚdecoderZtripletÚ returncodeÚcloser#Úinsertr:rr?rªr­r²r³r´rµr¶r·r¸r¹rºr»Úobjectr©r„r…r†r‡rˆr‰rŠr‹rŒrr}rr‚rqrsrrrtrurvrwryrxrzr{r|rrrhrfrRr—r˜rŽr~rr€r‘rƒr•r•r”r’r–r“r™ršr¤r›rœrr rŸržr¡r¢r£r¤r¦r¥r r¿rÀrárËrÒr®rrrr ÚxsH            '          $ JQ.       $Dn{IeZJ(4F% '*U "