Jupyterのための正確なリアクティブPythonノートブック[Lab]:
pip install ipyflowPython 3 (ipyflow)を選択します。iPyflowは、特定のインタラクティブセッション中にシンボルとセル間のデータフロー関係を追跡するJupyterLabおよびノートブック7の次世代Pythonカーネルであり、それによりノートブック状態について推論しやすくなります。これは、Jupyterconの講演(および対応するスライド)を紹介するビデオです。
エレベーターのピッチをスキップし、インストール /アクティベーションの手順に直接スキップしたい場合は、以下のクイックスタートにジャンプします。それ以外の場合は、読み続けて、iPyflowの哲学と機能セットについて学びます。
iPyflowは、JupyterのデフォルトのPythonカーネル、iPykernelに対してボルトオン反応性を提供します。次の目標を念頭に置いて設計されました。
x[0]のためにセルBセルAに依存する場合を理解し、 x x[1]の他の部分が変化する場合、セルBを反応的に実行しないほど賢いです。その結果、不必要な再検討を最小限に制限します。インストールするには、実行します。
pip install ipyflowiPyflowカーネルを実行するには、ランチャータブで利用可能なカーネルのリストから「Python 3(iPyflow)」を選択します。同様に、「Change Kernel」ファイルメニュー項目にナビゲートすることにより、既存のノートブックからIPYFlowへの /を切り替えることができます。
| エントリポイント | カーネルスイッチャー |
|---|---|
IPYFLOWは、Observable、Pluto.jl、Marimoなどの他のノートブックで提供されている実行動作と同様に、デフォルトでJupyterLabとノートブック7に反応性をもたらす拡張機能を備えています。
ただし、IPYFlowの反応性は、特にJupyterユーザーのニーズを満たすように設計されているため、上記とは少し異なります。 Cの出力でCell Cを実行すると、セルCの出力はCに依存し、 Cに依存するセルの出力はすべて、ノートブックが上から下に実行された場合に表示されます(「再起動とランオール」を介して)。いくつかの細胞Cを選択すると、 Cが実行されたときに再排出するすべてのセルにはオレンジ色のドットがあり、 C依存しますが、最新であり、再脱税で紫色のドットがあります。
セルの依存関係情報はノートブックメタデータに持続するため、新鮮なカーネルセッションを開始した後、任意のセルにジャンプして実行し、出力がノートブック著者が意図したものであると確信してください。
依存関係を推測するために実行時の状態でIPYFlowが覗くため、ブラウザのリフレッシュ全体でさえ、カーネルのメモリ状態と同期してノートブックのコンテンツを同期させる必要があります。そのため、iPyflowはデフォルトでAutoSave-on-Changeを有効にします。これにより、Kernel State、Notebook UIのインメモリ状態、およびディスク上のノートブックファイルがすべて同期されます。たとえば、リアクティブな実行中に保持したいセルの出力を誤って上書きし、オートセーブがディスクに以前の結果を上書きする場合、恐れることはありません! iPyflowは、 reproduce_cellというライブラリユーティリティを提供して、以前のセル実行の入力と出力を回復します(特定のカーネルセッション内):
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も機能します)、問題のセルのみを実行できます。
また、デフォルトのリアクティブ実行モードからオプトアウトしてMagic Command %flow mode normalを実行することもできます(この場合、CTR+SHIFT+ENTER / CMD+SHIFT+ENTERは、非反応性から反応性に切り替えます)。デフォルトとして反応性のある実行を再現できるように、 %flow mode reactiveを実行できます。
新しいカーネルセッションごとにデフォルトのリアクティブ動作を防ぎたい場合は、これをiPythonプロファイルに追加できます(通常、デフォルトの場所は~/.ipython/profile_default/ipython_config.py )
c = get_config ()
c . ipyflow . exec_mode = "normal" # defaults to "reactive"IPYFlowはデフォルトでインドオーダーセマンティクスを使用します。つまり、セルBがセルAに依存する場合、 Aノートブックの空間順序でB前に表示する必要があります。 IPYFLOWは、以前のセルが後のセルによって作成または更新されたデータを参照することを妨げませんが、リアクティブ実行を実行するときにこれらのエッジを省略します。
順序のセマンティクスは、柔軟性が低いですが、あらゆるオーダーセマンティクスと比較すると望ましい特性があります。これは、後でPythonスクリプトに簡単に変換できるクリーンで再現可能なノートブックを奨励するためです。今度は、次のセマンティクスであなたを販売したかもしれないしたかもしれないので、魔法のコマンド%flow direction any_orderを実行し、 %flow direction in_orderを使用してデフォルトのインダーセマンティクスを再現できるようにすることにより、iPyflowであらゆるオーダーセマンティクスを有効にすることができます。
また、新しいカーネルセッションのデフォルトの動作であるオーダーセマンティクスを作成したい場合は、IPythonプロファイルを更新することもできます。
c = get_config ()
c . ipyflow . flow_direction = "any_order" # defaults to "in_order"セルが更新されたデータを参照するたびに、その隣のコラプサーにオレンジ色の色(汚れたセルの色に似ています)が与えられ、(再帰的に)依存するセルには紫色の崩壊装置の色が与えられます。 (紫色の出力を備えたオレンジ色の入力は、出力がシンク外である可能性があることを意味します。)反応性実行を使用する場合、通常、シンク外の依存セルは自動的に再実行されるため、Ctrl+Shift+を使用して反応性を一時的に選択する場合、または細胞の最新情報を変更する場合(以前のエッジの最新情報を変更する場合)。
iPyflowにこれらのためにこれらを修正させたい場合は、コマンドモードのときに「スペース」を押して、すべての古いセルまたは汚れたセルを自動的に解決できます。この操作は、より古い細胞を導入する可能性があります。その場合、必要に応じて、すべての矛盾が解決されるまで「スペース」を押し続けることができます。
Python機能とクラス、整数、フロート、文字列などのプリミティブ、およびNumpyアレイ、Pandasデータフレーム、コンテナ(リスト、Dict、セット、タプルなど)を参照するセルは、特別な%%memoize quedomagicを使用してiPyflowによってメモ化できます。 IPYFlowはこれらを自動的に推測するため、セルへの「入力」を指定する必要はありません。メモ化されたセルは、メモリで結果をキャッシュします(ディスク補助キャッシュは将来計画されていますが)。これらのキャッシュ結果は(セルを再ランニングするのではなく)、以前の実行と同一の入力とセル含有量を検出するたびに取得します。
デフォルトでは、 %%memoize 、セル内の最後の式からの潜在的なDisplayhook出力を除くすべての出力をスキップします(該当する場合)。これもスキップするために、パス--quiet 、およびstdout、stderr、およびその他のリッチな出力を含めるには、pass --verbose :
IPYFLOWのリアクティブエクササイズエンジンには、 ipywidgetsのサポートが組み込まれており、セルの境界を越えてウィジェットの変更を伝播できるようにします。
この機能は、 %%memoize Magicと組み合わせて、セル間のインタラクティブプロットのほぼリアルタイムレンダリングを提供できます。
この機能は、Stickylandなどの他の拡張機能とペアリングして、JupyterLab + IPYFlowの上に完全に反応性のあるダッシュボードを構築できます。
最後に、iPyflowは水銀ウィジェットとも統合します。
IPYFLOWは、その機能を提供するために、基礎となる実行状態を深いレベルで理解する必要があります。何らかのシンボルを再構築するために必要なコードを取得するためのcode関数を含む、この状態の一部と対話するためにAPIを公開します。
# 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))
"""また、シンボルがtimestamp関数で最後に更新されたときのセル(1インデックス)とステートメント(0インデックス)を見ることができます。
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のデータフローAPIを使用できます。
%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、Observableなどの他の優れたツールの機能に触発されています。 IPYFlowは、Marimo、Jolin.io、Dataloreなどの他のリアクティブなPythonノートブックとのアイデアの相互受粉も楽しんでいます。
IPYFlowでの作業は、直接的な財政的貢献(Databricks、HEX)の形で、および間接的な道徳的支援と励まし(Ponder、Meta)の形で、多くの企業からの人々の支援の恩恵を受けています。そしてもちろん、Ipyflowは、信じられないほどのJupyterコミュニティによって構築された基礎にかかっています。
このプロジェクトのコードは、BSD-3-Clauseライセンスに基づいてライセンスされています。