Jupyter: https://jupyter.org/
1988: Mathematica
https://www.wolfram.com/mathematica/
Key architectural details of Mathematica Notebooks:
2001: IPython
Enhanced interactive environment that includes support for data visualization and facilities for distributed and parallel computation
2005: SageMath (previously Sage)
SageMath is a free open-source mathematics software system licensed under the GPL. It builds on top of many existing open-source packages: NumPy, SciPy, matplotlib, Sympy, Maxima, GAP, FLINT, R and many more. Access their combined power through a common, Python-based language or directly via interfaces or wrappers.
Mission: Creating a viable free open source alternative to Magma, Maple, Mathematica and Matlab.
Created by William Stein
2011: IPython Notebook
pip
:pip install jupyterlab
conda install -c conda-forge jupyterlab
From the command line:
jupyter-notebook
jupyter-lab
On remote host:
ssh -L localhost:8888:localhost:8888 <server>
Two modes: command mode and edit mode
Command mode keyboard shortcuts:
Edit mode:
Section headings:
# Heading 1
## Heading 2
## Heading 3
**...**
or __...__
*...*
or _..._
**_..._**
Lists:
- item 1
- item 2
1. item 1
2. item 2
MathJax https://www.mathjax.org/
$X_i^j$, see $$ a = \sum_i b_i \int_c^d f(x)\,\mathrm{d}x $$
$...$
for inline math, $$...$$
for displayed math
\begin{align}
\dot{x} & = \sigma(y-x) \\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{align}
2+2
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 100)
y = np.sin(x)
s = np.abs(np.random.randn(x.shape[0])) * 100
plt.style.use('ggplot')
plt.scatter(x, y, c=y, s=s)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Sin')
plt.grid(True);
import ipywidgets as widgets
def plot_Lissajous(nx, ny):
N = 400
t = np.linspace(0, 2 * np.pi, N)
x = np.sin(nx * t)
y = np.cos(ny * t)
plt.plot(x, y)
plt.ylim(-1.1, 1.1)
plt.show()
wx = widgets.IntSlider(min=0, max=10, value=2, step=1, description="nx")
wy = widgets.IntSlider(min=0, max=10, value=3, step=1, description="ny", orientation='vertical')
out = widgets.interactive_output(plot_Lissajous, {'nx': wx, 'ny': wy})
ui = widgets.HBox([wy, widgets.VBox([out, wx])])
ui
VoilĂ transforms a Jupyter Notebook into a stand-alone web application
voila <path-to-notebook>