##// END OF EJS Templates
cleanup profile fixup rst
cleanup profile fixup rst

File last commit:

r9658:d95cbaf2
r9672:94361f7c
Show More
00_notebook_tour_orig.tex
824 lines | 22.4 KiB | application/x-tex | TexLexer
/ tests / template_ref / 00_notebook_tour_orig.tex
Matthias BUSSONNIER
start writting more references test
r9653
%% This file was auto-generated by IPython.
%% Conversion from the original notebook file:
%% tests/ipynbref/Gun_Data.orig.ipynb
%%
\documentclass[11pt,english]{article}
%% This is the automatic preamble used by IPython. Note that it does *not*
%% include a documentclass declaration, that is added at runtime to the overall
%% document.
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
% needed for markdown enumerations to work
\usepackage{enumerate}
% Slightly bigger margins than the latex defaults
\usepackage{geometry}
\geometry{verbose,tmargin=3cm,bmargin=3cm,lmargin=2.5cm,rmargin=2.5cm}
% Define a few colors for use in code, links and cell shading
\usepackage{color}
\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
\definecolor{darkorange}{rgb}{.71,0.21,0.01}
\definecolor{darkgreen}{rgb}{.12,.54,.11}
\definecolor{myteal}{rgb}{.26, .44, .56}
\definecolor{gray}{gray}{0.45}
\definecolor{lightgray}{gray}{.95}
\definecolor{mediumgray}{gray}{.8}
\definecolor{inputbackground}{rgb}{.95, .95, .85}
\definecolor{outputbackground}{rgb}{.95, .95, .95}
\definecolor{traceback}{rgb}{1, .95, .95}
% Framed environments for code cells (inputs, outputs, errors, ...). The
% various uses of \unskip (or not) at the end were fine-tuned by hand, so don't
% randomly change them unless you're sure of the effect it will have.
\usepackage{framed}
% remove extraneous vertical space in boxes
\setlength\fboxsep{0pt}
% codecell is the whole input+output set of blocks that a Code cell can
% generate.
% TODO: unfortunately, it seems that using a framed codecell environment breaks
% the ability of the frames inside of it to be broken across pages. This
% causes at least the problem of having lots of empty space at the bottom of
% pages as new frames are moved to the next page, and if a single frame is too
% long to fit on a page, will completely stop latex from compiling the
% document. So unless we figure out a solution to this, we'll have to instead
% leave the codecell env. as empty. I'm keeping the original codecell
% definition here (a thin vertical bar) for reference, in case we find a
% solution to the page break issue.
%% \newenvironment{codecell}{%
%% \def\FrameCommand{\color{mediumgray} \vrule width 1pt \hspace{5pt}}%
%% \MakeFramed{\vspace{-0.5em}}}
%% {\unskip\endMakeFramed}
% For now, make this a no-op...
\newenvironment{codecell}{}
\newenvironment{codeinput}{%
\def\FrameCommand{\colorbox{inputbackground}}%
\MakeFramed{\advance\hsize-\width \FrameRestore}}
{\unskip\endMakeFramed}
\newenvironment{codeoutput}{%
\def\FrameCommand{\colorbox{outputbackground}}%
\vspace{-1.4em}
\MakeFramed{\advance\hsize-\width \FrameRestore}}
{\unskip\medskip\endMakeFramed}
\newenvironment{traceback}{%
\def\FrameCommand{\colorbox{traceback}}%
\MakeFramed{\advance\hsize-\width \FrameRestore}}
{\endMakeFramed}
% Use and configure listings package for nicely formatted code
\usepackage{listingsutf8}
\lstset{
language=python,
inputencoding=utf8x,
extendedchars=\true,
aboveskip=\smallskipamount,
belowskip=\smallskipamount,
xleftmargin=2mm,
breaklines=true,
basicstyle=\small \ttfamily,
showstringspaces=false,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{myteal},
stringstyle=\color{darkgreen},
identifierstyle=\color{darkorange},
columns=fullflexible, % tighter character kerning, like verb
}
% The hyperref package gives us a pdf with properly built
% internal navigation ('pdf bookmarks' for the table of contents,
% internal cross-reference links, web links for URLs, etc.)
\usepackage{hyperref}
\hypersetup{
breaklinks=true, % so long urls are correctly broken across lines
colorlinks=true,
urlcolor=blue,
linkcolor=darkorange,
citecolor=darkgreen,
}
% hardcode size of all verbatim environments to be a bit smaller
\makeatletter
\g@addto@macro\@verbatim\small\topsep=0.5em\partopsep=0pt
\makeatother
% Prevent overflowing lines due to urls and other hard-to-break entities.
\sloppy
\begin{document}
\section{A brief tour of the IPython notebook}
This document will give you a brief tour of the capabilities of the
IPython notebook.\\You can view its contents by scrolling around, or
execute each cell by typing \texttt{Shift-Enter}. After you conclude
this brief high-level tour, you should read the accompanying notebook
titled \texttt{01\_notebook\_introduction}, which takes a more
step-by-step approach to the features of the system.
The rest of the notebooks in this directory illustrate various other
aspects and capabilities of the IPython notebook; some of them may
require additional libraries to be executed.
\textbf{NOTE:} This notebook \emph{must} be run from its own directory,
so you must \texttt{cd} to this directory and then start the notebook,
but do \emph{not} use the \texttt{-{}-notebook-dir} option to run it
from another location.
The first thing you need to know is that you are still controlling the
same old IPython you're used to, so things like shell aliases and magic
commands still work:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
pwd
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
u'/Users/minrk/dev/ip/mine/docs/examples/notebooks'
\end{codeoutput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
ls
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
00_notebook_tour.ipynb callbacks.ipynb python-logo.svg
01_notebook_introduction.ipynb cython_extension.ipynb rmagic_extension.ipynb
Animations_and_Progress.ipynb display_protocol.ipynb sympy.ipynb
Capturing Output.ipynb formatting.ipynb sympy_quantum_computing.ipynb
Script Magics.ipynb octavemagic_extension.ipynb trapezoid_rule.ipynb
animation.m4v progbar.ipynb
\end{verbatim}
\end{codeoutput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
message = 'The IPython notebook is great!'
# note: the echo command does not run on Windows, it's a unix command.
!echo $message
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
The IPython notebook is great!
\end{verbatim}
\end{codeoutput}
\end{codecell}
\section{Plots with matplotlib}
IPython adds an `inline' matplotlib backend, which embeds any matplotlib
figures into the notebook.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
%pylab inline
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.
\end{verbatim}
\end{codeoutput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
x = linspace(0, 3*pi, 500)
plot(x, sin(x**2))
title('A simple chirp');
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{center}
\includegraphics[width=0.7\textwidth]{_fig_07.png}
\par
\end{center}
\end{codeoutput}
\end{codecell}
You can paste blocks of input with prompt markers, such as those from
\href{http://docs.python.org/tutorial/interpreter.html\#interactive-mode}{the
official Python tutorial}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
... print "Be careful not to fall off!"
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
Be careful not to fall off!
\end{verbatim}
\end{codeoutput}
\end{codecell}
Errors are shown in informative ways:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
%run non_existent_file
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
ERROR: File `u'non_existent_file.py'` not found.
\end{verbatim}
\end{codeoutput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
x = 1
y = 4
z = y/(1-x)
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-8-dc39888fd1d2> in <module>()
1 x = 1
2 y = 4
----> 3 z = y/(1-x)
ZeroDivisionError: integer division or modulo by zero
\end{codeoutput}
\end{codecell}
When IPython needs to display additional information (such as providing
details on an object via \texttt{x?} it will automatically invoke a
pager at the bottom of the screen:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
magic
\end{lstlisting}
\end{codeinput}
\end{codecell}
\subsection{Non-blocking output of kernel}
If you execute the next cell, you will see the output arriving as it is
generated, not all at the end.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
import time, sys
for i in range(8):
print i,
time.sleep(0.5)
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
Matthias BUSSONNIER
fix test for coalesce stream, and fig key config
r9658 0 1 2 3 4 5 6 7
Matthias BUSSONNIER
start writting more references test
r9653 \end{verbatim}
\end{codeoutput}
\end{codecell}
\subsection{Clean crash and restart}
We call the low-level system libc.time routine with the wrong argument
via ctypes to segfault the Python interpreter:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
import sys
from ctypes import CDLL
# This will crash a Linux or Mac system; equivalent calls can be made on Windows
dll = 'dylib' if sys.platform == 'darwin' else '.so.6'
libc = CDLL("libc.%s" % dll)
libc.time(-1) # BOOM!!
\end{lstlisting}
\end{codeinput}
\end{codecell}
\subsection{Markdown cells can contain formatted text and code}
You can \emph{italicize}, \textbf{boldface}
\begin{itemize}
\item
build
\item
lists
\end{itemize}
and embed code meant for illustration instead of execution in Python:
\begin{verbatim}
def f(x):
"""a docstring"""
return x**2
\end{verbatim}
or other languages:
\begin{verbatim}
if (i=0; i<n; i++) {
printf("hello %d\n", i);
x += 4;
}
\end{verbatim}
Courtesy of MathJax, you can include mathematical expressions both
inline: $e^{i\pi} + 1 = 0$ and displayed:
\[e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i\]
\subsection{Rich displays: include anyting a browser can show}
Note that we have an actual protocol for this, see the
\texttt{display\_protocol} notebook for further details.
\subsubsection{Images}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import Image
Image(filename='../../source/_static/logo.png')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Image at 0x10faeafd0>
\end{codeoutput}
\end{codecell}
An image can also be displayed from raw data or a url
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
Image(url='http://python.org/images/python-logo.gif')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Image at 0x1060e7410>
\end{codeoutput}
\end{codecell}
SVG images are also supported out of the box (since modern browsers do a
good job of rendering them):
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import SVG
SVG(filename='python-logo.svg')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.SVG at 0x10fb998d0>
\end{codeoutput}
\end{codecell}
\paragraph{Embedded vs Non-embedded Images}
As of IPython 0.13, images are embedded by default for compatibility
with QtConsole, and the ability to still be displayed offline.
Let's look at the differences:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
# by default Image data are embedded
Embed = Image( 'http://scienceview.berkeley.edu/view/images/newview.jpg')
# if kwarg `url` is given, the embedding is assumed to be false
SoftLinked = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg')
# In each case, embed can be specified explicitly with the `embed` kwarg
# ForceEmbed = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg', embed=True)
\end{lstlisting}
\end{codeinput}
\end{codecell}
Today's image from a webcam at Berkeley, (at the time I created this
notebook). This should also work in the Qtconsole. Drawback is that the
saved notebook will be larger, but the image will still be present
offline.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
Embed
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Image at 0x10fb99b50>
\end{codeoutput}
\end{codecell}
Today's image from same webcam at Berkeley, (refreshed every minutes, if
you reload the notebook), visible only with an active internet
connexion, that should be different from the previous one. This will not
work on Qtconsole. Notebook saved with this kind of image will be
lighter and always reflect the current version of the source, but the
image won't display offline.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
SoftLinked
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Image at 0x10fb99b10>
\end{codeoutput}
\end{codecell}
Of course, if you re-run the all notebook, the two images will be the
same again.
\subsubsection{Video}
And more exotic objects can also be displayed, as long as their
representation supports the IPython display protocol.
For example, videos hosted externally on YouTube are easy to load (and
writing a similar wrapper for other hosted content is trivial):
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import YouTubeVideo
# a talk about IPython at Sage Days at U. Washington, Seattle.
# Video credit: William Stein.
YouTubeVideo('1j_HxD4iLn8')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.lib.display.YouTubeVideo at 0x10fba2190>
\end{codeoutput}
\end{codecell}
Using the nascent video capabilities of modern browsers, you may also be
able to display local videos. At the moment this doesn't work very well
in all browsers, so it may or may not work for you; we will continue
testing this and looking for ways to make it more robust.
The following cell loads a local file called \texttt{animation.m4v},
encodes the raw video as base64 for http transport, and uses the HTML5
video tag to load it. On Chrome 15 it works correctly, displaying a
control bar at the bottom with a play/pause button and a location
slider.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import HTML
video = open("animation.m4v", "rb").read()
video_encoded = video.encode("base64")
video_tag = '<video controls alt="test" src="data:video/x-m4v;base64,{0}">'.format(video_encoded)
HTML(data=video_tag)
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.HTML at 0x10fba28d0>
\end{codeoutput}
\end{codecell}
\subsection{Local Files}
The above examples embed images and video from the notebook filesystem
in the output areas of code cells. It is also possible to request these
files directly in markdown cells if they reside in the notebook
directory via relative urls prefixed with \texttt{files/}:
\begin{verbatim}
files/[subdirectory/]<filename>
\end{verbatim}
For example, in the example notebook folder, we have the Python logo,
addressed as:
\begin{verbatim}
<img src="files/python-logo.svg" />
\end{verbatim}
and a video with the HTML5 video tag:
\begin{verbatim}
<video controls src="files/animation.m4v" />
\end{verbatim}
These do not embed the data into the notebook file, and require that the
files exist when you are viewing the notebook.
\subsubsection{Security of local files}
Note that this means that the IPython notebook server also acts as a
generic file server for files inside the same tree as your notebooks.
Access is not granted outside the notebook folder so you have strict
control over what files are visible, but for this reason it is highly
recommended that you do not run the notebook server with a notebook
directory at a high level in your filesystem (e.g.~your home directory).
When you run the notebook in a password-protected manner, local file
access is restricted to authenticated users unless read-only views are
active.
\subsection{Linking to files and directories for viewing in the browser}
It is also possible to link directly to files or directories so they can
be opened in the browser. This is especially convenient if you're
interacting with a tool within IPython that generates HTML pages, and
you'd like to easily be able to open those in a new browser window.
Alternatively, if your IPython notebook server is on a remote system,
creating links provides an easy way to download any files that get
generated.
As we saw above, there are a bunch of \texttt{.ipynb} files in our
current directory.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
ls
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
00_notebook_tour.ipynb formatting.ipynb
01_notebook_introduction.ipynb octavemagic_extension.ipynb
Animations_and_Progress.ipynb publish_data.ipynb
Capturing Output.ipynb python-logo.svg
Script Magics.ipynb rmagic_extension.ipynb
animation.m4v sympy.ipynb
cython_extension.ipynb sympy_quantum_computing.ipynb
display_protocol.ipynb trapezoid_rule.ipynb
\end{verbatim}
\end{codeoutput}
\end{codecell}
If we want to create a link to one of them, we can call use the
\texttt{FileLink} object.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import FileLink
FileLink('00_notebook_tour.ipynb')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.lib.display.FileLink at 0x10f7ea3d0>
\end{codeoutput}
\end{codecell}
Alternatively, if we want to link to all of them, we can use the
\texttt{FileLinks} object, passing \texttt{'.'} to indicate that we want
links generated for the current working directory. Note that if there
were other directories under the current directory, \texttt{FileLinks}
would work in a recursive manner creating links to files in all
sub-directories as well.
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import FileLinks
FileLinks('.')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.lib.display.FileLinks at 0x10f7eaad0>
\end{codeoutput}
\end{codecell}
\subsubsection{External sites}
You can even embed an entire page from another site in an iframe; for
example this is today's Wikipedia page for mobile users:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.HTML at 0x1094900d0>
\end{codeoutput}
\end{codecell}
\subsubsection{Mathematics}
And we also support the display of mathematical expressions typeset in
LaTeX, which is rendered in the browser thanks to the
\href{http://mathjax.org}{MathJax library}.
Note that this is \emph{different} from the above examples. Above we
were typing mathematical expressions in Markdown cells (along with
normal text) and letting the browser render them; now we are displaying
the output of a Python computation as a LaTeX expression wrapped by the
\texttt{Math()} object so the browser renders it. The \texttt{Math}
object will add the needed LaTeX delimiters (\texttt{\$\$}) if they are
not provided:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import Math
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Math at 0x10fba26d0>
\end{codeoutput}
\end{codecell}
With the \texttt{Latex} class, you have to include the delimiters
yourself. This allows you to use other LaTeX modes such as
\texttt{eqnarray}:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
from IPython.display import Latex
Latex(r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{eqnarray}""")
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
<IPython.core.display.Latex at 0x10fba2c10>
\end{codeoutput}
\end{codecell}
Or you can enter latex directly with the \texttt{\%\%latex} cell magic:
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
%%latex
\begin{aligned}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{aligned}
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\end{codeoutput}
\end{codecell}
There is also a \texttt{\%\%javascript} cell magic for running
javascript directly, and \texttt{\%\%svg} for manually entering SVG
content.
\section{Loading external codes}
\begin{itemize}
\item
Drag and drop a \texttt{.py} in the dashboard
\item
Use \texttt{\%load} with any local or remote url:
\href{http://matplotlib.sourceforge.net/gallery.html}{the Matplotlib
Gallery!}
\end{itemize}
In this notebook we've kept the output saved so you can see the result,
but you should run the next cell yourself (with an active internet
connection).
Let's make sure we have pylab again, in case we have restarted the
kernel due to the crash demo above
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
%pylab inline
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{verbatim}
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.
\end{verbatim}
\end{codeoutput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py
\end{lstlisting}
\end{codeinput}
\end{codecell}
\begin{codecell}
\begin{codeinput}
\begin{lstlisting}
#!/usr/bin/env python
# implement the example graphs/integral from pyx
from pylab import *
from matplotlib.patches import Polygon
def func(x):
return (x-3)*(x-5)*(x-7)+85
ax = subplot(111)
a, b = 2, 9 # integral area
x = arange(0, 10, 0.01)
y = func(x)
plot(x, y, linewidth=1)
# make the shaded region
ix = arange(a, b, 0.01)
iy = func(ix)
verts = [(a,0)] + zip(ix,iy) + [(b,0)]
poly = Polygon(verts, facecolor='0.8', edgecolor='k')
ax.add_patch(poly)
text(0.5 * (a + b), 30,
r"$\int_a^b f(x)\mathrm{d}x$", horizontalalignment='center',
fontsize=20)
axis([0,10, 0, 180])
figtext(0.9, 0.05, 'x')
figtext(0.1, 0.9, 'y')
ax.set_xticks((a,b))
ax.set_xticklabels(('a','b'))
ax.set_yticks([])
show()
\end{lstlisting}
\end{codeinput}
\begin{codeoutput}
\begin{center}
\includegraphics[width=0.7\textwidth]{_fig_60.png}
\par
\end{center}
\end{codeoutput}
\end{codecell}
\end{document}