Modern Fortran Kodunu Python ile kaplamak için hangi paketi kullanmalıyım?


27

Bazı eski Fortran 77 kodlarını sarmak için f2py2e'yi biliyorum ve kullandım , ancak benim anladığım şey daha yeni Fortran 95 koduyla çalışmadığı. Ne kullanmam gerektiğini araştırdım ve hiçbiri şu andaki durumlarını veya nasıl kullanacaklarını (temel kullanım dışında) nasıl kullanacaklarını açıklamayan fwrap ve G3 f2py ile karşılaştım.

Ayrıca f2py sürümünün üçüncü nesil f2py'yi kullanma seçeneğine sahip olduğunu gördüm, ancak işlevsel olmadığı yorumunda. Buna bakılırsa, uni bir proje için hangi projeyi kullanmam gerektiğini bilmiyorum. Yeni kod için hangisini kullanmalıyım?

PS Bu temelde /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python ile aynı sorudur , burada sormanın daha iyi cevaplar verebileceği öne sürülmüştür. .


2
"Modern Fortran"
meawoppl

Yanıtlar:


19

Fortran90.org'da açıklandığı gibi Python yerleşik ctypes modülünü kullanabilirsiniz . Oldukça yalındır ve herhangi bir dış bağımlılık gerektirmez. Ayrıca, ndpointer arg tipi yardımcı çok kullanışlıdır.


8
Doğru. Ya da fortran90.org sayfasında açıklandığı gibi kriperler yerine Cython kullanın.
Ondřej Čertík

@ OndřejČertík, harika bir web sitesi! İnternetteki modern Fortran'da çok az değerli kaynak var, ancak bu kesinlikle fortranwiki.org ile birlikte favorilerimden biri
astrojuanlu

6

Şahsen bunun için f2py kullanıyorum. Ancak, f2py için yazdığım Fortran gerçekten modern bir Fortran değil, modüllerle birlikte serbest biçimli F90. Varsayılan şekiller veya özel tipler kullanmıyorum. Bu yöntem hala benim için çok iyi çalışıyor.

Ambalajın bir parçası olarak C'nin kullanımıyla ilgili paylaşmak istediğim bir kaynak var . Bu sayfanın geri kalanı da tavsiye edilir.


1
2015 güncellemesi: Uzun zamandan beri tüm Fortran arayüzlerim Cython ve iso_c_binding aracılığıyla oluyor. Bu, yalnızca Cython / C'ye gerçekten ihtiyaç duyulanı ortaya çıkarırken Fortran kodunun kendisini modern tutmasına izin verir.
AlexE

2016 güncelleme: iso_c_binding seçeneği, artık cythonkomutu kullanarak sadece bir .pyx dosyasını derleyebildiğimden daha kolaylaşıyor ve benim fortran kodumu veya python kodumu değiştirmekle hızlı bir şekilde her şeyin çalışmasını sağlamak arasındaki çakışmayı azaltıyorum.
cbcoutinho

5

F2py'nin dokümantasyonu gerçekten o kadar iyi değil. Ben f2py benim kendi projelerini taşıma sürecinde kulüpler Cython . Cython, C kodunu sarmak için kullanılabilse de, yeni yüksek performanslı kod oluşturmanın en yararlı olduğunu buldum. Amacınız yeni Fortran kodunu yazmak, sarmak ve Python'da aramak ise, bunun yerine Cython kullanmanızı tavsiye ederim. Bu şekilde Python kodunu yazabilirsiniz ve performans darboğazları varsa, küçük değişiklikler yaparak bunu Cython'a aktarırsınız.


Yani Fortran kullanmak yerine daha yavaş kod parçaları için Cython kullanıyor musunuz?
James Tocknell

2
Kesinlikle! Cython kodunuz Python nesneleri ve Numpy dizileriyle doğal olarak etkileşime girebildiğinden çok daha kolay olduğunu öğrendim (fazladan bir dönüşüm katmanı olmadan). Kendi veri yapılarınızı kullanmak istiyorsanız bu özellikle faydalıdır. Fortran veya C'nin seni kullanmasını sağlamak f2py'deki Python sınıfları böyle basit bir iş değildir.
Leo Uieda

3

f90wrap , f2py'nin üzerine kuruludur ve türetilmiş türlere erişim dahil olmak üzere, temel Fortran kod tabanı için Python sarmalayıcılarını otomatik olarak oluşturur. Bir dizi basit örnek nasıl çalıştığını göstermektedir.


2

FortWrap'ı yarı yolda kullanman için kullanabilirsin . Bu, Fortran kodunuza bir C ++ arayüzü oluşturacak ve daha sonra bir Python arayüzü elde etmek için SWIG ile sarılabilecek . Bunu biraz daha geniş bir Fortran kodu temelinde yapıyoruz ve oldukça iyi çalışıyor (aslında, FortWrap bu amaç için ekibimizin bir üyesi tarafından geliştirildi).


1

fwrapözellikle Fortran90 / 95'i hedefler ve aynı yazılım yığınının bazılarını kullanır f2py.


3
Bu projenin GitHub
deposundaki

1
Bunun cesaret kırıcı olduğu konusunda hemfikir olduğum halde hala iyi bir başarıya imza attım. Kutunun dışında f2pyF90'dan daha işlevsel . Aynı zamanda çok düşük bir giriş engeline sahiptir. Bulduğuma sevindim.
MRocklin

1

f2pymodern fortranı (varsayılan şekilli diziler ve benzeri) destekler, örnek bir betiğe bakın

Ayrıca, fortran koduyla yapılan deneyler için kurulumu kolay ve çok uygun olan IPython magic'i öneririm (f2py'ye de güvenir).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.