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

f90wrapf2py 위에 빌드되며 파생 된 유형에 대한 액세스를 포함하여 기본 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.