Którego pakietu należy użyć do pakowania Modern Fortran Code w Python?

27

Wiem i użyłem f2py2e do owinięcia starego kodu Fortran 77, ale rozumiem, że nie działa z nowszym kodem Fortran 95. Zbadałem, co powinienem użyć, i natknąłem się na fwrap i G3 f2py, z których żadne nie wydaje się wyjaśniać ich obecnego stanu ani sposobu ich użycia (poza podstawowym użyciem).

Widziałem również, że wersja f2py ma opcję korzystania z f2py trzeciej generacji, ale jest komentowana jako niefunkcjonalna. Biorąc to pod uwagę, nie wiem, którego projektu powinienem użyć do projektu uni. Którego należy użyć do nowego kodu?

PS Jest to w zasadzie to samo pytanie, co /programming/10665717/current-best-metod-for-wrapping-modern-fortran-code-with-python , sugerowano, że pytanie tutaj może dać lepsze odpowiedzi .

James Tocknell
źródło
2
„Modern Fortran”
meawoppl

Odpowiedzi:

19

Można użyć Pythona wbudowane ctypes modułu zgodnie z opisem na fortran90.org . Jest to dość proste i nie wymaga żadnych zewnętrznych zależności. Ponadto pomocnik typu ndpointer arg jest bardzo przydatny.

Matthew Emmett
źródło
8
Zgadza się. Lub użyj Cython zamiast ctypów, jak opisano na stronie fortran90.org.
Ondřej Čertík
@ OndřejČertík, świetna strona internetowa! Istnieje niewiele cennych zasobów na temat nowoczesnego Fortran w Internecie, ale jest to zdecydowanie jeden z moich ulubionych wraz z fortranwiki.org
astrojuanlu
6

Osobiście używam do tego f2py. Jednak Fortran, który piszę dla f2py, nie jest tak naprawdę nowoczesnym Fortranem, ale raczej swobodnym F90 z modułami. Nie używam założonych kształtów ani typów niestandardowych. Ta metoda wciąż działa dla mnie bardzo dobrze.

Istnieje zasób, który chcę udostępnić, dotyczący użycia C jako części opakowania. Polecamy także resztę tej strony.

AlexE
źródło
1
Aktualizacja 2015: od dłuższego czasu wszystkie moje interfejsy Fortran odbywają się poprzez Cython i iso_c_binding. Pozwala to utrzymać sam kod Fortran nowoczesny, jednocześnie ujawniając tylko to, co jest naprawdę potrzebne Cython / C.
AlexE
Aktualizacja 2016: opcja iso_c_binding staje się teraz łatwiejsza niż mogę po prostu skompilować plik .pyx za pomocą cythonpolecenia i zmniejszyć nakładanie się między zmianą mojego kodu fortran lub kodu python i szybkim uruchomieniem wszystkiego.
cbcoutinho
5

Dokumentacja f2py nie jest naprawdę świetna. Jestem w trakcie przenoszenia własnych projektów z f2py do Cython . Mimo że Cython może być używany do zawijania kodu C, stwierdziłem, że jest on najbardziej przydatny do tworzenia nowego kodu o wysokiej wydajności. Jeśli masz zamiar napisać nowy kod Fortran, zawiń go i wywołaj w Pythonie, zalecam zamiast tego używać Cython. W ten sposób możesz napisać kod w Pythonie, a jeśli występują wąskie gardła w wydajności, przenieś go do Cython z niewielkimi modyfikacjami.

Leo Uieda
źródło
Więc zamiast używać Fortrana, używaj Cython dla wolniejszych fragmentów kodu?
James Tocknell
2
Dokładnie! Odkryłem, że jest to o wiele łatwiejsze, ponieważ kod Cython może naturalnie oddziaływać z obiektami Python i tablicami Numpy (bez dodatkowej warstwy konwersji). Jest to szczególnie pomocne, jeśli chcesz korzystać z własnych struktur danych. Zmuszenie Fortrana lub C do używania klas Python w f2py nie jest tak prostym zadaniem.
Leo Uieda
3

f90wrap jest zbudowany na bazie f2py i automatycznie generuje opakowania Pythona dla podstawowej bazy kodu Fortran, w tym dostęp do typów pochodnych. Zestaw prostych przykładów pokazuje, jak to działa.

davidovitch
źródło
2

Możesz użyć FortWrap, aby dostać się tam w połowie drogi. Spowoduje to utworzenie interfejsu C ++ do kodu Fortran, który można następnie owinąć SWIG w celu uzyskania interfejsu Python. Robimy to na dość dużej bazie kodu Fortrana i działa całkiem dobrze (w rzeczywistości FortWrap został opracowany przez członka naszego zespołu do tego właśnie celu).

Barron
źródło
1

fwrapkonkretnie atakuje Fortran90 / 95 i korzysta z tego samego stosu oprogramowania, co f2py.

MRocklin
źródło
3
Ostatnie zobowiązanie do repozytorium GitHub tego projektu miało miejsce pod koniec 2010 roku.
Geoff Oxberry
1
Chociaż zgadzam się, że to zniechęcające, wciąż miałem z tym całkiem niezły sukces. Po wyjęciu z pudełka jest bardziej funkcjonalny niż f2pyna F90. Ma również bardzo niską barierę wejścia. Cieszyłem się, że go znalazłem.
MRocklin
1

f2pyobsługuje nowoczesny fortran (tablice o założonych kształtach i tak dalej), patrz przykładowy skrypt

Również do eksperymentów z kodem fortran polecam magię IPython , która jest łatwa w instalacji i bardzo wygodna (opiera się również na f2py).

Alleo
źródło