|
|
|
|
|
|
|
|
%% 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}
|
|
|
0 1 2 3 4 5 6 7
|
|
|
\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}
|
|
|
|