منصوبے کے بارے میں

NEAT-AI-core، NEAT-AI کا مشترکہ نیٹو Rust کور ہے، جو NEAT (NeuroEvolution of Augmenting Topologies) کا ایک نفاذ ہے، یہ وہ الگورتھم ہے جو نیورل نیٹ ورک کے وزن (weights) اور ٹوپولوجی دونوں کو ارتقاء دیتا ہے۔ یہ ریپوزٹری ایک Cargo ورک اسپیس ہے جس کا ممبر، neat-core کریٹ، مشترکہ کمپیوٹیشن لائبریری اور اس کے ٹیسٹ رکھتا ہے۔ کریٹ کیا فراہم کرتا ہے: اسکورنگ، لاس اور SIMD کرنلز جو بہت سے ریکارڈز کو ایک ہی ارتقائی فرد (جسے پروجیکٹ 'creature' کہتا ہے) کے ذریعے گزارنے کے لیے استعمال ہوتے ہیں۔ ڈیفالٹ بلڈ اور wasm32 بلڈ سنگل تھریڈڈ راستہ اختیار کرتے ہیں؛ پیرالل Cargo فیچر کو فعال کرنے سے نیٹو ٹارگٹس پر rayon پر مبنی ڈیٹا پیرالل ریکارڈ اسکورنگ شامل ہو جاتی ہے۔ ترتیب وار اور پیرالل اسکورنگ دونوں راستے 8-ریکارڈ بیٹچڈ SIMD راستے کے ذریعے فارورڈ پاس چلاتے ہیں، جس کے بعد 4-ریکارڈ گروپ اور ایک اسکیلر ٹیل (scalar tail) آتا ہے۔ README بتاتا ہے کہ کمٹ شدہ پروڈکشن ٹوپولوجی پر محفوظ کرنلز میں ایک قابل پیمائش پری-پاس لاگت ہوتی ہے، اس لیے وہ صارفین جن کی اپنی لوڈ-ٹائم ویلیڈیشن ہے، انہیں 'unchecked' جڑواں کرنلز کی طرف بھیجا جاتا ہے، اور یہ کہ نیٹو لین فی کور wasm32 لین سے بہتر کارکردگی دکھاتا ہے۔ اسکورنگ API: ان پٹ اور آؤٹ پٹ ایک فلیٹ، مسلسل لے آؤٹ استعمال کرتے ہیں: ریکارڈ i ان پٹس [i * stride .. i * stride + stride] کو پڑھتا ہے اور اس کے آؤٹ پٹس out[i * num_outputs .. (i + 1) * num_outputs] میں جاتے ہیں۔ پرانے فی-ریکارڈ ویکٹر ریپرز کو پہلے ڈیپری کیٹ کیا گیا اور پھر ہٹا دیا گیا، لہذا کالرز کو ریکارڈز کو ایک بفر میں پیک کرنا ہوگا اور فلیٹ انٹری پوائنٹس کو کال کرنا ہوگا؛ زیرو سٹرائڈ یا ایسا بفر جو ریکارڈز کی مکمل تعداد نہ ہو، خاموشی سے غلط سلائسنگ کرنے کے بجائے پینک (panic) کرتا ہے۔ کمپائل شدہ نیٹ ورکس تعمیر کے بعد صرف پڑھنے کے قابل (read-only) ہوتے ہیں۔ فیلڈز پرائیویٹ ہیں اور صرف borrow-only ایکسیسرز کے ذریعے ظاہر کیے جاتے ہیں، اور ایک from_parts کنسٹرکٹر میموری میں موجود نیورونز اور سیناپسز سے نیٹ ورک بناتا ہے، جو بفر- tabased کنسٹرکٹر جیسی ہی ویلیڈیشن لاگو کرتا ہے اور ایسے سیناپس اسپین کو مسترد کرتا ہے جو ٹیبل سے باہر نکل جائے۔ README نوٹ کرتا ہے کہ یہ ڈاؤن اسٹریم صارفین کے لیے ایک بریکنگ تبدیلی ہے۔ فیچر فلیگز: parallel ڈیفالٹ طور پر بند ہے، لہذا ڈیفالٹ اور wasm32 بلڈز میں کوئی rayon سمبلز نہیں ہوتے؛ checked-gather4 بھی ڈیفالٹ طور پر بند ہے اور wasm32 gather4 ہیلپر میں باؤنڈز-چیکڈ انڈیکسنگ کو بحال کرتا ہے۔ SIMD ماڈیول میں ہر کرنل ایک محفوظ فنکشن کے طور پر فراہم کیا جاتا ہے جو اپنے اسپین کی تصدیق کرتا ہے اور معاہدہ پورا نہ ہونے پر پینک کرتا ہے، ساتھ ہی ایک 'unchecked' جڑواں فنکشن بھی ہے جس کا حفاظتی معاہدہ لوڈ-ٹائم انڈیکس انویرینٹ ہے۔ WebAssembly: ہر پش دو بنڈلز شائع کرتا ہے: ایک wasm64 Memory64 بلڈ جسے نئی ریویژنز پن کرتے ہیں، اور ایک غیر تبدیل شدہ wasm32 بلڈ جسے رول بیک ونڈو کے طور پر رکھا گیا ہے، ہر ایک کا اپنا چیک سم سائیڈ کار اور SBOM ہے، جو ریلیز سے پہلے بنڈل اور آرکیٹیکچر-پیرٹی چیکس کے ذریعے کنٹرول کیا جاتا ہے۔ بلڈ اور کوالٹی: ڈویلپمنٹ ٹیسٹ ڈریون ڈویلپمنٹ (TDD) کے مطابق ہے؛ مقامی کوالٹی گیٹ فارمیٹنگ، clippy، ٹیسٹ، ڈاکس، لائسنس اور ایڈوائزری چیکس اور bats شیل-سوٹ ٹیسٹ چلاتا ہے، اور CI کو پل ریکویسٹ اور مینوئل ڈسپیچ پر استعمال کیا جاتا ہے۔ روٹ مینی فیسٹ ورک اسپیس کی سطح پر dev اور release پروفائلز کی تعریف کرتا ہے (تیز ڈویلپمنٹ ری بلڈز کے لیے line-tables-only ڈیبگ انفو؛ ریلیز کے لیے fat LTO اور سنگل codegen یونٹ کے ساتھ opt-level 3)، جبکہ target-cpu=native کو جان بوجھ کر یہاں پن کرنے کے بجائے ڈاؤن اسٹریم بائنری صارفین کے لیے چھوڑ دیا گیا ہے۔