a :jg½ã @s dZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m ZddlmZddlmZddlZdd lmZdd lmZdd lmZmZdd lmZmZmZdd lm Z!ddlm"Z#ddlm$Z$ddl%Z&ddl'Z'ddl(Z(dgZ)ddl*Z*dddœZ+e+e* ,¡dZ-da.dd„Z"dd„Z/dd„Z0ej*dkrtdej1 2e 3d¡d¡ga4gZ5ga6dgZ7gZ8gZ9dd gZ:d!gZ;d"d#„e:DƒZ:d$d#„e;DƒZ;d%d&„Ze>r.ej1 ?e>¡Z@e* ,¡dd(krèd)ZAnd*ZAej1 2e@d+¡ZBej1 2eBeAd,¡ej1 2eBeAd-¡fD]ZCeZPWneQefy8YnN0eReP S¡d T¡ U¡ƒZVePjWdkr†e8ej1 2d?eV¡g7Z8t4ej1 2d?eV¡g7a4Wdƒn1sœ0Yej1 2ejXd!¡t4vrt4 Ydej1 2ejXd!¡¡t6 Zej1 2ejXd¡¡e7 Zej1 2ejXd@¡¡dAd#„t4Dƒa4dBd#„e5DƒZ5dCd#„t6Dƒa6dDd#„e7DƒZ7eƒZ[dEdF„Z\dGdH„Z]d dIdJ„Z^GdKdL„dLeƒZ_GdMdN„dNeƒZ`GdOdP„dPe_ƒZaGdQdR„dRe_ƒZbGdSdT„dTe_ƒZcGdUdV„dVecƒZdGdWdX„dXe_ƒZeGdYdZ„dZe_ƒZfGd[d\„d\e_ƒZgGd]d^„d^e_ƒZhGd_d`„d`egƒZiGdadb„dbe_ƒZjGdcdd„dde_ƒZkGdedf„dfe_ƒZlGdgdh„dhe_ƒZmGdidj„dje_ƒZnGdkd„dƒZoGdldm„dmeoƒZpGdndo„doeoƒZqGdpdq„dqeqƒZrGdrds„dseqƒZsGdtdu„dueqƒZtGdvdw„dweqƒZuGdxdy„dyeqƒZvGdzd{„d{eqƒZwGd|d}„d}eqƒZxGd~d„deqƒZyGd€d„deoƒZzGd‚dƒ„dƒeoƒZ{Gd„d…„d…e{ƒZ|Gd†d‡„d‡e{ƒZ}Gdˆd‰„d‰eoƒZ~GdŠd‹„d‹e~ƒZGdŒd„de~ƒZ€GdŽd„deoƒZGdd‘„d‘eƒZ‚Gd’d“„d“eƒZƒGd”d•„d•eoƒ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ŠƒZŒGd¦d§„d§e‹ƒZGd¨d©„d©eŠƒZŽGdªd«„d«eŒƒZGd¬d­„d­eoƒZGd®d¯„d¯eoƒZ‘d°Z’iZ“d±d²„Z”Gd³d´„d´eoƒZ•Gdµd¶„d¶ƒZ–Gd·d¸„d¸e•e–ƒZ—Gd¹dº„dºe—ƒZ˜Gd»d¼„d¼e—ƒZ™Gd½d¾„d¾eoƒZšGd¿dÀ„dÀeše–ƒZ›GdÁd„dÂe›ƒZœGdÃdÄ„dÄe›ƒZGdÅdÆ„dÆeoƒZžGdÇdÈ„dÈeoƒ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ÚeoƒZ¨GdÛdÜ„dÜeoƒZ©GdÝdÞ„dÞe©ƒZªGdßdà„dàeoƒZ«Gdádâ„dâeoƒZ¬Gdãdä„däeoƒZ­Gdådæ„dæe­ƒZ®Gdçdè„dèe­ƒZ¯Gdédê„dêe­ƒZ°Gdëdì„dìeoƒZ±Gdídî„dîeoƒZ²Gdïdð„dðeoƒZ³Gdñdò„dòeoƒZ´Gdódô„dôeoƒ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„deµƒZ¾Gdd„deµƒZ¿Gd d „d eoƒZÀGd d „d eoƒZÁd d„ZÂdddddœZÃdddddœZÄdd„ZÅd!dd„ZÆd"dd„ZÇeÈdk r eǃdS(#aÅ 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 accelerate_lapack_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_ssl2_info:ssl2 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_ssl2_info:ssl2 lapack_opt_info:ALL # usage recommended lapack_src_info:lapack_src mkl_info:mkl ssl2_info:ssl2 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 Note that blas_opt_info and lapack_opt_info honor the NPY_BLAS_ORDER and NPY_LAPACK_ORDER environment variables to determine the order in which specific BLAS and LAPACK libraries are searched for. This search (or autodetection) can be bypassed by defining the environment variables NPY_BLAS_LIBS and NPY_LAPACK_LIBS, which should then contain the exact linker flags to use (language will be set to F77). Building against Netlib BLAS/LAPACK or stub files, in order to be able to switch BLAS and LAPACK implementations at runtime. If using this to build NumPy itself, it is recommended to also define NPY_CBLAS_LIBS (assuming your BLAS library has a CBLAS interface) to enable CBLAS usage for matrix multiplication (unoptimized otherwise). 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Ú system_infoé é@)Ú32bitÚ64bitcCsts tƒatS©N)Úglobal_compilerÚ_customized_ccompiler©rrúE/usr/local/lib/python3.9/site-packages/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@|dvrtdƒ‚|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:\Ú exec_prefixÚlibsÚ.Úincludezinclude/suitesparseÚlibcCsg|]}| dtj¡‘qS©ú/©rÚosÚsep©Ú.0ÚdrrrÚ #ór9cCsg|]}| dtj¡‘qSr1r3r6rrrr9$r:cs@tj ˆ¡‰t ‡fdd„tDƒ¡t ‡fdd„tDƒ¡dS)z5Add a package manager root to the include directoriesc3s|]}tj ˆ|¡VqdSr©r4ÚpathÚjoinr6©Z library_rootrrÚ ,sz"add_system_root..c3s|]}tj ˆ|¡VqdSrr;r6r>rrr?.sN)r4r<ÚnormpathÚdefault_lib_dirsr%Ú _lib_dirsÚdefault_include_dirsÚ _include_dirsr>rr>rÚadd_system_root%s ÿÿrEÚvcpkgrÚx86Úx64Ú installedz-windowsz-windows-staticÚcondaú..ÚLibrary)z/usr/local/libz/opt/libú/usr/libz/opt/local/libz/sw/lib)z/usr/local/includez /opt/includez/opt/local/include/ufsparsez/opt/local/includez /sw/includez/usr/include/suitesparse)r.z/usr/local/srcz/opt/srcz/sw/src)z/usr/X11R6/libz /usr/X11/librMz/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©r4r<Úisdir©r7Ú_mrrrr9vr:cCsg|]}tj |¡r|‘qSrrRrTrrrr9wr:cCsg|]}tj |¡r|‘qSrrRrTrrrr9xr:cCsg|]}tj |¡r|‘qSrrRrTrrrr9yr:cCsÌg}zt}Wnty(tjd}Yn0tj tj tj |¡¡d|¡}tj  |¡rb|  |¡ztj  d¡}Wnt y„Yn&0tj ||¡}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Úargvr4r<r=ÚsplitÚabspathÚisfileÚappendÚ expanduserÚKeyError)ÚfnameÚ filenamesÚfZsysfileÚ user_filerrrÚget_standard_file~s( ÿ      rec CsJtj |d¡}dd„|Dƒ}|dur,|gfS| d¡p>| d¡}t|ƒ}| d¡| d¡}|rŠ|dkr|td|›d|›ƒ‚|dd…}n|d kr¦td|›d |›ƒ‚| ¡ d ¡}g}|rü|  ¡}|D]0} | sÒqÈ| |vræ|  | ¡qÈ| |vrÈ|  | ¡qÈnFg}|D]<} | sq| |vr*|  | ¡q| |vr|  | ¡q||fS) aK Parse an environment variable `env` by splitting with "," and only returning elements from `base_order` This method will sequence the environment variable and check for their individual elements in `base_order`. The items in the environment variable may be negated via '^item' or '!itema,itemb'. It must start with ^/! to negate all options. Raises ------ ValueError: for mixed negated and non-negated orders or multiple negated orders Parameters ---------- base_order : list of str the base list of orders env : str the environment variable to be parsed, if none is found, `base_order` is returned Returns ------- allow_order : list of str allowed orders in lower-case unknown_order : list of str for values not overlapping with `base_order` NcSsg|] }| ¡‘qSr)Úlower)r7Úorderrrrr9¿r:z$_parse_env_order..ú^ú!ézEnvironment variable 'z1' may only contain a single (prefixed) negation: rz,' may not mix negated an non-negated items: ú,) r4ÚenvironÚgetÚ startswithÚlistÚcountr$rfr[Úcopyr^Úremove) Z base_orderÚenvZ order_strÚnegZ order_str_lZsum_negZordersÚ unknown_orderZ allow_orderrgrrrÚ_parse_env_order¡sF    rvcSCsÂtttttttttt t t t t ttttttttttttttttttt t!t"t#t$t%t&t't(t)t*t+t,t-t.t/t0t1t2t2t3t4t5t6t7t8t9t:t;tt?t@t@tAtAtBtCtCtDtDtEtEtFtFtGtHtItJdœR K| L¡tM¡}|ƒ N|¡S)zg notfound_action: 0 - do nothing 1 - display warning message 2 - raise error )RÚarmplÚ blas_armplÚ lapack_armplZ fftw3_armplÚ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Ússl2ÚopenblasÚopenblas_lapackÚopenblas_clapackÚblisÚ lapack_mklÚblas_mklÚ lapack_ssl2Ú blas_ssl2Ú accelerateZaccelerate_lapackÚ 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)OÚ armpl_infoÚblas_armpl_infoÚlapack_armpl_infoÚfftw3_armpl_infoÚ 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Ú ssl2_infoÚ openblas_infoÚopenblas_lapack_infoÚopenblas_clapack_infoÚ blis_infoÚlapack_mkl_infoÚ blas_mkl_infoÚlapack_ssl2_infoÚblas_ssl2_infoÚaccelerate_infoÚaccelerate_lapack_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_informrfrÚget_info)ÚnameÚnotfound_actionÚclrrrrõs¬­T¬Urc@seZdZdZdS)Ú NotFoundErrorz1Some third-party program or library is not found.N©Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrr Tsr c@seZdZdZdS)ÚAliasedOptionErrorz‹ Aliases entries in config files should not be existing. In section '{section}' we found multiple appearances of options {options}.Nr rrrrrXsrc@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 rrrrr^src@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 rrrrrfsrc@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 rrrrrmsrc@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 rrrrrusrc@seZdZdZdS)ÚLapackILP64NotFoundErrorz† 64-bit Lapack libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 Nr rrrrr}src@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 rrrrr„src@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 rrrrr‹src@seZdZdZdS)ÚBlasILP64NotFoundErrorz„ 64-bit Blas libraries not found. Known libraries in numpy/distutils/site.cfg file are: openblas64_, openblas_ilp64 Nr rrrrr’src@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 rrrrr™src@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 rrrrr¡src@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 rrrrr©src@seZdZdZdS)ÚNumericNotFoundErrorzw Numeric (https://www.numpy.org/) module not found. Get it from above location, install it, and retry setup.py.Nr rrrrr±src@seZdZdZdS)ÚX11NotFoundErrorzX11 libraries not found.Nr rrrrr·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 rrrrr»src@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).rjTrNz[{}]z, )r1Úoptions)ÚsumÚindexrrr r1r=)r5rMÚfoundrr;rÚget_option_singles   ÿzsystem_info.get_option_singlecCs|jj|jvSr)r'r rHr;rrrÚhas_info9szsystem_info.has_infocCsJi}dD]<}|j |j|¡}tj |¡}|r||i}t|fi|¤Žq|S)z˜ Updates the information in the current information with respect to these flags: extra_compile_args extra_link_args )r%r&)r.rmr1rZ NativeParserr[rB)r5r(r<rLÚtmprrrrG<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 vrt|ƒd kr|d d …d |dd …}t d||¡qÔt d¡t |¡S)zv Return a dictionary with items that are compatible with numpy.distutils.setup keyword arguments. rrjú:Ú calc_infoé©Ú stacklevelz NOT AVAILABLEz FOUND:)Úsourcesr=iNéxz ... ... ...iˆÿÿÿz %s = %sr)rRrr(r'r ÚhasattrrUÚwarningsÚwarnÚ notfounderrorrr$ÚreprrJrHrmZ get_thresholdÚINFOÚitemsr,ÚlenrqÚdeepcopy)r5rÚflagÚresÚkÚvrrrrLs4      zsystem_info.get_infocCsL|j ||¡ tj¡}|j}|rrt|ƒrr|d}|D]}|tjvr4|}qLq4|d|ksnt  d|d|f¡|}|r¼|tjvr¼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æ||vræ| |¡qæt d|d |¡¡|S)Néÿÿÿÿrz Setting %s=%sÚNonezDisabled %s: %sz (%s is None)Ú _lib_namesrjér0z#Replacing _lib_names[0]==%r with %r)r/r0zSpecified path %s is invalid.rVrWz ( %s = %s )rT)r.rmr[r4r)Ú dir_env_varr rlrr(r'r r<r]ÚdirnameÚgetattrrbÚbasenameÚsplitextrjrSr^r=r1r%r\r]Údebug)r5r1r<rDÚenv_varZe0Úer8ÚlÚbZdsZds2ÚddZd1Z default_dirsÚretrrrÚ get_pathspsj   ÿÿ  ÿ    zsystem_info.get_pathsrcCs| |j|¡Sr©rxr1©r5r<rrrr?§szsystem_info.get_lib_dirsr!cCs | |j|¡}|dgkrg}|S)Nrry)r5r<r<rrrr@ªs z system_info.get_runtime_lib_dirsr cCs| |j|¡SrryrzrrrÚget_include_dirs°szsystem_info.get_include_dirsr#cCs| |j|¡SrryrzrrrÚ get_src_dirs³szsystem_info.get_src_dirscCshz|j |j|¡}Wn4tyH|s.gYSt|ƒr@|gYS|YS0dd„dd„| d¡DƒDƒS)NcSsg|] }|r|‘qSrr)r7rurrrr9¿r:z(system_info.get_libs..cSsg|] }| ¡‘qSr)Ústrip)r7Úarrrr9¿r:rk)r.rmr1rr r[)r5r<Údefaultr-rrrÚget_libs¶s   zsystem_info.get_libsr=cCs*t|dƒr|j||jdS| |d¡SdS)Nrj)rr)r[r€rjrzrrrr>Ás zsystem_info.get_librariescCsztƒ}g}|jdkr| d¡tjdkr2| d¡|jrD|tg}n tg|}tjdkrb| d¡tjdkrv| d¡|S) NÚmsvcú.ar+ú.libÚcygwinú.dll.aÚdarwinz.dylib)rÚ compiler_typer^rYÚplatformr$Úso_ext)r5ÚcZ static_extsÚextsrrrÚlibrary_extensionsÇs          zsystem_info.library_extensionscCsP| ¡}d}|D]"}| ||||g¡}|durq4q|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 %srk©rŒÚ _check_libsrr(r=)r5Úlib_dirsr-Úopt_libsr‹r(ÚextrrrrAÙ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. rrkrŽ)r5rr-r‘r‹r(rrrÚ check_libs2ësÿzsystem_info.check_libs2cCs–t|ƒs J‚tjdkr ddg}ndg}|D]f}|D] }| ||||¡}|r2qTq2|r*t|ƒdkshJ‚|dkrx|d7}|dkrˆ||}|Sq*dS) Nr+rr0rjr…z.dllrƒF)r rYrˆÚ combine_pathsrb)r5Úlib_dirr0r‹Ú lib_prefixesr’Úprefixr)rrrÚ _find_libùs"    zsystem_info._find_libc CsXgg}}|D]@}|D]6}| |||¡}|r| |¡||vrH| |¡qqq||fSr)r˜r^) r5rr-r‹Ú found_dirsÚ found_libsr0r•Z found_librrrÚ _find_libss   zsystem_info._find_libsc CsŠt|ƒs|g}| |||¡\}}t|ƒdkr‚t|ƒt|ƒkr‚| |||¡\}}| |¡|D]} | |vr\| | ¡q\||dœ} | SdSdS)zxFind mandatory and optional libs in expected paths. Missing optional libraries are silently forgotten. r©r=rN)r r›rbr%r^) r5rr-r‘r‹r™ršZopt_found_dirsZopt_found_libsr•r(rrrrs   zsystem_info._check_libscGst|ŽS)zjReturn a list of existing paths composed by all combinations of items from the arguments. )r”)r5Úargsrrrr”4szsystem_info.combine_paths)r)r)r!)r )r#)r=)"r r r rrlr$r1rHr r^rArCr7r0rFrJrQrRrGrrxr?r@r{r|r€r>rŒrAr“r˜r›rr”rrrrrÃs<þ    $7        c@seZdZdd„ZdS)rÜcCsdi}tdƒptdƒptdƒ}tdƒ}|r`t|fi|¤Ž|rLt|fi|¤Ž|jfi|¤ŽdSdS)Nr”r“r•rš)rrBrJ)r5r(rÝrårrrrU=szfft_opt_info.calc_infoN©r r r rUrrrrrÜ;srÜc@sTeZdZdZdZeZddgdgdgdœdddgd d gd gdœgZd d „Zdd„Z dS)rÝr’ÚFFTWr”úfftw3.h©Z SCIPY_FFTW3_HN©rr-ÚincludesÚmacrosr“Úrfftwúfftw.húrfftw.h©Z SCIPY_FFTW_HNc CsÚ| ¡}| ¡}| |jdd¡}| ||d¡}| ||¡}|dur¤d}|D]:}t| ||d¡ƒt|dƒkrNt||gdd}qŠqN|r t||d d nd}|durÀ|j fi|¤Žd St   d |d ¡dSdS)z8Returns True on successful version detection, else FalseZ_libsr=r-Nrr£©r rjr¤©Ú define_macrosTz %s not foundrF) r?r{rQr1r€rArbr”rBrJrr() r5Z ver_paramrÚ incl_dirsrLr-r(rdr8rrrÚ calc_ver_infoWs,  ÿzfftw_info.calc_ver_infocCs|jD]}| |¡rqqdSr)Úver_infor­)r5rErrrrUrs  zfftw_info.calc_infoN) r r r r1rlrr^r®r­rUrrrrrÝIs ýýü rÝc@s2eZdZdZdZeZdddgddgdgdœgZd S) rÞr’rŸr“r¥r¦r§r¨r¢N©r r r r1rlrr^r®rrrrrÞxsýrÞc@s.eZdZdZdZeZddgdgdgdœgZdS)rßr”ZFFTW3r r¡r¢Nr¯rrrrrß„sýrßc@s.eZdZdZdZeZddgdgdgdœgZdS)r½r”Ú ARMPL_DIRÚ armpl_lp64_mpr r¡r¢Nr¯rrrrr½sýr½c@s.eZdZdZdZdddgddgdgdœgZd S) ràr’rŸr•Zdrfftwzdfftw.hzdrfftw.h)Z SCIPY_DFFTW_HNr¢N©r r r r1rlr®rrrrràšsýràc@s.eZdZdZdZdddgddgdgdœgZd S) rár’rŸr–Zsrfftwzsfftw.hzsrfftw.h)Z SCIPY_SFFTW_HNr¢Nr²rrrrrá£sýrác@s.eZdZdZdZdddgddgdgd œgZd S) râr’rŸz fftw threadsZ rfftw_threadsr—zfftw_threads.hzrfftw_threads.h)ZSCIPY_FFTW_THREADS_HNr¢Nr²rrrrrâ¬sýrâc@s.eZdZdZdZdddgddgdgd œgZd S) rãr’rŸz dfftw threadsZdrfftw_threadsr˜zdfftw_threads.hzdrfftw_threads.h)ZSCIPY_DFFTW_THREADS_HNr¢Nr²rrrrrãµsýrãc@s.eZdZdZdZdddgddgdgd œgZd S) rär’rŸz sfftw threadsZsrfftw_threadsr™zsfftw_threads.hzsrfftw_threads.h)ZSCIPY_SFFTW_THREADS_HNr¢Nr²rrrrrä¾sýräc@s(eZdZdZdZeZdd„Zdd„ZdS)råršZDJBFFTcCsDt |||¡}g}|D]}| | |dg¡|g¡qdd„|DƒS)NršcSsg|]}tj |¡r|‘qSrrRr6rrrr9Ñr:z)djbfft_info.get_paths..©rrxr%r”©r5r1r<Zpre_dirsrDr8rrrrxÌs zdjbfft_info.get_pathscCsÀ| ¡}| ¡}d}|D]L}| |dg¡}|r:d|i}qf| |ddtg¡}|rdg|gdœ}qfq|durrdS|D]D}t| |ddg¡ƒd krvt||gd gd |jfi|¤ŽdSqvdS) Nzdjbfft.aÚ extra_objectsz libdjbfft.aZ libdjbfftršrœzfftc8.hz fftfreq.hrV)ZSCIPY_DJBFFT_HN)r r«)r?r{r”r‰rbrBrJ)r5rr¬r(r8r)rrrrUÓs,ÿzdjbfft_info.calc_infoN) r r r r1rlrr^rxrUrrrrråÇs råc@s2eZdZdZdZdgZdd„Zdd„Zdd „Zd S) rËr„ÚMKLROOTZmkl_rtc CsJtj dd¡}|dur|Stj dd¡ tj¡}d}tj |¡rˆt|ƒ0}|D]}| ¡}|rN|  |¡qNWdƒn1s~0Yg}|D]P}| tj ¡}|D]:} |   d¡r¤tj   |d|  | ¡d…¡}|  |¡qq¤q|D]^}ttj  |dd¡ƒ} | ttj  |d¡ƒ7} | D]*} tj tj  | d ¡¡r| SqqædS) Nr¶ZLD_LIBRARY_PATHrz/etc/ld.so.confr„rVÚ*zmkl*r0)r4rlrmr[r)r<r]Úopenr}r^r5rnr=rOrrS) r5Úmklrootr&Z ld_so_confrcr8Zintel_mkl_dirsr<Z path_atomsÚmrDZsub_dirrrrÚget_mkl_rootdirðs4  *   zmkl_info.get_mkl_rootdircCs~| ¡}|durt |¡n^ddlm}| ¡r6d}n| ¡rL| ¡rLd}nd}tj|tj   |d|¡gtj   |d¡gddS) Nrj)Úcpur#Zintel64Z32r0r/©rArC) r»rr7Zcpuinfor¼Z is_ItaniumZis_IntelZis_64bitr4r<r=)r5r¹r¼Zpltrrrr7 s  ýzmkl_info.__init__cCs‚| ¡}| ¡}| dd¡}| ||j¡}| ||¡}|durBdSt|ddg|dtjdkr`nt|dgd|j fi|¤ŽdS) NÚmkl_libsr=©Z SCIPY_MKL_HN©Z HAVE_CBLASN©r«r r+Zpthread©r=) r?r{rQr€Ú_lib_mklr“rBrYrˆrJ)r5rr¬rLr¾r(rrrrUs"  ÿý zmkl_info.calc_infoN) r r r r1rlrÃr»r7rUrrrrrËës rËc@s eZdZdS)rÑN©r r r rrrrrÑ0srÑc@s eZdZdS)rÒNrÄrrrrrÒ4srÒc@s2eZdZdZdZdgZdd„Zdd„Zdd „Zd S) rÌr…ZSSL2_DIRZ fjlapackexsvecCstj dd¡}|dur|SdS)NZ TCSDS_PATH)r4rlrm©r5Ú tcsdsrootrrrÚget_tcsds_rootdir@szssl2_info.get_tcsds_rootdircCsH| ¡}|durt |¡n(tj|tj |d¡gtj |d¡gddS)NÚlib64úclang-comp/includer½)rÇrr7r4r<r=rÅrrrr7Fs ÿýzssl2_info.__init__cCs| ¡}| ¡}|dur&tj |d¡}| ¡}|durDtj |d¡}| d|j¡}| ||¡}|durjdSt |ddg|d|j fi|¤ŽdS)NrÈrÉÚ ssl2_libsrÀ)Z HAVE_SSL2rjrÁ) rÇr?r4r<r=r{r€Ú _lib_ssl2r“rBrJ)r5rÆrr¬rÊr(rrrrUQs$ ÿýzssl2_info.calc_infoN) r r r r1rlrËrÇr7rUrrrrrÌ8s  rÌc@s eZdZdS)rÓNrÄrrrrrÓhsrÓc@s eZdZdS)rÔNrÄrrrrrÔlsrÔc@s"eZdZdZdZdgZdd„ZdS)rºrwr°r±cCs\| ¡}| ¡}| d|j¡}| ||¡}|dur6dSt|ddg|d|jfi|¤ŽdS)NÚ armpl_libsr¿rÀrÁ)r?r{r€Ú _lib_armplr“rBrJ)r5rr¬rÌr(rrrrUvs ÿýzarmpl_info.calc_infoN)r r r r1rlrÍrUrrrrrºqsrºc@s eZdZdS)r¼NrÄrrrrr¼ƒsr¼c@s eZdZdS)r»NrÄrrrrr»†sr»c@s\eZdZdZdZddgZejdd…dkr8dgZd gZ n dgZd gZ e Z d d „Z d d„Z dS)r¾rzÚATLASÚf77blasÚcblasNéÚfreebsdZatlas_rZ alapack_rrœcCsFt |||¡}g}|D] }| | |gd¢¡|g¡qdd„|DƒS)N)úatlas*úATLAS*ZsseZ3dnowZsse2cSsg|]}tj |¡r|‘qSrrRr6rrrr9r:z(atlas_info.get_paths..r³r´rrrrx—sÿzatlas_info.get_pathscCsÚ| ¡}i}| dd¡}| ||j|j¡}| d|j¡}d}d}d}|D]R} | | |g¡}|dur”| g| | ddg¡} | | |g¡}|dur”qž|rJ|}qJt  |j ¡|dur¶|}|durÂdS|  ¡} | || d¡pÞdg} | d} | rt j  | ¡} t|| gdd |d <|duraÙ ********************************************************************* 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?rQr€rjÚ _lib_atlasÚ _lib_lapackr“r”rr(r'r{r4r<rmrBrJÚtextwrapÚdedentr\r]rYrˆr^rŒr=ÚexistsÚstatÚget_atlas_version)r5rr(rLrÕrÖrzrœZatlas_1r8Z lib_dirs2r ÚhÚmessageZ lapack_dirZ lapack_nameZ lapack_libr–rsr—ÚfnÚszÚ atlas_versionÚatlas_extra_inforrrrUŸsŒ    ÿ           ø zatlas_info.calc_info)r r r r1rlrjrYrˆrÝrÞrr^rxrUrrrrr¾Šsr¾c@seZdZddgZdd„ZdS)rÀrÏrÐc Csâ| ¡}i}| dd¡}| ||j|j¡}| ||g¡}|durFdS| ¡}| ||d¡pbdg}|d}|rŠtj   |¡}t ||gdd|d<dg|d <t fi|¤Ž\}} t |fi| ¤Žt |fi|¤Ž|j fi|¤ŽdS) NrÕr=r×rr©rŠrØrÀr«)r?rQr€rjrÝr“r{r”r4r<rmrBrãrJ© r5rr(rLrÕrzr rärèrérrrrUús(   zatlas_blas_info.calc_infoN©r r r rjrUrrrrrÀ÷srÀc@seZdZddgZddgZdS)r¿ÚPTATLASrÎÚ ptf77blasÚptcblasN©r r r rlrjrrrrr¿sr¿c@seZdZddgZddgZdS)rÁrìrÎrírîNrïrrrrrÁsrÁc@seZdZdgejZdS)rÂr~N)r r r r¾rjrrrrrÂsrÂc@seZdZdgejZdS)rÃr~N)r r r r¿rjrrrrrÃ"srÃc@seZdZdgZeZeZdS)rÄÚsatlasN)r r r rjrÝrÞrrrrrÄ&srÄc@seZdZdgZdd„ZdS)rÆrðc CsÜ| ¡}i}| dd¡}| ||j¡}| ||g¡}|dur@dS| ¡}| ||d¡p\dg}|d}|r„tj  |¡}t ||gdd|d<dg|d <t fi|¤Ž\}} t |fi| ¤Žt |fi|¤Ž|j fi|¤ŽdS) NZ atlas_libr=r×rr©rŠrØrÀr«) r?rQr€rjr“r{r”r4r<rmrBrãrJrêrrrrU/s(   zatlas_3_10_blas_info.calc_infoNrërrrrrÆ,srÆc@s"eZdZddgZdgZeZeZdS)rÅrìrÎÚtatlasN)r r r rlrjrÝrÞrrrrrÅIsrÅc@seZdZddgZdgZdS)rÇrìrÎrñNrïrrrrrÇPsrÇc@s eZdZdS)rÈNrÄrrrrrÈUsrÈc@s eZdZdS)rÉNrÄrrrrrÉYsrÉc@s&eZdZdZdZdgZeZdd„ZdS)rçrœZLAPACKcCsX| ¡}| dd¡}| ||j¡}| ||g¡}|dur.r³r´rrrrxws zlapack_src_info.get_pathscs | ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆs.cSsg|] }d|‘qS)zd%s.frròrrrr9Ór:cSsg|] }d|‘qS)zc%s.frròrrrr9Ôr:cSsg|] }d|‘qS)zz%s.frròrrrr9Õr:cSsg|] }d|‘qS)z%s.frròrrrr9Ör:csg|]}tj ˆ|¡‘qSrr;rò©Úsrc_dirrrr9×r:rKÚINSTALLcsg|]}tj ˆ|d¡‘qS)zlamch.fr;©r7r))Úsrc_dir2rrr9Úr:Zsdczcsg|]}tj ˆ|d¡‘qS)zlarfp.fr;rörórrr9Ür:cs"g|]}tj ˆd|d¡‘qS)Úilazlr.fr;rörórrr9Ýr:cs"g|]}tj ˆd|d¡‘qS)røzlc.fr;rörórrr9Þr:cSsg|]}tj |¡r|‘qSr©r4r<r]ròrrrr9âr:rÜ©rYrØ©r|r4r<r]r=r[rJ)r5r#r8ZallauxZlauxZlasrcZsd_lasrcZcz_lasrcZsclauxZdzlauxZslasrcZdlasrcZclasrcZzlasrcZoclasrcZozlasrcrYr(r)rôr÷rrU~sN     ÿþýü zlapack_src_info.calc_infoN) r r r r1rlrr^rxrUrrrrrèos 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}|tvr8t|Sttƒƒ}d}i}zn|jt||d\}}|r¶t d|tj ¡r¶|jt|dg|d\}}|s¶t j t   d¡ddt|d d gd Wn–tyN|D]*}t d |¡} | rê|  d ¡}|durÌqøqÌ|durtj dd¡}|r.t|dt|ƒfgdnt|dgd|pDd|fYS0|srt d|¡} | rr|  d ¡}|dur®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. ***************************************************** rVrWÚf90)ZATLAS_REQUIRES_GFORTRANN)rØr«z#ATLAS_(?P\d+[.]\d+[.]\d+)_ÚversionZ ATLAS_VERSIONZ ATLAS_INFOrª)Ú NO_ATLAS_INFOrhz?.?.?z*ATLAS version (?P\d+[.]\d+[.]\d+)zundefined symbol: ATL_buildinfoz3.2.1_pre3.3.6z Status: %dz Output: %s)rþéþÿÿÿ)rmÚtupleÚ_cached_atlas_versionÚ cmd_configrZ get_outputÚatlas_version_c_textÚreÚsearchÚMr\r]rßràrBÚ ExceptionÚgroupr4rlr"rr() rr=rr<rŠrèr(r!ÚorºÚresultrrrrãòsn   ÿ þ  ÷ ÿ    ÿ      ÿ rãc@s„eZdZeZgd¢ZdZdd„Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)rï)rwr„r…r†rƒrŽrzrœZNPY_LAPACK_ORDERcCs$tdƒ}|r |jfi|¤ŽdSdS)NryTF©rrJ©r5r(rrrÚ_calc_info_armplCs z lapack_opt_info._calc_info_armplcCs$tdƒ}|r |jfi|¤ŽdSdS)NrŠTFr r rrrÚ_calc_info_mklJs zlapack_opt_info._calc_info_mklcCs$tdƒ}|r |jfi|¤ŽdSdS)NrŒTFr r rrrÚ_calc_info_ssl2Qs zlapack_opt_info._calc_info_ssl2cCsDtdƒ}|r |jfi|¤ŽdStdƒ}|r@|jfi|¤ŽdSdS)Nr‡TrˆFr r rrrÚ_calc_info_openblasXsz#lapack_opt_info._calc_info_openblascCs$tdƒ}|r |jfi|¤ŽdSdS)NrƒTFr r rrrÚ_calc_info_flamecs z lapack_opt_info._calc_info_flamecCs„tdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|r€| dg¡}d|vsLd|vrl| ¡}|s\dSt|fi|¤Ž|jfi|¤Žd SdS) Nr€rr{rzr«rÙrÚFT)rrmÚ_get_info_lapackrBrJ)r5r(rtrçrrrÚ_calc_info_atlasjs& ÿz lapack_opt_info._calc_info_atlascCs$tdƒ}|r |jfi|¤ŽdSdS©NrŽTFr r rrrÚ_calc_info_accelerateƒs z%lapack_opt_info._calc_info_acceleratecCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nr¥rrkrWržÚ fblas_srcrÂ)rr\r]rrrrB©r5r(Zinfo_srcrrrÚ_get_info_blasŠszlapack_opt_info._get_info_blascCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)NrœrrkrWrZ flapack_srcrÂ)rr\r]rrrrBrrrrr–sz lapack_opt_info._get_info_lapackcCsJ| ¡}|rF| ¡}t|fi|¤Žt|dgd|jfi|¤ŽdSdS)N©rþrjrªTF)rrrBrJ)r5r(Z info_blasrrrÚ_calc_info_lapack¡sz!lapack_opt_info._calc_info_lapackcCsJi}d|d<g|d<g|d<g|d<tjd ¡|d<|jfi|¤ŽdS) NrÜrØr=r r«ÚNPY_LAPACK_LIBSr&T)r4rlr[rJr rrrÚ_calc_info_from_envvar«sz&lapack_opt_info._calc_info_from_envvarcCst|d |¡ƒƒS©Nz _calc_info_{}©rnr ©r5rrrrÚ _calc_infoµszlapack_opt_info._calc_infocCst|j|jƒ\}}t|ƒdkr,td |¡ƒ‚dtjvrB| ¡dS|D]}|  |¡rFdSqFd|vrŒt j t j ppdddt j tj p„ddddS)NrzElapack_opt_info user defined LAPACK order has unacceptable values: {}rrœrrVrW)rvÚ lapack_orderÚorder_env_var_namerbr$r r4rlrr r\r]rrr)r5r!rurœrrrrU¸s þ  zlapack_opt_info.calc_infoN)r r r rr^r!r"r rrrrrrrrrrr rUrrrrrï;s      rïc@seZdZdZdZdd„ZdS)Ú_ilp64_opt_info_mixinNcCsTt| dg¡ƒ}| dd¡}| dd¡}|jd|fvr:dS|jd|fvrLdSt|ƒS)Nr«ÚBLAS_SYMBOL_PREFIXrÚBLAS_SYMBOL_SUFFIXF)ÚdictrmÚ symbol_prefixÚ symbol_suffixÚbool)r5r(r¤r—ÚsuffixrrrÚ _check_infoÔs  z!_ilp64_opt_info_mixin._check_info)r r r r(r'r+rrrrr#Ðsr#c@s$eZdZeZgd¢ZdZdd„ZdS)rð©rrrŽZNPY_LAPACK_ILP64_ORDERcCsFtd|ƒt|dƒ}| |¡r6|jfi|¤ŽdStd|ƒdS)Nz)lapack_ilp64_opt_info._calc_info(name=%s)Z_lapackTz%s_lapack does not existF)Úprintrr+rJ©r5rr(rrrr çs    z lapack_ilp64_opt_info._calc_infoN)r r r rr^r!r"r rrrrrðâsrðc@seZdZdZdZdS)rñrN©r r r r'r(rrrrrñòsrñc@seZdZdZdZdS)ròrÚ64_Nr/rrrrròøsròc@steZdZeZgd¢ZdZdd„Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)ró)rwr„r…r‰r†rŽrzr›ZNPY_BLAS_ORDERcCs$tdƒ}|r |jfi|¤ŽdSdS)NrxTFr r rrrr s zblas_opt_info._calc_info_armplcCs$tdƒ}|r |jfi|¤ŽdSdS)Nr‹TFr r rrrr s zblas_opt_info._calc_info_mklcCs$tdƒ}|r |jfi|¤ŽdSdS)NrTFr r rrrrs zblas_opt_info._calc_info_ssl2cCs$tdƒ}|r |jfi|¤ŽdSdS)Nr‰TFr r rrrÚ_calc_info_bliss zblas_opt_info._calc_info_bliscCs$tdƒ}|r |jfi|¤ŽdSdS)Nr†TFr r rrrr!s z!blas_opt_info._calc_info_openblascCsHtdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|rD|jfi|¤ŽdSdS)Nr‚rr}r|TFr r rrrr(szblas_opt_info._calc_info_atlascCs$tdƒ}|r |jfi|¤ŽdSdSrr r rrrr5s z#blas_opt_info._calc_info_acceleratecCs¢tjtjp dddi}t|dgdtdƒ}|rDt|fi|¤ŽnJtjtjpPdddtdƒ}|s|tjtjppddddSt|d |fgd |jfi|¤Žd S) NrrkrWrrªr›ržFrrÂT) r\r]rrrBrrrrJ)r5r(r›ržrrrÚ_calc_info_blas<szblas_opt_info._calc_info_blascCszi}d|d<g|d<g|d<g|d<tjd ¡|d<dtjvrf|d d ¡|d tjd ¡¡|jfi|¤Žd S) NrÜrØr=r r«Ú NPY_BLAS_LIBSr&ZNPY_CBLAS_LIBSrÀT)r4rlr[r^r%rJr rrrrRs  ÿz$blas_opt_info._calc_info_from_envvarcCst|d |¡ƒƒSrrrrrrr `szblas_opt_info._calc_infocCst|j|jƒ\}}t|ƒdkr,td |¡ƒ‚dtjvrB| ¡dS|D]}|  |¡rFdSqFd|vrŒt j t j ppdddt j tj p„ddddS)NrzAblas_opt_info user defined BLAS order has unacceptable values: {}r3r›rrVrW)rvÚ blas_orderr"rbr$r r4rlrr r\r]rrr)r5r4rur›rrrrUcs   zblas_opt_info.calc_infoN)r r r rr^r4r"r rrr1rrrr2rr rUrrrrróýs róc@s$eZdZeZgd¢ZdZdd„ZdS)rôr,ZNPY_BLAS_ILP64_ORDERcCs*t|ƒ}| |¡r&|jfi|¤ŽdSdS)NTF)rr+rJr.rrrr ~s  zblas_ilp64_opt_info._calc_infoN)r r r rr^r4r"r rrrrrôysrôc@seZdZdZdZdS)rõrNr/rrrrrõ†srõc@seZdZdZdZdS)rörr0Nr/rrrrrö‹sröc@seZdZdZdZgZeZdS)Ú cblas_inforÐZCBLASN)r r r r1rlrjrr^rrrrr5sr5c@s.eZdZdZdZdgZeZdd„Zdd„Z dS)rær›ZBLASc CsÖ| ¡}| dd¡}| ||j¡}| ||g¡}|dur 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.crNN)Ú output_dirr r=rÐr›úa.outrr&©r=rZextra_postargs)rÚtempfileÚmkdtemprßràr4r<r=r¸ÚwriteÚcompiler{Ú distutilsÚ ccompilerÚ CompileErrorÚ LinkErrorÚshutilÚrmtreeÚlink_executablerm) r5r(rŠÚtmpdirr!rQrcÚobjr-rrrr:¼s>  ( ÿ  ñÿ ý  ü zblas_info.get_cblas_libsN) r r r r1rlrjrr^rUr:rrrrræ˜s ræc@sZeZdZdZdZdgZgZeZe dd„ƒZ e dd„ƒZ dd„Z d d „Z d d „Zd d„ZdS)rÍr†ÚOPENBLAScCs,z|j |jd¡WSty&YdS0dS)Nr'r©r.rmr1rr;rrrr' s zopenblas_info.symbol_prefixcCs,z|j |jd¡WSty&YdS0dS)Nr(rrMr;rrrr( s zopenblas_info.symbol_suffixc Cstƒ}| ¡}| dd¡}| ||j¡}| ||g¡}|jdkr~|dur~ddlm}||d}|rŽ|jdkrŽ|  ||¡}d}n|rŽd }d |d <|duršdS|  ¡} t |fi| ¤Ž|sÄ|  |¡sÄdSd g|d <|j rì|d d|j fg7<|jr |d d|jfg7<|S)NÚ openblas_libsr=rr)Ú new_fcompiler)Z c_compilerZgnu95TFrŠrØrÀr«r$r%)rr?rQr€rjrAr‡Znumpy.distutils.fcompilerrOÚcheck_msvc_gfortran_libsrGrBÚ check_symbolsr'r() r5rŠrrLrNr(rOrcZskip_symbol_checkrIrrrr  s4     zopenblas_info._calc_infocCs$| ¡}|dur |jfi|¤ŽdSr)r rJr rrrrU< szopenblas_info.calc_infoc Csg}|D]@}|D]0}tj ||d¡}tj |¡r| |¡qqdSq|jj}tj t ¡d|¡}tj |¡s|t  |¡|g|gddœ} tj ||d¡} tj ||d¡} t | dƒ } |   d |¡¡Wdƒn1sà0Yt | dƒ} Wdƒn1s 0Y| S) Nr‚ÚbuildrÜ)rr=rØz .fobjectsz .cobjectsrNr) r4r<r=r]r^r'r ÚgetcwdrSÚmakedirsr¸rA) r5rr=Z library_pathsZlibraryZ library_dirÚfullpathrorJr(Z fake_lib_fileZfake_clib_filercrrrrPA s.    þ .  z&openblas_info.check_msvc_gfortran_libsc sBd}tƒ}t ¡}d ‡fdd„ˆjDƒ¡}d ‡fdd„ˆjDƒ¡}t d¡t||d}tj  |d¡}tj  |d ¡} z |d } Wnt yšg} Yn0z”t |d ƒ} |   |¡Wdƒn1sÈ0Y|j |g|d } z$|j| | |d |d| dd}Wntjjy"d}Yn0Wt |¡n t |¡0|S)NFrc3s |]}dˆj|ˆjfVqdS)zvoid %s%s%s();N©r'r(©r7Z symbol_namer;rrr?g s ýþz.openblas_info.check_symbols..c3s |]}dˆj|ˆjfVqdS)z %s%s%s();NrVrWr;rrr?k s ýþz %(prototypes)s int main(int argc, const char *argv[]) { %(calls)s return 0; })Ú prototypesÚcallsr;r=r&rN©r<r=rr>T)rr?r@r=Ú_require_symbolsrßràr&r4r<rr¸rArBrIrCrDrFrGrH) r5r(rerŠrJrXrYr!rQr(Ú extra_argsrcrKrr;rrQa s@ýý ú    (þ zopenblas_info.check_symbolsN)r r r r1rlrjr[rr^Úpropertyr'r(r rUrPrQrrrrrÍþs  ) rÍc@s$eZdZdZdZdgZdgZeZdS)rÎr†rLÚzungqr_N) r r r r1rlrjr[rr^rrrrrÎŒ s rÎc@seZdZddgZdS)rÏr†rœN)r r r rjrrrrrÏ“ srÏcs6eZdZdZdZdgZddgZeZ‡fdd„Z ‡Z S)rÙrZOPENBLAS_ILP64Z openblas64Údgemm_Ú cblas_dgemmcs(tƒ ¡}|dur$|ddg7<|S)Nr«©ZHAVE_BLAS_ILP64N©Úsuperr r ©r'rrr  s zopenblas_ilp64_info._calc_info) r r r r1rlrjr[rr^r Ú __classcell__rrrdrrÙ– s rÙcs$eZdZgd¢Z‡fdd„Z‡ZS)rÚ)r_r`r^ZLAPACKE_zungqrcs$tƒ ¡}|r |ddg7<|S)Nr«)Z HAVE_LAPACKENrbr rdrrr ¦ s z%openblas_ilp64_lapack_info._calc_info)r r r r[r rerrrdrrÚ£ srÚc@s"eZdZdZdZdgZdZdZdS)r×rZ OPENBLAS64_r0rN)r r r r1rlrjr(r'rrrrr׬ s r×c@s eZdZdS)rØNrÄrrrrrØ´ srØc@s&eZdZdZdZdgZeZdd„ZdS)rÐr‰ZBLIScCsj| ¡}| dd¡}| ||j¡}| ||g¡}|durTF)rr?r@rßràr4r<r=rmr¸rArBrIrGrHrCrDrF) r5r(rŠrJr!rQr(r\rcrKrrrÚcheck_embedded_lapackÜ s.   (þ ü þz flame_info.check_embedded_lapackcCs| ¡}| d|j¡}| ||g¡}|dur0dS| ¡}t|fi|¤Ž| |¡rd|jfi|¤Žnžtdƒ}|stdS|D]l}t ||t ƒr¤|  |g¡||||<qxt ||t ƒrÌ|  |d¡||||<qx|  |d¡||||<qx| |¡r|jfi|¤ŽdS)Nr=r¥rr) r?r€rjr“rGrBrgrJrr3rormr)r5rZ flame_libsr(rIrær<rrrrUú s(  zflame_info.calc_infoN) r r r rr1rjrr^rgrUrrrrrÊÎ s  rÊc@s$eZdZdZddgZeZdd„ZdS)rÕrŽÚveclibcCsXtj d¡}|r|g}n| d|j¡}dd„|Dƒ}tjdkrTt dd¡sTg}g}tƒdd…dksˆd tƒvsˆd tƒvsˆdt ¡vrŽd }nd }tj   d ¡rÒd|vrÒ|r¶|  dg¡|  dg¡|  ddg¡nBtj   d¡rd|vr|rú|  dg¡|  dg¡|  ddg¡|rTgd¢}t dd¡rDt dƒ|ddg7}|j |||ddS)NZ ACCELERATEr=cSsg|]}| ¡ ¡‘qSr)r}rf)r7r0rrrr9* r:z-accelerate_info.calc_info..r†Ú_PYTHON_HOST_PLATFORMéüÿÿÿÚi386ÚintelÚx86_64rjrz0/System/Library/Frameworks/Accelerate.framework/rŽz-msse3z5-I/System/Library/Frameworks/vecLib.framework/Headersz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/rhz -Wl,vecLib))rþrkrÀ)ZACCELERATE_NEW_LAPACKNZNPY_USE_BLAS_ILP64zSetting HAVE_BLAS_ILP64ra)ZACCELERATE_LAPACK_ILP64N)r%r&r«)r4rlrmr€rjrYrˆÚgetenvr r<rár%r-rJ)r5r=rZ link_argsrlr¤rrrrU# s`   ÿÿ þ þ ÿþ ÿþþzaccelerate_info.calc_infoN)r r r r1rjrr^rUrrrrrÕ srÕcseZdZ‡fdd„Z‡ZS)rÖcs tƒ ¡Srrbr;rdrrr [ sz!accelerate_lapack_info._calc_info)r r r r rerrrdrrÖZ srÖc@s(eZdZdZdZeZdd„Zdd„ZdS)réržZBLAS_SRCcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nr›cSsg|]}tj |¡r|‘qSrrRr6rrrr9k r:z+blas_src_info.get_paths..r³r´rrrrxf s zblas_src_info.get_pathscs’| ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆs.cSsg|]}tj |¡r|‘qSrrùròrrrr9 r:rÜrúrû)r5r#r8Zblas1Zblas2Zblas3rYr(rrórrUm s"  ÿ zblas_src_info.calc_infoN) r r r r1rlrr^rxrUrrrrré^ s réc@s*eZdZdZeZdgZdd„Zdd„ZdS)rÛr‘ÚX11cCstj|ttddS)Nr½)rr7Údefault_x11_lib_dirsÚdefault_x11_include_dirsr;rrrr7š sþzx11_info.__init__cCsžtjdvrdS| ¡}| ¡}| dd¡}| ||j¡}| ||g¡}|durRdSd}|D]}| |d¡rZ|}qtqZ|durŠt ||gd|j fi|¤ŽdS)N)r+Úx11_libsr=zX11/X.hr©) rYrˆr?r{rQr€rjrAr”rBrJ)r5rr rLrrr(Úinc_dirr8rrrrUŸ s"   zx11_info.calc_infoN) r r r r1rr^rjr7rUrrrrrÛ• s rÛc@s(eZdZdZdZeZdd„Zdd„ZdS)Ú _numpy_infor¡cCsg}zvt|jƒ}g}|j tj¡D]}|dkr2q>| |¡q"z| t|dƒƒ¡WntyfYn0| t   d¡¡Wnt yŒYn0t   d¡}| |¡t   d¡}||vr¾| |¡t D],}tj  |tj  |¡¡}||vrÂ| |¡qÂtj|g|ddS)Nr0Z get_includer/Ú platincluder½)Ú __import__Ú modulenamerWr[r4r5r^rnÚAttributeErrorÚ sysconfigÚget_pathÚ ImportErrorrCr<r=rorr7)r5r Úmoduler—rZ py_incl_dirÚ py_pincl_dirr8rrrr7¸ s8         þz_numpy_info.__init__c Csäzt|jƒ}Wnty"YdS0i}g}dD]B}t||dƒ}|durJq0|j ¡dt|ƒf|j ¡dfg}qtq0t||d| ¡}d}|D]$}| |t j   |jd¡¡r|}q¶q|durÌt||gd|rà|j fi|¤ŽdS)N)Ú __version__rýZ_VERSIONrªz arrayobject.hr©) rvrwr{rnÚupperr"rBr{r”r4r<r=rJ) r5r|r(r¤rgZvrsr rsr8rrrrUÙ s@   ÿ þ  ÿÿz_numpy_info.calc_infoN) r r r r1rwrr^r7rUrrrrrt³ s !rtc@seZdZdZdZdS)rír£N©r r r r1rwrrrrríø sríc@seZdZdZdZdS)rìr¡Nr€rrrrrìý srìc@seZdZdZdZdS)rêrŸNr€rrrrrê srêc@seZdZdZdd„ZdS)rîr¤c Cspd}t d¡rt d¡df}|ddurd}zddl}d}WnÈty}z®t|ƒ}zddl}d}Wnˆtyð}zpt|ƒ}zddl}d}WnJtyÚ}z2t|ƒ}t |¡t |¡t |¡WYd}~n d}~00WYd}~n d}~00WYd}~n d}~00|d  ¡  ¡|df}|dd vrFt d |d|dfƒ‚|dtj d<|j fit|dƒ¤ŽdS) N)NNZNUMERIXzenvironment varr)rŸÚ defaulted)r¢r)r£rrj)r¢r£rŸzonumerix selector must be either 'Numeric' or 'numarray' or 'numpy' but the value obtained from the %s was '%s'.)r4rnrŸr{r,r¡r£rr(r}rfr$rlrJr) r5ÚwhichrŸrsZmsg1r¡Zmsg2r£Zmsg3rrrrU s<   Lþznumerix_info.calc_infoN)r r r r1rUrrrrrî srîc@seZdZdd„ZdS)rëcCs^zddlm}Wnty$YdS0tj tj |j¡d¡}|jtj |d¡g|gddS)NrrQzfortranobject.c©rYr ) Z numpy.f2pyr r{r4r<r=rmrWrJ)r5r Zf2py_dirrrrrU- s ÿzf2py_info.calc_infoNržrrrrrë, srëc@s$eZdZdZdZdd„Zdd„ZdS)r÷r¦ZBOOSTcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzboost*cSsg|]}tj |¡r|‘qSrrRr6rrrr9A r:z/boost_python_info.get_paths..r³r´rrrrx< s zboost_python_info.get_pathsc CsÜ| ¡}d}|D](}tj tj |dddd¡¡r|}q:q|sBdSt d¡g}t d¡}||vrj| |¡tj |ddd¡}ttj |d¡ƒ}|ttj |d d¡ƒ7}d |g||d œfg|gd œ}|rØ|j fi|¤ŽdS) Nrr-ÚpythonrQz module.cppr/ruú*.cppr·Zboost_python_src)r rY©r=r ) r|r4r<r]r=ryrzr^rrJ) r5r#rôr8Z py_incl_dirsr}Zsrcs_dirZbpl_srcsr(rrrrUC s6ÿ   ÿÿüzboost_python_info.calc_infoN©r r r r1rlrxrUrrrrr÷8 sr÷c@s$eZdZdZdZdd„Zdd„ZdS)rør§ZAGG2cCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzagg2*cSsg|]}tj |¡r|‘qSrrRr6rrrr9h r:z'agg2_info.get_paths..r³r´rrrrxc 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Ò|jfi|¤ŽdS)NrrQzagg_affine_matrix.cppr+rˆzagg_win32_bmp.cppr…rozagg_platform_support.cppZagg2_srcr/rƒr†) r|r4r<r]r=rYrˆrrJ)r5r#rôr8Z agg2_srcsr(rrrrUj s6 ÿþÿÿúzagg2_info.calc_infoNr‡rrrrrø_ srøc@sDeZdZdZdZdZdZdZdZdZ dZ dd„Z d d „Z d d „Z dS) Ú_pkg_config_infoNZ PKG_CONFIGz pkg-configrz --modversionz--cflagscCs|jtjvrtj|jS|jSr)Úconfig_env_varr4rlÚdefault_config_exer;rrrÚget_config_exe“ s  z_pkg_config_info.get_config_exec CsN|d|jd|}zt |¡}Wnttjfy<Yn0t|ƒ}|SdS)Nú )Úappend_config_exeÚ subprocessÚ check_outputÚOSErrorÚCalledProcessErrorr )r5Ú 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¡} | 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 | vrÔ| dd…  d ¡\} }| | |f¡n| | dd…df¡n | | ¡qh|r t||d|rt||d|r0t||d|rBt||d|rTt||d|rft||d|r||jfi|¤ŽdS)Nz-File not found: %s. Cannot determine %s info.r.rhz_%sÚ_z --releasez--libsrVz-lz-Lú-Iz-Dú=rªrÂ)rr©)r&)r%)r r‹rr]r1r•Ú version_flagr^r'r r[rr"Úversion_macro_namerÚrelease_macro_nameÚ cflags_flagrBrJ)r5r’r(r¤r=rr r&r%rýÚreleaseÚoptsrLÚnrgrrrrU¢ s„ ÿÿ  ÿÿ   ÿÿ           z_pkg_config_info.calc_info)r r r r1r‰rŠrršr›r™rœr‹r•rUrrrrrˆ‰ s rˆc@s,eZdZdZdZdZdZdZdZdZ dZ d S) rùr¨Z WX_CONFIGz wx-configrZ WX_VERSIONZ WX_RELEASEz --versionz --cxxflagsN) r r r r1r‰rŠrršr›r™rœrrrrrùâ srùc@seZdZdZdZdZdS)rúr©rªZGDK_PIXBUF_XLIB_VERSIONN©r r r r1rršrrrrrúí srúc@seZdZdZdZdZdS)rûr«r¬ZGDK_PIXBUF_VERSIONNr rrrrrûó srûc@seZdZdZdZdZdS)rþr°r±ZGDK_X11_VERSIONNr rrrrrþù srþc@seZdZdZdZdZdS)rýr®r¯Ú GDK_VERSIONNr rrrrrýÿ srýc@seZdZdZdZdZdS)rür­r¡Nr rrrrrü srüc@seZdZdZdZdZdS)rÿr²r³ZGTK_X11_VERSIONNr rrrrrÿ srÿc@seZdZdZdZdZdS)rr´rµZ GTK_VERSIONNr rrrrr src@seZdZdZdZdZdS)rr¶Z XFT_VERSIONNr rrrrr src@seZdZdZdZdZdS)rr·ZFREETYPE2_VERSIONNr rrrrr src@s"eZdZdZdZdgZdd„ZdS)rr¹ZAMDc Cs¬| ¡}| dd¡}| ||j¡}| ||g¡}|durs r:zcombine_paths..rrVNz (paths: %s)rk) r r^rbrÚmaprr%r4r<r=r”rrq)rÚkwsÚrr~r Za0Za1rrrr”d s(     "r”rjrVrk)rŠúc++rÜrürŠrªrÜrü)rrjrVrkc sŽg}| ¡D]Z\‰}ˆdkr(| |¡q ˆˆvr^ˆdvrN‡‡fdd„|Dƒqfˆˆ |¡q |ˆˆ<q |rŠttdd„|Dƒƒ}|ˆd<dS)NrØ)rr r%r&r!r«cs&g|]}|ˆˆvrˆˆ |¡‘qSr)r^)r7Zvv©r8rfrrr9Œ r:zdict_append..cSsg|]}t |d¡‘qS)r)Ú language_maprm)r7rtrrrr9’ r:)rar^r%Úinv_language_mapÚmax)r8r¨Ú languagesrgrtrr«rrB‚ s  rBrcCsHddl}| 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Úhelprj)r)ÚoptparseÚ OptionParserÚ add_optionÚ parse_args)rZrµÚparserržrrrrÚ parseCmdLine— s  þrºc Csüddl}|durtj}t|ƒ\}}|jr6t tj¡n t tj¡g}|D]&}|dd…dkrf|d}|  |¡qJ| }t ƒ  ¡}|  ¡D]V\}} |  | ¡sžqŠt| tƒrŠ| tur²qŠ|sÌ||vrÀqŠ|| |¡=| ƒ} d| _|  ¡qŠ|røt dd |¡¡dS)NréûÿÿÿÚ_inforVzInfo classes not defined: %srk)ÚinspectrYrZrºr±rÚ set_thresholdÚDEBUGr`r^ÚglobalsrqraÚisclassÚ issubclassrrOÚ verbosityrr(r=) rZr½ržrZ show_onlyrŸÚshow_allZ_gdict_rrŠZconfrrrrÄ¢ s8       rÄÚ__main__)r)r)N)ÉrrYr4rrqr\rŽrßrÚ functoolsrÚ configparserrrr-Údistutils.errorsrÚdistutils.distrryZnumpy.distutilsrÚdistutils.utilr Znumpy.distutils.exec_commandr r Znumpy.distutils.misc_utilr r rZnumpy.distutils.command.configrrrrrÚdistutils.ccompilerrCr?rGÚ__all__rˆZ_bitsÚ architectureZ platform_bitsrr"r*r<r=Úget_config_varrAr*rCr+rprqrDrBrEr‚rFrmZ vcpkg_dirÚ specifierZvcpkg_installedZ vcpkg_rootrJZ conda_dirráZglobbed_x11_dirr[Z x11_so_dirr%r¸ÚdevnullrSÚPopenÚPIPEr)rr,Ú communicateÚdecoder}ÚtripletÚ returncoder—Úinsertr^r‰rervrr rrrrrrrrrrrrrrrrrÜ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Érçrèrrrãrïr#rðrñròrórôrõrör5rærÍrÎrÏrÙrÚr×rØrÐrÊrÕrÖrérÛrtrírìrêrîrër÷rørˆrùrúrûrþrýrürÿrrrrrr”r¬r­rBrºrÄr rrrrÚs¸+             ' ÿÿþÿ  þ   ÿÿÿÿ  4#T _z/        $E0mw I| f  P<7E% '*Y "   !