File size: 11,588 Bytes
c011401 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
<!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 ­ 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 ­ 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(<LaTeX text>)</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"><pearu(at)ioc.ee></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>
|