Подтвердить что ты не робот

Как документировать fortran для f2py?

Я хотел бы использовать docstring или что-то подобное документу my fortran-подпрограмм, которые могут быть использованы с помощью команды help python. Автогенерированная docstring, сделанная f2py, очень не достаточна, и мне нужно добавить дополнительные сведения так же, как и с docstring функции python.

В моей идее это должно выглядеть так:

mymod.f:

subroutine foo()
! This is my function
end subroutine

и в сеансе python:

>>> import mymod
>>> help(mymod.foo)
4b9b3361

Ответ 1

Несколько грязное решение - сохранить документацию в файлах ascii и загрузить их во время выполнения. Документ f2py жестко закодирован во время компиляции, и возможность изменить его в обертке пока недоступна (это было бы неплохо!).

Например, вы можете написать файл __init__.py, который загружает скомпилированный модуль f2py _mymodule.so и перезаписывает или присоединяется к строкам f2py __doc__. " → mymodule.function?" в ipython работает тогда, но удивительно " → help (mymodule.function)" не делает! (не знаю, почему...)

Следующий фрагмент файла __init__.py содержит документацию, которая хранится в папке doc/и файле doc/ "имя функции".doc, которые связаны с каждой функцией. В этом случае документация всегда загружается, но вы также можете загрузить ее вручную.

def load_documentation():
    """
    Fills the modules __doc__ strings
    """

    import os
    from . import _mymodule
    print('loading documentation')
    docfolder = os.path.abspath(os.path.join(os.path.dirname(__file__), 'doc'))
    for name,func in _mymodule.__dict__.items():
        if callable(func):
            try:
                path = os.path.join(docfolder,name.lower()+'.doc')

                docfile = open(path)
                doc = docfile.read()
                docfile.close()

                func.__doc__ = doc 
            except IOError as msg:
                print(msg)

load_documentation()

from _mymodule import *