2014-07-21 11 views
11

Vorrei usare docstring o qualcosa di simile per documentare le mie routine fortran che possono essere utilizzabili con il comando python help. La docgging generata automaticamente da f2py non è sufficiente e ho bisogno di aggiungere ulteriori dettagli nello stesso modo in cui facciamo con la funzione python docstring.Come documentare la funzione fortran per f2py?

Nella mia idea, dovrebbe assomigliare:

mymod.f:

subroutine foo() 
! This is my function 
end subroutine 

e in una sessione di pitone:

>>> import mymod 
>>> help(mymod.foo) 
+1

Non vedo perché questa domanda stia ottenendo downvotes e voti da chiudere. Come personalizzare la docstring di una funzione generata da f2py suona come una buona domanda per me. –

+1

Non vedo né il motivo per cui vogliono chiudere questa domanda. Può il prossimo scrivere un commento da spiegare? – Sigmun

risposta

3

Una soluzione un po 'sporca è quello di salvare la documentazione nei file ascii e caricarli in fase di esecuzione. Il documento f2py è hard coded in fase di compilazione e l'opzione per modificarlo nel wrapper non è disponibile finora (penso sarebbe bello!).

È possibile ad esempio scrivere un file __init__.py che carica il modulo compilato f2py _mymodule.so e sovrascrive o accoda le stringhe f2py __doc__. ">> mymodule.function?" in ipython funziona quindi, ma sorprendentemente ">> help (mymodule.function)" no! (non so perché ...)

Il seguente frammento di __init__.py prende la documentazione che è archiviata in cartella doc/e file doc/"nome funzione". doc che sono associati a ciascuna funzione. In questo caso la documentazione è sempre caricata ma è anche possibile caricarla manualmente.

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 * 
Problemi correlati