Ошибка компиляции оболочки f2py: установка формы массива

У меня проблема с компиляцией через f2py. У меня есть модуль f90 с несколькими подпрограммами. До этого момента он отлично компилировался для использования в скрипте Python. Однако теперь, когда я пытаюсь его скомпилировать и собрать, он жалуется на эту ошибку:

build/src.macosx-10.5-x86_64-2.7/PyCosmology/sims/fort/read_sim-f2pywrappers2.f90:355.17:

   allocate(d())
             1
Error: Shape specification for allocatable scalar at (1)

У него также есть две другие ошибки, но они просто являются результатом неправильного размещения d() здесь. Вы можете видеть, что файл, который он компилирует, является оболочкой f2py. Что еще более странно, когда я действительно смотрю на файл-оболочку, на который он указывает, строка 355 на самом деле выглядит так:

       allocate(d(s(1),s(2)))

поэтому я понятия не имею, почему компилятор говорит мне, что в операторе выделения нет спецификаторов формы. И из-за этого я понятия не имею, как это исправить!

Обратите внимание, что я немного изменил модуль с тех пор, как он в последний раз скомпилировался правильно, но массив, для которого возникает эта ошибка, я вообще не трогал, как и не трогал конкретную подпрограмму, в которой он существует.


person StevenMurray    schedule 25.07.2012    source источник
comment
После некоторого копания я обнаружил, что подпрограмма, в которой возникает ошибка, не та, которую мне нужно вызывать из python (ее просто нужно вызывать подпрограммами в модуле). Однако раньше у меня были проблемы с хранением этих подпрограмм вне файла - см. -here" title="f2py дает переопределение foo, предыдущее определение было здесь"> stackoverflow.com/questions/11148841/, поэтому, за исключением этого, есть ли какой-либо способ сообщить f2py, что НЕ нужно создавать интерфейсы для этих неиспользуемых подпрограмм. ? Или мне нужно вручную редактировать файл pyf?   -  person StevenMurray    schedule 25.07.2012
comment
да, в f2py просто используйте только параметр командной строки: подпрограмма1 подпрограмма2 : чтобы выбрать определенные подпрограммы, или пропустите, чтобы просто избежать определенных.   -  person DaveP    schedule 25.07.2012
comment
@DaveP Большое спасибо. Я компилирую и строю с помощью numpy.distutils, поэтому есть ли место для размещения этих команд в сценарии setup.py?   -  person StevenMurray    schedule 25.07.2012
comment
да, просто добавьте f2py_options=[only:,routine1, Routine2,:] в объект Extension   -  person DaveP    schedule 25.07.2012
comment
@DaveP Привет, ты спасатель. Кажется, сработало!   -  person StevenMurray    schedule 25.07.2012
comment
Таким образом, кажется, что хотя это не дает никаких ошибок, связанных с пропуском и т. Д., Я все еще получаю ту же ошибку, что и в исходном сообщении. Это странно, так как он должен полностью пропускать подпрограмму с массивом, который сейчас выдает ошибку.   -  person StevenMurray    schedule 25.07.2012
comment
Не волнуйтесь. Я предполагаю, что в вашем коде есть какая-то ошибка, которая может быть лишь немного связана с сообщением об ошибке. Я обнаружил, что f2py иногда может выдавать очень бесполезные сообщения об ошибках или даже генерировать исключение. Хорошей проверкой является компиляция кода непосредственно с помощью вашего компилятора fortran — это может привести к осмысленной ошибке или предупреждающему сообщению, когда f2py просто сдается.   -  person DaveP    schedule 25.07.2012


Ответы (1)


Догадаться.

Я пытался выделить целое число. Извиняюсь.

person StevenMurray    schedule 25.07.2012