{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Intro to Jupyter and Python\n",
    "\n",
    "> Abstract: A brief introduction to using Jupyter and Python\n",
    "\n",
    "## Preface\n",
    "\n",
    "This resource is intended to be a whirlwind tour of using Python within Jupyter notebooks. Consider it a collection of pointers for further study and some small useful things you may not have known before.\n",
    "\n",
    "### Other resources\n",
    "\n",
    "**Beginner:** For more educative introductions, see:\n",
    "\n",
    "- https://swcarpentry.github.io/python-novice-gapminder/\n",
    "- https://www.w3schools.com/python/default.asp\n",
    "- https://inferentialthinking.com/chapters/03/programming-in-python.html\n",
    "\n",
    "If you already know other languages, you might find this useful to get up to speed with Python syntax: https://learnxinyminutes.com/docs/python\n",
    "\n",
    "**Intermediate:** For creating importable modules and packages, testing, documenting, logging, optimising...:\n",
    "\n",
    "- https://softwaresaved.github.io/az-intermediate-software-skills-course/ (alternatively available [here](https://carpentries-incubator.github.io/python-intermediate-development/index.html))\n",
    "- https://python-102.readthedocs.io/\n",
    "\n",
    "For a broader set of skills in data science:\n",
    "- [The Turing Way](https://the-turing-way.netlify.app/)\n",
    "- [Code Refinery](https://coderefinery.org/lessons/)\n",
    "\n",
    "For guides specifically for Earth sciences:\n",
    "- [Project Pythia Foundations](https://foundations.projectpythia.org/)\n",
    "\n",
    "## Jupyter basics\n",
    "\n",
    "A *Jupyter notebook* is a file (extension .ipynb) which can contain both (live) code and its outputs, as well as explanatory text. Content is organised into *cells*, where each cell may be either *Code* or [*Markdown*](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) (or others). A notebook can be rendered non-interactively in a web browser, converted to other formats (HTML, PDF ...), or can be run interactively through a range of software. The standard software is JupyterLab which can be interacted with in a web browser, while the server backend (where the code itself runs) can be run either locally on your own machine, or on a remote machine as is the case with the *Virtual Research Environment (VRE)*. A notebook must be connected to a *kernel* which provides the software executable used to run code within the notebook (see the top right \"Python 3\" in JupyterLab). When accessing the VRE, your Python code and data associated with a notebook are stored and running on a remote machine - you only view the inputs and outputs from the code such that data transfer over the internet to your web browser is minimal. The main advantage is that there is zero setup required - all you need is a web browser.\n",
    "\n",
    "When running interactively, notebook cells can be added, deleted, edited, and executed using buttons in JupyterLab and with keyboard shortcuts. Double click on this text to see the raw Markdown - re-render it by running the cell: use the \"play\" button at the top or use **Ctrl-Enter** (run) or **Shift-Enter** (run and advance to the next cell).\n",
    "\n",
    "A notebook switches between two modes: **command** and **edit**. Enter edit mode by double clicking inside a cell, or by pressing **Enter**. Enter command mode by pressing **Esc** and then the notebook can be navigated with the arrow keys.\n",
    "\n",
    "The following cell is set to \"Code\". Run the cell - you should see that the output of the last line of the cell is displayed as the output of the cell. This is a convenient way to check the state of variables rather than having to use `print()` as below. To suppress this behaviour, end the line with`;`\n",
    "\n",
    "Cells can be run in any order and the memory is persistent - see the incrementing counter `[1]`, `[2]` on the left - so be careful when you run (or re-run) cells out of order!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:24.511250Z",
     "iopub.status.busy": "2025-06-21T21:40:24.511078Z",
     "iopub.status.idle": "2025-06-21T21:40:24.519396Z",
     "shell.execute_reply": "2025-06-21T21:40:24.518927Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = 1\n",
    "b = 2\n",
    "a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:24.521372Z",
     "iopub.status.busy": "2025-06-21T21:40:24.521047Z",
     "iopub.status.idle": "2025-06-21T21:40:24.525558Z",
     "shell.execute_reply": "2025-06-21T21:40:24.525136Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 , 2\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(1, 2)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(a, \",\", b)\n",
    "a, b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Markdown cells\n",
    "\n",
    "These cells provide a way to document and describe your code. These can include rich text, equations, embedded images and video, and HTML. Consult [a reference](https://www.markdownguide.org/) (or see `Help / Markdown Reference` in JupyterLab) for more details, but some things to get you started (again, double click this cell to see the markdown):\n",
    "\n",
    "Use `# Title`, `## Subtitle ...` to create headings to structure documents - these should be placed *at the start* of a new cell.\n",
    "\n",
    "Use `*..*`, `**..**`, for *italics* and **bold**.\n",
    "\n",
    "Use `- ...` at the beginning of successive lines to make an unordered list:\n",
    "\n",
    "- list item 1\n",
    "- list item 2\n",
    "\n",
    "Use `1. ...` to make an ordered list:\n",
    "\n",
    "1. list item 1\n",
    "2. list item 2\n",
    "\n",
    "Use `$...$` to insert mathematics using [Latex](https://en.wikibooks.org/wiki/LaTeX/Mathematics) to create them inline like $\\frac{dy}{dx}=\\sin{\\theta} + 5k$, or `$$...$$` to create them in a centred equation style like $$\\frac{dy}{dx}=\\sin{\\theta} + 5k$$\n",
    "\n",
    "Use `---` to insert a horizontal line to break up sections\n",
    "\n",
    "---\n",
    "\n",
    "Use `` `...` `` to insert raw text like code: `print()`, or,\n",
    "\n",
    "\\`\\`\\`python  \n",
    "\\# insert python code here  \n",
    "\\`\\`\\`\n",
    "<!-- Note: Using \\ to escape the special characters (and this is a hidden comment, same as in HTML) -->\n",
    "\n",
    "to render Python code with syntax highlighting like:\n",
    "\n",
    "```python\n",
    "for i in range(5):\n",
    "    print(i)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Jupyter tricks and shortcuts\n",
    "\n",
    "As well as keyboard shortcuts to help interact with notebooks, there are [many](https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/) extra tricks that you will learn over time. Some of these are:\n",
    "\n",
    "**use ! to execute shell commands: (beware these will be system-specific!)**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:24.527358Z",
     "iopub.status.busy": "2025-06-21T21:40:24.527197Z",
     "iopub.status.idle": "2025-06-21T21:40:24.916771Z",
     "shell.execute_reply": "2025-06-21T21:40:24.916151Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/jovyan/notebooks\r\n"
     ]
    }
   ],
   "source": [
    "!pwd      # print working directory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:24.919419Z",
     "iopub.status.busy": "2025-06-21T21:40:24.918921Z",
     "iopub.status.idle": "2025-06-21T21:40:25.312343Z",
     "shell.execute_reply": "2025-06-21T21:40:25.311442Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total 700\r\n",
      "-rw-r--r-- 1 1001 118   4297 Jun 21 21:40 00a_External-Notebooks.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  30291 Jun 21 21:39 01a__Intro-Jupyter-Python.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  19182 Jun 21 21:39 01b1_Pandas-and-Plots.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  12893 Jun 21 21:39 02a__Intro-Swarm-viresclient.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  10560 Jun 21 21:39 02b__viresclient-Available-Data.ipynb\r\n",
      "-rw-r--r-- 1 1001 118 100056 Jun 21 21:39 02c__viresclient-API.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   9474 Jun 21 21:39 02d__viresclient-Large-Data.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   7711 Jun 21 21:39 02e1_Conjunction-Interface.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4395 Jun 21 21:39 02h1_HAPI.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4365 Jun 21 21:39 02z1__Template-Basic.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  11551 Jun 21 21:39 03a1_Demo-MAGx_LR_1B.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4247 Jun 21 21:39 03a2_Demo-MAGx_HR_1B.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4394 Jun 21 21:39 03b__Demo-EFIx_LP_1B.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   6396 Jun 21 21:39 03c__Demo-IPDxIRR_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   3869 Jun 21 21:39 03d__Demo-TECxTMS_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  10376 Jun 21 21:39 03e1_Demo-FACxTMS_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  16056 Jun 21 21:39 03e2_Demo-FAC_TMS_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4725 Jun 21 21:39 03f__Demo-EEFxTMS_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   3107 Jun 21 21:39 03g__Demo-IBIxTMS_2F.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  26056 Jun 21 21:39 03h1_Demo-AEBS-AEJxLPL.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  21144 Jun 21 21:39 03h2_Demo-AEBS-AEJxLPS.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   8443 Jun 21 21:39 03h3_Demo-AEBS-AOBxFAC.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  25168 Jun 21 21:39 03i1_Demo-VOBS.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  10834 Jun 21 21:39 03j1_Demo-PRISM-MITx.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  11327 Jun 21 21:39 03j2_Demo-PRISM-PPIxFAC.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   9009 Jun 21 21:39 03k1_Demo-EFIxTIE.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  10409 Jun 21 21:39 03k2_Demo-EFIxTCT.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   8795 Jun 21 21:39 03k3_Demo-EFIxIDM.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  11112 Jun 21 21:39 03l1_Demo-DNS.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   3342 Jun 21 21:39 03l2_Demo-WND.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   6051 Jun 21 21:39 03l3_Demo-Conjunctions-TOLEOS.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  12215 Jun 21 21:39 03y1_Multi-Mission-Intro.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4644 Jun 21 21:39 03z1_External-Data.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  12488 Jun 21 21:39 04a1_Geomag-Models-VirES.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  11317 Jun 21 21:39 04b1_Geomag-Models-eoxmagmod.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  38902 Jun 21 21:39 04c1_Geomag-Ground-Data-FTP.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  13071 Jun 21 21:39 04c2_Geomag-Ground-Data-VirES.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  19423 Jun 21 21:39 05a1_Polar-Region-Plots.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  25135 Jun 21 21:39 05b1_Solar-Wind-to-Ground.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   9006 Jun 21 21:39 06a1_FAST-Intro.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   4427 Jun 21 21:39 07a1_SW-chaosmagpy.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   2132 Jun 21 21:39 07b1_SW-pyamps.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  18338 Jun 21 21:39 07c1_SW-pyswipe.ipynb\r\n",
      "-rw-r--r-- 1 1001 118  16810 Jun 21 21:39 07d1_SW-ibpmodel.ipynb\r\n",
      "-rw-r--r-- 1 1001 118   2838 Jun 21 21:39 07e1_SW-swarmface.ipynb\r\n"
     ]
    }
   ],
   "source": [
    "!ls -l    # list files"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**use % to access [*IPython line magics*](https://ipython.readthedocs.io/en/stable/interactive/magics.html):**\n",
    "\n",
    "e.g. [%time](https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-time) or [%timeit](https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-timeit) to test execution time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:25.315110Z",
     "iopub.status.busy": "2025-06-21T21:40:25.314756Z",
     "iopub.status.idle": "2025-06-21T21:40:28.472124Z",
     "shell.execute_reply": "2025-06-21T21:40:28.471543Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.89 µs ± 31.8 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit [x**2 for x in range(100)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[%pdb](https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-pdb) to access the Python debugger"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**use ? to get help:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.474497Z",
     "iopub.status.busy": "2025-06-21T21:40:28.474077Z",
     "iopub.status.idle": "2025-06-21T21:40:28.509505Z",
     "shell.execute_reply": "2025-06-21T21:40:28.509043Z"
    }
   },
   "outputs": [],
   "source": [
    "?print"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also try using **Tab** to auto-complete and **Shift-Tab** to see quick help on the object you are accessing."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Python basics\n",
    "\n",
    "Values are *assigned* to *variables* with `=`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.511707Z",
     "iopub.status.busy": "2025-06-21T21:40:28.511545Z",
     "iopub.status.idle": "2025-06-21T21:40:28.514400Z",
     "shell.execute_reply": "2025-06-21T21:40:28.513778Z"
    }
   },
   "outputs": [],
   "source": [
    "x = 5\n",
    "y = 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Operators* perform operations between two given variables - the outcomes are obvious for arithmetic situations such as in this table, but behaviour of operators can be defined for other object types (as with lists and strings as below).\n",
    "\n",
    "| .         | Addition | Subtraction | Multiplication | Division | Exponent |  Modulo | . | Equal    | Not equal | Less than | [and more...](https://www.w3schools.com/python/python_operators.asp) |\n",
    "|-----------|:--------:|:-----------:|:--------------:|:--------:|:--------:|:-------:|---|----------|-----------|-----------|----------------------------------------------------------------------|\n",
    "|  Example: |  `5 + 2` |   `5 - 2`   |     `5 * 2`    |  `5 / 2` | `5 ** 2` | `5 % 2` | . | `5 == 2` | `5 != 2`  | `5 < 2`   | ...                                                                  |\n",
    "| Output:   | 7        | 3           | 10             | 2.5      | 25       | 1       | . | `False`  | `True`    | `False`   | ...                                                                  |\n",
    "\n",
    "We can use conditional operators in an [\"if statement\"](https://www.w3schools.com/python/python_conditions.asp) to control program flow, as below. Indentation / whitespace at the beginning of the line is used to define scope in the code, where other languages might use brackets or an `endif`. You should be able to find the bug in this code for some values of x and y, and fix it by adding additional `elif` cases before the final `else`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.516355Z",
     "iopub.status.busy": "2025-06-21T21:40:28.516188Z",
     "iopub.status.idle": "2025-06-21T21:40:28.519699Z",
     "shell.execute_reply": "2025-06-21T21:40:28.519129Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5 > 2\n"
     ]
    }
   ],
   "source": [
    "x, y = 5, 2\n",
    "if x > 2:\n",
    "    print(x, \">\", y)\n",
    "else:\n",
    "    print(x, \"<\", y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Whitespace is important in Python, unlike other languages. Everything within the `if` block must be indented!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python data types\n",
    "\n",
    "You should be familiar with some of the core Python data types: integer, floating point number, string, list, tuple, [dictionary](https://www.freecodecamp.org/news/python-dictionaries-detailed-visual-introduction/):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.521692Z",
     "iopub.status.busy": "2025-06-21T21:40:28.521531Z",
     "iopub.status.idle": "2025-06-21T21:40:28.526436Z",
     "shell.execute_reply": "2025-06-21T21:40:28.525935Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1,\n",
       " 1.0,\n",
       " 'one',\n",
       " [1, 1.0, 'one'],\n",
       " (1, 1.0, 'one'),\n",
       " {'a': 1, 'b': 1.0, 'c': 'one', 'd': [1, 1.0, 'one'], 'e': (1, 1.0, 'one')})"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = 1\n",
    "b = 1.0\n",
    "c = \"one\"\n",
    "d = [a, b, c]\n",
    "e = (a, b, c)\n",
    "f = {\"a\": a, \"b\": b, \"c\": c, \"d\": d, \"e\": e}\n",
    "a, b, c, d, e, f"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use `type()` to see what the type of an object is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.528226Z",
     "iopub.status.busy": "2025-06-21T21:40:28.528067Z",
     "iopub.status.idle": "2025-06-21T21:40:28.533200Z",
     "shell.execute_reply": "2025-06-21T21:40:28.532675Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(int, float, str, list, tuple, dict)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(a), type(b), type(c), type(d), type(e), type(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Jupyter provides tools to help coding. Create a new code cell here, type `f.` then press **Tab** - you will see a list completion options. Extract the keys from the dictionary with `f.keys()`. Here we have used `.` to access one of the *methods* the object we assigned to `f`. The parentheses are necessary as this is a function call - arguments could be passed here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.535111Z",
     "iopub.status.busy": "2025-06-21T21:40:28.534899Z",
     "iopub.status.idle": "2025-06-21T21:40:28.538981Z",
     "shell.execute_reply": "2025-06-21T21:40:28.538198Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<function dict.keys>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f.keys  # is the function itself"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.540891Z",
     "iopub.status.busy": "2025-06-21T21:40:28.540744Z",
     "iopub.status.idle": "2025-06-21T21:40:28.544896Z",
     "shell.execute_reply": "2025-06-21T21:40:28.544343Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['a', 'b', 'c', 'd', 'e'])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f.keys()  # actually runs the function"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's use `?` to get help on the dictionary we created. This can be used to get a quick look into the documentation for any object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.546942Z",
     "iopub.status.busy": "2025-06-21T21:40:28.546782Z",
     "iopub.status.idle": "2025-06-21T21:40:28.550475Z",
     "shell.execute_reply": "2025-06-21T21:40:28.549920Z"
    }
   },
   "outputs": [],
   "source": [
    "f?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "This shows us that we can create such a dictionary using the `dict()` function - before we used the shortcut syntax with curly brackets, `{}`. Let's create a new dictionary using `dict()` instead. Click inside the parentheses in `dict(..)` and press **Shift-Tab** to access the quick help. Follow the example text near the end of the quick help to create a dictionary."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.552644Z",
     "iopub.status.busy": "2025-06-21T21:40:28.552487Z",
     "iopub.status.idle": "2025-06-21T21:40:28.556588Z",
     "shell.execute_reply": "2025-06-21T21:40:28.556046Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_dict = dict()\n",
    "my_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.558852Z",
     "iopub.status.busy": "2025-06-21T21:40:28.558391Z",
     "iopub.status.idle": "2025-06-21T21:40:28.563264Z",
     "shell.execute_reply": "2025-06-21T21:40:28.562718Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'a': 'hello!', 'b': 42}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_dict = dict(a=\"hello!\", b=42)\n",
    "my_dict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You should be able to extract values from the dictionary using the key names, in two different ways:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.565556Z",
     "iopub.status.busy": "2025-06-21T21:40:28.565383Z",
     "iopub.status.idle": "2025-06-21T21:40:28.569165Z",
     "shell.execute_reply": "2025-06-21T21:40:28.568405Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello!\n",
      "42\n"
     ]
    }
   ],
   "source": [
    "print(my_dict[\"a\"])\n",
    "print(my_dict.get(\"b\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Remember that dictionaries consist of (*key*, *value*) pairs. Use `my_dict[\"key_name\"]` or `my_dict.get(\"key_name\")` to extract a value, or if you want to supply a default value when they key hasn't been found:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.571420Z",
     "iopub.status.busy": "2025-06-21T21:40:28.571257Z",
     "iopub.status.idle": "2025-06-21T21:40:28.575141Z",
     "shell.execute_reply": "2025-06-21T21:40:28.574615Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'empty!'"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_dict.get(\"c\", \"empty!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python *objects*\n",
    "\n",
    "Everything in Python is an *object*. An object is a particular *instance* of a *class*, and has a set of associated behaviours that the class provides. These behaviours come in the form of *properties* (attributes that the object carries around, and typically involve no real computation time to access), and *methods* (functions that act on the object). These are accessed as `object.property` and `object.method()`.\n",
    "\n",
    "To demonstrate, here we create a complex number, then separately access the real and imaginary components of it which are stored as object properties. Finally we use `.conjugate()` to evaluate its complex conjugate - this returns a new complex number object that can be manipulated in the same way."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.577478Z",
     "iopub.status.busy": "2025-06-21T21:40:28.577184Z",
     "iopub.status.idle": "2025-06-21T21:40:28.581657Z",
     "shell.execute_reply": "2025-06-21T21:40:28.580829Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'complex'>\n",
      "(1+2j)\n",
      "1.0\n",
      "2.0\n",
      "(1-2j)\n"
     ]
    }
   ],
   "source": [
    "z = 1 + 2j\n",
    "print(type(z))\n",
    "print(z)\n",
    "print(z.real)\n",
    "print(z.imag)\n",
    "print(z.conjugate())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is the basis of *object-oriented programming* which is a popular programming paradigm that Python software takes advantage of."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Manipulating lists and strings\n",
    "\n",
    "Lists and strings are closely related objects - a string can be thought of as a list of characters. Python comes with an in-built toolbox to help work with these objects ([*string methods*](https://www.w3schools.com/python/python_ref_string.asp) and [*list methods*](https://www.w3schools.com/python/python_ref_list.asp)). Here we use the string methods `split()` and `join()` to split a phrase up then rejoin the words differently. Afterwards we show that the `replace()` method already provides this functionality, replacing instances of a chosen character(s) (in this case, space) with another."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.584028Z",
     "iopub.status.busy": "2025-06-21T21:40:28.583821Z",
     "iopub.status.idle": "2025-06-21T21:40:28.587827Z",
     "shell.execute_reply": "2025-06-21T21:40:28.587258Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'some words'"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = \"some words\"\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.590195Z",
     "iopub.status.busy": "2025-06-21T21:40:28.589987Z",
     "iopub.status.idle": "2025-06-21T21:40:28.593953Z",
     "shell.execute_reply": "2025-06-21T21:40:28.593410Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['some', 'words']"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l = s.split()\n",
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.595987Z",
     "iopub.status.busy": "2025-06-21T21:40:28.595811Z",
     "iopub.status.idle": "2025-06-21T21:40:28.599942Z",
     "shell.execute_reply": "2025-06-21T21:40:28.599425Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'some; words'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"; \".join(l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.602254Z",
     "iopub.status.busy": "2025-06-21T21:40:28.602079Z",
     "iopub.status.idle": "2025-06-21T21:40:28.606085Z",
     "shell.execute_reply": "2025-06-21T21:40:28.605560Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'some; words'"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.replace(\" \", \"; \")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's look at some list manipulation now using our new list, `l`. We can use `append()` to append a new item to the end (this is done in-place, updating the state of `l`, in contrast to the string methods above which return new strings/lists), then sort the resulting three words alphabetically."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.608219Z",
     "iopub.status.busy": "2025-06-21T21:40:28.608032Z",
     "iopub.status.idle": "2025-06-21T21:40:28.611882Z",
     "shell.execute_reply": "2025-06-21T21:40:28.611381Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['some', 'words']"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.613926Z",
     "iopub.status.busy": "2025-06-21T21:40:28.613761Z",
     "iopub.status.idle": "2025-06-21T21:40:28.617886Z",
     "shell.execute_reply": "2025-06-21T21:40:28.617287Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['some', 'words', 'more']"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.append(\"more\")\n",
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.620434Z",
     "iopub.status.busy": "2025-06-21T21:40:28.620277Z",
     "iopub.status.idle": "2025-06-21T21:40:28.624132Z",
     "shell.execute_reply": "2025-06-21T21:40:28.623585Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['more', 'some', 'words']"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.sort()\n",
    "l"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can access items from a list using `[]` and the index number within the list, **starting from zero**. Using a colon, e.g. `a:b`, performs *list slicing* to return all values in the list from index `a` up to, but not including, `b`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.625989Z",
     "iopub.status.busy": "2025-06-21T21:40:28.625791Z",
     "iopub.status.idle": "2025-06-21T21:40:28.630233Z",
     "shell.execute_reply": "2025-06-21T21:40:28.629679Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'more'"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.632167Z",
     "iopub.status.busy": "2025-06-21T21:40:28.631954Z",
     "iopub.status.idle": "2025-06-21T21:40:28.635926Z",
     "shell.execute_reply": "2025-06-21T21:40:28.635378Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['more', 'some']"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l[0:2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition to list methods, which are particular to list objects and so are accessed as `list.method()`, there are other more fundamental operations that are provided as [built-in functions](https://www.w3schools.com/python/python_ref_functions.asp) that you could try to apply to any object so are accessed as `function(list)`. Below we evaluate the length of the list, and of the string which is the first item of the list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.637728Z",
     "iopub.status.busy": "2025-06-21T21:40:28.637568Z",
     "iopub.status.idle": "2025-06-21T21:40:28.641552Z",
     "shell.execute_reply": "2025-06-21T21:40:28.641039Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3, 4)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(l), len(l[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another way to add items to a list is to concatenate two lists together, which could be done using `list1.extend(list2)` as opposed to `append()` above (which just adds one item to a list). Let's achieve the same thing by using the simpler `+` operator which for lists, simply joins them together:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.643646Z",
     "iopub.status.busy": "2025-06-21T21:40:28.643278Z",
     "iopub.status.idle": "2025-06-21T21:40:28.647919Z",
     "shell.execute_reply": "2025-06-21T21:40:28.647417Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[10, 11, 12, 5]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[10, 11, 12] + [5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But what if we wanted to add the number to each item in the list (i.e. we are trying to do some arithmetic)? In this case we would have to *loop through* each item in the list and add `5` to each one."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loops\n",
    "\n",
    "For-loops are constructed with `for a in b:`, followed by an indented block as with if-statements. `a` is a variable which will change on each iteration of the loop, and `b` is an *iterable* - in a simple case like below this can just be a list, something containing items that can be iterated through. The length of `b` therefore determines the number of iterations the loop will make. We could create an index counter to iterate through and access items in a list (more normally, this would be achieved with `for i in range(3)...`) ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.650089Z",
     "iopub.status.busy": "2025-06-21T21:40:28.649637Z",
     "iopub.status.idle": "2025-06-21T21:40:28.653356Z",
     "shell.execute_reply": "2025-06-21T21:40:28.652840Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "11\n",
      "12\n"
     ]
    }
   ],
   "source": [
    "my_list = [10, 11, 12]\n",
    "for i in [0, 1, 2]:\n",
    "    print(my_list[i])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "but it is more *Pythonic* to iterate directly through the list items themselves:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.655422Z",
     "iopub.status.busy": "2025-06-21T21:40:28.655266Z",
     "iopub.status.idle": "2025-06-21T21:40:28.658939Z",
     "shell.execute_reply": "2025-06-21T21:40:28.658403Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "11\n",
      "12\n"
     ]
    }
   ],
   "source": [
    "my_list = [10, 11, 12]\n",
    "for i in my_list:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To create a new list with each item incremented by 5, we first create an empty list, then append the new number on each iteration of the loop:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.661140Z",
     "iopub.status.busy": "2025-06-21T21:40:28.660718Z",
     "iopub.status.idle": "2025-06-21T21:40:28.666712Z",
     "shell.execute_reply": "2025-06-21T21:40:28.666200Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[15, 16, 17]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_list = [10, 11, 12]\n",
    "my_list2 = []\n",
    "for i in my_list:\n",
    "    my_list2.append(i + 5)\n",
    "my_list2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively, this can be done in-place on the original list if we iterate through the index:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.668858Z",
     "iopub.status.busy": "2025-06-21T21:40:28.668703Z",
     "iopub.status.idle": "2025-06-21T21:40:28.672686Z",
     "shell.execute_reply": "2025-06-21T21:40:28.672210Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[15, 16, 17]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_list = [10, 11, 12]\n",
    "for i in range(len(my_list)):\n",
    "    my_list[i] = my_list[i] + 5\n",
    "my_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To be properly Pythonic, we should use a *list comprehension* which can implement looping behaviour while constructing a list directly:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.674850Z",
     "iopub.status.busy": "2025-06-21T21:40:28.674326Z",
     "iopub.status.idle": "2025-06-21T21:40:28.678985Z",
     "shell.execute_reply": "2025-06-21T21:40:28.678454Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[15, 16, 17]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_list = [10, 11, 12]\n",
    "[i+5 for i in my_list]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Functions\n",
    "\n",
    "Functions can be *defined* using `def function_name(arguments): ...` followed by an indented block. Usually something should be *returned* by the function by putting `return ...` on the last line."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.681411Z",
     "iopub.status.busy": "2025-06-21T21:40:28.680970Z",
     "iopub.status.idle": "2025-06-21T21:40:28.685439Z",
     "shell.execute_reply": "2025-06-21T21:40:28.684701Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[15, 16, 17]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def add_5(input_list):\n",
    "    output_list = [i+5 for i in input_list]\n",
    "    return output_list\n",
    "\n",
    "add_5([10, 11, 12])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Arguments (args) for the function can be provided separated by commas, followed by optional *keyword arguments* (kwargs) like `x=<default value>`. We should also document the function with a *docstring* which goes inside triple-quotes `\"\"\"` at the top of the function, and comments with `#`. Adding a docstring here makes the code *self-documenting* - we can now access this through the notebook help, which is revealed by Shift-Tab when typing `print_things(...)`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.687649Z",
     "iopub.status.busy": "2025-06-21T21:40:28.687360Z",
     "iopub.status.idle": "2025-06-21T21:40:28.691602Z",
     "shell.execute_reply": "2025-06-21T21:40:28.690800Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1; 2; 3\n"
     ]
    }
   ],
   "source": [
    "def print_things(a, b, c=None):\n",
    "    \"\"\"Print 'a; b; c' or 'a; b'\"\"\"\n",
    "    # A shortcut to do if-else logic\n",
    "    output = [a, b, c] if c else [a, b]\n",
    "    # Cast each of a, b, c to strings then join them\n",
    "    print(\"; \".join([str(i) for i in output]))\n",
    "\n",
    "print_things(1, 2, 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extending functionality by *importing* from other packages\n",
    "\n",
    "Obviously the above is an overly complex way to just add two sets of numbers together. This is because lists are not the appropriate object for this, and instead an *array* is neccessary. Array functionality can be *imported* from the *package*, [**numpy**](https://docs.scipy.org/doc/numpy/user/quickstart.html) (numerical Python). Array objects behave like vectors and matrices in mathematics, and can be higher dimensional - hence the `ndarray` name, n-dimensional array."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.695257Z",
     "iopub.status.busy": "2025-06-21T21:40:28.695033Z",
     "iopub.status.idle": "2025-06-21T21:40:28.765028Z",
     "shell.execute_reply": "2025-06-21T21:40:28.764522Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.768074Z",
     "iopub.status.busy": "2025-06-21T21:40:28.767760Z",
     "iopub.status.idle": "2025-06-21T21:40:28.775106Z",
     "shell.execute_reply": "2025-06-21T21:40:28.774609Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([10, 11, 12])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = numpy.array([10, 11, 12])\n",
    "print(type(a))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.778354Z",
     "iopub.status.busy": "2025-06-21T21:40:28.777285Z",
     "iopub.status.idle": "2025-06-21T21:40:28.783565Z",
     "shell.execute_reply": "2025-06-21T21:40:28.783116Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([15, 16, 17])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is customary to shorten the name used to refer to the imported package - this is done with `import ... as ...` - here we import `numpy` and rename it as `np` so that we can refer to anything within numpy as `np.[...]`. Another option is to just import only the part we want with `from ... import ...`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.785696Z",
     "iopub.status.busy": "2025-06-21T21:40:28.785521Z",
     "iopub.status.idle": "2025-06-21T21:40:28.791844Z",
     "shell.execute_reply": "2025-06-21T21:40:28.791410Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from numpy import array\n",
    "\n",
    "l1 = np.array([1, 2, 3])\n",
    "l2 = array([1, 2, 3])\n",
    "\n",
    "np.array_equal(l1, l2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Arrays come with new properties and methods for mathematical operations, as well as many functions under the numpy *namespace* (what we can access with `np.[...]`). More advanced tools can be found in [**scipy**](https://docs.scipy.org/doc/scipy/reference/tutorial/general.html) (e.g. `from scipy import fft`) or elsewhere.\n",
    "\n",
    "The standard tool for making figures is [**matplotlib**](https://matplotlib.org/tutorials/index.html). Numpy and matplotlib should be quite familiar to those coming from Matlab - you just need to get used to working from the numpy and matplotlib namespaces, and to start counting from zero instead of one!\n",
    "\n",
    "The \"pyplot\" module of matplotlib can be used in a similar way to Matlab, with repeated calls to `plt.[...]` updating the state of the figure being created:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:28.794457Z",
     "iopub.status.busy": "2025-06-21T21:40:28.794282Z",
     "iopub.status.idle": "2025-06-21T21:40:29.609031Z",
     "shell.execute_reply": "2025-06-21T21:40:29.608335Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:29.611877Z",
     "iopub.status.busy": "2025-06-21T21:40:29.611419Z",
     "iopub.status.idle": "2025-06-21T21:40:29.784769Z",
     "shell.execute_reply": "2025-06-21T21:40:29.784221Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(-2*np.pi, 2*np.pi, 0.1)\n",
    "y = np.sin(x)\n",
    "plt.plot(x, y)\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.title(\"y = sin(x)\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, for full control of figures, it is more flexible to use the object oriented approach as below. For more, refer to the [matplotlib tutorials](https://matplotlib.org/tutorials/index.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:29.786625Z",
     "iopub.status.busy": "2025-06-21T21:40:29.786471Z",
     "iopub.status.idle": "2025-06-21T21:40:29.925584Z",
     "shell.execute_reply": "2025-06-21T21:40:29.924971Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create a \"figure\" object that contains everything\n",
    "fig = plt.figure()\n",
    "# Add an \"axes\" object as part of the figure\n",
    "ax = fig.add_subplot(111)\n",
    "# NB: Instead of the above, it is more convenient to use:\n",
    "#       fig, ax = plt.subplots(nrows=1, ncols=1)\n",
    "# Add things to the axes\n",
    "ax.plot(x, y)\n",
    "ax.set_xlabel(\"x\")\n",
    "ax.set_ylabel(\"y\")\n",
    "ax.set_title(\"y = sin(x)\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The demonstrations above show that there are quite a few lines of code necessary to do the typical data analysis flow of loading/generating data, performing some computation, and plotting the results, in addition to having to pass around variables (like `x` and `y` above). This code may very often be quite similar so you might imagine standardising this process. It is for this reason that [**pandas**](https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html) has become popular, which provides the `DataFrame` object (inspired by the R language). This enables us to create a single tabular object to pass around (called `df` below) that contains our data (in this case numpy arrays), that has built-in plotting methods to rapidly inspect the data (creating matplotlib figures). Pandas accepts a wide range of input formats to load data, and contains computational tools that are particularly useful for time series, as well as connecting to [**Dask**](https://docs.dask.org/en/latest/why.html) for doing larger computations (larger than memory, multi-process, distributed etc.)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:29.927707Z",
     "iopub.status.busy": "2025-06-21T21:40:29.927529Z",
     "iopub.status.idle": "2025-06-21T21:40:30.209880Z",
     "shell.execute_reply": "2025-06-21T21:40:30.209373Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:30.212390Z",
     "iopub.status.busy": "2025-06-21T21:40:30.212065Z",
     "iopub.status.idle": "2025-06-21T21:40:30.221859Z",
     "shell.execute_reply": "2025-06-21T21:40:30.221263Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-6.283185</td>\n",
       "      <td>2.449294e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-6.183185</td>\n",
       "      <td>9.983342e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-6.083185</td>\n",
       "      <td>1.986693e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-5.983185</td>\n",
       "      <td>2.955202e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-5.883185</td>\n",
       "      <td>3.894183e-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          x             y\n",
       "0 -6.283185  2.449294e-16\n",
       "1 -6.183185  9.983342e-02\n",
       "2 -6.083185  1.986693e-01\n",
       "3 -5.983185  2.955202e-01\n",
       "4 -5.883185  3.894183e-01"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"x\": np.arange(-2*np.pi, 2*np.pi, 0.1),\n",
    "                   \"y\": np.sin(np.arange(-2*np.pi, 2*np.pi, 0.1))})\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-06-21T21:40:30.224509Z",
     "iopub.status.busy": "2025-06-21T21:40:30.224062Z",
     "iopub.status.idle": "2025-06-21T21:40:30.381822Z",
     "shell.execute_reply": "2025-06-21T21:40:30.381195Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot(x=\"x\", y=\"y\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Moving beyond pandas, we come to [**xarray**](http://xarray.pydata.org/en/stable/), which extends the pandas concepts to n-dimensional data.\n",
    "\n",
    "Try the [Xarray Tutorial](https://xarray-contrib.github.io/xarray-tutorial/) to learn more."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}