bgBTLddlZddlZddlZddlZddlZddlmZddlmZddl Z ddl m Z ddl m ZeddZdCd Ze jd d Ze jd dZe jd dZe jd dZe jd dZdZdZdZdZe jjdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*e jd$%d&Z+d'Z,d(Z-d)Z.d*Z/d+Z0d,Z1d-Z2d.Z3d/Z4e jd$%d0Z5d1Z6d2Z7d3Z8d4Z9d5Z:d6Z;d7Zd:Z?d;Z@d<ZAd=ZBd>ZCd?ZDd@ZEdAZFdBZGdS)DN)Path) namedtuple)util)mainPPathsz(finp, f90inp, pyf, wrap77, wrap90, cmodfuntitledc @t|}t|d|d|d||d||d||dS)axTakes in a temporary file for testing and returns the expected output and input paths Here expected output is essentially one of any of the possible generated files. ..note:: Since this does not actually run f2py, none of these are guaranteed to exist, and module names are typically incorrect Parameters ---------- fname_inp : str The input filename mname : str, optional The name of the module, untitled by default Returns ------- genp : NamedTuple PPaths The possible paths which are generated, not all of which exist z.fz.f90.pyfz-f2pywrappers.fz-f2pywrappers2.f90module.c)finpf90inppyfwrap77wrap90cmodf)rr with_suffix with_name) fname_inpmnamebpaths o/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/numpy/f2py/tests/test_f2py2e.py get_io_pathsrs. OOE    t $ $  ((   f % %%88899%;;;<<oo00011    session)scopectjdddd}|dz }||d|S)'Generates a single f90 file for testingtestssrccliz hiworld.f90z hello.f90asciiencodingrgetpath read_text getbasetemp write_texttmpdir_factoryfdatfns rhello_world_f90r.8sV <} = = G G I ID  # # % % 3BMM$M))) Irctjdddd}|dz }||d|S)z(F90 file for testing warnings in gh23598rr crackfortranzgh23598Warn.f90r"r#r%r*s r gh23598_warnr1AsX <8I J J T T V VD  # # % %(9 9BMM$M))) Irctjdddd}|dz }||d|S)'Generates a single f77 file for testingrr r!zhi77.fzhello.fr"r#r%r*s rhello_world_f77r4JsV <x 8 8 B B D DD  # # % % 1BMM$M))) Irctjdddd}|dz }||d|S)r3rr return_realzfoo77.fzfoo.fr"r#r%r*s r retreal_f77r7SsV < y A A K K M MD  # # % % /BMM$M))) Ircbtjdddd}tjdddd}|dz }|dz }||d ||d |S) rrr f2cmapzisoFortranEnvMap.f90z .f2py_f2cmapz f2cmap.f90mapfiler"r#r%)r+r,r9r-fmaps r f2cmap_f90r<[s <2H I I S S U UD \'5(N C C M M O OF  # # % % 4B  % % ' ') 3DMM$M)))OOFWO--- IrcZt|d}|j}|tdd|dt j|j5t|j }d|vsJ ddddS#1swxYwYdS)Ntestrargvf2py z -m testzintproductf2pywrap, intpr) rrsetattrsyssplitr switchdirparentf2pyclirr')capfdr1 monkeypatchfoutlipathwrappers rtest_gh23598_warnrMgs V 4 4 4E LE V%%'')))  % %:: ,((***'99999::::::::::::::::::s$.B  B$'B$ct|}t|jdz}|tdd|d|t j|j5t| \}}d|vsJt| sJ ddddS#1swxYwYdS)zIEnsures that a signature file is generated via the CLI CLI :: -h r r@zf2py -h  Saving signatures to fileN) rstemrBrCrDrrErFrG readouterrexists)rHr.rIrKopathout_s r test_gen_pyfrWts%  ! !E  ! ! & /EV%?%?%?%?%?%E%E%G%GHHH  % %)) !!##Q*c1111uJ&&(((((( ))))))))))))))))))s4ACCCcNt|}|tdd|t j|j5t|\}}d|vsJd|vsJ ddddS#1swxYwYdS)zHEnsures that a signature file can be dumped to stdout CLI :: -h r@zf2py -h stdout rPzfunction hi() ! in N rrBrCrDrrErFrGrRrHr.rIrKrUrVs rtest_gen_pyf_stdoutr[s  ! !EV%>u%>%>%D%D%F%FGGG  % %,, !!##Q*c1111$+++++ ,,,,,,,,,,,,,,,,,,s2BB!Bct|}|tdd|t j|j5tdddtj t5t| \}}d|vsJ dddn #1swxYwYddddS#1swxYwYdS) zjEnsures that the CLI refuses to overwrite signature files CLI :: -h without --overwrite-signature r@f2py -h faker.pyf faker.pyf Fake newsr"r#z&Use --overwrite-signature to overwriteN) rrBrCrDrrErFr)pytestraises SystemExitrGrR)rHr.rIrKrVerrs rtest_gen_pyf_no_overwriterds  ! !EV%A%%A%A%G%G%I%IJJJ  % %CC [$$[7$CCC ]: & & C C III%%''FAs;sBBBBB C C C C C C C C C C C C C C CCCCCCCCCCCCCCCCCCCs6>C),C C)C C)C C))C-0C-ct|d}|j}d}d}|tdd|d|t j|j5t| \}}|D] } d| d |vsJ |D] } d | d |vsJ d d d d S#1swxYwYd S) z9Tests that functions can be skipped CLI :: skip: r>r?t0 t4 t8 sd s8 s4td s0r@rAz -m test skip: z=buildmodule: Could not found the body of interfaced routine " ". Skipping.Constructing wrapper function ""N rr rBrCrDrrErFrGrR) rHr7rIrJrKtoskip remainingrUrcskeyrkeys rtest_f2py_skiprps F 3 3 3E JE FI V...f..4466888  % %DD ##%%SLLNN  DbPTbbbOO%% D DDTest that functions can be kept by only: CLI :: only: r>r?rfrgr@rAz -m test only: r?rfztd s0 hiblahr@rA -m z only: z : rsrhrirjN) rr rrBrCrDrrErFrGrR)rHr.r7rIrJrKrlipath2rtrrUrcrnros rtest_file_processing_switchrzs F 3 3 3E JE F / " "F F E <<<5<<<C;cd}t||}|j}|tdd|d|t j|j5tdddn #1swxYwYtj |j sJtj |j sJdS)zHChecks the generation of files based on a module name CLI :: -m hir?r@rArxN) rrrBrCrDrrErFrGrrSrr)rHr.rIMNAMErJrKs rtest_mod_gen_f77r~s E  6 6 6E LEV%?U%?%?%?%?%E%E%G%GHHH  % %  ;u{ # ### # ;u| $ $$$ $$$s(BB Bcdt|d}|j}tjd}tjd}|t dd|dtj|j 5t| \}}| |J| |J dddn #1swxYwY|t dd|d tj|j 5t| \}}| |J| |J ddddS#1swxYwYdS) zHLowers cases by flag or when -h is present CLI :: --[no-]lower r>r?zHI\(\)zhi\(\)r@rAz -m test --lowerNz -m test --no-lower) rr recompilerBrCrDrrErFrGrRsearch rHr4rIrJrKcapshicapslorUrVs rtest_lower_cmodrs%  7 7 7E JE Z " "F Z " "FV%DU%D%D%D%J%J%L%LMMM  % %** !!##Q}}S!!---}}S!!)))) *************** V::::@@BBDDD  % %.. !!##Q}}S!!)))}}S!!---- ..................s& AC--C14C1AF%%F),F)c t|d}|j}tjd}tjd}|t dd|d|jdtj |j 5t| \}}| |J| |J d d d n #1swxYwY|t dd|d|jd tj |j 5t| \}}| |J| |J d d d d S#1swxYwYd S) z^Lowers cases in signature files by flag or when -h is present CLI :: --[no-]lower -h r>r?z Block: HIz Block: hir@rAz -h z -m test --overwrite-signatureNz) -m test --overwrite-signature --no-lower)rr rrrBrCrrDrrErFrGrRrrs rtest_lower_sigrsC  7 7 7E JE Z % %F Z % %F DDD59DDDJJLL  % %** !!##Q}}S!!---}}S!!)))) *************** OOO59OOO    % %.. !!##Q}}S!!)))}}S!!---- ..................s&AC55C9<C9AF55F9<F9c ^t|}d}d}|tdd|d|d|t j|j5t|\}}d|d|vsJ d d d d S#1swxYwYd S) zNEnsures that the build directory can be specified CLI :: --build-dir rwtttmpr@f2py -m rOz --build-dir zWrote C/API module "rjNrY)rHr.rIrKrodirrUrVs rtest_build_dirr>s  ! !E E DVE5EE5EEtEEKKMMOOO  % %88 !!##Q0u000C77777888888888888888888s$0B""B&)B&ct|}|tdd|dt j|j5tdddt| \}}d|vsJ d d d d S#1swxYwYd S) zXEnsures that the build directory can be specified CLI :: --overwrite-signature r@r]z --overwrite-signaturer^r_r"r#rPN) rrBrCrDrrErFr)rGrRrZs rtest_overwriterOs  ! !E V:U:::@@BBDDD  % %22 [$$[7$CCC !!##Q*c11111 222222222222222222sAB99B=B=c t|}d}|tdd|d|dt j|j5t|\}}d|vsJt|d 5}d| vsJ d d d n #1swxYwYd d d d S#1swxYwYd S) zJEnsures that TeX documentation is written out CLI :: --latex-doc rwr@rrOz --latex-docDocumentation is saved to file module.tex\documentclassN rrBrCrDrrErFrGrRopenreadrHr.rIrKrrUrVotexs r test_latexdocr`s  ! !E EV>5>>5>>>DDFFHHH  % %44 !!##Q/36666 U&&& ' ' , , . . 4$$ 33333 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 444444444444444444s7 AC.0C C.C C.C C..C25C2c Nt|}d}|tdd|d|dt j|j5t|\}}d|vsJ ddddS#1swxYwYdS)zMEnsures that TeX documentation is written out CLI :: --no-latex-doc rwr@rrOz --no-latex-docrNrYrHr.rIrKrrUrVs rtest_nolatexdocrrs  ! !E EVA5AA5AAAGGIIKKK  % %;; !!##Q/s:::::;;;;;;;;;;;;;;;;;; ,BB!Bc t|}d}|tdd|d|dt j|j5t|\}}d|vsJtd|d 5}d | vsJ d d d n #1swxYwYd d d d S#1swxYwYd S) zEnsures that truncated documentation is written out TODO: Test to ensure this has no effect without --latex-doc CLI :: --latex-doc --short-latex rwr@rrOz --latex-doc --short-latexr./rrNrrs rtest_shortlatexrs  ! !E E <5<<5<<<BBDD  % %88 !!##Q/36666 (u((( ) ) . . 0 0 8D$DIIKK77777 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8888888888888888887 AC/1C C/C C/C C//C36C3c t|}d}|tdd|d|dt j|j5t|\}}d|vsJtd|d 5}d | vsJ d d d n #1swxYwYd d d d S#1swxYwYd S) zIEnsures that RsT documentation is written out CLI :: --rest-doc rwr@rrOz --rest-doc#ReST Documentation is saved to filerz module.restz.. -*- rest -*-Nr)rHr.rIrKrrUrVorsts r test_restdocrs  ! !E EV=5==5===CCEEGGG  % %55 !!##Q4;;;; )u))) * * / / 1 1 5T%44444 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 555555555555555555rc Nt|}d}|tdd|d|dt j|j5t|\}}d|vsJ ddddS#1swxYwYdS)zLEnsures that TeX documentation is written out CLI :: --no-rest-doc rwr@rrOz --no-rest-docrNrYrs rtest_norestexdocrs  ! !E EV@5@@5@@@FFHHJJJ  % %@@ !!##Q4C?????@@@@@@@@@@@@@@@@@@rc t|}d}|tdd|d|dt j|j5ttd|d5}d| vsJ d d d n #1swxYwYd d d d S#1swxYwYd S) zIEnsures that debugging wrappers are written CLI :: --debug-capi rwr@rrOz --debug-capirr z#define DEBUGCFUNCSN rrBrCrDrrErFrGrr)rHr.rIrKrocmods rtest_debugcapirsl  ! !E EV?5??5???EEGGIII  % %:: &u&&& ' ' , , . . :%)UZZ\\99999 : : : : : : : : : : : : : : :::::::::::::::::::s6 4CB:. C:B> >CB> CCCzConsistently fails on CI.)reasonc t|}d}|tdd|d|dt j|j5ttjd}tj |dd }d }tj d }|j |ksJ|j|ksJ d d d d S#1swxYwYd S) zEEnsures that debugging wrappers work CLI :: --debug-capi -c rwr@rrOz -c --debug-capiz#python3 -c "import blah; blah.hi()"TUTF-8capture_outputr$ Hello World a debug-capi:Python C/API function blah.hi() debug-capi:float hi=:output,hidden,scalar debug-capi:hi=0 debug-capi:Fortran subroutine `f2pywraphi(&hi)' debug-capi:hi=0 debug-capi:Building return value. debug-capi:Python C/API function blah.hi: successful. debug-capi:Freeing memory. N)rrBrCrDrrErFrGshlex subprocessruntextwrapdedentstdoutstderr)r.rIrKrcmd_runrouteouteerrs rtest_debugcapi_bldrsD  ! !E EVB5BB5BBBHHJJLLL  % %## +EFF~gdWMMM   {d""""{d"""""!##################s A*CCCc nt|}d}|tdd|d|t j|j5tdddn #1swxYwY|\}}d|vsJ|tdd|d|dt j|j5t|\}}d|vsJ ddddS#1swxYwYdS)zoEnsures that fortran subroutine wrappers for F77 are included by default CLI :: --[no]-wrap-functions rwr@rrON Fortran 77 wrappers are saved toz --wrap-functionsrYrs rtest_wrapfunc_defrs  ! !E EV%?%?%?%?%?%E%E%G%GHHH  % %      FC .# 5 5 5 5VC5CC5CCCIIKKMMM  % %:: !!##Q2c99999::::::::::::::::::s$A::A>A>0,D**D.1D.c Nt|}d}|tdd|d|dt j|j5t|\}}d|vsJ ddddS#1swxYwYdS)zeEnsures that fortran subroutine wrappers for F77 can be disabled CLI :: --no-wrap-functions rwr@rrOz --no-wrap-functionsrNrYrs rtest_nowrapfuncrs  ! !E EVF5FF5FFFLLNNPPP  % %>> !!##Q2#=====>>>>>>>>>>>>>>>>>>rc t|}d}|tdd|d|dt j|j5ttd|d5}| }d|vsJd |vsJ d d d n #1swxYwYd d d d S#1swxYwYd S) zcAdd to the include directories CLI :: -include TODO: Document this in the help string rwr@rrOz' -include -include rr z#include z#include Nr)rHr.rIrKrrocmrs rtest_inclheaderrs~  ! !E E I5II5III    % %00 &u&&& ' ' , , . . 0%::< Nrrrrtest_npd_link_autorrrcdS)z/ CLI :: -c -L/path/to/lib/ -l Nrrrr test_npd_librrrcdS)z CLI :: -D Nrrrrtest_npd_definerrrcdS)z CLI :: -U Nrrrrtest_npd_undefinerrrcdS)z$ CLI :: -I/path/to/include/ Nrrrr test_npd_inclr rrcdS)z8 CLI :: .o .so .a Nrrrrtest_npd_linkerrrr)r )HrrrCrrpathlibr collectionsrr`rnumpy.f2py.f2py2errGrrfixturer.r1r4r7r<rMrWr[rdmarkxfailrprurzr~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr s++++++++++++++++++++"""""" ------ HH I INi   ! i   ! i   ! i   ! i   !  : : : ) ) ) , , , C C CDDD.DDD.DDD<%%%"...4$.$.$.N888"222"444$ ; ; ; 888,555$ @ @ @ : : : 566##76#::::2 > > > 000.      III$    $ $ $ - - -566 # #76 #&                                                        r