Ë
    ¨[;jW-  ã                   ó   — d 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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mZ ddlmZmZ ddlmZ dadaej4                  d	k(  r= ee«      j8                  j8                  j8                  Z eej                  d
«      «      Zd„ Z d„ Z!d„ Z"d„ Z#e#g g g dfd„«       Z$e#g g g ddfd„«       Z%da&d„ Z'd„ Z(d„ Z)d„ Z*e#d„ «       Z+ G d„ d«      Z,d„ Z-ej\                  d„ «       Z/y)z¥
Utility functions for

- building and importing modules on test time, using a temporary location
- detecting if compilers are present
- determining paths to tests

é    N)ÚPath)Úasstr)Ú	asunicode)ÚtemppathÚIS_WASM)Úimport_modulei  Úcygwinz**/*.dllc                  óÎ   — t         �A	 t        j                  j                  t         «       	 t        j                  t         «       d a y y # t        $ r Y Œ)w xY w# t        $ r Y Œw xY w©N)Ú_module_dirÚsysÚpathÚremoveÚ
ValueErrorÚshutilÚrmtreeÚOSError© ó    ú^G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\numpy/f2py/tests/util.pyÚ_cleanupr   (   sa   € äÐð	Ü�H‰H�O‰OœKÔ(ð	Ü�M‰Mœ+Ô&ð ‰ð øô ò 	Ùð	ûô ò 	Ùð	ús"   ˆ#A	 ¬A Á		AÁAÁ	A$Á#A$c                  óè   — t         €gt        j                  «       a t        j                  t
        «       t         t        j                  vr$t        j                  j                  dt         «       t         S ©Nr   )	r   ÚtempfileÚmkdtempÚatexitÚregisterr   r   r   Úinsertr   r   r   Úget_module_dirr   6   sF   € äÐÜ×&Ñ&Ó(ˆÜ�‰œÔ!ÜœcŸh™hÑ&Ü�H‰H�O‰O˜Aœ{Ô+ÜÐr   c                  óx   — t        «        dt        z  } t        dz  a| t        j                  v rt	        d«      ‚| S )Nz_test_ext_module_%dé   z%Temporary module name already in use.)r   Ú_module_numr   ÚmodulesÚRuntimeError)Únames    r   Úget_temp_module_namer&   @   s;   € ô ÔØ ¤;Ñ.€DÜ�1Ñ€KØŒs�{‰{ÑäÐBÓCÐCØ€Kr   c                 ó<   ‡ ‡— i Šˆ ˆfd„}‰ j                   |_         |S )Nc                  óž   •— t        | |f«      }|‰vr	  ‰| i |¤Ž‰|<   ‰|   }t        |t        «      r|‚|S # t        $ r}|‰|<   ‚ d }~ww xY wr   )ÚreprÚ	ExceptionÚ
isinstance)ÚaÚkwÚkeyÚeÚretÚfuncÚmemos        €€r   Úwrapperz_memoize.<locals>.wrapperO   sj   ø€ Ü�A�r�7‹mˆØ�d‰?ðÙ  !˜N r™N��S‘	ð �3‰iˆÜ�cœ9Ô%ØˆIØˆ
øô ò Ø��S‘	Øûðús   ”8 ¸	AÁAÁA)Ú__name__)r1   r3   r2   s   ` @r   Ú_memoizer5   L   s    ù€ Ø€Dõð —}‘}€GÔØ€Nr   c           
      ó¢  — dt         j                  ›d�}t        «       }g }g }| D ]Ë  }	t        j                  j	                  |	«      st        d|	z  «      ‚t        j                  j                  |t        j                  j                  |	«      «      }
t        j                  |	|
«       |j                  |
«       t        j                  j                  |
«      \  }}|dv sŒ»|j                  |
«       ŒÍ |sJ ‚|€
t        «       }dd|g|z   |z   }|r	|dg|z   z  }|r	|d	g|z   z  }t        j                  «       }	 t        j                  |«       t         j                  d|g|z   }t!        j"                  |t         j$                  t         j&                  ¬
«      }|j)                  «       \  }}|j*                  dk7  rt        d|dd ›dt-        |«      ›�«      ‚	 t        j                  |«       |D ]  }	t        j.                  |	«       Œ 	 t         j0                  dk(  rst2        j5                  t7        j6                  t        j                  j                  |dj9                  |«      «      «      «       t!        j:                  g d¢t2        z   «       t=        |«      S # t        j                  |«       |D ]  }	t        j.                  |	«       Œ w xY w)zH
    Compile and import a f2py module, built from the given files.

    zimport sys; sys.path = z&; import numpy.f2py; numpy.f2py.main()ú%s is not a file)ú.f90ú.fz.cú.pyfNz-cz-mzskip:zonly:©ÚstdoutÚstderrr   zRunning f2py failed: é   Ú
r	   z{:s}*)z/usr/bin/rebasez
--databasez--obliviousz	--verbose)r   r   r   ÚosÚisfiler$   ÚjoinÚbasenamer   ÚcopyfileÚappendÚsplitextr&   ÚgetcwdÚchdirÚ
executableÚ
subprocessÚPopenÚPIPEÚSTDOUTÚcommunicateÚ
returncoder   ÚunlinkÚplatformÚ_module_listÚextendÚglobÚformatÚ
check_callr   )Úsource_filesÚoptionsÚskipÚonlyÚmodule_nameÚcodeÚdÚdst_sourcesÚf2py_sourcesÚfnÚdstÚbaseÚextÚ	f2py_optsÚcwdÚcmdÚpÚoutÚerrs                      r   Úbuild_modulerj   e   sg  € ð %¤S§X¡X LÐ0VÐW€DäÓ€Að €KØ€LÛˆÜ�w‰w�~‰~˜bÔ!ÜÐ1°BÑ6Ó7Ð7Ü�g‰g�l‰l˜1œbŸg™g×.Ñ.¨rÓ2Ó3ˆÜ�‰˜˜CÔ Ø×Ñ˜3Ôä—G‘G×$Ñ$ SÓ)‰	ˆˆcØÐ.Ò.Ø×Ñ Õ$ð ñ Ðˆ<ð ÐÜ*Ó,ˆØ�t˜[Ð)¨GÑ3°lÑB€IÙØ�g�Y Ñ%Ñ%ˆ	ÙØ�g�Y Ñ%Ñ%ˆ	ô �)‰)‹+€CðÜ
�‰�ŒÜ�~‰~˜t TÐ*¨YÑ6ˆÜ×Ñ˜SÜ$.§O¡OÜ$.×$5Ñ$5ô7ˆð —=‘=“?‰ˆˆSØ�<‰<˜1ÒÝØ # A B¢¬°3¬ð 9ó :ð :ð ô 	�‰�Œó ˆBÜ�I‰I�b�Mñ ô ‡|�|�xÒô 	×ÑÜ�I‰I”b—g‘g—l‘l 1 g§n¡n°[Ó&AÓBÓCô	
ô 	×ÑÚIÜñô	
ô ˜Ó%Ð%øô- 	�‰�Œó ˆBÜ�I‰I�b�Mñ ús   Ä9BJ Ê3Kc                 óÔ   — |€d}t        |¬«      5 }t        |d«      5 }|j                  | «       ddd«       t        |g||||¬«      cddd«       S # 1 sw Y   Œ#xY w# 1 sw Y   yxY w)z6
    Compile and import Fortran code using f2py.

    Nr9   )ÚsuffixÚw©rX   rY   rZ   r[   )r   ÚopenÚwriterj   )Úsource_coderX   rY   rZ   rl   r[   r   Úfs           r   Ú
build_coders   ¯   sc   € ð €~ØˆÜ	˜Õ	  DÜ�$˜Œ_ Ø�G‰G�KÔ ÷ ä˜T˜FØ$+Ø!%Ø!%Ø(3ô	5÷ 
!Ñ	 ßˆ_ú÷ 
!Ð	 ús!   ‘AžA°AÁA	ÁAÁA'c            	      óÐ  — t         �t         S da t        rt         S t        j                  dt	        t
        j                  «      › d�«      } | t        t	        t
        j                  «      ¬«      z  } t        j                  «       }	 t        j                  j                  |d«      }t        |d«      5 }|j                  | «       d d d «       t
        j                  ddg}t        j                   |t        j"                  t        j$                  |¬«      }|j'                  «       \  }}t)        j*                  |«       t-        j.                  d	|«      }|rht1        t3        |j5                  d
«      «      «      t1        t3        |j5                  d«      «      «      t1        t3        |j5                  d«      «      «      fa t         S # 1 sw Y   ŒÿxY w# t)        j*                  |«       w xY w)N)FFFz8        import os
        import sys
        sys.path = a{  

        def configuration(parent_name='',top_path=None):
            global config
            from numpy.distutils.misc_util import Configuration
            config = Configuration('', parent_name, top_path)
            return config

        from numpy.distutils.core import setup
        setup(configuration=configuration)

        config_cmd = config.get_config_cmd()
        have_c = config_cmd.try_compile('void foo() {}')
        print('COMPILERS:%%d,%%d,%%d' %% (have_c,
                                          config.have_f77c(),
                                          config.have_f90c()))
        sys.exit(99)
        )Úsyspathzsetup.pyrm   Úconfig)r<   r=   re   s   COMPILERS:(\d+),(\d+),(\d+)r!   é   é   )Ú_compiler_statusr   ÚtextwrapÚdedentr)   r   r   Údictr   r   r@   rB   ro   rp   rI   rJ   rK   rL   rM   rN   r   r   ÚreÚsearchÚboolÚintÚgroup)	r\   ÚtmpdirÚscriptrr   rf   rg   rh   ri   Úms	            r   Ú_get_compiler_statusr…   Í   st  € äÐ#ÜÐà,ÐÝäÐô �?‰?ð  ô œŸ™“NÐ#ð $	ðó €Dð* ”$œt¤C§H¡H›~Ô.Ñ.€Dä×ÑÓ€FðÜ—‘—‘˜f jÓ1ˆä�&˜#Ô !Ø�G‰G�DŒM÷ ô �~‰~˜z¨8Ð4ˆÜ×Ñ˜SÜ$.§O¡OÜ$.×$5Ñ$5Ø!'ô)ˆð —=‘=“?‰ˆˆSä�‰�fÔä
�	‰	Ð1°3Ó7€AÙä”�Q—W‘W˜Q“Z“Ó!Ü”�Q—W‘W˜Q“Z“Ó!Ü”�Q—W‘W˜Q“Z“Ó!ð
Ðô Ð÷) Ðûô 	�‰�fÕús%   Â,G Â2GÃA#G ÇGÇG ÇG%c                  ó   — t        «       d   S r   ©r…   r   r   r   Úhas_c_compilerrˆ     ó   € ÜÓ! !Ñ$Ð$r   c                  ó   — t        «       d   S )Nr!   r‡   r   r   r   Úhas_f77_compilerr‹     r‰   r   c                  ó   — t        «       d   S )Nrw   r‡   r   r   r   Úhas_f90_compilerr�     r‰   r   c                 ó@  — t        «       }g }| D ]“  }t        j                  j                  |«      st	        d|z  «      ‚t        j                  j                  |t        j                  j                  |«      «      }t        j                  ||«       |j                  |«       Œ• t        j                  |«      j                  dd«      }dt        t        j                  «      › d|› d�}t        j                  j                  |t        «       dz   «      }	|j                  |	«       t!        |	d«      5 }
|
j#                  |j%                  d	«      «       d
d
d
«       t        j&                  «       }	 t        j(                  |«       t        j*                  |	ddg}t-        j.                  |t,        j0                  t,        j2                  ¬«      }|j5                  «       \  }}|j6                  dk7  rt	        d|dd
 ›dt9        |«      ›�«      ‚	 t        j(                  |«       |D ]  }t        j:                  |«       Œ 	 t=        |«       t        j>                  |   S # 1 sw Y   �ŒxY w# t        j(                  |«       |D ]  }t        j:                  |«       Œ w xY w)z6
    Build a module via distutils and import it.

    r7   r?   z
    z!
import os
import sys
sys.path = z¥

def configuration(parent_name='',top_path=None):
    from numpy.distutils.misc_util import Configuration
    config = Configuration('', parent_name, top_path)
    z…
    return config

if __name__ == "__main__":
    from numpy.distutils.core import setup
    setup(configuration=configuration)
    z.pyÚwbÚlatin1NÚ	build_extz-ir;   r   z Running distutils build failed: r>   ) r   r@   r   rA   r$   rB   rC   r   rD   rE   rz   r{   Úreplacer)   r   r&   ro   rp   ÚencoderG   rH   rI   rJ   rK   rL   rM   rN   rO   r   rP   Ú
__import__r#   )rW   Úconfig_coder[   r-   r]   r^   r`   ra   r\   rƒ   rr   re   rf   rg   rh   ri   s                   r   Úbuild_module_distutilsr–     s  € ô 	Ó€Að €KÛˆÜ�w‰w�~‰~˜bÔ!ÜÐ1°BÑ6Ó7Ð7Ü�g‰g�l‰l˜1œbŸg™g×.Ñ.¨rÓ2Ó3ˆÜ�‰˜˜CÔ Ø×Ñ˜3Õð ô —/‘/ +Ó.×6Ñ6°t¸XÓF€Kðô ”—‘‹NÐð ð
 €Mð ð€Dô �W‰W�\‰\˜!Ô1Ó3°eÑ;Ó<€FØ×Ñ�vÔÜ	ˆf�dÔ	˜qØ	�‰�—‘˜HÓ%Ô&÷ 
ô �)‰)‹+€CðÜ
�‰�ŒÜ�~‰~˜v {°DÐ9ˆÜ×Ñ˜SÜ$.§O¡OÜ$.×$5Ñ$5ô7ˆð —=‘=“?‰ˆˆSØ�<‰<˜1ÒÝØ # A B¢¬¨s¬ð 5ó 6ð 6ð ô 	�‰�Œó ˆBÜ�I‰I�b�Mñ ô ˆ{ÔÜ�;‰;�{Ñ#Ð#÷1 
Ñ	ûô  	�‰�Œó ˆBÜ�I‰I�b�Mñ ús   Ä2!IÅ0BI* ÉI'É*3Jc                   ó>   — e Zd ZdZdZg Zg Zg ZdZdZ	e
d„ «       Zd„ Zy)ÚF2PyTestNr9   c                 óx   — t        | «      }d|j                  j                  dd«      d   › d|j                  › d�S )NÚ_Ú.r!   éÿÿÿÿÚ_ext_module)ÚtypeÚ
__module__Úrsplitr4   )ÚselfÚclss     r   r[   zF2PyTest.module_namej  s;   € ä�4‹jˆØ�3—>‘>×(Ñ(¨¨QÓ/°Ñ3Ð4°A°c·l±l°^À;ÐOÐOr   c                 óR  — t         j                  dk(  rt        j                  d«       | j                  �y t        «       st        j                  d«       g }| j                  r|j                  | j                  «       | j                  �|j                  | j                  «       d}d}d}|D ]Y  }t        |«      j                  d«      rd}Œ t        |«      j                  d«      rd}Œ=t        |«      j                  d«      sŒXd}Œ[ |rt        «       st        j                  d	«       |rt        «       st        j                  d
«       |r)t        «       st        «       st        j                  d«       | j                  �Rt        | j                  | j                   | j                  | j"                  | j                  | j$                  ¬«      | _        | j                  �Ht'        | j                  | j                   | j                  | j"                  | j$                  ¬«      | _        y y )NÚwin32z)Fails with MinGW64 Gfortran (Issue #9673)zNo C compiler availableFr9   Tr8   r:   z No Fortran 77 compiler availablez No Fortran 90 compiler availablezNo Fortran compiler available)rX   rY   rZ   rl   r[   rn   )r   rQ   ÚpytestrY   Úmodulerˆ   ÚsourcesrS   r\   rE   rl   ÚstrÚendswithr‹   r�   rs   rX   rZ   r[   rj   )r¡   ÚcodesÚ	needs_f77Ú	needs_f90Ú	needs_pyfr`   s         r   Úsetup_methodzF2PyTest.setup_methodo  s¡  € Ü�<‰<˜7Ò"Ü�K‰KÐCÔDà�;‰;Ð"Øô ÔÜ�K‰KÐ1Ô2àˆØ�<Š<Ø�L‰L˜Ÿ™Ô&Ø�9‰9Ð Ø�L‰L˜Ÿ™Ô%àˆ	Øˆ	Øˆ	ÛˆBÜ�2‹w×Ñ Ô%Ø ‘	Ü�R“×!Ñ! &Ô)Ø ‘	Ü�R“×!Ñ! &Õ)Ø ‘	ð ñ Ô-Ô/Ü�K‰KÐ:Ô;ÙÔ-Ô/Ü�K‰KÐ:Ô;ÙÔ.Ô0Ô4DÔ4FÜ�K‰KÐ7Ô8ð �9‰9Ð Ü$Ø—	‘	ØŸ™Ø—Y‘YØ—Y‘YØ—{‘{Ø ×,Ñ,ôˆDŒKð �<‰<Ð#Ü&Ø—‘ØŸ™Ø—Y‘YØ—Y‘YØ ×,Ñ,ôˆD�Kð $r   )r4   rŸ   Ú__qualname__r\   r§   rX   rY   rZ   rl   r¦   Úpropertyr[   r®   r   r   r   r˜   r˜   a  s>   „ Ø€DØ€GØ€GØ€DØ€DØ€FØ€FàñPó ðPó4r   r˜   c                  ó–   — t        t        j                  j                  «      j                  j                  «       } |j                  | Ž S r   )r   ÚnumpyÚf2pyÚ__file__ÚparentÚresolveÚjoinpath)r,   r]   s     r   Úgetpathr¸   «  s5   € äŒU�Z‰Z× Ñ Ó!×(Ñ(×0Ñ0Ó2€AØˆ1�:‰:�qˆ>Ðr   c              #   óÆ   K  — t        j                  «       }t        j                  | «       	 d –— t        j                  |«       y # t        j                  |«       w xY w­wr   )r   re   r@   rH   )r   Úcurpaths     r   Ú	switchdirr»   ±  s<   è ø€ ä�h‰h‹j€GÜ‡H�HˆT„NðÛä
�‰�ÕøŒ�‰�Õüs   ‚*A!­A ±A!ÁAÁA!)0Ú__doc__rT   r@   r   rJ   r   r   r   rz   r}   r¥   Ú
contextlibr²   Úpathlibr   Únumpy.compatr   Únumpy._utilsr   Únumpy.testingr   r   Ú	importlibr   r   r"   rQ   r´   rµ   ÚNUMPY_INSTALL_ROOTÚlistrR   r   r   r&   r5   rj   rs   ry   r…   rˆ   r‹   r�   r–   r˜   r¸   Úcontextmanagerr»   r   r   r   Ú<module>rÆ      s>  ðñó Û 	Û 
Û Û Û Û Û Û 	Û Û Û å Ý Ý "ß +Ý #ð €Ø€à‡<�<�8ÒÙ˜h›×.Ñ.×5Ñ5×<Ñ<ÐÙÐ*×/Ñ/°
Ó;Ó<€Lòòò	òð2 
Ø')°¸Èò F&ó 
ðF&ðR 
àØØØØò5ó 
ð5ð4 Ð ò;ò|%ò%ò%ð 
ñ<$ó 
ð<$÷HBñ BòTð ×Ññó ñr   