idyhdZddlZddlZddlZddlZddlZddlmZddlm Z m Z ddl m Z ddl mZmZddlmZddlmZmZmZmZmZdd lmZdd lmZd ZGd d ejZejd ej j!Z"ejdej j!Z#ejdej j!Z$ejdej j%Z&ejdej j%Z'dZ(dZ)dZ*ejdej j!Z+ejdej j!Z,dZ-dS)z Build swig and f2py sources. N) build_ext) newer_groupnewer) get_platform)DistutilsErrorDistutilsSetupError)log)fortran_ext_match appendpath is_string is_sequenceget_cmd) process_filec tjd}t|d5}t|d5}|D]}||}|rY||d|dz||dr|| dddn #1swxYwYddddS#1swxYwYdS)zPSubstitute any occurrence of @foo@ by d['foo'] from source file into target.z@([a-zA-Z_]+)@rwz@%s@N)recompileopensearchwritereplacegroup)targetsourcedvarfsftlms V/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/distutils/command/build_src.py subst_varsr$sc *% & &C fc   b &#   "  JJqMM HHQYYv ':AaggajjMJJKKKKHHQKKKK                                   s5C&B C C&C C&C C&&C*-C*ceZdZdZgdZgdZgZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZgfdZdZdZdZdZdZdS) build_srcz1build sources from SWIG, F2PY files or a function) )z build-src=rzdirectory to "build" sources to)z f2py-opts=Nz!list of f2py command line options)zswig=Nzpath to the SWIG executable)z swig-opts=Nz!list of SWIG command line options)zswig-cppNzAmake SWIG create C++ files (default is autodetected from sources))z f2pyflags=Nz3additional flags to f2py (use --f2py-opts= instead))z swigflags=Nz3additional flags to swig (use --swig-opts= instead))forcefz2forcibly build everything (ignore file timestamps))inplaceiziignore build-lib and put compiled extensions into the source directory alongside your pure Python modules) verbose-cfgNzJchange logging level from WARN to INFO which will show all compiler output)r'r)r+cd|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_dSN) extensionspackage py_modulespy_modules_dictr& build_lib build_baser'r) package_dir f2pyflags f2py_opts swigflags swig_optsswig_cppswig verbose_cfgselfs r#initialize_optionszbuild_src.initialize_options?s #    c|dddd|j|jj|_|jj|_|jjpg|_|jjpg|_|jjpg|_|j Ydj tgtj ddR}tj|jd|z|_ i|_|jr/|jrt+jdn |j|_d|_|jg|_nt/j|j|_|jr/|jrt+jd n |j|_d|_|jg|_nt/j|j|_|d }|j |j|_|j |j|_d D]}d |d dz}t?||d}|rTt?||rt+jd|zVt+j d|d|dtC|||dS)Nbuild)r3r3)r2r2)r'r'z .{}-{}.{}srcz0ignoring --f2pyflags as --f2py-opts already usedz0ignoring --swigflags as --swig-opts already usedr)r:swig_optz--_-z-both build_src and build_ext define %s optionzusing "=z" option from build_ext command)"set_undefined_optionsr/ distribution ext_package ext_modulesr. librariesr0 data_filesr&formatrsys version_infoospathjoinr3r1r5r6r warnshlexsplitr7r8get_finalized_commandr)r9rgetattrinfosetattr)r=plat_specifierrcovs r#finalize_optionszbuild_src.finalize_optionsRsx ""7#?#=#5 7 7 7 < ,8DL+7*4:+6<"+6<" > !/[/ VAQRTSTRTAUVVVNW\\$/5;OPPDN " > "~ 0KLLLL!%!DN > !DNN"[88DN > "~ 0KLLLL!%!DN > !DNN"[88DN..{;; < $,DL = %.DM% ( (AQYYsC(((A 1d++A (4##(HLPQRSSSSHHaaaQRQRQRSTTTD!Q''' ( (r?cvtjd|js |jsdS|dS)Nr&)r rYr.rL build_sourcesr<s r#runz build_src.runsB  4>  F r?cr|jr|dj|_||jD] }|j| |jr9||j|jD]}||| | dS)Nbuild_py) r)rWget_package_dirbuild_py_modules_sourcesrLbuild_library_sourcesr.check_extensions_listbuild_extension_sourcesbuild_data_files_sourcesbuild_npy_pkg_config)r= libname_infoexts r#razbuild_src.build_sourcess < L// ;;K   %%''' N 6 6L &D & 5 5 5 ? 2  & &t 7 7 7 2 2,,S1111 %%''' !!#####r?c|jsdStjdddlm}g}|jD]}t |t r||.t |trT|\}}|j rF| d | tj}n%tj |j|}d|D}d|D}|D]}|jjdkr ||} n |} | rt | t&r|| Ut | t r|| t+t-| |||f} ||| ft+t-|||jdd<dS)Nzbuilding data_files sourcesr)get_data_files.c2g|]}t|d|S__call__hasattr.0r(s r# z6build_src.build_data_files_sources..s'DDDqWQ -C-CDDDDr?c2g|]}t|d|Srrrtrvs r#rxz6build_src.build_data_files_sources..s'HHHqJ1G1GHHHHr?r)rMr rYnumpy.distutils.misc_utilro isinstancestrappendtupler)rerSrVrQseprRr&__code__ co_argcountlistextend TypeErrorrepr) r=ronew_data_filesdatarfiles build_dirfuncsr(s filenamess r#rjz"build_src.build_data_files_sourcess  F .///<<<<<<O , ,D$$$ ,%%d++++D%(( ,5<@ $ 4 4SXXaggbfoo5N5N O OII " T^Q ? ?IDDEDDDHHEHHH 5 5Az-q00AiLLACC}%a..5!LLOOOO'3//5!LLOOOO"+DGG"4"44 %+NAu:66 %%q)n5555T ++++r?c|\}}}tj|}|D] \}}|||< |jdkr!tj||} n&tj|j||} tjtj|d} tj| | } tj | stj | t| ||tj||} | | fS)Nrr) rQrRdirnameitemsr)rSr&basenamesplitextexistsmakedirsr$) r=rYgdtemplate install_dir subst_dict template_dirkr^ generated_dir generatedgenerated_pathfull_install_dirs r#_build_npy_pkg_configzbuild_src._build_npy_pkg_configs#,0)+zwx00 HHJJ  DAqJqMM <1  GLL{CCMMGLL!!MG$$RW%5%5h%?%?%BCC mY??w~~m,, ' K & & &>8Z8887<< kBB//r?cztjdtjtd}|jdks|d}|jdkrd}d}nt|dr |j}d}|r|j j D]\}}|j j |}tjtj||}d|i}|D]=} || |\} } |j j| | gf>dSdS) Nz(build_src: building npy-pkg config filesinstallrFrpTinstall_libbaseprefix)r rYcopyr finalizedr_r)rurrIinstalled_pkg_configrr4rQrRrSabspathrrMr}) r= install_cmd build_npkg top_prefixpkginfospkg_pathrrrYrrs r#rkzbuild_src.build_npy_pkg_configse ;<<<i 2 233 $))  ( ( * * * <1  JJJ ["3 4 4 $4JJ  &"/DJJLL & & U,8=bgooj&A&A8LLv&!&&D-1-G-Ga-P-P*K%077" 9%&&&&&  & & & &r?c |jsdStjdg}|jD]}t|rt |dkr|\}}}|jr||}nItj |j tjj | d}t|dr.tj ||dz}||}||||fg}||j vr g|j |<|j |xx|z cc<||||jdd<dS)Nzbuilding py_modules sourcesrprs.py)r0r rYr lenr)rerQrRrSr&rVrur1r})r=new_py_modulesrr/ module_baserrmoduless r#rfz"build_src.build_py_modules_sourcesso  F .///o . .F6"" .s6{{A~~/5,f<P $ 4 4W = =II " T^-/W\7==;M;M-N!P!PI6:..,W\\)[55HIIF#VF^^F>#[&9:$"66646D(1$W---8----%%f----+r?cVt|dg}|sdStjd|z||||f}||||f}||\}}|rtjd|j|||d<dS)Nsourceszbuilding library "%s" sources#%s - nothing done with h_files = %s)rgetr rYgenerate_sourcestemplate_sourcesfilter_h_filesr/)r=lib_name build_inforh_filess r#rgzbuild_src.build_library_sourcessz~~i4455  F 0H=>>>''(J1GHH''(J1GHH..w77  , H:\7 , , , !( 9r?ct|j}tjd|jz||j}|d}d|dd}|jr| ||_ | ||}| ||}| ||}|||}|||}||\}}||jvr g|j|<g}|D]\}t$jt$j|d} ||| |f]|j|xx|z cc<||\}} | rtjd|| ||_dS)Nzbuilding extension "%s" sourcesrprr)rrr rYnameget_ext_fullnamerVrSr)reext_target_dirrr swig_sources f2py_sources pyrex_sourcesfilter_py_filesr1rQrRrrr}r) r=rmrfullnamemodpathr/py_filesrr(modulers r#riz!build_src.build_extension_sources0ss{## 2ch?@@@((22..%%((71R4=)) < @"&"6"6w"?"?D ''55''55##GS11##GS11$$Wc22 0099 $. . .,.D  ) 1 1AW%%bg&6&6q&9&9::1=F NNGVQ/ 0 0 0 0 W%%%0%%%..w77  ' H:g ' ' '  r?cg}g}|D]<}t|r||'||=|s|S|jrt|s|j}nVt|r |d}n|j}t jj|j g| dddz}| ||j r tj}n tj}tj|} |D]o} | ||}|st|r"d|D||Btjd|d||ptj| |S)Nrrprc>g|]}tjd|dS) adding ' ' to sources.)r rY)rwrs r#rxz.build_src.generate_sources..~s+NNN!<==NNNr?rr)r r}r)r rrrQrRrSr&rVmkpathr;r INFOWARN set_thresholdrrY) r=r extension new_sources func_sourcesrrr new_level old_levelfuncs r#rzbuild_src.generate_sourcesXs   , ,F   ,""6****##F++++   < ? I 6 6 ?+II9%% & | !~ '7(, 3(<(=?I I   !III%i00  + +DT)Y//F 6"" +NNvNNNN""6****@AAA""6**** )$$$r?c0||dgS)Nr filter_filesr=rs r#rzbuild_src.filter_py_filess  5'222r?c2||gdS)N)z.hz.hppz.incrrs r#rzbuild_src.filter_h_filess  *@*@*@AAAr?cg}g}|D]S}tj|\}}||vr||>||T||fSr-)rQrRrr})r=rextsrrrbaserms r#rzbuild_src.filter_filesst  + +F'**622KT3d{{ V$$$$""6****E!!r?cg}t|r7|dd}|dd}n|j}|j}|D]}tj|\}}|dkr|jr tj|} n2t|j tj|} | | tj | tj |} |jst|g|z| rt!|r't#jd| zt'|} n&t#jd| zt)|} t+| d5} | | dddn #1swxYwYt/| rOtj| } | |vr,t#jd| z|| || |||S) Nrdepends include_dirsz.srczfrom_template:> %szconv_template:> %sr adding '%s' to include_dirs.)r rrrrQrRrr)rr r&rrSrr'r_f_pyf_ext_matchr rYprocess_f_fileprocess_c_filerr_header_ext_matchr})r=rrrrrrrrm target_dir target_fileoutstrfidrs r#rzbuild_src.template_sourcessx y ! ! 2l&&y11G$Q<++N;;LL'G$1L + +F'**622KT3f}}<S!#!6!6JJ!+DNBGOOD'',,R0 + +F'**622KT3f}}"::4;A;DFF "";////""6****r?cgS)zPyrex is not supported, but some projects monkeypatch this method. That allows compiling Cython code, see gh-6955. This method will remain here for compatibility reasons. )r=rrrrs r#rz!build_src.generate_a_pyrex_sources  r?c g}g}g}i}g}|jdd}d} |D]y} tj| \} } | dkr|jr tj| } n2t|jtj| } tj | rRt| }||krtd| d|d|tj | |dz}ntjd | z|}d } tj | |dz}tj |stjd |d |d tj| } tj | |dz}tj |st|dtjd|z|| || ||| <||>t%| r|| d|| {|s|s|S|D]}|||j|jz}|jjrD|jjD]7\}}||jvr)||dg8tjd|z|rt5|d krtd||d} || }tj|pd} | g|jz}|jst;||dr?| s=tjd| zddl}|j |d| | gzn;tjd| zn"tC|r |d}n|j}tjj |jg|dddz} tj | |dz}||||jz}|jst;||dr[| sYtjd|z|| ddl}|j |dd| gzd|gz|zntjd|ztj |stEd|dtj |j| }tj |d}tj |d}tjd|z||||j#vr1tjd |z|j#|| sddl}tj|jj$}tj |d!d}tj |d!d}tK||stK||r^|tj||&|||&||ndtj |std"|d#tj |std$|d#d%D]p}tj | ||z}tj |r,tjd|z||q||zS)&Nrprrz.pyfmismatch of extension names: provides  but expected zmodule.cz. source %s does not exist: skipping f2py'ing.r target  does not exist: Assuming z:module.c was generated with "build_src --inplace" command. missing& Yes! Using %r as up-to-date target. f2py_optionszf2py options: %szAonly one .pyf file is allowed per extension module but got more: rzf2py: %sz --build-dirz+ skipping '%s' f2py interface (up-to-date)z f2py:> %sz--lowerz-mz3 skipping f2py fortran files for '%s' (up-to-date)zf2py target file z not generatedzfortranobject.czfortranobject.hz adding '%s' to sources.rrCzf2py target_c file z not foundzf2py target_h file )z-f2pywrappers.fz-f2pywrappers2.f90)'rrVrQrRrr)rr r&isfileget_f2py_modulenamerrSr debugrTrYr}r rrr6rIrLrrrrr'r numpy.f2pyf2pyrun_mainr rr__file__r copy_file)r=rrrr f_sources f2py_targets target_dirsr skip_f2pyrrrmrrrrrrrnumpyrtarget_ctarget_hsource_csource_hname_extfilenames r#rzbuild_src.f2py_sourcess-     >'',,R0 & +& +F'**622KT3f}}<S!#!6!6JJ!+DNBGOOD>&))2.v66Dx''11"FFDDD((34555#%',,z4 ?"K"KKKIO!')***#D !I"$',,z4 ?"K"KK7>>+66 2%0KK"7888&(W__T%:%: &(gll:tJ&O&O !w~~k::U"5kkk6S"T"TT!I$/"1222"":...##F+++'2 V$"";////"3'' +  ((((""6****      A KKNNNN ->   & L$($5$? L L j9... '' ~r(J(JKKK #|4555 % +<  A%%))#/<2333"!_F&v.K55<Jh!22G  Tk';HH T$ Tv.///!!!! ##L'4j&&I%JKKKK G6RSSSS9%% ( |"$(8)-C")=)>@J',,z8j3HIIK   { + + +)"33G +k';HH +$ + 4555 J'''!!!! ##LI0=z4K%K!%x 0%11:%;<<<< O(*+++w~~k** W . !UVV VGLL<< 7<< +<==7<< +<== ,9:::8$$$ I2 2 2 H5C D D D  " ) )) 4 4 4 [     344Aw||Au.?@@Hw||Au.?@@HXx(( 3E(H,E,E 3 BGOOH55666x222x2227>>(++ [))xxx*YZZZ7>>(++ [))xxx*YZZZA + +Hw||J80CDDHw~~h'' +4ABBB  ***Y&&r?c  g}g}i}g}g}d}d|jvrd} d} |jdn|jrd} d} nd} d} d} |jdd} |D]-} t j| \}}|d kr|jr't j |}|j }n4t|j t j |}|}t j | rt| }|| d dkr td | d |d | d d| t!| } | dk} nt!| }|t#jd| d| dnX| |krRt#jd| d| d|d|dkrt#jdd} nt#jd| z| rd}t j||d|}nt#jd| z| d d}d } t)||}t j |st#jd|d|dt j |}t)||}t j |st|dt#jd|z|||||t j||dz|| |d|| <|| /|s|S| r||zS|D]}|||jp|}|dg|jz}| r|d|jD]}|d |z|D]} || }| g|jz}|jst9||d!rct#jt j|| rd"pd#zd$| |||jzd%|d&|| gzt#j d'| z||zS)(N.cz-c++c++TFrrprz.irrrrzsource z' does not define swig target, assuming z swig targetz expected z but source z defines zAresetting swig target to c++ (some targets may have .c extension)z$assuming that %r has c++ swig target.cpp_wrapz. source %s does not exist: skipping swig'ing.rrz?_wrap.{c,cpp} was generated with "build_src --inplace" command.rrrz-pythonz-Irz++z: z-oz-outdirz+ skipping '%s' swig interface (up-to-date))!r8remover9rrVrQrRrr)rrr r&rget_swig_modulenamerget_swig_targetr rTrS_find_swig_targetr}rr: find_swigrrr'rrYrspawnr)r=rrrr swig_targetsrr target_exttypis_cpp skip_swigrrrrmr py_target_dirrtyp2rrr:swig_cmdrrs r#rzbuild_src.swig_sources\s     Y( ( (CF   & &v . . . . ] CFFCF >'',,R0< +< +F'**622KT3d{{</!#!6!6J$($7MM!+DNBGOOD>&))*2.v66Dx|++1128&&$$$ NOOO{-f55!$e.v66<HH(.&56666 $YYHH(+VVVTTT&;<<<#U{{ #)l m m m)- #)OSY)Z [ [ [,%+ "$',,z26$$ >+66 2%0KK"7888&(W__T%:%: &7 D&I&I !w~~k::U"5kkk6S"T"TT!I$/"1222"":..."";/// ]DJ G GHHH##F+++'22 V$$""6****    *) )  A KKNNNNy,DNN,,)$y'::  $ OOF # # #' $ $A OODF # # # #" % %F!&)Fh!22Gz %[&'BB %RW%5%5d%;%;(.4(=2&?&?&?@FHIII 8dn4"FI}fMNOOOO G"$%%%%X%%r?N)__name__ __module__ __qualname__ description user_optionsboolean_options help_optionsr>r_rbrarjrrkrfrgrirrrrrrrrrrr?r#r&r&&stEK   L":99OL   &8(8(8(t $$$(!,!,!,H000,&&&<,,,40&&&P,,,\333BBB,. " " " """"H   H'H'H'Tp&p&p&p&p&r?r&z!.*\.(f90|f95|f77|for|ftn|f|pyf)\Zz.*\.(inc|h|hpp)\ZzQ\s*%module\s*(.*\(\s*package\s*=\s*"(?P[\w_]+)".*\)|)\s*(?P[\w_]+)z-\*-\s*c\s*-\*-z-\*-\s*c\+\+\s*-\*-ct|5}d}|}t|rd}t|rd}dddn #1swxYwY|S)Nrr\)rreadline_has_cpp_header _has_c_header)rr(resultlines r#rrs fzz|| 4  F    F  Ms9AAAct|5}d}|D]*}t|}|r|d}n+dddn #1swxYwY|SNr)r_swig_module_name_matchr)rr(rr.r"s r#rrs f  D'--A wwv   Ks0A  AAcdD]H}tj||d|}tj|rnI|S)N)rrr)rQrRrSr)rrrmrs r#rrsVjss*CDD 7>>& ! !  E  Mr?z%\s*python\s*module\s*(?P[\w_]+)z4\s*python\s*module\s*(?P[\w_]*?__user__[\w_]*)cd}t|5}|D]:}t|}|r't|r#|d}n;dddn #1swxYwY|Sr0)r_f2py_module_name_match_f2py_user_module_name_matchr)rrr(r.r"s r#rrs D f  D'--A /55wwv   Ks>AA #A ).__doc__rQrrOrUrdistutils.commandrdistutils.dep_utilrrdistutils.utilrdistutils.errorsrrnumpy.distutilsr rzr r r r rnumpy.distutils.from_templaterrnumpy.distutils.conv_templaterr$r&rImatchrrr1rr,r+rrrr4r5rrr?r#r@so ''''''11111111''''''@@@@@@@@  IHHHHHHHHHHH    f &f &f &f &f & #f &f &f &P2:BBDIIOBJ3RT::@%"*%y%'T+++0 -rt44; "*3RT::A%"*%M%'T+++0)rz+=>@d D DDI     r?