# Jupyter Notebooks Cheat Sheet

## MAGIC COMMANDS

`%quickref` Display the IPython Quick Reference Card  
`%magic` Display detailed documentation for all of the available magic commands  
`%debug` Enter the interactive debugger at the bottom of the last exception trace-back  
`%hist` Print command input (and optionally output) history  
`%pdb` Automatically enter debugger after any exception  
`%paste` Execute pre-formatted Python code from clipboard  
`%cpaste` Open a special prompt for manually pasting Python code to be executed  
`%reset` Delete all variables / names defined in interactive namespace  
`%page` OBJECT Pretty print the object and display it through a pager  
`%run` script.py Run a Python script inside IPython  
`%prun` statement Execute statement with cProfile and report the profiler output  
`%time` statement Report the execution time of single statement  
`%timeit` statement Run a statement multiple times to compute an ensemble average execution time. Useful for timing code with very short execution time  
`%who`, `%who_ls`, `%whos` Display variables defined in interactive namespace, with varying levels of information / verbosity  
`%xdel` variable Delete a variable and attempt to clear any references to the object in the IPython internals  

## INTERACTING WITH THE OPERATING SYSTEM

`!cmd` Execute cmd in the system shell  
`output = !cmd args` Run cmd and store the stdout in output  
`%alias alias_name cmd` Define an alias for a system (shell) command  
`%bookmark` Utilize IPython's directory bookmarking system  
`%cd` directory Change system working directory to passed directory  
`%pwd` Return the current system working directory  
`%pushd` directory Place current directory on stack and change to target directory  
`%popd` Change to directory popped off the top of the stack  
`%dirs` Return a list containing the current directory stack  
`%dhist` Print the history of visited directories  
`%env` Return the system environment variables as a dict  

Input variables are stored in variables named like `iX`, where `X` is the input line number  

IPython is capable of logging the entire console session including input and output  
Logging is turned on by typing `%logstart`  

Starting a line in IPython with an exclamation point `!`, or bang, tells IPython to execute everything after the bang in the system shell  
The console output of a shell command can be stored in a variable by assigning the !-escaped expression to a variable  

## TIMING CODE

`%time` runs a statement once, reporting the total execution time  
`%timeit` given an arbitrary statement, it has a heuristic to run a statement multiple times to produce a fairly accurate average runtime
