Ë
    6Š·j-q  ã                   óŽ  — d dl Z d dlZ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mZ d dlmZ ddlmZ d„ Z ed	d
«      ZdSd„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jF                  jI                  ejJ                  dk  d¬«      ejF                  jL                  d„ «       «       Z'ejF                  jL                  d„ «       Z(ejF                  jR                  d„ «       Z*d „ Z+d!„ Z,d"„ Z-d#„ Z.d$„ Z/d%„ Z0d&„ Z1d'„ Z2d(„ Z3d)„ Z4ejF                  jL                  d*„ «       Z5d+„ Z6d,„ Z7d-„ Z8d.„ Z9ejF                  ju                  d/¬«      d0„ «       Z;d1„ Z<d2„ Z=d3„ Z>ejF                  jI                   ej~                  «       d4k7  d5¬«      ejF                  jL                  d6„ «       «       Z@d7„ ZAd8„ ZBd9„ ZCd:„ ZDd;„ ZEd<„ ZFejF                  ju                  d/¬«      d=„ «       ZGejF                  jI                   ej~                  «       d4k7  xs ejJ                  dk  d>¬«      ejF                  jL                  d?„ «       «       ZHejF                  jI                   ej~                  «       d4k7  xs ejJ                  dk  d>¬«      d@„ «       ZIdA„ ZJdB„ ZKdC„ ZLdD„ ZMdE„ ZNdF„ ZOdG„ ZPdH„ ZQdI„ ZRdJ„ ZSdK„ ZTdL„ ZUdM„ ZVdN„ ZWdO„ ZXdP„ ZYdQ„ ZZdR„ Z[y)Té    N)Ú
namedtuple)ÚPath)Úmain)ÚNOGIL_BUILDé   )Úutilc                  ól   — t        j                  «       st        j                  d«       y t	        «        y )Nz$CLI command needs a Fortran compiler)r   Úhas_fortran_compilerÚpytestÚskipÚf2pycli© ó    úR/root/workspace/.venv/lib/python3.12/site-packages/numpy/f2py/tests/test_f2py2e.pyÚcompiler_check_f2pyclir      s    € Ü×$Ñ$Ô&Ü�‰Ð:Õ;ä�	r   ÚPPathsz(finp, f90inp, pyf, wrap77, wrap90, cmodfc                 ó   — t        | «      }t        |j                  d«      |j                  d«      |j                  d«      |j                  |› d�«      |j                  |› d�«      |j                  |› 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€EÜØ×Ñ˜tÓ$Ø× Ñ  Ó(Ø×Ñ˜fÓ%Ø�‰ % ¨Ð8Ó9Ø�‰ % Ð(:Ð;Ó<Ø�o‰o   xÐ0Ó1ôð r   Úsession)Úscopec                 óž   — t        j                  dddd«      j                  «       }| j                  «       dz  }|j	                  |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_f90r5   M   sI   € ô �<‰<˜ ¨¨}Ó=×GÑGÓI€DØ	×	#Ñ	#Ó	%¨Ñ	3€BØ‡M�M�$ €MÔ)Ø€Ir   c                 óž   — t        j                  dddd«      j                  «       }| j                  «       dz  }|j	                  |d¬«       |S )z(F90 file for testing warnings in gh23598r&   r'   Úcrackfortranzgh23598Warn.f90r)   r*   r,   r1   s      r   Úgh23598_warnr8   V   sK   € ô �<‰<˜ ¨Ð8IÓJ×TÑTÓV€DØ	×	#Ñ	#Ó	%Ð(9Ñ	9€BØ‡M�M�$ €MÔ)Ø€Ir   c                 óž   — t        j                  dddd«      j                  «       }| j                  «       dz  }|j	                  |d¬«       |S )z8F90 file for testing disallowed CLI arguments in ghff819r&   r'   r(   zgh_22819.pyfr)   r*   r,   r1   s      r   Úgh22819_clir:   _   sI   € ô �<‰<˜ ¨¨~Ó>×HÑHÓJ€DØ	×	#Ñ	#Ó	%¨Ñ	6€BØ‡M�M�$ €MÔ)Ø€Ir   c                 óž   — t        j                  dddd«      j                  «       }| j                  «       dz  }|j	                  |d¬«       |S )ú'Generates a single f77 file for testingr&   r'   r(   zhi77.fzhello.fr)   r*   r,   r1   s      r   Úhello_world_f77r=   h   sI   € ô �<‰<˜ ¨¨xÓ8×BÑBÓD€DØ	×	#Ñ	#Ó	%¨	Ñ	1€BØ‡M�M�$ €MÔ)Ø€Ir   c                 óž   — t        j                  dddd«      j                  «       }| j                  «       dz  }|j	                  |d¬«       |S )r<   r&   r'   Úreturn_realzfoo77.fzfoo.fr)   r*   r,   r1   s      r   Úretreal_f77r@   q   sI   € ô �<‰<˜ ¨°yÓA×KÑKÓM€DØ	×	#Ñ	#Ó	%¨Ñ	/€BØ‡M�M�$ €MÔ)Ø€Ir   c                 ó6  — t        j                  dddd«      j                  «       }t        j                  dddd«      j                  «       }| j                  «       dz  }| j                  «       dz  }|j	                  |d¬	«       |j	                  |d¬	«       |S )
r%   r&   r'   Úf2cmapzisoFortranEnvMap.f90z.f2py_f2cmapz
f2cmap.f90Úmapfiler)   r*   r,   )r2   r3   rB   r4   Úfmaps        r   Ú
f2cmap_f90rE   y   sŠ   € ô �<‰<˜ ¨Ð2HÓI×SÑSÓU€DÜ�\‰\˜' 5¨(°NÓC×MÑMÓO€FØ	×	#Ñ	#Ó	%¨Ñ	4€BØ×%Ñ%Ó'¨)Ñ3€DØ‡M�M�$ €MÔ)Ø‡O�O�F W€OÔ-Ø€Ir   c                 ó¨  — t        |«      }|j                  t        dd|› �j                  «       «       t	        j
                  |j                  «      5  t        «        |j                  j                  d«      D �cg c]  }|j                  «       sŒ|j                  ‘Œ! }}d|vsJ ‚d|vsJ ‚d|v sJ ‚d|v sJ ‚	 ddd«       yc c}w # 1 sw Y   yxY w)	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 Ú*zblahmodule.czblah-f2pywrappers.fztest_22819-f2pywrappers.fztest_22819module.cN)r   ÚsetattrÚsysÚsplitr   Ú	switchdirÚparentr   ÚrglobÚis_fileÚname)Úcapfdr:   ÚmonkeypatchÚipathÚitemÚ	gen_pathss         r   Útest_gh22819_clirW   ˆ   sÈ   € ô �Ó€EØ×Ñœ˜V }°U°GÐ%<×%BÑ%BÓ%DÔEÜ	�‰˜Ÿ™Ó	%ñ 1ÜŒ	Ø+0¯<©<×+=Ñ+=¸cÓ+BÖU 4ÀdÇlÁlÅn�T—Y“YÐUˆ	ÐUØ YÑ.Ð.Ð.Ø$¨IÑ5Ð5Ð5Ø*¨iÑ7Ð7Ð7Ø# yÑ0Ð0Ñ0÷1ð 1ùâU÷1ð 1ús$   Á(CÁ;CÂCÂCÃCÃCc                 óH  — t        |«      }|j                  t        dd|› d�j                  «       «       t	        j
                  |j                  «      5  t        j                  t        d¬«      5  t        «        ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zBOnly one .pyf file allowed
    gh-22819
    CLI :: .pyf files
    rG   rH   z
 hello.pyfzOnly one .pyf file per call)ÚmatchN)r   rJ   rK   rL   r   rM   rN   r   ÚraisesÚ
ValueErrorr   )rR   r:   rS   rT   s       r   Útest_gh22819_many_pyfr\   ›   s…   € ô
 �Ó€EØ×Ñœ˜V }°U°G¸:Ð%F×%LÑ%LÓ%NÔOÜ	�‰˜Ÿ™Ó	%ñ Ü�]‰]œ:Ð-JÔKñ 	ÜŒI÷	÷ð ÷	ð 	ú÷ð ús$   ÁBÁ0BÁ;BÂB	ÂBÂB!c                 óF  — t        |d¬«      }|j                  }|j                  t        dd|› d�j	                  «       «       t        j                  |j                  «      5  t        «        |j                  j                  «       }d|vsJ ‚	 d d d «       y # 1 sw Y   y xY w)NÚtest©r   rG   úf2py z -m testzintproductf2pywrap, intpr)r!   r   rJ   rK   rL   r   rM   rN   r   r   r.   )rR   r8   rS   ÚfoutlrT   Úwrappers         r   Útest_gh23598_warnrc   §   s‹   € Ü˜¨VÔ4€EØ�L‰L€EØ×ÑÜˆVØ
�ˆw�hÐ×%Ñ%Ó'ô)ô 
�‰˜Ÿ™Ó	%ñ :ÜŒ	Ø—,‘,×(Ñ(Ó*ˆØ*°'Ñ9Ð9Ñ9÷:÷ :ñ :ús   Á"+BÂB c                 óˆ  — t        |«      }t        |«      j                  dz   }|j                  t        dd|› d|› �j	                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚t        |› «      j                  «       sJ ‚	 ddd«       y# 1 sw Y   yxY w)zIEnsures that a signature file is generated via the CLI
    CLI :: -h
    r   rG   zf2py -h ú úSaving signatures to fileN)r   ÚstemrJ   rK   rL   r   rM   rN   r   Ú
readouterrÚexists)rR   r5   rS   rT   ÚopathÚoutÚ_s          r   Útest_gen_pyfrm   ´   s®   € ô �Ó!€EÜ�Ó!×&Ñ&¨Ñ/€EØ×Ñœ˜V x°¨w°a¸°wÐ%?×%EÑ%EÓ%GÔHä	�‰˜Ÿ™Ó	%ñ )ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ð1Ü�u�gÓ×&Ñ&Ô(Ð(Ñ(÷	)÷ )ñ )ús   Á.A B8Â8Cc                 ó&  — t        |«      }|j                  t        dd|› �j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚d|v sJ ‚	 ddd«       y# 1 sw Y   yxY w)zHEnsures that a signature file can be dumped to stdout
    CLI :: -h
    rG   zf2py -h stdout rf   zfunction hi() ! in N©	r   rJ   rK   rL   r   rM   rN   r   rh   ©rR   r5   rS   rT   rk   rl   s         r   Útest_gen_pyf_stdoutrq   Ã   sˆ   € ô �Ó!€EØ×Ñœ˜V °u°gÐ%>×%DÑ%DÓ%FÔGÜ	�‰˜Ÿ™Ó	%ñ ,ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ð1Ø$¨Ñ+Ð+Ñ+÷	,÷ ,ñ ,ús   Á*BÂBc                 ó®  — t        |«      }|j                  t        dd|› �j                  «       «       t	        j
                  |j                  «      5  t        d«      j                  dd¬«       t        j                  t        «      5  t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	zjEnsures that the CLI refuses to overwrite signature files
    CLI :: -h without --overwrite-signature
    rG   úf2py -h faker.pyf ú	faker.pyfú	Fake newsr)   r*   z&Use --overwrite-signature to overwriteN)r   rJ   rK   rL   r   rM   rN   r0   r   rZ   Ú
SystemExitr   rh   )rR   r5   rS   rT   rl   Úerrs         r   Útest_gen_pyf_no_overwriterx   Ð   sÂ   € ô �Ó!€EØ×Ñœ˜VÐ'9¸%¸Ð%A×%GÑ%GÓ%IÔJä	�‰˜Ÿ™Ó	%ñ CÜˆ[Ó×$Ñ$ [¸7Ð$ÔCÜ�]‰]œ:Ó&ñ 	CÜŒIØ×%Ñ%Ó'‰FˆAˆsØ;¸sÑBÐBÑB÷	C÷Cð C÷	Cð 	Cú÷Cð Cús$   Á6CÂ	$B?Â.CÂ?C	ÃCÃC)é   é   zPython 3.12 required)Úreasonc                 ó  — t        |«      }|j                  t        dd|› �j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       y# 1 sw Y   yxY w)z@Check that modules are named correctly

    CLI :: defaults
    rG   zf2py --backend meson -c zuntitledmodule.cN)	r   rJ   rK   rL   r   rM   rN   r   rh   rp   s         r   Útest_untitled_clir}   ß   s|   € ô �Ó!€EØ×Ñœ˜VÐ'?À¸wÐ%G×%MÑ%MÓ%OÔPÜ	�‰˜Ÿ™Ó	%ñ )ÜÔ Ø×!Ñ!Ó#‰ˆˆQØ! SÑ(Ð(Ñ(÷)÷ )ñ )ús   Á$BÂB
c                 ó   — d}t        ||¬«      }|j                  }|j                  t        dd|› d|› �j	                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       |j                  t        ddd	g«       t        j                  t        «      5  t        «        | j                  «       \  }}d
|v sJ ‚	 ddd«       |j                  t        dg d¢«       t        j                  t        «      5  t        «        t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       y# 1 sw Y   ŒÒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zqCheck that distutils backend and related options fail
    CLI :: --fcompiler --help-link --backend distutils
    Úhir_   rG   r`   z -c --fcompiler=gfortran -m z%--fcompiler cannot be used with mesonNÚf2pyz--help-linkzUnknown option --help-link)r€   z	--backendÚ	distutilsz'distutils' backend was removed)r!   r   rJ   rK   rL   r   rM   rN   r   rh   r   rZ   rv   r   )rR   r5   rS   ÚMNAMEra   rT   rk   rl   s           r   Útest_no_distutils_backendrƒ   í   sf  € ð
 €EÜ˜°Ô6€EØ�L‰L€EØ×ÑÜˆV�u˜U˜GÐ#?À¸wÐG×MÑMÓOôô 
�‰˜Ÿ™Ó	%ñ >ÜÔ Ø×!Ñ!Ó#‰ˆˆQØ6¸#Ñ=Ð=Ñ=÷>ð
 ×ÑÜˆV�f˜mÐ,ôô 
�‰”zÓ	"ñ 3ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ+¨sÑ2Ð2Ñ2÷3ð
 ×ÑÜˆVÒ7ôô 
�‰”zÓ	"ñ 8ÜÔ ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ0°CÑ7Ð7Ñ7÷	8ð 8÷!>ð >ú÷3ð 3ú÷8ð 8ús$   Á&$EÃ$E(Ä$.E4ÅE%Å(E1Å4E=c                 ó´  — t        |d¬«      }|j                  }d}d}|j                  t        dd|› d|› �j	                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j	                  «       D ]  }	d|	› d	�|v rŒJ ‚ |j	                  «       D ]  }
d
|
› d�|v rŒJ ‚ 	 ddd«       y# 1 sw Y   yxY w)z9Tests that functions can be skipped
    CLI :: skip:
    r^   r_   út0 t4 t8 sd s8 s4útd s0rG   r`   z -m test skip: z=buildmodule: Could not found the body of interfaced routine "ú". Skipping.úConstructing wrapper function "ú"N©
r!   r   rJ   rK   rL   r   rM   rN   r   rh   )rR   r@   rS   ra   rT   ÚtoskipÚ	remainingrk   rw   ÚskeyÚrkeys              r   Útest_f2py_skipr�     s÷   € ô
 ˜¨FÔ3€EØ�J‰J€EØ €FØ€IØ×ÑÜˆVØ
�ˆw�o f XÐ.×4Ñ4Ó6ô8ô 
�‰˜Ÿ™Ó	%ñ DÜŒ	Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò 	ˆDàOÐPTÈvÐUaÐbØòððð	ð —O‘OÓ%ò 	DˆDØ4°T°F¸!Ð<ÀÒCÐCÐCñ	D÷D÷ Dñ Dúó   Á(9CÂ"CÃCÃCc                 ó´  — t        |d¬«      }|j                  }d}d}|j                  t        dd|› d|› �j	                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j	                  «       D ]  }	d|	› d	�|v rŒJ ‚ |j	                  «       D ]  }
d
|
› d�|v rŒJ ‚ 	 ddd«       y# 1 sw Y   yxY w)z>Test that functions can be kept by only:
    CLI :: only:
    r^   r_   r…   r†   rG   r`   z -m test only: ú<buildmodule: Could not find the body of interfaced routine "r‡   rˆ   r‰   NrŠ   )rR   r@   rS   ra   rT   r‹   Útokeeprk   rw   r�   rŽ   s              r   Útest_f2py_onlyr”   &  sõ   € ô ˜¨FÔ3€EØ�J‰J€EØ €FØ€FØ×ÑÜˆVØ
�ˆw�o f XÐ.×4Ñ4Ó6ô8ô 
�‰˜Ÿ™Ó	%ñ DÜŒ	Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò 	ˆDàNÈtÈfÐT`ÐaØòððð	ð —L‘L“Nò 	DˆDØ4°T°F¸!Ð<ÀÒCÐCÐCñ	D÷D÷ Dñ Dúr�   c                 óÚ  — t        |d¬«      }|j                  }d}t        |«      }d}d}	|j                  t        dd|› d|	› d	|› d
|› �j                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }
}|j                  «       D ]  }d|› d�|v rŒJ ‚ |j                  «       D ]  }d|› d�|
v rŒJ ‚ 	 ddd«       y# 1 sw Y   yxY w)zfTests that it is possible to return to file processing mode
    CLI :: :
    BUG: numpy-gh #20520
    r^   r_   r…   ztd s0 hiÚblahrG   r`   ú -m z only: z : r’   r‡   rˆ   r‰   N)r!   r   r   rJ   rK   rL   r   rM   rN   r   rh   )rR   r5   r@   rS   ra   rT   r‹   Úipath2r“   r   rk   rw   r�   rŽ   s                 r   Útest_file_processing_switchr™   =  s  € ô ˜¨FÔ3€EØ�J‰J€EØ €FÜ�/Ó"€FØ€FØ€EØ×ÑÜØØ
�ˆw�d˜5˜' ¨¨°°F°8Ð<×BÑBó 	
ôô 
�‰˜Ÿ™Ó	%ñ DÜŒ	Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò 	ˆDàNÈtÈfÐT`ÐaØòððð	ð —L‘L“Nò 	DˆDØ4°T°F¸!Ð<ÀÒCÐCÐCñ	D÷D÷ Dñ Dús   Á;9C!Â5C!ÃC!Ã!C*c                 ó�  — d}t        ||¬«      }|j                  }|j                  t        dd|› d|› �j	                  «       «       t        j                  |j                  «      5  t        «        ddd«       t        j                  |j                  «      sJ ‚t        j                  |j                  «      sJ ‚y# 1 sw Y   ŒLxY w)zHChecks the generation of files based on a module name
    CLI :: -m
    r   r_   rG   r`   r—   N)r!   r   rJ   rK   rL   r   rM   rN   r   r   ri   r   r   )rR   r5   rS   r‚   ra   rT   s         r   Útest_mod_gen_f77r›   [  sž   € ð €EÜ˜°Ô6€EØ�L‰L€EØ×Ñœ˜V u¨U¨G°4¸°wÐ%?×%EÑ%EÓ%GÔHÜ	�‰˜Ÿ™Ó	%ñ ÜŒ	÷ô �;‰;�u—{‘{Ô#Ð#Ð#ä�;‰;�u—|‘|Ô$Ð$Ñ$÷ð ús   Á&B<Â<Cc           	      ó˜  — d}t        ||¬«      }|j                  }|j                  t        dd|› d|› d�j	                  «       «       t        j                  |j                  «      5  t        «        t        d«      j                  «       5 }|j                  «       }d|v sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z�Check that pyf files are correctly generated with module structure
    CLI :: -m <name> -h pyf_file
    BUG: numpy-gh #20520
    r   r_   rG   r`   r—   z
 -h hi.pyfzhi.pyfzpython module hiN)r!   r   rJ   rK   rL   r   rM   rN   r   r   ÚopenÚread)rR   r=   rS   r‚   ra   rT   ÚhipyfÚpyfdats           r   Útest_mod_gen_gh25263r¡   l  s·   € ð
 €EÜ˜°Ô6€EØ�J‰J€EØ×Ñœ˜V u¨U¨G°4¸°w¸jÐ%I×%OÑ%OÓ%QÔRÜ	�‰˜Ÿ™Ó	%ñ 0ÜŒ	Ü�(‹^× Ñ Ó"ð 	0 eØ—Z‘Z“\ˆFØ%¨Ñ/Ð/Ñ/÷	0÷0ð 0÷	0ð 	0ú÷0ð 0ús$   Á'$C ÂB4Â#C Â4B=	Â9C Ã C	c                 ó  — t        |d¬«      }|j                  }t        j                  d«      }t        j                  d«      }|j	                  t
        dd|› d�j                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j                  |«      €J ‚|j                  |«      �J ‚	 ddd«       |j	                  t
        dd|› d	�j                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j                  |«      �J ‚|j                  |«      €J ‚	 ddd«       y# 1 sw Y   ŒŸxY w# 1 sw Y   yxY w)
zHLowers cases by flag or when -h is present

    CLI :: --[no-]lower
    r^   r_   zHI\(\)zhi\(\)rG   r`   z -m test --lowerNz -m test --no-lower)r!   r   ÚreÚcompilerJ   rK   rL   r   rM   rN   r   rh   Úsearch©	rR   r=   rS   ra   rT   ÚcapshiÚcapslork   rl   s	            r   Útest_lower_cmodr©   |  sV  € ô
 ˜°Ô7€EØ�J‰J€EÜ�Z‰Z˜	Ó"€FÜ�Z‰Z˜	Ó"€Fà×Ñœ˜V u¨U¨GÐ3CÐ%D×%JÑ%JÓ%LÔMÜ	�‰˜Ÿ™Ó	%ñ *ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ�}‰}˜SÓ!Ð-Ð-Ð-Ø�}‰}˜SÓ!Ð)Ð)Ñ)÷	*ð ×Ñœ˜VØ ˜wÐ&9Ð:×@Ñ@ÓBôDä	�‰˜Ÿ™Ó	%ñ .ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ�}‰}˜SÓ!Ð)Ð)Ð)Ø�}‰}˜SÓ!Ð-Ð-Ñ-÷	.ð .÷*ð *ú÷.ð .ús   ÂAE/Ä!AE;Å/E8Å;Fc           	      óB  — t        |d¬«      }|j                  }t        j                  d«      }t        j                  d«      }|j	                  t
        dd|› d|j                  › d�j                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j                  |«      €J ‚|j                  |«      �J ‚	 d	d	d	«       |j	                  t
        dd|› d|j                  › d
�j                  «       «       t        j                  |j                  «      5  t        «        | j                  «       \  }}|j                  |«      �J ‚|j                  |«      €J ‚	 d	d	d	«       y	# 1 sw Y   Œ¬xY w# 1 sw Y   y	xY w)z^Lowers cases in signature files by flag or when -h is present

    CLI :: --[no-]lower -h
    r^   r_   z	Block: HIz	Block: hirG   r`   z -h z -m test --overwrite-signatureNz) -m test --overwrite-signature --no-lower)r!   r   r£   r¤   rJ   rK   r   rL   r   rM   rN   r   rh   r¥   r¦   s	            r   Útest_lower_sigr«   –  st  € ô
 ˜°Ô7€EØ�J‰J€Eä�Z‰Z˜Ó%€FÜ�Z‰Z˜Ó%€Fð ×ÑÜØØ
�ˆw�d˜5Ÿ9™9˜+Ð%CÐD×JÑJÓLôô 
�‰˜Ÿ™Ó	%ñ *ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ�}‰}˜SÓ!Ð-Ð-Ð-Ø�}‰}˜SÓ!Ð)Ð)Ñ)÷	*ð ×ÑÜØØ
�ˆw�d˜5Ÿ9™9˜+Ð%NÐOß	‰‹ô	ô 
�‰˜Ÿ™Ó	%ñ .ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ�}‰}˜SÓ!Ð)Ð)Ð)Ø�}‰}˜SÓ!Ð-Ð-Ñ-÷	.ð .÷*ð *ú÷.ð .ús   ÂAF	Ä;AFÆ	FÆFc           
      ó6  — t        |«      }d}d}|j                  t        dd|› d|› d|› �j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|› d�|v sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)
zNEnsures that the build directory can be specified

    CLI :: --build-dir
    r–   ÚtttmprG   úf2py -m re   z --build-dir zWrote C/API module "r‰   Nro   )rR   r5   rS   rT   r   Úodirrk   rl   s           r   Útest_build_dirr°   ½  sŸ   € ô
 �Ó!€EØ€EØ€DØ×Ñœ˜VØ" 5 '¨¨5¨'°¸t¸fÐE×KÑKÓMôOô 
�‰˜Ÿ™Ó	%ñ 8ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ& u g¨RÐ0°CÑ7Ð7Ñ7÷8÷ 8ñ 8ús   Á(BÂBc                 óT  — t        |«      }|j                  t        dd|› d�j                  «       «       t	        j
                  |j                  «      5  t        d«      j                  dd¬«       t        «        | j                  «       \  }}d|v sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)
zXEnsures that the build directory can be specified

    CLI :: --overwrite-signature
    rG   rs   z --overwrite-signaturert   ru   r)   r*   rf   N)
r   rJ   rK   rL   r   rM   rN   r0   r   rh   rp   s         r   Útest_overwriter²   Î  sœ   € ô
 �Ó!€EØ×ÑÜˆVØ
˜U˜GÐ#9Ð:×@Ñ@ÓBôDô 
�‰˜Ÿ™Ó	%ñ 2Üˆ[Ó×$Ñ$ [¸7Ð$ÔCÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ñ1÷	2÷ 2ñ 2ús   ÁA BÂB'c           	      ó°  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚t        |› d�«      j                  «       5 }d|j                  «       v sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zJEnsures that TeX documentation is written out

    CLI :: --latex-doc
    r–   rG   r®   re   z --latex-docúDocumentation is saved to fileú
module.texú\documentclassN©r   rJ   rK   rL   r   rM   rN   r   rh   r�   rž   ©rR   r5   rS   rT   r   rk   rl   Úotexs           r   Útest_latexdocrº   ß  sÕ   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð>×DÑDÓFôHô 
�‰˜Ÿ™Ó	%ñ 4ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ/°3Ñ6Ð6Ð6Ü�U�G˜:Ð&Ó'×,Ñ,Ó.ð 	4°$Ø$¨¯	©	«Ñ3Ð3Ñ3÷	4÷	4ð 4÷	4ð 	4ú÷	4ð 4ús%   ÁA CÂC Â/CÃ C		ÃCÃCc           	      ó&  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|vsJ ‚	 ddd«       y# 1 sw Y   yxY w)zMEnsures that TeX documentation is written out

    CLI :: --no-latex-doc
    r–   rG   r®   re   z --no-latex-docr´   Nro   ©rR   r5   rS   rT   r   rk   rl   s          r   Útest_nolatexdocr½   ñ  s�   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'°ÐA×GÑGÓIôKô 
�‰˜Ÿ™Ó	%ñ ;ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ/°sÑ:Ð:Ñ:÷;÷ ;ñ ;úó   Á$BÂBc                 ó^  — t        j                  «       st        j                  d«       t	        j
                  d«      }| dz  }t        |d«      5 }|j                  |«       d d d «       t        j                  dddt        |«      ddd	g}t        j                  || ¬
«       y # 1 sw Y   ŒBxY w)NzNo Fortran compiler foundz(
        subroutine foo
        end
    ztest_latex.f90Úwz-mz
numpy.f2pyz-cÚ
test_latexz--latex-doc)Úcwd)r   r
   r   r   ÚtextwrapÚdedentr�   ÚwriterK   Ú
executableÚstrÚ
subprocessÚ
check_call)Útmp_pathÚfsourceÚfpathÚfÚcmds        r   Útest_latex_doc_gh30268rÏ      s›   € ô ×$Ñ$Ô&Ü�‰Ð/Ô0ä�o‰oð ó 	€Gð
 Ð'Ñ'€EÜ	ˆe�SÓ	ð ˜QØ	�‰�Ô÷ô �>‰>˜4 ¨t´S¸³ZÀÀ|ÐUbÐ
c€CÜ×Ñ˜# 8Ö,÷	ð ús   ÁB#Â#B,c           	      ó²  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚t        d|› d�«      j                  «       5 }d	|j                  «       vsJ ‚	 d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)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–   rG   r®   re   z --latex-doc --short-latexr´   ú./rµ   r¶   Nr·   r¸   s           r   Útest_shortlatexrÒ     sÙ   € ô �Ó!€EØ€EØ×ÑÜØØ
�5�'˜˜5˜'Ð!;Ð<×BÑBÓDôô 
�‰˜Ÿ™Ó	%ñ 8ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ/°3Ñ6Ð6Ð6Ü�B�u�g˜ZÐ(Ó)×.Ñ.Ó0ð 	8°DØ$¨D¯I©I«KÑ7Ð7Ñ7÷	8÷	8ð 8÷	8ð 	8ú÷	8ð 8úó%   ÁACÂCÂ0CÃC
	ÃCÃCc           	      ó²  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚t        d|› d�«      j                  «       5 }d	|j                  «       v sJ ‚	 d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)zIEnsures that RsT documentation is written out

    CLI :: --rest-doc
    r–   rG   r®   re   z --rest-docú#ReST Documentation is saved to filerÑ   zmodule.restz.. -*- rest -*-Nr·   )rR   r5   rS   rT   r   rk   rl   Úorsts           r   Útest_restdocr×   )  s×   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð=×CÑCÓEôGô 
�‰˜Ÿ™Ó	%ñ 5ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ4¸Ñ;Ð;Ð;Ü�B�u�g˜[Ð)Ó*×/Ñ/Ó1ð 	5°TØ%¨¯©«Ñ4Ð4Ñ4÷	5÷	5ð 5÷	5ð 	5ú÷	5ð 5úrÓ   c           	      ó&  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|vsJ ‚	 ddd«       y# 1 sw Y   yxY w)zLEnsures that TeX documentation is written out

    CLI :: --no-rest-doc
    r–   rG   r®   re   z --no-rest-docrÕ   Nro   r¼   s          r   Útest_norestexdocrÙ   ;  s‘   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð@×FÑFÓHôJô 
�‰˜Ÿ™Ó	%ñ @ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ4¸CÑ?Ð?Ñ?÷@÷ @ñ @úr¾   c           	      ó€  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        t        d|› d�«      j                  «       5 }d|j                  «       v sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zIEnsures that debugging wrappers are written

    CLI :: --debug-capi
    r–   rG   r®   re   z --debug-capirÑ   r   z#define DEBUGCFUNCSN©
r   rJ   rK   rL   r   rM   rN   r   r�   rž   )rR   r5   rS   rT   r   Úocmods         r   Útest_debugcapirÝ   K  s·   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð?×EÑEÓGôIô 
�‰˜Ÿ™Ó	%ñ :ÜŒ	Ü�B�u�g˜XÐ&Ó'×,Ñ,Ó.ð 	:°%Ø)¨U¯Z©Z«\Ñ9Ð9Ñ9÷	:÷:ð :÷	:ð 	:ú÷:ð :ús$   Á(B4ÂB(ÂB4Â(B1	Â-B4Â4B=z2Consistently fails on CI; noisy so skip not xfail.c           	      óâ  — t        | «      }d}|j                  t        dd|› d|› d�j                  «       «       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«       y# 1 sw Y   yxY w)zEEnsures that debugging wrappers work

    CLI :: --debug-capi -c
    r–   rG   r®   re   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   rJ   rK   rL   r   rM   rN   r   ÚshlexrÆ   rÈ   ÚrunrÃ   rÄ   ÚstdoutÚstderr)r5   rS   rT   r   Úcmd_runÚroutÚeoutÚeerrs           r   Útest_debugcapi_bldrì   [  sÙ   € ô �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'Ð1AÐB×HÑHÓJôLô 
�‰˜Ÿ™Ó	%ñ #ÜŒ	Ü—+‘+¤§¡Ð 0Ð0NÐOÓPˆÜ�~‰~˜g°dÀWÔMˆØˆÜ�‰ð 	 ó 	ˆð �{‰{˜dÒ"Ð"Ð"Ø�{‰{˜dÒ"Ð"Ñ"÷!#÷ #ñ #ús   ÁBC%Ã%C.c           	      ó*  — t        |«      }d}|j                  t        dd|› d|› �j                  «       «       t	        j
                  |j                  «      5  t        «        ddd«       | j                  «       \  }}d|v sJ ‚|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       y# 1 sw Y   Œ›xY w# 1 sw Y   yxY w)zoEnsures that fortran subroutine wrappers for F77 are included by default

    CLI :: --[no]-wrap-functions
    r–   rG   r®   re   Nú Fortran 77 wrappers are saved toz --wrap-functionsro   r¼   s          r   Útest_wrapfunc_defrï   y  s  € ô �Ó!€EØ€EØ×Ñœ˜V x°¨w°a¸°wÐ%?×%EÑ%EÓ%GÔHä	�‰˜Ÿ™Ó	%ñ ÜŒ	÷à×ÑÓ�F€CˆØ.°#Ñ5Ð5Ð5ð ×Ñœ˜VØ" 5 '¨¨5¨'Ð1BÐC×IÑIÓKôMô 
�‰˜Ÿ™Ó	%ñ :ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ2°cÑ9Ð9Ñ9÷:ð :÷ð ú÷:ð :ús   ÁC=Ã$D	Ã=DÄ	Dc           	      ó&  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|vsJ ‚	 ddd«       y# 1 sw Y   yxY w)zeEnsures that fortran subroutine wrappers for F77 can be disabled

    CLI :: --no-wrap-functions
    r–   rG   r®   re   z --no-wrap-functionsrî   Nro   r¼   s          r   Útest_nowrapfuncrñ   ’  sŽ   € ô
 �Ó!€EØ€EØ×Ñœ˜VØ" 5 '¨¨5¨'Ð1EÐF×LÑLÓNôPô 
�‰˜Ÿ™Ó	%ñ >ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ2¸#Ñ=Ð=Ñ=÷>÷ >ñ >úr¾   c           	      ó�  — t        |«      }d}|j                  t        dd|› d|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        t        d|› d�«      j                  «       5 }|j                  «       }d|v sJ ‚d	|v sJ ‚	 d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)zcAdd to the include directories

    CLI :: -include
    TODO: Document this in the help string
    r–   rG   r®   re   z' -include<stdbool.h> -include<stdio.h> rÑ   r   z#include <stdbool.h>z#include <stdio.h>NrÛ   )rR   r5   rS   rT   r   rÜ   Úocmrs          r   Útest_inclheaderrô   ¢  sÊ   € ô �Ó!€EØ€EØ×ÑÜØØ
�5�'˜˜5˜'Ð!HÐIß‰‹ô	ô 
�‰˜Ÿ™Ó	%ñ 0ÜŒ	Ü�B�u�g˜XÐ&Ó'×,Ñ,Ó.ð 	0°%Ø—:‘:“<ˆDØ)¨TÑ1Ð1Ð1Ø'¨4Ñ/Ð/Ñ/÷	0÷0ð 0÷	0ð 	0ú÷0ð 0ús$   Á(B<ÂB0ÂB<Â0B9	Â5B<Â<CÚLinuxzCompiler requiredc                 óÚ  — t        |«      }d}d}d}|j                  t        dd|› d|› d|› d|› �j                  «       «       t	        j
                  |j                  «      5  t        |«      j                  «        t        «        t        |› d	�«      j                  «       5 }|j                  «       }d
|v sJ ‚d|› d�|v sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zLEnsures that the extra object can be specified when using meson backend
    r–   r­   zextra.orG   z!f2py --backend meson --build-dir r—   z -c re   z/meson.buildzobjects:z'''N)r   rJ   rK   rL   r   rM   rN   Útouchr   r�   rž   )	rR   r5   rS   rT   r   r¯   ÚobjÚ
mesonbuildÚmblds	            r   Útest_cli_objrû   ¸  sù   € ô
 �Ó!€EØ€EØ€DØ
€CØ×Ñœ˜VØ;¸D¸6ÀÀeÀWÈDÐQTÐPUÐUVÐW\ÐV]Ð^×dÑdÓfôhô 
�‰˜Ÿ™Ó	%ñ *ÜˆS‹	�‰ÔÜÔ Ü�T�F˜,Ð'Ó(×-Ñ-Ó/ð 	*°:Ø—?‘?Ó$ˆDØ Ñ%Ð%Ð%Ø˜˜˜S�> TÑ)Ð)Ñ)÷	*÷*ð *÷	*ð 	*ú÷*ð *ús%   Á"A C!Â"!CÃC!ÃC	ÃC!Ã!C*c                   ó   — y)z?Add to the include directories

    CLI :: --include-paths
    Nr   r   r   r   Útest_inclpathrý   Í  ó   € ð 	r   c                   ó   — y)z;Add to the include directories

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

    CLI :: --f2cmap
    rG   rH   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 changesNro   )rR   rE   rS   rT   rk   rl   s         r   Útest_f2cmapr  ß  s¹   € ô
 �Ó€EØ×Ñœ˜V }°U°GÐ;LÐ%M×%SÑ%SÓ%UÔVä	�‰˜Ÿ™Ó	%ñ IÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ2°cÑ9Ð9Ð9Ø;¸sÑBÐBÐBØ<ÀÑCÐCÐCØAÀSÑHÐHÐHØAÀSÑHÐHÑH÷I÷ Iñ Iús   Á<BÂB#c                 ó0  — t        |«      }|j                  t        dd|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}t        |«      dk(  sJ ‚	 ddd«       y# 1 sw Y   yxY w)z)Reduce verbosity

    CLI :: --quiet
    rG   rH   z --quietr   N)
r   rJ   rK   rL   r   rM   rN   r   rh   Úlenrp   s         r   Ú
test_quietr  ñ  s~   € ô
 �Ó!€EØ×Ñœ˜V }°U°G¸8Ð%D×%JÑ%JÓ%LÔMä	�‰˜Ÿ™Ó	%ñ ÜŒ	Ø×!Ñ!Ó#‰ˆˆQÜ�3‹x˜1Š}Ð‰}÷÷ ñ ús   Á.BÂBc                 ó  — t        |«      }|j                  t        dd|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        | j                  «       \  }}d|v sJ ‚	 ddd«       y# 1 sw Y   yxY w)z-Increase verbosity

    CLI :: --verbose
    rG   rH   z
 --verboseÚanalyzelineNro   rp   s         r   Útest_verboser  ÿ  s|   € ô
 �Ó!€EØ×Ñœ˜V }°U°G¸:Ð%F×%LÑ%LÓ%NÔOä	�‰˜Ÿ™Ó	%ñ $ÜŒ	Ø×!Ñ!Ó#‰ˆˆQØ Ñ#Ð#Ñ#÷$÷ $ñ $ús   Á$BÂBc                 ó  — |j                  t        dddg«       t        j                  t        «      5  t        «        | j                  «       \  }}ddl}|j                  |j                  «       k(  sJ ‚	 ddd«       y# 1 sw Y   yxY w)z"Ensure version

    CLI :: -v
    rG   r€   z-vr   N)
rJ   rK   r   rZ   rv   r   rh   ÚnumpyÚ__version__Ústrip)rR   rS   rk   rl   Únps        r   Útest_versionr    sm   € ð
 ×Ñœ˜V f¨d ^Ô4ä	�‰”zÓ	"ñ -ÜŒ	Ø×!Ñ!Ó#‰ˆˆQÛØ�~‰~ §¡£Ò,Ð,Ñ,÷	-÷ -ñ -ús   ³AA>Á>Bc                 óŒ  — t        | «      }|j                  t        dd|› d�j                  «       «       t	        j
                  |j                  «      5  t        «        t        j                  t        j                  › d�«      }t        j                  |dd¬«      }d}|j                  |k(  sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)
z
    CLI :: -c
    rG   rH   z -crß   Trà   rá   rã   N)r   rJ   rK   rL   r   rM   rN   r   rä   rÆ   rÈ   rå   ræ   )r5   rS   rT   rè   ré   rê   s         r   Útest_npdistopr    s    € ô
 �Ó!€EØ×Ñœ˜V }°U°G¸3Ð%?×%EÑ%EÓ%GÔHä	�‰˜Ÿ™Ó	%ñ #ÜŒ	Ü—+‘+¤§¡Ð 0Ð0NÐOÓPˆÜ�~‰~˜g°dÀWÔMˆØˆØ�{‰{˜dÒ"Ð"Ñ"÷#÷ #ñ #ús   ÁAB:Â:Cz*Compiler and Python 3.12 or newer requiredc                 ó   — t        | «      }|j                  t        dd|› d�j                  «       «       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«       y# 1 sw Y   yxY w)z.
    CLI :: --no-freethreading-compatible
    rG   rH   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   rJ   rK   rL   r   rM   rN   r   rÆ   r   rä   rÈ   rå   ræ   rç   Ú
returncode©r5   rS   rT   rÎ   rè   ré   rê   s          r   Ú test_no_freethreading_compatibler  +  sè   € ô �Ó!€EØ×Ñœ˜V }°U°GÐ;\Ð%]×%cÑ%cÓ%eÔfä	�‰˜Ÿ™Ó	%ñ $ÜÔ Ü—‘Ð Ð =Ð>ˆÝØÐGÑG‰Cà�4‰KˆCÜ—+‘+˜cÓ"ˆÜ�~‰~˜g°dÀWÔMˆØˆØ�{‰{˜dÒ"Ð"Ð"ÝØ]Ðae×alÑalÑlÐlÐlØ�‰ !Ò#Ð#Ñ#÷$÷ $ñ $ús   ÁBC4Ã4C=c                 ó  — t        | «      }|j                  t        dd|› d�j                  «       «       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 ‚dt        j                  vr|j                   dk(  sJ ‚|j"                  dk(  sJ ‚	 ddd«       y# 1 sw Y   yxY w)z+
    CLI :: --freethreading_compatible
    rG   rH   z -c --freethreading-compatibler  z2import sys; assert sys._is_gil_enabled() is False"r‰   Trà   rá   rã   ÚLSAN_OPTIONSÚ r   N)r   rJ   rK   rL   r   rM   rN   r   rÆ   r   rä   rÈ   rå   ræ   ÚosÚenvironrç   r  r  s          r   Útest_freethreading_compatibler  E  sî   € ô �Ó!€EØ×Ñœ˜V }°U°GÐ;YÐ%Z×%`Ñ%`Ó%bÔcä	�‰˜Ÿ™Ó	%ñ $ÜÔ Ü—‘Ð Ð =Ð>ˆÝØÐHÑH‰Cà�4‰KˆCÜ—+‘+˜cÓ"ˆÜ�~‰~˜g°dÀWÔMˆØˆØ�{‰{˜dÒ"Ð"Ð"Ø¤§¡Ñ+Ø—;‘; "Ò$Ð$Ð$Ø�‰ !Ò#Ð#Ñ#÷$÷ $ñ $ús   ÁB#DÄD
c                   ó   — y)z
    CLI :: -c --fcompiler
    Nr   r   r   r   Útest_npd_fcompilerr  a  ó   € ð
 	r   c                   ó   — y)z
    CLI :: -c --compiler
    Nr   r   r   r   Útest_npd_compilerr   i  r  r   c                   ó   — y)z$
    CLI :: -c --help-fcompiler
    Nr   r   r   r   Útest_npd_help_fcompilerr"  q  r  r   c                   ó   — y)z
    CLI :: -c --f77exec
    Nr   r   r   r   Útest_npd_f77execr$  y  r  r   c                   ó   — y)z
    CLI :: -c --f90exec
    Nr   r   r   r   Útest_npd_f90execr&  �  r  r   c                   ó   — y)z
    CLI :: -c --f77flags
    Nr   r   r   r   Útest_npd_f77flagsr(  ‰  r  r   c                   ó   — y)z
    CLI :: -c --f90flags
    Nr   r   r   r   Útest_npd_f90flagsr*  ‘  r  r   c                   ó   — y)z
    CLI :: -c --opt
    Nr   r   r   r   Útest_npd_optr,  ™  r  r   c                   ó   — y)z
    CLI :: -c --arch
    Nr   r   r   r   Útest_npd_archr.  ¡  r  r   c                   ó   — y)z
    CLI :: -c --noopt
    Nr   r   r   r   Útest_npd_nooptr0  ©  r  r   c                   ó   — y)z
    CLI :: -c --noarch
    Nr   r   r   r   Útest_npd_noarchr2  ±  r  r   c                   ó   — y)z
    CLI :: -c --debug
    Nr   r   r   r   Útest_npd_debugr4  ¹  r  r   c                   ó   — y)z%
    CLI :: -c --link-<resource>
    Nr   r   r   r   Útest_npd_link_autor6  Á  r  r   c                   ó   — y)z/
    CLI :: -c -L/path/to/lib/ -l<libname>
    Nr   r   r   r   Útest_npd_libr8  É  r  r   c                   ó   — y)z
    CLI :: -D<define>
    Nr   r   r   r   Útest_npd_definer:  Ñ  r  r   c                   ó   — y)z
    CLI :: -U<name>
    Nr   r   r   r   Útest_npd_undefiner<  Ù  r  r   c                   ó   — y)z$
    CLI :: -I/path/to/include/
    Nr   r   r   r   Útest_npd_inclr>  á  r  r   c                   ó   — y)z8
    CLI :: <filename>.o <filename>.so <filename>.a
    Nr   r   r   r   Útest_npd_linkerr@  é  r  r   )Úuntitled)\r  Úplatformr£   rä   rÈ   rK   rÃ   Úcollectionsr   Úpathlibr   r   Únumpy.f2py.f2py2er   r   Únumpy.testing._private.utilsr   r  r   r   r   r!   Úfixturer5   r8   r:   r=   r@   rE   rW   r\   rc   rm   rq   rx   ÚmarkÚskipifÚversion_infoÚslowr}   rƒ   Úxfailr�   r”   r™   r›   r¡   r©   r«   r°   r²   rº   r½   rÏ   rÒ   r×   rÙ   rÝ   r   rì   rï   rñ   rô   Úsystemrû   rý   r   r  r  r  r  r  r  r  r  r   r"  r$  r&  r(  r*  r,  r.  r0  r2  r4  r6  r8  r:  r<  r>  r@  r   r   r   ú<module>rN     sÛ  ðÛ 	Û Û 	Û Û Û 
Û Ý "Ý ã å -Ý 4å òñ 
�HÐHÓ	I€óðN €‡��iÔ ñó !ðð €‡��iÔ ñó !ðð €‡��iÔ ñó !ðð €‡��iÔ ñó !ðð €‡��iÔ ñó !ðð €‡��iÔ ñó !ðò1ò&	ò
:ò)ò
,òCð ‡�×Ñ�C×$Ñ$¨Ñ/Ð8NÐÓOØ‡�×Ññ
)ó ó Pð
)ð ‡�×Ññ8ó ð8ð@ ‡�×ÑñDó ðDò.Dò.Dò<%ò"0ò .ò4$.òN8ò"2ò"4ò$;ð ‡�×Ññ-ó ð-ò$8ò,5ò$@ò :ð  ‡�×ÑÐMÐÓNñ#ó Oð#ò::ò2>ò 0ð, ‡�×Ñ�_�X—_‘_Ó&¨'Ñ1Ð;NÐÓOØ‡�×Ññ*ó ó Pð*ò&	ò	òIò$ò$ò-ð ‡�×ÑÐMÐÓNñ#ó Oð#ð ‡�×Ñ�_�X—_‘_Ó&¨'Ñ1ÒQ°c×6FÑ6FÈ'Ñ6QØGð ó Ià‡�×Ññ$ó óIð$ð. ‡�×Ñ�_�X—_‘_Ó&¨'Ñ1ÒQ°c×6FÑ6FÈ'Ñ6QØGð ó Iñ$óIð$ò4	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ò	ó	r   