a
    ³ÐOc2`  ã                   @   s  d 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
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ejZejZejjZejZejZde› de› d�Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd"dd„Zdd„ Zdd„ Z d d!„ Z!dS )#a‡  

f2py2e - Fortran to Python C/API generator. 2nd Edition.
         See __usage__ below.

Copyright 1999--2011 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@cens.ioc.ee>
Permission to use, modify, and distribute this software is given under the
terms of the NumPy License.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
$Date: 2005/05/06 08:31:19 $
Pearu Peterson

é    N)ÚPathé   )Úcrackfortran)Úrules)Úcb_rules)Úauxfuncs)Úcfuncs)Úf90mod_rules)Ú__version__)Ú	capi_mapsa‚  Usage:

1) To construct extension module sources:

      f2py [<options>] <fortran files> [[[only:]||[skip:]] \
                                        <fortran functions> ] \
                                       [: <fortran files> ...]

2) To compile fortran files and build extension modules:

      f2py -c [<options>, <build_flib options>, <extra options>] <fortran files>

3) To generate signature files:

      f2py -h <filename.pyf> ...< same options as in (1) >

Description: This program generates a Python C/API file (<modulename>module.c)
             that contains wrappers for given fortran functions so that they
             can be called from Python. With the -c option the corresponding
             extension modules are built.

Options:

  --2d-numpy       Use numpy.f2py tool with NumPy support. [DEFAULT]
  --2d-numeric     Use f2py2e tool with Numeric support.
  --2d-numarray    Use f2py2e tool with Numarray support.
  --g3-numpy       Use 3rd generation f2py from the separate f2py package.
                   [NOT AVAILABLE YET]

  -h <filename>    Write signatures of the fortran routines to file <filename>
                   and exit. You can then edit <filename> and use it instead
                   of <fortran files>. If <filename>==stdout then the
                   signatures are printed to stdout.
  <fortran functions>  Names of fortran routines for which Python C/API
                   functions will be generated. Default is all that are found
                   in <fortran files>.
  <fortran files>  Paths to fortran/signature files that will be scanned for
                   <fortran functions> in order to determine their signatures.
  skip:            Ignore fortran functions that follow until `:'.
  only:            Use only fortran functions that follow until `:'.
  :                Get back to <fortran files> mode.

  -m <modulename>  Name of the module; f2py generates a Python/C API
                   file <modulename>module.c or extension module <modulename>.
                   Default is 'untitled'.

  '-include<header>'  Writes additional headers in the C wrapper, can be passed
                      multiple times, generates #include <header> each time.

  --[no-]lower     Do [not] lower the cases in <fortran files>. By default,
                   --lower is assumed with -h key, and --no-lower without -h key.

  --build-dir <dirname>  All f2py generated files are created in <dirname>.
                   Default is tempfile.mkdtemp().

  --overwrite-signature  Overwrite existing signature file.

  --[no-]latex-doc Create (or not) <modulename>module.tex.
                   Default is --no-latex-doc.
  --short-latex    Create 'incomplete' LaTeX document (without commands
                   \documentclass, \tableofcontents, and \begin{document},
                   \end{document}).

  --[no-]rest-doc Create (or not) <modulename>module.rst.
                   Default is --no-rest-doc.

  --debug-capi     Create C/API code that reports the state of the wrappers
                   during runtime. Useful for debugging.

  --[no-]wrap-functions    Create Fortran subroutine wrappers to Fortran 77
                   functions. --wrap-functions is default because it ensures
                   maximum portability/compiler independence.

  --include-paths <path1>:<path2>:...   Search include files from the given
                   directories.

  --help-link [..] List system resources found by system_info.py. See also
                   --link-<resource> switch below. [..] is optional list
                   of resources names. E.g. try 'f2py --help-link lapack_opt'.

  --f2cmap <filename>  Load Fortran-to-Python KIND specification from the given
                   file. Default: .f2py_f2cmap in current directory.

  --quiet          Run quietly.
  --verbose        Run with extra verbosity.
  --skip-empty-wrappers   Only generate wrapper files when needed.
  -v               Print f2py version ID and exit.


numpy.distutils options (only effective with -c):

  --fcompiler=         Specify Fortran compiler type by vendor
  --compiler=          Specify C compiler type (as defined by distutils)

  --help-fcompiler     List available Fortran compilers and exit
  --f77exec=           Specify the path to F77 compiler
  --f90exec=           Specify the path to F90 compiler
  --f77flags=          Specify F77 compiler flags
  --f90flags=          Specify F90 compiler flags
  --opt=               Specify optimization flags
  --arch=              Specify architecture specific optimization flags
  --noopt              Compile without optimization
  --noarch             Compile without arch-dependent optimization
  --debug              Compile with debugging information

Extra options (only effective with -c):

  --link-<resource>    Link extension module with <resource> as defined
                       by numpy.distutils/system_info.py. E.g. to link
                       with optimized LAPACK libraries (vecLib on MacOSX,
                       ATLAS elsewhere), use --link-lapack_opt.
                       See also --help-link switch.

  -L/path/to/lib/ -l<libname>
  -D<define> -U<name>
  -I/path/to/include/
  <filename>.o <filename>.so <filename>.a

  Using the following macros may be required with non-gcc Fortran
  compilers:
    -DPREPEND_FORTRAN -DNO_APPEND_FORTRAN -DUPPERCASE_FORTRAN
    -DUNDERSCORE_G77

  When using -DF2PY_REPORT_ATEXIT, a performance report of F2PY
  interface is printed out at exit (platforms: Linux).

  When using -DF2PY_REPORT_ON_ARRAY_COPY=<int>, a message is
  sent to stderr whenever F2PY interface makes a copy of an
  array. Integer <int> sets the threshold for array sizes when
  a message should be shown.

Version:     z
numpy Version: zñ
Requires:    Python 3.5 or higher.
License:     NumPy license (see LICENSE.txt in the NumPy source code)
Copyright 1999 - 2011 Pearu Peterson all rights reserved.
https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2ec                 C   sJ  g g g g f\}}}}d\	}}}}}	}
}}}d}d}d}d}d}d}d}g }d\}}|d d dœ}| D �]¤}|d	krrqb|d
kr€d}qb|dkrŽd}qb|dkrœd}qb|d d… dkrÀ|  |dd … ¡ qb|dkrÎd}qb|dkrÜd}	qb|dkrêd}qb|dk� rúd}qb|dk�r|d7 }qb|dk�rd}qb|dk�r.d}qb|dk�r>d}qb|dk�rNd}qb|dk�r^d}qb|dk�rnd}qb|dk�r‚d|d< qb|dk�r’d}qb|dk�r¢d}qb|dk�r²d}qb|dk�rÆd|d < qb|d!k�rÖd}qb|d"k�ræd}qb|d d#… d$k�r
ttƒ t ¡  qb|d%k�rd}qb|d d… d&k�rdtjd'   |d(d… ¡ d)|dd …  tj|d(d… < qb|d d*… d+v �r„td,ƒ d}
qb|d d*… d-v �rœd}
qb|d.k�r¬d/}qb|d d0k�rÔt	d1t
|ƒ ƒ t ¡  qb|�räd}|}qb|�rôd}|}qb|	�rd}	|}qb|
�r"d}
| | tj¡¡ qb|�r6d}||d2< qb|�rJd}||d3< qb|�r^d}||d4< qb|dk�ràz8t|ƒ� W d   ƒ n1 �sŠ0    Y  |  |¡ W n< t�yÜ } z"t	d5|›d6|›d7�ƒ W Y d }~n
d }~0 0 qb|dk�rö|  |¡ qb|dkrb|  |¡ qb|�s,|�s,|�s,ttƒ t ¡  tj |¡�sV|�sLtd8| ƒ t |¡ |�rjtj ||¡}|�rœtj |¡�rœd |v�rœt	d9| ƒ t ¡  ||d:< ||d;< ||d<< |dk�rÎ|�sÎd|d=< n||d=< |�rä||d>< |�rò||d?< |�r ||d@< |�r||dA< ||dB< ||dC< ||dD< ||dE< ||dF< | d4d ¡ ||fS )GN)	r   r   r   r   r   r   r   r   r   r   Téÿÿÿÿr   Ú.)NN)Ú	buildpathÚcoutputÚf2py_wrapper_outputÚ úonly:úskip:ú:é   z--debug-z--lowerú--build-dirz
--no-lowerú--quietz	--verbosez--latex-docz--no-latex-docz
--rest-docz--no-rest-docz--wrap-functionsz--no-wrap-functionsz--short-latexZ
shortlatexz	--coutputz--f2py-wrapper-outputú--f2cmapz--overwrite-signaturezh-overwritez-hú-mé   z-vz--show-compilersz-includeÚuserincludesé	   z	#include é   ú--include_pathszHf2py option --include_paths is deprecated, use --include-paths instead.
ú--include-pathsz--skip-empty-wrappersFú-zUnknown option %s
r   r   Úf2cmap_filez	OSError: z. Skipping file "z".
zCreating build directory %s
zFSignature file "%s" exists!!! Use --overwrite-signature to overwrite.
ÚemptygenÚdebugÚverboseúdo-lowerÚmoduleÚ	signsfileÚ	onlyfuncsÚ	skipfuncsÚ
dolatexdocÚ	dorestdocÚ	wrapfuncsr   Úinclude_paths)ÚappendÚprintÚf2py_versionÚsysÚexitr   Zoutneedsr   ÚoutmessÚerrmessÚreprÚextendÚsplitÚosÚpathsepÚopenÚOSErrorÚ	__usage__ÚpathÚisdirÚmkdirÚjoinÚisfileÚ
setdefault)Z	inputlineÚfilesr)   r(   r#   ÚfÚf2Zf3Zf5Zf6Zf7Zf8Zf9Zf10r$   r"   Zdolcr*   r+   r,   r   r-   r'   Ú
modulenameÚoptionsÚlZdetail© rI   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/numpy/f2py/f2py2e.pyÚscaninputline³   s*   þ




















 ÿ






 .

ÿ
rK   c                 C   s~  |t _|d t_|d t_d|v r,|d t_d|v r>|d t_d|v rP|d t_|d tjd d …< |d t_	t | ¡}d|v ròt
d	|d  ƒ t |¡}|d d
d … dkrºtj |¡ n8t|d dƒ�}| |¡ W d   ƒ n1 sè0    Y  |d d u �r|D ]}d|d  |d< �qn|D ]}|d |d< �q"|d d u �rb|D ]}d|d  |d< �qHn|D ]}|d |d< �qf|S )Nr#   r$   r&   r)   r(   r-   r%   r'   zSaving signatures to file "%s"
iúÿÿÿÚstdoutÚwr   z
%smodule.cÚnamer   z%s-f2pywrappers.f)r   rG   r   r#   r$   Zf77modulenamer)   r(   r-   Zdolowercaser3   Zcrack2fortranr1   rL   Úwriter:   )rC   rG   ÚpostlistZpyfrD   ÚmodrI   rI   rJ   ÚcallcrackfortranJ  s<    







(rR   c           
   	   C   s^  t  ¡  tdƒ g g i   }}}| D ]p}d|d v r@t |¡ q$d|v r||d  ¡ D ]&}||vrhg ||< ||  |d ¡ qT| |¡ | |d ¡ q$i }t||ƒD ]´\}}||v rÚtd|d dd„ || D ƒ¡f ƒ q¤g }	d|v �r:|d  ¡ D ]D}||v �r"||v �r"|	 || 	|¡ ¡ qôtd	|› d
|› d�ƒ qôi ||< t
|| t ||	¡ƒ q¤|S )NzBuilding modules...
Ú__user__rN   Úusez+	Skipping module "%s" which is used by %s.
ú,c                 s   s   | ]}d | V  qdS )z"%s"NrI   ©Ú.0ÚsrI   rI   rJ   Ú	<genexpr>�  ó    zbuildmodules.<locals>.<genexpr>z		Module "z" uses nonexisting "z" which will be ignored.
)r   Zbuildcfuncsr3   r   ZbuildcallbacksÚkeysr.   Úzipr@   ÚindexÚdict_appendr   Zbuildmodule)
ÚlstÚmodulesZmnamesÚisusedbyÚitemÚuÚretr&   rN   ZumrI   rI   rJ   Úbuildmodulesn  s<    
ÿ

ÿre   c                 C   sP   |  ¡ D ]B\}}|| vr g | |< t|tƒr<| | | | |< q| |  |¡ qd S ©N)ÚitemsÚ
isinstanceÚlistr.   )Zd_outZd_inÚkÚvrI   rI   rJ   r^   ‘  s    
r^   c              
   C   sâ  t  ¡  tj tj tj¡¡}tj |dd¡}tj |dd¡}t	| ƒ\}}|t
_t |d ¡ t||ƒ}i }|D ]@}d|v rp|d  ¡ D ]&}	|	|vrœg ||	< ||	  |d ¡ qˆqp|D ]Z}|d dkr¶d	|d v r¶|d |v r¶td
|d › d� d dd„ ||d  D ƒ¡¡ƒ q¶d|v �rX|d dk�rTtdƒ tdtj tjd ¡|d f ƒ dS |D ]:}|d dk�r\d|v�r€tdƒ tdt|d ƒ ƒ‚�q\|d t
_|t_|d t
_t|ƒ}
|
 ¡ D ]}t|
| ||dœƒ �qÂ|
S )au  
    Equivalent to running::

        f2py <args>

    where ``<args>=string.join(<list>,' ')``, but in Python.  Unless
    ``-h`` is used, this function returns a dictionary containing
    information on generated modules and their dependencies on source
    files.

    You cannot build extension modules with this function, that is,
    using ``-c`` is not allowed. Use the ``compile`` command instead.

    Examples
    --------
    The command ``f2py -m scalar scalar.f`` can be executed from Python as
    follows.

    .. literalinclude:: ../../source/f2py/code/results/run_main_session.dat
        :language: python

    Úsrczfortranobject.hzfortranobject.cr!   rT   rN   Úblockzpython modulerS   z$Skipping Makefile build for module "z" which is used by {}
rU   c                 s   s   | ]}d |› d �V  qdS )ú"NrI   rV   rI   rI   rJ   rY   È  rZ   zrun_main.<locals>.<genexpr>r'   r$   r   zKStopping. Edit the signature file and then run f2py on the signature file: z%s %s
r   NzJTip: If your original code is Fortran source then you must use -m option.
z2All blocks must be python module blocks but got %sr#   r,   )ZcsrcÚh)r   Zreset_global_f2py_varsr8   r=   ÚdirnameÚabspathr   Ú__file__r@   rK   r   rG   r   Zload_f2cmap_filerR   r[   r.   r3   ÚformatÚbasenamer1   Úargvr4   Ú	TypeErrorr5   Zdebugoptionsr	   r,   re   r^   )Zcomline_listZf2pydirZfobjhsrcZfobjcsrcrC   rG   rP   ra   Úplistrc   rd   ÚmnrI   rI   rJ   Úrun_main›  s`    
þÿ
ÿÿ
ÿ
ÿ


ry   c           	      C   sv   g g  }}t  | d | d ¡j}|r0t| ƒ}nd}dd„ |D ƒD ]*}||ƒrb| ||d… ¡ qB| |¡ qB||fS )z,
    Filter files by prefix and suffix.
    z.*z\Zr   c                 S   s   g | ]}|  ¡ ‘qS rI   )Ústrip)rW   ÚxrI   rI   rJ   Ú
<listcomp>ì  rZ   z filter_files.<locals>.<listcomp>N)ÚreÚcompileÚmatchÚlenr.   )	ÚprefixÚsuffixrC   Úremove_prefixÚfilteredÚrestr   ÚindÚfilerI   rI   rJ   Úfilter_filesâ  s    

rˆ   c                 C   s   t j t j | j¡¡}|S rf   )r8   r=   rp   rr   )r&   ÚprI   rI   rJ   Ú
get_prefixô  s    rŠ   c            $   
      s’  ddl } tj d¡}tj|= d}ztj d¡}W n tyF   d}Y n0 |durttj|d  }tj|d = tj|= nd}|  ¡ }t d¡‰ ‡ fdd„tjdd… D ƒ‰
‡
fd	d„tjD ƒt_ˆ
rÎd
d„ ˆ
D ƒ‰
t d¡‰‡fdd„tjdd… D ƒ‰‡fdd„tjD ƒt_g ‰d}tjdd… D ]>}|dv �r4d}n|dk�rBd}|�sR|dk�r ˆ |¡ �q ˆ�r~ˆd dk�r~ˆ d¡ ˆ 	ˆ¡ ‡fdd„tjD ƒt_t d¡‰‡fdd„tjdd… D ƒ‰‡fdd„tjD ƒt_t d¡‰‡fdd„tjdd… D ƒ‰‡fdd„tjD ƒt_g }ˆD ]Î}d}|dt
|ƒ… |k�rddlm}	 |	 ¡  t|	j ¡ ƒ}
|t
|ƒd…  ¡  }}||
v�rÐi }z|| }W n: t�yÊ   || ¡ v�rÆtd|t
|ƒd…  ƒ Y n0 |}ˆ |¡}d| ˆ|< �q�q|D ]}ˆ |¡}ˆ|= �qòt
ˆƒdk�s$J tˆƒƒ‚t d¡‰‡fdd„tjdd… D ƒ‰	‡	fdd„tjD ƒt_dˆv �rtˆ	 d¡ d }tjdd… }d!D ]X}|tjv �rŠtj |¡}ˆ 	tj||d … ¡ tj|d = tj|= tjdd… }�qŠd"tjv �r.tj d"¡}tj|d  }tj|d = tj|= tjdd… }nDdd#lm} td$d%|ƒ\}}|| }|D ]}||ƒ}|�rV �qr�qVtd$d&|ƒ\}}td'd$|dd(�\}}td)d$|dd(�\}}td*d$|dd(�\}}td+d$|dd(�\}}td,d$|dd(�\}}tt
|ƒƒD ]T}||  d-d¡}t
|ƒdk�r| d¡ t
|ƒdk�r:t|ƒ||< n
td.|ƒ �qòdd/lm} i }|�rp| 	| d0g ¡¡ dd1lm }m!} ||||||||ˆd2œ	}ˆ
�rädd3l"m#}  ˆ
D ]4}!||!ƒ}|�sÐt$d4t|!ƒ ƒ | |fi |¤Ž �q®|f i |¤Ž}"tjd gˆ	 t_tj 	d5d6|d7|d8d9d:g¡ ˆ�r8tj 	d;gˆ ¡ ˆ�rPtj 	d<gˆ ¡ ||"gd=� |�rŽt%j& '|¡�rŽddl(}#t$d>| ƒ |# )|¡ dS )?z 
    Do it all in one call!
    r   Nú-cr   r   z--link-c                    s   g | ]}ˆ   |¡r|‘qS rI   ©r   ©rW   Ú_m)Ú_reg1rI   rJ   r|     rZ   zrun_compile.<locals>.<listcomp>c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Úsysinfo_flagsrI   rJ   r|     rZ   c                 S   s   g | ]}|d d… ‘qS )é   NrI   )rW   rD   rI   rI   rJ   r|     rZ   zN--((no-|)(wrap-functions|lower)|debug-capi|quiet|skip-empty-wrappers)|-includec                    s   g | ]}ˆ   |¡r|‘qS rI   rŒ   r�   )Ú_reg2rI   rJ   r|     rZ   c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Ú
f2py_flagsrI   rJ   r|     rZ   )r   r   r   r   c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Úf2py_flags2rI   rJ   r|   &  rZ   z4--((f(90)?compiler(-exec|)|compiler)=|help-compiler)c                    s   g | ]}ˆ   |¡r|‘qS rI   rŒ   r�   )Ú_reg3rI   rJ   r|   )  rZ   c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Ú
flib_flagsrI   rJ   r|   *  rZ   zH--((f(77|90)(flags|exec)|opt|arch)=|(debug|noopt|noarch|help-fcompiler))c                    s   g | ]}ˆ   |¡r|‘qS rI   rŒ   r�   )Ú_reg4rI   rJ   r|   -  rZ   c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Úfc_flagsrI   rJ   r|   .  rZ   z--fcompiler=)Ú	fcompilerzUnknown vendor: "%s"r   z--(verbose)c                    s   g | ]}ˆ   |¡r|‘qS rI   rŒ   r�   )Ú_reg5rI   rJ   r|   I  rZ   c                    s   g | ]}|ˆ vr|‘qS rI   rI   r�   )Úsetup_flagsrI   rJ   r|   J  rZ   r   Zuntitled)r   r   r   r   )Úget_f2py_modulenamer   z[.]pyf([.]src|)z[.](o|a|so|dylib)z-I)rƒ   z-Lz-lz-Uz-Dú=zInvalid use of -D:)Úget_infoÚinclude_dirs)ÚsetupÚ	Extension)	rN   ÚsourcesrŸ   Úlibrary_dirsÚ	librariesÚdefine_macrosÚundef_macrosÚextra_objectsZf2py_options)r^   z9No %s resources found in system (try `f2py --help-link`)
Úbuildz--build-tempz--build-basez--build-platlibr   z--disable-optimizationZ	config_fcÚ	build_ext)Úext_moduleszRemoving build directory %s
)*Útempfiler1   ru   r]   Ú
ValueErrorÚmkdtempr}   r~   r.   r6   r€   Znumpy.distutilsr™   Zload_all_fcompiler_classesri   Zfcompiler_classr[   ÚlowerÚKeyErrorÚvaluesr/   r5   Z!numpy.distutils.command.build_srcrœ   rˆ   Úranger7   ÚtupleÚnumpy.distutils.system_inforž   ÚgetZnumpy.distutils.corer    r¡   Znumpy.distutils.misc_utilr^   r3   r8   r=   ÚexistsÚshutilÚrmtree)$r«   ÚiZremove_build_dirÚ	build_dirÚflÚaZdel_listrX   rk   r™   Zallowed_keysÚnvÚovZvmaprF   r¢   Úoptnamerœ   Z	pyf_filesrD   r§   rŸ   r£   r¤   r¦   r¥   Ú
name_valuerž   Znum_infor    r¡   Zext_argsr^   ÚnÚextr¶   rI   )r�   r’   r•   r—   rš   r“   r”   r˜   r–   r›   r�   rJ   Úrun_compileù  s(   


ÿ



ÿÿ








ù
ÿûrÂ   c                  C   sú   dt jdd … v r4t j d¡ ddlm}  | ƒ  d S dt jdd … v r^t j d¡ t  d¡ nldt jdd … v r~t j d¡ nLdt jdd … v rªt j d	¡ t j d¡ n d
t jdd … v rÊt j d
¡ n dt jdd … v rät	ƒ  nt
t jdd … ƒ d S )Nz--help-linkr   r   ©Úshow_allz
--g3-numpyz*G3 f2py support is not implemented, yet.\nz--2e-numericz--2e-numarrayz
-DNUMARRAYz
--2e-numpyr‹   )r1   ru   Úremover³   rÄ   ÚstderrrO   r2   r.   rÂ   ry   rÃ   rI   rI   rJ   Úmain¥  s$    rÇ   )N)"Ú__doc__r1   r8   Úpprintr}   Úpathlibr   r   r   r   r   r   r   r	   r
   r   Úversionr0   Znumpy_versionrÆ   rO   r4   Úshowr3   r<   rK   rR   re   r^   ry   rˆ   rŠ   rÂ   rÇ   rI   rI   rI   rJ   Ú<module>   sP    € ý € üÿ  $#
G
 -