B { `|›ã @s\ dZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m ZddlmZddlmZddlZdd lmZdd lmZdd lmZmZdd lmZmZmZdd l m!Z"ddlm#Z$ddlm%Z%ddl&Zddl'Z'ddl(Z(ddl)Z)dddœZ*e*e) +¡dZ,da-dd„Z#dd„Z.dd„Z/ej)dkrldej0 1ej2j3d¡ga4gZ5ga6dgZ7gZ8gZ9ddgZ:dgZ;d d!„e:DƒZ:d"d!„e;DƒZ;d#d$„Ze>r&ej0 ?e>¡Z@e) +¡d&krÜd'ZAnd(ZAej0 1e@d)¡ZBx6ej0 1eBeAd*¡ej0 1eBeAd+¡gD]ZCed?d1ge,ƒZ8d@dAd6gZ9ej0 FdB¡redCƒZGeGrej0 HeGd¡dZIe8 JeIdBg¡e9 JdDdEg¡eKejLdFƒˆZMyejNdGdHgejOeMdIZPWneQefk rJYnNXeReP S¡d T¡ U¡ƒZVePjWdkr˜e8ej0 1dJeV¡g7Z8t4ej0 1dJeV¡g7a4WdQRXej0 1ejXd¡t4krüt4 Ydej0 1ejXd¡¡t6 Zej0 1ejXd¡¡e7 Zej0 1ejXdK¡¡dLd!„t4Dƒa4dMd!„e5DƒZ5dNd!„t6Dƒa6dOd!„e7DƒZ7eƒZ[dPdQ„Z\ddRdS„Z]GdTdU„dUeƒZ^GdVdW„dWeƒZ_GdXdY„dYe^ƒZ`GdZd[„d[e^ƒZaGd\d]„d]e^ƒZbGd^d_„d_ebƒZcGd`da„dae^ƒZdGdbdc„dce^ƒZeGddde„dee^ƒZfGdfdg„dge^ƒZgGdhdi„diefƒZhGdjdk„dke^ƒZiGdldm„dme^ƒZjGdndo„doe^ƒZkGdpdq„dqe^ƒZlGdrds„dse^ƒZmGdtdu„duƒZnGdvdw„dwenƒZoGdxdy„dyenƒZpGdzd{„d{epƒZqGd|d}„d}epƒZrGd~d„depƒZsGd€d„depƒZtGd‚dƒ„dƒepƒZuGd„d…„d…epƒZvGd†d‡„d‡epƒZwGdˆd‰„d‰enƒZxGdŠd‹„d‹enƒZyGdŒd„deyƒZzGdŽd„deyƒZ{Gdd‘„d‘enƒ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„de|ƒ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©enƒZˆGdªd«„d«enƒZ‰d¬ZŠiZ‹d­d®„ZŒGd¯d°„d°enƒZGd±d²„d²ƒZŽGd³d´„d´eeŽƒZGdµd¶„d¶eƒZGd·d¸„d¸eƒZ‘Gd¹dº„dºenƒZ’Gd»d¼„d¼e’eŽƒZ“Gd½d¾„d¾e“ƒZ”Gd¿dÀ„dÀe“ƒZ•GdÁd„dÂenƒ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œƒZGdÑdÒ„dÒe–ƒZžGdÓdÔ„dÔenƒZŸGdÕdÖ„dÖenƒZ Gd×dØ„dØenƒZ¡GdÙdÚ„dÚenƒZ¢GdÛdÜ„dÜenƒZ£GdÝdÞ„dÞe£ƒZ¤Gdßdà„dàe£ƒZ¥Gdádâ„dâe£ƒZ¦Gdãdä„däenƒZ§Gdådæ„dæenƒZ¨Gdçdè„dèenƒZ©Gdédê„dêenƒZªGdëdì„dìenƒ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„de«ƒZµGdd„denƒZ¶Gdd„denƒZ·dd„Z¸dddd d œZ¹d d d ddœZºdd„Z»ddd„Z¼ddd„Z½e¾dk rXe½ƒdS(av This file defines a set of system_info classes for getting information about various resources (libraries, library directories, include directories, etc.) in the system. 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 is not intended for general use. 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. DEFAULT section in site.cfg 4. System default search paths (see ``default_*`` variables below). Only the first complete match is returned. Currently, the following classes are available, along with their section names: Numeric_info:Numeric _numpy_info:Numeric _pkg_config_info:None accelerate_info:accelerate agg2_info:agg2 amd_info:amd atlas_3_10_blas_info:atlas atlas_3_10_blas_threads_info:atlas atlas_3_10_info:atlas atlas_3_10_threads_info:atlas atlas_blas_info:atlas atlas_blas_threads_info:atlas atlas_info:atlas atlas_threads_info:atlas blas64__opt_info:ALL # usage recommended (general ILP64 BLAS, 64_ symbol suffix) blas_ilp64_opt_info:ALL # usage recommended (general ILP64 BLAS) blas_ilp64_plain_opt_info:ALL # usage recommended (general ILP64 BLAS, no symbol suffix) blas_info:blas blas_mkl_info:mkl blas_opt_info:ALL # usage recommended blas_src_info:blas_src blis_info:blis boost_python_info:boost_python dfftw_info:fftw dfftw_threads_info:fftw djbfft_info:djbfft f2py_info:ALL fft_opt_info:ALL fftw2_info:fftw fftw3_info:fftw3 fftw_info:fftw fftw_threads_info:fftw flame_info:flame freetype2_info:freetype2 gdk_2_info:gdk_2 gdk_info:gdk gdk_pixbuf_2_info:gdk_pixbuf_2 gdk_pixbuf_xlib_2_info:gdk_pixbuf_xlib_2 gdk_x11_2_info:gdk_x11_2 gtkp_2_info:gtkp_2 gtkp_x11_2_info:gtkp_x11_2 lapack64__opt_info:ALL # usage recommended (general ILP64 LAPACK, 64_ symbol suffix) lapack_atlas_3_10_info:atlas lapack_atlas_3_10_threads_info:atlas lapack_atlas_info:atlas lapack_atlas_threads_info:atlas lapack_ilp64_opt_info:ALL # usage recommended (general ILP64 LAPACK) lapack_ilp64_plain_opt_info:ALL # usage recommended (general ILP64 LAPACK, no symbol suffix) lapack_info:lapack lapack_mkl_info:mkl lapack_opt_info:ALL # usage recommended lapack_src_info:lapack_src mkl_info:mkl numarray_info:numarray numerix_info:numerix numpy_info:numpy openblas64__info:openblas64_ openblas64__lapack_info:openblas64_ openblas_clapack_info:openblas openblas_ilp64_info:openblas_ilp64 openblas_ilp64_lapack_info:openblas_ilp64 openblas_info:openblas openblas_lapack_info:openblas sfftw_info:fftw sfftw_threads_info:fftw system_info:ALL umfpack_info:umfpack wx_info:wx x11_info:x11 xft_info:xft Example: ---------- [DEFAULT] # default section 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. éN)Úglob)Úreduce)Ú NoOptionError)ÚRawConfigParser)ÚDistutilsError)Ú Distribution)Úlog)Ú get_platform)Úfind_executableÚfilepath_from_subprocess_output)Ú is_sequenceÚ is_stringÚget_shared_lib_extension)Úconfig)Úcustomized_ccompiler)Ú _shell_utilsé é@)Ú32bitÚ64bitcCsts tƒatS)N)Úglobal_compilerÚ_customized_ccompiler©rrú?/tmp/pip-unpacked-wheel-4iou4664/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 cCsD|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ÚprrrÚlibpathsÙs r(Úwin32zC:\ÚlibsÚ.Úincludezinclude/suitesparseÚlibcCsg|]}| dtj¡‘qS)ú/)rÚosÚsep)Ú.0Údrrrú sr3cCsg|]}| dtj¡‘qS)r.)rr/r0)r1r2rrrr3scs@tj ˆ¡‰t ‡fdd„tDƒ¡t ‡fdd„tDƒ¡dS)z5Add a package manager root to the include directoriesc3s|]}tj ˆ|¡VqdS)N)r/ÚpathÚjoin)r1r2)Ú library_rootrrú sz"add_system_root..c3s|]}tj ˆ|¡VqdS)N)r/r4r5)r1r2)r6rrr7sN)r/r4ÚnormpathÚdefault_lib_dirsr#Ú _lib_dirsÚdefault_include_dirsÚ _include_dirs)r6r)r6rÚadd_system_roots  r=ÚvcpkgrZx86Zx64Ú installedz-windowsz-windows-staticÚcondaz..Ú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)r/r4Úisdir)r1Ú_mrrrr3escCsg|]}tj |¡r|‘qSr)r/r4rF)r1rGrrrr3fscCsg|]}tj |¡r|‘qSr)r/r4rF)r1rGrrrr3gscCsg|]}tj |¡r|‘qSr)r/r4rF)r1rGrrrr3hscCsÐ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/r4r5ÚsplitÚabspathÚisfileÚappendÚ expanduserÚKeyError)ÚfnameÚ filenamesÚfZsysfileÚ user_filerrrÚget_standard_filems&     rWcKCs²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_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)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_actionZclrrrrÕ‘s˜ rÕc@seZdZdZdS)Ú NotFoundErrorz1Some third-party program or library is not found.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrØèsrØc@seZdZdZdS)ÚAliasedOptionErrorz‹ Aliases entries in config files should not be existing. In section '{section}' we found multiple appearances of options {options}.N)rÙrÚrÛrÜrrrrrÝì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.N)rÙrÚrÛrÜrrrrrÞò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]).N)rÙrÚrÛrÜrrrrrßú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Ürrrrrà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Ürrrrrá srác@seZdZdZdS)ÚLapackILP64NotFoundErrorz† 64-bit Lapack libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 N)rÙrÚrÛrÜrrrrrâ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.N)rÙrÚrÛrÜrrrrrã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Ürrrrräsräc@seZdZdZdS)ÚBlasILP64NotFoundErrorz„ 64-bit Blas libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 N)rÙrÚrÛrÜrrrrrå&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Ürrrrræ-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Ürrrrrç5srç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.N)rÙrÚrÛrÜrrrrrè=srèc@seZdZdZdS)ÚNumericNotFoundErrorzw Numeric (https://www.numpy.org/) module not found. Get it from above location, install it, and retry setup.py.N)rÙrÚrÛrÜrrrrréEsréc@seZdZdZdS)ÚX11NotFoundErrorzX11 libraries not found.N)rÙrÚrÛrÜrrrrrêKsrêc@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.N)rÙrÚrÛrÜrrrrrëOsrëc@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<dS)N)rrÚcalc_extra_infoÚ saved_resultsrörÙ)rr÷Zlib_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|¡S)N)rýÚ has_optionr)Úopt)rrrÚ¿óz/system_info.get_option_single..éTrNz[{}]z, )rÚoptions) ÚmapÚlistÚsumÚindexrÝrÜrrr5)rrÚfoundr)rrÚget_option_single­s   zsystem_info.get_option_singlecCs|jj|jkS)N)rörÙr)rrrrÚhas_infoÎszsystem_info.has_infocCsJi}x@dD]8}|j |j|¡}tj |¡}|r ||i}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ÒrrZ NativeParserrMr)rr÷r rÚtmprrrrÑ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 ¡tjkr6|r6x^| ¡D]R\}}t|ƒ}|d krt|ƒd kr|d d …d |dd …}t d||¡qÖWt d¡t |¡S)zv Return a dictionary 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&rr÷rörÙÚhasattrr)ÚwarningsÚwarnÚ notfounderrorrÜr"ÚreprrrrÒZ get_thresholdÚINFOÚitemsrûÚlenÚcopyÚdeepcopy)rr×ÚflagÚresÚkÚvrrrrÕás4      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ér-z#Replacing _lib_names[0]==%r with %r)r,r-zSpecified path %s is invalid.r*)r+z ( %s = %s )r()rýrÒrMr/røÚ dir_env_varr Úenvironrr÷rörÙr4rOÚdirnameÚgetattrr5ÚbasenameÚsplitextr>rFrPr5rr#r/r0Údebug)rrr rÚenv_varZe0Úer2ÚlÚbZdsZds2ÚddÚd1Z default_dirsÚretrrrÚ get_pathssd              zsystem_info.get_pathsrîcCs| |j|¡S)N)rNr)rr rrrr<szsystem_info.get_lib_dirsrðcCs | |j|¡}|dgkrg}|S)Nrí)rNr)rr r4rrrr?s z system_info.get_runtime_lib_dirsrïcCs| |j|¡S)N)rNr)rr rrrÚget_include_dirsEszsystem_info.get_include_dirsròcCs| |j|¡S)N)rNr)rr rrrÚ get_src_dirsHszsystem_info.get_src_dirscCs^y|j |j|¡}Wn*tk r>|s,gSt|ƒr:|gS|SXdd„dd„| d¡DƒDƒS)NcSsg|] }|r|‘qSrr)r1rJrrrr3Tsz(system_info.get_libs..cSsg|] }| ¡‘qSr)Ústrip)r1Úarrrr3Tsú,)rýrÒrrr rM)rr Údefaultr*rrrÚget_libsKszsystem_info.get_libsr cCs*t|dƒr|j||jdS| |d¡SdS)Nr>)rTrí)r.rUr>)rr rrrr Vs zsystem_info.get_librariescCsztƒ}g}|jdkr| d¡tjdkr2| d¡|jrD|tg}n tg|}tjdkrb| d¡tjdkrv| d¡|S) NÚmsvcz.ar)z.libÚcygwinz.dll.aÚdarwinz.dylib)rÚ compiler_typerPrKÚplatformróÚso_ext)rÚcZ 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 %srS)r^Ú _check_libsrr÷r5)rÚlib_dirsr*Úopt_libsr]r÷Úextrrrrns 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 %srS)r^r_rr÷r5)rr`r*rar]r÷rrrÚ check_libs2€s zsystem_info.check_libs2cCs˜t|ƒs t‚tjdkr ddg}ndg}xl|D]d}x&|D]}| ||||¡}|r6Pq6W|r,t|ƒdkslt‚|dkr||d7}|dkrŒ||}|Sq,WdS) Nr)rír-rz.dll.az.dllz.libF)r rrKrZÚ combine_pathsr5)rÚlib_dirr-r]Ú lib_prefixesrbÚprefixr'rrrÚ _find_libŽs"     zsystem_info._find_libc Cs^gg}}xJ|D]B}x<|D]4}| |||¡}|r| |¡||krL| |¡PqWqW||fS)N)rhrP) rr`r*r]Ú found_dirsÚ found_libsr-reZ 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)r rkr5r#rP) rr`r*rar]rirjZopt_found_dirsZopt_found_libsrer÷rrrr_´s   zsystem_info._check_libscGst|ŽS)zjReturn a list of existing paths composed by all combinations of items from the arguments. )rd)rÚargsrrrrdÉszsystem_info.combine_paths)r)rî)rð)rï)rò)r )"rÙrÚrÛrÜr@rórrrØr1r9r;rrÿrrr%r&rrÕrNrrrOrPrUr r^rrcrhrkr_rdrrrrrÔWs:  ! $7        rÔc@seZdZdd„ZdS)r©cCsXi}tdƒptdƒptdƒ}tdƒ}|rTt|f|Ž|rDt|f|Ž|jf|ŽdSdS)Nrornrpru)rÕrr)rr÷rªr²rrrr)Òs   zfft_opt_info.calc_infoN)rÙrÚrÛr)rrrrr©Ðsr©c@sTeZdZdZdZeZddgdgdgdœdddgd d gd gdœgZd d „Zdd„Z dS)rªrmÚFFTWrozfftw3.h)Ú SCIPY_FFTW3_HN)rÖr*ÚincludesÚmacrosrnÚrfftwzfftw.hzrfftw.h)Ú SCIPY_FFTW_HNc CsØ| ¡}| ¡}| |jdd¡}| ||d¡}| ||¡}|dk r¦d}x@|D]8}t| ||d¡ƒt|dƒkrPt||gdd}PqPW|r¢t||d d nd}|dk r¾|j f|Žd St   d |d ¡dSdS)z8Returns True on successful version detection, else FalseZ_libsr r*Nrro)rïrrp)Ú define_macrosTz %s not foundrÖF) rrOr%rrUrr5rdrrrr÷) rZ ver_paramr`Ú incl_dirsrr*r÷r8r2rrrÚ calc_ver_infoìs*   zfftw_info.calc_ver_infocCs x|jD]}| |¡rPqWdS)N)Úver_inforu)rrrrrr)s  zfftw_info.calc_infoN) rÙrÚrÛrr@rçr1rvrur)rrrrrªÞs rªc@s2eZdZdZdZeZdddgddgdgdœgZd S) r«rmrmrnrqzfftw.hzrfftw.h)rrN)rÖr*rorpN)rÙrÚrÛrr@rçr1rvrrrrr« sr«c@s.eZdZdZdZeZddgdgdgdœgZdS)r¬roZFFTW3zfftw3.h)rnN)rÖr*rorpN)rÙrÚrÛrr@rçr1rvrrrrr¬sr¬c@s.eZdZdZdZdddgddgdgdœgZd S) r­rmrmrpZdrfftwzdfftw.hzdrfftw.h)Z SCIPY_DFFTW_HN)rÖr*rorpN)rÙrÚrÛrr@rvrrrrr­%s r­c@s.eZdZdZdZdddgddgdgdœgZd S) r®rmrmrqZsrfftwzsfftw.hzsrfftw.h)Z SCIPY_SFFTW_HN)rÖr*rorpN)rÙrÚrÛrr@rvrrrrr®.s r®c@s.eZdZdZdZdddgddgdgd œgZd S) r¯rmrmz fftw threadsZ rfftw_threadsrrzfftw_threads.hzrfftw_threads.h)ZSCIPY_FFTW_THREADS_HN)rÖr*rorpN)rÙrÚrÛrr@rvrrrrr¯7s r¯c@s.eZdZdZdZdddgddgdgd œgZd S) r°rmrmz dfftw threadsZdrfftw_threadsrszdfftw_threads.hzdrfftw_threads.h)ZSCIPY_DFFTW_THREADS_HN)rÖr*rorpN)rÙrÚrÛrr@rvrrrrr°@s r°c@s.eZdZdZdZdddgddgdgd œgZd S) r±rmrmz sfftw threadsZsrfftw_threadsrtzsfftw_threads.hzsrfftw_threads.h)ZSCIPY_SFFTW_THREADS_HN)rÖr*rorpN)rÙrÚrÛrr@rvrrrrr±Is r±c@s(eZdZdZdZeZdd„Zdd„ZdS)r²ruZDJBFFTcCsHt |||¡}g}x&|D]}| | |dg¡|g¡qWdd„|DƒS)NrucSsg|]}tj |¡r|‘qSr)r/r4rF)r1r2rrrr3\sz)djbfft_info.get_paths..)rÔrNr#rd)rrr Úpre_dirsrr2rrrrNWs  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.aÚ extra_objectsz libdjbfft.aZ libdjbfftru)r rîzfftc8.hz fftfreq.hr*)ZSCIPY_DJBFFT_HN)rïrs)rrOrdr[r5rr)rr`rtr÷r2r'rrrr)^s*    zdjbfft_info.calc_infoN) rÙrÚrÛrr@rèr1rNr)rrrrr²Rs r²c@s2eZdZdZdZdgZdd„Zdd„Zdd „Zd S) rœrbÚ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) NryZLD_LIBRARY_PATHríz/etc/ld.so.confÚrrbr*Ú*zmkl*r-)r/rArÒrMrør4rOÚopenrQrPr0Ú startswithr5r#rrF) rÚmklrootr$Z ld_so_confrUr2Zintel_mkl_dirsr4Z path_atomsÚmrZsub_dirrrrÚget_mkl_rootdir{s4           zmkl_info.get_mkl_rootdircCs~| ¡}|dkrt |¡n^ddlm}| ¡r6d}n| ¡rL| ¡rLd}nd}tj|tj   |d|¡gtj   |d¡gddS) Nr)Úcpur!Zintel64Z32r-r,)r9r;) r€rÔrZcpuinforZ is_ItaniumZis_IntelZis_64bitr/r4r5)rr~rZpltrrrr—s  zmkl_info.__init__cCs~| ¡}| ¡}| dd¡}| ||j¡}| ||¡}|dkrBdSt|ddg|dtjdkr`nt|dgd|j f|ŽdS) NÚmkl_libsr )Z SCIPY_MKL_HN)Ú HAVE_CBLASN)rsrïr)Zpthread)r ) rrOr%rUÚ_lib_mklrcrrKrZr)rr`rtrr‚r÷rrrr)¨s   zmkl_info.calc_infoN) rÙrÚrÛrr@r„r€rr)rrrrrœvs rœc@s eZdZdS)r¡N)rÙrÚrÛrrrrr¡»sr¡c@s eZdZdS)r¢N)rÙrÚrÛrrrrr¢¿sr¢c@s\eZdZdZdZddgZejdd…dkr8dgZd gZ n dgZd gZ e Z d d „Z d d„Z dS)rrXÚATLASÚf77blasÚcblasNéZfreebsdZatlas_rZ alapack_rrwc CsPt |||¡}g}x.|D]&}| | |dddddg¡|g¡qWdd„|DƒS)Nzatlas*zATLAS*ZsseZ3dnowZsse2cSsg|]}tj |¡r|‘qSr)r/r4rF)r1r2rrrr3Ösz(atlas_info.get_paths..)rÔrNr#rd)rrr rwrr2rrrrNÐs  zatlas_info.get_pathscCsÈ| ¡}i}| dd¡}| ||j|j¡}| d|j¡}d}d}d}xh|D]`} | | dgg¡} | | |g¡}|dk r¤| g| | ddg¡} | | |g¡}|dk r¤P|rL|}qLWt  |j ¡|dkrÈ|}|dkrÔdS|  ¡} | || d¡pðdg} | d} | rt j  | ¡} t|| gd d |d <|dk rFt|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¡xT| ¡D]H}x8|D]0}t j  ||||¡}t j  |¡r |}Pq W|rPqW|dk ržt  |¡d}|dkr–t d¡||df}tj|ddnd|d <tf|Ž\}}t|f|Ž|jf|ŽdS)NÚ atlas_libsr Ú lapack_libsr\zatlas*zATLAS*zcblas.hr)rïr\Úlanguage)ÚATLAS_WITH_LAPACK_ATLASN)rs)ÚATLAS_WITHOUT_LAPACKNa ********************************************************************* Could not find lapack library within the ATLAS installation. ********************************************************************* r*)r+rîr-r)ríé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)rr%rUr>Ú _lib_atlasÚ _lib_lapackrcrdrr÷rörOr/r4rBrrÚtextwrapÚdedentr/r0rKrZrPr^r5ÚexistsÚstatÚget_atlas_version)rr`r÷rr‰rŠrXrwZatlas_1r2r\Z lib_dirs2rïÚhÚmessageZ lapack_dirZ lapack_nameZ lapack_librfrHrgÚfnÚszÚ atlas_versionÚatlas_extra_inforrrr)ØsŒ                   zatlas_info.calc_info)rÙrÚrÛrr@r>rKrZrr‘rÞr1rNr)rrrrrÃsrc@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 zcblas.hr)rïr\r‹)rƒNrs)rr%rUr>rrcrOrdr/r4rBrr–r) rr`r÷rr‰rXrïr—r›rœrrrr)5s(      zatlas_blas_info.calc_infoN)rÙrÚrÛr>r)rrrrr‘2sr‘c@seZdZddgZddgZdS)rÚPTATLASr…Ú ptf77blasÚptcblasN)rÙrÚrÛr@r>rrrrrOsrc@seZdZddgZddgZdS)r’rr…ržrŸN)rÙrÚrÛr@r>rrrrr’Tsr’c@seZdZdgejZdS)r“r\N)rÙrÚrÛrr>rrrrr“Ysr“c@seZdZdgejZdS)r”r\N)rÙrÚrÛrr>rrrrr”]sr”c@seZdZdgZeZeZdS)r•ÚsatlasN)rÙrÚrÛr>rr‘rrrrr•asr•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 zcblas.hr)rïr\r‹)rƒNrs) rr%rUr>rcrOrdr/r4rBrr–r) rr`r÷rr‰rXrïr—r›rœrrrr)js(      zatlas_3_10_blas_info.calc_infoN)rÙrÚrÛr>r)rrrrr—gsr—c@s"eZdZddgZdgZeZeZdS)r–rr…ÚtatlasN)rÙrÚrÛr@r>rr‘rrrrr–„sr–c@seZdZddgZdgZdS)r˜rr…r¡N)rÙrÚrÛr@r>rrrrr˜‹sr˜c@s eZdZdS)r™N)rÙrÚrÛrrrrr™sr™c@s eZdZdS)ršN)rÙrÚrÛrrrrrš”sršc@s&eZdZdZdZdgZeZdd„ZdS)r´rwZLAPACKcCsT| ¡}| dd¡}| ||j¡}| ||g¡}|dkrrr)rr`rrŠr÷rrrr)žs zlapack_info.calc_infoN) rÙrÚrÛrr@r>ràr1r)rrrrr´˜s r´c@s(eZdZdZdZeZdd„Zdd„ZdS)rµrxZ LAPACK_SRCc CsJt |||¡}g}x(|D] }| |g| |ddg¡¡qWdd„|DƒS)Nz LAPACK*/SRCZSRCcSsg|]}tj |¡r|‘qSr)r/r4rF)r1r2rrrr3´sz-lapack_src_info.get_paths..)rÔrNr#rd)rrr rwrr2rrrrN¯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)r1rUrrrr3 sz-lapack_src_info.calc_info..cSsg|] }d|‘qS)zd%s.fr)r1rUrrrr3 scSsg|] }d|‘qS)zc%s.fr)r1rUrrrr3 scSsg|] }d|‘qS)zz%s.fr)r1rUrrrr3 scSsg|] }d|‘qS)z%s.fr)r1rUrrrr3scsg|]}tj ˆ|¡‘qSr)r/r4r5)r1rU)Úsrc_dirrrr3sz..ÚINSTALLcsg|]}tj ˆ|d¡‘qS)zlamch.f)r/r4r5)r1r')Úsrc_dir2rrr3sZsdczcsg|]}tj ˆ|d¡‘qS)zlarfp.f)r/r4r5)r1r')r¢rrr3scs"g|]}tj ˆd|d¡‘qS)Úilazlr.f)r/r4r5)r1r')r¢rrr3scs"g|]}tj ˆd|d¡‘qS)r¥zlc.f)r/r4r5)r1r')r¢rrr3scSsg|]}tj |¡r|‘qSr)r/r4rO)r1rUrrrr3sr)r,r‹)rPr/r4rOr5rMr)rròr2ZallauxZlauxZlasrcZsd_lasrcZcz_lasrcZsclauxZdzlauxZslasrcZdlasrcZclasrcZzlasrcZoclasrcZozlasrcr,r÷r)r¢r¤rr)¶s>      j zlapack_src_info.calc_infoN) rÙrÚrÛrr@rár1rNr)rrrrrµª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}yn|jt||d\}}|r¶t d|tj ¡r¶|jt|dg|d\}}|s¶t j t   d¡ddt|d d gd Wn–tk rNx0|D](}t d |¡} | rî|  d ¡}|dk rÐPqÐW|dkrtj dd¡}|r2t|dt|ƒfgdnt|dgd|pHd|fSX|srt d|¡} | rr|  d ¡}|dkr®t d|tj ¡r”d}nt d|¡t d|¡n0|dkrÈt|dgdnt|dt|ƒfgd||f} t|<| S)Nr rî)r rî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. ***************************************************** r*)r+Úf90)ZATLAS_REQUIRES_GFORTRANN)r‹rsz#ATLAS_(?P\d+[.]\d+[.]\d+)_ÚversionZ ATLAS_VERSIONZ ATLAS_INFO)rs)Ú NO_ATLAS_INFOr<z?.?.?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_configrZ get_outputÚatlas_version_c_textÚreÚsearchÚMr/r0r’r“rÚ ExceptionÚgroupr/rAr rr÷) rr rîr r\r›r÷rÚorÚresultrrrr–*sb              r–c@steZdZeZddddddgZdZdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)r¼rbrcrarXrirwZNPY_LAPACK_ORDERcCs tdƒ}|r|jf|ŽdSdS)NrgTF)rÕr)rr÷rrrÚ_calc_info_mklys  zlapack_opt_info._calc_info_mklcCs<tdƒ}|r|jf|ŽdStdƒ}|r8|jf|ŽdSdS)NrdTreF)rÕr)rr÷rrrÚ_calc_info_openblas€s  z#lapack_opt_info._calc_info_openblascCs tdƒ}|r|jf|ŽdSdS)NraTF)rÕr)rr÷rrrÚ_calc_info_flame‹s  z lapack_opt_info._calc_info_flamecCs|tdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|rx| dg¡}d|ksLd|krh| ¡}|s\dSt|f|Ž|jf|Žd SdS) Nr^r]rYrXrs)rŒN)rNFT)rÕrÒÚ_get_info_lapackrr)rr÷rIr´rrrÚ_calc_info_atlas’s$   z lapack_opt_info._calc_info_atlascCs tdƒ}|r|jf|ŽdSdS)NriTF)rÕr)rr÷rrrÚ_calc_info_accelerate«s  z%lapack_opt_info._calc_info_acceleratecCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nr€rír?)r+ryÚ fblas_src)r )rÕr/r0rärÜrær)rr÷Úinfo_srcrrrÚ_get_info_blas²szlapack_opt_info._get_info_blascCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nrwrír?)r+rxZ flapack_src)r )rÕr/r0ràrÜrár)rr÷r¼rrrr¸¾sz lapack_opt_info._get_info_lapackcCsB| ¡}|r>| ¡}t|f|Žt|dgd|jf|ŽdSdS)N)r¨r)rsTF)r¸r½rr)rr÷Z info_blasrrrÚ_calc_info_lapackÉs  z!lapack_opt_info._calc_info_lapackcCst|d |¡ƒƒS)Nz _calc_info_{})rCr)rrÖrrrÚ _calc_infoÓszlapack_opt_info._calc_infocCsÚtj |jd¡}|dkr |j}nj| ¡ d¡}g}g}x8|D]0}||jkrV| |¡qrrOrZÚsystemÚget_cblas_libsr)rr`rrÒr÷r-rrrr)¡s      zblas_info.calc_infoc Cstƒ}t ¡}t d¡}tj |d¡}zÞt|dƒ}|  |¡WdQRXy|j |g||  ¡d}Wn t j jt j jfk r‚dSXx||ddg|ddg|ddgdggD]N}y.|j|tj |d ¡||d | d g¡d |St j jk rüYq°Xq°WWdt |¡XdS) a? Check whether we can link with CBLAS interface This method will search through several combinations of libraries to check whether CBLAS is present: 1. Libraries in ``info['libraries']``, as is 2. As 1. but also explicitly adding ``'cblas'`` as a library 3. As 1. but also explicitly adding ``'blas'`` as a library 4. Check only library ``'cblas'`` 5. Check only library ``'blas'`` Parameters ---------- info : dict system information dictionary for compilation and linking Returns ------- libraries : list of str or None a list of libraries that enables the use of CBLAS interface. Returns None if not found or a compilation error occurs. Since 1.17 returns a list. 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ÚwtN)Ú output_dirrïr r‡rvza.outrîrõ)r rîÚextra_postargs)rÚtempfileÚmkdtempr’r“r/r4r5r|ÚwriteÚcompilerOÚ distutilsÚ ccompilerÚ CompileErrorÚ LinkErrorÚlink_executablerÒÚshutilÚrmtree) rr÷r\ÚtmpdirrrErUÚobjr*rrrrÕ¸s2   zblas_info.get_cblas_libsN) rÙrÚrÛrr@r>rär1r)rÕrrrrr³›s r³c@sZeZdZdZdZdgZgZeZe dd„ƒZ e dd„ƒZ dd„Z d d „Z d d „Zd d„ZdS)rrcÚOPENBLAScCs*y|j |jd¡Stk r$dSXdS)NrÉrí)rýrÒrr)rrrrrÉszopenblas_info.symbol_prefixcCs*y|j |jd¡Stk r$dSXdS)NrÊrí)rýrÒrr)rrrrrÊ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 rVr)Ú new_fcompiler)Z c_compilerZgnu95TFr\r‹)rƒNrsrÆrÇ)rrr%rUr>rrYZnumpy.distutils.fcompilerrèÚcheck_msvc_gfortran_libsrrÚ check_symbolsrÉrÊ) rr\r`rrçr÷rèrUZskip_symbol_checkrrrrr¿s4      zopenblas_info._calc_infocCs | ¡}|dk r|jf|ŽdS)N)r¿r)rr÷rrrr)8szopenblas_info.calc_infoc Csôg}xH|D]@}x:|D].}tj ||d¡}tj |¡r| |¡PqWdSq W|jj}tj t ¡d|¡}tj |¡s€t  |¡|g|gddœ} tj ||d¡} tj ||d¡} t | dƒ} |   d |¡¡WdQRXt | dƒ} WdQRX| S) Nz.aÚbuildr)rîr r‹z .fobjectsz .cobjectsrBr) r/r4r5rOrPrörÙÚgetcwdrFÚmakedirsr|rÛ) rrîr Z library_pathsZlibraryZ library_dirÚfullpathrDrär÷Z fake_lib_fileZfake_clib_filerUrrrré=s,         z&openblas_info.check_msvc_gfortran_libsc s(d}tƒ}t ¡}d ‡fdd„ˆjDƒ¡}d ‡fdd„ˆjDƒ¡}t d¡t||d}tj  |d¡}tj  |d ¡} y |d } Wnt k rœg} YnXzxt |d ƒ} |   |¡WdQRX|j |g|d } y$|j| | |d |d| dd}Wntjjk rd}YnXWdt |¡X|S)NFrc3s |]}dˆj|ˆjfVqdS)zvoid %s%s%s();N)rÉrÊ)r1Ú symbol_name)rrrr7csz.openblas_info.check_symbols..c3s |]}dˆj|ˆjfVqdS)z %s%s%s();N)rÉrÊ)r1rï)rrrr7gsz %(prototypes)s int main(int argc, const char *argv[]) { %(calls)s return 0; })Ú prototypesÚcallszsource.cza.outrõrÖ)r×r rî)r rîrØT)rrÙrÚr5Ú_require_symbolsr’r“rÈr/r4r±r|rÛrÜrárÝrÞràrârã) rr÷r9r\rärðrñrrEr&Ú extra_argsrUrår)rrrê]s8      zopenblas_info.check_symbolsN)rÙrÚrÛrr@r>ròrär1ÚpropertyrÉrÊr¿r)rérêrrrrrús  ) rc@s$eZdZdZdZdgZdgZeZdS)ržrcræÚzungqr_N) rÙrÚrÛrr@r>ròrär1rrrrržˆs ržc@seZdZddgZdS)rŸrcrwN)rÙrÚrÛr>rrrrrŸsrŸcs6eZdZdZdZdgZddgZeZ‡fdd„Z ‡Z S)r¦rkZOPENBLAS_ILP64Z openblas64Údgemm_Ú cblas_dgemmcs(tƒ ¡}|dk r$|ddg7<|S)Nrs)ZHAVE_BLAS_ILP64N)Úsuperr¿)rr÷)rörrr¿™s zopenblas_ilp64_info._calc_info) rÙrÚrÛrr@r>ròrår1r¿Ú __classcell__rr)rörr¦’s r¦cs(eZdZddddgZ‡fdd„Z‡ZS)r§rör÷rõZLAPACKE_zungqrcs$tƒ ¡}|r |ddg7<|S)Nrs)Z HAVE_LAPACKEN)rør¿)rr÷)rörrr¿¢s z%openblas_ilp64_lapack_info._calc_info)rÙrÚrÛròr¿rùrr)rörr§Ÿs r§c@s"eZdZdZdZdgZdZdZdS)r¤rjZ OPENBLAS64_rÎríN)rÙrÚrÛrr@r>rÊrÉrrrrr¤¨s r¤c@s eZdZdS)r¥N)rÙrÚrÛrrrrr¥°sr¥c@s&eZdZdZdZdgZeZdd„ZdS)r rfZBLIScCsf| ¡}| dd¡}| ||j¡}| ||g¡}|dkrrcrOrr)rr`rrúr÷rtrrrr)¹s zblis_info.calc_infoN) rÙrÚrÛrr@r>rär1r)rrrrr ³s r c@s.eZdZdZdZdgZeZdd„Zdd„Z dS)r›a$ Usage of libflame for LAPACK operations This requires libflame to be compiled with lapack wrappers: ./configure --enable-lapack2flame ... Be aware that libflame 5.1.0 has some missing names in the shared library, so if you have problems, try the static flame library. rac CsÀtƒ}t ¡}t d¡}tj |d¡}tj |d¡}| dg¡}znt |dƒ}|  |¡WdQRX|j |g|d} y |j | ||d|d |d d St jjk rªd SXWdt |¡XdS) zS libflame does not necessarily have a wrapper for fortran LAPACK, we need to check zŸ void zungqr_(); int main(int argc, const char *argv[]) { zungqr_(); return 0; }zsource.cza.outrõrÖN)r×r rî)r rîrØTF)rrÙrÚr’r“r/r4r5rÒr|rÛrÜrárÝrÞràrârã) rr÷r\rärrEr&rórUrårrrÚcheck_embedded_lapackØs&   z flame_info.check_embedded_lapackcCsè| ¡}| d|j¡}| ||g¡}|dkr0dS| |¡rH|jf|Žnœtdƒ}|sXdSxt|D]l}t||tƒrŠ|  |g¡||||<q^t||t ƒr²|  |d¡||||<q^|  |d¡||||<q^W| |¡rä|jf|ŽdS)Nr r€rrí) rrUr>rcrûrrÕrr!rÒrª)rr`Z flame_libsr÷r³r rrrr)ös$   zflame_info.calc_infoN) rÙrÚrÛrÜrr>rßr1rûr)rrrrr›Ês  r›c@s$eZdZdZddgZeZdd„ZdS)r£riÚveclibcCsPtj d¡}|r|g}n| d|j¡}dd„|Dƒ}tjdkrLt dd¡sLg}g}tƒdd…dksˆd tƒksˆd tƒksˆdt ¡krŽd }nd }tj   d ¡ràd|krà|r¸|  dg¡n |  dg¡|  dg¡|  ddg¡nRtj   d¡r2d|kr2|r |  dg¡n |  dg¡|  dg¡|  ddg¡|rL|j ||ddgddS)NZ ACCELERATEr cSsg|]}| ¡ ¡‘qSr)rQrÓ)r1r-rrrr3" sz-accelerate_info.calc_info..rXÚ_PYTHON_HOST_PLATFORMéüÿÿÿÚi386ÚintelÚx86_64rrz0/System/Library/Frameworks/Accelerate.framework/riz-msse3z -faltivecz5-I/System/Library/Frameworks/vecLib.framework/Headersz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/rüz -Wl,vecLib)r¨r?)rƒN)rôrõrs) r/rArÒrUr>rKrZÚgetenvr r4r”r#r)rr rlZ link_argsrrrrr) sH         zaccelerate_info.calc_infoN)rÙrÚrÛrr>rär1r)rrrrr£ sr£c@s(eZdZdZdZeZdd„Zdd„ZdS)r¶ryZBLAS_SRCcCsHt |||¡}g}x&|D]}| |g| |dg¡¡qWdd„|DƒS)NrvcSsg|]}tj |¡r|‘qSr)r/r4rF)r1r2rrrr3V sz+blas_src_info.get_paths..)rÔrNr#rd)rrr rwrr2rrrrNQ 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/r4r5)r1rU)r¢rrr3x sz+blas_src_info.calc_info..cSsg|]}tj |¡r|‘qSr)r/r4rO)r1rUrrrr3{ sr)r,r‹)rPr/r4rOr5rMr)rròr2Zblas1Zblas2Zblas3r,r÷r)r¢rr)X s     zblas_src_info.calc_infoN) rÙrÚrÛrr@rær1rNr)rrrrr¶L s r¶c@s*eZdZdZeZdgZdd„Zdd„ZdS)r¨rlÚX11cCstj|ttddS)N)r9r;)rÔrÚdefault_x11_lib_dirsÚdefault_x11_include_dirs)rrrrr… szx11_info.__init__cCsœtjdkrdS| ¡}| ¡}| dd¡}| ||j¡}| ||g¡}|dkrRdSd}x|D]}| |d¡r\|}Pq\W|dk rŒt ||gd|j f|ŽdS)N)r)Úx11_libsr zX11/X.h)rï) rKrZrrOr%rUr>rrdrr)rr`rïrrr÷Úinc_dirr2rrrr)Š s"    zx11_info.calc_infoN) rÙrÚrÛrrêr1r>rr)rrrrr¨€ s r¨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)rgT)Ú plat_specific)r9r;)Ú __import__Ú modulenamerIrMr/r0rPrCÚAttributeErrorrÝÚ sysconfigÚget_python_incr5Ú ImportErrorr;r4rDrÔr)rrïÚmodulergrÖZ py_incl_dirÚ py_pincl_dirr2rrrr£ s8      z_numpy_info.__init__c Csäyt|jƒ}Wntk r"dSXi}g}xHdD]@}t||dƒ}|dkrLq2|j ¡dt|ƒf|j ¡dfg}Pq2Wt||d| ¡}d}x*|D]"}| |t j   |jd¡¡r”|}Pq”W|dk rÐt||gd|rà|j f|ŽdS)N)Ú __version__r§Z_VERSION)rsz arrayobject.h)rï) r r rrCÚupperr rrOrdr/r4r5r) rrr÷rpr;Zvrsrïrr2rrrr)Å s8       z_numpy_info.calc_infoN) rÙrÚrÛrr rér1rr)rrrrrž s "rc@seZdZdZdZdS)rºr~N)rÙrÚrÛrr rrrrrºä srºc@seZdZdZdZdS)r¹r|N)rÙrÚrÛrr rrrrr¹é sr¹c@seZdZdZdZdS)r·rzN)rÙrÚrÛrr rrrrr·î sr·c@seZdZdZdd„ZdS)r»rc Csbd}t d¡rt d¡df}|ddkrþd}yddl}d}WnÀtk rü}z¢t|ƒ}yddl}d}Wn„tk rê}zft|ƒ}yddl}d}WnHtk rØ}z*t|ƒ}t |¡t |¡t |¡Wdd}~XYnXWdd}~XYnXWdd}~XYnX|d  ¡  ¡|df}|dd kr.)rÔrNr#rd)rrr rwrr2rrrrN( 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*ÚpythonrEz module.cppT)r z*.cppr{Zboost_python_src)rïr,)r rï) rPr/r4rOr5rÝr rrPrr) rròr¢r2Z py_incl_dirsrZsrcs_dirZbpl_srcsr÷rrrr)/ s.      zboost_python_info.calc_infoN)rÙrÚrÛrr@rNr)rrrrrÄ$ srÄc@s$eZdZdZdZdd„Zdd„ZdS)rÅr‚ZAGG2cCsHt |||¡}g}x&|D]}| |g| |dg¡¡qWdd„|DƒS)Nzagg2*cSsg|]}tj |¡r|‘qSr)r/r4rF)r1r2rrrr3T sz'agg2_info.get_paths..)rÔrNr#rd)rrr rwrr2rrrrNO 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írEzagg_affine_matrix.cppr)rZzagg_win32_bmp.cppz*.cpprzagg_platform_support.cppZagg2_srcr,)r,rï)r rï) rPr/r4rOr5rKrZrr)rròr¢r2Z agg2_srcsr÷rrrr)V s,     zagg2_info.calc_infoN)rÙrÚrÛrr@rNr)rrrrrÅK 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/rAÚdefault_config_exe)rrrrÚget_config_exe s  z_pkg_config_info.get_config_exec CsP|d|jd|}yt |¡}Wnttjfk r>YnXt|ƒ}|SdS)Nú )Úappend_config_exeÚ subprocessÚ check_outputÚOSErrorÚCalledProcessErrorr )rÚ config_exeÚoptionÚcmdr³rrrÚget_config_output„ 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¡} | rPxf|   ¡D]Z} | dd…d kr| | dd…¡qò| dd…d krB| | dd…¡qò| | ¡qòW| ||j¡} | rxœ|   ¡D]} | dd…d kr˜| | dd…¡nd| dd…d kròd | krÚ| dd…  d ¡\} }| | |f¡n| | dd…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 --releasez--libsr*z-lz-Lz-Iz-Dú=)rs)r )rî)rï)rõ)rô)r rrr0rr$Ú version_flagrPrörÙrMrr Úversion_macro_namerÚrelease_macro_nameÚ cflags_flagrr)rr!r÷rpr rîrïrõrôr§ÚreleaseÚoptsrÚnr;rrrr)Ž st              z_pkg_config_info.calc_info)rÙrÚrÛrrrrr(r)r'r*rr$r)rrrrru s rc@s,eZdZdZdZdZdZdZdZdZ dZ d S) rÆrƒZ WX_CONFIGz wx-configríZ WX_VERSIONZ WX_RELEASEz --versionz --cxxflagsN) rÙrÚrÛrrrrr(r)r'r*rrrrrÆÎ srÆc@seZdZdZdZdZdS)rÇr„zgdk-pixbuf-xlib-2.0ZGDK_PIXBUF_XLIB_VERSIONN)rÙrÚrÛrrr(rrrrrÇÙ srÇc@seZdZdZdZdZdS)rÈr…zgdk-pixbuf-2.0ZGDK_PIXBUF_VERSIONN)rÙrÚrÛrrr(rrrrrÈß srÈc@seZdZdZdZdZdS)rËrˆz gdk-x11-2.0ZGDK_X11_VERSIONN)rÙrÚrÛrrr(rrrrrËå srËc@seZdZdZdZdZdS)rÊr‡zgdk-2.0Ú GDK_VERSIONN)rÙrÚrÛrrr(rrrrrÊë srÊc@seZdZdZdZdZdS)rÉr†r.N)rÙrÚrÛrrr(rrrrrÉñ srÉc@seZdZdZdZdZdS)rÌr‰z gtk+-x11-2.0ZGTK_X11_VERSIONN)rÙrÚrÛrrr(rrrrrÌ÷ srÌc@seZdZdZdZdZdS)rÍrŠzgtk+-2.0Z GTK_VERSIONN)rÙrÚrÛrrr(rrrrrÍý srÍc@seZdZdZdZdZdS)rÎr‹Z XFT_VERSIONN)rÙrÚrÛrrr(rrrrrÎ srÎc@seZdZdZdZdZdS)rÏrŒZFREETYPE2_VERSIONN)rÙrÚrÛrrr(rrrrrÏ srÏc@s"eZdZdZdZdgZdd„ZdS)rÑrŽZAMDc Csª| ¡}| dd¡}| ||j¡}| ||g¡}|dkrrrOrdr/r4rBrr) rr`rr/r÷rïrr2r'rrrr) s&    zamd_info.calc_infoN)rÙrÚrÛrr@r>r)rrrrrÑ srÑc@s&eZdZdZdZeZdgZdd„ZdS)rÐrZUMFPACKc CsÀ| ¡}| dd¡}| ||j¡}| ||g¡}|dkrrrOrdr/r4rBrrÕr) rr`rr1r÷rïrr2r'rrrr)4 s(   zumfpack_info.calc_infoN) rÙrÚrÛrr@rër1r>r)rrrrrÐ. s rÐc Osêg}x*|D]"}|sq t|ƒr"|g}| |¡q W|}|s.rr*Nz (paths: %s)rS) r rPr5rr rr#r/r4r5rdrrF)rlÚkwsrzrRr´Za0Za1rrrrdP s(   ""rdrr*r?)r\zc++rr¦r\zc++rr¦)rrr*r?c s’g}xf| ¡D]Z\‰}ˆdkr*| |¡qˆˆkr`ˆdkrP‡‡fdd„|Dƒqhˆˆ |¡q|ˆˆ<qW|rŽttdd„|Dƒƒ}|ˆd<dS)Nr‹)rîrïrôrõrðrscs&g|]}|ˆˆkrˆˆ |¡‘qSr)rP)r1Úvv)r2r:rrr3x szdict_append..cSsg|]}t |d¡‘qS)r)Ú language_maprÒ)r1rIrrrr3~ s)r4rPr#Úinv_language_mapÚmax)r2r2Ú languagesr;rIr)r2r:rrn 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ÚdestrTÚhelpr)rl)ÚoptparseÚ OptionParserÚ add_optionÚ parse_args)rLr>Úparserr,rlrrrÚ parseCmdLineƒ s  rCc 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éûÿÿÿÚ_infor*zInfo classes not defined: %srS)ÚinspectrKrLrCr:rÚ set_thresholdÚDEBUGr3rPÚglobalsr6r4ÚisclassÚ issubclassrÔr#Ú verbosityrÕr÷r5) rLrFr,rlZ show_onlyr-Úshow_allZ_gdict_rÖr\ÚconfrzrrrrMŽ s8       rMÚ__main__)r)r8)N)¿rÜrKr/r®r6r/rr’rÚ functoolsrÚ configparserrrrüÚdistutils.errorsrÚdistutils.distrÚdistutils.sysconfigrÝZnumpy.distutilsrÚdistutils.utilr Znumpy.distutils.exec_commandr r Znumpy.distutils.misc_utilr r rZnumpy.distutils.command.configrr¬rrrÚdistutils.ccompilerrÙrârZZ_bitsÚ architectureZ platform_bitsrr r(r4r5r Ú EXEC_PREFIXr9rùr;rúrrr<r:r=rr>rBZ vcpkg_dirÚ specifierZvcpkg_installedZ vcpkg_rootr@Z conda_dirr”Zglobbed_x11_dirrMZ x11_so_dirr#r|Údevnullr'ÚPopenÚPIPEr'rrûÚ communicateÚdecoderQZtripletÚ returncodergÚinsertrPr[rWrÕ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‘rr’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¨rrºr¹r·r»r¸rÄrÅrrÆrÇrÈrËrÊrÉrÌrÍrÎrÏrÑrÐrdr4r5rrCrMrÙrrrrÚšsš             '           $ W{/       $Eo{I e _  L64F% '*Y "