§ y<ˆjBTãóL—ddlZddlZddlZddlZddlZddlmZddlmZddl Z ddl m Z ddl m Zedd¦«ZdCd „Ze jd ¬ ¦«d „¦«Ze jd ¬ ¦«d„¦«Ze jd ¬ ¦«d„¦«Ze jd ¬ ¦«d„¦«Ze jd ¬ ¦«d„¦«Zd„Zd„Zd„Zd„Ze jjd„¦«Zd„Zd„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d „Z'd!„Z(d"„Z)d#„Z*e j d$¬%¦«d&„¦«Z+d'„Z,d(„Z-d)„Z.d*„Z/d+„Z0d,„Z1d-„Z2d.„Z3d/„Z4e j d$¬%¦«d0„¦«Z5d1„Z6d2„Z7d3„Z8d4„Z9d5„Z:d6„Z;d7„Zd:„Z?d;„Z@d<„ZAd=„ZBd>„ZCd?„ZDd@„ZEdA„ZFdB„ZGdS)DéN)ÚPath)Ú namedtupleé)Úutil)ÚmainÚPPathsz(finp, f90inp, pyf, wrap77, wrap90, cmodfÚuntitledc ó@—t|¦«}t| d¦«| d¦«| d¦«| |›d�¦«| |›d�¦«| |›d�¦«¬¦«S)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.f90úmodule.c)ÚfinpÚf90inpÚpyfÚwrap77Úwrap90Úcmodf)rrÚ with_suffixÚ with_name)Ú fname_inpÚmnameÚbpaths úp/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/numpy/f2py/tests/test_f2py2e.pyÚ get_io_pathsrs¡€õ. �‰OŒO€EÝ Ø × Ò ˜tÑ $Ô $Ø× Ò  Ñ(Ô(Ø × Ò ˜fÑ %Ô %Ø�Š %Ð8Ð8Ð8Ñ9Ô9Ø�Š %Ð;Ð;Ð;Ñ<Ô<Ø�oŠo Ð0Ð0Ð0Ñ1Ô1ð  ñ ô ðóÚsession)Úscopecó´—tjdddd¦« ¦«}| ¦«dz }| |d¬¦«|S)ú'Generates a single f90 file for testingÚtestsÚsrcÚcliz hiworld.f90z hello.f90Úascii©Úencoding©rÚgetpathÚ read_textÚ getbasetempÚ write_text©Útmpdir_factoryÚfdatÚfns rÚhello_world_f90r.8sV€õ Œ<˜ ¨¨}Ñ =Ô =× GÒ GÑ IÔ I€DØ × #Ò #Ñ %Ô %¨ Ñ 3€B؇M‚M�$ €MÑ)Ô)Ð)Ø €Ircó´—tjdddd¦« ¦«}| ¦«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Ô V€DØ × #Ò #Ñ %Ô %Ð(9Ñ 9€B؇M‚M�$ €MÑ)Ô)Ð)Ø €Ircó´—tjdddd¦« ¦«}| ¦«dz }| |d¬¦«|S)ú'Generates a single f77 file for testingrr r!zhi77.fzhello.fr"r#r%r*s rÚhello_world_f77r4JsV€õ Œ<˜ ¨¨xÑ 8Ô 8× BÒ BÑ DÔ D€DØ × #Ò #Ñ %Ô %¨ Ñ 1€B؇M‚M�$ €MÑ)Ô)Ð)Ø €Ircó´—tjdddd¦« ¦«}| ¦«dz }| |d¬¦«|S)r3rr Ú return_realzfoo77.fzfoo.fr"r#r%r*s rÚ retreal_f77r7SsV€õ Œ<˜ ¨ °yÑ AÔ A× KÒ KÑ MÔ M€DØ × #Ò #Ñ %Ô %¨Ñ /€B؇M‚M�$ €MÑ)Ô)Ð)Ø €Ircób—tjdddd¦« ¦«}tjdddd¦« ¦«}| ¦«dz }| ¦«dz }| |d¬ ¦«| |d¬ ¦«|S) rrr Úf2cmapzisoFortranEnvMap.f90z .f2py_f2cmapz f2cmap.f90Úmapfiler"r#r%)r+r,r9r-Úfmaps rÚ f2cmap_f90r<[s¤€õ Œ<˜ ¨Ð2HÑ IÔ I× SÒ SÑ UÔ U€DÝ Œ\˜' 5¨(°NÑ CÔ C× MÒ MÑ OÔ O€FØ × #Ò #Ñ %Ô %¨ Ñ 4€BØ × %Ò %Ñ 'Ô '¨)Ñ 3€D؇M‚M�$ €MÑ)Ô)Ð)؇O‚O�F W€OÑ-Ô-Ð-Ø €IrcóZ—t|d¬¦«}|j}| tdd|›d� ¦«¦«t j|j¦«5t¦«|j   ¦«}d|vsJ‚ ddd¦«dS#1swxYwYdS)NÚtest©rÚargvúf2py z -m testzintproductf2pywrap, intpr) rrÚsetattrÚsysÚsplitrÚ switchdirÚparentÚf2pyclirr')Úcapfdr1Ú monkeypatchÚfoutlÚipathÚwrappers rÚtest_gh23598_warnrMgsú€Ý ˜¨VÐ 4Ñ 4Ô 4€EØ ŒL€EØ×ÒÝ ˆVØ�ÐÐÐ×%Ò%Ñ'Ô'ñ)ô)ð)õ Œ˜œ Ñ %Ô %ð:ð:݉ Œ ˆ Ø”,×(Ò(Ñ*Ô*ˆØ*°'Ð9Ð9Ð9Ð9Ð9ð:ð:ð:ñ:ô:ð:ð:ð:ð:ð:ð:ð:øøøð:ð:ð:ð:ð:ð:sÁ$.B  B$Â'B$có¾—t|¦«}t|¦«jdz}| tdd|›d|›� ¦«¦«t j|j¦«5t¦«|  ¦«\}}d|vsJ‚t|›¦«  ¦«sJ‚ ddd¦«dS#1swxYwYdS)zIEnsures that a signature file is generated via the CLI CLI :: -h r r@zf2py -h ú úSaving signatures to fileN) rÚstemrBrCrDrrErFrGÚ readouterrÚexists)rHr.rIrKÚopathÚoutÚ_s rÚ test_gen_pyfrWts%€õ �Ñ !Ô !€EÝ �Ñ !Ô !Ô &¨Ñ /€EØ×Ò�˜VÐ%?°Ð%?Ð%?¸Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHå Œ˜œ Ñ %Ô %ð)ð)݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ*¨cÐ1Ð1Ð1Ð1Ý�u�JÑÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(ð )ð)ð)ñ)ô)ð)ð)ð)ð)ð)ð)ð)øøøð)ð)ð)ð)ð)ð)sÁ4ACÃCÃCcóN—t|¦«}| tdd|›� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚d|vsJ‚ ddd¦«dS#1swxYwYdS)zHEnsures that a signature file can be dumped to stdout CLI :: -h r@zf2py -h stdout rPzfunction hi() ! in N© rrBrCrDrrErFrGrR©rHr.rIrKrUrVs rÚtest_gen_pyf_stdoutr[ƒs÷€õ �Ñ !Ô !€EØ×Ò�˜VÐ%>°uÐ%>Ð%>×%DÒ%DÑ%FÔ%FÑGÔGÐGÝ Œ˜œ Ñ %Ô %ð,ð,݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ*¨cÐ1Ð1Ð1Ð1Ø$¨Ð+Ð+Ð+Ð+Ð+ð ,ð,ð,ñ,ô,ð,ð,ð,ð,ð,ð,ð,øøøð,ð,ð,ð,ð,ð,sÁ2BÂBÂ!Bcóì—t|¦«}| tdd|›� ¦«¦«t j|j¦«5td¦« dd¬¦«tj t¦«5t¦«|  ¦«\}}d|vsJ‚ ddd¦«n #1swxYwYddd¦«dS#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)ÚpytestÚraisesÚ SystemExitrGrR)rHr.rIrKrVÚerrs rÚtest_gen_pyf_no_overwriterd�s‘€õ �Ñ !Ô !€EØ×Ò�˜VÐ%A¸%Ð%AÐ%A×%GÒ%GÑ%IÔ%IÑJÔJÐJå Œ˜œ Ñ %Ô %ðCðCÝ ˆ[ÑÔ×$Ò$ [¸7Ð$ÑCÔCÐCÝ Œ]�:Ñ &Ô &ð Cð CÝ ‰IŒIˆIØ×%Ò%Ñ'Ô'‰FˆAˆsØ;¸sÐBÐBÐBÐBÐBð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð CðCðCðCñCôCðCðCðCðCðCðCðCøøøðCðCðCðCðCðCs6Á>C)Â,Cà C)ÃC ÃC)ÃC ÃC)Ã)C-Ã0C-cóÚ—t|d¬¦«}|j}d}d}| tdd|›d|›� ¦«¦«t j|j¦«5t¦«|  ¦«\}}| ¦«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 s4útd s0r@rAz -m test skip: z=buildmodule: Could not found the body of interfaced routine "ú ". Skipping.úConstructing wrapper function "ú"N© rr rBrCrDrrErFrGrR) rHr7rIrJrKÚtoskipÚ remainingrUrcÚskeyÚrkeys rÚtest_f2py_skiprpŸs�€õ ˜¨FÐ 3Ñ 3Ô 3€EØ ŒJ€EØ €FØ€IØ×ÒÝ ˆVØ.�Ð.Ð. fÐ.Ð.×4Ò4Ñ6Ô6ñ8ô8ð8õ Œ˜œ Ñ %Ô %ðDðD݉ Œ ˆ Ø×#Ò#Ñ%Ô%‰ˆˆSØ—L’L‘N”Nð ð ˆDàbÐPTÐbÐbÐbØðððððà—O’OÑ%Ô%ð Dð DˆDØ<°TÐ<Ð<Ð<ÀÐCÐCÐCÐCÐCð DðDðDðDñDôDðDðDðDðDðDðDðDøøøðDðDðDðDðDðDóÁ*A(C à C$Ã'C$cóÚ—t|d¬¦«}|j}d}d}| tdd|›d|›� ¦«¦«t j|j¦«5t¦«|  ¦«\}}| ¦«D] } d| ›d �|vsJ‚Œ | ¦«D] } d | ›d �|vsJ‚Œ d d d ¦«d S#1swxYwYd S) z>Test that functions can be kept by only: CLI :: only: r>r?rfrgr@rAz -m test only: úr?rfztd s0 hiÚblahr@rAú -m z only: z : rsrhrirjN) rr rrBrCrDrrErFrGrR)rHr.r7rIrJrKrlÚipath2rtrrUrcrnros rÚtest_file_processing_switchrzÎs³€õ ˜¨FÐ 3Ñ 3Ô 3€EØ ŒJ€EØ €FÝ �/Ñ "Ô "€FØ €FØ €EØ×ÒÝ ØØ<�Ð<Ð<˜5Ð<Ð<¨Ð<Ð<°FÐ<Ð<×BÒBñ ô ñôðõ Œ˜œ Ñ %Ô %ðDðD݉ Œ ˆ Ø×#Ò#Ñ%Ô%‰ˆˆSØ—L’L‘N”Nð ð ˆDàaÈtÐaÐaÐaØðððððà—L’L‘N”Nð Dð DˆDØ<°TÐ<Ð<Ð<ÀÐCÐCÐCÐCÐCð DðDðDðDñDôDðDðDðDðDðDðDðDøøøðDðDðDðDðDðDsÂA(C7Ã7C;Ã>C;cóŒ—d}t||¬¦«}|j}| tdd|›d|›� ¦«¦«t j|j¦«5t¦«ddd¦«n #1swxYwYtj |j ¦«sJ‚tj |j ¦«sJ‚dS)zHChecks the generation of files based on a module name CLI :: -m Úhir?r@rArxN) rrrBrCrDrrErFrGrrSrr)rHr.rIÚMNAMErJrKs rÚtest_mod_gen_f77r~ìsÿ€ð €EÝ ˜°Ð 6Ñ 6Ô 6€EØ ŒL€EØ×Ò�˜VÐ%?¨UÐ%?Ð%?¸Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHÝ Œ˜œ Ñ %Ô %ðð݉ Œ ˆ ðððñôððððððøøøððððõ Œ;�u”{Ñ #Ô #Ð#Ð#Ð #å Œ;�u”|Ñ $Ô $Ð$Ð$Ð $Ð$Ð$sÁ(BÂB Bcód—t|d¬¦«}|j}tjd¦«}tjd¦«}| t dd|›d� ¦«¦«tj|j ¦«5t¦«|  ¦«\}}|  |¦«€J‚|  |¦«�J‚ ddd¦«n #1swxYwY| t dd|›d � ¦«¦«tj|j ¦«5t¦«|  ¦«\}}|  |¦«�J‚|  |¦«€J‚ ddd¦«dS#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 ÚreÚcompilerBrCrDrrErFrGrRÚsearch© rHr4rIrJrKÚcapshiÚcapslorUrVs rÚtest_lower_cmodr†ýs%€õ ˜°Ð 7Ñ 7Ô 7€EØ ŒJ€EÝ ŒZ˜ Ñ "Ô "€FÝ ŒZ˜ Ñ "Ô "€Fà×Ò�˜VÐ%D¨UÐ%DÐ%DÐ%D×%JÒ%JÑ%LÔ%LÑMÔMÐMÝ Œ˜œ Ñ %Ô %ð*ð*݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ�}Š}˜SÑ!Ô!Ð-Ð-Ð-Ø�}Š}˜SÑ!Ô!Ð)Ð)Ð)Ð)ð *ð*ð*ñ*ô*ð*ð*ð*ð*ð*ð*øøøð*ð*ð*ð*ð ×Ò�˜VØ: Ð:Ð:Ð:×@Ò@ÑBÔBñDôDðDå Œ˜œ Ñ %Ô %ð.ð.݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ�}Š}˜SÑ!Ô!Ð)Ð)Ð)Ø�}Š}˜SÑ!Ô!Ð-Ð-Ð-Ð-ð .ð.ð.ñ.ô.ð.ð.ð.ð.ð.ð.ð.øøøð.ð.ð.ð.ð.ð.s& AC-Ã-C1Ã4C1ÅAF%Æ%F)Æ,F)c ó„—t|d¬¦«}|j}tjd¦«}tjd¦«}| t dd|›d|j›d� ¦«¦«tj |j ¦«5t¦«|  ¦«\}}|  |¦«€J‚|  |¦«�J‚ d d d ¦«n #1swxYwY| t dd|›d|j›d � ¦«¦«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 r€r�rBrCrrDrrErFrGrRr‚rƒs rÚtest_lower_sigrˆsC€õ ˜°Ð 7Ñ 7Ô 7€EØ ŒJ€Eå ŒZ˜ Ñ %Ô %€FÝ ŒZ˜ Ñ %Ô %€Fð×ÒÝ ØØD�ÐDÐD˜5œ9ÐDÐDÐD×JÒJÑLÔLñôðõ Œ˜œ Ñ %Ô %ð*ð*݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ�}Š}˜SÑ!Ô!Ð-Ð-Ð-Ø�}Š}˜SÑ!Ô!Ð)Ð)Ð)Ð)ð *ð*ð*ñ*ô*ð*ð*ð*ð*ð*ð*øøøð*ð*ð*ð*ð×ÒÝ ØØO�ÐOÐO˜5œ9ÐOÐOÐOß Š‰Œñ ôðõ Œ˜œ Ñ %Ô %ð.ð.݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ�}Š}˜SÑ!Ô!Ð)Ð)Ð)Ø�}Š}˜SÑ!Ô!Ð-Ð-Ð-Ð-ð .ð.ð.ñ.ô.ð.ð.ð.ð.ð.ð.ð.øøøð.ð.ð.ð.ð.ð.s&ÂAC5Ã5C9Ã<C9ÅAF5Æ5F9Æ<F9c ó^—t|¦«}d}d}| tdd|›d|›d|›� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|›d�|vsJ‚ d d d ¦«d S#1swxYwYd S) zNEnsures that the build directory can be specified CLI :: --build-dir rwÚtttmpr@úf2py -m rOz --build-dir zWrote C/API module "rjNrY)rHr.rIrKrÚodirrUrVs rÚtest_build_dirr�>s€õ �Ñ !Ô !€EØ €EØ €DØ×Ò�˜VØE 5ÐEÐE¨5ÐEÐE¸tÐEÐE×KÒKÑMÔMñOôOðOõ Œ˜œ Ñ %Ô %ð8ð8݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ0 uÐ0Ð0Ð0°CÐ7Ð7Ð7Ð7Ð7ð8ð8ð8ñ8ô8ð8ð8ð8ð8ð8ð8ð8øøøð8ð8ð8ð8ð8ð8sÁ$0B"Â"B&Â)B&cóŒ—t|¦«}| tdd|›d� ¦«¦«t j|j¦«5td¦« dd¬¦«t¦«|  ¦«\}}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 rÚtest_overwriter�Os€õ �Ñ !Ô !€EØ×ÒÝ ˆVØ:˜UÐ:Ð:Ð:×@Ò@ÑBÔBñDôDðDõ Œ˜œ Ñ %Ô %ð2ð2Ý ˆ[ÑÔ×$Ò$ [¸7Ð$ÑCÔCÐC݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ*¨cÐ1Ð1Ð1Ð1Ð1ð 2ð2ð2ñ2ô2ð2ð2ð2ð2ð2ð2ð2øøøð2ð2ð2ð2ð2ð2sÁAB9Â9B=ÃB=c óö—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚t|›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@r‹rOz --latex-docúDocumentation is saved to fileú module.texú\documentclassN© rrBrCrDrrErFrGrRÚopenÚread©rHr.rIrKrrUrVÚotexs rÚ test_latexdocr™`s�€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØ> 5Ð>Ð>¨5Ð>Ð>Ð>×DÒDÑFÔFñHôHðHõ Œ˜œ Ñ %Ô %ð4ð4݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ/°3Ð6Ð6Ð6Ð6Ý �UÐ&Ð&Ð&Ñ 'Ô '× ,Ò ,Ñ .Ô .ð 4°$Ø$¨¯ ª © ¬ Ð3Ð3Ð3Ð3Ð3ð 4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð4ð4ñ4ô4ð4ð4ð4ð4ð4ð4ð4øøøð4ð4ð4ð4ð4ð4s7Á AC.Â0Cà C.ÃC ÃC.ÃC ÃC.Ã.C2Ã5C2c óN—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚ ddd¦«dS#1swxYwYdS)zMEnsures that TeX documentation is written out CLI :: --no-latex-doc rwr@r‹rOz --no-latex-docr‘NrY©rHr.rIrKrrUrVs rÚtest_nolatexdocrœrs€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØA 5ÐAÐA¨5ÐAÐAÐA×GÒGÑIÔIñKôKðKõ Œ˜œ Ñ %Ô %ð;ð;݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ/°sÐ:Ð:Ð:Ð:Ð:ð;ð;ð;ñ;ô;ð;ð;ð;ð;ð;ð;ð;øøøð;ð;ð;ð;ð;ð;óÁ ,BÂBÂ!Bc óø—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚td|›d�¦«  ¦«5}d |  ¦«vsJ‚ d d d ¦«n #1swxYwYd d d ¦«d S#1swxYwYd S) zžEnsures that truncated documentation is written out TODO: Test to ensure this has no effect without --latex-doc CLI :: --latex-doc --short-latex rwr@r‹rOz --latex-doc --short-latexr‘ú./r’r“Nr”r—s rÚtest_shortlatexr ‚s‘€õ �Ñ !Ô !€EØ €EØ×ÒÝ ØØ<�5Ð<Ð<˜5Ð<Ð<Ð<×BÒBÑDÔDñôðõ Œ˜œ Ñ %Ô %ð8ð8݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ/°3Ð6Ð6Ð6Ð6Ý Ð(�uÐ(Ð(Ð(Ñ )Ô )× .Ò .Ñ 0Ô 0ð 8°DØ$¨D¯IªI©K¬KÐ7Ð7Ð7Ð7Ð7ð 8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð8ð8ñ8ô8ð8ð8ð8ð8ð8ð8ð8øøøð8ð8ð8ð8ð8ð8ó7Á AC/Â1Cà C/ÃC ÃC/ÃC ÃC/Ã/C3Ã6C3c óø—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚td|›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@r‹rOz --rest-docú#ReST Documentation is saved to filerŸz module.restz.. -*- rest -*-Nr”)rHr.rIrKrrUrVÚorsts rÚ test_restdocr¥˜s’€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØ= 5Ð=Ð=¨5Ð=Ð=Ð=×CÒCÑEÔEñGôGðGõ Œ˜œ Ñ %Ô %ð5ð5݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ4¸Ð;Ð;Ð;Ð;Ý Ð)�uÐ)Ð)Ð)Ñ *Ô *× /Ò /Ñ 1Ô 1ð 5°TØ%¨¯ª©¬Ð4Ð4Ð4Ð4Ð4ð 5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð5ð5ñ5ô5ð5ð5ð5ð5ð5ð5ð5øøøð5ð5ð5ð5ð5ð5r¡c óN—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚ ddd¦«dS#1swxYwYdS)zLEnsures that TeX documentation is written out CLI :: --no-rest-doc rwr@r‹rOz --no-rest-docr£NrYr›s rÚtest_norestexdocr§ªs€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØ@ 5Ð@Ð@¨5Ð@Ð@Ð@×FÒFÑHÔHñJôJðJõ Œ˜œ Ñ %Ô %ð@ð@݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ4¸CÐ?Ð?Ð?Ð?Ð?ð@ð@ð@ñ@ô@ð@ð@ð@ð@ð@ð@ð@øøøð@ð@ð@ð@ð@ð@r�c ó¾—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«td|›d�¦« ¦«5}d|  ¦«vsJ‚ d d d ¦«n #1swxYwYd d d ¦«d S#1swxYwYd S) zIEnsures that debugging wrappers are written CLI :: --debug-capi rwr@r‹rOz --debug-capirŸr z#define DEBUGCFUNCSN© rrBrCrDrrErFrGr•r–)rHr.rIrKrÚocmods rÚtest_debugcapir«ºsl€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØ? 5Ð?Ð?¨5Ð?Ð?Ð?×EÒEÑGÔGñIôIðIõ Œ˜œ Ñ %Ô %ð:ð:݉ Œ ˆ Ý Ð&�uÐ&Ð&Ð&Ñ 'Ô '× ,Ò ,Ñ .Ô .ð :°%Ø)¨U¯ZªZ©\¬\Ð9Ð9Ð9Ð9Ð9ð :ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð:ð:ð:ñ:ô:ð:ð:ð:ð:ð:ð:ð:øøøð:ð:ð:ð:ð:ð:s6Á 4CÂB:Â. CÂ:B> Â>CÃB> ÃCÃCÃCzConsistently fails on CI.)Úreasonc óÊ—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«tjd¦«}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@r‹rOz -c --debug-capiz#python3 -c "import blah; blah.hi()"TúUTF-8©Úcapture_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)rrBrCrDrrErFrGÚshlexÚ subprocessÚrunÚtextwrapÚdedentÚstdoutÚstderr)r.rIrKrÚcmd_runÚroutÚeoutÚeerrs rÚtest_debugcapi_bldr½ÊsD€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØB 5ÐBÐB¨5ÐBÐBÐB×HÒHÑJÔJñLôLðLõ Œ˜œ Ñ %Ô %ð#ð#݉ Œ ˆ Ý”+ÐEÑFÔFˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆÝŒð ñ  ô  ˆðŒ{˜dÒ"Ð"Ð"Ð"ØŒ{˜dÒ"Ð"Ð"Ð"Ð"ð!#ð#ð#ñ#ô#ð#ð#ð#ð#ð#ð#ð#øøøð#ð#ð#ð#ð#ð#sÁ A*CÃCÃCc ón—t|¦«}d}| tdd|›d|›� ¦«¦«t j|j¦«5t¦«ddd¦«n #1swxYwY| ¦«\}}d|vsJ‚| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚ ddd¦«dS#1swxYwYdS)zoEnsures that fortran subroutine wrappers for F77 are included by default CLI :: --[no]-wrap-functions rwr@r‹rONú Fortran 77 wrappers are saved toz --wrap-functionsrYr›s rÚtest_wrapfunc_defrÀès΀õ �Ñ !Ô !€EØ €EØ×Ò�˜VÐ%?°Ð%?Ð%?¸Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHå Œ˜œ Ñ %Ô %ðð݉ Œ ˆ ðððñôððððððøøøððððà × Ò Ñ Ô �F€CˆØ .°#Ð 5Ð 5Ð 5Ð 5ð×Ò�˜VØC 5ÐCÐC¨5ÐCÐCÐC×IÒIÑKÔKñMôMðMõ Œ˜œ Ñ %Ô %ð:ð:݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ2°cÐ9Ð9Ð9Ð9Ð9ð:ð:ð:ñ:ô:ð:ð:ð:ð:ð:ð:ð:øøøð:ð:ð:ð:ð:ð:s$ÁA:Á:A>ÂA>Ã0,D*Ä*D.Ä1D.c óN—t|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚ ddd¦«dS#1swxYwYdS)zeEnsures that fortran subroutine wrappers for F77 can be disabled CLI :: --no-wrap-functions rwr@r‹rOz --no-wrap-functionsr¿NrYr›s rÚtest_nowrapfuncrÂs€õ �Ñ !Ô !€EØ €EØ×Ò�˜VØF 5ÐFÐF¨5ÐFÐFÐF×LÒLÑNÔNñPôPðPõ Œ˜œ Ñ %Ô %ð>ð>݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ2¸#Ð=Ð=Ð=Ð=Ð=ð>ð>ð>ñ>ô>ð>ð>ð>ð>ð>ð>ð>øøøð>ð>ð>ð>ð>ð>r�c óΗt|¦«}d}| tdd|›d|›d� ¦«¦«t j|j¦«5t¦«td|›d�¦« ¦«5}|  ¦«}d|vsJ‚d |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@r‹rOz' -include -include rŸr z#include z#include Nr©)rHr.rIrKrrªÚocmrs rÚtest_inclheaderrÅs~€õ �Ñ !Ô !€EØ €EØ×ÒÝ ØØI�5ÐIÐI˜5ÐIÐIÐIß Š‰Œñ ôðõ Œ˜œ Ñ %Ô %ð0ð0݉ Œ ˆ Ý Ð&�uÐ&Ð&Ð&Ñ 'Ô '× ,Ò ,Ñ .Ô .ð 0°%Ø—:’:‘<”<ˆDØ)¨TÐ1Ð1Ð1Ð1Ø'¨4Ð/Ð/Ð/Ð/Ð/ð 0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð0ð0ð0ñ0ô0ð0ð0ð0ð0ð0ð0ð0øøøð0ð0ð0ð0ð0ð0s6Á 4CÂ!CÂ6 CÃC ÃCà C à CÃCÃ!Ccó—dS)z?Add to the include directories CLI :: --include-paths N©rÇrrÚ test_inclpathrÈ(ó €ð  €Drcó—dS)z;Add to the include directories CLI :: --help-link NrÇrÇrrÚ test_hlinkrË1rÉrcót—t|¦«}| tdd|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚d|vsJ‚d|vsJ‚d|vsJ‚d|vsJ‚ d d d ¦«d S#1swxYwYd S) zOCheck that Fortran-to-Python KIND specs can be passed CLI :: --f2cmap r@ú f2py -m blah z --f2cmap mapfilez!Reading f2cmap from 'mapfile' ...z&Mapping "real(kind=real32)" to "float"z'Mapping "real(kind=real64)" to "double"z,Mapping "integer(kind=int64)" to "long_long"z0Successfully applied user defined f2cmap changesNrY)rHr<rIrKrUrVs rÚ test_f2cmaprÎ:sA€õ �Ñ Ô €EØ×Ò�˜VÐ%M°UÐ%MÐ%MÐ%M×%SÒ%SÑ%UÔ%UÑVÔVÐVå Œ˜œ Ñ %Ô %ðIðI݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ2°cÐ9Ð9Ð9Ð9Ø;¸sÐBÐBÐBÐBØ<ÀÐCÐCÐCÐCØAÀSÐHÐHÐHÐHØAÀSÐHÐHÐHÐHÐHðIðIðIñIôIðIðIðIðIðIðIðIøøøðIðIðIðIðIðIsÁAB-Â-B1Â4B1cób—t|¦«}| tdd|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}t|¦«dksJ‚ ddd¦«dS#1swxYwYdS)z)Reduce verbosity CLI :: --quiet r@rÍz --quietrN) rrBrCrDrrErFrGrRÚlenrZs rÚ test_quietrÑLsê€õ �Ñ !Ô !€EØ×Ò�˜VÐ%D°UÐ%DÐ%DÐ%D×%JÒ%JÑ%LÔ%LÑMÔMÐMå Œ˜œ Ñ %Ô %ðð݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQÝ�3‰xŒx˜1Š}ˆ}ˆ}ˆ}ˆ}ðððñôðððððððøøøððððððsÁ;B$Â$B(Â+B(cóD—t|¦«}| tdd|›d� ¦«¦«t j|j¦«5t¦«| ¦«\}}d|vsJ‚ ddd¦«dS#1swxYwYdS)z-Increase verbosity CLI :: --verbose r@rÍz --verboseÚ analyzelineNrYrZs rÚ test_verboserÔZsé€õ �Ñ !Ô !€EØ×Ò�˜VÐ%F°UÐ%FÐ%FÐ%F×%LÒ%LÑ%NÔ%NÑOÔOÐOå Œ˜œ Ñ %Ô %ð$ð$݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØ Ð#Ð#Ð#Ð#Ð#ð$ð$ð$ñ$ô$ð$ð$ð$ð$ð$ð$ð$øøøð$ð$ð$ð$ð$ð$sÁ,BÂBÂBcóX—| tdd ¦«¦«tjt ¦«5t ¦«| ¦«\}}ddl}|j |  ¦«ksJ‚ ddd¦«dS#1swxYwYdS)z"Ensure version CLI :: -v r@zf2py -vrN) rBrCrDr`rarbrGrRÚnumpyÚ __version__Ústrip)rHrIrUrVÚnps rÚ test_versionrÚhsâ€ð ×Ò�˜V Y§_¢_Ñ%6Ô%6Ñ7Ô7Ð7å Œ•zÑ "Ô "ð-ð-݉ Œ ˆ Ø×!Ò!Ñ#Ô#‰ˆˆQØÐÐÐØŒ~ §¢¡¤Ò,Ð,Ð,Ð,Ð,ð -ð-ð-ñ-ô-ð-ð-ð-ð-ð-ð-ð-øøøð-ð-ð-ð-ð-ð-sÁA BÂB#Â&B#có~—t|¦«}| tdd|›d� ¦«¦«t j|j¦«5t¦«tjd¦«}tj |dd¬¦«}d}|j |ksJ‚ d d d ¦«d S#1swxYwYd S) z CLI :: -c r@rÍz -cz"python -c "import blah; blah.hi()"Tr®r¯r±N) rrBrCrDrrErFrGr²r³r´r·)r.rIrKr¹rºr»s rÚ test_npdistoprÜvs€õ �Ñ !Ô !€EØ×Ò�˜VÐ%?°UÐ%?Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHå Œ˜œ Ñ %Ô %ð#ð#݉ Œ ˆ Ý”+ÐDÑEÔEˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆØŒ{˜dÒ"Ð"Ð"Ð"Ð"ð #ð#ð#ñ#ô#ð#ð#ð#ð#ð#ð#ð#øøøð#ð#ð#ð#ð#ð#sÁA B2Â2B6Â9B6có—dS)z CLI :: -c --fcompiler NrÇrÇrrÚtest_npd_fcompilerrÞŠó €ð  €Drcó—dS)z CLI :: -c --compiler NrÇrÇrrÚtest_npd_compilerrá’rßrcó—dS)z$ CLI :: -c --help-fcompiler NrÇrÇrrÚtest_npd_help_fcompilerrãšrßrcó—dS)z CLI :: -c --f77exec NrÇrÇrrÚtest_npd_f77execrå¢rßrcó—dS)z CLI :: -c --f90exec NrÇrÇrrÚtest_npd_f90execrçªrßrcó—dS)z CLI :: -c --f77flags NrÇrÇrrÚtest_npd_f77flagsré²rßrcó—dS)z CLI :: -c --f90flags NrÇrÇrrÚtest_npd_f90flagsrëºrßrcó—dS)z CLI :: -c --opt NrÇrÇrrÚ test_npd_optríÂrßrcó—dS)z CLI :: -c --arch NrÇrÇrrÚ test_npd_archrïÊrßrcó—dS)z CLI :: -c --noopt NrÇrÇrrÚtest_npd_nooptrñÒrßrcó—dS)z CLI :: -c --noarch NrÇrÇrrÚtest_npd_noarchróÚrßrcó—dS)z CLI :: -c --debug NrÇrÇrrÚtest_npd_debugrõârßrcó—dS)z% CLI :: -c --link- NrÇrÇrrÚtest_npd_link_autor÷êrßrcó—dS)z/ CLI :: -c -L/path/to/lib/ -l NrÇrÇrrÚ test_npd_librùòrßrcó—dS)z CLI :: -D NrÇrÇrrÚtest_npd_definerûúrßrcó—dS)z CLI :: -U NrÇrÇrrÚtest_npd_undefinerýrßrcó—dS)z$ CLI :: -I/path/to/include/ NrÇrÇrrÚ test_npd_inclrÿ rßrcó—dS)z8 CLI :: .o .so .a NrÇrÇrrÚtest_npd_linkerrrßr)r )Hrµr€rCr³r²ÚpathlibrÚ collectionsrr`ÚrÚnumpy.f2py.f2py2errGrrÚfixturer.r1r4r7r<rMrWr[rdÚmarkÚxfailrprurzr~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õr÷rùrûrýrÿrrÇrrúr sÄðØ+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐÐÐÐÐØ"Ð"Ð"Ð"Ð"Ð"à € € € àÐÐÐÐÐØ-Ð-Ð-Ð-Ð-Ð-ð ˆ�HÐHÑ IÔ I€ðððððN€„�iÐ Ñ Ô ððñ!Ô ðð€„�iÐ Ñ Ô ððñ!Ô ðð€„�iÐ Ñ Ô ððñ!Ô ðð€„�iÐ Ñ Ô ððñ!Ô ðð€„�iÐ Ñ Ô ððñ!Ô ðð :ð :ð :ð )ð )ð )ð ,ð ,ð ,ð Cð Cð Cð„ÔðDðDñÔðDð.DðDðDð.DðDðDð<%ð%ð%ð".ð.ð.ð4$.ð$.ð$.ðN8ð8ð8ð"2ð2ð2ð"4ð4ð4ð$ ;ð ;ð ;ð 8ð8ð8ð,5ð5ð5ð$ @ð @ð @ð :ð :ð :ð „×ÒÐ5ÐÑ6Ô6ð#ð#ñ7Ô6ð#ð::ð:ð:ð2 >ð >ð >ð 0ð0ð0ð. ð ð ð ð ð ðIðIðIð$ ð ð ð $ð $ð $ð -ð -ð -ð„×ÒÐ5ÐÑ6Ô6ð #ð #ñ7Ô6ð #ð& ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð r