Какой пакет я должен использовать, чтобы обернуть Modern Fortran Code в Python?


27

Я знаю об этом и использовал f2py2e, чтобы обернуть какой-то старый код Fortran 77, но я понимаю, что он не работает с более новым кодом Fortran 95. Я исследовал, что мне следует использовать, и натолкнулся на fwrap и G3 f2py, ни один из которых, кажется, не дает никакого объяснения их текущего состояния или того, как их использовать (помимо базового использования).

Я также видел, что версия f2py имеет возможность использовать f2py третьего поколения, но это прокомментировано как неработающая. Учитывая это, я не знаю, какой проект я должен использовать для универа. Какой из них я должен использовать для нового кода?

PS Это в основном тот же вопрос, что и /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python. Было высказано предположение, что задаваемые здесь вопросы могут дать лучшие ответы. ,


2
«Современный Фортран»
meawoppl

Ответы:


19

Вы можете использовать встроенный модуль Python ctypes, как описано на fortran90.org . Это довольно просто и не требует каких-либо внешних зависимостей. Также очень полезен помощник типа ndpointer arg.


8
Это верно. Или используйте Cython вместо ctypes, как описано на странице fortran90.org.
Ондржей Чертик

@ OndřejČertík, отличный сайт! На современном Фортране есть немного ценных ресурсов в Интернете, но это, безусловно, один из моих любимых вместе с fortranwiki.org
astrojuanlu

6

Я лично использую f2py для этого. Тем не менее, Фортран, который я пишу для f2py, на самом деле не современный Фортран, а скорее F90 свободной формы с модулями. Я не использую предполагаемые формы или пользовательские типы. Этот метод все еще работает очень хорошо для меня.

Есть ресурс, которым я хочу поделиться относительно использования C как части упаковки. Остальная часть этой страницы тоже рекомендуется.


1
Обновление 2015: с тех пор все мое взаимодействие с Фортраном происходит через Cython и iso_c_binding. Это позволяет поддерживать современный код на Фортране, предоставляя при этом только то, что действительно необходимо для Cython / C.
AlexE

Обновление 2016 года: опция iso_c_binding теперь стала проще, чем я могу просто скомпилировать файл .pyx с помощью cythonкоманды, и уменьшить частичное совпадение между изменением кода на языке Fortran или кода Python и быстрым налаживанием работы.
cbcoutinho

5

Документация по f2py действительно не так уж велика. Я нахожусь в процессе перемещения своих собственных проектов из f2py в Cython . Несмотря на то, что Cython можно использовать для переноса кода C, я обнаружил, что он наиболее полезен для создания нового высокопроизводительного кода. Если вы намереваетесь написать новый код на Фортране, обернуть его и вызвать его на Python, я рекомендую вместо этого использовать Cython. Таким образом, вы можете написать код Python, и, если есть узкие места в производительности, вы перенесете его в Cython с небольшими изменениями.


Так что вместо того, чтобы использовать Фортран, использовать Cython для более медленных битов кода?
Джеймс Токнелл

2
В точку! Я обнаружил, что это намного проще, потому что ваш код Cython может взаимодействовать с объектами Python и массивами Numpy естественным образом (без дополнительного слоя преобразования). Это особенно полезно, если вы хотите использовать свои собственные структуры данных. Заставить Fortran или C использовать вас классы Python в f2py - не такая простая задача.
Лео Уиеда

3

f90wrap построен поверх f2py и автоматически генерирует оболочки Python для базовой базы кода Fortran, включая доступ к производным типам. Набор простых примеров показывает, как это работает.


2

Вы могли бы использовать FortWrap, чтобы получить вас на полпути. Это создаст интерфейс C ++ для вашего кода на Фортране, который затем можно будет обернуть SWIG, чтобы получить интерфейс Python. Мы делаем это на довольно большой базе кода на Фортране, и он работает довольно хорошо (на самом деле, FortWrap был разработан членом нашей команды именно для этой цели).


1

fwrapспециально предназначен для Fortran90 / 95 и использует тот же программный стек, что и f2py.


3
Последний коммит на
репозиторий

1
Хотя я согласен, что это обескураживает, у меня все же был приличный успех. Из коробки он более функциональный, чем f2pyна F90. Он также имеет очень низкий входной барьер. Я был рад, что нашел это.
MRocklin

1

f2pyподдерживает современный фортран (предполагаемые массивы и т. д.), см. пример скрипта

Кроме того, для экспериментов с кодом Fortran я бы порекомендовал магию IPython , которая проста в установке и очень удобна (она также зависит от f2py).


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.