Ho una libreria numerica in FORTRAN (credo FORTRAN IV) e voglio convertirlo in codice Python. Voglio un vero codice sorgente che posso importare su qualsiasi macchina virtuale Python --- Windows, MacOS-X, Linux, Android. Ho iniziato a farlo a mano, ma ci sono circa 1.000 routine nella libreria, quindi non è una soluzione ragionevole.Come posso convertire facilmente il codice FORTRAN in codice Python (codice reale, non wrapper)
risposta
modificare: informazioni aggiunto il NumPy
esiste Tale strumento per Fortran to Lisp o Fortran to C, o addirittura Fortran to Java. Ma non avrai mai uno strumento Fortran to Python, per una semplice ragione: a differenza di Fortran, Lisp o C, Python non ha GOTO [1]. E ci sono molti GOTO nel codice Fortran (specialmente Fortran IV). Anche se esiste un teorema di Jacopini che afferma che è possibile emulare GOTO con la programmazione strutturata, è troppo complicato implementare uno strumento di conversione della lingua reale (ed efficiente).
Quindi non solo avrete bisogno di tradurre il codice di 1000 routine, ma si dovrà anche capire ogni algoritmo, con tutte le sue goto embricate e tradurre l'algoritmo in un programma strutturato prima di scriverlo in Python. In bocca al lupo!
Ehi, perché pensi che un involucro sia cattivo? Windows, OSX e Linux hanno tutti i compilatori Fortran e C [2] e buoni involucri!
Per C (non la vostra lingua qui, ma f2c può essere un'opzione), non v'è SWIG, e Fortran ha f2py, ora integrato con numpy. SWIG ha qualche support for Android.
A proposito, invece di convertire in Python "puro", puoi usare numpy: le funzionalità di numpy sono simili a Fortran 90 (vedi un confronto here), quindi potresti considerare la prima traduzione dei tuoi programmi su F90 per una transizione più fluida . Sembra che ci sia anche un Numpy on Adnroid. E nel caso abbiate bisogno di numpy su Windows 64-bit, ci sono i binari here.
Se si decide di utilizzare i wrapper, gfortran viene eseguito su Linux (è sufficiente installare da pacchetti di distribuzione), Windows (MinGW) e Android. Se segui questa linea, non dimenticare di compilare il codice FIV, quindi c'è il solito problema del "ciclo di un viaggio" (di solito l'opzione del compilatore va bene). Probabilmente dovrai anche convertire manualmente alcune vecchie istruzioni non standard, non trovate nei moderni compilatori.
Hai anche, ovviamente, la possibilità di passare la lingua del progetto di Lisp o Java ...
[1] Ci si può chiedere: ma se GOTO è il problema, come mai c'è un Fortran a Java strumento? Bene, usa i trucchi con la JVM, che ha internamente il GOTO instruction. C'è anche un GOTO in bytecode Python (cerca JUMP here), quindi potrebbe esserci qualcosa da investigare qui. Quindi la mia precedente affermazione è errata: lo potrebbe essere uno strumento Fortran to Python, utilizzando trucchi bytecode come in Java. Ma resta da sviluppare e la disponibilità di buone librerie (come numpy, matplotlib, panda ...) lo rende inutile, per non dire altro.
è possibile utilizzare goto per creare costrutti di programma strutturato. Il contrario non segue, se il codice gilly non è ovunque, potrebbe non essere possibile strutturarlo. Se dovessi affrontare questo compito, proverei prima a convertire in fortran moderno (sbarazzati di tutti i goto). Dovrebbe diventare subito evidente se il codice è ben strutturato o meno. – agentp
Sto lavorando su un codice che ha quasi più di 20 anni (ancora mantenuto però) - e non ha GOTO. Immagino che sarebbe abbastanza comune per qualsiasi codice fortran ben mantenuto, dal momento che i GOTO sono davvero difficili da mantenere. Un convertitore fortran-to-python sarebbe comunque utile per tutto quel codice. – naught101
@ naught101 Continuo a credere che sia meglio scrivere un wrapper, per trarre vantaggio sia dalla velocità di Fortran che dalle funzionalità di I/O e GUI di Python. Convertire il codice di calcolo in un linguaggio come Python, che è tra i più lenti in circolazione, non è la cosa saggia da fare. C'è una buona ragione per cui Python viene utilizzato per il codice e l'interfaccia colla, anche (o soprattutto!) In progetti di grandi dimensioni, come [Alliances] (http://www.salome-platform.org/). E l'integrazione del codice Fortran in numpy offre una sintassi simile a Matlab con ancora il tuo codice come backend. Vedo solo vantaggi per questo approccio. –
- 1. Come testare facilmente il codice?
- 2. Come convertire il codice ByteCode in codice macchina
- 3. Come convertire il codice OpenGL in WebGL
- 4. Come convertire codice jQuery in codice AngularJS utilizzabili
- 5. come convertire Python 3 in Python 2 codice?
- 6. Convertire il codice C99 in C89
- 7. Uno strumento per convertire il codice MATLAB in Python
- 8. Come eseguire facilmente il codice C# sul server Linux?
- 9. codice Python come ricciolo
- 10. Come posso usare il codice comune in python?
- 11. Come valutare il codice javascript in Python
- 12. Come convertire un carattere in codice chiave?
- 13. Come convertire llvm IR in codice c?
- 14. Linting in tempo reale del codice C
- 15. fsolve su Python (conversione del codice MATLAB per codice Python)
- 16. Come posso assicurarmi che tutto il mio codice Python "compili"?
- 17. Come utilizzare il codice gestito dal codice non gestito?
- 18. Come posso profilare il codice Python riga per riga?
- 19. Come convertire il codice C# in uno script PowerShell?
- 20. Come posso invocare il codice Python da Ruby?
- 21. AS3: Come convertire il codice ASCII in actioncript del carattere
- 22. Come eseguire codice Python dal codice Visual Studio
- 23. Come velocizzare questo codice Python?
- 24. Come posso gestire il codice ASP classico?
- 25. Come designare codice irraggiungibile python
- 26. Python Mechanize + codice GAEpython
- 27. Come convertire il codice matematico infix user-friendly nel codice Clojure?
- 28. Blocchi di codice in python
- 29. Come convertire automaticamente il codice di mantenimento manuale in ARC?
- 30. Semplifica questo codice python
Purtroppo non ci sono strumenti di conversione (per quanto ne so). Senti doppiamente male per te ... prima di tutto, il numero di linee che devi convertire, ma soprattutto perché devi affrontare FORTRAN IV. – SethMMorton
Anche il più spesso usato 'f2py' non fa un buon lavoro convertendo il codice Fortran in codice Python, quindi c'è ** sicuramente ** nessun metodo _easy_. –
@KyleKanos f2py non converte il codice Fortran in Python. Crea un wrapper C attorno al codice Fortran che viene poi compilato su un oggetto libreria condiviso che Python può importare. – SethMMorton