2013-08-14 3 views
12

FORTRAN에 숫자 라이브러리가 있습니다. (저는 FORTRAN IV를 믿습니다) 파이썬 코드로 변환하고 싶습니다. 나는 파이썬 가상 머신 (Windows, MacOS-X, Linux, Android)에서 가져올 수있는 실제 소스 코드를 원한다. 저는 이것을 손으로 시작했지만, 도서관에는 약 1,000 개의 루틴이 있으므로 합리적인 해결책은 아닙니다.FORTRAN 코드를 Python 코드 (실제 코드, 래퍼가 아닌)로 쉽게 변환하는 방법

+3

슬프게도 변환 도구가 없습니다. 두 배로 나빠질 것 같은데 ... 우선 변환해야 할 줄 수는 많지만, 주로 FORTRAN IV를 다루어야하기 때문에. – SethMMorton

+0

자주 사용되는'f2py'는 포트란 코드를 파이썬 코드로 바꾸는 작업을 훌륭히 수행하지 못하기 때문에 ** ** _ _ _ _ _ _ _ 확실한 방법이 있습니다. –

+3

@KyleKanos f2py는 Fortran을 Python 코드로 변환하지 않습니다. Fortran 코드 주위에 C 래퍼를 작성한 다음 Python이 가져올 수있는 공유 라이브러리 객체로 컴파일합니다. – SethMMorton

답변

9

편집 : NumPy와

이러한 도구 Fortran to Lisp, 또는 Fortran to C, 또는 Fortran to Java 존재에 대한 추가 정보를 제공합니다. 그러나 Fortran, Lisp 또는 C와 달리 간단한 이유 때문에 Fortran에서 Python 도구를 사용할 수 없습니다. Python에는 GOTO [1]이 없습니다. 그리고 Fortran에는 많은 GOTO가 있습니다 (특히 Fortran IV). Jacopini에 의해 구조화 된 프로그래밍으로 GOTO를 에뮬레이션 할 수 있다고하는 이론이있다하더라도 실제 (효율적인) 언어 변환 도구를 구현하기에는 너무 성가신 일입니다.

그래서뿐만 아니라 당신은 1000 루틴의 코드를 변환해야하지만 은 모든 겹침 gotos으로, 각 알고리즘을 이해하고, 파이썬을 쓰기 전에 구조화 된 프로그램에 알고리즘을 번역하는 방법도 필요합니다. 행운을 빕니다!

안녕하세요, 왜 래퍼가 좋지 않다고 생각하십니까? Windows, OSX 및 Linux에는 모두 Fortran 및 C [2] 컴파일러와 좋은 래퍼가 있습니다! C에 대한

, SWIG있다 (여기없는 언어,하지만 f2c은 옵션이 될 수 있음) 및 포트란 지금 numpy와 통합, f2py 있습니다. SWIG에는 support for Android이 있습니다.

덧붙여서, "순수한"파이썬으로 변환하는 대신 numpy를 사용할 수 있습니다. numpy 기능은 Fortran 90과 유사하므로 (비교 here 참조) 먼저 프로그램을 F90으로 변환하여보다 부드러운 전환을 고려할 수 있습니다 . Numpy on Adnroid이있는 것으로 보입니다. 그리고 64 비트 Windows에서 numpy가 필요한 경우 바이너리 here이 있습니다.

gfortran은 랩퍼를 사용하기로 결정한 경우 Linux (배포 패키지에서 설치), Windows (MinGW) 및 Android에서 실행됩니다. 그 라인을 따라 가면 FIV 코드를 컴파일하는 것을 잊지 마라. 그래서 보통 "one-trip loop"문제가있다. (보통 컴파일러 옵션은 괜찮다). 또한 현대 컴파일러에서 찾을 수없는 일부 비 오래된 표준 문을 수동으로 변환해야 할 수도 있습니다.

당신이 또한 분명히, 리스프 또는 자바 프로젝트 언어를 전환 할 수있는 옵션이 ...

[1] 요청할 수 있습니다 :하지만 GOTO가 문제가있는 경우, 어떻게 포트란은 자바가 와서 수단? 자, 내부적으로 GOTO instruction이있는 JVM에서 트릭을 사용합니다. 파이썬 바이트 코드로 GOTO도 있습니다 (JUMP here 찾아보기). 그래서 여기에서 조사 할 내용이있을 수 있습니다. 따라서 이전 내역은 잘못되었습니다. 일 수 있습니다. 이는 Java에서와 같이 바이트 코드 트릭을 사용하여 Fortran에서 Python 도구입니다. 그러나 개발해야 할 것이고 좋은 라이브러리 (numpy, matplotlib, pandas ...와 같은)의 가용성은 불필요한 것입니다.

+0

goto를 사용하여 구조화 된 프로그램 구문을 만들 수 있습니다. 코드가 그 곳 곳곳에 아무렇지도 않게 자리 잡고 있다면 그것은 구조화가 불가능할 수도 있습니다. 내가이 일에 착수해야만한다면 나는 현대 요새로 개종하려고 시도 할 것이다. (모든 고토를 없애기 위해서). 코드가 멋지게 구조화되어 있는지 아닌지는 금방 알 수 있습니다. – agentp

+1

저는 거의 20 년이 넘은 코드에 대해 작업하고 있습니다. 그래도 여전히 GOTO가 없습니다. 고토 (GOTO)는 유지하기가 어렵 기 때문에 잘 관리 된 포트란 코드에는 매우 일반적이라고 생각합니다. fortran-to-python 변환기는 여전히 모든 코드에 유용 할 것입니다. – naught101

+0

@ naught101 필자는 여전히 래퍼를 작성하여 Fortran 속도와 Python의 훌륭한 I/O 및 GUI 기능의 이점을 누릴 수 있다고 생각합니다. 컴퓨팅 코드를 Python과 같은 언어로 변환하는 것은 가장 현존하는 일이 아닙니다. [Alliances] (http://www.salome-platform.org/)와 같은 대규모 프로젝트에서 파이썬이 글루 코드와 인터페이싱에 사용되는 이유는 무엇입니까? Fortran 코드를 numpy에 통합하면 Matlab과 유사한 구문을 백엔드로 사용할 수 있습니다. 이 접근 방식에 대한 장점 만 볼 수 있습니다. –