دفاتر بيثون التفاعلية الدقيقة لـ Jupyter [LAB]:
pip install ipyflowPython 3 (ipyflow) من محدد المشغل أو kernel.Ipyflow هو kernel من الجيل التالي من Python لـ JupyterLab و Notebook 7 الذي يتتبع علاقات تدفق البيانات بين الرموز والخلايا أثناء جلسة تفاعلية معينة ، مما يجعل من السهل التفكير في حالة دفتر الملاحظات. فيما يلي مقطع فيديو لـ JupyterCon Talk الذي يقدمه (والشرائح المقابلة).
إذا كنت ترغب في تخطي الملعب المصعد وتخطي مباشرة إلى تعليمات التثبيت / التنشيط ، تقفز إلى البداية السريعة أدناه ؛ خلاف ذلك ، استمر في القراءة للتعرف على فلسفة IpyFlow ومجموعة الميزات.
يوفر IpyFlow تفاعلًا على Bolt-On لـ Jupyter الافتراضي لـ Python kernel ، ipykernel. تم تصميمه مع وضع الأهداف التالية في الاعتبار:
B على الخلية A بسبب مرجع ترجمي x[0] ، وهو ذكي بما يكفي لعدم تنفيذ الخلية B بشكل تفاعلي عندما يتغير جزء آخر من x ، على سبيل المثال x[1] . نتيجة لذلك ، فإنه يحد من إعادة التنفيذ غير الضرورية إلى الحد الأدنى.للتثبيت ، قم بتشغيل:
pip install ipyflowلتشغيل kernel ipyflow ، حدد "Python 3 (ipyflow)" من قائمة النواة المتاحة في علامة التبويب Launcher. وبالمثل ، يمكنك التبديل عن / من ipyflow من دفتر ملاحظات موجود من خلال التنقل إلى عنصر قائمة ملف "تغيير kernel":
| نقطة الدخول | kernel Switcher |
|---|---|
يشحن ipyflow مع امتدادات تجلب التفاعل إلى jupyterlab و Notebook 7 بشكل افتراضي ، على غرار سلوك التنفيذ المقدم في دفاتر ملاحظات أخرى مثل الملاحظة ، pluto.jl ، و marimo.
تتصرف تفاعل Ipyflow بشكل مختلف قليلاً عن ما سبق ، حيث تم تصميمه لتلبية احتياجات مستخدمي Jupyter على وجه الخصوص. عندما تقوم بتنفيذ الخلية C باستخدام إخراج ipyflow ، يعتمد إخراج C cell C ، ويظهر إخراج الخلايا التي تعتمد على C كلها كما لو تم تنفيذ دفتر الملاحظات من أعلى إلى أسفل (على سبيل المثال عبر "إعادة التشغيل والجري للجميع"). عندما تختار بعض الخلايا C ، فإن جميع الخلايا التي من شأنها إعادة تنفيذها عند تنفيذ C لها نقطة برتقالية بجوارها ، والخلايا التي C عليها ولكنها محدثة ولن يتم إعادة تنفيذها لها نقاط أرجوانية:
يتم استمرار معلومات تبعية الخلية في بيانات دفتر الدفترية ، بحيث يمكنك القفز إلى أي خلية بعد بدء جلسة kernel جديدة ، وتشغيلها ، وكن واثقًا من أن الإخراج هو ما يقصد به مؤلف دفتر الملاحظات:
نظرًا لأن نظرة خاطفة على Ipyflow في حالة وقت التشغيل من أجل استنتاج التبعيات ، فإنها تحتاج إلى الحفاظ على محتوى دفتر الملاحظات متزامن مع حالة ذاكرة kernel ، حتى عبر تحديث المتصفح. على هذا النحو ، يتيح IpyFlow التغير التلقائي بشكل افتراضي ، بحيث تكون حالة kernel ، وحالة الدفترية في الذاكرة ، وملف دفتر الملاحظات على القرص كلها متزامنة. إذا قمت بطريق الخطأ في كتابة ناتج الخلية التي تريد الاحتفاظ بها ، على سبيل المثال أثناء التنفيذ التفاعلي ، والكتابة التلقائية على النتيجة السابقة على القرص ، لا تخف! يوفر IpyFlow أداة مكتبة تسمى reproduce_cell لاستعادة مدخلات وإخراج عمليات تنفيذ الخلايا السابقة (ضمن جلسة kernel معينة):
from ipyflow import reproduce_cell
reproduce_cell ( 4 , lookback = 1 ) # to reproduce the previous execution of cell 4مثال:
إذا كنت ترغب في إلغاء الاشتراك مؤقتًا عن التنفيذ التفاعلي ، فيمكنك استخدام CTRL+Shift+Enter (على MAC ، CMD+SHIFT+ENTER يعمل أيضًا) لتنفيذ الخلية فقط في السؤال:
يمكنك أيضًا تشغيل %flow mode normal في الاشتراك من وضع التنفيذ التفاعلي الافتراضي (في هذه الحالة ، سوف يتحول CTR+Shift+Enter / CMD+SHIFT+ENTER من عدم التفاعل إلى التفاعل). لتنفيذ رد الفعل القابل للتمكين باعتباره الافتراضي ، يمكنك تشغيل %flow mode reactive :
إذا كنت ترغب في منع السلوك التفاعلي الافتراضي لكل جلسة kernel جديدة ، فيمكنك إضافة هذا إلى ملف تعريف ipython الخاص بك (الموقع الافتراضي عادة في ~/.ipython/profile_default/ipython_config.py ):
c = get_config ()
c . ipyflow . exec_mode = "normal" # defaults to "reactive" تتخلف IpyFlow إلى الدلالات داخل الطلب ، مما يعني أنه إذا كانت الخلية B تعتمد على الخلية A ، فيجب أن تظهر A قبل B بالترتيب المكاني للكمبيوتر المحمول. لا يمنع IpyFlow الخلايا السابقة من الرجوع إلى البيانات التي تم إنشاؤها أو تحديثها بواسطة الخلايا اللاحقة ، ولكنها تغفل هذه الحواف عند تنفيذ التفاعل.
تحتوي الدلالات الداخلية ، على الرغم من أنها أقل مرونة ، على بعض الخصائص المرغوبة عند مقارنتها مع أي دلالات من الدرجة ، لأنها تشجع أجهزة الكمبيوتر المحمولة الأكثر نظافة وأكثر استنادًا والتي يمكن تحويلها بسهولة أكبر إلى برامج نصية في الثعبان لاحقًا. الآن بعد أن قمت ببيعك أو لم أقم ببيعك على دلالات في الطلب ، يمكنك تمكين دلالات أي طلب في IpyFlow عن طريق تشغيل %flow direction any_order ، وإعادة تمكين الدلالات الافتراضية في الطلب باستخدام %flow direction in_order :
يمكنك أيضًا تحديث ملف تعريف ipython الخاص بك إذا كنت ترغب في جعل أي دلالات من أي طلب السلوك الافتراضي لجلسات kernel الجديدة:
c = get_config ()
c . ipyflow . flow_direction = "any_order" # defaults to "in_order"عندما يتم تحديث الخلية البيانات ، يتم إعطاء الاضطراب المجاور لها لونًا برتقاليًا (على غرار اللون للخلايا القذرة) ، والخلايا التي تعتمد عليها (متكررة) تعتمد عليها بلون ازدحام أرجواني. (إن الإدخال البرتقالي ذو الناتج الأرجواني يعني فقط أن الإخراج قد يكون خارج المزامنة.) عند استخدام التنفيذ التفاعلي ، عادةً ما لا ترى ذلك ، حيث سيتم إعادة تشغيل الخلايا المعتمدة خارج المزامنة ، أو إذا قمت بإعادة تشغيل البيانات تلقائيًا ، على الرغم من أنك قد تراها إذا كانت تستخدم CTRL+Shift+Enter للاختراق مؤقتًا من التفاعل ، أو إذا قمت بتغيير البيانات التي تحديث الخلية (تحديث الخلية السابق).
إذا كنت ترغب في السماح لـ Ipyflow بإصلاح هذه الأشياء لك ، فيمكنك الضغط على "الفضاء" عندما يكون في وضع الأوامر لحل جميع الخلايا التي لا معنى لها أو قذرة تلقائيًا. قد تقدم هذه العملية المزيد من الخلايا التي لا معنى لها ، وفي هذه الحالة يمكنك الاستمرار في الضغط على "مساحة" حتى يتم حل جميع التناقضات ، إذا رغبت في ذلك:
الخلايا التي تشير إلى وظائف Python والفئات ، البدائية مثل الأعداد الصحيحة ، العوامات ، الأوتار ، وكذلك المصفوفات numpy ، يمكن أن تكون مذكرات %%memoize Pandas ، والحاويات (القوائم ، dicts ، مجموعات ، tuples ، إلخ). ليست هناك حاجة لتحديد "المدخلات" للخلية ، حيث سوف يستنتج IPYFLOW هذه تلقائيًا. تخزين الخلايا المذكورة في نتائجها في الذاكرة (على الرغم من أن ذاكرة التخزين المؤقت المدعومة من القرص في المستقبل) ، وسوف تسترجع هذه النتائج المخزنة مؤقتًا (بدلاً من إعادة تشغيل الخلية) عندما يكتشف تدفق ipyflow المدخلات ومحتوى الخلية مماثلة لتشغيل سابق:
بشكل افتراضي ، يتخطى %%memoize جميع الإخراج باستثناء إخراج العرض المحتمل من التعبير الأخير في الخلية (عند الاقتضاء). لتخطي هذا أيضًا ، تمرير --quiet ، وتشمل stdout و stderr وغيرها من الإخراج الغني ، تمرير --verbose :
يحتوي محرك التنفيذ التفاعلي الخاص بـ IpyFlow على دعم مدمج لـ ipywidgets ، مما يسمح بنشر تغييرات القطعة عبر حدود الخلايا:
يمكن الجمع بين هذه الوظيفة مع %%memoize مذكرات لتقديمها بالقرب من العرض في الوقت الفعلي للمخططات التفاعلية عبر الخلايا:
يمكن إقران هذه الوظيفة مع ملحقات أخرى مثل Stickyland لبناء لوحات معلومات تفاعلية بالكامل أعلى jupyterlab + ipyflow.
أخيرًا ، يتكامل IpyFlow أيضًا مع أجهزة تشغيل Mercury أيضًا:
يجب أن يفهم IpyFlow حالة التنفيذ الأساسية على مستوى عميق من أجل توفير ميزاتها. يعرض واجهة برمجة تطبيقات للتفاعل مع بعض هذه الحالة ، بما في ذلك وظيفة code للحصول على الرمز اللازم لإعادة بناء بعض الرمز:
# Cell 1
from ipyflow import code
# Cell 2
x = 0
# Cell 3
y = x + 1
# Cell 4
print ( code ( y ))
# Output:
"""
# Cell 2
x = 0
# Cell 3
y = x + 1
""" يمكنك أيضًا القيام بذلك على مستوى الخلايا أيضًا باستخدام طريقة slice() :
from ipyflow import cells
print ( cells ( 4 ). slice ())
# Output:
"""
# Cell 2
x = 0
# Cell 3
y = x + 1
# Cell 4
print(code(y))
""" يمكنك أيضًا رؤية الخلية (1-فهرسة) وبيان (0-indexed) عندما تم تحديث رمز آخر مرة مع وظيفة timestamp :
from ipyflow import timestamp
timestamp ( y )
# Timestamp(cell_num=3, stmt_num=0) لرؤية تبعيات ومعالين رمز معين ، استخدم deps users ، على التوالي: على التوالي:
from ipyflow import deps , users
deps ( y )
# [<x>]
users ( x )
# [<y>] إذا كنت ترغب في رفع رمز إلى التمثيل المستخدم داخليًا بواسطة ipyflow ، فاستخدم وظيفة lift (على مسؤوليتك الخاصة ، بالطبع):
from ipyflow import lift
y_sym = lift ( y )
y_sym . timestamp
# Timestamp(cell_num=3, stmt_num=0) لا تعمل التفاعل وميزات الواجهة الأمامية الأخرى في واجهات مثل Colab أو VSCODE ، ولكن لا يزال بإمكانك استخدام واجهة برمجة تطبيقات بيانات IPYFLOW على هذه الأسطح من خلال تهيئة جلسة دفتر الملاحظات الخاصة بك مع الرمز التالي:
%pip install ipyflow
%load_ext ipyflow
بدأت IpyFlow حياتها تحت اسم NBSAFETY ، والتي قدمت الاقتراحات الأولية ووظائف التقطيع.
لاقتراحات التنفيذ:
@article { macke2021fine ,
title = { Fine-grained lineage for safer notebook interactions } ,
author = { Macke, Stephen and Gong, Hongpu and Lee, Doris Jung-Lin and Head, Andrew and Xin, Doris and Parameswaran, Aditya } ,
journal = { Proceedings of the VLDB Endowment } ,
volume = { 14 } ,
number = { 6 } ,
pages = { 1093--1101 } ,
year = { 2021 } ,
publisher = { VLDB Endowment }
} بالنسبة للقطعة الديناميكية (المستخدمة للتفاعل ووظيفة code ، على سبيل المثال):
@article { shankar2022bolt ,
title = { Bolt-on, Compact, and Rapid Program Slicing for Notebooks } ,
author = { Shankar, Shreya and Macke, Stephen and Chasins, Andrew and Head, Andrew and Parameswaran, Aditya } ,
journal = { Proceedings of the VLDB Endowment } ,
volume = { 15 } ,
number = { 13 } ,
pages = { 4038--4047 } ,
year = { 2022 } ,
publisher = { VLDB Endowment }
}لأي شيء غير مغطى في الأوراق المذكورة أعلاه ، يمكنك الاستشهاد بربط ipyflow:
@misc { ipyflow ,
title = { {IPyflow: A Next-Generation, Dataflow-Aware IPython Kernel} } ,
howpublished = { url{https://github.com/ipyflow/ipyflow} } ,
year = { 2022 } ,
}لم يكن IpyFlow ممكنًا بدون المتعاونين الأكاديميين المذهلين المدرجين في الأوراق المذكورة أعلاه. تستوحى ميزات التنفيذ التفاعلية من أدوات أخرى ممتازة مثل دفاتر Hex و Pluto.jl ومراقبة. تتمتع IpyFlow أيضًا بالتلقيح المتبادل للأفكار مع أجهزة الكمبيوتر المحمولة الأخرى للبيثون مثل Marimo و Jolin.io و Datalore-بالتأكيد تحقق منها أيضًا إذا كنت تحب Ipyflow.
استفاد العمل على ipyflow من دعم الأشخاص من عدد من الشركات - سواء في شكل مساهمات مالية مباشرة (Databricks ، Hex) وكذلك الدعم الأخلاقي غير المباشر (Ponder ، Meta). وبالطبع ، يعتمد Ipyflow على الأسس التي بنيها مجتمع Jupyter المذهل.
رمز في هذا المشروع مرخصة بموجب ترخيص BSD-3-Cause.