##// END OF EJS Templates
s/prompt_number/execution_count in nbformat 4
MinRK -
Show More
@@ -60,7 +60,7 b' class APITest(NotebookTestBase):'
60 cc1.outputs.append(new_output(output_type="stream", data=u'12'))
60 cc1.outputs.append(new_output(output_type="stream", data=u'12'))
61 cc1.outputs.append(new_output(output_type="execute_result",
61 cc1.outputs.append(new_output(output_type="execute_result",
62 mime_bundle={'image/png' : png_green_pixel},
62 mime_bundle={'image/png' : png_green_pixel},
63 prompt_number=1,
63 execution_count=1,
64 ))
64 ))
65 nb.cells.append(cc1)
65 nb.cells.append(cc1)
66
66
@@ -471,7 +471,7 b' define(['
471 this.code_mirror.clearHistory();
471 this.code_mirror.clearHistory();
472 this.auto_highlight();
472 this.auto_highlight();
473 }
473 }
474 this.set_input_prompt(data.prompt_number);
474 this.set_input_prompt(data.execution_count);
475 this.output_area.trusted = data.metadata.trusted || false;
475 this.output_area.trusted = data.metadata.trusted || false;
476 this.output_area.fromJSON(data.outputs);
476 this.output_area.fromJSON(data.outputs);
477 if (data.metadata.collapsed !== undefined) {
477 if (data.metadata.collapsed !== undefined) {
@@ -490,9 +490,9 b' define(['
490 data.source = this.get_text();
490 data.source = this.get_text();
491 // is finite protect against undefined and '*' value
491 // is finite protect against undefined and '*' value
492 if (isFinite(this.input_prompt_number)) {
492 if (isFinite(this.input_prompt_number)) {
493 data.prompt_number = this.input_prompt_number;
493 data.execution_count = this.input_prompt_number;
494 } else {
494 } else {
495 data.prompt_number = null;
495 data.execution_count = null;
496 }
496 }
497 var outputs = this.output_area.toJSON();
497 var outputs = this.output_area.toJSON();
498 data.outputs = outputs;
498 data.outputs = outputs;
@@ -220,7 +220,7 b' define(['
220 json = content.data;
220 json = content.data;
221 json.output_type = msg_type;
221 json.output_type = msg_type;
222 json.metadata = content.metadata;
222 json.metadata = content.metadata;
223 json.prompt_number = content.execution_count;
223 json.execution_count = content.execution_count;
224 } else if (msg_type === "error") {
224 } else if (msg_type === "error") {
225 json.ename = content.ename;
225 json.ename = content.ename;
226 json.evalue = content.evalue;
226 json.evalue = content.evalue;
@@ -414,7 +414,7 b' define(['
414
414
415
415
416 OutputArea.prototype.append_execute_result = function (json) {
416 OutputArea.prototype.append_execute_result = function (json) {
417 var n = json.prompt_number || ' ';
417 var n = json.execution_count || ' ';
418 var toinsert = this.create_output_area();
418 var toinsert = this.create_output_area();
419 if (this.prompt_area) {
419 if (this.prompt_area) {
420 toinsert.find('div.prompt').addClass('output_prompt').text('Out[' + n + ']:');
420 toinsert.find('div.prompt').addClass('output_prompt').text('Out[' + n + ']:');
@@ -13,7 +13,7 b' casper.notebook_test(function () {'
13 this.evaluate(function () {
13 this.evaluate(function () {
14 var cell = IPython.notebook.get_cell(0);
14 var cell = IPython.notebook.get_cell(0);
15 var json = cell.toJSON();
15 var json = cell.toJSON();
16 json.prompt_number = "<script> alert('hello from input prompts !')</script>";
16 json.execution_count = "<script> alert('hello from input prompts !')</script>";
17 cell.fromJSON(json);
17 cell.fromJSON(json);
18 });
18 });
19
19
@@ -17,6 +17,7 b''
17 },
17 },
18 {
18 {
19 "cell_type": "code",
19 "cell_type": "code",
20 "execution_count": 1,
20 "metadata": {
21 "metadata": {
21 "collapsed": false
22 "collapsed": false
22 },
23 },
@@ -28,18 +29,17 b''
28 "text": "\nWelcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\nFor more information, type 'help(pylab)'.\n"
29 "text": "\nWelcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\nFor more information, type 'help(pylab)'.\n"
29 }
30 }
30 ],
31 ],
31 "prompt_number": 1,
32 "source": [
32 "source": [
33 "%pylab inline"
33 "%pylab inline"
34 ]
34 ]
35 },
35 },
36 {
36 {
37 "cell_type": "code",
37 "cell_type": "code",
38 "execution_count": 2,
38 "metadata": {
39 "metadata": {
39 "collapsed": false
40 "collapsed": false
40 },
41 },
41 "outputs": [],
42 "outputs": [],
42 "prompt_number": 2,
43 "source": [
43 "source": [
44 "import numpy as np"
44 "import numpy as np"
45 ]
45 ]
@@ -53,62 +53,62 b''
53 },
53 },
54 {
54 {
55 "cell_type": "code",
55 "cell_type": "code",
56 "execution_count": 6,
56 "metadata": {
57 "metadata": {
57 "collapsed": false
58 "collapsed": false
58 },
59 },
59 "outputs": [],
60 "outputs": [],
60 "prompt_number": 6,
61 "source": [
61 "source": [
62 "a = np.random.uniform(size=(100,100))"
62 "a = np.random.uniform(size=(100,100))"
63 ]
63 ]
64 },
64 },
65 {
65 {
66 "cell_type": "code",
66 "cell_type": "code",
67 "execution_count": 7,
67 "metadata": {
68 "metadata": {
68 "collapsed": false
69 "collapsed": false
69 },
70 },
70 "outputs": [
71 "outputs": [
71 {
72 {
73 "execution_count": 7,
72 "metadata": {},
74 "metadata": {},
73 "output_type": "execute_result",
75 "output_type": "execute_result",
74 "prompt_number": 7,
75 "text/plain": [
76 "text/plain": [
76 "(100, 100)"
77 "(100, 100)"
77 ]
78 ]
78 }
79 }
79 ],
80 ],
80 "prompt_number": 7,
81 "source": [
81 "source": [
82 "a.shape"
82 "a.shape"
83 ]
83 ]
84 },
84 },
85 {
85 {
86 "cell_type": "code",
86 "cell_type": "code",
87 "execution_count": 8,
87 "metadata": {
88 "metadata": {
88 "collapsed": false
89 "collapsed": false
89 },
90 },
90 "outputs": [],
91 "outputs": [],
91 "prompt_number": 8,
92 "source": [
92 "source": [
93 "evs = np.linalg.eigvals(a)"
93 "evs = np.linalg.eigvals(a)"
94 ]
94 ]
95 },
95 },
96 {
96 {
97 "cell_type": "code",
97 "cell_type": "code",
98 "execution_count": 10,
98 "metadata": {
99 "metadata": {
99 "collapsed": false
100 "collapsed": false
100 },
101 },
101 "outputs": [
102 "outputs": [
102 {
103 {
104 "execution_count": 10,
103 "metadata": {},
105 "metadata": {},
104 "output_type": "execute_result",
106 "output_type": "execute_result",
105 "prompt_number": 10,
106 "text/plain": [
107 "text/plain": [
107 "(100,)"
108 "(100,)"
108 ]
109 ]
109 }
110 }
110 ],
111 ],
111 "prompt_number": 10,
112 "source": [
112 "source": [
113 "evs.shape"
113 "evs.shape"
114 ]
114 ]
@@ -122,14 +122,15 b''
122 },
122 },
123 {
123 {
124 "cell_type": "code",
124 "cell_type": "code",
125 "execution_count": 14,
125 "metadata": {
126 "metadata": {
126 "collapsed": false
127 "collapsed": false
127 },
128 },
128 "outputs": [
129 "outputs": [
129 {
130 {
131 "execution_count": 14,
130 "metadata": {},
132 "metadata": {},
131 "output_type": "execute_result",
133 "output_type": "execute_result",
132 "prompt_number": 14,
133 "text/plain": [
134 "text/plain": [
134 "(array([95, 4, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
135 "(array([95, 4, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
135 " array([ -2.93566063, 2.35937011, 7.65440086, 12.9494316 ,\n",
136 " array([ -2.93566063, 2.35937011, 7.65440086, 12.9494316 ,\n",
@@ -147,18 +148,17 b''
147 ]
148 ]
148 }
149 }
149 ],
150 ],
150 "prompt_number": 14,
151 "source": [
151 "source": [
152 "hist(evs.real)"
152 "hist(evs.real)"
153 ]
153 ]
154 },
154 },
155 {
155 {
156 "cell_type": "code",
156 "cell_type": "code",
157 "execution_count": null,
157 "metadata": {
158 "metadata": {
158 "collapsed": false
159 "collapsed": false
159 },
160 },
160 "outputs": [],
161 "outputs": [],
161 "prompt_number": null,
162 "source": []
162 "source": []
163 }
163 }
164 ],
164 ],
@@ -3,16 +3,8 b''
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 #-----------------------------------------------------------------------------
7 # Imports
8 #-----------------------------------------------------------------------------
9
10 from .base import Preprocessor
6 from .base import Preprocessor
11
7
12
13 #-----------------------------------------------------------------------------
14 # Classes
15 #-----------------------------------------------------------------------------
16 class ClearOutputPreprocessor(Preprocessor):
8 class ClearOutputPreprocessor(Preprocessor):
17 """
9 """
18 Removes the output from all code cells in a notebook.
10 Removes the output from all code cells in a notebook.
@@ -24,5 +16,5 b' class ClearOutputPreprocessor(Preprocessor):'
24 """
16 """
25 if cell.cell_type == 'code':
17 if cell.cell_type == 'code':
26 cell.outputs = []
18 cell.outputs = []
27 cell.prompt_number = None
19 cell.execution_count = None
28 return cell, resources
20 return cell, resources
@@ -88,8 +88,7 b' class ExecutePreprocessor(Preprocessor):'
88
88
89 # set the prompt number for the input and the output
89 # set the prompt number for the input and the output
90 if 'execution_count' in content:
90 if 'execution_count' in content:
91 cell['prompt_number'] = content['execution_count']
91 cell['execution_count'] = content['execution_count']
92 out.prompt_number = content['execution_count']
93
92
94 if msg_type == 'status':
93 if msg_type == 'status':
95 if content['execution_state'] == 'idle':
94 if content['execution_state'] == 'idle':
@@ -101,8 +100,6 b' class ExecutePreprocessor(Preprocessor):'
101 elif msg_type == 'clear_output':
100 elif msg_type == 'clear_output':
102 outs = []
101 outs = []
103 continue
102 continue
104 elif msg_type == 'execute_result':
105 cell['prompt_number'] = content['execution_count']
106
103
107 try:
104 try:
108 out = output_from_msg(msg)
105 out = output_from_msg(msg)
@@ -27,7 +27,7 b' class PreprocessorTestsBase(TestsBase):'
27 out['application/pdf'] = 'aA=='
27 out['application/pdf'] = 'aA=='
28 outputs.append(out)
28 outputs.append(out)
29
29
30 cells=[nbformat.new_code_cell(source="$ e $", prompt_number=1, outputs=outputs),
30 cells=[nbformat.new_code_cell(source="$ e $", execution_count=1, outputs=outputs),
31 nbformat.new_markdown_cell(source="$ e $")]
31 nbformat.new_markdown_cell(source="$ e $")]
32
32
33 return nbformat.new_notebook(cells=cells)
33 return nbformat.new_notebook(cells=cells)
@@ -2,17 +2,18 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
8 "outputs": [],
9 "outputs": [],
9 "prompt_number": 1,
10 "source": [
10 "source": [
11 "from IPython.display import clear_output"
11 "from IPython.display import clear_output"
12 ]
12 ]
13 },
13 },
14 {
14 {
15 "cell_type": "code",
15 "cell_type": "code",
16 "execution_count": 2,
16 "metadata": {
17 "metadata": {
17 "collapsed": false
18 "collapsed": false
18 },
19 },
@@ -24,7 +25,6 b''
24 "text": "9\n"
25 "text": "9\n"
25 }
26 }
26 ],
27 ],
27 "prompt_number": 2,
28 "source": [
28 "source": [
29 "for i in range(10):\n",
29 "for i in range(10):\n",
30 " clear_output()\n",
30 " clear_output()\n",
@@ -2,17 +2,18 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
8 "outputs": [],
9 "outputs": [],
9 "prompt_number": 1,
10 "source": [
10 "source": [
11 "i, j = 1, 1"
11 "i, j = 1, 1"
12 ]
12 ]
13 },
13 },
14 {
14 {
15 "cell_type": "code",
15 "cell_type": "code",
16 "execution_count": 2,
16 "metadata": {
17 "metadata": {
17 "collapsed": false
18 "collapsed": false
18 },
19 },
@@ -24,7 +25,6 b''
24 "text": "2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n"
25 "text": "2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n"
25 }
26 }
26 ],
27 ],
27 "prompt_number": 2,
28 "source": [
28 "source": [
29 "for m in range(10):\n",
29 "for m in range(10):\n",
30 " i, j = j, i + j\n",
30 " i, j = j, i + j\n",
@@ -2,6 +2,7 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
@@ -13,7 +14,6 b''
13 "text": "Hello World\n"
14 "text": "Hello World\n"
14 }
15 }
15 ],
16 ],
16 "prompt_number": 1,
17 "source": [
17 "source": [
18 "print(\"Hello World\")"
18 "print(\"Hello World\")"
19 ]
19 ]
@@ -2,22 +2,22 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
8 "outputs": [],
9 "outputs": [],
9 "prompt_number": 1,
10 "source": [
10 "source": [
11 "from IPython.display import Image"
11 "from IPython.display import Image"
12 ]
12 ]
13 },
13 },
14 {
14 {
15 "cell_type": "code",
15 "cell_type": "code",
16 "execution_count": 2,
16 "metadata": {
17 "metadata": {
17 "collapsed": false
18 "collapsed": false
18 },
19 },
19 "outputs": [],
20 "outputs": [],
20 "prompt_number": 2,
21 "source": [
21 "source": [
22 "Image('../input/python.png');"
22 "Image('../input/python.png');"
23 ]
23 ]
@@ -2,22 +2,24 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
8 "outputs": [],
9 "outputs": [],
9 "prompt_number": 1,
10 "source": [
10 "source": [
11 "from IPython.display import SVG"
11 "from IPython.display import SVG"
12 ]
12 ]
13 },
13 },
14 {
14 {
15 "cell_type": "code",
15 "cell_type": "code",
16 "execution_count": 2,
16 "metadata": {
17 "metadata": {
17 "collapsed": false
18 "collapsed": false
18 },
19 },
19 "outputs": [
20 "outputs": [
20 {
21 {
22 "execution_count": 2,
21 "image/svg+xml": [
23 "image/svg+xml": [
22 "<svg height=\"100\" width=\"100\">\n",
24 "<svg height=\"100\" width=\"100\">\n",
23 " <circle cx=\"50\" cy=\"50\" fill=\"red\" r=\"40\" stroke=\"black\" stroke-width=\"2\"/>\n",
25 " <circle cx=\"50\" cy=\"50\" fill=\"red\" r=\"40\" stroke=\"black\" stroke-width=\"2\"/>\n",
@@ -25,13 +27,11 b''
25 ],
27 ],
26 "metadata": {},
28 "metadata": {},
27 "output_type": "execute_result",
29 "output_type": "execute_result",
28 "prompt_number": 2,
29 "text/plain": [
30 "text/plain": [
30 "<IPython.core.display.SVG object>"
31 "<IPython.core.display.SVG object>"
31 ]
32 ]
32 }
33 }
33 ],
34 ],
34 "prompt_number": 2,
35 "source": [
35 "source": [
36 "SVG(data='''\n",
36 "SVG(data='''\n",
37 "<svg height=\"100\" width=\"100\">\n",
37 "<svg height=\"100\" width=\"100\">\n",
@@ -2,6 +2,7 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
@@ -19,13 +20,13 b''
19 ]
20 ]
20 }
21 }
21 ],
22 ],
22 "prompt_number": 1,
23 "source": [
23 "source": [
24 "raise Exception(\"message\")"
24 "raise Exception(\"message\")"
25 ]
25 ]
26 },
26 },
27 {
27 {
28 "cell_type": "code",
28 "cell_type": "code",
29 "execution_count": 2,
29 "metadata": {
30 "metadata": {
30 "collapsed": false
31 "collapsed": false
31 },
32 },
@@ -37,7 +38,6 b''
37 "text": "ok\n"
38 "text": "ok\n"
38 }
39 }
39 ],
40 ],
40 "prompt_number": 2,
41 "source": [
41 "source": [
42 "print('ok')"
42 "print('ok')"
43 ]
43 ]
@@ -2,6 +2,7 b''
2 "cells": [
2 "cells": [
3 {
3 {
4 "cell_type": "code",
4 "cell_type": "code",
5 "execution_count": 1,
5 "metadata": {
6 "metadata": {
6 "collapsed": false
7 "collapsed": false
7 },
8 },
@@ -13,7 +14,6 b''
13 "text": "\u2603\n"
14 "text": "\u2603\n"
14 }
15 }
15 ],
16 ],
16 "prompt_number": 1,
17 "source": [
17 "source": [
18 "print('\u2603')"
18 "print('\u2603')"
19 ]
19 ]
@@ -32,4 +32,4 b' class TestClearOutput(PreprocessorTestsBase):'
32 preprocessor = self.build_preprocessor()
32 preprocessor = self.build_preprocessor()
33 nb, res = preprocessor(nb, res)
33 nb, res = preprocessor(nb, res)
34 assert nb.cells[0].outputs == []
34 assert nb.cells[0].outputs == []
35 assert nb.cells[0].prompt_number is None
35 assert nb.cells[0].execution_count is None
@@ -33,7 +33,7 b' class TestCoalesceStreams(PreprocessorTestsBase):'
33 nbformat.new_output(output_type="stream", name="stdout", text="5"),
33 nbformat.new_output(output_type="stream", name="stdout", text="5"),
34 nbformat.new_output(output_type="stream", name="stdout", text="6"),
34 nbformat.new_output(output_type="stream", name="stdout", text="6"),
35 nbformat.new_output(output_type="stream", name="stdout", text="7")]
35 nbformat.new_output(output_type="stream", name="stdout", text="7")]
36 cells=[nbformat.new_code_cell(source="# None", prompt_number=1,outputs=outputs)]
36 cells=[nbformat.new_code_cell(source="# None", execution_count=1,outputs=outputs)]
37
37
38 nb = nbformat.new_notebook(cells=cells)
38 nb = nbformat.new_notebook(cells=cells)
39 res = self.build_resources()
39 res = self.build_resources()
@@ -49,7 +49,7 b' class TestCoalesceStreams(PreprocessorTestsBase):'
49 nbformat.new_output(output_type="stream", name="stdout", text="\nz"),
49 nbformat.new_output(output_type="stream", name="stdout", text="\nz"),
50 nbformat.new_output(output_type="stream", name="stdout", text="\rc\n"),
50 nbformat.new_output(output_type="stream", name="stdout", text="\rc\n"),
51 nbformat.new_output(output_type="stream", name="stdout", text="z\rz\rd")]
51 nbformat.new_output(output_type="stream", name="stdout", text="z\rz\rd")]
52 cells=[nbformat.new_code_cell(source="# None", prompt_number=1,outputs=outputs)]
52 cells=[nbformat.new_code_cell(source="# None", execution_count=1,outputs=outputs)]
53
53
54 nb = nbformat.new_notebook(cells=cells)
54 nb = nbformat.new_notebook(cells=cells)
55 res = self.build_resources()
55 res = self.build_resources()
@@ -53,9 +53,9 b' class TestExecute(PreprocessorTestsBase):'
53 normalized_actual_outputs = list(map(self.normalize_output, actual_outputs))
53 normalized_actual_outputs = list(map(self.normalize_output, actual_outputs))
54 assert normalized_expected_outputs == normalized_actual_outputs
54 assert normalized_expected_outputs == normalized_actual_outputs
55
55
56 expected_prompt_number = expected_cell.get('prompt_number', None)
56 expected_execution_count = expected_cell.get('execution_count', None)
57 actual_prompt_number = actual_cell.get('prompt_number', None)
57 actual_execution_count = actual_cell.get('execution_count', None)
58 assert expected_prompt_number == actual_prompt_number
58 assert expected_execution_count == actual_execution_count
59
59
60
60
61 def build_preprocessor(self):
61 def build_preprocessor(self):
@@ -81,8 +81,8 b' class TestExecute(PreprocessorTestsBase):'
81 preprocessor = self.build_preprocessor()
81 preprocessor = self.build_preprocessor()
82 cleaned_input_nb = copy.deepcopy(input_nb)
82 cleaned_input_nb = copy.deepcopy(input_nb)
83 for cell in cleaned_input_nb.cells:
83 for cell in cleaned_input_nb.cells:
84 if 'prompt_number' in cell:
84 if 'execution_count' in cell:
85 del cell['prompt_number']
85 del cell['execution_count']
86 cell['outputs'] = []
86 cell['outputs'] = []
87 output_nb, _ = preprocessor(cleaned_input_nb, res)
87 output_nb, _ = preprocessor(cleaned_input_nb, res)
88 self.assert_notebooks_equal(output_nb, input_nb)
88 self.assert_notebooks_equal(output_nb, input_nb)
@@ -21,9 +21,9 b' class Testrevealhelp(PreprocessorTestsBase):'
21 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
21 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
22 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
22 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
23
23
24 cells=[nbformat.new_code_cell(source="", prompt_number=1, outputs=outputs),
24 cells=[nbformat.new_code_cell(source="", execution_count=1, outputs=outputs),
25 nbformat.new_markdown_cell(source="", metadata=slide_metadata),
25 nbformat.new_markdown_cell(source="", metadata=slide_metadata),
26 nbformat.new_code_cell(source="", prompt_number=2, outputs=outputs),
26 nbformat.new_code_cell(source="", execution_count=2, outputs=outputs),
27 nbformat.new_markdown_cell(source="", metadata=slide_metadata),
27 nbformat.new_markdown_cell(source="", metadata=slide_metadata),
28 nbformat.new_markdown_cell(source="", metadata=subslide_metadata)]
28 nbformat.new_markdown_cell(source="", metadata=subslide_metadata)]
29
29
@@ -47,7 +47,7 b' class Testsvg2pdf(PreprocessorTestsBase):'
47 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
47 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
48 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
48 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
49
49
50 cells=[nbformat.new_code_cell(source="", prompt_number=1, outputs=outputs)]
50 cells=[nbformat.new_code_cell(source="", execution_count=1, outputs=outputs)]
51
51
52 return nbformat.new_notebook(cells=cells)
52 return nbformat.new_notebook(cells=cells)
53
53
@@ -23,8 +23,8 b''
23
23
24 {% block in_prompt -%}
24 {% block in_prompt -%}
25 <div class="prompt input_prompt">
25 <div class="prompt input_prompt">
26 {%- if cell.prompt_number is defined -%}
26 {%- if cell.execution_count is defined -%}
27 In&nbsp;[{{ cell.prompt_number|replace(None, "&nbsp;") }}]:
27 In&nbsp;[{{ cell.execution_count|replace(None, "&nbsp;") }}]:
28 {%- else -%}
28 {%- else -%}
29 In&nbsp;[&nbsp;]:
29 In&nbsp;[&nbsp;]:
30 {%- endif -%}
30 {%- endif -%}
@@ -55,8 +55,8 b' In&nbsp;[&nbsp;]:'
55 <div class="output_area">
55 <div class="output_area">
56 {%- if output.output_type == 'execute_result' -%}
56 {%- if output.output_type == 'execute_result' -%}
57 <div class="prompt output_prompt">
57 <div class="prompt output_prompt">
58 {%- if cell.prompt_number is defined -%}
58 {%- if cell.execution_count is defined -%}
59 Out[{{ cell.prompt_number|replace(None, "&nbsp;") }}]:
59 Out[{{ cell.execution_count|replace(None, "&nbsp;") }}]:
60 {%- else -%}
60 {%- else -%}
61 Out[&nbsp;]:
61 Out[&nbsp;]:
62 {%- endif -%}
62 {%- endif -%}
@@ -20,7 +20,7 b''
20 ((*- if type in ['text']*))
20 ((*- if type in ['text']*))
21 ((( add_prompt(output.text, cell, 'Out') )))
21 ((( add_prompt(output.text, cell, 'Out') )))
22 ((*- else -*))
22 ((*- else -*))
23 \verb+Out[((( cell.prompt_number )))]:+((( super() )))
23 \verb+Out[((( cell.execution_count )))]:+((( super() )))
24 ((*- endif -*))
24 ((*- endif -*))
25 ((*- endfor -*))
25 ((*- endfor -*))
26 ((* endblock execute_result *))
26 ((* endblock execute_result *))
@@ -33,13 +33,13 b''
33 % Name: draw_prompt
33 % Name: draw_prompt
34 % Purpose: Renders an output/input prompt
34 % Purpose: Renders an output/input prompt
35 ((* macro add_prompt(text, cell, prompt) -*))
35 ((* macro add_prompt(text, cell, prompt) -*))
36 ((*- if cell.prompt_number is defined -*))
36 ((*- if cell.execution_count is defined -*))
37 ((*- set prompt_number = "" ~ (cell.prompt_number | replace(None, " ")) -*))
37 ((*- set execution_count = "" ~ (cell.execution_count | replace(None, " ")) -*))
38 ((*- else -*))
38 ((*- else -*))
39 ((*- set prompt_number = " " -*))
39 ((*- set execution_count = " " -*))
40 ((*- endif -*))
40 ((*- endif -*))
41 ((*- set indentation = " " * (prompt_number | length + 7) -*))
41 ((*- set indentation = " " * (execution_count | length + 7) -*))
42 \begin{verbatim}
42 \begin{verbatim}
43 (((- text | add_prompts(first=prompt ~ '[' ~ prompt_number ~ ']: ', cont=indentation) -)))
43 (((- text | add_prompts(first=prompt ~ '[' ~ execution_count ~ ']: ', cont=indentation) -)))
44 \end{verbatim}
44 \end{verbatim}
45 ((*- endmacro *))
45 ((*- endmacro *))
@@ -33,7 +33,7 b''
33 ((*- if type in ['text']*))
33 ((*- if type in ['text']*))
34 ((( add_prompt(output.text | escape_latex, cell, 'Out', 'outcolor') )))
34 ((( add_prompt(output.text | escape_latex, cell, 'Out', 'outcolor') )))
35 ((* else -*))
35 ((* else -*))
36 \texttt{\color{outcolor}Out[{\color{outcolor}((( cell.prompt_number )))}]:}((( super() )))
36 \texttt{\color{outcolor}Out[{\color{outcolor}((( cell.execution_count )))}]:}((( super() )))
37 ((*- endif -*))
37 ((*- endif -*))
38 ((*- endfor -*))
38 ((*- endfor -*))
39 ((* endblock execute_result *))
39 ((* endblock execute_result *))
@@ -46,13 +46,13 b''
46 % Name: draw_prompt
46 % Name: draw_prompt
47 % Purpose: Renders an output/input prompt
47 % Purpose: Renders an output/input prompt
48 ((* macro add_prompt(text, cell, prompt, prompt_color) -*))
48 ((* macro add_prompt(text, cell, prompt, prompt_color) -*))
49 ((*- if cell.prompt_number is defined -*))
49 ((*- if cell.execution_count is defined -*))
50 ((*- set prompt_number = "" ~ (cell.prompt_number | replace(None, " ")) -*))
50 ((*- set execution_count = "" ~ (cell.execution_count | replace(None, " ")) -*))
51 ((*- else -*))
51 ((*- else -*))
52 ((*- set prompt_number = " " -*))
52 ((*- set execution_count = " " -*))
53 ((*- endif -*))
53 ((*- endif -*))
54 ((*- set indention = " " * (prompt_number | length + 7) -*))
54 ((*- set indention = " " * (execution_count | length + 7) -*))
55 \begin{Verbatim}[commandchars=\\\{\}]
55 \begin{Verbatim}[commandchars=\\\{\}]
56 ((( text | add_prompts(first='{\color{' ~ prompt_color ~ '}' ~ prompt ~ '[{\\color{' ~ prompt_color ~ '}' ~ prompt_number ~ '}]:} ', cont=indention) )))
56 ((( text | add_prompts(first='{\color{' ~ prompt_color ~ '}' ~ prompt ~ '[{\\color{' ~ prompt_color ~ '}' ~ execution_count ~ '}]:} ', cont=indention) )))
57 \end{Verbatim}
57 \end{Verbatim}
58 ((*- endmacro *))
58 ((*- endmacro *))
@@ -5,7 +5,7 b''
5 {% endblock header %}
5 {% endblock header %}
6
6
7 {% block in_prompt %}
7 {% block in_prompt %}
8 # In[{{ cell.prompt_number if cell.prompt_number else ' ' }}]:
8 # In[{{ cell.execution_count if cell.execution_count else ' ' }}]:
9 {% endblock in_prompt %}
9 {% endblock in_prompt %}
10
10
11 {% block input %}
11 {% block input %}
@@ -17,11 +17,11 b''
17 },
17 },
18 {
18 {
19 "cell_type": "code",
19 "cell_type": "code",
20 "execution_count": 2,
20 "metadata": {
21 "metadata": {
21 "collapsed": false
22 "collapsed": false
22 },
23 },
23 "outputs": [],
24 "outputs": [],
24 "prompt_number": 2,
25 "source": [
25 "source": [
26 "from sympy import init_printing\n",
26 "from sympy import init_printing\n",
27 "from sympy import *\n",
27 "from sympy import *\n",
@@ -37,11 +37,11 b''
37 },
37 },
38 {
38 {
39 "cell_type": "code",
39 "cell_type": "code",
40 "execution_count": 4,
40 "metadata": {
41 "metadata": {
41 "collapsed": false
42 "collapsed": false
42 },
43 },
43 "outputs": [],
44 "outputs": [],
44 "prompt_number": 4,
45 "source": [
45 "source": [
46 "x,y,z = symbols('x y z')"
46 "x,y,z = symbols('x y z')"
47 ]
47 ]
@@ -55,15 +55,16 b''
55 },
55 },
56 {
56 {
57 "cell_type": "code",
57 "cell_type": "code",
58 "execution_count": 6,
58 "metadata": {
59 "metadata": {
59 "collapsed": false
60 "collapsed": false
60 },
61 },
61 "outputs": [
62 "outputs": [
62 {
63 {
64 "execution_count": 6,
63 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKMAAAAZBAMAAACvE4OgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAACz0lEQVRIDa1UTWjUQBT+ZpvdzW7TGlrxItjYSg/C6vbiDwjmoCgUpHioPYhdqig9\nFJYiPYmW4klB14NgFGnw4EHpj7UgUtTFXhSEBgVBxIOFggWVrrUqiMY3mZkkLNIK7oN575vvvfky\n8yYJIGzgkSlRrULKrivVSkvq6LbxtcaSjV3aSo0lgWyl5pK69V+SRlEsPxNTGYhhDrV3M2Ue2etc\nEDmuMmM+IjolrCuHXNoLoQDNSAXdzbjsfFVKTY1vCgFXFIxenG4cFSSzRewAPnN0FugXjPDr45MQ\nJwoKtitgXL9zT+CsJeIHYG+Z4H1gwhRU4G/FcAQbbYU3KdDo+0sCK8lRU0guA72uKqMYk9RehHxP\niDIu0NS2v90KGShJYi7T7tgvkrQ2vIT2XtRISWNra6lzGc8/PW3ji4PL7Vmge095YIX0iB71NCaZ\n5N3XyM0VCuNIyFNIyY3AMG/KDUvjn90DGmwq9wpIl5AyU5WsTYy0aJf6JFGB5An3Der5jExKHjNR\n4JKPge/EXqDBoOXpkxkmkJHFfAFRVhDIveWA0S57N2Me6yw+DSX1n1uCq3sIfCF2IcjNkjeWyKli\nginHubboOB4vSNAjyaiXE26ygrkyTfod55Lj3CTE+n2P73ImJpnk6wJJKjYJSwt3OQbNJu4icM5s\nKGGbzMuD70N6JSbJD44x7pLDyJrbkfiLpOEhYVMJSVEj83x5YFLyNrAzJsmvJ+uhLrieXvcJDshy\nHtQuD54c2IWWEnSXfUTDZJJfAjcpOW5imp9aHvw4ZZ4NDV4FGjw0tzadKgbFwinJUd//AT0P1tdW\nBtuRU39oKdk9ONQ163fM+nvu/s4D/FX30otdQIZGlSnJKpq6KUxKVqV1WxGHFIhishjhEO1Gi3r4\nkZCMg+hH1henV8EjmFoly1PTMs/Uadaox+FceY2STpmvt9co/Pe0Jvt1GvgDK/Osw/4jQ4wAAAAA\nSUVORK5CYII=\n",
65 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKMAAAAZBAMAAACvE4OgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAACz0lEQVRIDa1UTWjUQBT+ZpvdzW7TGlrxItjYSg/C6vbiDwjmoCgUpHioPYhdqig9\nFJYiPYmW4klB14NgFGnw4EHpj7UgUtTFXhSEBgVBxIOFggWVrrUqiMY3mZkkLNIK7oN575vvvfky\n8yYJIGzgkSlRrULKrivVSkvq6LbxtcaSjV3aSo0lgWyl5pK69V+SRlEsPxNTGYhhDrV3M2Ue2etc\nEDmuMmM+IjolrCuHXNoLoQDNSAXdzbjsfFVKTY1vCgFXFIxenG4cFSSzRewAPnN0FugXjPDr45MQ\nJwoKtitgXL9zT+CsJeIHYG+Z4H1gwhRU4G/FcAQbbYU3KdDo+0sCK8lRU0guA72uKqMYk9RehHxP\niDIu0NS2v90KGShJYi7T7tgvkrQ2vIT2XtRISWNra6lzGc8/PW3ji4PL7Vmge095YIX0iB71NCaZ\n5N3XyM0VCuNIyFNIyY3AMG/KDUvjn90DGmwq9wpIl5AyU5WsTYy0aJf6JFGB5An3Der5jExKHjNR\n4JKPge/EXqDBoOXpkxkmkJHFfAFRVhDIveWA0S57N2Me6yw+DSX1n1uCq3sIfCF2IcjNkjeWyKli\nginHubboOB4vSNAjyaiXE26ygrkyTfod55Lj3CTE+n2P73ImJpnk6wJJKjYJSwt3OQbNJu4icM5s\nKGGbzMuD70N6JSbJD44x7pLDyJrbkfiLpOEhYVMJSVEj83x5YFLyNrAzJsmvJ+uhLrieXvcJDshy\nHtQuD54c2IWWEnSXfUTDZJJfAjcpOW5imp9aHvw4ZZ4NDV4FGjw0tzadKgbFwinJUd//AT0P1tdW\nBtuRU39oKdk9ONQ163fM+nvu/s4D/FX30otdQIZGlSnJKpq6KUxKVqV1WxGHFIhishjhEO1Gi3r4\nkZCMg+hH1henV8EjmFoly1PTMs/Uadaox+FceY2STpmvt9co/Pe0Jvt1GvgDK/Osw/4jQ4wAAAAA\nSUVORK5CYII=\n",
64 "metadata": {},
66 "metadata": {},
65 "output_type": "execute_result",
67 "output_type": "execute_result",
66 "prompt_number": 6,
67 "text/latex": [
68 "text/latex": [
68 "$$x^{2} + 2.0 y + \\sin{\\left (z \\right )}$$"
69 "$$x^{2} + 2.0 y + \\sin{\\left (z \\right )}$$"
69 ],
70 ],
@@ -73,22 +74,22 b''
73 ]
74 ]
74 }
75 }
75 ],
76 ],
76 "prompt_number": 6,
77 "source": [
77 "source": [
78 "e = x**2 + 2.0*y + sin(z); e"
78 "e = x**2 + 2.0*y + sin(z); e"
79 ]
79 ]
80 },
80 },
81 {
81 {
82 "cell_type": "code",
82 "cell_type": "code",
83 "execution_count": 7,
83 "metadata": {
84 "metadata": {
84 "collapsed": false
85 "collapsed": false
85 },
86 },
86 "outputs": [
87 "outputs": [
87 {
88 {
89 "execution_count": 7,
88 "image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAAgElEQVQIHWNgVDJ2YICAMAb2H1BmKgPDTChzFgNDvgOEvT8AzgQKrA9gPZPYUwNk\ncXxnCGd4dWA1kMllwFDKUB9wEchUZmAIYNgMZDDwJIDIPyDiEgOjAAPLFwZWBhYFBh6BqzwfGI4y\nSJUXZXH8Zf7A+IBh////v1hzjh5/xwAAW80hUDE8HYkAAAAASUVORK5CYII=\n",
90 "image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAAgElEQVQIHWNgVDJ2YICAMAb2H1BmKgPDTChzFgNDvgOEvT8AzgQKrA9gPZPYUwNk\ncXxnCGd4dWA1kMllwFDKUB9wEchUZmAIYNgMZDDwJIDIPyDiEgOjAAPLFwZWBhYFBh6BqzwfGI4y\nSJUXZXH8Zf7A+IBh////v1hzjh5/xwAAW80hUDE8HYkAAAAASUVORK5CYII=\n",
89 "metadata": {},
91 "metadata": {},
90 "output_type": "execute_result",
92 "output_type": "execute_result",
91 "prompt_number": 7,
92 "text/latex": [
93 "text/latex": [
93 "$$2 x$$"
94 "$$2 x$$"
94 ],
95 ],
@@ -97,22 +98,22 b''
97 ]
98 ]
98 }
99 }
99 ],
100 ],
100 "prompt_number": 7,
101 "source": [
101 "source": [
102 "diff(e, x)"
102 "diff(e, x)"
103 ]
103 ]
104 },
104 },
105 {
105 {
106 "cell_type": "code",
106 "cell_type": "code",
107 "execution_count": 8,
107 "metadata": {
108 "metadata": {
108 "collapsed": false
109 "collapsed": false
109 },
110 },
110 "outputs": [
111 "outputs": [
111 {
112 {
113 "execution_count": 8,
112 "image/png": "iVBORw0KGgoAAAANSUhEUgAAALsAAAAZBAMAAACbakK8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAADAklEQVRIDbVVS2gTURQ90/wmk0k6tCJCsR1SKShIsxE3CgNWBKUxq9qFmqFqShfF\nUKQrkaDiF0pcCKYgBBcuBLV+wIWKARe6kQ4UhNKKWdiF4KIptmA/xPvmzZuMxdYUzIPcd+655568\nvLlJAL6G32oOasQWNHz5Rvg6nrKh/mygfSzlX2ygPaBUGmov6//NXs1yq4sex2EPrsHemTd2snNg\ntkb+Cx1zBL6SqwxZLvQAKYHzKZaPY4fh4TeHd0S5Nox9OClItm/jiU9DrEwwVEawpiVis9VkimqX\nAOr4o2cCs/0BT2I5+FYJRhJbePQxgzcD7QLEqtV5gdnu2Icr3L45gcCyt74Z7neL4SLQ0nm4S+dM\nYCz1gSPHnhKZDWyHhcCCNKwjqaF/TkwGl0L6nClie/wc1D1xdoNsSLhT0IJkhi7Lzr22xb8keE/N\nPm0Sc9yEuhRUyuiG9HzvFNeImCyq39SriOhtQI7IV/TiTqE8glqwohjE0NJwiANxOZTdZoxtfzSa\nx2tI8DtHcKQoQFmV6f1XT2swibxFL+6k5EgenhBCqKLTPX3ULnaYdDlaTMcCSd8zuXTvBq2bJUJr\nlE4WgSV5ZRdBzLFgO6nzhJp1ltvrlB2HCoWxQuG+jTvt2GxBWUZaU2mMApZNuSHA3vJpCliRhqqs\nZtvbTrb9ZIk+i70Ut1OcnpgeKskTCFUwjaYy8Jhr3eiefq0HIfa7yC6HOwVyULRuNDn21JngbcL+\nE8A+MNnSxb+w59+Cj2tELJBbjEZr8SGwn0j2aLkTPdp08R2OcKV6fXB3ikPH3n8tM5WTfrETtZcw\ng3QWH0dH7nKNiMkszqo/EDafaHhJ5Bm6ee4UtdAabxnMcmUUl0SnYx+uVqs5XAGN9QGgdeCrASv0\n3TmCsJcOdhnozexD38goK9HXynEKr1OKDs9guhQD039kGySyIQpJAdbvJ9YTlPvyUl3/aLUf34G/\nuGxIyXpE37DoLbAHwJaU53t9MRCfrU8o/k4iRn36Lar8Wd5wAfgN4R6xelyy/ssAAAAASUVORK5C\nYII=\n",
114 "image/png": "iVBORw0KGgoAAAANSUhEUgAAALsAAAAZBAMAAACbakK8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAADAklEQVRIDbVVS2gTURQ90/wmk0k6tCJCsR1SKShIsxE3CgNWBKUxq9qFmqFqShfF\nUKQrkaDiF0pcCKYgBBcuBLV+wIWKARe6kQ4UhNKKWdiF4KIptmA/xPvmzZuMxdYUzIPcd+655568\nvLlJAL6G32oOasQWNHz5Rvg6nrKh/mygfSzlX2ygPaBUGmov6//NXs1yq4sex2EPrsHemTd2snNg\ntkb+Cx1zBL6SqwxZLvQAKYHzKZaPY4fh4TeHd0S5Nox9OClItm/jiU9DrEwwVEawpiVis9VkimqX\nAOr4o2cCs/0BT2I5+FYJRhJbePQxgzcD7QLEqtV5gdnu2Icr3L45gcCyt74Z7neL4SLQ0nm4S+dM\nYCz1gSPHnhKZDWyHhcCCNKwjqaF/TkwGl0L6nClie/wc1D1xdoNsSLhT0IJkhi7Lzr22xb8keE/N\nPm0Sc9yEuhRUyuiG9HzvFNeImCyq39SriOhtQI7IV/TiTqE8glqwohjE0NJwiANxOZTdZoxtfzSa\nx2tI8DtHcKQoQFmV6f1XT2swibxFL+6k5EgenhBCqKLTPX3ULnaYdDlaTMcCSd8zuXTvBq2bJUJr\nlE4WgSV5ZRdBzLFgO6nzhJp1ltvrlB2HCoWxQuG+jTvt2GxBWUZaU2mMApZNuSHA3vJpCliRhqqs\nZtvbTrb9ZIk+i70Ut1OcnpgeKskTCFUwjaYy8Jhr3eiefq0HIfa7yC6HOwVyULRuNDn21JngbcL+\nE8A+MNnSxb+w59+Cj2tELJBbjEZr8SGwn0j2aLkTPdp08R2OcKV6fXB3ikPH3n8tM5WTfrETtZcw\ng3QWH0dH7nKNiMkszqo/EDafaHhJ5Bm6ee4UtdAabxnMcmUUl0SnYx+uVqs5XAGN9QGgdeCrASv0\n3TmCsJcOdhnozexD38goK9HXynEKr1OKDs9guhQD039kGySyIQpJAdbvJ9YTlPvyUl3/aLUf34G/\nuGxIyXpE37DoLbAHwJaU53t9MRCfrU8o/k4iRn36Lar8Wd5wAfgN4R6xelyy/ssAAAAASUVORK5C\nYII=\n",
113 "metadata": {},
115 "metadata": {},
114 "output_type": "execute_result",
116 "output_type": "execute_result",
115 "prompt_number": 8,
116 "text/latex": [
117 "text/latex": [
117 "$$x^{2} z + 2.0 y z - \\cos{\\left (z \\right )}$$"
118 "$$x^{2} z + 2.0 y z - \\cos{\\left (z \\right )}$$"
118 ],
119 ],
@@ -122,18 +123,17 b''
122 ]
123 ]
123 }
124 }
124 ],
125 ],
125 "prompt_number": 8,
126 "source": [
126 "source": [
127 "integrate(e, z)"
127 "integrate(e, z)"
128 ]
128 ]
129 },
129 },
130 {
130 {
131 "cell_type": "code",
131 "cell_type": "code",
132 "execution_count": null,
132 "metadata": {
133 "metadata": {
133 "collapsed": false
134 "collapsed": false
134 },
135 },
135 "outputs": [],
136 "outputs": [],
136 "prompt_number": null,
137 "source": []
137 "source": []
138 }
138 }
139 ],
139 ],
@@ -17,6 +17,7 b''
17 },
17 },
18 {
18 {
19 "cell_type": "code",
19 "cell_type": "code",
20 "execution_count": 1,
20 "metadata": {
21 "metadata": {
21 "collapsed": false
22 "collapsed": false
22 },
23 },
@@ -28,7 +29,6 b''
28 "text": "module://IPython.kernel.zmq.pylab.backend_inline\n"
29 "text": "module://IPython.kernel.zmq.pylab.backend_inline\n"
29 }
30 }
30 ],
31 ],
31 "prompt_number": 1,
32 "source": [
32 "source": [
33 "%matplotlib inline\n",
33 "%matplotlib inline\n",
34 "import matplotlib\n",
34 "import matplotlib\n",
@@ -38,11 +38,11 b''
38 },
38 },
39 {
39 {
40 "cell_type": "code",
40 "cell_type": "code",
41 "execution_count": 2,
41 "metadata": {
42 "metadata": {
42 "collapsed": false
43 "collapsed": false
43 },
44 },
44 "outputs": [],
45 "outputs": [],
45 "prompt_number": 2,
46 "source": [
46 "source": [
47 "from IPython.display import set_matplotlib_formats\n",
47 "from IPython.display import set_matplotlib_formats\n",
48 "set_matplotlib_formats('png', 'pdf')\n",
48 "set_matplotlib_formats('png', 'pdf')\n",
@@ -51,31 +51,31 b''
51 },
51 },
52 {
52 {
53 "cell_type": "code",
53 "cell_type": "code",
54 "execution_count": 3,
54 "metadata": {
55 "metadata": {
55 "collapsed": false
56 "collapsed": false
56 },
57 },
57 "outputs": [
58 "outputs": [
58 {
59 {
60 "execution_count": 3,
59 "metadata": {},
61 "metadata": {},
60 "output_type": "execute_result",
62 "output_type": "execute_result",
61 "prompt_number": 3,
62 "text/plain": [
63 "text/plain": [
63 "{matplotlib.figure.Figure: <function IPython.core.pylabtools.<lambda>>}"
64 "{matplotlib.figure.Figure: <function IPython.core.pylabtools.<lambda>>}"
64 ]
65 ]
65 }
66 }
66 ],
67 ],
67 "prompt_number": 3,
68 "source": [
68 "source": [
69 "ip.display_formatter.formatters['application/pdf'].type_printers"
69 "ip.display_formatter.formatters['application/pdf'].type_printers"
70 ]
70 ]
71 },
71 },
72 {
72 {
73 "cell_type": "code",
73 "cell_type": "code",
74 "execution_count": 4,
74 "metadata": {
75 "metadata": {
75 "collapsed": false
76 "collapsed": false
76 },
77 },
77 "outputs": [],
78 "outputs": [],
78 "prompt_number": 4,
79 "source": [
79 "source": [
80 "import numpy as np"
80 "import numpy as np"
81 ]
81 ]
@@ -89,62 +89,62 b''
89 },
89 },
90 {
90 {
91 "cell_type": "code",
91 "cell_type": "code",
92 "execution_count": 5,
92 "metadata": {
93 "metadata": {
93 "collapsed": false
94 "collapsed": false
94 },
95 },
95 "outputs": [],
96 "outputs": [],
96 "prompt_number": 5,
97 "source": [
97 "source": [
98 "a = np.random.uniform(size=(100,100))"
98 "a = np.random.uniform(size=(100,100))"
99 ]
99 ]
100 },
100 },
101 {
101 {
102 "cell_type": "code",
102 "cell_type": "code",
103 "execution_count": 6,
103 "metadata": {
104 "metadata": {
104 "collapsed": false
105 "collapsed": false
105 },
106 },
106 "outputs": [
107 "outputs": [
107 {
108 {
109 "execution_count": 6,
108 "metadata": {},
110 "metadata": {},
109 "output_type": "execute_result",
111 "output_type": "execute_result",
110 "prompt_number": 6,
111 "text/plain": [
112 "text/plain": [
112 "(100, 100)"
113 "(100, 100)"
113 ]
114 ]
114 }
115 }
115 ],
116 ],
116 "prompt_number": 6,
117 "source": [
117 "source": [
118 "a.shape"
118 "a.shape"
119 ]
119 ]
120 },
120 },
121 {
121 {
122 "cell_type": "code",
122 "cell_type": "code",
123 "execution_count": 7,
123 "metadata": {
124 "metadata": {
124 "collapsed": false
125 "collapsed": false
125 },
126 },
126 "outputs": [],
127 "outputs": [],
127 "prompt_number": 7,
128 "source": [
128 "source": [
129 "evs = np.linalg.eigvals(a)"
129 "evs = np.linalg.eigvals(a)"
130 ]
130 ]
131 },
131 },
132 {
132 {
133 "cell_type": "code",
133 "cell_type": "code",
134 "execution_count": 8,
134 "metadata": {
135 "metadata": {
135 "collapsed": false
136 "collapsed": false
136 },
137 },
137 "outputs": [
138 "outputs": [
138 {
139 {
140 "execution_count": 8,
139 "metadata": {},
141 "metadata": {},
140 "output_type": "execute_result",
142 "output_type": "execute_result",
141 "prompt_number": 8,
142 "text/plain": [
143 "text/plain": [
143 "(100,)"
144 "(100,)"
144 ]
145 ]
145 }
146 }
146 ],
147 ],
147 "prompt_number": 8,
148 "source": [
148 "source": [
149 "evs.shape"
149 "evs.shape"
150 ]
150 ]
@@ -166,14 +166,15 b''
166 },
166 },
167 {
167 {
168 "cell_type": "code",
168 "cell_type": "code",
169 "execution_count": 9,
169 "metadata": {
170 "metadata": {
170 "collapsed": false
171 "collapsed": false
171 },
172 },
172 "outputs": [
173 "outputs": [
173 {
174 {
175 "execution_count": 9,
174 "metadata": {},
176 "metadata": {},
175 "output_type": "execute_result",
177 "output_type": "execute_result",
176 "prompt_number": 9,
177 "text/plain": [
178 "text/plain": [
178 "(array([97, 2, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
179 "(array([97, 2, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
179 " array([ -2.59479443, 2.67371141, 7.94221725, 13.21072308,\n",
180 " array([ -2.59479443, 2.67371141, 7.94221725, 13.21072308,\n",
@@ -192,7 +193,6 b''
192 ]
193 ]
193 }
194 }
194 ],
195 ],
195 "prompt_number": 9,
196 "source": [
196 "source": [
197 "plt.hist(evs.real)"
197 "plt.hist(evs.real)"
198 ]
198 ]
@@ -211,7 +211,7 b' class NotebookNotary(LoggingConfigurable):'
211 output_type = output['output_type']
211 output_type = output['output_type']
212 if output_type in {'execute_result', 'display_data'}:
212 if output_type in {'execute_result', 'display_data'}:
213 # if there are any data keys not in the safe whitelist
213 # if there are any data keys not in the safe whitelist
214 output_keys = set(output).difference({"output_type", "prompt_number", "metadata"})
214 output_keys = set(output).difference({"output_type", "execution_count", "metadata"})
215 if output_keys.difference(safe):
215 if output_keys.difference(safe):
216 return False
216 return False
217
217
@@ -52,7 +52,7 b''
52 ]
52 ]
53 }
53 }
54 ],
54 ],
55 "prompt_number": 1
55 "execution_count": 1
56 },
56 },
57 {
57 {
58 "cell_type": "heading",
58 "cell_type": "heading",
@@ -88,13 +88,13 b''
88 ],
88 ],
89 "metadata": {},
89 "metadata": {},
90 "output_type": "execute_result",
90 "output_type": "execute_result",
91 "prompt_number": 3,
91 "execution_count": 3,
92 "text/plain": [
92 "text/plain": [
93 "<IPython.core.display.HTML at 0x1112757d0>"
93 "<IPython.core.display.HTML at 0x1112757d0>"
94 ]
94 ]
95 }
95 }
96 ],
96 ],
97 "prompt_number": 3
97 "execution_count": 3
98 },
98 },
99 {
99 {
100 "cell_type": "code",
100 "cell_type": "code",
@@ -118,7 +118,7 b''
118 ]
118 ]
119 }
119 }
120 ],
120 ],
121 "prompt_number": 7
121 "execution_count": 7
122 },
122 },
123 {
123 {
124 "cell_type": "heading",
124 "cell_type": "heading",
@@ -143,13 +143,13 b''
143 "metadata": {},
143 "metadata": {},
144 "output_type": "execute_result",
144 "output_type": "execute_result",
145 "image/png": "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\n",
145 "image/png": "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\n",
146 "prompt_number": 6,
146 "execution_count": 6,
147 "text/plain": [
147 "text/plain": [
148 "<IPython.core.display.Image at 0x111275490>"
148 "<IPython.core.display.Image at 0x111275490>"
149 ]
149 ]
150 }
150 }
151 ],
151 ],
152 "prompt_number": 6
152 "execution_count": 6
153 }
153 }
154 ]
154 ]
155 }
155 }
@@ -75,6 +75,7 b' def upgrade_cell(cell):'
75 code cell:
75 code cell:
76 - remove language metadata
76 - remove language metadata
77 - cell.input -> cell.source
77 - cell.input -> cell.source
78 - cell.prompt_number -> cell.execution_count
78 - update outputs
79 - update outputs
79 """
80 """
80 cell.setdefault('metadata', NotebookNode())
81 cell.setdefault('metadata', NotebookNode())
@@ -82,7 +83,7 b' def upgrade_cell(cell):'
82 cell.pop('language', '')
83 cell.pop('language', '')
83 cell.metadata.collapsed = cell.pop('collapsed')
84 cell.metadata.collapsed = cell.pop('collapsed')
84 cell.source = cell.pop('input')
85 cell.source = cell.pop('input')
85 cell.setdefault('prompt_number', None)
86 cell.execution_count = cell.pop('prompt_number', None)
86 cell.outputs = upgrade_outputs(cell.outputs)
87 cell.outputs = upgrade_outputs(cell.outputs)
87 elif cell.cell_type == 'html':
88 elif cell.cell_type == 'html':
88 # Technically, this exists. It will never happen in practice.
89 # Technically, this exists. It will never happen in practice.
@@ -90,9 +91,18 b' def upgrade_cell(cell):'
90 return cell
91 return cell
91
92
92 def downgrade_cell(cell):
93 def downgrade_cell(cell):
94 """downgrade a cell from v4 to v3
95
96 code cell:
97 - set cell.language
98 - cell.input <- cell.source
99 - cell.prompt_number <- cell.execution_count
100 - update outputs
101 """
93 if cell.cell_type == 'code':
102 if cell.cell_type == 'code':
94 cell.language = 'python'
103 cell.language = 'python'
95 cell.input = cell.pop('source', '')
104 cell.input = cell.pop('source', '')
105 cell.prompt_number = cell.pop('execution_count', None)
96 cell.collapsed = cell.metadata.pop('collapsed', False)
106 cell.collapsed = cell.metadata.pop('collapsed', False)
97 cell.outputs = downgrade_outputs(cell.outputs)
107 cell.outputs = downgrade_outputs(cell.outputs)
98 return cell
108 return cell
@@ -134,6 +144,7 b' def upgrade_output(output):'
134 if output['output_type'] in {'pyout', 'display_data'}:
144 if output['output_type'] in {'pyout', 'display_data'}:
135 if output['output_type'] == 'pyout':
145 if output['output_type'] == 'pyout':
136 output['output_type'] = 'execute_result'
146 output['output_type'] = 'execute_result'
147 output['execution_count'] = output.pop('prompt_number', None)
137 to_mime_key(output)
148 to_mime_key(output)
138 to_mime_key(output.metadata)
149 to_mime_key(output.metadata)
139 if 'application/json' in output:
150 if 'application/json' in output:
@@ -158,6 +169,7 b' def downgrade_output(output):'
158 """
169 """
159 if output['output_type'] == 'execute_result':
170 if output['output_type'] == 'execute_result':
160 output['output_type'] = 'pyout'
171 output['output_type'] = 'pyout'
172 output['prompt_number'] = output.pop('execution_count', None)
161 if 'application/json' in output:
173 if 'application/json' in output:
162 output['application/json'] = json.dumps(output['application/json'])
174 output['application/json'] = json.dumps(output['application/json'])
163 from_mime_key(output)
175 from_mime_key(output)
@@ -74,7 +74,7 b' def output_from_msg(msg):'
74 return new_output(output_type=msg_type,
74 return new_output(output_type=msg_type,
75 metadata=content['metadata'],
75 metadata=content['metadata'],
76 mime_bundle=content['data'],
76 mime_bundle=content['data'],
77 prompt_number=content['execution_count'],
77 execution_count=content['execution_count'],
78 )
78 )
79
79
80 elif msg_type == 'stream':
80 elif msg_type == 'stream':
@@ -103,7 +103,7 b" def new_code_cell(source='', **kwargs):"
103 cell.update(from_dict(kwargs))
103 cell.update(from_dict(kwargs))
104 cell.setdefault('metadata', NotebookNode())
104 cell.setdefault('metadata', NotebookNode())
105 cell.setdefault('source', '')
105 cell.setdefault('source', '')
106 cell.setdefault('prompt_number', None)
106 cell.setdefault('execution_count', None)
107 cell.setdefault('outputs', [])
107 cell.setdefault('outputs', [])
108
108
109 validate(cell, 'code_cell')
109 validate(cell, 'code_cell')
@@ -150,7 +150,7 b''
150 "description": "Notebook code cell.",
150 "description": "Notebook code cell.",
151 "type": "object",
151 "type": "object",
152 "additionalProperties": false,
152 "additionalProperties": false,
153 "required": ["cell_type", "metadata", "source", "outputs", "prompt_number"],
153 "required": ["cell_type", "metadata", "source", "outputs", "execution_count"],
154 "properties": {
154 "properties": {
155 "cell_type": {
155 "cell_type": {
156 "description": "String identifying the type of cell.",
156 "description": "String identifying the type of cell.",
@@ -179,7 +179,7 b''
179 "type": "array",
179 "type": "array",
180 "items": {"$ref": "#/definitions/output"}
180 "items": {"$ref": "#/definitions/output"}
181 },
181 },
182 "prompt_number": {
182 "execution_count": {
183 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
183 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
184 "type": ["integer", "null"],
184 "type": ["integer", "null"],
185 "minimum": 0
185 "minimum": 0
@@ -199,15 +199,15 b''
199 "description": "Result of executing a code cell.",
199 "description": "Result of executing a code cell.",
200 "type": "object",
200 "type": "object",
201 "additionalProperties": false,
201 "additionalProperties": false,
202 "required": ["output_type", "metadata", "prompt_number"],
202 "required": ["output_type", "metadata", "execution_count"],
203 "properties": {
203 "properties": {
204 "output_type": {
204 "output_type": {
205 "description": "Type of cell output.",
205 "description": "Type of cell output.",
206 "enum": ["execute_result"]
206 "enum": ["execute_result"]
207 },
207 },
208 "prompt_number": {
208 "execution_count": {
209 "description": "A result's prompt number.",
209 "description": "A result's prompt number.",
210 "type": ["integer"],
210 "type": ["integer", "null"],
211 "minimum": 0
211 "minimum": 0
212 },
212 },
213 "application/json": {
213 "application/json": {
@@ -314,7 +314,7 b''
314 "description": "Contents of the cell, represented as an array of lines.",
314 "description": "Contents of the cell, represented as an array of lines.",
315 "$ref": "#/definitions/misc/multiline_string"
315 "$ref": "#/definitions/misc/multiline_string"
316 },
316 },
317 "prompt_number": {
317 "execution_count": {
318 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
318 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
319 "type": ["integer", "null"],
319 "type": ["integer", "null"],
320 "minimum": 0
320 "minimum": 0
@@ -20,7 +20,7 b' cells.append(new_markdown_cell('
20
20
21 cells.append(new_code_cell(
21 cells.append(new_code_cell(
22 source='import numpy',
22 source='import numpy',
23 prompt_number=1,
23 execution_count=1,
24 ))
24 ))
25
25
26 cells.append(new_markdown_cell(
26 cells.append(new_markdown_cell(
@@ -38,20 +38,20 b' cells.append(new_heading_cell('
38
38
39 cells.append(new_code_cell(
39 cells.append(new_code_cell(
40 source='a = numpy.random.rand(100)',
40 source='a = numpy.random.rand(100)',
41 prompt_number=2,
41 execution_count=2,
42 ))
42 ))
43 cells.append(new_code_cell(
43 cells.append(new_code_cell(
44 source='a = 10\nb = 5\n',
44 source='a = 10\nb = 5\n',
45 prompt_number=3,
45 execution_count=3,
46 ))
46 ))
47 cells.append(new_code_cell(
47 cells.append(new_code_cell(
48 source='a = 10\nb = 5',
48 source='a = 10\nb = 5',
49 prompt_number=4,
49 execution_count=4,
50 ))
50 ))
51
51
52 cells.append(new_code_cell(
52 cells.append(new_code_cell(
53 source=u'print "ünîcødé"',
53 source=u'print "ünîcødé"',
54 prompt_number=3,
54 execution_count=3,
55 outputs=[new_output(
55 outputs=[new_output(
56 output_type=u'execute_result',
56 output_type=u'execute_result',
57 mime_bundle={
57 mime_bundle={
@@ -66,7 +66,7 b' cells.append(new_code_cell('
66 },
66 },
67 'application/javascript': u'var i=0;'
67 'application/javascript': u'var i=0;'
68 },
68 },
69 prompt_number=3
69 execution_count=3
70 ),new_output(
70 ),new_output(
71 output_type=u'display_data',
71 output_type=u'display_data',
72 mime_bundle={
72 mime_bundle={
@@ -61,7 +61,7 b' def test_empty_stream():'
61 nt.assert_equal(output.text, '')
61 nt.assert_equal(output.text, '')
62
62
63 def test_empty_execute_result():
63 def test_empty_execute_result():
64 output = new_output('execute_result', prompt_number=1)
64 output = new_output('execute_result', execution_count=1)
65 nt.assert_equal(output.output_type, 'execute_result')
65 nt.assert_equal(output.output_type, 'execute_result')
66
66
67 mimebundle = {
67 mimebundle = {
@@ -80,8 +80,8 b' def test_display_data():'
80 nt.assert_equal(output[key], expected)
80 nt.assert_equal(output[key], expected)
81
81
82 def test_execute_result():
82 def test_execute_result():
83 output = new_output('execute_result', mimebundle, prompt_number=10)
83 output = new_output('execute_result', mimebundle, execution_count=10)
84 nt.assert_equal(output.prompt_number, 10)
84 nt.assert_equal(output.execution_count, 10)
85 for key, expected in mimebundle.items():
85 for key, expected in mimebundle.items():
86 nt.assert_equal(output[key], expected)
86 nt.assert_equal(output[key], expected)
87
87
@@ -95,15 +95,15 b' def test_error():'
95 nt.assert_equal(o.traceback, [u'frame 0', u'frame 1', u'frame 2'])
95 nt.assert_equal(o.traceback, [u'frame 0', u'frame 1', u'frame 2'])
96
96
97 def test_code_cell_with_outputs():
97 def test_code_cell_with_outputs():
98 cell = new_code_cell(prompt_number=10, outputs=[
98 cell = new_code_cell(execution_count=10, outputs=[
99 new_output('display_data', mimebundle),
99 new_output('display_data', mimebundle),
100 new_output('stream', text='hello'),
100 new_output('stream', text='hello'),
101 new_output('execute_result', mimebundle, prompt_number=10),
101 new_output('execute_result', mimebundle, execution_count=10),
102 ])
102 ])
103 nt.assert_equal(cell.prompt_number, 10)
103 nt.assert_equal(cell.execution_count, 10)
104 nt.assert_equal(len(cell.outputs), 3)
104 nt.assert_equal(len(cell.outputs), 3)
105 er = cell.outputs[-1]
105 er = cell.outputs[-1]
106 nt.assert_equal(er.prompt_number, 10)
106 nt.assert_equal(er.execution_count, 10)
107 nt.assert_equal(er['output_type'], 'execute_result')
107 nt.assert_equal(er['output_type'], 'execute_result')
108
108
109 def test_stream():
109 def test_stream():
General Comments 0
You need to be logged in to leave comments. Login now