diff --git a/docs/source/development/figs/notebook_components.png b/docs/source/development/figs/notebook_components.png new file mode 100644 index 0000000000000000000000000000000000000000..3546dc5886887c823a695bd7bcc638d9fb6bb09f GIT binary patch literal 26567 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 literal 0 Hc$@<O00001 diff --git a/docs/source/development/figs/notebook_components.svg b/docs/source/development/figs/notebook_components.svg new file mode 100644 index 0000000..ca42937 --- /dev/null +++ b/docs/source/development/figs/notebook_components.svg @@ -0,0 +1,474 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="711.70575" + height="401.44141" + id="svg2" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="notebook_components.svg" + inkscape:export-filename="/home/takluyver/Code/ipython/docs/source/development/figs/notebook_components.png" + inkscape:export-xdpi="80" + inkscape:export-ydpi="80"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend" + style="overflow:visible"> + <path + id="path3966" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3945" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3948" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-2" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path3966-2" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-6" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path3966-4" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker5355" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path5357" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker5355-3" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path5357-0" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-3" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path3966-1" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker5355-33" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path5357-7" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-69" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path3966-3" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker5355-0" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path5357-5" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-8" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path3966-32" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.98994949" + inkscape:cx="414.30751" + inkscape:cy="88.902823" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1680" + inkscape:window-height="1014" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + fit-margin-top="1" + fit-margin-left="1" + fit-margin-right="1" + fit-margin-bottom="1" + units="cm" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(16.616428,19.440029)"> + <g + id="g3811" + transform="translate(-35.878169,-100.12183)"> + <path + transform="translate(8.0812186,26.049684)" + d="m 98.994951,154.33656 c 0,7.2526 -5.879389,13.13199 -13.131983,13.13199 -7.252593,0 -13.131982,-5.87939 -13.131982,-13.13199 0,-7.25259 5.879389,-13.13198 13.131982,-13.13198 7.252594,0 13.131983,5.87939 13.131983,13.13198 z" + sodipodi:ry="13.131983" + sodipodi:rx="13.131983" + sodipodi:cy="154.33656" + sodipodi:cx="85.862968" + id="path3755" + style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="arc" /> + <path + inkscape:connector-curvature="0" + id="path3757" + d="m 93.944187,193.73252 0,69.70052" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path3759" + d="m 70.205601,211.91526 47.477169,0" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3761" + d="m 75.691891,294.16241 17.96658,-30.72937" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3761-3" + d="M 112.10981,294.16241 94.143243,263.43304" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5730" + transform="translate(-48,-88)"> + <rect + ry="17.142857" + y="186.6479" + x="198.57143" + height="78.571426" + width="130" + id="rect3818" + style="fill:#e3d7f4;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <text + sodipodi:linespacing="125%" + id="text3820" + y="235.79105" + x="210.28529" + style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + y="235.79105" + x="210.28529" + id="tspan3822" + sodipodi:role="line">Browser</tspan></text> + </g> + <g + id="g5719" + transform="translate(-48,-88)"> + <rect + ry="17.142857" + y="186.6479" + x="387.62143" + height="78.571426" + width="130" + id="rect3818-6" + style="fill:#e3f4d7;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <text + sodipodi:linespacing="125%" + id="text3820-1" + y="219.43362" + x="451.40903" + style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + style="font-size:26px" + y="219.43362" + x="451.40903" + id="tspan3822-0" + sodipodi:role="line">Notebook</tspan><tspan + style="font-size:26px" + id="tspan3870" + y="251.93362" + x="451.40903" + sodipodi:role="line">server</tspan></text> + </g> + <g + id="g5725" + transform="translate(-48,-88)"> + <rect + ry="17.142857" + y="186.6479" + x="576.67145" + height="78.571426" + width="130" + id="rect3818-3" + style="fill:#e3f4d7;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <text + sodipodi:linespacing="125%" + id="text3820-2" + y="236.43361" + x="600.9361" + style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + y="236.43361" + x="600.9361" + id="tspan3822-3" + sodipodi:role="line">Kernel</tspan></text> + </g> + <g + id="g3931" + transform="matrix(0.74285712,0,0,0.74285712,111.19287,-38.812036)"> + <path + sodipodi:nodetypes="cccccc" + inkscape:connector-curvature="0" + id="rect2993" + d="m 346.23657,370.02731 78.76344,0 18.76344,18.76345 0,128.76344 -97.52688,0 z" + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.47311282;stroke-miterlimit:4;stroke-opacity:1" /> + <text + transform="matrix(0,-1,1,0,0,0)" + sodipodi:linespacing="125%" + id="text2996" + y="388" + x="-445.09641" + style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + y="388" + x="-445.09641" + id="tspan2998" + sodipodi:role="line">Notebook</tspan><tspan + id="tspan3929" + y="423" + x="-445.09641" + sodipodi:role="line">file</tspan></text> + </g> + <g + id="g5575" + transform="translate(-48,-86.605048)"> + <path + inkscape:connector-curvature="0" + id="path3939" + d="m 140.51539,230.56085 55.71428,0" + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" /> + <path + inkscape:connector-curvature="0" + id="path3939-1" + d="m 197.88571,218.51648 -55.71428,0" + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" /> + </g> + <text + xml:space="preserve" + style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + x="-178.41751" + y="41.691643" + id="text5579" + sodipodi:linespacing="125%" + transform="matrix(0,-1,1,0,0,0)"><tspan + sodipodi:role="line" + id="tspan5581" + x="-178.41751" + y="41.691643">User</tspan></text> + <g + transform="matrix(0,1,-1,0,629.1601,37.48252)" + id="g5575-1-4-9"> + <path + inkscape:connector-curvature="0" + id="path3939-3-2-0" + d="m 140.51539,230.56085 55.71428,0" + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" /> + <path + inkscape:connector-curvature="0" + id="path3939-1-4-3-6" + d="m 197.88571,218.51648 -55.71428,0" + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" /> + </g> + <g + id="g5781" + transform="translate(-48,-88)"> + <g + id="g5575-1-4" + transform="translate(377.94589,1.3949516)"> + <path + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" + d="m 140.51539,230.56085 55.71428,0" + id="path3939-3-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" + d="m 197.88571,218.51648 -55.71428,0" + id="path3939-1-4-3" + inkscape:connector-curvature="0" /> + </g> + <text + transform="matrix(0,-1,1,0,0,0)" + sodipodi:linespacing="125%" + id="text5735" + y="552.92767" + x="-210.12585" + style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + y="552.92767" + x="-210.12585" + id="tspan5737" + sodipodi:role="line">ØMQ</tspan></text> + </g> + <g + id="g5788" + transform="translate(-48,-88)"> + <g + id="g5575-1" + transform="translate(188.89588,1.3949516)"> + <path + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" + d="m 140.51539,230.56085 55.71428,0" + id="path3939-3" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" + d="m 197.88571,218.51648 -55.71428,0" + id="path3939-1-4" + inkscape:connector-curvature="0" /> + </g> + <text + transform="matrix(0,-1,1,0,0,0)" + sodipodi:linespacing="125%" + id="text5735-1" + y="352.74976" + x="-209.10046" + style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" + xml:space="preserve"><tspan + y="352.74976" + x="-209.10046" + id="tspan5737-1" + sodipodi:role="line">HTTP &</tspan><tspan + id="tspan5760" + y="377.74976" + x="-209.10046" + sodipodi:role="line">Websockets</tspan></text> + </g> + </g> +</svg> diff --git a/docs/source/development/how_ipython_works.rst b/docs/source/development/how_ipython_works.rst index e1daa33..c2856f3 100644 --- a/docs/source/development/how_ipython_works.rst +++ b/docs/source/development/how_ipython_works.rst @@ -62,7 +62,7 @@ called a notebook. When you save it, this is sent from your browser to the notebook server, which saves it on disk as a JSON file with a ``.ipynb`` extension. -.. TODO: Diagram of how these pieces fit together. +.. image:: figs/notebook_components.png The notebook server, not the kernel, is responsible for saving and loading notebooks, so you can edit notebooks even if you don't have the kernel for that