§
    ÈÁ³gÜl  ã                   óŽ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
Z
ddlmZ d dlmZ d dlmZ d„ Z ed	d
¦  «        ZdRd„Z e
j        d¬¦  «        d„ ¦   «         Z e
j        d¬¦  «        d„ ¦   «         Z e
j        d¬¦  «        d„ ¦   «         Z e
j        d¬¦  «        d„ ¦   «         Z e
j        d¬¦  «        d„ ¦   «         Z e
j        d¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!e
j"         #                    ej$        dk    d¬¦  «        d„ ¦   «         Z%e
j"         #                     e	j&        ¦   «         dk    p
ej$        dk    d ¬¦  «        d!„ ¦   «         Z'e
j"        j(        d"„ ¦   «         Z)d#„ Z*d$„ Z+d%„ Z,d&„ Z-d'„ Z.d(„ Z/d)„ Z0d*„ Z1d+„ Z2d,„ Z3d-„ Z4d.„ Z5d/„ Z6d0„ Z7e
j"         8                    d1¬¦  «        d2„ ¦   «         Z9d3„ Z:d4„ Z;d5„ Z<d6„ Z=d7„ Z>d8„ Z?d9„ Z@d:„ ZAd;„ ZBe
j"         8                    d1¬¦  «        d<„ ¦   «         ZCe
j"         #                     e	j&        ¦   «         dk    p
ej$        dk    d=¬¦  «        d>„ ¦   «         ZDe
j"         #                     e	j&        ¦   «         dk    p
ej$        dk    d=¬¦  «        d?„ ¦   «         ZEd@„ ZFdA„ ZGdB„ ZHdC„ ZIdD„ ZJdE„ ZKdF„ ZLdG„ ZMdH„ ZNdI„ ZOdJ„ ZPdK„ ZQdL„ ZRdM„ ZSdN„ ZTdO„ ZUdP„ ZVdQ„ ZWdS )Sé    N)ÚPath)Ú
namedtupleé   )Úutil)Úmain)ÚNOGIL_BUILDc                  ót   — t          j        ¦   «         st          j        d¦  «         d S t	          ¦   «          d S )Nz$CLI command needs a Fortran compiler)r   Úhas_fortran_compilerÚpytestÚskipÚf2pycli© ó    úZ/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/numpy/f2py/tests/test_f2py2e.pyÚcompiler_check_f2pyclir      s7   € ÝÔ$Ñ&Ô&ð ÝŒÐ:Ñ;Ô;Ð;Ð;Ð;å‰	Œ	ˆ	ˆ	ˆ	r   ÚPPathsz(finp, f90inp, pyf, wrap77, wrap90, cmodfÚuntitledc                 ó@  — t          | ¦  «        }t          |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     |› d�¦  «        |                     |› d�¦  «        |                     |› d�¦  «        ¬¦  «        S )ax  Takes 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)r   r   Úwith_suffixÚ	with_name)Ú	fname_inpÚmnameÚbpaths      r   Úget_io_pathsr"   $   s¡   € õ. �‰OŒO€EÝØ×Ò˜tÑ$Ô$Ø× Ò  Ñ(Ô(Ø×Ò˜fÑ%Ô%Ø�Š %Ð8Ð8Ð8Ñ9Ô9Ø�Š %Ð;Ð;Ð;Ñ<Ô<Ø�oŠo Ð0Ð0Ð0Ñ1Ô1ðñ ô ð r   Úsession)Úscopec                 ó´   — t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                     |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_f90r6   K   sV   € õ Œ<˜ ¨¨}Ñ=Ô=×GÒGÑIÔI€DØ	×	#Ò	#Ñ	%Ô	%¨Ñ	3€BØ‡M‚M�$ €MÑ)Ô)Ð)Ø€Ir   c                 ó´   — t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                     |d¬¦  «         |S )z(F90 file for testing warnings in gh23598r'   r(   Úcrackfortranzgh23598Warn.f90r*   r+   r-   r2   s      r   Úgh23598_warnr9   T   sX   € õ Œ<˜ ¨Ð8IÑJÔJ×TÒTÑVÔV€DØ	×	#Ò	#Ñ	%Ô	%Ð(9Ñ	9€BØ‡M‚M�$ €MÑ)Ô)Ð)Ø€Ir   c                 ó´   — t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                     |d¬¦  «         |S )z8F90 file for testing disallowed CLI arguments in ghff819r'   r(   r)   zgh_22819.pyfr*   r+   r-   r2   s      r   Úgh22819_clir;   ]   sV   € õ Œ<˜ ¨¨~Ñ>Ô>×HÒHÑJÔJ€DØ	×	#Ò	#Ñ	%Ô	%¨Ñ	6€BØ‡M‚M�$ €MÑ)Ô)Ð)Ø€Ir   c                 ó´   — t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                     |d¬¦  «         |S )ú'Generates a single f77 file for testingr'   r(   r)   zhi77.fzhello.fr*   r+   r-   r2   s      r   Úhello_world_f77r>   f   sV   € õ Œ<˜ ¨¨xÑ8Ô8×BÒBÑDÔD€DØ	×	#Ò	#Ñ	%Ô	%¨	Ñ	1€BØ‡M‚M�$ €MÑ)Ô)Ð)Ø€Ir   c                 ó´   — t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                     |d¬¦  «         |S )r=   r'   r(   Úreturn_realzfoo77.fzfoo.fr*   r+   r-   r2   s      r   Úretreal_f77rA   o   sV   € õ Œ<˜ ¨°yÑAÔA×KÒKÑMÔM€DØ	×	#Ò	#Ñ	%Ô	%¨Ñ	/€BØ‡M‚M�$ €MÑ)Ô)Ð)Ø€Ir   c                 ób  — t          j        dddd¦  «                             ¦   «         }t          j        dddd¦  «                             ¦   «         }|                      ¦   «         dz  }|                      ¦   «         dz  }|                     |d¬	¦  «         |                     |d¬	¦  «         |S )
r&   r'   r(   Úf2cmapzisoFortranEnvMap.f90z.f2py_f2cmapz
f2cmap.f90Úmapfiler*   r+   r-   )r3   r4   rC   r5   Úfmaps        r   Ú
f2cmap_f90rF   w   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Ñ-Ô-Ð-Ø€Ir   c                 ó€  — t          |¦  «        }|                     t          dd|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          d„ |j                             d¦  «        D ¦   «         }d|vsJ ‚d|vsJ ‚d|v sJ ‚d|v sJ ‚	 d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zÝCheck that module names are handled correctly
    gh-22819
    Essentially, the -m name cannot be used to import the module, so the module
    named in the .pyf needs to be used instead

    CLI :: -m and a .pyf file
    Úargvúf2py -m blah c                 óD   — g | ]}|                      ¦   «         ¯|j        ‘ŒS r   )Úis_fileÚname)Ú.0Úitems     r   ú
<listcomp>z$test_gh22819_cli.<locals>.<listcomp>’   s'   € ÐUÐUÐU 4ÀdÇlÂlÁnÄnÐU�T”YÐUÐUÐUr   Ú*zblahmodule.czblah-f2pywrappers.fztest_22819-f2pywrappers.fztest_22819module.czIgnoring blahN)	r   ÚsetattrÚsysÚsplitr   Ú	switchdirÚparentr   Úrglob)Úcapfdr;   ÚmonkeypatchÚipathÚ	gen_pathss        r   Útest_gh22819_clir[   †   s'  € õ �ÑÔ€EØ×Ò�˜VÐ%<°UÐ%<Ð%<×%BÒ%BÑ%DÔ%DÑEÔEÐEÝ	Œ˜œÑ	%Ô	%ð ð Ý‰	Œ	ˆ	ØUÐU¨5¬<×+=Ò+=¸cÑ+BÔ+BÐUÑUÔUˆ	Ø YÐ.Ð.Ð.Ð.Ø$¨IÐ5Ð5Ð5Ð5Ø*¨iÐ7Ð7Ð7Ð7Ø# yÐ0Ð0Ð0Ð0Øðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁAB3Â3B7Â:B7c                 ón  — t          |¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          j        t          d¬¦  «        5  t          ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zBOnly one .pyf file allowed
    gh-22819
    CLI :: .pyf files
    rH   rI   z
 hello.pyfzOnly one .pyf file per call)ÚmatchN)r   rQ   rR   rS   r   rT   rU   r   ÚraisesÚ
ValueErrorr   )rW   r;   rX   rY   s       r   Útest_gh22819_many_pyfr`   š   s+  € õ
 �ÑÔ€EØ×Ò�˜VÐ%F°UÐ%FÐ%FÐ%F×%LÒ%LÑ%NÔ%NÑOÔOÐOÝ	Œ˜œÑ	%Ô	%ð ð ÝŒ]�:Ð-JÐKÑKÔKð 	ð 	Ý‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   ÁB*Á7BÂB*ÂB	ÂB*ÂB	ÂB*Â*B.Â1B.c                 óZ  — t          |d¬¦  «        }|j        }|                     t          dd|› d�                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |j	         
                    ¦   «         }d|vsJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚtest©r    rH   úf2py z -m testzintproductf2pywrap, intpr)r"   r   rQ   rR   rS   r   rT   rU   r   r   r/   )rW   r9   rX   ÚfoutlrY   Úwrappers         r   Útest_gh23598_warnrg   ¦   sú   € Ý˜¨VÐ4Ñ4Ô4€EØŒL€EØ×ÒÝˆVØ�ÐÐÐ×%Ò%Ñ'Ô'ñ)ô )ð )õ 
Œ˜œÑ	%Ô	%ð :ð :Ý‰	Œ	ˆ	Ø”,×(Ò(Ñ*Ô*ˆØ*°'Ð9Ð9Ð9Ð9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :s   Á$.B Â B$Â'B$c                 ó¾  — t          |¦  «        }t          |¦  «        j        dz   }|                     t          dd|› d|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}d|v sJ ‚t          |› ¦  «         
                    ¦   «         sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zIEnsures that a signature file is generated via the CLI
    CLI :: -h
    r   rH   zf2py -h ú úSaving signatures to fileN)r   ÚstemrQ   rR   rS   r   rT   rU   r   Ú
readouterrÚexists)rW   r6   rX   rY   ÚopathÚoutÚ_s          r   Útest_gen_pyfrq   ³   s%  € õ �Ñ!Ô!€EÝ�Ñ!Ô!Ô&¨Ñ/€EØ×Ò�˜VÐ%?°Ð%?Ð%?¸Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHå	Œ˜œÑ	%Ô	%ð )ð )Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ*¨cÐ1Ð1Ð1Ð1Ý�u�JÑÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(ð	)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )s   Á4ACÃCÃCc                 óN  — t          |¦  «        }|                     t          dd|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚d|v sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zHEnsures that a signature file can be dumped to stdout
    CLI :: -h
    rH   zf2py -h stdout rj   zfunction hi() ! in N©	r   rQ   rR   rS   r   rT   rU   r   rl   ©rW   r6   rX   rY   ro   rp   s         r   Útest_gen_pyf_stdoutru   Â   s÷   € õ �Ñ!Ô!€EØ×Ò�˜VÐ%>°uÐ%>Ð%>×%DÒ%DÑ%FÔ%FÑGÔGÐGÝ	Œ˜œÑ	%Ô	%ð ,ð ,Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ*¨cÐ1Ð1Ð1Ð1Ø$¨Ð+Ð+Ð+Ð+Ð+ð	,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   Á2BÂBÂ!Bc                 óì  — t          |¦  «        }|                     t          dd|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          d¦  «                             dd¬¦  «         t          j	        t          ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚	 ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )	zjEnsures that the CLI refuses to overwrite signature files
    CLI :: -h without --overwrite-signature
    rH   úf2py -h faker.pyf ú	faker.pyfú	Fake newsr*   r+   z&Use --overwrite-signature to overwriteN)r   rQ   rR   rS   r   rT   rU   r1   r   r^   Ú
SystemExitr   rl   )rW   r6   rX   rY   rp   Úerrs         r   Útest_gen_pyf_no_overwriter|   Ï   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ð Cs6   Á>C)Â,CÃC)ÃC	ÃC)ÃC	ÃC)Ã)C-Ã0C-)é   é   zPython 3.12 required)Úreasonc                 óB  — t          |¦  «        }|                     t          dd|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z@Check that modules are named correctly

    CLI :: defaults
    rH   zf2py --backend meson -c zuntitledmodule.cN)	r   rQ   rR   rS   r   rT   rU   r   rl   rt   s         r   Útest_untitled_clir�   Þ   sé   € õ �Ñ!Ô!€EØ×Ò�˜VÐ%GÀÐ%GÐ%G×%MÒ%MÑ%OÔ%OÑPÔPÐPÝ	Œ˜œÑ	%Ô	%ð )ð )ÝÑ Ô Ð Ø×!Ò!Ñ#Ô#‰ˆˆQØ! SÐ(Ð(Ð(Ð(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )s   Á,BÂBÂBÚLinuxzCompiler and 3.12 requiredc           	      óœ  — d}t          ||¬¦  «        }|j        }|                     t          dd|› d|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}d|v sJ ‚	 ddd¦  «         n# 1 swxY w Y   |                     t          dd                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}d	|v sJ ‚	 ddd¦  «         n# 1 swxY w Y   d
}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}d|v sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zqCheck that no distutils imports are performed on 3.12
    CLI :: --fcompiler --help-link --backend distutils
    Úhirc   rH   rd   z -c --fcompiler=gfortran -m z%--fcompiler cannot be used with mesonNzf2py --help-linkzUse --dep for meson buildsÚhi2z -c -m z --backend distutilsz.Cannot use distutils backend with Python>=3.12)r"   r   rQ   rR   rS   r   rT   rU   r   rl   r   )rW   r6   rX   ÚMNAMEre   rY   ro   rp   s           r   Ú!test_no_py312_distutils_fcompilerr‡   ì   sÉ  € ð
 €EÝ˜°Ð6Ñ6Ô6€EØŒL€EØ×ÒÝˆVÐG˜UÐGÐGÀÐGÐG×MÒMÑOÔOñô ð õ 
Œ˜œÑ	%Ô	%ð >ð >ÝÑ Ô Ð Ø×!Ò!Ñ#Ô#‰ˆˆQØ6¸#Ð=Ð=Ð=Ð=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ð ×ÒÝˆVÐ'×-Ò-Ñ/Ô/ñô ð õ 
Œ˜œÑ	%Ô	%ð 3ð 3Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ+¨sÐ2Ð2Ð2Ð2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð €EØ×ÒÝˆVÐF˜UÐFÐF¨5ÐFÐFÐF×LÒLÑNÔNñô ð õ 
Œ˜œÑ	%Ô	%ð Gð GÝ‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ?À3ÐFÐFÐFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gs6   Á(,B!Â!B%Â(B%Ã3,D,Ä,D0Ä3D0Æ,GÇGÇGc                 óÚ  — t          |d¬¦  «        }|j        }d}d}|                     t          dd|› d|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}|                     ¦   «         D ]}	d|	› d	�|v sJ ‚Œ|                     ¦   «         D ]}
d
|
› d�|v sJ ‚Œ	 ddd¦  «         dS # 1 swxY w Y   dS )z9Tests that functions can be skipped
    CLI :: skip:
    rb   rc   út0 t4 t8 sd s8 s4útd s0rH   rd   z -m test skip: z=buildmodule: Could not found the body of interfaced routine "ú". Skipping.úConstructing wrapper function "ú"N©
r"   r   rQ   rR   rS   r   rT   rU   r   rl   )rW   rA   rX   re   rY   ÚtoskipÚ	remainingro   r{   ÚskeyÚrkeys              r   Útest_f2py_skipr“     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}|                     t          dd|› d|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  	                    ¦   «         \  }}|                     ¦   «         D ]}	d|	› d	�|v sJ ‚Œ|                     ¦   «         D ]}
d
|
› d�|v sJ ‚Œ	 ddd¦  «         dS # 1 swxY w Y   dS )z>Test that functions can be kept by only:
    CLI :: only:
    rb   rc   r‰   rŠ   rH   rd   z -m test only: ú<buildmodule: Could not find the body of interfaced routine "r‹   rŒ   r�   NrŽ   )rW   rA   rX   re   rY   r�   Útokeepro   r{   r‘   r’   s              r   Útest_f2py_onlyr˜   $  sŒ  € õ ˜¨FÐ3Ñ3Ô3€EØŒJ€EØ €FØ€FØ×ÒÝˆVØ.�Ð.Ð. fÐ.Ð.×4Ò4Ñ6Ô6ñ8ô 8ð 8õ 
Œ˜œÑ	%Ô	%ð 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ð Dr”   c                 ó  — t          |d¬¦  «        }|j        }d}t          |¦  «        }d}d}	|                     t          dd|› d|	› d	|› d
|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          |  
                    ¦   «         \  }
}|                     ¦   «         D ]}d|› d�|v sJ ‚Œ|                     ¦   «         D ]}d|› d�|
v sJ ‚Œ	 ddd¦  «         dS # 1 swxY w Y   dS )zfTests that it is possible to return to file processing mode
    CLI :: :
    BUG: numpy-gh #20520
    rb   rc   r‰   ztd s0 hiÚblahrH   rd   ú -m z only: z : r–   r‹   rŒ   r�   N)r"   r   r   rQ   rR   rS   r   rT   rU   r   rl   )rW   r6   rA   rX   re   rY   r�   Úipath2r—   r    ro   r{   r‘   r’   s                 r   Útest_file_processing_switchr�   ;  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ð Ds   ÂA(C7Ã7C;Ã>C;c                 óŒ  — d}t          ||¬¦  «        }|j        }|                     t          dd|› d|› �                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          ddd¦  «         n# 1 swxY w Y   t          j
        |j        ¦  «        sJ ‚t          j
        |j        ¦  «        sJ ‚dS )zHChecks the generation of files based on a module name
    CLI :: -m
    r„   rc   rH   rd   r›   N)r"   r   rQ   rR   rS   r   rT   rU   r   r   rm   r   r   )rW   r6   rX   r†   re   rY   s         r   Útest_mod_gen_f77rŸ   Y  sÿ   € ð €EÝ˜°Ð6Ñ6Ô6€EØŒL€EØ×Ò�˜VÐ%?¨UÐ%?Ð%?¸Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHÝ	Œ˜œÑ	%Ô	%ð ð Ý‰	Œ	ˆ	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ Œ;�u”{Ñ#Ô#Ð#Ð#Ð#åŒ;�u”|Ñ$Ô$Ð$Ð$Ð$Ð$Ð$s   Á(BÂBÂ
Bc           	      óÌ  — d}t          ||¬¦  «        }|j        }|                     t          dd|› d|› d�                     ¦   «         ¦  «         t          j        |j        ¦  «        5  t          ¦   «          t          d¦  «         
                    ¦   «         5 }|                     ¦   «         }d|v sJ ‚	 d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z�Check that pyf files are correctly generated with module structure
    CLI :: -m <name> -h pyf_file
    BUG: numpy-gh #20520
    r„   rc   rH   rd   r›   z
 -h hi.pyfzhi.pyfzpython module hiN)r"   r   rQ   rR   rS   r   rT   rU   r   r   ÚopenÚread)rW   r>   rX   r†   re   rY   ÚhipyfÚpyfdats           r   Útest_mod_gen_gh25263r¥   j  sd  € ð
 €EÝ˜°Ð6Ñ6Ô6€EØŒJ€EØ×Ò�˜VÐ%I¨UÐ%IÐ%I¸Ð%IÐ%IÐ%I×%OÒ%OÑ%QÔ%QÑRÔRÐRÝ	Œ˜œÑ	%Ô	%ð 0ð 0Ý‰	Œ	ˆ	Ý�(‰^Œ^× Ò Ñ"Ô"ð 	0 eØ—Z’Z‘\”\ˆFØ%¨Ð/Ð/Ð/Ð/Ð/ð	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   Á)0CÂCÂ5CÃC	ÃCÃC	Ã	CÃCÃ Cc                 ód  — t          |d¬¦  «        }|j        }t          j        d¦  «        }t          j        d¦  «        }|                     t
          dd|› d�                     ¦   «         ¦  «         t          j        |j	        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}|                     |¦  «        €J ‚|                     |¦  «        �J ‚	 ddd¦  «         n# 1 swxY w Y   |                     t
          dd|› d	�                     ¦   «         ¦  «         t          j        |j	        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}|                     |¦  «        �J ‚|                     |¦  «        €J ‚	 ddd¦  «         dS # 1 swxY w Y   dS )
zHLowers cases by flag or when -h is present

    CLI :: --[no-]lower
    rb   rc   zHI\(\)zhi\(\)rH   rd   z -m test --lowerNz -m test --no-lower)r"   r   ÚreÚcompilerQ   rR   rS   r   rT   rU   r   rl   Úsearch©	rW   r>   rX   re   rY   ÚcapshiÚcapsloro   rp   s	            r   Útest_lower_cmodr­   z  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&   ÂAC-Ã-C1Ã4C1ÅAF%Æ%F)Æ,F)c           	      ó„  — t          |d¬¦  «        }|j        }t          j        d¦  «        }t          j        d¦  «        }|                     t
          dd|› d|j        › d�                     ¦   «         ¦  «         t          j	        |j
        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}|                     |¦  «        €J ‚|                     |¦  «        �J ‚	 d	d	d	¦  «         n# 1 swxY w Y   |                     t
          dd|› d|j        › d
�                     ¦   «         ¦  «         t          j	        |j
        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}|                     |¦  «        �J ‚|                     |¦  «        €J ‚	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )z^Lowers cases in signature files by flag or when -h is present

    CLI :: --[no-]lower -h
    rb   rc   z	Block: HIz	Block: hirH   rd   z -h z -m test --overwrite-signatureNz) -m test --overwrite-signature --no-lower)r"   r   r§   r¨   rQ   rR   r   rS   r   rT   rU   r   rl   r©   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&   ÂAC5Ã5C9Ã<C9ÅAF5Æ5F9Æ<F9c           
      ó^  — t          |¦  «        }d}d}|                     t          dd|› d|› d|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|› d�|v sJ ‚	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zNEnsures that the build directory can be specified

    CLI :: --build-dir
    rš   ÚtttmprH   úf2py -m ri   z --build-dir zWrote C/API module "r�   Nrs   )rW   r6   rX   rY   r    Úodirro   rp   s           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          |¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          d¦  «                             dd¬¦  «         t          ¦   «          |  	                    ¦   «         \  }}d|v sJ ‚	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zXEnsures that the build directory can be specified

    CLI :: --overwrite-signature
    rH   rw   z --overwrite-signaturerx   ry   r*   r+   rj   N)
r   rQ   rR   rS   r   rT   rU   r1   r   rl   rt   s         r   Útest_overwriter¶   Ì  s  € õ
 �Ñ!Ô!€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   ÁAB9Â9B=Ã B=c           	      óö  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚t          |› d�¦  «         	                    ¦   «         5 }d| 
                    ¦   «         v sJ ‚	 d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zJEnsures that TeX documentation is written out

    CLI :: --latex-doc
    rš   rH   r²   ri   z --latex-docúDocumentation is saved to fileú
module.texú\documentclassN©r   rQ   rR   rS   r   rT   rU   r   rl   r¡   r¢   ©rW   r6   rX   rY   r    ro   rp   Ú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   Á AC.Â0CÃ
C.ÃC	ÃC.ÃC	ÃC.Ã.C2Ã5C2c           	      óN  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|vsJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zMEnsures that TeX documentation is written out

    CLI :: --no-latex-doc
    rš   rH   r²   ri   z --no-latex-docr¸   Nrs   ©rW   r6   rX   rY   r    ro   rp   s          r   Útest_nolatexdocrÁ   ï  s  € õ
 �Ñ!Ô!€EØ€EØ×Ò�˜VØA 5ÐAÐA¨5ÐAÐAÐA×GÒGÑIÔIñKô Kð Kõ 
Œ˜œÑ	%Ô	%ð ;ð ;Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ/°sÐ:Ð:Ð:Ð:Ð:ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;ó   Á ,BÂBÂ!Bc           	      óø  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚t          d|› d�¦  «         	                    ¦   «         5 }d	| 
                    ¦   «         vsJ ‚	 d
d
d
¦  «         n# 1 swxY w Y   d
d
d
¦  «         d
S # 1 swxY w Y   d
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
    rš   rH   r²   ri   z --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   Á AC/Â1CÃC/ÃC	ÃC/ÃC	ÃC/Ã/C3Ã6C3c           	      óø  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚t          d|› d�¦  «         	                    ¦   «         5 }d	| 
                    ¦   «         v sJ ‚	 d
d
d
¦  «         n# 1 swxY w Y   d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zIEnsures that RsT documentation is written out

    CLI :: --rest-doc
    rš   rH   r²   ri   z --rest-docú#ReST Documentation is saved to filerÄ   zmodule.restz.. -*- rest -*-Nr»   )rW   r6   rX   rY   r    ro   rp   Ú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}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|vsJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zLEnsures that TeX documentation is written out

    CLI :: --no-rest-doc
    rš   rH   r²   ri   z --no-rest-docrÈ   Nrs   rÀ   s          r   Útest_norestexdocrÌ   '  s  € õ
 �Ñ!Ô!€EØ€EØ×Ò�˜VØ@ 5Ð@Ð@¨5Ð@Ð@Ð@×FÒFÑHÔHñJô Jð Jõ 
Œ˜œÑ	%Ô	%ð @ð @Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ4¸CÐ?Ð?Ð?Ð?Ð?ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @rÂ   c           	      ó¾  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          d|› d�¦  «                             ¦   «         5 }d| 	                    ¦   «         v sJ ‚	 d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zIEnsures that debugging wrappers are written

    CLI :: --debug-capi
    rš   rH   r²   ri   z --debug-capirÄ   r   z#define DEBUGCFUNCSN©
r   rQ   rR   rS   r   rT   rU   r   r¡   r¢   )rW   r6   rX   rY   r    Úocmods         r   Útest_debugcapirÐ   7  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ÃCz2Consistently fails on CI; noisy so skip not xfail.c           	      óä  — t          | ¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          j        t          j	        › d�¦  «        }t          j        |dd¬	¦  «        }d
}t          j        d¦  «        }|j        |k    sJ ‚|j        |k    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zEEnsures that debugging wrappers work

    CLI :: --debug-capi -c
    rš   rH   r²   ri   z -c --debug-capiú -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)r   rQ   rR   rS   r   rT   rU   r   ÚshlexÚ
executableÚ
subprocessÚrunÚtextwrapÚdedentÚstdoutÚstderr)r6   rX   rY   r    Úcmd_runÚroutÚeoutÚeerrs           r   Útest_debugcapi_bldrã   G  sN  € õ �Ñ!Ô!€EØ€EØ×Ò�˜VØB 5ÐBÐB¨5ÐBÐBÐB×HÒHÑJÔJñLô Lð Lõ 
Œ˜œÑ	%Ô	%ð #ð #Ý‰	Œ	ˆ	Ý”+¥¤ÐOÐOÐOÑPÔPˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆÝŒð 	 ñ 	ô 	ˆð Œ{˜dÒ"Ð"Ð"Ð"ØŒ{˜dÒ"Ð"Ð"Ð"Ð"ð!#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #s   Á A7C%Ã%C)Ã,C)c           	      ón  — t          |¦  «        }d}|                     t          dd|› d|› �                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          ddd¦  «         n# 1 swxY w Y   |                      ¦   «         \  }}d|v sJ ‚|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zoEnsures that fortran subroutine wrappers for F77 are included by default

    CLI :: --[no]-wrap-functions
    rš   rH   r²   ri   Nú Fortran 77 wrappers are saved toz --wrap-functionsrs   rÀ   s          r   Útest_wrapfunc_defræ   e  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.Ä1D.c           	      óN  — t          |¦  «        }d}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|vsJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )zeEnsures that fortran subroutine wrappers for F77 can be disabled

    CLI :: --no-wrap-functions
    rš   rH   r²   ri   z --no-wrap-functionsrå   Nrs   rÀ   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}|                     t          dd|› d|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          d|› d�¦  «                             ¦   «         5 }| 	                    ¦   «         }d|v sJ ‚d	|v sJ ‚	 d
d
d
¦  «         n# 1 swxY w Y   d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zcAdd to the include directories

    CLI :: -include
    TODO: Document this in the help string
    rš   rH   r²   ri   z' -include<stdbool.h> -include<stdio.h> rÄ   r   z#include <stdbool.h>z#include <stdio.h>NrÎ   )rW   r6   rX   rY   r    rÏ   Ú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Ã!Cc                  ó   — dS )z?Add to the include directories

    CLI :: --include-paths
    Nr   r   r   r   Útest_inclpathrí   ¥  ó	   € ð 	€Dr   c                  ó   — dS )z;Add to the include directories

    CLI :: --help-link
    Nr   r   r   r   Ú
test_hlinkrð   ®  rî   r   c                 ót  — t          |¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚d|v sJ ‚d|v sJ ‚d|v sJ ‚d|v sJ ‚	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zOCheck that Fortran-to-Python KIND specs can be passed

    CLI :: --f2cmap
    rH   rI   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 changesNrs   )rW   rF   rX   rY   ro   rp   s         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ð Is   ÁAB-Â-B1Â4B1c                 ób  — t          |¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}t          |¦  «        dk    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z)Reduce verbosity

    CLI :: --quiet
    rH   rI   z --quietr   N)
r   rQ   rR   rS   r   rT   rU   r   rl   Úlenrt   s         r   Ú
test_quietrõ   É  sê   € õ
 �Ñ!Ô!€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          |¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          |                      ¦   «         \  }}d|v sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z-Increase verbosity

    CLI :: --verbose
    rH   rI   z
 --verboseÚanalyzelineNrs   rt   s         r   Útest_verboserø   ×  sé   € õ
 �Ñ!Ô!€EØ×Ò�˜VÐ%F°UÐ%FÐ%FÐ%F×%LÒ%LÑ%NÔ%NÑOÔOÐOå	Œ˜œÑ	%Ô	%ð $ð $Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØ Ð#Ð#Ð#Ð#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   Á,BÂBÂBc                 óX  — |                      t          dd                     ¦   «         ¦  «         t          j        t
          ¦  «        5  t          ¦   «          |                      ¦   «         \  }}ddl}|j	        | 
                    ¦   «         k    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z"Ensure version

    CLI :: -v
    rH   zf2py -vr   N)rQ   rR   rS   r   r^   rz   r   rl   ÚnumpyÚ__version__Ústrip)rW   rX   ro   rp   Únps        r   Útest_versionrþ   å  sâ   € ð
 ×Ò�˜V Y§_¢_Ñ%6Ô%6Ñ7Ô7Ð7å	Œ•zÑ	"Ô	"ð -ð -Ý‰	Œ	ˆ	Ø×!Ò!Ñ#Ô#‰ˆˆQØÐÐÐØŒ~ §¢¡¤Ò,Ð,Ð,Ð,Ð,ð	-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   ÁA	BÂB#Â&B#c                 ó˜  — t          | ¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          j        t          j	        › d�¦  «        }t          j        |dd¬¦  «        }d}|j        |k    sJ ‚	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z
    CLI :: -c
    rH   rI   z -crÒ   TrÓ   rÔ   rÖ   N)r   rQ   rR   rS   r   rT   rU   r   r×   rØ   rÙ   rÚ   rÝ   )r6   rX   rY   rß   rà   rá   s         r   Útest_npdistopr   ó  s  € õ
 �Ñ!Ô!€EØ×Ò�˜VÐ%?°UÐ%?Ð%?Ð%?×%EÒ%EÑ%GÔ%GÑHÔHÐHå	Œ˜œÑ	%Ô	%ð #ð #Ý‰	Œ	ˆ	Ý”+¥¤ÐOÐOÐOÑPÔPˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆØŒ{˜dÒ"Ð"Ð"Ð"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #s   ÁAB?Â?CÃCz*Compiler and Python 3.12 or newer requiredc                 óþ  — t          | ¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          j        › d�}t          r|dz  }n|dz  }t          j        |¦  «        }t          j        |dd¬	¦  «        }d
}|j        |k    sJ ‚t          rd|j        v sJ ‚|j        dk    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z.
    CLI :: --no-freethreading-compatible
    rH   rI   z! -c --no-freethreading-compatibleú -c "import blah; blah.hi();z1import sys; assert sys._is_gil_enabled() is True"r�   TrÓ   rÔ   rÖ   zHThe global interpreter lock (GIL) has been enabled to load module 'blah'r   N©r   rQ   rR   rS   r   rT   rU   r   rØ   r   r×   rÙ   rÚ   rÝ   rÞ   Ú
returncode©r6   rX   rY   Úcmdrß   rà   rá   s          r   Ú test_no_freethreading_compatibler    sb  € õ �Ñ!Ô!€EØ×Ò�˜VÐ%]°UÐ%]Ð%]Ð%]×%cÒ%cÑ%eÔ%eÑfÔfÐfå	Œ˜œÑ	%Ô	%ð $ð $ÝÑ Ô Ð Ý”Ð>Ð>Ð>ˆÝð 	ØÐGÑGˆCˆCà�4‰KˆCÝ”+˜cÑ"Ô"ˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆØŒ{˜dÒ"Ð"Ð"Ð"Ýð 	mØ]ÐaeÔalÐlÐlÐlÐlØŒ !Ò#Ð#Ð#Ð#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   ÁB	C2Ã2C6Ã9C6c                 óô  — t          | ¦  «        }|                     t          dd|› d�                     ¦   «         ¦  «         t	          j        |j        ¦  «        5  t          ¦   «          t          j        › d�}t          r|dz  }n|dz  }t          j        |¦  «        }t          j        |dd¬	¦  «        }d
}|j        |k    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )z+
    CLI :: --freethreading_compatible
    rH   rI   z -c --freethreading-compatibler  z2import sys; assert sys._is_gil_enabled() is False"r�   TrÓ   rÔ   rÖ   Ú r   Nr  r  s          r   Útest_freethreading_compatibler
    sW  € õ �Ñ!Ô!€EØ×Ò�˜VÐ%Z°UÐ%ZÐ%ZÐ%Z×%`Ò%`Ñ%bÔ%bÑcÔcÐcå	Œ˜œÑ	%Ô	%ð $ð $ÝÑ Ô Ð Ý”Ð>Ð>Ð>ˆÝð 	ØÐHÑHˆCˆCà�4‰KˆCÝ”+˜cÑ"Ô"ˆÝŒ~˜g°dÀWÐMÑMÔMˆØˆØŒ{˜dÒ"Ð"Ð"Ð"ØŒ{˜bÒ Ð Ð Ð ØŒ !Ò#Ð#Ð#Ð#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   ÁBC-Ã-C1Ã4C1c                  ó   — dS )z
    CLI :: -c --fcompiler
    Nr   r   r   r   Útest_npd_fcompilerr  7  ó	   € ð
 	€Dr   c                  ó   — dS )z
    CLI :: -c --compiler
    Nr   r   r   r   Útest_npd_compilerr  ?  r  r   c                  ó   — dS )z$
    CLI :: -c --help-fcompiler
    Nr   r   r   r   Útest_npd_help_fcompilerr  G  r  r   c                  ó   — dS )z
    CLI :: -c --f77exec
    Nr   r   r   r   Útest_npd_f77execr  O  r  r   c                  ó   — dS )z
    CLI :: -c --f90exec
    Nr   r   r   r   Útest_npd_f90execr  W  r  r   c                  ó   — dS )z
    CLI :: -c --f77flags
    Nr   r   r   r   Útest_npd_f77flagsr  _  r  r   c                  ó   — dS )z
    CLI :: -c --f90flags
    Nr   r   r   r   Útest_npd_f90flagsr  g  r  r   c                  ó   — dS )z
    CLI :: -c --opt
    Nr   r   r   r   Útest_npd_optr  o  r  r   c                  ó   — dS )z
    CLI :: -c --arch
    Nr   r   r   r   Útest_npd_archr  w  r  r   c                  ó   — dS )z
    CLI :: -c --noopt
    Nr   r   r   r   Útest_npd_nooptr    r  r   c                  ó   — dS )z
    CLI :: -c --noarch
    Nr   r   r   r   Útest_npd_noarchr!  ‡  r  r   c                  ó   — dS )z
    CLI :: -c --debug
    Nr   r   r   r   Útest_npd_debugr#  �  r  r   c                  ó   — dS )z%
    CLI :: -c --link-<resource>
    Nr   r   r   r   Útest_npd_link_autor%  —  r  r   c                  ó   — dS )z/
    CLI :: -c -L/path/to/lib/ -l<libname>
    Nr   r   r   r   Útest_npd_libr'  Ÿ  r  r   c                  ó   — dS )z
    CLI :: -D<define>
    Nr   r   r   r   Útest_npd_definer)  §  r  r   c                  ó   — dS )z
    CLI :: -U<name>
    Nr   r   r   r   Útest_npd_undefiner+  ¯  r  r   c                  ó   — dS )z$
    CLI :: -I/path/to/include/
    Nr   r   r   r   Útest_npd_inclr-  ·  r  r   c                  ó   — dS )z8
    CLI :: <filename>.o <filename>.so <filename>.a
    Nr   r   r   r   Útest_npd_linkerr/  ¿  r  r   )r   )Xr§   r×   rÙ   rR   rÛ   Úpathlibr   Úcollectionsr   Úplatformr   r	  r   Únumpy.f2py.f2py2er   r   Únumpy.testing._private.utilsr   r   r   r"   Úfixturer6   r9   r;   r>   rA   rF   r[   r`   rg   rq   ru   r|   ÚmarkÚskipifÚversion_infor�   Úsystemr‡   Úxfailr“   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  r!  r#  r%  r'  r)  r+  r-  r/  r   r   r   ú<module>r;     s}  ðØ 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à €€€à €€€à Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð 
ˆ�HÐHÑ	IÔ	I€ðð ð ð ðN €„�iÐ Ñ Ô ðð ñ !Ô ðð €„�iÐ Ñ Ô ðð ñ !Ô ðð €„�iÐ Ñ Ô ðð ñ !Ô ðð €„�iÐ Ñ Ô ðð ñ !Ô ðð €„�iÐ Ñ Ô ðð ñ !Ô ðð €„�iÐ Ñ Ô ðð ñ !Ô ððð ð ð(	ð 	ð 	ð
:ð 
:ð 
:ð)ð )ð )ð
,ð 
,ð 
,ðCð Cð Cð „×Ò�CÔ$¨Ò/Ð8NÐÑOÔOð
)ð 
)ñ PÔOð
)ð „×Ò�_�X”_Ñ&Ô&¨'Ò1ÐS°sÔ7GÈ7Ò7RÐ\xÐÑyÔyðGð Gñ zÔyðGð> „ÔðDð Dñ ÔðDð.Dð Dð Dð.Dð Dð Dð<%ð %ð %ð"0ð 0ð 0ð .ð .ð .ð4$.ð $.ð $.ðN8ð 8ð 8ð"2ð 2ð 2ð"4ð 4ð 4ð$;ð ;ð ;ð 8ð 8ð 8ð,5ð 5ð 5ð$@ð @ð @ð :ð :ð :ð  „×ÒÐMÐÑNÔNð#ð #ñ OÔNð#ð::ð :ð :ð2>ð >ð >ð 0ð 0ð 0ð.	ð 	ð 	ð	ð 	ð 	ðIð Ið Ið$ð ð ð$ð $ð $ð-ð -ð -ð „×ÒÐMÐÑNÔNð#ð #ñ OÔNð#ð „×Ò�_�X”_Ñ&Ô&¨'Ò1ÐQ°cÔ6FÈ'Ò6QØGð ñ Iô Ið$ð $ñIô Ið$ð. „×Ò�_�X”_Ñ&Ô&¨'Ò1ÐQ°cÔ6FÈ'Ò6QØGð ñ Iô Ið$ð $ñIô Ið$ð2	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð 	ð 	r   