JayKimDevolved's picture
JayKimDevolved/deepseek
c011401 verified
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<META name="Author" content="Pearu Peterson">
<!-- You may add here some keywords (comma separeted list) -->
<META name="Keywords" content="fortran,python,interface,f2py,f2py2e,wrapper,fpig">
<TITLE>F2PY - Fortran to Python Interface Generator</TITLE>
<LINK rel="stylesheet" type="text/css" href="/styles/userstyle.css">
</HEAD>
<BODY>
<!-- Begin of user text -->
<H1>F2PY &shy; Fortran to Python Interface Generator</H1>
by <em>Pearu Peterson</em>
<h2>What's new?</h2>
See <a href="NEWS.txt">NEWS.txt</a> for the latest changes in <code>f2py</code>.
<dl>
<dt> July ??, 2002
<dd> Implemented prototype calculator, complete tests for scalar F77
functions, --help-compiler option. Fixed number of bugs and
removed obsolete features.
<dt> April 4, 2002
<dd> Fixed a nasty bug of copying one-dimensional non-contiguous arrays.
(Thanks to Travis O. for pointing this out).
<dt> March 26, 2002
<dd> Bug fixes, turned off F2PY_REPORT_ATEXIT by default.
<dt> March 13, 2002
<dd> MAC support, fixed incomplete dependency calculator, minor bug fixes.
<dt> March 3, 2002
<dd> Fixed memory leak and copying of multi-dimensional complex arrays.
<dt> <a href="oldnews.html">Old news</a>.
</dl>
<h2>Introduction</h2>
Writing Python C/API wrappers for Fortran routines can be a very
tedious task, especially if a Fortran routine takes more than 20
arguments but only few of them are relevant for the problems that they
solve. So, I have developed a tool that generates the C/API modules
containing wrapper functions of Fortran routines. I call this
tool as <em>F2PY &shy; Fortran to Python Interface Generator</em>.
It is completely written in <a href="http://www.python.org">Python</a>
language and can be called from the command line as <code>f2py</code>.
<em>F2PY</em> (in NumPy) is released under the terms of the NumPy License.
<h2><code>f2py</code>, Second Edition</h2>
The development of <code>f2py</code> started in summer of 1999.
For now (January, 2000) it has reached to stage of being a
complete tool: it scans real Fortran code, creates signature file
that the user can modify, constructs C/API module that can be
complied and imported to Python, and it creates LaTeX documentation
for wrapper functions. Below is a bit longer list of
<code>f2py</code> features:
<ol>
<li> <code>f2py</code> scans real Fortran codes and produces the signature files.
The syntax of the signature files is borrowed from the Fortran 90/95
language specification with some extensions.
<li> <code>f2py</code> generates a GNU Makefile that can be used
for building shared modules (see below for a list of supported
platforms/compilers). Starting from the third release,
<code>f2py</code> generates <code>setup_modulename.py</code> for
building extension modules using <code>distutils</code> tools.
<li> <code>f2py</code> uses the signature files to produce the wrappers for
Fortran 77 routines and their <code>COMMON</code> blocks.
<li> For <code>external</code> arguments <code>f2py</code> constructs a very flexible
call-back mechanism so that Python functions can be called from
Fortran.
<li> You can pass in almost arbitrary Python objects to wrapper
functions. If needed, <code>f2py</code> takes care of type-casting and
non-contiguous arrays.
<li> You can modify the signature files so that <code>f2py</code> will generate
wrapper functions with desired signatures. <code>depend()</code>
attribute is introduced to control the initialization order of the
variables. <code>f2py</code> introduces <code>intent(hide)</code>
attribute to remove
the particular argument from the argument list of the wrapper
function and <code>intent(c)</code> that is useful for wrapping C
libraries. In addition, <code>optional</code> and
<code>required</code>
attributes are introduced and employed.
<li> <code>f2py</code> supports almost all standard Fortran 77/90/95 constructs
and understands all basic Fortran types, including
(multi-dimensional, complex) arrays and character strings with
adjustable and assumed sizes/lengths.
<li> <code>f2py</code> generates a LaTeX document containing the
documentations of the wrapped functions (argument types, dimensions,
etc). The user can easily add some human readable text to the
documentation by inserting <code>note(&lt;LaTeX text&gt;)</code> attribute to
the definition of routine signatures.
<li> With <code>f2py</code> one can access also Fortran 90/95
module subroutines from Python.
</ol>
For more information, see the <a href="usersguide.html">User's
Guide</a> of the tool. Windows users should also take a look at
<a href="win32_notes.txt">f2py HOWTO for Win32</a> (its latest version
can be found <a
href="http://www.numpy.org/Members/eric/f2py_win32">here</a>).
<h3>Requirements</h3>
<ol>
<li> You'll need <a
href="http://www.python.org/download/">Python</a>
(1.5.2 or later, 2.2 is recommended) to run <code>f2py</code>
(because it uses exchanged module <code>re</code>).
To build generated extension modules with distutils setup script,
you'll need Python 2.x.
<li> You'll need <a
href="http://sourceforge.net/project/?group_id=1369">Numerical
Python</a>
(version 13 or later, 20.3 is recommended) to compile
C/API modules (because they use function
<code>PyArray_FromDimsAndDataAndDescr</code>)
</ol>
<h3>Download</h3>
<dl>
<dt> User's Guide:
<dd> <a href="usersguide.html">usersguide.html</a>,
<a href="usersguide.pdf">usersguide.pdf</a>,
<a href="usersguide.ps.gz">usersguide.ps.gz</a>,
<a href="usersguide.dvi">usersguide.dvi</a>.
<dt> Snapshots of the fifth public release:
<dd> <a href="2.x">2.x</a>/<a href="2.x/F2PY-2-latest.tar.gz">F2PY-2-latest.tar.gz</a>
<dt> Snapshots of earlier releases:
<dd> <a href="rel-5.x">rel-5.x</a>, <a href="rel-4.x">rel-4.x</a>,
<a href="rel-3.x">rel-3.x</a>,
<a href="rel-2.x">rel-2.x</a>,<a href="rel-1.x">rel-1.x</a>,
<a href="rel-0.x">rel-0.x</a>
</dl>
<h3>Installation</h3>
Unpack the source file, change to directory <code>f2py-?-???</code>
and run <code>python setup.py install</code>. That's it!
<h3>Platform/Compiler Related Notes</h3>
<code>f2py</code> has been successfully tested on
<ul>
<li> Intel Linux (MD7.0,RH6.1,RH4.2,Debian woody), Athlon Linux (RH6.1), Alpha Linux (RH5.2,RH6.1) with <a
href="http://gcc.gnu.org/">gcc</a> (versions egcs-2.91.60,egcs-2.91.66, and 2.95.2).
<li> Intel Linux (MD7.0) with <a
href="http://www.psrv.com/index.html">Pacific-Sierra
Research</a> <a href="http://www.psrv.com/lnxf90.html">Personal
Linux VAST/f90 Fortran 90 compiler</a> (version V3.4N5).
<li> Intel Linux (RH6.1) with <a href="http://www.absoft.com/">Absoft F77/F90</a> compilers for Linux.
<li> IRIX64 with <a href="http://gcc.gnu.org/">gcc</a> (2.95.2) and <a
href="http://www.sgi.com/developers/devtools/languages/mipspro.html">MIPSpro
7 Compilers</a> (f77,f90,cc versions 7.30).
<li> Alpha Linux (RH5.2,RH6.1) with <a href="http://www.digital.com/fortran/linux/">Compaq Fortran </a> compiler (version V1.0-920).
<li> Linux with <a href="http://www.nag.co.uk/">NAGWare</a> Fortran
95 compiler.
<li> <a href="http://developer.intel.com/software/products/compilers/f50/linux/">
Intel(R) Fortran Compiler for Linux</a>
<li> Windows 2000 with <a href="http://www.mingw.org">mingw32</a>.
</ul>
<code>f2py</code> will probably run on other UN*X systems as
well. Additions to the list of platforms/compilers where
<code>f2py</code> has been successfully used are most welcome.
<P>
<em>Note:</em>
Using Compaq Fortran
compiler on Alpha Linux is succesful unless when
wrapping Fortran callback functions returning
<code>COMPLEX</code>. This applies also for IRIX64.
<P>
<em>Note:</em>
Fortran 90/95 module support is currently tested with Absoft F90, VAST/f90, Intel F90 compilers on Linux (MD7.0,Debian woody).
<h3><a name="f2py-users">Mailing list</a></h3>
There is a mailing list <a
href="http://cens.ioc.ee/pipermail/f2py-users/">f2py-users</a>
available for the users of the <code>f2py</code>
program and it is open for discussion, questions, and answers. You can subscribe
the list <a href="http://cens.ioc.ee/mailman/listinfo/f2py-users">here</a>.
<h3><a href="http://cens.ioc.ee/cgi-bin/cvsweb/python/f2py2e/">CVS Repository</a></h3>
<code>f2py</code> is being developed under <a href="http://www.sourcegear.com/CVS">CVS</a> and those who are
interested in the really latest version of <code>f2py</code> (possibly
unstable) can get it from the repository as follows:
<ol>
<li> First you need to login (the password is <code>guest</code>):
<pre>
> cvs -d :pserver:[email protected]:/home/cvs login
</pre>
<li> and then do the checkout:
<pre>
> cvs -z6 -d :pserver:[email protected]:/home/cvs checkout f2py2e
</pre>
<li> In the directory <code>f2py2e</code> you can get the updates by hitting
<pre>
> cvs -z6 update -P -d
</pre>
</ol>
You can browse <code>f2py</code> CVS repository <a href="http://cens.ioc.ee/cgi-bin/cvsweb/python/f2py2e/">here</a>.
<h2>Related sites</h2>
<ol>
<li> <a href="http://pfdubois.com/numpy/" target="_top">Numerical Python</a>.
<li> <a href="http://pyfortran.sourceforge.net/" target="_top">Pyfort</a> -- The Python-Fortran connection tool.
<li> <a href="http://starship.python.net/crew/hinsen/scientific.html" target="_top">Scientific Python</a>.
<li> <a href="http://numpy.org/" target="_top">SciPy</a> -- Scientific tools for Python (includes Multipack).
<li> <a href="http://www.fortran.com/fortran/" target="_top">The Fortran Company</a>.
<li> <a href="http://www.j3-fortran.org/" target="_top">Fortran Standards</a>.
<li> <a href="http://www.fortran.com/fortran/F77_std/rjcnf.html">American National Standard Programming Language FORTRAN ANSI(R) X3.9-1978</a>
<li> <a href="http://www.mathtools.net" target="_top">Mathtools.net</a> -- A technical computing portal for all scientific and engineering needs.
</ol>
<!-- End of user text -->
<HR>
<ADDRESS>
<A href="http://validator.w3.org/"><IMG border=0 align=right src="/icons/vh40.gif" alt="Valid HTML 4.0!" height=31 width=88></A>
<A href="http://cens.ioc.ee/~pearu/" target="_top">Pearu Peterson</A>
<A href="mailto:pearu(at)ioc.ee">&lt;pearu(at)ioc.ee&gt;</A><BR>
<!-- hhmts start -->
Last modified: Fri Jan 20 14:55:12 MST 2006
<!-- hhmts end -->
</ADDRESS>
<!-- You may want to comment the following line out when the document is final-->
<!-- Check that the reference is right -->
<!--A href="http://validator.w3.org/check?uri=http://cens.ioc.ee/projects/f2py2e/index.html;ss"> Submit this page for validation</A-->
<p>
<center>
This <a href="http://www.ctv.es/USERS/irmina/pythonring.html">Python
ring</a> site owned by <a href="mailto:pearu(at)ioc.ee">Pearu Peterson</a>.
<br>
[
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;id=12;prev5">Previous 5 Sites</a>
|
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;id=12;prev">Previous</a>
|
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;id=12;next">Next</a>
|
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;id=12;next5">Next 5 Sites</a>
|
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;random">Random Site</a>
|
<a href="http://nav.webring.org/cgi-bin/navcgi?ring=python_ring;list">List Sites</a>
]
</center>
<p>
</BODY>
</HTML>