Modern Fortran Code를 Python으로 감싸려면 어떤 패키지를 사용해야합니까?


27

나는 오래된 Fortran 77 코드를 감싸기 위해 f2py2e 를 알고 있지만 새로운 Fortran 95 코드에서는 작동하지 않는다는 것을 이해하고 있습니다. 나는 무엇을 사용 해야하는지 연구하고 fwrap과 G3 f2py를 보았습니다.이 중 현재 상태에 대한 설명이나 사용법 (기본 사용법 제외)은 없습니다.

또한 f2py 버전에는 3 세대 f2py를 사용할 수있는 옵션이 있지만 작동하지 않는 것으로 설명되어 있습니다. 이것을 감안할 때, 나는 uni 프로젝트에 어떤 프로젝트를 사용해야하는지 모르겠습니다. 새 코드에 어떤 것을 사용해야합니까?

추신 : 이것은 기본적으로 https://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python 과 동일한 질문이므로 여기에 묻는 것이 더 나은 답변을 줄 수 있다고 제안했습니다 .


2
"현대 포트란"
— meawoppl

답변:


19

fortran90.org에 설명 된대로 Python 내장 ctypes 모듈을 사용할 수 있습니다 . 꽤 직설적이며 외부 종속성이 필요하지 않습니다. 또한 ndpointer arg type 도우미는 매우 편리합니다.


8
맞습니다. 또는 fortran90.org 페이지에 설명 된대로 ctype 대신 Cython을 사용하십시오.
— Ondřej Čertík

@ OndřejČertík, 훌륭한 웹 사이트! 인터넷상의 최신 Fortran에 대한 귀중한 자료는 거의 없지만, 이것은 fortranwiki.org와 함께 제가 가장 좋아하는 것 중 하나입니다.
— astrojuanlu

6

나는 개인적으로 f2py를 사용합니다. 그러나 f2py를 위해 작성한 Fortran은 실제로 현대적인 Fortran이 아니라 모듈이있는 자유형 F90입니다. 가정 된 모양이나 사용자 지정 유형을 사용하지 않습니다. 이 방법은 여전히 ​​나에게 매우 효과적입니다.

래핑의 일부로 C를 사용하는 것과 관련하여 공유하고 싶은 리소스 가 있습니다 . 이 페이지의 나머지 부분도 권장됩니다.


1
2015 업데이트 : 꽤 오랜 시간 동안 모든 포트란 인터페이스는 Cython과 iso_c_binding을 통해 발생합니다. 이를 통해 Fortran 코드 자체를 최신 상태로 유지하면서 Cython / C에 실제로 필요한 것만 노출시킬 수 있습니다.
— AlexE

2016 업데이트 : iso_c_binding 옵션은 cython명령을 사용하여 .pyx 파일을 컴파일하고 포트란 코드 또는 파이썬 코드를 변경하고 모든 것이 빠르게 작동하도록하는 것 사이의 겹침을 줄이는 것보다 쉬워졌습니다 .
— cbcoutinho

5

f2py의 문서는 실제로 그렇게 크지 않습니다. 내 자신의 프로젝트를 f2py에서 Cython 으로 옮기는 중 입니다. Cython을 사용하여 C 코드를 래핑 할 수 있지만 새로운 고성능 코드를 만드는 데 가장 유용하다는 것을 알았습니다. 새로운 Fortran 코드를 작성하고 랩핑 한 다음 Python으로 호출하려는 경우 Cython을 대신 사용하는 것이 좋습니다. 그렇게하면 Python 코드를 작성할 수 있으며 성능 병목 현상이 발생하면 약간의 수정으로 Cython으로 전송합니다.


따라서 Fortran을 사용하는 대신 느린 코드 비트에 Cython을 사용합니까?
— James Tocknell

2
정확하게! Cython 코드가 Python 객체 및 Numpy 배열과 추가 상호 작용 레이어없이 자연스럽게 상호 작용할 수 있기 때문에 훨씬 쉽다는 것을 알았습니다. 고유 한 데이터 구조를 사용하려는 경우 특히 유용합니다. f2py에서 Fortran 또는 C가 파이썬 클래스를 사용하게하는 것은 그리 쉬운 일이 아닙니다.
— Leo Uieda 2016 년

3

f90wrap 은 f2py 위에 빌드되며 파생 된 유형에 대한 액세스를 포함하여 기본 Fortran 코드 기반에 대한 Python 래퍼를 자동으로 생성합니다. 간단한 예 는 작동 방식을 보여줍니다.


2

FortWrap 을 사용 하여 반쯤 갈 수 있습니다. 그러면 Fortran 코드에 대한 C ++ 인터페이스가 생성되고 SWIG 로 래핑되어 Python 인터페이스를 얻을 수 있습니다. 우리는 다소 큰 포트란 코드를 기반으로이 작업을 수행하며 상당히 잘 작동합니다 (사실 FortWrap은이 정확한 목적을 위해 우리 팀원이 개발했습니다).


1

fwrap특히 Fortran90 / 95를 대상으로하고와 동일한 소프트웨어 스택을 사용 f2py합니다.


3
마지막으로이 프로젝트의 GitHub의의의 repo에 커밋 늦은 2010 년이었다
— 제프 Oxberry

1
나는 그것이 낙담하다는 것에 동의하지만 나는 여전히 그것으로 괜찮은 성공을 거두었습니다. f2py기본적으로 F90 보다 기능이 뛰어납니다. 또한 진입 장벽이 매우 낮습니다. 나는 그것을 발견해서 기뻤다.
— MRocklin


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.