2016-08-30 3 views
0

f2py дает ошибку при попытке скомпилировать подпрограмму FORTRAN, из которой я вызываю другой массив передачи функции FORTRAN. Я упростил код, чтобы оставить проблему.f2py Функциональные интерфейсы функции Fortran компиляция ошибки

SUBROUTINE MAS (matrix, a) 
    IMPLICIT NONE 
    INTERFACE 
     LOGICAL FUNCTION LTRY(input_array) 
      IMPLICIT NONE 
      INTEGER*4 :: input_array(:,:) 
     END FUNCTION LTRY 
    END INTERFACE 

    INTEGER*4 :: matrix (:,:) 
!f2py INTENT(INOUT) :: matrix(:,:) 
    INTEGER*4 a 
!f2py INTENT(INOUT) :: a 

    a = 1 
    IF (LTRY (matrix)) a = 2 
END SUBROUTINE 

LOGICAL FUNCTION LTRY(input_array) 
    IMPLICIT NONE 
    INTEGER*4 :: input_array (:,:) 

    IF (ANY(input_array == 0)) LTRY = .FALSE. 
END FUNCTION LTRY 

После того как я пытаюсь скомпилировать это с помощью f2py -c -m Ptest ptest.f90 Я получаю огромное количество ошибок. Что не так? Использование компилятора Ubuntu и gfortran.

Вот вывод компилятора (часть с сообщениями об ошибках):

gfortran:f77: /tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:16.35: 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:18.72: 
        integer, dimension(:,:) :: input 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:19.72: 
        logical :: ltry 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:20.17: 
       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:40.32: 
     ltryf2pywrap = .not.(.not.ltry(input_array)) 
           1 
Error: Operand of .not. operator at (1) is INTEGER(4) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:16.35: 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:18.72: 
        integer, dimension(:,:) :: input 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:19.72: 
        logical :: ltry 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:20.17: 
       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:40.32: 
     ltryf2pywrap = .not.(.not.ltry(input_array)) 
           1 
Error: Operand of .not. operator at (1) is INTEGER(4) 
error: Command "/usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops -I/tmp/tmpSZHMCR/src.linux-i686-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c -c /tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f -o /tmp/tmpSZHMCR/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.o" failed with exit status 1 
Compilation failed. 

Некоторые ошибки выглядят довольно странно. Например, компилятор рассматривает логическую функцию как целое.

+3

Какие ошибки вы получаете? –

+0

Я отредактировал мой вопрос –

ответ

0

К сожалению, вы не указали, к какой ошибке вы относитесь. я пытался скомпилировать его в моей системе, и я получаю сообщение об ошибке:

/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:16:35: 

       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:18:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:19:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:20:17: 

       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:16:35: 

       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:18:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:19:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:20:17: 

       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 

прогностической в ​​обернутом файл, мы видим, что обертка сделала очень сомнительное решение: Он добавил комментарии в конце линии, но затем линия обернутая комментарий, не объявляя его комментарий во второй строке:

C  -*- fortran -*- 
C  This file is autogenerated with f2py (version:2) 
C  It contains Fortran 77 wrappers to fortran functions. 

     subroutine f2pywrapmas (matrix, a, f2py_matrix_d0, f2py_matr 
    &ix_d1) 
     integer*4 a 
     integer f2py_matrix_d0 
     integer f2py_matrix_d1 
     integer*4 matrix(f2py_matrix_d0,f2py_matrix_d1) 
     interface 
     subroutine mas(matrix,a) 
      integer*4, dimension(:,:) :: matrix 
      integer*4 :: a 
      interface ! in :ptest:ptest.f90:mas 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
    &wn_interface 
        integer, dimension(:,:) :: input 
        logical :: ltry 
       end function ltry 
      end interface 
     end subroutine mas 
     end interface 
     call mas(matrix, a) 
     end 

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

+0

Спасибо. Я обновил свой вопрос на выходе f2py. –

 Смежные вопросы

  • Нет связанных вопросов^_^