Как мне создать модуль python из программы fortran с помощью f2py?
Вопрос
Я пытаюсь прочитать некоторые smps-файлы с помощью python и нашел реализацию fortran, поэтому я подумал, что попробую f2py.Проблема в том, что у меня нет опыта работы с fortran.
Я успешно установил gfortran и f2py на свой Linux-сервер и запустил пример на странице w f2py, но у меня возникли некоторые проблемы с компиляцией и запуском большой программы.Есть два файла, один с оболочкой для чтения файлов и один со всей логикой.Кажется, они вызывают друг друга, но когда я компилирую и связываю или пробую f2py, я получаю ошибки, из-за которых они каким-то образом не могут найти друг друга:
f95 -c FILEWR~1.F
f95 -c SMPSREAD.F90
f95 -o smpsread SMPSREAD.o FILEWR~1.o
FILEWR~1.o In function `file_wrapper_'
FILEWR~1.F(.text+0x3d) undefined reference to `chopen_'
usrlibgcci486-linux-gnu4.4.1libgfortranbegin.a(fmain.o) In function `main'
(.text+0x27) undefined reference to `MAIN__'
collect2 ld returned 1 exit status
Я также попытался изменить имя на FILE_WRAPPER.F но это не помогло.
С помощью f2py я обнаружил, что мне пришлось включить комментарий, чтобы заставить его принять свободный формат, и сохранил это как новый файл и попробовал:
f2py -c -m smpsread smpsread.f90
Я получаю много выходных данных и предупреждений, но ошибка, похоже, в этом:
getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'], 'typename': 'node', 'dimension': [':']}", assuming void.
В программу для чтения fortran 90 spms можно найти здесь.
Любая помощь или предложения приветствуются.
Решение
Я бы предложил вообще отказаться от бизнеса fortran.
http://myweb.dal.ca/gassmann/smps2.htm
Макет записи MPS описан здесь, и его относительно просто разобрать на Python.
http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline
В любом случае вам придется определить соответствующие классы Python (или namedtuples) для всех данных.
Я не думаю, что Fortran помогает.