पायथन के साथ आधुनिक फोरट्रान कोड को लपेटने के लिए मुझे किस पैकेज का उपयोग करना चाहिए?


27

मुझे पता है और कुछ पुराने फोरट्रान 77 कोड को लपेटने के लिए f2py2e का उपयोग किया है , लेकिन मेरी समझ यह है कि यह नए फोरट्रान 95 कोड के साथ काम नहीं करता है। मैंने शोध किया है कि मुझे क्या उपयोग करना चाहिए, और fwrap और G3 f2py में आया है, जिनमें से कोई भी अपनी वर्तमान स्थिति का कोई स्पष्टीकरण नहीं देता है, या उनका उपयोग कैसे करें (मूल उपयोग से परे)।

मैंने यह भी देखा है कि f2py के संस्करण में तीसरी पीढ़ी f2py का उपयोग करने का विकल्प है, लेकिन इसे गैर-कार्यात्मक होने के रूप में टिप्पणी की जाती है। इसे देखते हुए, मुझे नहीं पता कि मुझे यूनी प्रोजेक्ट के लिए किस प्रोजेक्ट का उपयोग करना चाहिए। नए कोड के लिए मुझे किसका उपयोग करना चाहिए?

PS यह मूल रूप से /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python के रूप में एक ही सवाल है , यह सुझाव दिया गया था कि यहां से पूछना बेहतर जवाब दे सकता है ।


2
"मॉडर्न फोरट्रान"
मेवप्लप

जवाबों:


19

आप Fortran90.org पर वर्णित के रूप में पायथन बिल्डिन ctypes मॉड्यूल का उपयोग कर सकते हैं । यह बहुत सीधा है और किसी भी बाहरी निर्भरता की आवश्यकता नहीं है। इसके अलावा, ndpointer arg टाइप हेल्पर बहुत काम आता है।


8
ये सही है। या Fortran90.org पेज पर वर्णित ctypes के बजाय साइथन का उपयोग करें।
ओन्डेज़ एजर्ट

@ Ond websiteejČertík, महान वेबसाइट! इंटरनेट पर आधुनिक फोरट्रान पर कुछ मूल्यवान संसाधन हैं, लेकिन यह निश्चित रूप से मेरे पसंदीदा में से एक है Fortranwiki.org
astrojuanlu

6

मैं व्यक्तिगत रूप से इसके लिए f2py का उपयोग करता हूं। हालाँकि, मैं F2py के लिए लिखी गई फोरट्रान वास्तव में आधुनिक फोरट्रान नहीं है, बल्कि मॉड्यूल के साथ मुक्त-स्वरूप F90 है। मैं ग्रहण की गई आकृतियों या कस्टम प्रकारों का उपयोग नहीं करता। यह विधि अभी भी मेरे लिए बहुत अच्छी तरह से काम करती है।

एक संसाधन है जिसे मैं लपेटने के हिस्से के रूप में सी के उपयोग से संबंधित साझा करना चाहता हूं। इस पृष्ठ के शेष भाग की भी सिफारिश की गई है।


1
2015 अद्यतन: काफी समय के बाद से, मेरे सभी फोरट्रान इंटरफेसिंग साइथन और iso_c_binding के माध्यम से होता है। यह केवल फोरथॉन कोड को आधुनिक रखने की अनुमति देता है, केवल यह दर्शाता है कि साइथन / सी को वास्तव में क्या चाहिए।
14

2016 अपडेट: iso_c_binding विकल्प अब आसान हो रहा है क्योंकि मैं cythonकमांड का उपयोग करके सिर्फ एक .pyx फ़ाइल संकलित कर सकता हूं , और मेरे फोरट्रान कोड या अजगर कोड को बदलने के बीच ओवरलैप को कम कर सकता हूं और जल्दी से काम करने के लिए सब कुछ प्राप्त कर सकता हूं।
cbcoutinho

5

F2py का प्रलेखन वास्तव में उतना महान नहीं है। मैं करने के लिए f2py से अपने ही परियोजनाओं जाने की प्रक्रिया में हूँ Cython । भले ही साइथन को सी कोड को लपेटने के लिए इस्तेमाल किया जा सकता है, मैंने पाया कि यह नए उच्च प्रदर्शन कोड बनाने के लिए सबसे उपयोगी है। यदि आपका इरादा नया फोरट्रान कोड लिखने का है, तो इसे लपेटें, और इसे पायथन में कॉल करें, मेरा सुझाव है कि आप इसके बजाय साइथन का उपयोग करें। इस तरह आप पायथन कोड लिख सकते हैं, और यदि प्रदर्शन में अड़चनें हैं, तो आप उस मामूली बदलाव के साथ सिथॉन को स्थानांतरित कर सकते हैं।


तो बजाय कोड के धीमी बिट्स के लिए फोरट्रान उपयोग साइथॉन का उपयोग करें?
जेम्स टॉकनेल

2
ठीक ठीक! मैंने पाया है कि यह बहुत आसान है क्योंकि आपका साइथन कोड पाइथन ऑब्जेक्ट्स और नेम्पी सरणियों के साथ स्वाभाविक रूप से (बिना अतिरिक्त रूपांतरण के) बातचीत कर सकता है। यह विशेष रूप से उपयोगी है यदि आप अपनी खुद की डेटा संरचनाओं का उपयोग करना चाहते हैं। फोरट्रान या सी का उपयोग करके आप F2py में पायथन कक्षाओं का उपयोग करते हैं, ऐसा कोई सीधा-सीधा काम नहीं है।
सिंह उड़ीसा

3

f90wrap f2py के शीर्ष पर बनाया गया है और स्वचालित रूप से व्युत्पन्न फोरट्रान कोड बेस के लिए पायथन रैपर उत्पन्न करता है, जिसमें व्युत्पन्न प्रकारों तक पहुंच शामिल है। सरल उदाहरणों का एक सेट दिखाता है कि यह कैसे काम करता है।


2

आप FortWrap का उपयोग कर सकते हैं ताकि आप वहाँ आधे रास्ते पर पहुँच सकें। यह आपके फोरट्रान कोड को C ++ इंटरफ़ेस बनाएगा, जिसे तब पायथन इंटरफ़ेस प्राप्त करने के लिए SWIG के साथ लपेटा जा सकता था । हम इसे फोरट्रान कोड के कुछ बड़े आधार पर करते हैं और यह काफी अच्छी तरह से काम करता है (वास्तव में, FortWrap को इस सटीक उद्देश्य के लिए हमारी टीम के एक सदस्य द्वारा विकसित किया गया था)।


1

fwrapविशेष रूप से Fortran90 / 95 को लक्षित करता है और उसी तरह के कुछ सॉफ्टवेयर स्टैक का उपयोग करता है f2py


3
इस परियोजना के GitHub रेपो के लिए अंतिम प्रतिबद्धता 2010 के अंत में थी।
ज्योफ ऑक्सीबेरी

1
जबकि मैं मानता हूं कि यह हतोत्साहित करने वाला है कि मुझे इसके साथ अच्छी सफलता मिली है। बॉक्स से बाहर यह f2pyF90 की तुलना में अधिक कार्यात्मक है । इसमें प्रवेश की बाधा भी बहुत कम है। मुझे खुशी हुई कि मुझे मिल गया है।
MRocklin

1

f2pyआधुनिक फोरट्रान (मान लिया गया आकार और इतने पर) का समर्थन करता है, एक उदाहरण स्क्रिप्ट देखें

इसके अलावा, फोरट्रान कोड के साथ प्रयोगों के लिए, मैं आईपीथॉन जादू की सिफारिश करूंगा , जो स्थापित करना आसान है और बहुत सुविधाजनक है (यह f2py पर भी निर्भर करता है)।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.