Який пакет я повинен використовувати для обгортання сучасного коду Fortran з 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, як описано на сайті fortran90.org . Це досить прямо і не вимагає зовнішніх залежностей. Крім того, помічник типу аргументу ndpointer дуже зручний.


8
Це вірно. Або використовуйте Cython замість ctypes, як описано на сторінці fortran90.org.
Ondřej Čertík

@ OndřejČertík, чудовий веб-сайт! В Інтернеті є мало цінних ресурсів, але це, безумовно, один із моїх улюблених разом з fortranwiki.org
astrojuanlu

6

Я особисто використовую для цього f2py. Однак Fortran, про який я пишу для f2py, насправді не сучасний Fortran, а скоріше вільний формат F90 з модулями. Я не використовую припущені форми або користувацькі типи. Цей метод для мене все ще працює дуже добре.

Існує ресурс я хочу поділитися щодо використання C в якості частини упаковки. Решта цієї сторінки також рекомендується.


1
Оновлення 2015 року: з давнього часу всі мої взаємодії Fortran відбуваються через Cython та iso_c_binding. Це дозволяє зберегти сучасний код Fortran під час викриття лише того, що дійсно потрібно Cython / C.
AlexE

Оновлення 2016 року: параметр iso_c_binding стає простішим, ніж я можу просто скомпілювати файл .pyx за допомогою cythonкоманди та зменшити перекриття між зміною мого коду fortran чи кодом python і швидко примушую все працювати.
cbcoutinho

5

Документація f2py насправді не така велика. Я переношу власні проекти з f2py на Cython . Навіть незважаючи на те, що Cython можна використовувати для обговорення коду С, я виявив, що він є найбільш корисним для створення нового високопродуктивного коду. Якщо ваш намір полягає в тому, щоб написати новий код Fortran, обгорнути його і зателефонувати в Python, я рекомендую замість цього використовувати Cython. Таким чином, ви можете написати код Python, і якщо є вузькі місця, ви перенесете його на Cython з незначними змінами.


Тож замість використання Fortran використовувати Cython для повільніших бітів коду?
Джеймс Токнелл

2
Саме так! Я виявив, що це набагато простіше, оскільки ваш код Cython природним чином може взаємодіяти з об’єктами Python та Numpy масивами (без зайвого шару перетворення). Це особливо корисно, якщо ви хочете використовувати власні структури даних. Змусити Fortran або C використовувати вас Python-класами у f2py - це не така пряма задача.
Лев Уїда

3

f90wrap будується поверх f2py і автоматично генерує обгортки Python для основної бази кодів Fortran, включаючи доступ до похідних типів. Набір простих прикладів показує, як це працює.


2

Ви можете скористатися FortWrap, щоб дістати вас на півдорозі. Це створить інтерфейс C ++ до вашого коду Fortran, який потім можна буде обернути SWIG, щоб отримати інтерфейс Python. Ми робимо це на дещо великій базі коду Fortran, і він працює досить добре (насправді 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.