U ã€C^7™ã @s¼ dZddlmZmZmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZejddkrddlmZddlmZnddlmZddlmZdd lmZdd lmZddlZdd lmZdd lmZdd lmZm Z m!Z!ddl"m#Z#m$Z$m%Z%ddl&m'Z(ddl)m*Z*ddlm+Z,ddlm-Z-ddl.Zddl/Z/ddl0Z0ddl1Z1dddœZ2e2e1 3¡dZ4da5dd„Z+dd„Z6dd„Z7ej1dkrÀdej8 9ej:j;d¡gadgZ?gZ@gZAd d!gZBd"gZCd#d$„eBDƒZBd%d$„eCDƒZCd&d'„ZDejd(kröe0 Ed)¡ZFeFrzej8 GeF¡ZHe1 3¡d*kr4d+ZInd,ZIej8 9eHd-¡ZJej8 9eJeId.¡ej8 9eJeId/¡fD]ZKeDeKƒqje0 Ed0¡ZLeLröej8 GeL¡ZMeDej8 9eMd1d2¡ƒeDej8 9eMd2¡ƒn6e7d3d4d5d6d7ge4ƒaga>dd?d@dAgZ?e7dBdCd5ge4ƒZ@dDdEd:gZAej8 NdF¡r\e dGƒZOeOr\ej8 PeOd¡dZQe@ ReQdFg¡eA RdHdIg¡eSejTdJƒˆZUze jVdKdLge jWeUdMZXWneYefk ržYnNXeZeX [¡d \¡ ]¡ƒZ^eXj_dkrìe@ej8 9dNe^¡g7Z@t bej8 9ej`d ¡¡e? bej8 9ej`dO¡¡dPd$„tDƒa>dSd$„e?DƒZ?e%ƒZcdTdU„ZdddVdW„ZeGdXdY„dYeƒZfGdZd[„d[eƒZgGd\d]„d]efƒZhGd^d_„d_efƒZiGd`da„daefƒZjGdbdc„dcejƒZkGddde„deefƒZlGdfdg„dgefƒZmGdhdi„diefƒZnGdjdk„dkefƒZoGdldm„dmenƒZpGdndo„doefƒZqGdpdq„dqefƒZrGdrds„dsefƒZsGdtdu„duefƒZtGdvdw„dwefƒZuGdxdy„dyevƒZwGdzd{„d{ewƒZxGd|d}„d}ewƒZyGd~d„deyƒZzGd€d„deyƒZ{Gd‚dƒ„dƒeyƒZ|Gd„d…„d…eyƒZ}Gd†d‡„d‡eyƒZ~Gdˆd‰„d‰eyƒZGdŠd‹„d‹eyƒZ€GdŒd„dewƒZGdŽd„dewƒZ‚Gdd‘„d‘e‚ƒZƒGd’d“„d“e‚ƒZ„Gd”d•„d•ewƒZ…Gd–d—„d—e…ƒZ†Gd˜d™„d™e…ƒZ‡Gdšd›„d›e†ƒZˆGdœd„de…ƒZ‰GdždŸ„dŸe‡ƒZŠGd d¡„d¡e…ƒZ‹Gd¢d£„d£e‹ƒZŒGd¤d¥„d¥e‹ƒZGd¦d§„d§eŒƒZŽGd¨d©„d©e‹ƒZGdªd«„d«eƒZGd¬d­„d­ewƒZ‘Gd®d¯„d¯ewƒZ’d°Z“iZ”d±d²„Z•Gd³d´„d´ewƒZ–Gdµd¶„d¶ƒZ—Gd·d¸„d¸e–e—ƒZ˜Gd¹dº„dºe˜ƒZ™Gd»d¼„d¼e˜ƒZšGd½d¾„d¾ewƒZ›Gd¿dÀ„dÀe›e—ƒZœGdÁd„dÂeœƒZGdÃdÄ„dÄeœƒZžGdÅdÆ„dÆewƒ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¤e¥ƒZ¦GdÕdÖ„dÖeŸƒZ§Gd×dØ„dØewƒZ¨GdÙdÚ„dÚewƒZ©GdÛdÜ„dÜewƒZªGdÝdÞ„dÞewƒZ«Gdßdà„dàewƒZ¬Gdádâ„dâe¬ƒZ­Gdãdä„däe¬ƒZ®Gdådæ„dæe¬ƒZ¯Gdçdè„dèewƒZ°Gdédê„dêewƒZ±Gdëdì„dìewƒZ²Gdídî„dîewƒZ³Gdïdð„dðewƒ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„de´ƒZ¼Gdd„de´ƒZ½Gdd„de´ƒZ¾Gdd„dewƒZ¿Gdd„dewƒZÀd d „ZÁdd d dd œZÂdddddœZÃdd„ZÄddd„ZÅddd„ZÆeÇdk r¸eƃdS(aO 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 flame_info blas_info lapack_info openblas_info openblas64__info openblas_ilp64_info blis_info blas_opt_info # usage recommended lapack_opt_info # usage recommended blas_ilp64_opt_info # usage recommended (general ILP64 BLAS) lapack_ilp64_opt_info # usage recommended (general ILP64 LAPACK) blas_ilp64_plain_opt_info # usage recommended (general ILP64 BLAS, no symbol suffix) lapack_ilp64_plain_opt_info # usage recommended (general ILP64 LAPACK, no symbol suffix) blas64__opt_info # usage recommended (general ILP64 BLAS, 64_ symbol suffix) lapack64__opt_info # usage recommended (general ILP64 LAPACK, 64_ symbol suffix) 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] libraries = rfftw, fftw [atlas] library_dirs = /usr/lib/3dnow:/usr/lib/3dnow/atlas # for overriding the names of the atlas libraries libraries = lapack, f77blas, cblas, atlas [x11] library_dirs = /usr/X11R6/lib include_dirs = /usr/X11R6/include ---------- Note that the ``libraries`` key is the default setting for libraries. 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Úfilepath_from_subprocess_outputÚ get_pythonexe)Ú is_sequenceÚ is_stringÚget_shared_lib_extension)Úconfig)Ú get_exception)Úcustomized_ccompiler)Ú _shell_utilsé é@)Ú32bitÚ64bitcCsts tƒatS©N)Úglobal_compilerÚ_customized_ccompiler©rrú>/tmp/pip-install-6_kvzl1k/numpy/numpy/distutils/system_info.pyr¶srcCs.| dd¡}| dd¡}| dd¡}d |¡S)zS Convert a python string into a literal suitable for inclusion into C code ú\z\\ú"z\"Ú z\nz"{}")ÚreplaceÚformat)Úsrrr Ú_c_string_literal½s   r'cCs@|dkrtdƒ‚|dkr|Sg}|D]}| |d|g¡q$|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Úprrr ÚlibpathsÈsr/Úwin32zC:\ÚlibsÚ.Úincludezinclude/suitesparseÚlibcCsg|]}| dtj¡‘qS©ú/©r$ÚosÚsep©Ú.0Údrrr Ú sr=cCsg|]}| dtj¡‘qSr5r7r:rrr r=scs@tj ˆ¡‰t ‡fdd„tDƒ¡t ‡fdd„tDƒ¡dS)z5Add a package manager root to the include directoriesc3s|]}tj ˆ|¡VqdSr©r8ÚpathÚjoinr:©Z library_rootrr Ú sz"add_system_root..c3s|]}tj ˆ|¡VqdSrr>r:rArr rB sN)r8r?ÚnormpathÚdefault_lib_dirsr*Ú _lib_dirsÚdefault_include_dirsÚ _include_dirsrArrAr Úadd_system_roots ÿÿrH)rrÚvcpkgrÚx86Úx64Ú installedz-windowsz-windows-staticÚcondaú..ÚLibraryz/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/ÚsrccCsg|]}tj |¡r|‘qSr©r8r?Úisdir©r;Ú_mrrr r=Ws cCsg|]}tj |¡r|‘qSrrTrVrrr r=Xs cCsg|]}tj |¡r|‘qSrrTrVrrr r=Ys cCsg|]}tj |¡r|‘qSrrTrVrrr r=Zs cCsÐg}zt}Wntk r*tjd}Yn:Xtj tj tj |¡¡d|¡}tj  |¡rd|  |¡ztj  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Úargvr8r?r@ÚsplitÚabspathÚisfileÚappendÚ expanduserÚKeyError)ÚfnameÚ filenamesÚfZsysfileÚ user_filerrr Úget_standard_file_s(ÿ     rgcKCs²tttttttttt t t t t ttttttttttttttttttt t!t"t#t$t%t&t't(t)t*t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t8t9t9t:t;t;tt>t?t@tAtBdœJ C| D¡tE¡}|ƒ F|¡S)zg notfound_action: 0 - do nothing 1 - display warning message 2 - raise error )JÚ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ÚflameÚmklÚopenblasÚopenblas_lapackÚopenblas_clapackÚblisÚ lapack_mklÚblas_mklÚ accelerateÚ openblas64_Zopenblas64__lapackÚopenblas_ilp64Zopenblas_ilp64_lapackÚ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_optZlapack_ilp64_optZlapack_ilp64_plain_optZ lapack64__optÚblas_optZblas_ilp64_optZblas_ilp64_plain_optZ blas64__optÚ boost_pythonÚagg2ÚwxÚgdk_pixbuf_xlib_2úgdk-pixbuf-xlib-2.0Ú gdk_pixbuf_2úgdk-pixbuf-2.0ÚgdkÚgdk_2úgdk-2.0Ú gdk_x11_2ú gdk-x11-2.0Ú gtkp_x11_2ú gtk+-x11-2.0Úgtkp_2úgtk+-2.0ÚxftÚ freetype2ÚumfpackÚamd)GÚ 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Ú flame_infoÚmkl_infoÚ openblas_infoÚopenblas_lapack_infoÚopenblas_clapack_infoÚ blis_infoÚlapack_mkl_infoÚ blas_mkl_infoÚaccelerate_infoÚopenblas64__infoÚopenblas64__lapack_infoÚopenblas_ilp64_infoÚopenblas_ilp64_lapack_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Úlapack_ilp64_opt_infoÚlapack_ilp64_plain_opt_infoÚlapack64__opt_infoÚ blas_opt_infoÚblas_ilp64_opt_infoÚblas_ilp64_plain_opt_infoÚblas64__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ëƒsžµL´Mrëc@seZdZdZdS)Ú NotFoundErrorz1Some third-party program or library is not found.N©Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr rîÚsrîc@seZdZdZdS)ÚAliasedOptionErrorz‹ Aliases entries in config files should not be existing. In section '{section}' we found multiple appearances of options {options}.Nrïrrrr rôÞsrôc@seZdZdZdS)ÚAtlasNotFoundErrorzó Atlas (http://github.com/math-atlas/math-atlas) 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.Nrïrrrr rõäsrõc@seZdZdZdS)ÚFlameNotFoundErrorz¿ FLAME (http://www.cs.utexas.edu/~flame/web/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [flame]).Nrï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.Nrï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.Nrïrrrr røûsrøc@seZdZdZdS)ÚLapackILP64NotFoundErrorz† 64-bit Lapack libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 Nrïrrrr rùsrùc@seZdZdZdS)ÚBlasOptNotFoundErrorzÈ Optimized (vendor) Blas libraries are not found. Falls back to netlib Blas library which has worse performance. A better performance should be easily gained by switching Blas library.Nrï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.Nrïrrrr rûsrûc@seZdZdZdS)ÚBlasILP64NotFoundErrorz„ 64-bit Blas libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 Nrï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.Nrï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.Nrïrrrr rþ'srþc@seZdZdZdS)ÚDJBFFTNotFoundErrorzë DJBFFT (https://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.Nrïrrrr rÿ/srÿc@seZdZdZdS)ÚNumericNotFoundErrorzw Numeric (https://www.numpy.org/) module not found. Get it from above location, install it, and retry setup.py.Nrïrrrr r7src@seZdZdZdS)ÚX11NotFoundErrorzX11 libraries not found.Nrïrrrr r=src@seZdZdZdS)ÚUmfpackNotFoundErrora UMFPACK sparse solver (https://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.Nrïrrrr rAsrc@sîeZdZdZdZdZdZiZeZ e e fdd„Z dd„Z d d „Zd d „Zd d„Zdd„Zdd„Zd6dd„Zdd„Zd7dd„Zd8dd„Zd9dd„Zd:d!d"„Zd#d$„Zd;d&d'„Zd(d)„Zgfd*d+„Zgfd,d-„Zd.d/„Zd0d1„Zd2d3„Z d4d5„Z!dS)|r,| ¡}t|f|Ž| ¡}t|f|Ž||j|jj<dSr)r-r)Úcalc_extra_infoÚ saved_resultsr rð)rrZlib_infoÚ extra_inforrr Úset_info’s   zsystem_info.set_infocs~t‡fdd„|ƒ}t|ƒ}t|ƒdkr4|| d¡St|ƒdkrH|dStjdkrXtƒ‚ttjjˆjd d |¡¡d ƒ‚dS) a¸ Ensure that only one of `options` are found in the section Parameters ---------- *options : list of str a list of options to be found in the section (``self.section``) Returns ------- str : the option that is uniquely found in the section Raises ------ AliasedOptionError : in case more than one of the options are found csˆj ˆj|¡Sr)rÚ has_optionr)Úoptr"rr Ú­óz/system_info.get_option_single..éTrNz[{}]z, )rÚoptions) ÚmapÚlistÚsumÚindexrôrór%rr@)rr7Úfoundrr"r Úget_option_single›s   ÿzsystem_info.get_option_singlecCs|jj|jkSr)r rðr/r"rrr Úhas_info¼szsystem_info.has_infocCsFi}dD]8}|j |j|¡}tj |¡}|r||i}t|f|Žq|S)z˜ Updates the information in the current information with respect to these flags: extra_compile_args extra_link_args )r r )rrèrrZ NativeParserr]r))rrr#r3Ú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¡}t ¡tjkr2|r2| ¡D]R\}}t|ƒ}|d krt|ƒd kr|d d …d |dd …}t d||¡qÔt d¡t |¡S)zu Return a dictonary with items that are compatible with numpy.distutils.setup keyword arguments. rr6ú:Ú calc_infoé©Ú stacklevelz NOT AVAILABLEz FOUND:)Úsourcesr$iNéxz ... ... ...iˆÿÿÿz %s = %sr)r>r rr rðÚhasattrrAÚwarningsÚwarnÚ notfounderrorrór)Úreprr1r/rèZ get_thresholdÚINFOÚitemsrÚlenÚcopyÚdeepcopy)rríÚflagÚresÚkÚvrrr rëÏs4      zsystem_info.get_infocCsL|j ||¡ tj¡}|j}|rrt|ƒrr|d}|D]}|tjkr4|}qLq4|d|ksnt  d|d|f¡|}|r¼|tjkr¼tj|}|dkr²t  d|j j d|f¡gStj   |¡rNtj  |¡g|}t|dgƒ}t|ƒdkr¼tj  |¡} tj  | ¡d} | dd …d kr¼t  d |jd| d d…f¡| d d…|jd<nn| tj¡} g} | D]P}tj  |¡rb|  |¡d D],} tj  || ¡} tj  | ¡r‚|  | ¡q‚qb| |}|j |j|¡ tj¡}| |¡g}|D]L}t|ƒdkrtj  |¡stjd |ddqæ||kræ| |¡qæt d|d |¡¡|S)Néÿÿÿÿrz Setting %s=%sÚNonezDisabled %s: %sz (%s is None)Ú _lib_namesr6rr4z#Replacing _lib_names[0]==%r with %r)r3r4zSpecified path %s is invalid.rBrCz ( %s = %s )r@)rrèr]r8rÚ dir_env_varrÚenvironr rr rðr?r_ÚdirnameÚgetattrrNÚbasenameÚsplitextrWrUr`r@rr*rHrIÚdebug)rrr#r+Úenv_varZe0Úer<ÚlÚbZdsZds2ÚddZd1Z default_dirsÚretrrr Ú get_pathsósl   ÿÿ  ÿ    zsystem_info.get_pathsrcCs| |j|¡Sr©rer©rr#rrr r&*szsystem_info.get_lib_dirsrcCs | |j|¡}|dgkrg}|S)Nrrf)rr#r?rrr r'-s z system_info.get_runtime_lib_dirsrcCs| |j|¡Srrfrgrrr Úget_include_dirs3szsystem_info.get_include_dirsr cCs| |j|¡Srrfrgrrr Ú get_src_dirs6szsystem_info.get_src_dirscCsjz|j |j|¡}Wn6tk rJ|s0gYSt|ƒrB|gYS|YSXdd„dd„| d¡DƒDƒS)NcSsg|] }|r|‘qSrr)r;rbrrr r=Bsz(system_info.get_libs..cSsg|] }| ¡‘qSr)Ústrip)r;Úarrr r=Bsú,)rrèrrrr])rr#Údefaultr1rrr Úget_libs9s  zsystem_info.get_libsr$cCs*t|dƒr|j||jdS| |d¡SdS)NrW)rmr)rGrnrWrgrrr r%Ds zsystem_info.get_librariescCsztƒ}g}|jdkr| d¡tjdkr2| d¡|jrD|tg}n tg|}tjdkrb| d¡tjdkrv| d¡|S) NÚmsvcú.ar0ú.libÚcygwinú.dll.aÚdarwinz.dylib)rÚ compiler_typer`r[Úplatformr Úso_ext)rÚcZ static_extsÚextsrrr Úlibrary_extensionsJs          zsystem_info.library_extensionscCsP| ¡}d}|D]"}| ||||g¡}|dk rq4q|sLt 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). Nú libraries %s not found in %srl©rzÚ _check_libsr rr@)rÚlib_dirsr1Úopt_libsryrÚ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. r{rlr|)rr~r1rryrrrr Ú check_libs2nsÿzsystem_info.check_libs2cCs–t|ƒs t‚tjdkr ddg}ndg}|D]f}|D] }| ||||¡}|r2qTq2|r*t|ƒdksht‚|dkrx|d7}|dkrˆ||}|Sq*dS) Nr0rr4r6rsz.dllrqF)rrr[rvÚ combine_pathsrN)rÚlib_dirr4ryÚ lib_prefixesr€Úprefixr.rrr Ú _find_lib|s"    zsystem_info._find_libc CsXgg}}|D]@}|D]6}| |||¡}|r| |¡||krH| |¡qqq||fSr)r†r`) rr~r1ryÚ found_dirsÚ found_libsr4rƒZ found_librrr Ú _find_libs•s   zsystem_info._find_libsc CsŠt|ƒs|g}| |||¡\}}t|ƒdkr‚t|ƒt|ƒkr‚| |||¡\}}| |¡|D]} | |kr\| | ¡q\||dœ} | SdSdS)zxFind mandatory and optional libs in expected paths. Missing optional libraries are silently forgotten. r©r$rN)rr‰rNr*r`) rr~r1rryr‡rˆZopt_found_dirsZopt_found_libsrƒrrrr r}¢s   zsystem_info._check_libscGst|ŽS)zjReturn a list of existing paths composed by all combinations of items from the arguments. )r‚)rÚargsrrr r‚·szsystem_info.combine_paths)r)r)r)r)r )r$)"rðrñròrórrXr r/rîrJrDrFrrr-r1r=r>r.rërer&r'rhrirnr%rzr(rr†r‰r}r‚rrrr rêIs<þ  ! $7        rêc@seZdZdd„ZdS)r¿cCsXi}tdƒptdƒptdƒ}tdƒ}|rTt|f|Ž|rDt|f|Ž|jf|ŽdSdS)Nrr~r€r…)rër)r1)rrrÀrÈrrr rAÀs   zfft_opt_info.calc_infoN©rðrñròrArrrr r¿¾sr¿c@sTeZdZdZdZeZddgdgdgdœdddgd d gd gdœgZd d „Zdd„Z dS)rÀr}ÚFFTWrúfftw3.h©Z SCIPY_FFTW3_HN©rìr1ÚincludesÚmacrosr~Úrfftwúfftw.húrfftw.h©Z SCIPY_FFTW_HNc CsÖ| ¡}| ¡}| |jdd¡}| ||d¡}| ||¡}|dk r¤d}|D]:}t| ||d¡ƒt|dƒkrNt||gdd}qŠqN|r t||d d nd}|dk r¼|j f|Žd St   d |d ¡dSdS)z8Returns True on successful version detection, else FalseZ_libsr$r1Nrr‘©rr6r’©Ú define_macrosTz %s not foundrìF) r&rhr=rrnr(rNr‚r)r1r r) rZ ver_paramr~Ú incl_dirsr3r1rrQr<rrr Ú calc_ver_infoÚs,  ÿ zfftw_info.calc_ver_infocCs|jD]}| |¡rqqdSr)Úver_infor›)rr,rrr rAõs  zfftw_info.calc_infoN) rðrñròrrXrþrJrœr›rArrrr rÀÌs ýýü rÀc@s2eZdZdZdZeZdddgddgdgdœgZd S) rÁr}rr~r“r”r•r–rN©rðrñròrrXrþrJrœrrrr rÁûsýrÁc@s.eZdZdZdZeZddgdgdgdœgZdS)rÂrZFFTW3rŽrrNrrrrr rÂsýrÂc@s.eZdZdZdZdddgddgdgdœgZd S) rÃr}rr€Zdrfftwzdfftw.hzdrfftw.h)Z SCIPY_DFFTW_HNrN©rðrñròrrXrœrrrr rÃsýrÃc@s.eZdZdZdZdddgddgdgdœgZd S) rÄr}rrZsrfftwzsfftw.hzsrfftw.h)Z SCIPY_SFFTW_HNrNržrrrr rÄsýrÄc@s.eZdZdZdZdddgddgdgd œgZd S) rÅr}rz fftw threadsZ rfftw_threadsr‚zfftw_threads.hzrfftw_threads.h)ZSCIPY_FFTW_THREADS_HNrNržrrrr rÅ%sýrÅc@s.eZdZdZdZdddgddgdgd œgZd S) rÆr}rz dfftw threadsZdrfftw_threadsrƒzdfftw_threads.hzdrfftw_threads.h)ZSCIPY_DFFTW_THREADS_HNrNržrrrr rÆ.sýrÆc@s.eZdZdZdZdddgddgdgd œgZd S) rÇr}rz sfftw threadsZsrfftw_threadsr„zsfftw_threads.hzsrfftw_threads.h)ZSCIPY_SFFTW_THREADS_HNrNržrrrr rÇ7sýrÇc@s(eZdZdZdZeZdd„Zdd„ZdS)rÈr…ZDJBFFTcCsDt |||¡}g}|D]}| | |dg¡|g¡qdd„|DƒS)Nr…cSsg|]}tj |¡r|‘qSrrTr:rrr r=Js z)djbfft_info.get_paths..©rêrer*r‚©rrr#Zpre_dirsr+r<rrr reEs zdjbfft_info.get_pathscCs¼| ¡}| ¡}d}|D]L}| |dg¡}|r:d|i}qf| |ddtg¡}|rdg|gdœ}qfq|dkrrdS|D]@}t| |ddg¡ƒd krvt||gd gd |jf|ŽdSqvdS) Nzdjbfft.aÚ extra_objectsz libdjbfft.aZ libdjbfftr…rŠzfftc8.hz fftfreq.hrB)ZSCIPY_DJBFFT_HN)rr™)r&rhr‚rwrNr)r1)rr~ršrr<r.rrr rALs,ÿ zdjbfft_info.calc_infoN) rðrñròrrXrÿrJrerArrrr rÈ@s rÈc@s2eZdZdZdZdgZdd„Zdd„Zdd „Zd S) r²rrÚMKLROOTZmkl_rtc Cs8tj dd¡}|dk r|Stj dd¡ tj¡}d}tj |¡rvt|dƒ&}|D]}| ¡}|rP|  |¡qPW5QRXg}|D]P}| tj ¡}|D]:} |   d¡r’tj   |d|  | ¡d…¡}|  |¡q~q’q~|D]^}ttj  |dd¡ƒ} | ttj  |d ¡ƒ7} | D]*} tj tj  | d ¡¡r| SqqÔdS) Nr¢ZLD_LIBRARY_PATHrz/etc/ld.so.confÚrrrrBÚ*zmkl*r4)r8rYrèr]rr?r_Úopenrjr`r9Ú startswithr@r;rrU) rÚmklrootr+Z ld_so_confrer<Zintel_mkl_dirsr?Z path_atomsÚmr+Zsub_dirrrr Úget_mkl_rootdiris4     zmkl_info.get_mkl_rootdircCs~| ¡}|dkrt |¡n^ddlm}| ¡r6d}n| ¡rL| ¡rLd}nd}tj|tj   |d|¡gtj   |d¡gddS) Nr6)Úcpur(Zintel64Z32r4r3©rDrF) r©rêrZcpuinforªZ is_ItaniumZis_IntelZis_64bitr8r?r@)rr§rªZpltrrr r…s  ýzmkl_info.__init__cCs~| ¡}| ¡}| dd¡}| ||j¡}| ||¡}|dkrBdSt|ddg|dtjdkr`nt|dgd|j f|ŽdS) NÚmkl_libsr$)Z SCIPY_MKL_HN©Z HAVE_CBLASN)r™rr0Zpthread©r$) r&rhr=rnÚ_lib_mklrr)r[rvr1)rr~ršr3r¬rrrr rA–s"  ÿý zmkl_info.calc_infoN) rðrñròrrXr¯r©rrArrrr r²ds r²c@s eZdZdS)r·N©rðrñròrrrr r·©sr·c@s eZdZdS)r¸Nr°rrrr r¸­sr¸c@s\eZdZdZdZddgZejdd…dkr8dgZd gZ n dgZd gZ e Z d d „Z d d„Z dS)r¥rhÚATLASÚf77blasÚcblasNéZfreebsdZatlas_rZ alapack_rr‡c CsLt |||¡}g}|D]&}| | |dddddg¡|g¡qdd„|DƒS)Núatlas*úATLAS*ZsseZ3dnowZsse2cSsg|]}tj |¡r|‘qSrrTr:rrr r=Äs z(atlas_info.get_paths..rŸr rrr re¾sÿÿzatlas_info.get_pathscCsÆ| ¡}i}| dd¡}| ||j|j¡}| d|j¡}d}d}d}|D]b} | | dgg¡} | | |g¡}|dk r¤| g| | ddg¡} | | |g¡}|dk r¤q®|rJ|}qJt  |j ¡|dkrÆ|}|dkrÒdS|  ¡} | || d¡pîdg} | d} | rt j  | ¡} t|| gd d |d <|dk rDt|f|Žt|f|Žnzd|dkr|t|f|Žt|d gd |jf|ŽdSt|f|Žt|dgd t d¡}tj|dd|jf|ŽdS|dd}|dd}d}dg}tjdkrö| d¡| ¡D]L}|D]4}t j  ||||¡}t j  |¡r|}q<q|rþqLqþ|dk rœt  |¡d}|dkr”t d¡||df}tj|ddnd|d <tf|Ž\}}t|f|Ž|jf|ŽdS)NÚ atlas_libsr$Ú lapack_libsrlrµr¶úcblas.hrr—rxÚlanguage©ZATLAS_WITH_LAPACK_ATLASNr˜©ZATLAS_WITHOUT_LAPACKNa ********************************************************************* Could not find lapack library within the ATLAS installation. ********************************************************************* rBrCrr4r0réi€>aÙ ********************************************************************* 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&r=rnrWÚ _lib_atlasÚ _lib_lapackrr‚r rr rhr8r?rZr)r1ÚtextwrapÚdedentrHrIr[rvr`rzr@ÚexistsÚstatÚget_atlas_version)rr~rr3r·r¸rhr‡Zatlas_1r<rlZ lib_dirs2rÚhÚmessageZ lapack_dirZ lapack_nameZ lapack_libr„r`r…ÚfnÚszÚ atlas_versionÚatlas_extra_inforrr rAÆsŽ      ÿ              ø  zatlas_info.calc_info)rðrñròrrXrWr[rvr¿rÀrõrJrerArrrr r¥±sr¥c@seZdZddgZdd„ZdS)r§r²r³c CsÒ| ¡}i}| dd¡}| ||j|j¡}| ||g¡}|dkrFdS| ¡}| ||d¡pbdg}|d}|rŠtj   |¡}t ||gdd|d<dg|d <t f|Ž\}} t |f| Žt |f|Ž|j f|ŽdS) Nr·r$r¹rr—rxrºr­r™)r&r=rnrWr¿rrhr‚r8r?rZr)rÅr1© rr~rr3r·rhrrÆrÊrËrrr rA#s(      zatlas_blas_info.calc_infoN©rðrñròrWrArrrr r§ sr§c@seZdZddgZddgZdS)r¦ÚPTATLASr±Ú ptf77blasÚptcblasN©rðrñròrXrWrrrr r¦=sr¦c@seZdZddgZddgZdS)r¨rÎr±rÏrÐNrÑrrrr r¨Bsr¨c@seZdZdgejZdS)r©rlN)rðrñròr¥rWrrrr r©Gsr©c@seZdZdgejZdS)rªrlN)rðrñròr¦rWrrrr rªKsrªc@seZdZdgZeZeZdS)r«ÚsatlasN)rðrñròrWr¿rÀrrrr r«Osr«c@seZdZdgZdd„ZdS)r­rÒc CsÌ| ¡}i}| dd¡}| ||j¡}| ||g¡}|dkr@dS| ¡}| ||d¡p\dg}|d}|r„tj  |¡}t ||gdd|d<dg|d <t f|Ž\}} t |f| Žt |f|Ž|j f|ŽdS) NZ atlas_libr$r¹rr—rxrºr­r™) r&r=rnrWrrhr‚r8r?rZr)rÅr1rÌrrr rAXs(      zatlas_3_10_blas_info.calc_infoNrÍrrrr r­Usr­c@s"eZdZddgZdgZeZeZdS)r¬rÎr±ÚtatlasN)rðrñròrXrWr¿rÀrrrr r¬rsr¬c@seZdZddgZdgZdS)r®rÎr±rÓNrÑrrrr r®ysr®c@s eZdZdS)r¯Nr°rrrr r¯~sr¯c@s eZdZdS)r°Nr°rrrr r°‚sr°c@s&eZdZdZdZdgZeZdd„ZdS)rÊr‡ZLAPACKcCsT| ¡}| dd¡}| ||j¡}| ||g¡}|dkr.rŸr rrr res zlapack_src_info.get_pathscsœ| ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆs.cSsg|] }d|‘qS)zd%s.frrÔrrr r=ùscSsg|] }d|‘qS)zc%s.frrÔrrr r=úscSsg|] }d|‘qS)zz%s.frrÔrrr r=ûscSsg|] }d|‘qS)z%s.frrÔrrr r=üscsg|]}tj ˆ|¡‘qSrr>rÔ©Úsrc_dirrr r=ýsrNÚINSTALLcsg|]}tj ˆ|d¡‘qS)zlamch.fr>©r;r.)Úsrc_dir2rr r=sZsdczcsg|]}tj ˆ|d¡‘qS)zlarfp.fr>rØrÕrr r=scs"g|]}tj ˆd|d¡‘qS)Úilazlr.fr>rØrÕrr r=scs"g|]}tj ˆd|d¡‘qS)rÚzlc.fr>rØrÕrr r=scSsg|]}tj |¡r|‘qSr©r8r?r_rÔrrr r=s r¾©rErº©rir8r?r_r@r]r1)rr r<ZallauxZlauxZlasrcZsd_lasrcZcz_lasrcZsclauxZdzlauxZslasrcZdlasrcZclasrcZzlasrcZoclasrcZozlasrcrErr)rÖrÙr rA¤sN     ÿþýü zlapack_src_info.calc_infoN) rðrñròrrXrørJrerArrrr r˘s rËzŽ /* 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}zn|jt||d\}}|r¶t d|tj ¡r¶|jt|dg|d\}}|s¶t j t   d¡ddt|d d gd Wn˜tk rP|D]*}t d |¡} | rì|  d ¡}|dk rÎqúqÎ|dkrtj dd¡}|r0t|dt|ƒfgdnt|dgd|pFd|fYSX|stt d|¡} | rt|  d ¡}|dkr°t d|tj ¡r–d}nt d|¡t d|¡n0|dkrÊt|dgdnt|dt|ƒfgd||f} t|<| S)Nr$rrŠz!undefined reference to `_gfortranZgfortrana¿ ***************************************************** Linkage with ATLAS requires gfortran. Use python setup.py config_fc --fcompiler=gnu95 ... when building extension libraries that use ATLAS. Make sure that -lgfortran is used for C++ extensions. ***************************************************** rBrCÚf90)ZATLAS_REQUIRES_GFORTRANN)rºr™z#ATLAS_(?P\d+[.]\d+[.]\d+)_ÚversionZ ATLAS_VERSIONZ ATLAS_INFOr˜)Ú NO_ATLAS_INFOrUz?.?.?z*ATLAS version (?P\d+[.]\d+[.]\d+)zundefined symbol: ATL_buildinfoz3.2.1_pre3.3.6z Status: %dz Output: %s)ràéþÿÿÿ)rèÚtupleÚ_cached_atlas_versionÚ cmd_configr Z get_outputÚatlas_version_c_textÚreÚsearchÚMrHrIrÁrÂr)Ú ExceptionÚgroupr8rYr'r r) rr$rr#rxrÊrr&Úor¨Úresultrrr rÅst   ÿ þ  ÷ ÿ    ÿ      ÿ rÅc@steZdZeZddddddgZdZdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)rÒrrrsrqrhryr‡ZNPY_LAPACK_ORDERcCs tdƒ}|r|jf|ŽdSdS)NrwTF©rër1©rrrrr Ú_calc_info_mklgs  zlapack_opt_info._calc_info_mklcCs<tdƒ}|r|jf|ŽdStdƒ}|r8|jf|ŽdSdS)NrtTruFrírîrrr Ú_calc_info_openblasns  z#lapack_opt_info._calc_info_openblascCs tdƒ}|r|jf|ŽdSdS)NrqTFrírîrrr Ú_calc_info_flameys  z lapack_opt_info._calc_info_flamecCs|tdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|rx| dg¡}d|ksLd|krh| ¡}|s\dSt|f|Ž|jf|Žd SdS) Nrnrmrirhr™r»r¼FT)rërèÚ_get_info_lapackr)r1)rrrarÊrrr Ú_calc_info_atlas€s& ÿ  z lapack_opt_info._calc_info_atlascCs tdƒ}|r|jf|ŽdSdS©NryTFrírîrrr Ú_calc_info_accelerate™s  z%lapack_opt_info._calc_info_acceleratecCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)NrrrrCr‰Ú fblas_srcr®)rërHrIrûrórýr)©rrZinfo_srcrrr Ú_get_info_blas szlapack_opt_info._get_info_blascCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nr‡rrrCrˆZ flapack_srcr®)rërHrIr÷rórør)r÷rrr rò¬sz lapack_opt_info._get_info_lapackcCsB| ¡}|r>| ¡}t|f|Žt|dgd|jf|ŽdSdS)N©ràr6r˜TF)ròrør)r1)rrZ info_blasrrr Ú_calc_info_lapack·s  z!lapack_opt_info._calc_info_lapackcCst|d |¡ƒƒS©Nz _calc_info_{}©r[r%©rrìrrr Ú _calc_infoÁszlapack_opt_info._calc_infocCsÔtj |jd¡}|dkr |j}nf| ¡ d¡}g}g}|D]0}||jkrT| |¡q:t|ƒdkr:| |¡q:t|ƒdkr†t d  |¡ƒ‚|D]}|  |¡rŠdSqŠd|krÐt j tjp´dddt j tjpÈddddS)NrlrzElapack_opt_info user defined LAPACK order has unacceptable values: {}r‡rrBrC)r8rYrèÚorder_env_var_nameÚ lapack_orderrér]r`rNr)r%rþrHrIr÷rórø)rÚ user_orderrÚ non_existingÚorderr‡rrr rAÄs*     þ zlapack_opt_info.calc_infoN)rðrñròr÷rJrrÿrïrðrñrórõrøròrúrþrArrrr rÒas    rÒc@seZdZdZdZdd„ZdS)Ú_ilp64_opt_info_mixinNcCsTt| dg¡ƒ}| dd¡}| dd¡}|jd|fkr:dS|jd|fkrLdSt|ƒS)Nr™ÚBLAS_SYMBOL_PREFIXrÚBLAS_SYMBOL_SUFFIXF)ÚdictrèÚ symbol_prefixÚ symbol_suffixÚbool)rrr’r…Úsuffixrrr Ú _check_infoçs  z!_ilp64_opt_info_mixin._check_info)rðrñròr rr rrrr rãsrc@s$eZdZeZddgZdZdd„ZdS)rÓrzr{ZNPY_LAPACK_ILP64_ORDERcCs*t|dƒ}| |¡r&|jf|ŽdSdS)NZ_lapackTF©rër r1©rrìrrrr rþús    z lapack_ilp64_opt_info._calc_infoN)rðrñròrùrJrrÿrþrrrr rÓõsrÓc@seZdZdZdZdS)rÔrN©rðrñròrr rrrr rÔsrÔc@seZdZdZdZdS)rÕrÚ64_Nrrrrr rÕsrÕc@sdeZdZeZddddddgZdZdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)rÖrrrvrsrhryr†ZNPY_BLAS_ORDERcCs tdƒ}|r|jf|ŽdSdS)NrxTFrírîrrr rïs  zblas_opt_info._calc_info_mklcCs tdƒ}|r|jf|ŽdSdS)NrvTFrírîrrr Ú_calc_info_bliss  zblas_opt_info._calc_info_bliscCs tdƒ}|r|jf|ŽdSdS)NrsTFrírîrrr rð!s  z!blas_opt_info._calc_info_openblascCsDtdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|r@|jf|ŽdSdS)NrprorkrjTFrírîrrr ró(s zblas_opt_info._calc_info_atlascCs tdƒ}|r|jf|ŽdSdSrôrírîrrr rõ5s  z#blas_opt_info._calc_info_acceleratecCsštjtjp dddi}t|dgdtdƒ}|r@t|f|ŽnJtjtjpLdddtdƒ}|sxtjtjplddddSt|d |fgd |jf|Žd S) NrrrCrùr˜r†r‰Frör®T) rHrIrúrór)rërûrýr1)rrr†r‰rrr Ú_calc_info_blas<s zblas_opt_info._calc_info_blascCst|d |¡ƒƒSrûrürýrrr rþRszblas_opt_info._calc_infocCsÔtj |jd¡}|dkr |j}nf| ¡ d¡}g}g}|D]0}||jkrT| |¡q:t|ƒdkr:| |¡q:t|ƒdkr†t d  |¡ƒ‚|D]}|  |¡rŠdSqŠd|krÐt j tjp´dddt j tjpÈddddS)NrlrzAblas_opt_info user defined BLAS order has unacceptable values: {}r†rrBrC)r8rYrèrÿÚ blas_orderrér]r`rNr)r%rþrHrIrûrórý)rrrrrr†rrr rAUs&      zblas_opt_info.calc_infoN)rðrñròrûrJrrÿrïrrðrórõrrþrArrrr rÖ s rÖc@s$eZdZeZddgZdZdd„ZdS)r×rzr{ZNPY_BLAS_ILP64_ORDERcCs&t|ƒ}| |¡r"|jf|ŽdSdS)NTFr rrrr rþws   zblas_ilp64_opt_info._calc_infoN)rðrñròrürJrrÿrþrrrr r×rsr×c@seZdZdZdZdS)rØrNrrrrr rØsrØc@seZdZdZdZdS)rÙrrNrrrrr rÙ„srÙc@s.eZdZdZdZdgZeZdd„Zdd„Z dS)rÉr†ZBLAScCsš| ¡}| dd¡}| ||j¡}| ||g¡}|dkr 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; }úsource.cÚwt)Ú output_dirrNr$r³r†úa.outrr ©r$rZextra_postargs)rÚtempfileÚmkdtemprÁrÂr8r?r@ÚshutilÚrmtreer¥ÚwriteÚcompilerhÚ distutilsÚ ccompilerÚ CompileErrorÚ LinkErrorÚlink_executablerè) rrrxÚtmpdirr&rSreÚobjr1rrr r¦s:   ÿ   ÿ ý  zblas_info.get_cblas_libsN) rðrñròrrXrWrûrJrArrrrr rɉs rÉc@sZeZdZdZdZdgZgZeZe dd„ƒZ e dd„ƒZ dd„Z d d „Z d d „Zd d„ZdS)r³rsÚOPENBLAScCs.z|j |jd¡WStk r(YdSXdS)Nrr©rrèrrr"rrr rïszopenblas_info.symbol_prefixcCs.z|j |jd¡WStk r(YdSXdS)Nr rr+r"rrr r öszopenblas_info.symbol_suffixc Cs tƒ}| ¡}| dd¡}| ||j¡}| ||g¡}|jdkr~|dkr~ddlm}||d}|rŽ|jdkrŽ|  ||¡}d}n|rŽd }d |d <|dkršdS|  ¡} t |f| Ž|sÀ|  |¡sÀdSd g|d <|j rè|d d|j fg7<|jr|d d|jfg7<|S)NÚ openblas_libsr$ror)Ú new_fcompiler)Z c_compilerZgnu95TFrxrºr­r™rr)rr&r=rnrWr(ruZnumpy.distutils.fcompilerr-Úcheck_msvc_gfortran_libsr.r)Ú check_symbolsrr ) rrxr~r3r,rr-reZskip_symbol_checkr0rrr rþýs4      zopenblas_info._calc_infocCs | ¡}|dk r|jf|ŽdSr)rþr1rîrrr rA&szopenblas_info.calc_infoc Csðg}|D]@}|D]0}tj ||d¡}tj |¡r| |¡qqdSq|jj}tj t ¡d|¡}tj |¡s|t  |¡|g|gddœ} tj ||d¡} tj ||d¡} t | dƒ} |   d |¡¡W5QRXt | dƒ} W5QRX| S) NrpÚbuildr¾)rr$rºz .fobjectsz .cobjectsrPr#) r8r?r@r_r`r rðÚgetcwdrUÚmakedirsr¥r!) rrr$Z library_pathsZlibraryZ library_dirÚfullpathr\r(rZ fake_lib_fileZfake_clib_filererrr r.+s.    þ   z&openblas_info.check_msvc_gfortran_libsc sPd}tƒ}t ¡}d ‡fdd„ˆjDƒ¡}d ‡fdd„ˆjDƒ¡}t d¡t||d}tj  |d¡}tj  |d ¡} z |d } Wnt k rœg} YnXt j d krÆt j d krÆ|j d krÆ|  d¡zxt|dƒ} |  |¡W5QRX|j|g|d} z$|j| | |d|d| dd}Wntjjk r:d}YnXW5t |¡X|S)NFr#c3s |]}dˆj|ˆjfVqdS)zvoid %s%s%s();N©rr ©r;Z symbol_namer"rr rBQs ýþz.openblas_info.check_symbols..c3s |]}dˆj|ˆjfVqdS)z %s%s%s();Nr4r5r"rr rBUs ýþz %(prototypes)s int main(int argc, const char *argv[]) { %(calls)s return 0; })Ú prototypesÚcallsrrr )ré)rrroz /MANIFESTr©rr$rrT)rrrr@Ú_require_symbolsrÁrÂrr8r?rér[Ú version_inforur`rr r¥r!r"r'r#r$r&) rrrRrxr(r6r7r&rSr-Ú extra_argsrer)rr"r r/KsDýý ú    þ zopenblas_info.check_symbolsN)rðrñròrrXrWr:rûrJÚpropertyrr rþrAr.r/rrrr r³ès  ) r³c@s$eZdZdZdZdgZdgZeZdS)r´rsr*Úzungqr_N) rðrñròrrXrWr:rûrJrrrr r´xs r´c@seZdZddgZdS)rµrsr‡N)rðrñròrWrrrr rµsrµcs6eZdZdZdZdgZddgZeZ‡fdd„Z ‡Z S)r¼r{ZOPENBLAS_ILP64Z openblas64Údgemm_Ú cblas_dgemmcs(tƒ ¡}|dk r$|ddg7<|S)Nr™)ZHAVE_BLAS_ILP64N©Úsuperrþrî©r rr rþ‰s zopenblas_ilp64_info._calc_info) rðrñròrrXrWr:rürJrþÚ __classcell__rrrCr r¼‚s r¼cs(eZdZddddgZ‡fdd„Z‡ZS)r½r?r@r>ZLAPACKE_zungqrcs$tƒ ¡}|r |ddg7<|S)Nr™)Z HAVE_LAPACKENrArîrCrr rþ’s z%openblas_ilp64_lapack_info._calc_info)rðrñròr:rþrDrrrCr r½s r½c@s"eZdZdZdZdgZdZdZdS)rºrzZ OPENBLAS64_rrN)rðrñròrrXrWr rrrrr rº˜s rºc@s eZdZdS)r»Nr°rrrr r» sr»c@s&eZdZdZdZdgZeZdd„ZdS)r¶rvZBLIScCsf| ¡}| dd¡}| ||j¡}| ||g¡}|dkr.rtÚ_PYTHON_HOST_PLATFORMéüÿÿÿÚi386ÚintelÚx86_64r6rz0/System/Library/Frameworks/Accelerate.framework/ryz-msse3z -faltivecz5-I/System/Library/Frameworks/vecLib.framework/Headersz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/rGz -Wl,vecLib)ràrr­)r r r™) r8rYrèrnrWr[rvÚgetenvr r?rÃr*r1)rr$r‹Z link_argsrKrrr rA sZ   ÿÿ þ þ ÿþ ÿÿþzaccelerate_info.calc_infoN)rðrñròrrWrûrJrArrrr r¹ sr¹c@s(eZdZdZdZeZdd„Zdd„ZdS)rÌr‰ZBLAS_SRCcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nr†cSsg|]}tj |¡r|‘qSrrTr:rrr r=F s z+blas_src_info.get_paths..rŸr rrr reA s zblas_src_info.get_pathscsŽ| ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆsrÔrÕrr r=h sÿz+blas_src_info.calc_info..cSsg|]}tj |¡r|‘qSrrÛrÔrrr r=k s r¾rÜrÝ)rr r<Zblas1Zblas2Zblas3rErrrÕr rAH s"  ÿ zblas_src_info.calc_infoN) rðrñròrrXrýrJrerArrrr rÌ< s rÌc@s*eZdZdZeZdgZdd„Zdd„ZdS)r¾r|ÚX11cCstj|ttddS)Nr«)rêrÚdefault_x11_lib_dirsÚdefault_x11_include_dirsr"rrr ru sþzx11_info.__init__cCsštjdkrdS| ¡}| ¡}| dd¡}| ||j¡}| ||g¡}|dkrRdSd}|D]}| |d¡rZ|}qtqZ|dk rŠt ||gd|j f|ŽdS)N)r0Úx11_libsr$zX11/X.hr—) r[rvr&rhr=rnrWr(r‚r)r1)rr~rr3rQrÚinc_dirr<rrr rAz s"   zx11_info.calc_infoN) rðrñròrrrJrWrrArrrr r¾p s r¾c@s(eZdZdZdZeZdd„Zdd„ZdS)Ú _numpy_inforŒcCsg}z„t|jƒ}g}|j tj¡D]}|dkr2q>| |¡q"z| t|dƒƒ¡Wntk rhYnX| t j j tj  |¡d¡Wnt k rœYnXt j   ¡}| |¡t j j dd}||krÒ| |¡tD],}tj  |tj |¡¡}||krÖ| |¡qÖtj|g|ddS)Nr4Z get_include)r…T©Ú plat_specificr«)Ú __import__Ú modulenamerYr]r8r9r`r[ÚAttributeErrorr#Ú sysconfigÚget_python_incr@Ú ImportErrorrFr?r\rêr)rrÚmoduler…rìZ py_incl_dirÚ py_pincl_dirr<rrr r“ s<    ÿ     þz_numpy_info.__init__c Csâzt|jƒ}Wntk r$YdSXi}g}dD]B}t||dƒ}|dkrLq2|j ¡dt|ƒf|j ¡dfg}qvq2t||d| ¡}d}|D]$}| |t j   |jd¡¡r’|}q¸q’|dk rÎt||gd|rÞ|j f|ŽdS)N)Ú __version__rßZ_VERSIONr˜z arrayobject.hr—) rVrWr[r[Úupperr'r)rhr‚r8r?r@r1) rr\rr’rTZvrsrrRr<rrr rAµ s@  ÿ þ  ÿÿ z_numpy_info.calc_infoN) rðrñròrrWrrJrrArrrr rSŽ s "rSc@seZdZdZdZdS)rÐrŽN©rðrñròrrWrrrr rÐÔ srÐc@seZdZdZdZdS)rÏrŒNr`rrrr rÏÙ srÏc@seZdZdZdZdS)rÍrŠNr`rrrr rÍÞ srÍc@seZdZdZdd„ZdS)rÑrcCs>d}t d¡rt d¡df}|ddkrÚd}zddl}d}Wnœtk rØttƒƒ}zddl}d}Wnltk rÒttƒƒ}zddl}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)rra)rŽrar6)rrŽrŠzonumerix selector must be either 'Numeric' or 'numarray' or 'numpy' but the value obtained from the %s was '%s'.)r8rMrŠr[rrrŒrŽr rrjrér)rYr1rë)rÚwhichrŠZmsg1rŒZmsg2rŽZmsg3rrr rAæ s<       þznumerix_info.calc_infoN)rðrñròrrArrrr rÑã srÑc@seZdZdd„ZdS)rÎcCs`zddlm}Wntk r&YdSXtj tj |j¡d¡}|jtj |d¡g|gddS)NrrSzfortranobject.c©rEr) Z numpy.f2pyr‹r[r8r?r@rZrYr1)rr‹Zf2py_dirrrr rA sÿzf2py_info.calc_infoNrŒrrrr rÎ srÎc@s$eZdZdZdZdd„Zdd„ZdS)rÚr‘ZBOOSTcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzboost*cSsg|]}tj |¡r|‘qSrrTr:rrr r= s z/boost_python_info.get_paths..rŸr rrr re s zboost_python_info.get_pathsc CsÜ| ¡}d}|D](}tj tj |dddd¡¡r|}q:q|sBdStj ¡g}tjjdd}||krn| |¡tj |ddd¡}t tj |d¡ƒ}|t tj |d d¡ƒ7}d |g||d œfg|gd œ}|rØ|j f|ŽdS) Nrr1ÚpythonrSz module.cppTrTú*.cppr¤Zboost_python_src)rrE©r$r) rir8r?r_r@r#rYrZr`rr1) rr rÖr<Z py_incl_dirsr]Zsrcs_dirZbpl_srcsrrrr rA s6ÿ  ÿÿü zboost_python_info.calc_infoN©rðrñròrrXrerArrrr rÚ srÚc@s$eZdZdZdZdd„Zdd„ZdS)rÛr’ZAGG2cCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzagg2*cSsg|]}tj |¡r|‘qSrrTr:rrr r=D s z'agg2_info.get_paths..rŸr rrr re? s zagg2_info.get_pathscCsÒ| ¡}d}|D]$}tj tj |dd¡¡r|}q6q|s>dStjdkrbttj |dddd¡ƒ}n.ttj |dd¡ƒ}|tj |dddd ¡g7}d |tj |d ¡gd œfgtj |d ¡gd œ}|rÎ|jf|ŽdS)NrrSzagg_affine_matrix.cppr0rvzagg_win32_bmp.cpprerNzagg_platform_support.cppZagg2_srcr3rcrf) rir8r?r_r@r[rvrr1)rr rÖr<Z agg2_srcsrrrr rAF s8 ÿþÿÿú zagg2_info.calc_infoNrgrrrr rÛ; srÛc@sDeZdZdZdZdZdZdZdZdZ dZ dd„Z d d „Z d d „Z dS) Ú_pkg_config_infoNZ PKG_CONFIGz pkg-configrz --modversionz--cflagscCs|jtjkrtj|jS|jSr)Úconfig_env_varr8rYÚdefault_config_exer"rrr Úget_config_exeo s  z_pkg_config_info.get_config_exec CsP|d|jd|}zt |¡}Wnttjfk r>YnXt|ƒ}|SdS)Nú )Úappend_config_exeÚ subprocessÚ check_outputÚOSErrorÚCalledProcessErrorr)rÚ config_exeÚoptionÚcmdrërrr Úget_config_outputt sz"_pkg_config_info.get_config_outputcCs|t| ¡ƒ}|s(t d||jf¡dSi}g}g}g}g}g}g}| ||j¡} | r | |jj   d¡d  ¡t | ƒf¡|j r | |j d|  dd¡df¡|jrÖ| |d¡} | rÖ| |jd|  dd¡df¡| |d¡} | rL|   ¡D]Z} | dd…d kr| | dd…¡qð| dd…d kr@| | dd…¡qð| | ¡qð| ||j¡} | rú|   ¡D]} | dd…d kr’| | dd…¡nd| dd…d krìd | krÔ| dd…  d ¡\} }| | |f¡n| | dd…df¡n | | ¡qh|r t||d|rt||d|r0t||d|rBt||d|rTt||d|rft||d|rx|jf|ŽdS)Nz-File not found: %s. Cannot determine %s info.r2rUz_%sÚ_z --releasez--libsrBz-lz-Lú-Iz-Dú=r˜r®)rr—)r )r )rrkr rIrruÚ version_flagr`r rðr]r_r'Úversion_macro_namer$Úrelease_macro_nameÚ cflags_flagr)r1)rrrrr’r$rrr r rßÚreleaseÚoptsr3ÚnrTrrr rA~ s„ ÿÿ  ÿÿ   ÿÿ            z_pkg_config_info.calc_info)rðrñròrrirjrmrzr{ryr|rkrurArrrr rhe s rhc@s,eZdZdZdZdZdZdZdZdZ dZ d S) rÜr“Z WX_CONFIGz wx-configrZ WX_VERSIONZ WX_RELEASEz --versionz --cxxflagsN) rðrñròrrirjrmrzr{ryr|rrrr rܾ srÜc@seZdZdZdZdZdS)rÝr”r•ZGDK_PIXBUF_XLIB_VERSIONN©rðrñròrrmrzrrrr rÝÉ srÝc@seZdZdZdZdZdS)rÞr–r—ZGDK_PIXBUF_VERSIONNr€rrrr rÞÏ srÞc@seZdZdZdZdZdS)rár›rœZGDK_X11_VERSIONNr€rrrr ráÕ srác@seZdZdZdZdZdS)ràr™ršÚ GDK_VERSIONNr€rrrr ràÛ sràc@seZdZdZdZdZdS)rßr˜rNr€rrrr rßá srßc@seZdZdZdZdZdS)rârržZGTK_X11_VERSIONNr€rrrr râç srâc@seZdZdZdZdZdS)rãrŸr Z GTK_VERSIONNr€rrrr rãí srãc@seZdZdZdZdZdS)rär¡Z XFT_VERSIONNr€rrrr räó sräc@seZdZdZdZdZdS)rår¢ZFREETYPE2_VERSIONNr€rrrr råù sråc@s"eZdZdZdZdgZdd„ZdS)rçr¤ZAMDc Cs¨| ¡}| dd¡}| ||j¡}| ||g¡}|dkr.rrBNz (paths: %s)rl) rr`rNrr8rr*r8r?r@r‚r r^)r‹Úkwsr£rkrìZa0Za1rrr r‚@ s(     "r‚r6rB)rxúc++r¾rÞrxr‡r¾rÞ)rr6rBrc sŽg}| ¡D]Z\‰}ˆdkr(| |¡q ˆˆkr^ˆdkrN‡‡fdd„|Dƒqfˆˆ |¡q |ˆˆ<q |rŠttdd„|Dƒƒ}|ˆd<dS)Nrº)rrr r rr™cs&g|]}|ˆˆkrˆˆ |¡‘qSr)r`)r;Úvv©r<rSrr r=h s zdict_append..cSsg|]}t |d¡‘qS)r)Ú language_maprè)r;rarrr r=n s)rMr`r*Úinv_language_mapÚmax)r<r†Ú languagesrTrarr‰r r)^ s  r)rcCsHddl}| 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ÚdestrmÚhelpr6)r‹)ÚoptparseÚ OptionParserÚ add_optionÚ parse_args)r\r“Úparserr~r‹rrr Ú parseCmdLines s  þr˜c Csüddl}|dkrtj}t|ƒ\}}|jr6t tj¡n t tj¡g}|D]&}|dd…dkrf|d}|  |¡qJ| }t ƒ  ¡}|  ¡D]V\}} |  | ¡sžqŠt| tƒrŠ| tkr²qŠ|sÌ||krÀqŠ|| |¡=| ƒ} d| _|  ¡} qŠ|røt dd |¡¡dS)NréûÿÿÿÚ_inforBzInfo classes not defined: %srl)Úinspectr[r\r˜rr Ú set_thresholdÚDEBUGrLr`ÚglobalsrOrMÚisclassÚ issubclassrêr;Ú verbosityrërr@) r\r›r~r‹Z show_onlyrÚshow_allZ_gdict_rìrxÚconfr£rrr r¢~ s8       r¢Ú__main__)r)r)N)ÈróÚ __future__rrrr[r8rærOrHrnrÁrÚ functoolsrr;rrr Ú configparserÚdistutils.errorsr Údistutils.distr Údistutils.sysconfigr#Znumpy.distutilsr Údistutils.utilr Znumpy.distutils.exec_commandrrrZnumpy.distutils.misc_utilrrrZnumpy.distutils.command.configrräZnumpy.distutils.compatrrrrÚdistutils.ccompilerrrrvZ_bitsÚ architectureZ platform_bitsrr'r/r?r@rYÚ EXEC_PREFIXrDrrFrrOrPrGrErHrbrIrZZ vcpkg_dirÚ specifierZvcpkg_installedZ vcpkg_rootrMZ conda_dirrÃZglobbed_x11_dirr]Z x11_so_dirr*r¥Údevnullr?ÚPopenÚPIPEr.rprÚ communicateÚdecoderjZtripletÚ returncoder…Úinsertr`rwrgrërîrôrõrör÷rørùrúrûrürýrþrÿrrrÚobjectrêr¿rÀrÁrÂrÃrÄrÅrÆrÇrÈr²r·r¸r¥r§r¦r¨r©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¶r±r¹rÌr¾rSrÐrÏrÍrÑrÎrÚrÛrhrÜrÝrÞráràrßrârãrärårçrær‚rŠr‹r)r˜r¢rðrrrr ÚsÊ               '  ÿÿþÿ   þ   ÿÿû ÿÿÿÿÿ  $ Ww/       $Eot I e _  L64F% '*Y "