| |
| \section{Bugs, Plans, and Feedback} |
| \label{sec:bugs} |
| |
| Currently no bugs have found that I was not able to fix. I will be |
| happy to receive bug reports from you (so that I could fix them and |
| keep the first sentence of this paragraph as true as possible ;-). |
| Note that \fpy is developed to work properly with gcc/g77 |
| compilers. |
| \begin{description} |
| \item[NOTE:] Wrapping callback functions returning \texttt{COMPLEX} |
| may fail on some systems. Workaround: avoid it by using callback |
| subroutines. |
| \end{description} |
| |
| Here follows a list of things that I plan to implement in (near) future: |
| \begin{enumerate} |
| \item recognize file types by their extension (signatures: |
| \texttt{*.pyf}, Fortran 77, Fortran 90 fixed: \texttt{*.f, *.for, *.F, *.FOR}, |
| Fortran 90 free: \texttt{*.F90, *.f90, *.m, *.f95, *.F95}); [DONE] |
| \item installation using \texttt{distutils} (when it will be stable); |
| \item put out to the web examples of \fpy usages in real situations: |
| wrapping \texttt{vode}, for example; |
| \item implement support for \texttt{PARAMETER} statement; [DONE] |
| \item rewrite test-site; |
| \item ... |
| \end{enumerate} |
| and here are things that I plan to do in future: |
| \begin{enumerate} |
| \item implement \texttt{intent(cache)} attribute for an optional work |
| arrays with a feature of allocating additional memory if needed; |
| \item use \fpy for wrapping Fortran 90/95 codes. \fpy should scan |
| Fortran 90/95 codes with no problems, what needs to be done is find |
| out how to call a Fortran 90/95 function (from a module) from |
| C. Anybody there willing to test \fpy with Fortran 90/95 modules? [DONE] |
| \item implement support for Fortran 90/95 module data; [DONE] |
| \item implement support for \texttt{BLOCK DATA} blocks (if needed); |
| \item test/document \fpy for \texttt{CHARACTER} arrays; |
| \item decide whether internal transposition of multi-dimensional |
| arrays is reasonable (need efficient code then), even if this is |
| controlled by the user trough some additional keyword; need |
| consistent and safe policy here; |
| \item use \fpy for generating wrapper functions also for C programs (a |
| kind of SWIG, only between Python and C). For that \fpy needs a |
| command line switch to inform itself that C scalars are passed in by |
| their value, not by their reference, for instance; |
| \item introduce a counter that counts the number of inefficient usages |
| of wrapper functions (copying caused by type-casting, non-contiguous |
| arrays); |
| \item if needed, make \texttt{DATA} statement to work properly for |
| arrays; |
| \item rewrite \texttt{COMMON} wrapper; [DONE] |
| \item ... |
| \end{enumerate} |
| I'll appreciate any feedback that will improve \fpy (bug reports, |
| suggestions, etc). If you find a correct Fortran code that fails with |
| \fpy, try to send me a minimal version of it so that I could track |
| down the cause of the failure. Note also that there is no sense to |
| send me files that are auto-generated with \fpy (I can generate them |
| myself); the version of \fpy that you are using (run \texttt{\fpy\ |
| -v}), and the relevant fortran codes or modified signature files |
| should be enough information to fix the bugs. Also add some |
| information on compilers and linkers that you use to the bug report. |
| |
| |
| \section{History of \fpy} |
| \label{sec:history} |
| |
| \begin{enumerate} |
| \item I was driven to start developing a tool such as \fpy after I had |
| wrote several Python C/API modules for interfacing various Fortran |
| routines from the Netlib. This work was tedious (some of functions |
| had more than 20 arguments, only few of them made sense for the |
| problems that they solved). I realized that most of the writing |
| could be done automatically. |
| \item On 9th of July, 1999, the first lines of the tool was written. A |
| prototype of the tool was ready to use in only three weeks. During |
| this time Travis Oliphant joined to the project and shared his |
| valuable knowledge and experience; the call-back mechanism is his |
| major contribution. Then I gave the tool to public under the name |
| FPIG --- \emph{Fortran to Python Interface Generator}. The tool contained |
| only one file \texttt{f2py.py}. |
| \item By autumn, it was clear that a better implementation was needed |
| as the debugging process became very tedious. So, I reserved some |
| time and rewrote the tool from scratch. The most important result of |
| this rewriting was the code that reads real Fortran codes and |
| determines the signatures of the Fortran routines. The main |
| attention was payed in particular to this part so that the tool |
| could read arbitrary Fortran~77/90/95 codes. As a result, the other |
| side of the tools task, that is, generating Python C/API functions, |
| was not so great. In public, this version of the tool was called |
| \texttt{f2py2e} --- \emph{Fortran to Python C/API generator, the |
| Second Edition}. |
| \item So, a month before The New Year 2000, I started the third |
| iteration of the \fpy development. Now the main attention was to |
| have a good C/API module constructing code. By 21st of January, |
| 2000, the tool of generating wrapper functions for Fortran routines |
| was ready. It had many new features and was more robust than ever. |
| \item In 25th of January, 2000, the first public release of \fpy was |
| announced (version 1.116). |
| \item In 12th of September, 2000, the second public release of \fpy was |
| announced (version 2.264). It now has among other changes a support |
| for Fortran 90/95 module routines. |
| \end{enumerate} |
| |
| %%% Local Variables: |
| %%% mode: latex |
| %%% TeX-master: "f2py2e" |
| %%% End: |