{ "cells": [ { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "history": [ { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": null }, { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": null }, { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "489d7a82-467a-11e7-aba3-02420aff0006" }, { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "7d68317e-49d3-11e7-9220-02420aff0006", "previous": "489d7a82-467a-11e7-aba3-02420aff0006" }, { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "6e303f18-49dc-11e7-9220-02420aff0006", "previous": "489d7a82-467a-11e7-aba3-02420aff0006" }, { "current": "ab49902a-45ef-11e7-a8e4-0242ac110002", "next": "6e303f18-49dc-11e7-9220-02420aff0006", "previous": null } ], "next": "296c6ee6-4a69-11e7-9e8a-02420aff000a", "previous": null } }, "source": [ "# Literate Computing for Reproducible Infrastructure\n", "\n", "\n", "計算機インフラの御守では種々雑多なドキュメンテーションが不可欠です。日々の作業で証跡を残す、手順を整理して共有・再利用する、ユーザマニュアルや教材を整備する.. 国立情報学研究所(NII)のクラウド運用担当では、これらをシームレスに記述・蓄積する方法を研究しています。\n", "\n", "表題の Literate Computing for Reproducible Infrastructure(以下 「LC4RI」)は、インフラ運用の場面において **機械的に再現できる、人が読み解ける手順** を手段として、過度に自動化に依存することのない、レジリエントな **人間中心の機械化** をめざしています。そこでは、作業を効率化しつつもブラックボックス化せず、作業に対する理解をチーム内でコミュニケーションできる、また、目的と手段の整合性や限界を理解し議論・評価できると言った場を維持することで、ノウハウの移転・共有を促し運用者のスキル向上とエンジニアリングチームの再生産をはかることを重視しています。\n", "\n", "多くの現場では、管理サーバにログインしコンソール上で作業を行う、作業内容や証跡はWiki等に随時転記して共有する.. といった形態が一般的と思います。これに対しLC4RIでは運用管理サーバ上にNotebookサーバを配備し、作業単位毎にNotebookを作成、作業内容やメモを記述しながら随時実行するといった作業形態を推奨しています。作業の証跡を齟齬なく記録する仕組み、過去の作業記録を参照して機械的に再現あるいは流用できる仕組み、機械的に実行できるとともに人が読み解き補完することもできるNotebook手順を整備しています。\n", "\n", "プロジェクトの成果物は GitHub [NII Cloud Operation Team]( https://github.com/NII-cloud-operation )で公開しています。\n", "\n", "---\n", "この Notebook では拡張した機能の概要を紹介します。" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "296c6ee6-4a69-11e7-9e8a-02420aff000a", "next": "6e303f18-49dc-11e7-9220-02420aff0006", "previous": "ab49902a-45ef-11e7-a8e4-0242ac110002" } }, "source": [ "## Jupyter-run_through - まとめ実行機能\n", "\n", "用途:\n", "* 詳細は気にせずNotebook形式の手順を気軽に利用したい。\n", "* 定型的な作業をまとめて実行する。アレンジやカスタマイズはあまり必要がない。\n", "* まとめて実行してエラーが発生した場合には、詳細を確認したい。\n", "\n", " [GitHub: Jupyter-LC_run_through](https://github.com/NII-cloud-operation/Jupyter-LC_run_through)\n", "\n", "---\n", "\n", "**畳み込み表示 と まとめ実行の機能**
\n", "表題の左側にある は、詳細な手順が畳み込まれていることを示しています。 をクリックすると、 に変化し、畳み込まれている内容を表示することができます。\n", "\n", " 畳みこまれている内容に「手順」が含まれていると、右のように表示されます。の数は畳み込まれている手順のステップ数を示しています。\n", "表示から を押すと、配下の手順をまとめて実行することができます。\n", "\n", " すべてのステップが終了すると右のように表示が変化します。実行が完了したステップは薄緑 に表示されます。また、完了したステップは、再度 まとめ実行ボタンをクリックしても実行されないよう凍結 \n", "されます。\n", "\n", " 途中でエラーが発生した場合は当該のステップが薄紅に表示されるので、 をクリックして内容を確認します。\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "lc_cell_meme": { "current": "6e303f18-49dc-11e7-9220-02420aff0006", "history": [ { "current": "6e303f18-49dc-11e7-9220-02420aff0006", "next": "d7b7e932-49d6-11e7-9220-02420aff0006", "previous": "7d68317e-49d3-11e7-9220-02420aff0006" }, { "current": "6e303f18-49dc-11e7-9220-02420aff0006", "next": "d7b7e932-49d6-11e7-9220-02420aff0006", "previous": "ab49902a-45ef-11e7-a8e4-0242ac110002" } ], "next": "d7b7e932-49d6-11e7-9220-02420aff0006", "previous": "296c6ee6-4a69-11e7-9e8a-02420aff000a" } }, "source": [ "### **畳み込んだステップのまとめ実行**\n", "\n", " をクリックすると4ステップをまとめ実行します。実行が終わったステップは薄緑の表示となります。以下の例では3番目がエラーとなり薄紅表示され、実行が中断します。\n", "\n", " をクリックすることで畳み込み表示が解除され、それぞれのステップの実行内容を確認することができます。実行が終わったセルは凍結 \n", "されます、そのままでは実行できません。修正する、再度実行する場合にはウインドウ上部のをクリックすることで凍結を解除します。\n", "\n", "エラーのセルは内容を修正して実行することができます。継続する未実行のセルは、そのまま実行することもできます。" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hidden": true, "lc_cell_meme": { "current": "d7b7e932-49d6-11e7-9220-02420aff0006", "history": [ { "current": "d7b7e932-49d6-11e7-9220-02420aff0006", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "7d68317e-49d3-11e7-9220-02420aff0006" }, { "current": "d7b7e932-49d6-11e7-9220-02420aff0006", "next": "66c5d6fc-49d7-11e7-9220-02420aff0006", "previous": "7d68317e-49d3-11e7-9220-02420aff0006" }, { "current": "d7b7e932-49d6-11e7-9220-02420aff0006", "next": "66c5d6fc-49d7-11e7-9220-02420aff0006", "previous": "3d58721a-49d8-11e7-9220-02420aff0006" }, { "current": "d7b7e932-49d6-11e7-9220-02420aff0006", "next": "66c5d6fc-49d7-11e7-9220-02420aff0006", "previous": "7d68317e-49d3-11e7-9220-02420aff0006" } ], "next": "66c5d6fc-49d7-11e7-9220-02420aff0006", "previous": "6e303f18-49dc-11e7-9220-02420aff0006" } }, "outputs": [], "source": [ "! echo \"This is 1st step\" > foo; cat foo" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hidden": true, "lc_cell_meme": { "current": "66c5d6fc-49d7-11e7-9220-02420aff0006", "history": [ { "current": "66c5d6fc-49d7-11e7-9220-02420aff0006", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "d7b7e932-49d6-11e7-9220-02420aff0006" }, { "current": "66c5d6fc-49d7-11e7-9220-02420aff0006", "next": "ae4c07da-49d7-11e7-9220-02420aff0006", "previous": "d7b7e932-49d6-11e7-9220-02420aff0006" } ], "next": "140ad186-49d9-11e7-9220-02420aff0006", "previous": "d7b7e932-49d6-11e7-9220-02420aff0006" } }, "outputs": [], "source": [ "! echo \".. 2nd step...\" >> foo && cat foo" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hidden": true, "lc_cell_meme": { "current": "140ad186-49d9-11e7-9220-02420aff0006", "history": [ { "current": "140ad186-49d9-11e7-9220-02420aff0006", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "ae4c07da-49d7-11e7-9220-02420aff0006" }, { "current": "140ad186-49d9-11e7-9220-02420aff0006", "next": "a2f3402c-49d9-11e7-9220-02420aff0006", "previous": "ae4c07da-49d7-11e7-9220-02420aff0006" }, { "current": "140ad186-49d9-11e7-9220-02420aff0006", "next": "a2f3402c-49d9-11e7-9220-02420aff0006", "previous": "66c5d6fc-49d7-11e7-9220-02420aff0006" } ], "next": "9e0acf5a-4ba8-11e7-9954-02420aff0008", "previous": "66c5d6fc-49d7-11e7-9220-02420aff0006" } }, "outputs": [], "source": [ "!echooooo \".. 3rd step... will fail\" >> foo && cat foo" ] }, { "cell_type": "markdown", "metadata": { "hidden": true, "lc_cell_meme": { "current": "9e0acf5a-4ba8-11e7-9954-02420aff0008", "next": "a2f3402c-49d9-11e7-9220-02420aff0006", "previous": "140ad186-49d9-11e7-9220-02420aff0006" } }, "source": [ "\"echo\" に修正して実行してみましょう。 " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hidden": true, "lc_cell_meme": { "current": "a2f3402c-49d9-11e7-9220-02420aff0006", "history": [ { "current": "a2f3402c-49d9-11e7-9220-02420aff0006", "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "140ad186-49d9-11e7-9220-02420aff0006" } ], "next": "325b2b76-3f76-11e7-806f-0242ac110002", "previous": "9e0acf5a-4ba8-11e7-9954-02420aff0008" } }, "outputs": [], "source": [ "! cat foo" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "history": [ { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "8f956e50-3c65-11e7-b4fc-0242ac110002", "previous": null }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "8f956e50-3c65-11e7-b4fc-0242ac110002", "previous": "ab49939a-45ef-11e7-a8e4-0242ac110002" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "ab49902a-45ef-11e7-a8e4-0242ac110002" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "8f956e50-3c65-11e7-b4fc-0242ac110002", "previous": "ab49902a-45ef-11e7-a8e4-0242ac110002" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "ab49902a-45ef-11e7-a8e4-0242ac110002" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "7d68317e-49d3-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "d7b7e932-49d6-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "66c5d6fc-49d7-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "ae4c07da-49d7-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "140ad186-49d9-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "ada7f192-45fc-11e7-9f10-02420aff0008", "previous": "a2f3402c-49d9-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "8f91607c-45fb-11e7-9f10-02420aff0008", "previous": "a2f3402c-49d9-11e7-9220-02420aff0006" }, { "current": "325b2b76-3f76-11e7-806f-0242ac110002", "next": "12ba33ce-49e0-11e7-9220-02420aff0006", "previous": "a2f3402c-49d9-11e7-9220-02420aff0006" } ], "next": "8f91607c-45fb-11e7-9f10-02420aff0008", "previous": "a2f3402c-49d9-11e7-9220-02420aff0006" } }, "source": [ "## セルの実行結果の保存と要約表示\n", "\n", "用途:\n", "* Cell単位の実行ログを各々ファイルに常時保存し、後で全体を参照したり、結果を比較できるようにする。\n", "* Output Cell に大量出力される場合に、必要に応じて要約表示する(出力全体は上記の機能によって保存されている)。\n", "\n", " [GitHub: Jupyter-LC_wrapper](https://github.com/NII-cloud-operation/Jupyter-LC_wrapper)\n", "\n", "---\n", "例えば、某かのパッケージ群をインストールしたりすると大量のログが出力されますが、JupyetrのWeb UI上で大量の出力を扱うのはなにかと不便です。 Jupyterの Cell の中でログの内容を検索したり、比較したりするのはまどろっこしく手間がかかります。\n", "\n", "Jupyter-LC_wrapper を用いると:\n", "* 毎回 Cell を実行する度に、出力結果がファイルに保存されます (./notebooks/.log/yyyymmdd/yyyymmdd-hhmmss-xxxx.log)。\n", "* 実行毎に各々のファイルに結果が保存されるので出力結果を比較することができます。\n", "\n", "\n", "* Cellでコマンドを実行する際に先頭に \"!!\" を付加すると、Output Cell には要約された結果が出力されるようになります(デフォルト:50行を超える出力があった場合、最初20行と最後の20行; また、要約表示で shell を実行する場合は \"!!!\" )。\n", "* 要約中でも、エラーなど特定のパターン含む行を表示するので結果の確認が容易です(~/.lc_wrapper_regex.txt などいくつかの方法でカスタマイズ可)。\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "lc_cell_meme": { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "history": [ { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "c219c132-3c6a-11e7-b4fc-0242ac110002", "previous": "480edc34-45fb-11e7-9f10-02420aff0008" }, { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "8f956e50-3c65-11e7-b4fc-0242ac110002" }, { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "325b2b76-3f76-11e7-806f-0242ac110002" }, { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "12ba33ce-49e0-11e7-9220-02420aff0006" }, { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "325b2b76-3f76-11e7-806f-0242ac110002" }, { "current": "8f91607c-45fb-11e7-9f10-02420aff0008", "next": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "previous": "325b2b76-3f76-11e7-806f-0242ac110002" } ], "next": "52addd26-8054-11e9-8f9b-0242ac110002", "previous": "325b2b76-3f76-11e7-806f-0242ac110002" } }, "outputs": [], "source": [ "!!from time import sleep\n", "with open(\"./resources/bootstrap.log\", \"r\") as f:\n", " count = 0\n", " limit = 100\n", " for line in f:\n", " count = count+1\n", " if count > limit: break\n", " print(line,end=''),\n", " sleep(0.05)\n", "print (\"after\", limit, \"lines are ignored\")\n", "#\n", "# ここでは擬似的にログが大量に出力される状況を再現しています\n", "#" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "52addd26-8054-11e9-8f9b-0242ac110002", "next": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "previous": "8f91607c-45fb-11e7-9f10-02420aff0008" } }, "source": [ "ログファイルは 日付毎のディレクトリの下に保存されます。 " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "lc_cell_meme": { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "history": [ { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "8f91607c-45fb-11e7-9f10-02420aff0008" }, { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "eda23c84-8052-11e9-8f9b-0242ac110002", "previous": "8f91607c-45fb-11e7-9f10-02420aff0008" }, { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "8f91607c-45fb-11e7-9f10-02420aff0008" }, { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "52addd26-8054-11e9-8f9b-0242ac110002" }, { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "9a33e9b0-8054-11e9-8f9b-0242ac110002", "previous": "52addd26-8054-11e9-8f9b-0242ac110002" }, { "current": "5e05fe9e-8052-11e9-8f9b-0242ac110002", "next": "ab49925a-45ef-11e7-a8e4-0242ac110002", "previous": "52addd26-8054-11e9-8f9b-0242ac110002" } ], "next": "1c09f9d2-8057-11e9-8f9b-0242ac110002", "previous": "52addd26-8054-11e9-8f9b-0242ac110002" } }, "outputs": [], "source": [ "!ls -laR .log/`date \"+%Y%m%d\"`" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "1c09f9d2-8057-11e9-8f9b-0242ac110002", "history": [ { "current": "1c09f9d2-8057-11e9-8f9b-0242ac110002", "next": "d65dc74c-8056-11e9-8f9b-0242ac110002", "previous": "5e05fe9e-8052-11e9-8f9b-0242ac110002" }, { "current": "1c09f9d2-8057-11e9-8f9b-0242ac110002", "next": "630519ca-8066-11e9-a0d7-0242ac110002", "previous": "5e05fe9e-8052-11e9-8f9b-0242ac110002" } ], "next": "aa896968-8066-11e9-a0d7-0242ac110002", "previous": "5e05fe9e-8052-11e9-8f9b-0242ac110002" } }, "source": [ "## セル実行結果の pin 留め" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "lc_cell_meme": { "current": "aa896968-8066-11e9-a0d7-0242ac110002", "history": [ { "current": "aa896968-8066-11e9-a0d7-0242ac110002", "next": "d65dc74c-8056-11e9-8f9b-0242ac110002", "previous": "1c09f9d2-8057-11e9-8f9b-0242ac110002" } ], "next": "f20f2f34-8066-11e9-a0d7-0242ac110002", "previous": "1c09f9d2-8057-11e9-8f9b-0242ac110002" } }, "outputs": [], "source": [ "import pandas\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import random" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "lc_cell_meme": { "current": "f20f2f34-8066-11e9-a0d7-0242ac110002", "next": "f20f309c-8066-11e9-a0d7-0242ac110002", "previous": "aa896968-8066-11e9-a0d7-0242ac110002" } }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "lc_cell_meme": { "current": "f20f309c-8066-11e9-a0d7-0242ac110002", "next": "f20f3132-8066-11e9-a0d7-0242ac110002", "previous": "f20f2f34-8066-11e9-a0d7-0242ac110002" }, "pinned_outputs": [ { "execution_count": 4, "outputs": [ { "data": { "text/plain": "" }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": "
" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ] } ] }, "outputs": [], "source": [ "plot_df = pandas.DataFrame({\n", " 'col1': [1, 3, random.randint(1,10), 4],\n", " 'col2': [3, random.randint(5,10), 5, 1],\n", " 'col3': [4, 7, 6, 2],\n", "})\n", "\n", "plot_df.plot()" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "f20f3132-8066-11e9-a0d7-0242ac110002", "next": "d65dc74c-8056-11e9-8f9b-0242ac110002", "previous": "f20f309c-8066-11e9-a0d7-0242ac110002" } }, "source": [ "Output Cell の左側に表示されている をクリックすると、出力内容をタブとして保存することができます。" ] }, { "cell_type": "markdown", "metadata": { "lc_cell_meme": { "current": "d65dc74c-8056-11e9-8f9b-0242ac110002", "history": [ { "current": "d65dc74c-8056-11e9-8f9b-0242ac110002", "next": null, "previous": "56854f66-4ba8-11e7-9954-02420aff0008" }, { "current": "d65dc74c-8056-11e9-8f9b-0242ac110002", "next": null, "previous": "1c09f9d2-8057-11e9-8f9b-0242ac110002" }, { "current": "d65dc74c-8056-11e9-8f9b-0242ac110002", "next": null, "previous": "630519ca-8066-11e9-a0d7-0242ac110002" }, { "current": "d65dc74c-8056-11e9-8f9b-0242ac110002", "next": null, "previous": "aa896968-8066-11e9-a0d7-0242ac110002" } ], "next": null, "previous": "f20f3132-8066-11e9-a0d7-0242ac110002" } }, "source": [ "## 参考\n", " [Jupyter-code_cell_status](https://github.com/NII-cloud-operation/Jupyter-code_cell_status)\n", "\n", " [Jupyter-multi-outputs](https://github.com/NII-cloud-operation/Jupyter-multi_outputs)\n", "\n", " [Jupyter-LC_nblineage](https://github.com/NII-cloud-operation/Jupyter-LC_nblineage)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (LC_wrapper)", "language": "python", "name": "python3-wrapper" }, "language_info": { "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "lc_notebook_meme": { "current": "29f2fd34-3c64-11e7-b4fc-0242ac110002", "lc_server_signature": { "current": { "notebook_dir": "/home/jovyan", "notebook_path": "/", "server_url": "http://localhost:8000/", "signature_id": "345312fe-8060-11e9-a0d7-0242ac110002" }, "history": [] } }, "toc": { "base_numbering": 1, "nav_menu": { "height": "12px", "width": "252px" }, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }