Как я могу легко преобразовать код FORTRAN в код Python (реальный код, а не обертки)

У меня есть числовая библиотека в FORTRAN (я считаю, FORTRAN IV), и я хочу преобразовать ее в код Python. Мне нужен реальный исходный код, который я могу импортировать на любую виртуальную машину Python - Windows, MacOS-X, Linux, Android. Я начал делать это вручную, но в библиотеке около 1000 процедур, поэтому это не разумное решение.

Ответ 1

изменить: добавлена ​​информация о numpy

Такой инструмент существует для Fortran до Lisp или Fortran to C или даже Fortran to Java. Но у вас никогда не будет инструмента Fortran для Python по простой причине: в отличие от Fortran, Lisp или C, Python не имеет GOTO [1]. И есть много GOTO в коде Fortran (особенно Fortran IV). Даже если есть теорема Jacopini, в которой говорится, что вы можете эмулировать GOTO со структурированным программированием, это слишком громоздко для реализации реального (и эффективного) инструмента преобразования языка.

Таким образом, вам не нужно будет переводить код из 1000 подпрограмм, но вам также нужно будет понять каждый алгоритм со всеми его исправленными gotos и перевести алгоритм в структурированную программу, прежде чем записывать ее в Python. Удачи!

Эй, почему вы думаете, что обертка плохая? Windows, OSX и Linux имеют компиляторы Fortran и C [2] и хорошие обертки!

Для C (здесь не может быть ваш язык, но f2c может быть SWIG, а Fortran f2py теперь интегрирован с numpy. SWIG имеет поддержку для Android.

Кстати, вместо преобразования в "чистый" Python вы можете использовать numpy: функции numpy похожи на Fortran 90 (см. сравнение здесь), поэтому вы можете сначала перенести свои программы на F90 для более плавного перехода. Кажется, есть и Numpy на Adnroid. И в случае, если вам нужно numpy на 64-битной Windows, есть двоичные файлы здесь.

Если вы решите использовать оболочки, gfortran работает в Linux (просто установите из дистрибутивных пакетов), Windows (MinGW) и Android. Если вы идете по этой линии, не забывайте, что вы скомпилируете код FIV, поэтому существует обычная проблема с одним контуром (обычно параметр компилятора в порядке). Вероятно, вам также придется вручную преобразовать некоторые старые, нестандартные утверждения, не найденные в современных компиляторах.

У вас также есть возможность переключить язык проекта на Lisp или Java...

[1] Вы можете спросить: но если GOTO является проблемой, откуда появился инструмент Fortran для Java? Ну, он использует трюки с JVM, который имеет внутреннюю инструкцию GOTO. Существует также GOTO в байт-коде Python (см. JUMP здесь), поэтому здесь может быть что-то, что нужно исследовать. Поэтому мой предыдущий оператор неверен: может быть инструмент Fortran to Python, используя приемы байт-кода, подобные Java. Но остается разработать, и наличие хороших библиотек (например, numpy, matplotlib, pandas...) делает это, по меньшей мере, ненужным.