विषय पर बढ़ें

भाग 4: Hello Modules - वीडियो ट्रांसक्रिप्ट

AI-सहायता प्राप्त अनुवाद - अधिक जानें और सुधार सुझाएं

महत्वपूर्ण नोट

यह पृष्ठ केवल ट्रांसक्रिप्ट दिखाता है। पूर्ण चरण-दर-चरण निर्देशों के लिए, कोर्स सामग्री पर वापस जाएं।

ट्रांसक्रिप्ट में दिखाए गए सेक्शन नंबर केवल संकेतात्मक उद्देश्यों के लिए प्रदान किए गए हैं और सामग्री में सभी सेक्शन नंबर शामिल नहीं हो सकते हैं।

स्वागत

नमस्ते, और Hello Nextflow के भाग चार में वापस स्वागत है। यह सेक्शन पूरी तरह से modules के बारे में है, और यह कोर्स का काफी छोटा सेक्शन है। हम वास्तव में बहुत ज़्यादा कोड नहीं लिखने वाले हैं, यह अधिक इस बारे में है कि हम अपनी pipeline में कोड को कैसे व्यवस्थित करते हैं।

अब तक, हम सब कुछ एक ही फ़ाइल में डाल रहे थे, जो ठीक है, और वास्तव में पुराने दिनों में हम Nextflow pipelines इसी तरह बनाते थे।

लेकिन जैसे-जैसे pipeline बढ़ती है, स्क्रिप्ट लंबी और लंबी और लंबी होती जाती है और navigate करना, maintain करना कठिन होता जाता है, और इसका मतलब यह भी है कि हम वास्तव में कोई भी कोड share नहीं कर सकते।

Nextflow modules हमें उस main स्क्रिप्ट से processes को बाहर निकालने और फिर उन्हें import करने की अनुमति देते हैं। इसका मतलब है कि कोड को navigate करना आसान है और इसका मतलब यह भी है कि हम विभिन्न pipelines के बीच उस module कोड को share कर सकते हैं।

docs के main पेज पर यह छोटा डायग्राम इस concept को अच्छी तरह से दिखाता है। एक विशाल स्क्रिप्ट के बजाय, हम विभिन्न module स्क्रिप्ट्स से इन अलग module फ़ाइलों को include करने जा रहे हैं, और यह सब workflow में pull हो जाएगा, लेकिन यह अभी भी बिल्कुल उसी तरह चलेगा।

तो चलिए GitHub Codespaces में जाएं और थोड़ा देखें। पहले की तरह, मैंने यहां अपनी workspace को थोड़ा साफ कर दिया है। पुरानी Nextflow डायरेक्ट्रीज़ और work डायरेक्टरी और इसी तरह की चीज़ों को हटा दिया है। लेकिन इससे कोई फर्क नहीं पड़ता अगर तुम्हारे पास अभी भी वे फ़ाइलें हैं।

मैं hello modules फ़ाइल में काम करना शुरू करने वाला हूं, जो मूल रूप से वहीं है जहां हमने इसे पिछले अध्याय के अंत में छोड़ा था। हमारे पास यहां तीन processes हैं। हमारे पास कुछ params हैं, workflow ब्लॉक, जहां हम उन तीन processes को चला रहे हैं और उन्हें channels के साथ जोड़ रहे हैं। फिर हम output channels को publish करते हैं और हमारे पास output ब्लॉक है जो बताता है कि उन फ़ाइलों को कैसे publish करना है।

1. modules को स्टोर करने के लिए एक डायरेक्टरी बनाएं

अब, जैसा कि मैं कह रहा हूं, हम वास्तव में बहुत ज़्यादा कोड लिखने या edit करने वाले नहीं हैं। हम बस उस कोड को move करने वाले हैं जो हमारे पास पहले से है। Nextflow module फ़ाइलों में आमतौर पर एक single process होती है, और convention के अनुसार हम आमतौर पर उन्हें modules नामक डायरेक्टरी में रखते हैं। लेकिन तुम इसे जो चाहो कह सकते हो। लेकिन मैं यहां अपनी repository में एक modules डायरेक्टरी रखने वाला हूं, और फिर मैं प्रत्येक process के लिए एक फ़ाइल बनाने वाला हूं। तो मैं कहूंगा new file, sayHello.nf।

2. sayHello() के लिए एक module बनाएं

अब मैं अपनी process लेने वाला हूं और मैं बस इस कोड को select करूंगा, इसे main hello modules फ़ाइल से cut करूंगा और यहां paste करूंगा।

जाहिर है कि यह अपने आप कुछ नहीं करता। हमारी main स्क्रिप्ट को अभी भी उस process की ज़रूरत है, इसलिए हमें इसे किसी तरह वापस pull करना होगा। और हम ऐसा include statement के साथ करते हैं।

तो मैं include टाइप करता हूं और कुछ curly braces, और फिर मैं process का नाम लेता हूं। और मैं from कहता हूं, और फिर मैं इसे एक relative file path देता हूं। तो यह कहता है, ./ से शुरू होता है क्योंकि यह relative है जहां से यह स्क्रिप्ट save की गई है। तो यह modules sayHello.nf है।

ध्यान दें कि VS code extension यहां काफी helpful है। यह हमें बताता है, अगर यह इस फ़ाइल को ढूंढ सकता है और अगर यह एक process ढूंढ सकता है, जिसे मैं नाम दे रहा हूं। अगर मैं यहां जानबूझकर एक typo डालता हूं, तो यह मुझे तुरंत error देता है और यह मुझे बताएगा कि यह उस process को नहीं ढूंढ सकता जिसे मैं import करने की कोशिश कर रहा हूं। तो किसी भी error पर नज़र रखो जो तुम्हें मिले।

और वास्तव में बस इतना ही। हमारी process अभी भी यहां है। नीचे कोई बदलाव की ज़रूरत नहीं है। process का नाम same है और यह बिल्कुल उसी तरह execute होती है। बस process का actual कोड अब एक अलग फ़ाइल में है।

हम फिर से Nextflow workflow चला सकते हैं, यह बिल्कुल उसी तरह काम करने वाला है। और मूल रूप से कोर्स के इस अध्याय का बाकी हिस्सा बस इन तीन processes को उनकी अपनी फ़ाइलों में move करना है।

तो चलिए अभी ऐसा करते हैं। मैं जल्दी से दूसरी process के लिए एक नई module फ़ाइल बनाने वाला हूं: convertToUpper.nf। मैं उस कोड को cut करूंगा, यहां paste करूंगा। और फिर मैं उसे include करूंगा। चलो बस, बढ़िया।

और फिर मैं collectGreetings.nf के लिए एक नई फ़ाइल बनाने वाला हूं। उसे cut करूंगा।

बहुत सारा cut करना, cutting और copying और pasting।

और अब हमारी main workflow स्क्रिप्ट अचानक बहुत, बहुत छोटी, बहुत अधिक approachable और पढ़ने में बहुत आसान लग रही है।

और तुम देख सकते हो कि अब project हमारी विभिन्न फ़ाइलों के साथ कैसे build होना शुरू होता है। हम जहां चाहें वहां detail में जा सकते हैं। pipeline में specific steps को ढूंढने के लिए अपने रास्ते को बहुत आसानी से navigate कर सकते हैं, और pipeline क्या कर रही है इसका overview जल्दी से प्राप्त कर सकते हैं।

VS Code के साथ modules को navigate करना

अब, बेशक, ऐसा करने का नुकसान यह है कि अगर तुम्हारे पास एक बड़ी pipeline है, तो तुम्हारे पास बहुत सारी module फ़ाइलें होंगी और वे multiple sub directories में या सभी तरह की चीज़ों में organized हो सकती हैं। अब, फिर से, यहां एक छोटी सी tip है। VS Code extension तुम्हारे code base को तुम्हारे लिए navigate करने और वहां के कोड के बारे में बताने में काफी अच्छा है।

तुम देख सकते हो VS Code समझता है कि यह process क्या है और जब मैं hover करता हूं तो मुझे इसका एक छोटा overview देता है ताकि मैं source code को ढूंढने के बिना देख सकूं कि inputs और outputs क्या हैं, जो आमतौर पर सबसे महत्वपूर्ण चीज़ है जब मैं इसे workflow में उपयोग कर रहा हूं।

और अगर मैं command hold करता हूं, मैं Mac पर हूं, और मैं process के नाम पर click करता हूं, तो यह सीधे तुरंत फ़ाइल खोलता है। इसे pull करता है। तो मैं सीधे वहां जा सकता हूं बिना यह सोचे कि actual file paths क्या हैं। और यह कहीं भी काम करता है, मैं ऐसा भी कर सकता हूं, चाहे processes को कहीं भी call किया जा रहा हो। तो यह वास्तव में तेज़ है।

4.4. workflow चलाएं

ठीक है, चलिए बस check करते हैं कि pipeline अभी भी वैसे ही चलती है जैसी हम उम्मीद करते हैं। तो terminal लाओ। चलिए "nextflow run hello modules" करते हैं, और देखते हैं कि क्या यह बिना किसी समस्या के execute होती है।

उम्मीद है कि इसका पूरा point यह है कि pipeline मूल रूप से unchanged है, इसलिए तुम्हें वास्तव में जब हमने इसे पहले चलाया था तब से कोई बदलाव नहीं दिखना चाहिए। यहां output बिल्कुल same दिखता है, और तुम हमारी results डायरेक्टरी को सभी same फ़ाइलों के साथ देख सकते हो, तो यह बढ़िया है। कोई बदलाव न होना अच्छा है।

nf-core/modules पर एक नोट

समाप्त करने से पहले, मैं modules के संबंध में collaboration की शक्ति पर जल्दी से touch करना चाहता हूं। ये फ़ाइलें मेरी repository में बैठी हैं, इसलिए यह तुरंत स्पष्ट नहीं है कि हम उन पर कैसे collaborate कर सकते हैं। और ऐसा करने के कई अलग-अलग तरीके हैं, लेकिन शायद इसका सबसे बड़ा और सबसे प्रसिद्ध उदाहरण nf-core है।

अगर मैं nf-core website पर जाता हूं, मैं resources पर जाता हूं, और modules। तुम देख सकते हो कि nf-core के पास modules की एक विशाल library है, जब मैं इसे देखता हूं तो लगभग 1700 modules के just under। और इसलिए मैं अपने किसी भी favorite tools का नाम टाइप कर सकता हूं, जा सकता हूं और देख सकता हूं कि क्या किसी और ने पहले से ही इसके लिए एक module लिख दिया है, और यहां इस pre-written module process को देख सकता हूं सभी inputs, outputs, software containers, यह सारी जानकारी के साथ, और तुम यहां side पर देख सकते हो कि कितनी अलग-अलग nf-core pipelines सभी इस single shared process का उपयोग कर रही हैं।

यह थोड़ा extreme उदाहरण है, लेकिन तुम देख सकते हो कि यह वास्तव में इस कोड को reuse कर रहा है। और अगर मैं इसके GitHub source पर click करता हूं, तो यह बिल्कुल वैसा ही है जैसा हम कर रहे हैं। यह बस एक फ़ाइल में एक बड़ी process है।

अब nf-core side पर, हम उन फ़ाइलों को share करने और विभिन्न repositories में लाने में सक्षम होने के लिए कुछ tricks करते हैं। और अगर तुम इसके बारे में और जानना चाहते हो, तो जाओ और विशेष रूप से nf-core के साथ उपयोग करने और building के बारे में हमारे पास जो कोर्स है उसे check करो। लेकिन मैं बस तुम्हें यह idea देना चाहता था कि code reuse की यह concept कितनी शक्तिशाली हो सकती है।

समाप्ति

ठीक है, modules के लिए बस इतना ही। मैंने तुमसे कहा था कि यह कोर्स का एक छोटा सेक्शन था। quiz को check करो, सुनिश्चित करो कि तुम इसे समझते हो और सुनिश्चित करो कि सब कुछ अभी भी ठीक से काम कर रहा है। और मैं तुम्हें अगले video में वापस मिलूंगा, जो पूरी तरह से software containers के बारे में है। बहुत-बहुत धन्यवाद।