summaryrefslogtreecommitdiff
path: root/numpy/f2py/doc/index.html
blob: 6b6466b75a48325bd8021975543552c0f886e24f (plain)
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 &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> is released under the terms of <a
href="http://www.fsf.org/copyleft/lesser.html">GNU LGPL</a>. 


<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:anonymous@cens.ioc.ee:/home/cvs login
</pre>
  <li> and then do the checkout:
<pre>
> cvs -z6 -d :pserver:anonymous@cens.ioc.ee:/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: Mon Dec  3 19:40:26 EET 2001
<!-- 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>