Tôi nên sử dụng gói nào để bọc Mã Fortran hiện đại với Python?


27

Tôi biết và đã sử dụng f2py2e để bọc một số mã Fortran 77 cũ, nhưng tôi hiểu là nó không hoạt động với mã Fortran 95 mới hơn. Tôi đã nghiên cứu những gì tôi nên sử dụng, và đã tìm thấy fwrap và G3 f2py, dường như không ai đưa ra bất kỳ lời giải thích nào về trạng thái hiện tại của họ hoặc cách sử dụng chúng (ngoài cách sử dụng cơ bản).

Tôi cũng đã thấy rằng phiên bản của f2py có tùy chọn sử dụng f2py thế hệ thứ ba, nhưng nó được nhận xét là không hoạt động. Vì điều này, tôi không biết nên sử dụng dự án nào cho một dự án uni. Tôi nên sử dụng mã nào cho mã mới?

PS Về cơ bản đây là câu hỏi tương tự như https://stackoverflow.com/questions/10665717/civerse-best-method-for-wrapping-modern-fortran-code-with-python , có ý kiến ​​cho rằng việc hỏi ở đây có thể cho câu trả lời tốt hơn .


2
"Fortran hiện đại"
meawoppl

Câu trả lời:


19

Bạn có thể sử dụng mô-đun ctypes dựng sẵn của Python như được mô tả trên fortran90.org . Nó là khá thẳng về phía trước và không yêu cầu bất kỳ phụ thuộc bên ngoài. Ngoài ra, trình trợ giúp loại ndpulum arg rất tiện dụng.


8
Đúng rồi. Hoặc sử dụng Cython thay vì ctypes như được mô tả trên trang fortran90.org.
Ondřej Čertík

@ OndřejČertík, trang web tuyệt vời! Có rất ít tài nguyên có giá trị trên Fortran hiện đại trên Internet, nhưng đây chắc chắn là một trong những mục yêu thích của tôi cùng với fortranwiki.org
astrojuanlu

6

Cá nhân tôi sử dụng f2py cho việc này. Tuy nhiên, Fortran tôi viết cho f2py không thực sự là Fortran hiện đại, mà là F90 dạng tự do với các mô-đun. Tôi không sử dụng hình dạng giả định hoặc các loại tùy chỉnh. Phương pháp này vẫn hoạt động rất tốt cho tôi.

Có một tài nguyên tôi muốn chia sẻ liên quan đến việc sử dụng C như một phần của gói. Phần còn lại của trang này cũng được đề xuất.


1
Cập nhật 2015: kể từ khá lâu, tất cả giao diện Fortran của tôi xảy ra thông qua Cython và iso_c_binding. Điều này cho phép giữ cho mã Fortran hiện đại trong khi chỉ hiển thị những gì thực sự cần thiết cho Cython / C.
AlexE

Cập nhật năm 2016: tùy chọn iso_c_binding trở nên dễ dàng hơn bây giờ tôi chỉ có thể biên dịch tệp .pyx bằng cythonlệnh và giảm sự chồng chéo giữa việc thay đổi mã fortran hoặc mã python của tôi và nhanh chóng làm mọi thứ hoạt động.
cbcoutinho

5

Tài liệu của f2py thực sự không tuyệt lắm. Tôi đang trong quá trình chuyển các dự án của riêng mình từ f2py sang Cython . Mặc dù Cython có thể được sử dụng để bọc mã C, tôi thấy rằng nó hữu ích nhất để tạo mã hiệu suất cao mới. Nếu mục đích của bạn là viết mã Fortran mới, hãy bọc nó và gọi nó bằng Python, tôi khuyên bạn nên sử dụng Cython thay thế. Bằng cách đó bạn có thể viết mã Python và nếu có các tắc nghẽn về hiệu năng, bạn chuyển mã đó sang Cython với các sửa đổi nhỏ.


Vì vậy, thay vì sử dụng Fortran, hãy sử dụng Cython cho các đoạn mã chậm hơn?
James Tocknell

2
Chính xác! Tôi thấy rằng nó dễ dàng hơn nhiều vì mã Cython của bạn có thể tương tác với các đối tượng Python và mảng Numpy một cách tự nhiên (không có lớp chuyển đổi bổ sung). Điều này đặc biệt hữu ích nếu bạn muốn sử dụng cấu trúc dữ liệu của riêng bạn. Làm cho Fortran hoặc C sử dụng bạn các lớp Python trong f2py không phải là một nhiệm vụ đơn giản như vậy.
Leo Uieda

3

f90wrap được xây dựng dựa trên f2py và tự động tạo các trình bao bọc Python cho cơ sở mã Fortran bên dưới, bao gồm quyền truy cập vào các loại dẫn xuất. Một tập hợp các ví dụ đơn giản cho thấy cách nó hoạt động.


2

Bạn có thể sử dụng FortWrap để đưa bạn đi được nửa đường. Điều này sẽ tạo giao diện C ++ cho mã Fortran của bạn, sau đó có thể được bọc bằng SWIG để có giao diện Python. Chúng tôi thực hiện điều này trên một cơ sở mã Fortran hơi lớn và nó hoạt động khá tốt (trên thực tế, FortWrap được phát triển bởi một thành viên trong nhóm của chúng tôi cho mục đích chính xác này).


1

fwrapđặc biệt nhắm mục tiêu Fortran90 / 95 và sử dụng một số phần mềm tương tự như f2py.


3
Cam kết cuối cùng cho repo GitHub của dự án này là vào cuối năm 2010
Geoff Oxberry

1
Mặc dù tôi đồng ý rằng điều đó làm tôi nản lòng nhưng tôi vẫn thành công với nó. Ra khỏi hộp nó có nhiều chức năng hơn f2pytrên F90. Nó cũng có một rào cản nhập cảnh rất thấp. Tôi rất vui vì đã tìm thấy nó.
MRocklin

1

f2pyhỗ trợ fortran hiện đại (mảng hình giả định và như vậy), xem tập lệnh ví dụ

Ngoài ra, đối với các thử nghiệm với mã fortran, tôi khuyên dùng ma thuật IPython , rất dễ cài đặt và rất thuận tiện (nó cũng phụ thuộc vào f2py).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.