Qiskit এ অবদান¶
Qiskit হলো একটি মুক্ত উৎসের প্রকল্প (ওপেন সোর্স প্রজেক্ট) যা সর্বস্তরের মানুষের মাঝে কোয়ান্টাম কম্পিউটিংকে ছড়িয়ে দিতে আগ্রহী। এই পাতাটি বর্ণনা করে আপনি কিভাবে Qiskit কমিউনিটির (সংগঠন) অংশ হতে পারেন।
সূচিপত্র¶
Qiskit এর সমস্ত কোড Qiskit GitHub organization এর সংগ্রহে রাখা আছে, যেখানে আপনি Qiskit এর প্রত্যেকটি প্রকল্প (প্রজেক্ট) পাবেন। এর সাথে আছে,
শুরুর নির্দেশনা¶
কীভাবে Qiskit ব্যবহারকারী সদস্যরা
ত্রুটি রিপোর্ট করা এবং প্রসারণের (এনহ্যান্সমেন্ট) জন্য অনুরোধ¶
যখন আপনি সমস্যায় পড়বেন, দয়া করে যথাযথ উপাদানের ইস্যু (সমস্যা) অনুসরণ করে নতুন ইস্যু খুলুনঃ
উপাদান |
ইস্যু (সমস্যা) অনুসরণ |
---|---|
qiskit-টেরা |
|
qiskit-এয়ার |
|
qiskit-ইগ্নিস |
|
ডকুমেন্টেশন (বিবরণী) অথবা Qiskit মেটা প্যাকেজ |
আপনার যদি নতুন বৈশিষ্ট্যর (ফিচার) কোনো চিন্তাভাবনা থেকে থাকে, তবে যথাযথ উপাদানের সমস্যা (ইস্যু) অনুসরকে (ট্র্যাকার) Enhancement (এনহ্যান্সমেন্ট) সমস্যা (ইস্যু) খুলুন। নতুন সমস্যা (ইস্যু) খোলার মাধ্যমে আপনি আপনার চিন্তাভাবনা আদান প্রদান করতে পারবেন, যেমন- নতুন ফিচারটি কীভাবে প্রকল্পে (প্রজেক্টে) মানানসই (ফিট) হবে, কীভাবে বাস্তবায়ন করা যাবে ইত্যাদি।
কোড করার মাধ্যমে অংশগ্রহণ¶
শৈলী নির্দেশিকা (স্টাইল গাইড)¶
প্রকল্পে একটি সামঞ্জস্যপূর্ণ কোড লেখার শৈলী (কোড স্টাইল) প্রয়োগ করতে, আমরা যাচাই করতে Pylint এবং pycodestyle ব্যবহার করি যাতে কোড লেখায় অবদানগুলি প্রকল্পের শৈলী নির্দেশিকার (স্টাইল গাইড) সাথে সঙ্গতিপূর্ণ এবং মেনে চলে ৷ আপনার পরিবর্তনগুলি শৈলী নির্দেশিকার (স্টাইল গাইড) সাথে সামঞ্জস্যপূর্ণ কিনা তা যাচাই করতে, চালানঃ tox -elint
অংশগ্রহণকারীর চুক্তিপত্র (কন্ট্রিবিউটর লাইসেন্স এগ্রিমেন্ট)¶
প্রকল্পে কোনো কোড প্রেরণ বা অংশগ্রহণ করার আগে, সকল অংশগ্রহণকারীকে একটি অংশগ্রহণকারীর চুক্তিপত্র (CLA) স্বাক্ষর করতে হবে। CLA স্বাক্ষর করার মাধ্যমে আপনি প্রত্যয়ন করবেন যে, আপনার সব কোড বা অবদানের রচয়িতা কেবল আপনি এবং আপনি Apache-2.0 চুক্তির শর্তসাপেক্ষে স্বাধীনভাবে অংশগ্রহন করছেন।
আপনি যখন Qiskit প্রকল্পে একটি নতুন পুল রিকোয়েস্ট তৈরি করবেন, তখন আপনি CLA স্বাক্ষর করেছেন কিনা তা স্বয়ংক্রিয়ভাবে নির্ণীত হবে। প্রয়োজন অনুসারে স্বয়ংক্রিয়ভাবে পুল রিকোয়েস্টে চুক্তি স্বাক্ষর করার জন্য একটি লিঙ্ক কমেন্ট বা মন্তব্য করা হবে। individual CLA বিবরণীটি (ডকুমেন্টেশন) পর্যালোচনা করার জন্য পিডিএফ আকারে দেয়া হলো।
নোট
যদি আপনার অংশগ্রহণ আপনার চাকরির অন্তর্ভুক্ত বা আপনার চাকরিদাতার মালিকানাভুক্ত হয় তবে আপনাকে একটি corporate CLA ও স্বাক্ষর করতে হবে এবং আমাদের কাছে এই <qiskit@us.ibm.com> ঠিকানায় ইমেইল করতে হবে।
পুল রিকোয়েস্ট¶
আমরা কারো অংশগ্রহণ নিশ্চিত করার জন্য GitHub pull requests ব্যবহার করি।
সাধারণত প্রয়োজন না হলেও পুল রিকোয়েস্ট দেয়ার পূর্বে, আপনি যে ত্রুটি সংশোধন করছেন বা যে ফিচারটি নিয়ে কাজ করছেন সে সম্পর্কিত একটি নতুন ইস্যু খোলার মাধ্যমে কমিউনিটির সাথে একটি আলোচনায় অংশ নিতে পারেন। এর মাধ্যমে হয়তো আপনি নতুন কোনো ধারণা পেতে পারেন এবং সবাই মিলে ইস্যুটি কীভাবে কোডে বাস্তবায়ন করা যায় সে সম্পর্কে বিশদ আলোচনা করতে পারেন। এছাড়াও এর মাধ্যমে কমিউনিটি জানতে পারবে আপনি কী নিয়ে কাজ করছেন এবং প্রয়োজন হলে আপনার উল্লেখিত ইস্যু নম্বর থেকে অন্যান্য কমিউনিটি বা তার সদস্যদের কাছ থেকে আপনি সাহায্যও পেতে পারেন।
যদি আপনি কোনো কোড লিখে থাকেন এবং সেটা সম্পূর্ণ করতে সাহায্য দরকার, অথবা শেষ করার আগে কোডের প্রাথমিক পর্যালোচনা করার প্রয়োজন, অথবা কোডের বাস্তবায়ন শেষ করার আগে কোনো পরামর্শ দরকার তাহলে আপনি একটি Work in Progress পুল রিকোয়েস্ট খুলতে পারেন। যখন আপনি পুল রিকোয়েস্টটি তৈরী করবেন, তখন শিরোনামে [WIP] ট্যাগ টি যোগ করবেন (ওয়ার্ক ইন প্রগ্রেস এর জন্যে)। এটি পর্যালোচকদের নির্দেশ করবে যে পুল রিকোয়েস্টের কোডটি তার চূড়ান্ত অবস্থায় নেই এবং পরিবর্তিত হবে। এর অর্থ হল আমরা কমিটটিকে সংযোজন (মার্জ) করব না যতক্ষণ না এটি শেষ হয়। আপনি বা একজন পর্যালোচক [WIP] ট্যাগটি সরাতে পারেন যখন কোডটি সম্পূর্ণ পর্যালোচনার তৈরি মার্জ হওয়ার পূর্বে।
কোড পর্যালোচনা (রিভিউ)¶
কোড রিভিউ বা পর্যালোচনা খোলাখুলিভাবে করা হয় এবং সবার জন্য উন্মুক্ত। কমিট মার্জ বা সংযোজন করা, পুল রিকোয়েস্টে সদস্যদের মতামত দেয়া ইত্যাদি কিছু গুরুত্বপূর্ণ কাজের ভার শুধু রক্ষণাবেক্ষণকারীদের আওতাধীন। কোড বেইজ বা ভিত্তি সম্পর্কে জানা একটি ভালো প্রক্রিয়া। এখানে আপনি সব ওপেন বা উন্মুক্ত পুল রিকোয়েস্টের একটি তালিকা দেখতে পাবেনঃ
উপাদান |
পুল রিকোয়েস্ট |
---|---|
qiskit-টেরা |
|
qiskit-এয়ার |
|
qiskit-ইগ্নিস |
|
ডকুমেন্টেশন (বিবরণী) অথবা Qiskit মেটা প্যাকেজ |
মেসেজ (বার্তা) কমিট করা¶
কমিট মেসেজে (বার্তা) সংশোধন বা পরিবর্তনের বর্ণনা দেয়াটা কোডের মূল পরিবর্তনের মতই গুরুত্বপূর্ণ। কমিট বার্তাটি কেবল কোড রিভিউ (পর্যালোচনা) এর নয়, গিট লগের পরিবর্তনের ইতিবৃত্তও তুলে ধরে। কমিট মেসেজের (বার্তা) সবিশেষ বর্ণনা যেমন কোড রিভিউকে (পর্যালোচনা) সহজতর করে, তেমনই পরে যখন কেউ পরিবর্তনগুলি লক্ষ্য করবে তখন স্পষ্টতই এর প্রয়োজনীয়তা বা উদ্দেশ্য সহজে বুঝতে পারবে। কমিট মেসেজ (বার্তা) লেখার সময় নিচের বিষয়গুলি মনে রাখা জরুরিঃ
- রিভিউয়ার (পর্যালোচক) জানেন না প্রকৃত সমস্যাটি কী ছিলো।
একটি ইস্যু (সমস্যা) পড়ার সময়, সামনে এবং পিছনে বেশ কয়েকটি মন্তব্যের পরে, এটি প্রায়শই পরিষ্কার হয় যে মূল কারণ সমস্যাটি কী। কমিট মেসেজেটিতে (বার্তা) মূল সমস্যাটি কী তার একটি স্পষ্ট বিবৃতি থাকা উচিত। সমস্যাটি কীভাবে চিহ্নিত করা হয়েছিল তার ঐতিহাসিক পটভূমির জন্য ত্রুটি (বাগ) শুধুমাত্র ব্যবহৃত হয়। ত্রুটি (বাগ) টিকেট পড়ার প্রয়োজন ছাড়াই কমিট মেসেজ (বার্তা) থেকে যথার্থতার জন্য প্রস্তাবিত প্যাচ পর্যালোচনা করা সম্ভব।
- কোডের পরিবর্তন বা সংশোধন কেবল স্বতঃসিদ্ধ (সেল্ফ এভিডেন্ট) হওয়া যাবেনা।
কোনো কোড একজনের জন্য স্বতঃসিদ্ধ হলেও অন্যজনের নিকট তা স্পষ্ট নাও হতে পারে। সবসময় মূল সমস্যা, সেটি কীভাবে সংশোধন করা হয়েছে এসবের বিবরণী (ডকুমেন্টেশন) লিপিবদ্ধ করতে হবে, এক্ষেত্রে সাধারণ কিছু বানান ভুল বা স্পেসজনিত কমিট ব্যতিক্রম হতে পারে।
- পরিবর্তনের কারণ বিশদ বর্ণনা করুন।
একটি সাধারণ ভুল হলো, শুধু কোড কীভাবে করা হয়েছে তার বিবরণ লেখা এবং কেন ডেভেলাপার ওই পদ্ধতিটি বেছে নিলেন সে সম্পর্কে বর্ণনা না দেয়া। অবশ্যই আপনি কোডের সম্পূর্ণ গঠন এবং বড় কোনো পরিবর্তন সম্পর্কে ভালোভাবে বর্ণনা করবেন, কিন্তু পরিবর্তনের পেছনে উদ্দেশ্য/প্রয়োজন ব্যাখ্যা করাটাও সমান জরুরি।
- কমিট মেসেজটি (বার্তা) ভালোভাবে পড়ে দেখতে হবে সেটি পুনর্গঠন জরুরি কিনা।
কখনো বড় কোনো কমিট মেসেজ (বার্তা) বর্ণনা করার সময় সেটিকে দুইটি বা আরো ভিন্ন অংশে বিভক্ত করার প্রয়োজন হতে পারে। এক্ষেত্রে সেটিকে বিভক্ত করে আলাদা আলাদা পুল রিকোয়েস্ট দিতে হবে।
- রিভিউ (পর্যালোচনা) করা হবে কিনা তা নির্ধারিত হবে পর্যাপ্ত তথ্য দেয়া হয়েছে কিনা তার উপর ভিত্তি করে।
গিটহাব যখন নতুন পুল রিকোয়েস্ট সাবমিশনের ইমেইল বার্তা পাঠায়, সাধারণত সেখানে কমিট বার্তা এবং পরিবর্তিত ফাইলগুলির তালিকা সম্বলিত তথ্য সংযুক্ত থাকে। প্রচুর পরিমাণ প্যাচ (patches) হবার কারণে, কমিট বার্তাটি যাতে প্রয়োজনীয় সব তথ্য সম্বলিত হয়, তাতে সম্ভাব্য রিভিউয়ার (পর্যালোচকদের) তাঁদের সুবিধামত সমস্যাটি খুঁজে পেতে সুবিধা হবে।
- কমিটের প্রথম বাক্যটি সবচেয়ে গুরুত্বপূর্ণ।
গিট কমিট মেসেজের (বার্তা) প্রথম বাক্যটি বিশেষ তাৎপর্য বহন করে। এটি পুল রিকোয়েস্টের শিরোনাম, ইমেইল বার্তার বিষয়বস্তু, গিটের নির্দেশনা বার্তা, গিটকে দর্শকদের জন্য মন্তব্য, মার্জ (সংযোজনের) বার্তা হিসেবে এবং আরো নানা জায়গায় প্রদর্শিত হয়। একই সাথে কোডের পরিবর্তনের বিশদ বর্ণনা কমিটের সারাংশে ব্যাখ্যা করতে হবে।
অধিকন্তু, পুল রিকোয়েস্টটি যদি চেঞ্জলগের অন্তর্ভুক্ত হয়, তাহলে এর প্রথম বাক্যটি চেঞ্জলগের এন্ট্রি হিসেবে লিপিবদ্ধ হয়। স্পষ্ট এবং সংক্ষিপ্ত আকারে সারাংশ (সামারি) লেখা অত্যন্ত জরুরি।
- বর্তমান কোডের সীমাবদ্ধতাগুলি বর্ণনা করতে হবে।
যে কোডটি পরিবর্তন করা হচ্ছে, যদি তা ভবিষ্যতে আরো পরিবর্তনের সুযোগ থাকে অথবা কোনো জানা সীমাবদ্ধতা থেকে থাকে তবে সেগুলো কমিট মেসেজে (বার্তা) উল্লেখ করতে হবে। এর মাধ্যমে রিভিউয়ার (পর্যালোচক) বুঝবেন যে, বড় পরিসরে কোডের পরিবর্তনটি বিবেচনা করা হয়েছে এবং দীর্ঘমেয়াদী পরিকল্পনা ও স্বল্পমেয়াদী লক্ষ্য পূরণের ক্ষেত্রে কী কী ব্যাপার খেয়াল করতে হবে।
- ইস্যুতে রেফারেন্স উল্লেখ করুন।
কমিটের সংশোধনীগুলো যদি কোনো ইস্যু সম্পর্কিত হয় তবে সেটি কমিট মেসেজে (বার্তা) নির্দেশ করা হয়েছে কিনা তা নিশ্চিত করতে হবে। নিচের সিনট্যাক্স ব্যবহার করতে হবেঃ
Fixes #1234
যদি এটি সমস্যার সমাধান করে (পুল রিকোয়েস্ট মার্জ (সংযোজন) এর সময় গিটহাব ইস্যুটি বন্ধ করবে)।
তাহলে মূল নিয়মটি হলোঃ
কমিট মেসেজ বা বার্তাটিতে প্যাচ বা সমাধানটি বোঝার এবং রিভিউ (পর্যালোচনা) করার জন্য সমস্ত তথ্য থাকতে হবে। স্বল্পভাষীতা সবসময় উত্তম নয়।
কোডের বিবরণী তৈরি বা ডকুমেন্টেশনকরণ¶
যদি আপনি কোনো উপাদানে পরিবর্তন আনেন, তবে এর সম্পর্কিত docstrings এবং সংশ্লিষ্ট রিপোজিটরির docs/apidocs
এর অধীনস্থ বিবরণীটি (ডকুমেন্টেশন) যাতে হালনাগাদ করা থাকে তা নিশ্চিত করুন। স্থানীয়ভাবে নির্দিষ্ট উপাদানের বিবরণীটি (ডকুমেন্টেশন) গঠন করতে tox -edocs
কার্যকর বা রান করুন এবং আউটপুটটি docs/_build/html
এ সংরক্ষণ করুন। অধিকন্তু, অ্যাযিউর পাইপলাইনের Docs CI এটি কার্যকর করবে এবং আউটপুটের একটি যিপ ফাইল সংরক্ষণ করবে যেটি আপনি পরবর্তীতে ডাউনলোড এবং স্থানীয়ভাবে দেখতে পারবেন।
combined documentation যা কিনা Qiskit/qiskit repo রক্ষণাবেক্ষণ করে, এর সম্পর্কিত কোনো সমস্যার জন্য আপনি একটি `documentation issue<https://github.com/Qiskit/qiskit/issues/new/choose>`__ খুলতে পারেন, যদি আপনি বিবরণীতে ভুল দেখেন, নতুন কোনো ফিচারের বিবরণী তৈরি করতে চান অথবা বর্তমান বিবরণীতে নতুন কোনো তথ্য সংযোজন করতে চান।
ভাল প্রথম অবদান (Good First Contributions)¶
আপনি যদি Qiskit এ অবদান রাখতে চান, তবে কোথা থেকে শুরু করবেন তা নিশ্চিত নন, সেক্ষেত্রে good first issue
লেবেল করা প্রকল্পের ইস্যুগুলি নতুন পাঠকদের জন্যে উপযুক্ত। এই ইস্যুগুলি এমনভাবে পর্যালোচনা এবং ট্যাগ করা হয়েছে যাতে নতুন সদস্যরা সেগুলিতে কাজ করতে পারে। অন্য কথায়, আপনাকে ইস্যুটি ঠিক করার জন্যে Qiskit নিখুঁত ভাবে জানতে হবে না।
ডেপ্রিকেশন (অপসারণ) নীতি¶
Qiskit ব্যবহারকারীদের জানা প্রয়োজন যে, তারা যে ফিচার বা এপিআই (API) ব্যবহার করছেন, সেটি এই সফটওয়্যার দ্বারা সবসময় নিয়ন্ত্রিত থাকবে। কখন বা কোন শর্তের অধীনে প্রকল্পটি (প্রজেক্ট) একটি ফিচার বা এপিআই (API) বাদ দিতে পারবে (অথবা পরিবর্তন করতে পারবে) সে সম্পর্কে ধারণা রাখা ব্যবহারকারীর জন্য গুরুত্বপূর্ণ। Qiskit এর ফিচার এবং এপিআই (API) অপসারণ নীতি নিচে দেয়া হলোঃ
১। ফিচার, এপিআই (API) অথবা কনফিগারেশনের অপশনগুলো অপসারণযোগ্য হিসেবে কোডে চিহ্নিত থাকবে। যথাযথ DeprecationWarning
শ্রেনির সতর্কতাবার্তা পৌঁছে যাবে ব্যবহারকারীর কাছে। অপসারণকৃত কোড সরিয়ে রাখা হবে এবং সেটির ন্যূনতম রক্ষণাবেক্ষণ করা হবে যাতে স্বাভাবিক কাজ চালানো যায়।
২। ফিচারের বর্তমান ব্যবহারকারীদের জন্য একটি স্থানান্তরকরণের উপায় বিবরণীতে দেয়া থাকবে। এটি ডেপ্রিকেশনের রিলিজ নোট এবং ডেপ্রিকেশন বা অপসারণের শেষে ফিচার বাদ দেয়ার রিলিজ নোটে উল্লেখ করা থাকবে। সম্ভব হলে, একটি সতর্কতামূলক বার্তাও স্থানান্তরকরণের উপায়ে দেয়া হবে। এটি হতে পারে এরকম "এই ফিচারটি ব্যবহার করা বন্ধ করুন"। কিন্তু এসব ক্ষেত্রে ফিচারটি বহুল ব্যবহৃত কিনা বা ব্যবহারকারীদের জন্য কতটা গুরুত্বপূর্ণ সেটি বিবেচনা করে এর বিলুপ্তির তারিখ নির্ধারণ করতে হয়।
2a. The migration path must have existed in a least a prior release before the
new feature can be deprecated. For example, if you have a function foo()
which is going to be replaced with bar()
you can't deprecate the foo()
function in the same release that introduces bar()
. The bar()
function
needs to be available in a release prior to the deprecation of foo()
. This
is necessary to enable downstream consumers of Qiskit that maintain their
own libraries to write code that works with > 1 release at a time, which is
important for the entire ecosystem. If you would like to indicate that
a deprecation will be coming in a future release you can use the
PendingDeprecationWarning
warning to signal this. But, the deprecation
period only begins after a DeprecationWarning
is being emitted.
3. An obsolescence date for the feature will be set. The feature must remain intact and working (although with the proper warning being emitted) in all releases pushed until after that obsolescence date. At the very minimum, the feature (or API, or configuration option) should be marked as deprecated (and continue to be supported) for at least three months of linear time from the release date of the first release to include the deprecation warning. For example, if a feature were deprecated in the 0.9.0 release of Terra, which was released on August 22, 2019, then that feature should still appear in all releases until at least November 22, 2019.
উল্লেখ্য যে, এই বিরতির সময়টি অল্প। নির্দিষ্ট ফিচারের জন্য, অপসারণকৃত ফিচারটিকে এর দ্বিগুণ সময় বহাল রাখা প্রয়োজন। স্টেবল ব্রাঞ্চ পলিসি বা স্থিতিশীল শাখা নীতি অনুযায়ী, যদিও ব্যাকপোর্টিংয়ের জন্য উপযুক্ত নয়, ডেপ্রিকেশন (অপসারণ) বাদ দেয়া কেবল গৌণ সংস্করণের সময় ঘটতে পারে।
3a. A deprecated feature can not be removed unless it is deprecated in more than one release even if the minimum deprecation period has elapsed. For example, if a feature is deprecated in 0.20.0 which is released on January 20, 2022 and the next minor version release 0.21.0 is released on June 16, 2022 the deprecated feature can't be removed until the 0.22.0 release, even though 0.21.0 was more than three months after the 0.20.0 release. This is important because the point of the deprecation warnings are to inform users that a potentially breaking API change is coming and to give them a chance to adapt their code. However, many users skip versions (especially if there are a large numbers of changes in each release) and don't upgrade to every release, so might miss the warning if it's only present for a single minor version release.
ডেপ্রিকেশন (অপসারণ) সতর্কবার্তা¶
একটি ডেপ্রিকেশন বার্তা সৃষ্টি করার সঠিক উপায় হল warn
ব্যবহার করা, যেটি পাইথন স্ট্যান্ডার্ড লাইব্রেরির warnings module উপস্থিত। সতর্কবার্তাটির শ্রেণী DeprecationWarning
হতে হবে। যেমন:
import warnings
def foo(input):
warnings.warn('The qiskit.foo() function is deprecated as of 0.9.0, and '
'will be removed no earlier than 3 months after that '
'release date. You should use the qiskit.bar() function '
'instead.', DeprecationWarning, stacklevel=2)
stack_level
কীওয়ার্ড আর্গুমেন্ট ( kwarg) warn() এর ডাক, সেইটি এইখানে উল্লেখ্য। এই আর্গুমেন্টটি নির্দিষ্ট করে কোন স্তরের কল স্ট্যাক ব্যাবহার হবে পংক্তিতে সতর্কবার্তা শুরু করার জন্যে। সাধারণত stack_level
২ এ স্থির করা থাকে, কারণ এটি সেই পংক্তিটিকে দেখাবে যেটির প্রসঙ্গে সতর্কবার্তাটি তৈরী হয়েছিল। আগের উদাহরণটিতে এটি foo()
কে ডাকতো। আপনি যদি এটি স্থির না করেন তাহলে সতর্কবার্তাটি সেই পংক্তিটি দেখাবে foo() ফাঙ্কশনে যার জন্যে হল, যেইটা ব্যবহারকারীদের ডিপ্রেকেটেড কলের উৎস খুঁজে পাওয়ার জন্যে। একদমই উপকারী নয় যদিও এর মান নিয়ন্ত্রণীও, কিন্তু সেটি নির্ভর করছে কল স্টেকের এবং কোথা থেকে warn()
কল হচ্ছে তার ওপর।. উদাহরণ, যদি একটি সতর্কবার্তা সৃষ্টি হয় একটি প্রাইভেট মেথডের দ্বারা যার একটি কলার, stack_level=3
তাহলে সেটা হয়তো উপযুক্ত।
স্থিতিশীল (স্টেবল) শাখা নীতি¶
স্থিতিশীল শাখাটিকে মাস্টার রিলিজে সংশোধিত গুরুত্বপূর্ণ কিছু ভুল এবং নিরাপত্তা ইস্যুর নিরাপদ উৎস হিসেবে গণ্য করা হয়। স্থিতিশীল শাখার পুল রিকোয়েস্ট বিবেচনা করার সময় আমাদের অবশ্যই মান সহ কোনো প্যাচের ঝুঁকি নির্ণয় করতে হবে যা সে শাখা ব্যবহারকারীদের সরবরাহ করবে। শুধুমাত্র সীমিত সংখ্যক পরিবর্তন শাখায় অন্তর্ভুক্ত করার উপযুক্ত। কোনো বড় ঝুঁকিপূর্ণ প্যাচ হয়তো ছোটোখাটো সংশোধনীর ক্ষেত্রে কাজ করতে পারে। পরিবর্তন করার সময় কিছু জিনিস লক্ষ্য রাখতে হবেঃ
রিগ্রেশনের (প্রত্যাবৃত্তি) ঝুঁকিঃ সামান্যতম পরিবর্তনও অন্য কোনো অংশে ব্যাঘাত সৃষ্টি করতে পারে এবং আমরা এ ধরনের ঝুঁকিগুলো পরিহার করতে চাই।
ব্যবহারকারীর সুবিধাঃ খেয়াল রাখতে হবে আমরা যেটা সংশোধন করছি সেটা আসলেই ব্যবহারকারীর নজরে আসবে কিনা বা যদিও আসেও সেটা কতটা গুরুত্বপূর্ণ।
সংশোধনী কতটা স্বনির্ভরঃ অর্থাৎ এটা কোনো গুরুত্বপূর্ণ ইস্যু সংশোধন করা সত্ত্বেও যদি অনেক বেশি কোড রিফ্যাক্টর বা পরিবর্তন করতে হয়, তাহলে এর চেয়ে কম ঝুকিপূর্ণ কোনো সংশোধনীর উপায় ভেবে দেখা প্রয়োজন।
সংশোধনী ইতিমধ্যে প্রধান (মাস্টার) শাখায় আছেঃ সংশোধনীটির ব্যাকপোর্ট প্রধান শাখায় ইতিমধ্যে সংযোজিত হতে হবে যদিনা প্রধান শাখায় তা একেবারেই অকার্যকর হয়।
Backporting পদ্ধতি:¶
যখন একটি পাচকে মাস্টার থেকে স্টেবলে বাকপোর্ট করবেন, সেখানে আমরা মাস্টারের পরিবর্তনের একটা রেফারেন্স রাখব । যখন আপনি একটি নতুন ব্রাঞ্চ তৈরী করবেন তখন স্ট্যাবল PR এর জন্যে ন্মিম্নলিখিত কোড ব্যবহার করুন:
$ git cherry-pick -x $master_commit_id
যদিও, এটি শুধুমাত্র মাস্টার এর ছোট স্বনির্ভর (self-contained) প্যাচ এ কাজ করে। যদি আপনার মাস্টার থেকে একটি বড় কমিটের (উদাহরণস্বরূপ একটি সংকোচাত PR) উপসেট বাকপোর্ট করা প্রয়োজন হয়, তা নিজে হাতে করে নিন। এক্ষেত্রে নিম্নলিখিত কোডটি যোগ করুন:
Backported from: #master pr number
so that we can track the source of the change subset, even if a strict cherry-pick doesn't make sense.
যেই প্যাচটি আপনি প্রস্তাব করলেন সেটি বাছাই না হলে, আপনি নিজেই সমস্যা সমাধান করতে নিজেকে সাহায্য করতে পারেন এবং ফলাফলের প্যাচটি প্রস্তাব করতে পারেন। দয়াকরে সমস্যার লাইনগুলো কমিট মেসেজে রাখুন যাতে স্ট্যাবল প্যাচটি পর্যালোচনা করতে সাহায্য হয়।
Backport লেবেল¶
stable backport potential
ট্যাগ সম্বলিত বাগ অথবা পুল রিকোয়েস্ট হল সেইধরনের বাগ যেগুলো স্টেবল রিলিজেও থাকে, সেগুলো মাস্টার (প্রধান) শাখায় সংশোধনের পর ব্যাকপোর্টের জন্য উপযুক্ত হয়। ব্যাকপোর্ট করা হয়ে গেলে ট্যাগ অপসারণ করা উচিত।
স্টেবল শাখায় পুল রিকোয়েস্টের শিরোনামে [Stable]
যুক্ত করবেন, যাতে বোঝা যায় যে টারগেট শাখাকে স্টেবল হিসেবে চিহ্নিত করা ভুল হয়নি। এবং ব্যাকপোর্ট করা পুল রিকোয়েস্টের নম্বর মাস্টার (প্রধান) শাখায় রেফারেন্স হিসেবে দিতে হবে।
ডকুমেন্টেশনে কন্ট্রিবিউট করা¶
Qiskit documentation is shaped by the docs as code philosophy, primarily drawn from Qiskit code comments in the style of API documentation.
এই ডকুমেন্টেশনটি মাস্টার ব্রাঞ্চ এর Qiskit/qiskit/docs এর সঙ্গে Sphinx ব্যবহার করে তৈরী করা হয়েছে। এর বেশিরভাগ API Reference এর মধ্যে, সূচিপত্র এর কোড কমেন্ট রিপোসিটোরি থেকে নেয়া হয়েছে।
ডকুমেন্টেশন কাঠামো¶
Qiskit এর বিবরণী (ডকুমেন্টেশন) গঠন করার সময় যতটা সম্ভব প্রকৃত বিবরনীগুলো ডকস্ট্রিং এ রাখা হয়েছে। এর ফলে ডেভেলাপমেন্টের সময় সংযোজন ও সংশোধন সহজতর হয়েছে কারণ বেশিরভাগ বিবরণী কোডের সাথে অবস্থান করে। টেরায় সাধারণত তিন ধাপে বিবরণী (ডকুমেন্টেশন) গঠিতঃ
docs/apidocs
এর মধ্যে.rst
ফাইলসমূহThese files are used to tell Sphinx which modules to include in the rendered documentation. This contains two pieces of information: an internal reference or cross reference to the module, which can be used for internal links inside the documentation, and an automodule directive used to parse the module docstrings from a specified import path. For example, the
dagcircuit.rst
file contains:.. _qiskit-dagcircuit: .. automodule:: qiskit.dagcircuit :no-members: :no-inherited-members: :no-special-members:
qiskit.rst
এর বাইরে একমাত্র.rst
ফাইলটি সূচিপত্র নির্দেশ করে। যদি আপনি কোনো মডিউলের বিবরণী তৈরির সময় একটি নতুন.rst
ফাইল তৈরি করেন, তাহলে সেটি ওই ফাইলের toctree তে যোগ করবেন।- মডিউল-লেভেল ডকস্ট্রিং
এই ডকস্ট্রিংটি আরএসটি (rst) ফাইলের
automodule
এর মডিউল লেভেলে আছে। যদি মডিউলটি কোনো ডিরেক্টরি/নেমস্পেসে নির্দিষ্ট করা থাকে তবে ডকস্ট্রিংটি ওই ডিরেক্টরির__init__.py
ফাইলে থাকবে। এই মডিউল-লেভেল ডকস্ট্রিং এ মডিউলের বিবরণী (ডকুমেন্টেশন) সম্পর্কিত বিশদ বিবরণ থাকে। মডিউলের সব পাবলিক এপিআই (API) এর ক্লাস এবং ফাংশনগুলোর বিবরণ এই ডকস্ট্রিং এ থাকে। এটা সাধারণত autosummary directive (অথবা যদি সাধারণ মডিউল হয়, যেমনqiskit.execute
এর ক্ষেত্রে সরাসরি autodoc directives ) এ করা হয়ে থাকে। অটোসামারি ডিরেক্টিভে বিভিন্ন Python (পাইথন) উপাদান যেমন ক্লাস, ফাংশন ইত্যাদির একটি তালিকা (লিস্ট) থাকে যাতে ম্যানুয়ালি প্রত্যেকটি আলাদাভাবে লিখতে না হয়। কোনো মডিউল কী কাজ করে সে সংক্রান্ত বিবরণ মডিউল-লেভেল ডকস্ট্রিং এ থাকে। এটা সাধারণত পাবলিক এপিআই (API) এর বিভিন্ন অংশ একত্রীত করে কয়েকটি উপ শাখায় বিভক্ত করে করা হয়।উদাহরণস্বরূপ, ড্যাগসার্কিট (dagcircuit) মডিউলের মত,
qiskit/dagcircuit/__init__.py
মডিউলের বিষয়বস্তুর ডকস্ট্রিং হবেঃ""" ======================================= DAG Circuits (:mod:`qiskit.dagcircuit`) ======================================= .. currentmodule:: qiskit.dagcircuit DAG Circuits ============ .. autosummary:: :toctree: ../stubs/ DAGCircuit DAGNode Exceptions ========== .. autosummary:: :toctree: ../stubs/ DAGCircuitError """
নোট
এটি শুধুমাত্র একটি উদাহরণ এবং ড্যাগসার্কিট (dagcircuit) মডিউলের আসল মডিউল ডকস্ট্রিংটি এর থেকে ভিন্ন হতে পারে।
- মডিউল ডকস্ট্রিং এ তালিকাভুক্ত উপাদানগুলির প্রকৃত ডকস্ট্রিং
প্রয়োজনানুসারে যথাযথভাবে সকল পাবলিক ইন্টারফেসগুলির বিবরণী তৈরি করতে হবে। Google Python Style Docstrings ব্যবহৃত হয় ডকস্ট্রিং তৈরি করার জন্য। napoleon sphinx extension দ্বারা এটির প্রকারভেদ বা বিশ্লেষণ করা হয়। napoleon documentation তে ডকস্ট্রিংগুলো কীভাবে বিন্যাস করা উচিত তার একটি ভালো উদাহরণ দেয়া আছে।
নোট
আপনি যে কোনও স্পিঙ্কস নির্দেশনা বা আর এস টি ফর্ম্যাটিংটি ডকাস্ট্রিংয়ে এটি বোধগম্য হিসাবে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ব্যবহৃত একটি সাধারণ এক্সটেনশন হ'ল
jupyter-execute
নির্দেশিকা, যা জুপিটারে একটি কোড ব্লক নির্বাহ করতে এবং কোড এবং আউটপুট উভয়ই প্রদর্শন করতে ব্যবহৃত হয়। এটি ভিজ্যুয়ালাইজেশনের জন্য বিশেষভাবে কার্যকর।.
বিবরণী (ডকুমেন্টেশন) সংযোজন¶
https://qiskit.org/documentation/ এ ধারিত (হোস্টেড) বিবরণীতে (ডকুমেন্টেশন) সমগ্র কিস্কিট (Qiskit) প্রকল্পটি অন্তর্ভুক্ত আছে, টেরা যার শুধুমাত্র একটি উপাদান। যেমন, ধারিত (হোস্টেড) সংস্করণের জন্য বিবরণীর (ডকুমেন্টেশন) গঠন কিস্কিট (Qiskit) মেটা-প্যাকেজ রিপোজিটরি https://github.com/Qiskit/qiskit দ্বারা গঠিত হয়। কমিটগুলি সেই রিপোতে সংযোজন (মার্জ) করা হলে, স্ফিংক্স (Sphinx) গঠনগুলির (বিল্ড) আউটপুট qiskit.org ওয়েবসাইটে আপলোড হয়। সেই সময়ে মেটা-প্যাকেজ দ্বারা ইনস্টল করা কিস্কিট (Qiskit) উপাদানগুলির সংস্করণ থেকে বিবরণীতে (ডকুমেন্টেশন) আনতে এই স্ফিংক্স (Sphinx) গঠনগুলির (বিল্ড) সাজানো (কনফিগার) হয়। উদাহরণ স্বরূপ, যদি মেটা-প্যাকেজ সংস্করণটি বর্তমানে ০.১৩.০ হয়, তাহলে এটি টেরার ০.১০.০ রিলিজ বা প্রকাশ থেকে বিবরণী (ডকুমেন্টেশন) কপি বা প্রতিলিপি করবে। যখন মেটা-প্যাকেজের রিকোয়ারমেন্টগুলি অকার্যকর হয়, তখন এটি নতুন সংস্করণ থেকে বিবরণীটি (ডকুমেন্টেশন) সংযোজন শুরু করবে। এর মানে হল যে ভুল এপিআই (API) বিবরণীর জন্য সংশোধনগুলি একটি নতুন রিলিজে বা প্রকাশে অন্তর্ভুক্ত করা প্রয়োজন। বিবরণী (ডকুমেন্টেশন) সংশোধনগুলি স্থিতিশীল (স্টেবল) শাখা নীতি অনুযায়ী একটি স্থিতিশীল (স্টেবল) প্যাচ রিলিজের বা প্রকাশের জন্য বৈধ ব্যাকপোর্ট (দেখুন স্থিতিশীল (স্টেবল) শাখা নীতি)।
সব উপাদানগুলোর docs/apidocs/
গঠনের সময় মেটা প্যাকেজ রিপোজিটরিতে অন্য সব উপাদানের সাথে বারবার প্রতিলিপি তৈরি হয়। অর্থাৎ docs/apidocs এর রুট বা মূলে যে সংস্করণটি আছে তা https://qiskit.org/documentation/apidoc/ এর রুট বা মূলে সংযোজিত হবে।
ডকুমেন্টেশন অনুবাদ¶
Qiskit ডকুমেন্টেশন অনুবাদ করা হয় (স্থানীয়করণ করা হয়) ক্রাউডিন ব্যবহার করে, একটি সফটওয়্যার এবং ওয়েব লোকালাইজেশন প্ল্যাটফর্ম যা সংস্থাগুলিকে অনুবাদ প্রকল্পগুলিকে সমন্বয় করতে এবং উপকরণগুলি অনুবাদ করতে সম্প্রদায়ের সাথে সহযোগিতা করতে দেয়। ক্রাউডিন আমাদের অনুবাদকদের সম্প্রদায়কে একটি বাক্য অনুবাদ করে অন্য, অনুরূপ বাক্য অনুবাদ করার জন্য বিনিয়োগকৃত কাজের স্বয়ংক্রিয়ভাবে পুনঃব্যবহারের মাধ্যমে তাদের প্রভাব বৃদ্ধি করতে দেয়। ক্রাউডিন অনুবাদকে মূল উপাদানে অনেক ধরনের পরিবর্তনের জন্য স্থিতিস্থাপক করে তোলে, যেমন বাক্যগুলি ঘুরে বেড়ানো, এমনকি ফাইল জুড়েও।
Qiksit স্থানীয়করণের অনুরোধগুলি হ্যান্ডেল করা হয় `Qiskit অনুবাদ <https://github.com/Qiskit/qiskit-translations>`__রিপোসিটরিতে। Qiksit স্থানীয়করণে অবদান করার জন্যে এই পদ্দক্ষেপ গুলো করুন:
নিজের নাম (অথবা আই ডি) LOCALIZATION_CONTRIBUTORS নথিভুক্ত করুন।.
একটি পুল রিকোয়েস্ট (পি আর) তৈরী করুন নিজের পরিবর্তন মার্জ করার জন্যে। নিশ্চিত করুন যে পুল রেকুএস্টটি টেম্পলেট অনুসারে তৈরী।
নোট
প্রত্যেকটি অবদানকারীদের একটি পি আর তৈরী করতে হবে এবং সি এল এ স্বাক্ষর করতে হবে.
PR সংক্ষিপ্তসারে আপনি যে ভাষায় অবদান রাখতে চান দয়া করে উল্লেখ করুন।
যদি আপনার একটা ভাষার ইসু খোলা থাকে add the issue link to the PR.
আপনাকে Qiskit কন্ট্রিবিউটর্স (অবদানকারী) License এগ্রিমেন্ট (চুক্তি) স্বাক্ষর করার জন্য বলা হবে; অনুগ্রহপূর্বক সেটি করুন।
নতুন ভাষা সংযুক্তিকরণের সময় কোনো আঞ্চলিক প্রকল্পের পরিচালকের থেকে অফিসিয়াল সমর্থনের জন্য, ভাষাপ্রতি অন্তত তিনজন অবদানকারী প্রয়োজন।
অবদানকারীদের গোষ্ঠীর মধ্যে, স্থানীয়করণ প্রকল্পের প্রশাসকদের সাথে যোগাযোগ হিসাবে কাজ করার জন্য একটি অনুবাদ নেতৃত্বকে চিহ্নিত করতে হবে। নেতা অবশ্যোযই যোগাযোগ করবে: Yuri Kobayashi (yurik@jp.ibm.com) কে, ইমেইল এর সাহায্যে।
Qiskit-Docs ক্রাউডিন প্রকল্পে বেছে নিন কোন ভাষায় আপনি অবদান করবেন।
নোট
Qiskit in my language is Qiskit ব্লগপোস্ট অনুযায়ী, অনুবাদকৃত ভাষাগুলোর জন্য যাতে পর্যাপ্ত পরিমাণ অনুবাদক, সংশোধক এবং অনুবাদ পরিচালক থাকেন তা নিশ্চিত করতে হবে। আপনি যদি অনুবাদ পরিচালনা করতে চান বা কোনো নতুন অনুবাদ প্রকল্পে যুক্ত হতে চান তবে Qiskit টিমের সাথে আলোচনা ও নতুন সদস্য নিয়োগ করার জন্য একটি GitHub issue খুলতে পারেন।
জয়েন বোতামটি টিপুন এবং যেখানে আপনি কেন ক্রাউডিন প্রকল্পে অংশগ্রহণ করতে চাইছেন জানতে চাওয়ার ডায়লগ বক্সটি আসবে তার ভিতরে আপনার PR এর ইউ আর এল (URL) টি পেস্ট করেন।
ক্রাউডিন প্রকল্পের প্রশাসকরা আপনার অনুরোধটি পর্যালোচনা করবে এবং যত তাড়াতাড়ি সম্ভব আপনাকে অ্যাক্সেস দেবে।
সোর্স বা উৎস থেকে গঠন করা¶
আপনি আপনার স্থানীয় Qiskit/qiskit ক্লোন রিপোজিটরিটি থেকে এভাবে একটি স্থানীয় বিবরণী (ডকুমেন্টেশন) তৈরি করতে পারেনঃ
Qiskit রিপোজিটরিটির ক্লোন বা প্রতিলিপি করুন।
git clone https://github.com/Qiskit/qiskit.git
রিপোজিটিরিটির ক্লোন বা প্রতিলিপি করায়
qiskit
নামে একটি স্থানীয় ডিরেক্টরি তৈরি হবে।cd qiskit
Qiskit/qiskit এর স্থানীয় ক্লোন বা প্রতিলিপিতে নেভিগেশন এবং নিচের নির্দেশনাগুলি একটি টার্মিনাল উইন্ডোতে রান করার মাধ্যমে বিবরণীটি (ডকুমেন্টেশন) তৈরি করুন।
tox -edocs
যদি আপনি ইতিমধ্যে tox নির্দেশনাটি ইন্সটল না করে থাকেন, তবে প্রথমে নিচের নির্দেশনাটি রান করুনঃ
pip install tox
যেহেতু আপনি স্থানীয় RST ফাইলগুলি পরিবর্তন করছেন, আপনার HTML ফাইলগুলি /doc/ এ নেভিগেশনের পর নিচের নির্দেশনাগুলো একটি টার্মিনাল উইন্ডোতে রান করে হাল নাগাদ করতে পারবেনঃ
tox -edocs
এর ফলে আপনার স্থানীয় বিবরণীর (ডকুমেন্টেশন) একটি গোছানো HTML সংস্করণ তৈরি হবে /docs/_build/html/ সাবডিরেক্টরিতে।
উৎস থেকে স্থাপন¶
উত্স থেকে উপাদানগুলি ইনস্টল করলে আপনি Qiskit সর্বাধিক আপডেট হওয়া সংস্করণটি আপনি ব্যবহার করতে পারবেন Python Package Index (PyPI) রিপোসিটোরি থেকে ইনস্টল করার তুলনায়। এটি আপনাকে Qiskit কোডের সর্বশেষ সংস্করণটি আরও নিখুঁত ভাবে পরিদর্শন করার এবং প্রসারিত করার দক্ষতা দেবে।.
উৎস থেকে উপাদানগুলো ইন্সটল করার সময় stable
সংস্করণের (যার কিনা pip
প্যাকেজের সমতুল্য কোডবেজ আছে) বিপরীতে ডিফল্ট হিসেবে development
সংস্করণ (master
গিট শাখার) ব্যবহৃত হয়। development
সংস্করণে নতুন ফিচার এবং পরিবর্তন অন্তর্ভুক্ত থাকায় সাধারণত অন্য সব উপাদানের জন্যও development
সংস্করণ ব্যবহৃত হয়।
নোট
টেরা এবং এয়ার প্যাকেজ উভয়েরই উত্স থেকে ইনস্টল করার আগে কম্পাইলার প্রয়োজন। ইগনিস, একোয়া, এবং আই বি এম কোয়ান্টাম প্রোভাইডার ব্যাকএন্ড এর জন্যে কম্পাইলার প্রয়োজন নয়।
যদি pip
এর সংস্করণ উৎসের সংস্করণের চেয়ে পুরোনো হয় তবে উপাদানগুলির নিম্নতর সংস্করণ ইনস্টল করা থেকে বিরত থাকার জন্য উৎস থেকে উপাদানগুলি ইনস্টল করার নিম্নলিখিত ক্রম অনুসরণ করা প্রয়োজন ।
qiskit-ibmq-provider (আপনি যদি আই বি এম কোয়ান্টামযন্ত্র বা অনলাইন সিমুলেটরের সাথে যুক্ত হতে চান)
একসাথে বেশ কয়েকটি উপাদানের সাথে কাজ করতে প্রতিটি উপাদানের জন্য নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন।
নোট
Python এর নেমস্পেস প্যাকেজিংয়ের কারণে প্যাকেজ ইন্সটল (স্থাপন) করার সময় সতর্ক হতে হবে। উৎস থেকে ইন্সটল (স্থাপন) করার সময় qiskit
মেটা প্যাকেজ ব্যবহার করবেন না। এই নির্দেশিকাটি অনুসরণ করুন এবং একটি পৃথক কৃত্রিম কর্মপরিবেশ তৈরি করুন। আপনি যদি ইন্সটল করা বিদ্যমান কোনো প্যাকেজ সংযুক্ত করতে চান তবে একসাথে কাজ করে এমন উপযুক্ত কম্বিনেশনের জন্য https://github.com/pypa/sample-namespace-packages/blob/master/table.md অনুসরণ করুন।
ভার্চুয়াল ডেভেলাপমেন্টের এনভায়রনমেন্ট বা পরিবেশ তৈরি করুন¶
কৃত্রিম কর্মপরিবেশ (এনভায়রনমেন্ট)সমূহ Qiskit বিকাশের জন্য সিস্টেম-ওয়াইড প্যাকেজ থেকে উন্নয়ন পরিবেশকে আলাদা করার জন্য ব্যবহার করা হয়।এই ভাবে, আমরা অজানাভাবে একটি নির্দিষ্ট সিস্টেম যান্ত্রিক বিন্যাস (কনফিগারেশন) উপর নির্ভরশীল হয়ে উঠা এড়াতে পারি। ডেভেলপার বা বিকাশকারীদের জন্য, এটি একাধিক পরিবেশ বজায় রাখা সহজ করে তোলে ( উদাহরণ, প্রতি সমর্থিত পাইথন সংস্করণের জন্য, Qiskit এর পুরোনো সংস্করণগুলির জন্য, ইত্যাদি)।
সমস্ত পাইথন সংস্করণগুলি কিসকিট দ্বারা সর্মথিত এমনকি পূর্ব গঠিত কৃত্রিম কর্মপরিবেশসমূহ মডিউল ও<https://docs.python.org/3/tutorial/venv.html>`__
``venv``নামের একটি নতুন কৃত্রিম কর্মপরিবেশকে তৈরী করার মাধ্যমে শুরু করা যাক। ফলস্বরুপ যে কর্মপরিবেশ (এনভায়রনমেন্ট) একই পাইথন সংস্করণ ব্যবহার করতে পারে যা তাকে তৈরী করেছে এবং ইন্সটল করা বিস্তারিত প্যাকেজসমূহ সিস্টেমে স্বতঃসিদ্ধ নিয়মানুসারে উত্তরাধিকারে আসবে না।নির্দিষ্ট ফোল্ডার তৈরি করা হবে এবং পরিবেশের ইনস্টলেশনের জন্য ব্যবহৃত হবে।এটা যেকোনো জায়গায়ে অবস্থিত করা যাবে। আরো বিস্তারে জানতে, পাইথন ডকুমেন্টেশন দেখুন,`Creation of virtual environments <https://docs.python.org/3/library/venv.html>`__।
python3 -m venv ~/.venvs/qiskit-dev
সক্রিয় কর্মপরিবেশ (এনভায়রনমেন্ট) এতে আপনার সিস্টেমের জন্য উপযুক্ত অ্যাক্টিভেশন স্ক্রিপ্ট ডাকার দ্বারা, যেটা কিনা খুজে পাওয়া যাবে কর্মপরিবেশ (এনভায়রনমেন্ট) খামে ( ফোলডারে), উদাহরণ স্বরূপ, bash/zsh এর জন্যঃ
source ~/.venvs/qiskit-dev/bin/activate
Pip কে উন্নত করুন কর্মপরিবেশ (এনভায়রনমেন্ট) এতে যাতে Qiskit শর্তসমূহ (ডিপেন্ডেন্সি) ইন্সটল হয় পরবর্তী বিভাগগুলিতে আপনার সিস্টেমেতে চিহ্ণিত হয়।
pip install -U pip
কোনডা ব্যবহারকারীদের, একটি নতুন কর্মপরিবেশ (এনভায়রনমেন্ট) তৈরী করা যেতে পারে নিম্নভাবে।
conda create -y -n QiskitDevenv python=3
conda activate QiskitDevenv
উৎস থেকে টেরা স্থাপন করুন¶
Installing from source requires that you have the Rust compiler on your system. To install the Rust compiler the recommended path is to use rustup, which is a cross-platform Rust installer. To use rustup you can go to:
which will provide instructions for how to install rust on your platform. Besides rustup there are other installation methods available too.
Once the Rust compiler is installed, you are ready to install Qiskit Terra.
টেরা রিপোজিটরিটির ক্লোন বা প্রতিলিপি করুন।
git clone https://github.com/Qiskit/qiskit-terra.git
রিপোসিটোরিটিকে ক্লোন করলে
qiskit-terra`
নামক একটি স্থানীয় ফোল্ডার তৈরী হবে।cd qiskit-terra
টেস্ট রান করানোর জন্য বা লিনটিং চেক করার জন্য, ডেভেলপারের রিকোয়ারমেন্টগুলি ইনস্টল করুন।
pip install -r requirements-dev.txt
qiskit-terra
ইনস্টল করুন।pip install .
আপনি যদি এটিকে সম্পাদনযোগ্য মোডে ইনস্টল করতে চান, মানে এই প্রকল্পের কোড পরিবর্তনের জন্য প্রয়োগ করার জন্য পুনরায় ইনস্টল করা প্রয়োজন না, আপনি এটি করতে পারেন:
pip install -e .
Installing in editable mode will build the compiled extensions in debug mode without optimizations. This will affect the runtime performance of the compiled code. If you'd like to use editable mode and build the compiled code in release with optimizations enabled you can run:
python setup.py build_rust --release --inplace
after you run pip and that will rebuild the binary in release mode.
If you are working on Rust code in Qiskit you will need to rebuild the extension
code every time you make a local change. pip install -e .
will only build
the Rust extension when it's called, so any local changes you make to the Rust
code after running pip will not be reflected in the installed package unless
you rebuild the extension. You can leverage the above build_rust
command to
do this (with or without --release
based on whether you want to build in
debug mode or release mode).
You can then run the code examples after installing Terra. You can run an example script with the following command.
python examples/python/using_qiskit_terra_level_0.py
উৎস থেকে এয়ার ইনস্টল করুন¶
এয়ার রিপোজিটরিটির ক্লোন বা প্রতিলিপি করুন।
git clone https://github.com/Qiskit/qiskit-aer
বিল্ড করার শর্তগুলো (রিকোয়ারমেন্ট) ইন্সটল করুন।
pip install cmake scikit-build
পরের ধাপগুলো নির্ভর করে আপনি কোন অপারেটিং সিস্টেম ব্যবহার করছেন তার ওপর। যেহেতু এয়ার Python ইন্টারফেসযুক্ত সি++ এ কম্পাইল করা ফ্রেমওয়ার্ক, তাই এয়ার বাইনারি ফাইলগুলো গঠন করতে কিছু Python-নয় এমন ডিপেন্ডেন্সি বা শর্ত প্রয়োজন হয় যেগুলো সব অপারেটিং সিস্টেমে সার্বজনীনভাবে ইন্সটল করা যায় না।
কম্পাইলার ব্যবহারের শর্তগুলো (রিকোয়ারমেন্ট) ইন্সটল করুন।
এয়ার বিল্ড বা গঠনের জন্য সি++ কম্পাইলার এবং ডেভেলপমেন্ট হেডার প্রয়োজন।
ফেডোরা বা সমপর্যায়ের লিনাক্স ডিস্ট্রিবিউশন ব্যবহারকারীদের জন্যঃ
dnf install @development-tools
উবুন্টু/ডেবিয়ান সিস্টেম ব্যবহারকারীদের জন্যঃ
apt-get install build-essential
OpenBLAS ডেভেলপমেন্ট হেডারগুলো ইন্সটল করুন।
ফেডোরা বা সমপর্যায়ের লিনাক্স ডিস্ট্রিবিউশন ব্যবহারকারীদের জন্যঃ
dnf install openblas-devel
উবুন্টু/ডেবিয়ান সিস্টেম ব্যবহারকারীদের জন্যঃ
apt-get install libopenblas-dev
ডিপেন্ডেন্সি বা শর্তগুলো ইন্সটল করুন।
ম্যাকওএস এ Clang <https://clang.llvm.org/>`__ব্যবহার করতে `OpenMP সমর্থিত একটি অতিরিক্ত লাইব্রেরি ইন্সটল করতে হবে। আপনি brew ব্যবহার করে এটি এবং অন্যান্য ডিপেন্ডেন্সি বা শর্তগুলো ইন্সটল করতে পারেন।
brew install libomp
তারপর BLAS ইন্সটল করুন; OpenBLAS স্বতঃসিদ্ধ নিয়মানুসারে নির্বাচিত থাকে।
brew install openblas
শেষে
Xcode Command Line Tools
ইন্সটল করুন।xcode-select --install
উইন্ডোজে ডিপেন্ডেন্সি বা শর্তগুলো ইন্সটল করতে Anaconda3 অথবা Miniconda3 ব্যবহার করতে হবে।
কম্পাইলার ব্যবহারের শর্তগুলো (রিকোয়ারমেন্ট) ইন্সটল করুন।
conda install --update-deps vs2017_win-64 vs2017_win-32 msvc_runtime
বাইনারি এবং বিল্ড ডিপেন্ডেন্সি বা শর্তগুলো ইন্সটল করুন।
conda install --update-deps -c conda-forge -y openblas cmake
qiskit-এয়ার সরাসরি গঠন (বিল্ড) এবং ইন্সটল করুন
যদি আপনার pip <19.0.0 ইন্সটল করা থাকে এবং এনভায়রনমেন্টে কাস্টম বিল্ড প্রয়োজন না হয় তবে নিচের নির্দেশনাগুলো কার্যকর করুনঃ
cd qiskit-aer pip install .
এর ফলে বাইনারি বিল্ডের সাথে এয়ারও ইন্সটল হবে।
অথবা আপনার যদি pip এর নতুন সংস্করণ ইন্সটল করা থাকে অথবা কিছু কাস্টম রিকোয়ারমেন্ট থেকে থাকে, তাহলে আপনি ম্যানুয়ালি একটি Python হুইল তৈরি (বিল্ড) করতে পারেন।
cd qiskit-aer python ./setup.py bdist_wheel
হুইল বিল্ডের সময় কাস্টম অপশন নির্ধারণ করে থাকলে নিজের মতো বিকল্প হুইল বিল্ড এর সময় এ নির্দেশ করুন।
Python হুইল গঠন করার পর এটি এয়ার রিপোজিটরির
dist/
ডিরেক্টরিতে সংরক্ষিত থাকবে। যথাযথ সংস্করণটির জন্য প্রয়োজন হবেcd dist pip install qiskit_aer-*.whl
আউটপুট হুইল ফাইলের নামটি নির্ভর করে ডেভেলাপমেন্টে বা অগ্রগতি চলতে থাকা এয়ারের বর্তমান সংস্করণের ওপর।
নিজের মতো বিকল্প হুইল বিল্ড এর সময়¶
এয়ার কম্পাইলেশনের জন্য পাইথন ইন্টারফেসের সাথে scikit-build ব্যবহার করে। এটি setuptools এর জন্য একটি ইন্টারফেস হিসেবে কাজ করে যাতে CMake কল হয় এবং স্থানীয় ব্যবস্থায় বাইনারিগুলি কম্পাইল হয়।
বাইনারিগুলি সংকলনের জটিলতার কারণে আপনার বিল্ড প্রক্রিয়াটির একটি নির্দিষ্ট অংশে বিকল্পগুলি পাস করতে হতে পারে। চল রাশিগুলি পাস করার উপায়টি হল:
python setup.py bdist_wheel [skbuild_opts] [-- [cmake_opts] [-- build_tool_opts]]
যেখানে [] ৩য় বন্ধনী ঐচ্ছিক এবং skbuild_opts
, cmake_opts
, build_tool_opts
কে আপনার পছন্দের ফ্ল্যাগ দিয়ে পুনঃস্থাপন করতে পারবেন। CMake অপশনের একটি তালিকা এখানে পাওয়া যাবেঃ https://cmake.org/cmake/help/v3.6/manual/cmake.1.html#options। যেমন, আপনি যদি এমন কিছু কার্যকর করতে চানঃ
python setup.py bdist_wheel -- -- -j8
এটি গঠন ব্যবস্থায় -j8 চিহ্ন (ফ্ল্যাগ) (যেটি এক্ষেত্রে Automake) পাঠায় যাতে আপনি আটটি প্রসেস সমান্তরালে গঠন করেন।
উদাহরণস্বরূপ, লিনাক্স মেশিনে C++ কম্পাইলারের নির্দিষ্ট সংস্করণ নির্দেশিত করা (সাধারণত যদি ডিফল্ট সংস্করণটি খুব পুরোনো হয়) এই নিশানগুলোর (ফ্ল্যাগ) একটি পরিচিত ব্যাবহারক্ষেত্র।
python setup.py bdist_wheel -- -DCMAKE_CXX_COMPILER=g++-7
যেটি Aer কম্পাইল করার সময় সিমেক (CMake) কে চিরাচরিত g++ কমান্ডের পরিবর্তে g++-7 কম্যান্ড ব্যবহার করার নির্দেশ দিবে।
এটির আর একটি পরিচিত ব্যবহারিক ক্ষেত্র হলো আপনাকে নিজস্ব প্লাটফর্মের নাম নির্দিষ্ট করতে হবে এবং স্থায়ী (স্ট্যাটিক) লিঙ্কিং বন্ধ করে রাখতে হবে, আপনার কম্পিউটারের কর্মপরিবেশ (এনভায়রনমেন্ট) অনুযায়ী।
python setup.py bdist_wheel --plat-name macosx-10.9-x86_64 \
-- -DSTATIC_LINKING=False -- -j8
এখানে --plat-name
ফ্ল্যাগটি একটি সেটআপ টুল যা প্যাকেজ মেটাডাটায় প্লাটফর্মের নাম ঠিক করতে ব্যবহৃত হয়, -DSTATIC_LINKING
ফ্ল্যাগটি CMake ব্যবহার করে স্ট্যাটিক লিঙ্কিং বিচ্ছিন্ন করা এবং -j8
ফ্ল্যাগ ব্যবহার করে Automake এর সাহায্যে আটটি প্রসেস কার্যকর করা হয়।
প্ল্যাটফর্মের উপর নির্ভর করে সাধারণ বিকল্পগুলির একটি তালিকা:
প্ল্যাটফর্ম |
টুল বা যন্ত্র |
বিকল্প বা অপশন |
ব্যবহারিক ক্ষেত্র |
---|---|---|---|
সমস্ত |
Automake |
|
সংখ্যার পরে সংকলনের জন্য প্রসেসের সংখ্যা নির্ধারণ করে। |
লিনাক্স |
CMake |
|
একটি নির্দিষ্ট C++ সম্পাদক (কম্পাইলার) নির্দিষ্ট করতে ব্যবহৃত হয়; আপনার ডিফল্ট g++ খুব বেশি পুরাতন হলে এটি প্রায়শই প্রয়োজন। |
OSX |
সেটআপটুলস |
|
Python প্যাকেজ আউটপুটটিতে প্ল্যাটফর্মের নাম নির্দিষ্ট করতে ব্যবহৃত হয়। |
OSX |
CMake |
|
স্থির (স্ট্যাটিক) লিঙ্ক ব্যবহার করা উচিত কিনা তা নির্দিষ্ট করতে ব্যবহৃত হয়। |
নোট
এর মধ্যে কয়েকটি বিকল্প প্ল্যাটফর্ম-নির্দিষ্ট নয়। এই নির্দিষ্ট প্ল্যাটফর্মগুলি তালিকাভুক্ত করা হয় কারণ এগুলি সাধারণত কর্মপরিবেশে (এনভায়রনমেন্ট) ব্যবহৃত হয়। আরও তথ্যের জন্য সরঞ্জাম (টুল) ডকুমেন্টেশন দেখুন।
সোর্স বা উৎস থেকে ইগ্নিস ইন্সটলকরণ¶
ইগ্নিস রিপোজিটরিটির ক্লোন বা প্রতিলিপি করুন।
git clone https://github.com/Qiskit/qiskit-ignis.git
রিপোজিটিরিটি ক্লোন বা প্রতিলিপি করায়
qiskit-ignis
নামে একটি স্থানীয় ডিরেক্টরি তৈরি হবে।cd qiskit-ignis
যদি আপনি পরীক্ষা চালাতে চান তাহলে ডেভেলাপার রিকোয়ারমেন্টস বা আবশ্যিক শর্তসমূহ ইন্সটল করবেন। উৎস থেকে qiskit-ignis প্যাকেজ ইন্সটল বা ব্যবহার করতে এর প্রয়োজন নেই।
pip install -r requirements-dev.txt
ইগ্নিস ইন্সটল করুন।
pip install .
যদি আপনি এটি সম্পাদনযোগ্য মোডে ইন্সটল করতে চান, অর্থাৎ প্রকল্পে কোড পরিবর্তন হলে যেন নতুন করে ইন্সটল করতে না হয় :
pip install -e .
সোর্স বা উৎস থেকে আইবিএম কোয়ান্টাম প্রোভাইডার ইন্সটলকরণ¶
qiskit-ibmq-provider রিপোজিটরিটির ক্লোন বা প্রতিলিপি করুন।
git clone https://github.com/Qiskit/qiskit-ibmq-provider.git
রিপোজিটিরিটি ক্লোন বা প্রতিলিপি করায়
qiskit-ibmq-provider
নামে একটি স্থানীয় ডিরেক্টরি তৈরি হবে।cd qiskit-ibmq-provider
আপনি যদি পরীক্ষা চালাতে চান বা লিনটিং চেক করতে চান তাহলে ডেভেলাপার রিকোয়ারমেন্টস বা আবশ্যিক শর্তসমূহ ইন্সটল করবেন। উৎস থেকে qiskit-ibmq-provider ইন্সটল বা ব্যবহার করতে এর প্রয়োজন নেই।
pip install -r requirements-dev.txt
Qiskit-ibmq-provider ইন্সটল করুন।
pip install .
যদি আপনি এটি সম্পাদনযোগ্য মোডে ইন্সটল করতে চান, অর্থাৎ প্রকল্পে কোড পরিবর্তন হলে যেন নতুন করে ইন্সটল করতে না হয় :
pip install -e .
Qiskit সংস্করণ¶
কিস্কিট (Qiskit) প্রকল্পটি বিভিন্ন উপাদানসমূহের সমন্বয়ে গঠিত যার প্রত্যেকটি উপাদান বিভিন্ন কার্যকারিতা সম্পাদন করে। প্রতিটি স্বাধীনভাবে দরকারী এবং তাদের নিজস্ব ব্যবহার করা যেতে পারে, তবে সুবিধার জন্য আমরা এই সংগ্রহস্থল (রিপোজিটরি) এবং মেটা-প্যাকেজ প্রদান করি যাতে সমস্ত উপাদান একবারে ইনস্টল করার জন্য একটি একক এনট্রি পয়েন্ট প্রদান করা যায়। এটি ইনস্টল প্রক্রিয়াটিকে সহজ করে এবং শেষ ব্যবহারকারীদেরকে একটি ইউনিফাইড ইন্টারফেস প্রদান করে। যাইহোক, যেহেতু প্রতিটি কিস্কিট (Qiskit) উপাদানের নিজস্ব রিলিজ বা প্রকাশ এবং সংস্করণ রয়েছে, তাই বিভিন্ন সংগ্রহস্থলের (রিপোজিটরি) মধ্যে সংস্করণগুলির সাথে কাজ করার সময় কিছু যত্নের প্রয়োজন। এই নথিপত্রটি কিস্কিট (Qiskit) উপাদানসমূহ এবং মেটা-প্যাকেজ উভয়ের সংস্করণ এবং রিলিজের বা প্রকাশের সাথে কাজ করার জন্য নির্দেশিকাগুলি রূপরেখা দেয়।
এই গাইডের বাকি অংশের জন্য স্ট্যান্ডার্ড শব্দার্থিক সংস্করণ নামকরণ ব্যবহার করা হবে: Major.Minor.Patch
একটি সংস্করণ সংখ্যার বিভিন্ন উপাদানগুলি উল্লেখ করতে। উদাহরণস্বরূপ, যদি সংস্করণ নম্বরটি 0.7.1
হয়, তবে মেজর সংস্করণটি 0
, মাইনর সংস্করণ 7
এবং প্যাচ সংস্করণ 1
।
মেটা-প্যাকেজ সংস্করণ¶
Qiskit মেটা-প্যাকেজ সংস্করণটি একটি স্বাধীন মান যা ট্র্যাক করা প্রতিটি উপাদানের রিলিজ দ্বারা নির্ধারিত হয়। প্রতিবার যখন আমরা একটি রিলিজকে একটি ট্র্যাক করা উপাদান (বা একটি উপাদান যুক্ত) মেটা-প্যাকেজ প্রয়োজনীয়তাগুলিতে পুশ করি, এবং সংস্করণটি আপডেট করতে হবে এবং একটি নতুন প্রকাশ প্রকাশিত হবে। এলিমেন্ট রিলিজের সাথে মেটা-প্যাকেজ ট্র্যাক রিলিজ পুশ করে তা নিশ্চিত করার জন্য উপাদানের মুক্তির সাথে সময় সমন্বয় করা উচিত।
নতুন উপাদান যোগ করা¶
যখন মেটা-প্যাকেজের প্রয়োজনীয়তার সাথে একটি নতুন Qiskit উপাদান যোগ করা হচ্ছে, তখন আমাদের মেটা-প্যাকেজের Minor সংস্করণ বাড়াতে হবে।
উদাহরণ স্বরূপ, যদি মেটা-প্যাকেজটি ২ টি উপাদান qiskit-aer
এবং qiskit-terra
অনুসরণ (ট্র্যাক) করে এবং এর সংস্করণটি 0.7.4
হয়। তখন আমরা একটি নতুন উপাদান qiskit-ignis
রিলিজ বা প্রকাশ করি যা আমরা মেটা-প্যাকেজে অন্তর্ভুক্ত করারও ইচ্ছা করি। যখন আমরা মেটা-প্যাকেজে নতুন উপাদানটি যুক্ত করি তখন আমরা সংস্করণটিকে 0.8.0
-এ বাড়িয়ে দিই।
প্যাচ সংস্করণ বৃদ্ধি পায়¶
মেটা-প্যাকেজ দ্বারা ইতিমধ্যেই ট্র্যাক করা কোন কিস্কিট (Qiskit) উপাদান যখন একটি রিলিজে ত্রুটি বা বাগগুলি সংশোধন করতে একটি প্যাচ সংস্করণ প্রকাশ করে, তখন আমাদের setup.py
-তে প্রয়োজনীয়তাগুলি বা রিকোয়ারমেন্টগুলিকে বাধা দেওয়ারও প্রয়োজন এবং তারপরে মেটা-প্যাকেজের প্যাচ সংস্করণ বাড়াতে হবে।
উদাহরণস্বরূপ, যদি মেটা-প্যাকেজটি ৩ টি উপাদান qiskit-terra==0.8.1
, qiskit-aer==0.2.1
, এবং qiskit-ignis==0.1.4
বর্তমান সংস্করণ 0.9.6
এর সাথে ট্র্যাক করছে। যখন কিস্কিট-টেরা (qiskit-terra) একটি বাগ 0.8.2
সংশোধন করার জন্য একটি নতুন প্যাচ সংস্করণ রিলিজ বা প্রকাশ করে তখন মেটা-প্যাকেজটিরও প্যাচ সংস্করণ এবং রিলিজ বাড়ানোর প্রয়োজন হবে, যা 0.9.7
হয়ে যাবে।
অতিরিক্তভাবে, মেটা-প্যাকেজে নিজেই মাঝে মাঝে প্যাকেজিং বা অন্যান্য ত্রুটিসমূহ (বাগ) রয়েছে যা নতুন রিলিজগুলি পুশ করে ঠিক করা দরকার। যখন সেগুলি সম্মুখীন হয় তখন আমাদের প্যাচ সংস্করণটি ভাঙা (ব্রোকেন) রিলিজ থেকে আলাদা করার জন্য বাড়ানো উচিত। pypi থেকে ভাঙা (ব্রোকেন) বা পুরানো রিলিজগুলি যে কোনও পরিস্থিতিতে মুছে ফেলবেন না, পরিবর্তে কেবল প্যাচ সংস্করণ বাড়ান এবং একটি নতুন রিলিজ আপলোড করুন।
গৌণ সংস্করণ বৃদ্ধি¶
এ ছাড়াও যখন মেটা-প্যাকেজে একটি নতুন উপাদান যুক্ত করলে, ট্র্যাক করা উপাদানে একটি গৌণ সংস্করণ বাড়ানোর সময়ে মেটা-প্যাকেজের গৌণ সংস্করণটিও বৃদ্ধি করা উচিত।
উদাহরণস্বরূপ, যদি মেটা-প্যাকেজ 2 টি উপাদান qiskit-terra==0.7.0
এবং qiskit-aer==0.1.1
এবং বর্তমান সংস্করণটি 0.7.5
ট্র্যাক করছে। যখন qiskit-aer
উপাদানটি 0.2.0
রিলিজ করে তখন নতুন রিলিজের সাথে সামঞ্জস্য করতে আমাদের মেটা-প্যাকেজ সংস্করণটিকে 0.8.0
করতে হবে।
প্রধান (মেজর) সংস্করণ বৃদ্ধি¶
প্রধান সংস্করণটি অন্যান্য সংস্করণ সংখ্যা (নম্বর) উপাদানগুলি থেকে ভিন্ন। অন্যান্য সংস্করণ সংখ্যা (নম্বর) উপাদানগুলির বিপরীতে, যা প্রতিটি ট্র্যাক করা উপাদানগুলির সাথে লক ধাপে আপডেট করা হয়, প্রধান সংস্করণটি শুধুমাত্র তখনই বৃদ্ধি পায় যখন সমস্ত ট্র্যাক করা সংস্করণগুলি (কমপক্ষে 1.0.0
এর আগে) বাম্প করা হয়। এই মুহূর্তে, সমস্ত উপাদানগুলির এখনও 0
এর একটি প্রধান সংস্করণ সংখ্যা (নম্বর) উপাদান রয়েছে, এবং যতক্ষণ না মেটা-রিপোজিটরিতে প্রতিটি ট্র্যাক করা উপাদান প্রধান সংস্করণটিকে >=1
হতে বাম্প করার দ্বারা স্থিতিশীল হিসাবে চিহ্নিত করা হয়, তারপর মেটা- প্যাকেজ সংস্করণটির প্রধান সংস্করণটিকে বৃদ্ধি করা উচিত নয়।
যখন সমস্ত উপাদান >=1.0.0 এ থাকে, তখন প্রধান সংস্করণ নম্বর উপাদান ট্র্যাকিংয়ের আচরণ সম্বন্ধে এখনও সিদ্ধান্ত নেওয়া হয়নি।
ঐচ্ছিক অতিরিক্ত¶
ট্র্যাক করা উপাদানগুলি ছাড়াও, কিস্কিটের (Qiskit) উপরে নির্মিত অতিরিক্ত প্যাকেজ রয়েছে যা কিস্কিটের (Qiskit) সাথে মিলিয়ে তৈরি করা হয়েছে, উদাহরণস্বরূপ, কিস্কিট-অপ্টিমাইজেশনের (qiskit-optimization) মতো অ্যাপ্লিকেশন সংগ্রহস্থল বা রিপোজিটরিসমূহ। সুবিধার জন্য এই প্যাকেজসমূহ কিস্কিট (Qiskit) মেটাপ্যাকেজ দ্বারা ঐচ্ছিক অতিরিক্ত হিসাবে ট্র্যাক করা হয় যা কিস্কিটের (Qiskit) সাথে ইনস্টল করা যেতে পারে। এই ঐচ্ছিক ডাউনস্ট্রিম প্রকল্পের (প্রজেক্ট) রিলিজ বা প্রকাশগুলি একটি মেটাপ্যাকেজ রিলিজ বা প্রকাশ ট্রিগার বা সূত্রপাত করে না যেহেতু সেগুলি আন-পিন করা থাকে এবং মেটাপ্যাকেজ সংস্করণকে প্রভাবিত করে না। যদি কিস্কিট (Qiskit) এবং এই ডাউনস্ট্রিম ঐচ্ছিক শর্তসমূহের (ডিপেন্ডেন্সি) মধ্যে একটি সামঞ্জস্যের সমস্যা থাকে এবং সর্বনিম্ন সংস্করণটি একটি স্বতন্ত্র রিলিজে সামঞ্জস্য করা প্রয়োজন, তবে এটি শুধুমাত্র প্যাচ সংস্করণ রিলিজ বা প্রকাশ হিসাবে করা হবে কারণ এটি একটি প্যাকেজিং বাগফিক্স।
Qiskit উপাদান প্রয়োজনীয়তা অনুসরণ (ট্র্যাকিং)¶
মেটা-প্যাকেজ এবং কিস্কিট (Qiskit) সংস্করণের সাথে কঠোরভাবে সম্পর্কিত না হলেও, আমরা কীভাবে মেটা-প্যাকেজের প্রয়োজনীয়তা বা রিকোয়ারমেন্টগুলির তালিকায় উপাদান সংস্করণগুলি ট্র্যাক করি তা গুরুত্বপূর্ণ। setup.py
-এ তালিকাভুক্ত প্রতিটি উপাদান একটি একক সংস্করণে পিন করা উচিত। এর মানে হল যে কিস্কিটের (Qiskit) প্রতিটি সংস্করণে প্রতিটি ট্র্যাক করা উপাদানের জন্য শুধুমাত্র একটি একক সংস্করণ ইনস্টল করা উচিত। উদাহরণস্বরূপ, যে কোন প্রদত্ত বিন্দুতে প্রয়োজনীয়তা বা রিকোয়ারমেন্টগুলির তালিকাটি এমন কিছু দেখতে হওয়া উচিতঃ
requirements = [
"qiskit_terra==0.7.0",
"qiskit-aer==0.1.1",
]
এটি ডিবাগিংয়ে সহায়তা করার জন্য, তবে একাধিক উপাদান জুড়ে সংস্করণগুলি ট্র্যাকিংকে আরও স্বচ্ছ করে তোলে।