{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# iPython Profiler\n", "\n", "IPython provides access to a wide range of functions to measure times and create profiles. The following magic IPython commands are explained here:\n", "\n", "| Command | Description |\n", "| -------------- | --------------------------------------------------------------------------------- |\n", "| `%time` | Time to execute a single statement |\n", "| `%timeit` | Average time it took to execute a single statement repeatedly |\n", "| `%prun` | Run code with the profiler |\n", "| `%lprun` | Run code with the line-by-line profiler |\n", "| `%memit` | Measure the memory usage of a single statement |\n", "| `%mprun` | Executes the code with the line-by-line memory profiler |\n", "\n", "The last four commands are not contained in IPython itself, but in the modules [line_profiler](https://github.com/pyutils/line_profiler) and [memory_profiler](https://github.com/pythonprofilers/memory_profiler).\n", "\n", "
\n", "\n", "**See also:**\n", "\n", "* [Penn Machine Learning Benchmarks](https://github.com/EpistasisLab/pmlb)\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `%timeit` and `%time`\n", "\n", "We saw the `%timeit` line and `%%timeit` cell magic in the introduction of the magic functions in IPython magic commands. They can be used to measure the timing of the repeated execution of code snippets:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:32.965312Z", "iopub.status.busy": "2026-05-20T17:29:32.965144Z", "iopub.status.idle": "2026-05-20T17:29:35.629292Z", "shell.execute_reply": "2026-05-20T17:29:35.628603Z", "shell.execute_reply.started": "2026-05-20T17:29:32.965294Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "326 ns ± 0.613 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)\n" ] } ], "source": [ "%timeit sum(range(100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that `%timeit` executes the execution multiple times in a loop. If the number of loops is not specified with `-n`, `%timeit` automatically adjusts the number so that sufficient measurement accuracy is achieved:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:35.629941Z", "iopub.status.busy": "2026-05-20T17:29:35.629857Z", "iopub.status.idle": "2026-05-20T17:29:41.372468Z", "shell.execute_reply": "2026-05-20T17:29:41.372057Z", "shell.execute_reply.started": "2026-05-20T17:29:35.629932Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "70.9 ms ± 633 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%%timeit\n", "total = 0\n", "for i in range(1000):\n", " for j in range(1000):\n", " total += i * (-1) ** j" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes repeating an operation is not the best option, for example when we have a list that we want to sort. Here we may be misled by repeated surgery. Sorting a presorted list is much faster than sorting an unsorted list, so repeating it distorts the result:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:41.373005Z", "iopub.status.busy": "2026-05-20T17:29:41.372886Z", "iopub.status.idle": "2026-05-20T17:29:43.219618Z", "shell.execute_reply": "2026-05-20T17:29:43.219223Z", "shell.execute_reply.started": "2026-05-20T17:29:41.372996Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "225 μs ± 882 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], "source": [ "import random\n", "\n", "\n", "ls = [random.random() for i in range(100000)]\n", "%timeit ls.sort()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the `%time` function might be a better choice. `%time` should also be the better choice for long-running commands, when short system-related delays are unlikely to affect the result:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.220070Z", "iopub.status.busy": "2026-05-20T17:29:43.219976Z", "iopub.status.idle": "2026-05-20T17:29:43.239140Z", "shell.execute_reply": "2026-05-20T17:29:43.238848Z", "shell.execute_reply.started": "2026-05-20T17:29:43.220061Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 10.7 ms, sys: 658 μs, total: 11.3 ms\n", "Wall time: 11.7 ms\n" ] } ], "source": [ "import random\n", "\n", "\n", "ls = [random.random() for i in range(100000)]\n", "%time ls.sort()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sorting an already sorted list:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.239695Z", "iopub.status.busy": "2026-05-20T17:29:43.239608Z", "iopub.status.idle": "2026-05-20T17:29:43.242037Z", "shell.execute_reply": "2026-05-20T17:29:43.241847Z", "shell.execute_reply.started": "2026-05-20T17:29:43.239686Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 566 μs, sys: 0 ns, total: 566 μs\n", "Wall time: 567 μs\n" ] } ], "source": [ "%time ls.sort()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note how much faster the pre-sorted list is to be sorted, but also note how much longer the timing with `%time` takes compared to `%timeit`, even for the pre-sorted list. This is due to the fact that `%timeit` is doing some clever things to keep system calls from interfering with the timing. This prevents, for example, the garbage collection of Python objects that are no longer used and that could otherwise affect the time measurement. Because of this, the `%timeit` results are usually noticeably faster than the `%time` results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Profiling for scripts: `%prun`\n", "\n", "A program is made up of many individual instructions, and sometimes it is more important to measure those instructions in context than to measure them yourself. Python includes a built-in [Code-Profiler](https://docs.python.org/3/library/profile.html). However, IPython offers a much more convenient way to use this profiler in the form of the magic function `%prun`.\n", "\n", "As an example, let’s define a simple function that does some calculations:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.243357Z", "iopub.status.busy": "2026-05-20T17:29:43.243274Z", "iopub.status.idle": "2026-05-20T17:29:43.245005Z", "shell.execute_reply": "2026-05-20T17:29:43.244793Z", "shell.execute_reply.started": "2026-05-20T17:29:43.243350Z" } }, "outputs": [], "source": [ "def sum_of_lists(n):\n", " total = 0\n", " for i in range(5):\n", " ls = [j ^ (j >> i) for j in range(n)]\n", " total += sum(ls)\n", " return total" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.246312Z", "iopub.status.busy": "2026-05-20T17:29:43.246150Z", "iopub.status.idle": "2026-05-20T17:29:43.472568Z", "shell.execute_reply": "2026-05-20T17:29:43.472207Z", "shell.execute_reply.started": "2026-05-20T17:29:43.246302Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " " ] }, { "data": { "text/plain": [ " 737 function calls (721 primitive calls) in 0.224 seconds\n", "\n", " Ordered by: internal time\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 4/1 0.094 0.024 0.000 0.000 {method 'control' of 'select.kqueue' objects}\n", " 14 0.051 0.004 0.060 0.004 socket.py:626(send)\n", " 5 0.020 0.004 0.020 0.004 {built-in method builtins.sum}\n", " 1 0.016 0.016 0.020 0.020 74316826.py:1(sum_of_lists)\n", " 2 0.006 0.003 0.047 0.024 socket.py:703(send_multipart)\n", " 2 0.006 0.003 0.006 0.003 {method '__exit__' of 'sqlite3.Connection' objects}\n", " 1 0.006 0.006 0.006 0.006 {method 'send' of '_socket.socket' objects}\n", " 1 0.006 0.006 0.091 0.091 asyncio.py:200(_handle_events)\n", " 1 0.006 0.006 0.012 0.012 history.py:55(only_when_enabled)\n", " 2 0.006 0.003 0.006 0.003 {method 'recv' of '_socket.socket' objects}\n", " 1 0.005 0.005 0.025 0.025 :1()\n", " 5 0.000 0.000 0.000 0.000 attrsettr.py:66(_get_attr_opt)\n", " 15 0.000 0.000 0.000 0.000 enum.py:1581(__or__)\n", " 5 0.000 0.000 0.199 0.040 base_events.py:1947(_run_once)\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", " 8/5 0.000 0.000 0.091 0.018 {method 'run' of '_contextvars.Context' objects}\n", " 146/142 0.000 0.000 0.000 0.000 {built-in method builtins.isinstance}\n", " 66 0.000 0.000 0.000 0.000 enum.py:1574(_get_value)\n", " 2 0.000 0.000 0.066 0.033 iostream.py:278(_really_send)\n", " 4/1 0.000 0.000 0.000 0.000 selectors.py:540(select)\n", " 29 0.000 0.000 0.000 0.000 enum.py:691(__call__)\n", " 5 0.000 0.000 0.000 0.000 attrsettr.py:43(__getattr__)\n", " 2 0.000 0.000 0.000 0.000 socket.py:774(recv_multipart)\n", " 1 0.000 0.000 0.000 0.000 {method 'execute' of 'sqlite3.Connection' objects}\n", " 1 0.000 0.000 0.006 0.006 selector_events.py:129(_read_from_self)\n", " 29 0.000 0.000 0.000 0.000 enum.py:1145(__new__)\n", " 8/5 0.000 0.000 0.091 0.018 events.py:87(_run)\n", " 7 0.000 0.000 0.000 0.000 enum.py:1592(__and__)\n", " 3 0.000 0.000 0.000 0.000 iostream.py:718(_rotate_buffers)\n", " 3 0.000 0.000 0.000 0.000 queue.py:115(empty)\n", " 1 0.000 0.000 0.000 0.000 inspect.py:3116(_bind)\n", " 6 0.000 0.000 0.000 0.000 typing.py:426(inner)\n", " 3 0.000 0.000 0.000 0.000 {built-in method _heapq.heappop}\n", " 2 0.000 0.000 0.085 0.042 iostream.py:157(_handle_event)\n", " 3 0.000 0.000 0.000 0.000 zmqstream.py:663(_rebuild_io_state)\n", " 1 0.000 0.000 0.006 0.006 history.py:833(_writeout_input_cache)\n", " 1 0.000 0.000 0.006 0.006 futures.py:393(_call_set_state)\n", " 3 0.000 0.000 0.000 0.000 zmqstream.py:686(_update_handler)\n", " 2 0.000 0.000 0.085 0.042 zmqstream.py:583(_handle_events)\n", " 1 0.000 0.000 0.006 0.006 history.py:845(writeout_cache)\n", " 8 0.000 0.000 0.000 0.000 base_events.py:768(time)\n", " 2 0.000 0.000 0.085 0.042 zmqstream.py:556(_run_callback)\n", " 3 0.000 0.000 0.000 0.000 iostream.py:616(_flush)\n", " 1 0.000 0.000 0.006 0.006 kernelbase.py:302(poll_control_queue)\n", " 3 0.000 0.000 0.000 0.000 iostream.py:710(_flush_buffers)\n", " 1 0.000 0.000 0.025 0.025 {built-in method builtins.exec}\n", " 1 0.000 0.000 0.000 0.000 asyncio.py:225(add_callback)\n", " 3 0.000 0.000 0.000 0.000 base_events.py:848(_call_soon)\n", " 1 0.000 0.000 0.006 0.006 _base.py:337(_invoke_callbacks)\n", " 5 0.000 0.000 0.000 0.000 :1390(_handle_fromlist)\n", " 1 0.000 0.000 0.000 0.000 queues.py:209(put_nowait)\n", " 1 0.000 0.000 0.000 0.000 queues.py:225(get)\n", " 4 0.000 0.000 0.000 0.000 ioloop.py:742(_run_callback)\n", " 6 0.000 0.000 0.000 0.000 traitlets.py:676(__get__)\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:718(_validate)\n", " 1 0.000 0.000 0.000 0.000 decorator.py:199(fix)\n", " 1 0.000 0.000 0.006 0.006 _base.py:537(set_result)\n", " 10 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr}\n", " 1 0.000 0.000 0.000 0.000 traitlets.py:1527(_notify_observers)\n", " 2 0.000 0.000 0.085 0.042 zmqstream.py:624(_handle_recv)\n", " 1 0.000 0.000 0.000 0.000 inspect.py:2930(apply_defaults)\n", " 3 0.000 0.000 0.000 0.000 events.py:36(__init__)\n", " 2 0.000 0.000 0.000 0.000 typing.py:1665(__subclasscheck__)\n", " 1 0.000 0.000 0.000 0.000 inspect.py:3255(bind)\n", " 5 0.000 0.000 0.000 0.000 {built-in method builtins.getattr}\n", " 20 0.000 0.000 0.000 0.000 {built-in method builtins.len}\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:689(set)\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:3631(set)\n", " 1 0.000 0.000 0.012 0.012 decorator.py:229(fun)\n", " 2 0.000 0.000 0.066 0.033 iostream.py:276()\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:3474(validate)\n", " 3 0.000 0.000 0.000 0.000 threading.py:303(__enter__)\n", " 1 0.000 0.000 0.006 0.006 selector_events.py:141(_write_to_self)\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:727(_cross_validate)\n", " 6 0.000 0.000 0.000 0.000 traitlets.py:629(get)\n", " 1 0.000 0.000 0.000 0.000 queues.py:186(put)\n", " 5 0.000 0.000 0.000 0.000 selector_events.py:740(_process_events)\n", " 2 0.000 0.000 0.000 0.000 typing.py:1374(__instancecheck__)\n", " 1 0.000 0.000 0.000 0.000 queues.py:256(get_nowait)\n", " 3 0.000 0.000 0.000 0.000 events.py:129(__lt__)\n", " 11 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects}\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:3624(validate_elements)\n", " 2 0.000 0.000 0.000 0.000 queues.py:322(_consume_expired)\n", " 4 0.000 0.000 0.000 0.000 typing.py:1443(__hash__)\n", " 2 0.000 0.000 0.000 0.000 base_events.py:819(call_soon)\n", " 10 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}\n", " 1 0.000 0.000 0.000 0.000 traitlets.py:1512(_notify_trait)\n", " 3 0.000 0.000 0.000 0.000 queue.py:267(_qsize)\n", " 2 0.000 0.000 0.000 0.000 iostream.py:213(_is_master_process)\n", " 6 0.000 0.000 0.000 0.000 {built-in method builtins.next}\n", " 8 0.000 0.000 0.000 0.000 {built-in method time.monotonic}\n", " 1 0.000 0.000 0.000 0.000 concurrent.py:182(future_set_result_unless_cancelled)\n", " 1 0.000 0.000 0.006 0.006 base_events.py:872(call_soon_threadsafe)\n", " 1 0.000 0.000 0.000 0.000 traitlets.py:1523(notify_change)\n", " 1 0.000 0.000 0.000 0.000 threading.py:315(_acquire_restore)\n", " 2 0.000 0.000 0.000 0.000 :121(__subclasscheck__)\n", " 3 0.000 0.000 0.000 0.000 zmqstream.py:542(sending)\n", " 24 0.000 0.000 0.000 0.000 typing.py:2366(cast)\n", " 1 0.000 0.000 0.000 0.000 inspect.py:2877(args)\n", " 7 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.lock' objects}\n", " 3 0.000 0.000 0.000 0.000 threading.py:306(__exit__)\n", " 2 0.000 0.000 0.000 0.000 {method 'set_result' of '_asyncio.Future' objects}\n", " 2 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:708(__set__)\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:2304(validate)\n", " 2 0.000 0.000 0.000 0.000 {built-in method _abc._abc_subclasscheck}\n", " 1 0.000 0.000 0.000 0.000 history.py:839(_writeout_output_cache)\n", " 1 0.000 0.000 0.000 0.000 threading.py:428(notify_all)\n", " 1 0.000 0.000 0.000 0.000 threading.py:398(notify)\n", " 5 0.000 0.000 0.000 0.000 {method 'upper' of 'str' objects}\n", " 1 0.000 0.000 0.000 0.000 threading.py:631(clear)\n", " 5 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}\n", " 5 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}\n", " 5 0.000 0.000 0.000 0.000 {built-in method builtins.max}\n", " 1 0.000 0.000 0.000 0.000 queues.py:317(__put_internal)\n", " 1 0.000 0.000 0.000 0.000 queues.py:312(_put)\n", " 1 0.000 0.000 0.000 0.000 threading.py:312(_release_save)\n", " 1 0.000 0.000 0.000 0.000 {built-in method _thread.allocate_lock}\n", " 3 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.lock' objects}\n", " 1 0.000 0.000 0.000 0.000 {built-in method posix.getppid}\n", " 2 0.000 0.000 0.000 0.000 iostream.py:216(_check_mp_mode)\n", " 5 0.000 0.000 0.000 0.000 zmqstream.py:538(receiving)\n", " 1 0.000 0.000 0.000 0.000 inspect.py:2900(kwargs)\n", " 4 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects}\n", " 1 0.000 0.000 0.000 0.000 base_events.py:1932(_add_callback)\n", " 3 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}\n", " 1 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.RLock' objects}\n", " 2 0.000 0.000 0.000 0.000 traitlets.py:3486(validate_elements)\n", " 10 0.000 0.000 0.000 0.000 inspect.py:2787(kind)\n", " 1 0.000 0.000 0.000 0.000 {method 'values' of 'mappingproxy' objects}\n", " 3 0.000 0.000 0.000 0.000 {method 'items' of 'mappingproxy' objects}\n", " 4 0.000 0.000 0.000 0.000 {built-in method builtins.hash}\n", " 2 0.000 0.000 0.000 0.000 {built-in method posix.getpid}\n", " 1 0.000 0.000 0.000 0.000 queues.py:173(qsize)\n", " 2 0.000 0.000 0.000 0.000 {built-in method builtins.iter}\n", " 2 0.000 0.000 0.000 0.000 {method 'extend' of 'list' objects}\n", " 1 0.000 0.000 0.000 0.000 zmqstream.py:694()\n", " 5 0.000 0.000 0.000 0.000 base_events.py:2045(get_debug)\n", " 3 0.000 0.000 0.000 0.000 base_events.py:550(_check_closed)\n", " 1 0.000 0.000 0.000 0.000 unix_events.py:83(_process_self_data)\n", " 1 0.000 0.000 0.000 0.000 threading.py:318(_is_owned)\n", " 4 0.000 0.000 0.000 0.000 inspect.py:2775(name)\n", " 2 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.lock' objects}\n", " 1 0.000 0.000 0.000 0.000 queues.py:309(_get)\n", " 4 0.000 0.000 0.000 0.000 inspect.py:3070(parameters)\n", " 1 0.000 0.000 0.000 0.000 {method 'done' of '_asyncio.Future' objects}\n", " 2 0.000 0.000 0.000 0.000 {built-in method _contextvars.copy_context}\n", " 2 0.000 0.000 0.000 0.000 {method 'cancelled' of '_asyncio.Future' objects}\n", " 2 0.000 0.000 0.000 0.000 iostream.py:255(closed)\n", " 1 0.000 0.000 0.000 0.000 base_events.py:754(is_closed)\n", " 1 0.000 0.000 0.000 0.000 {built-in method _asyncio.get_running_loop}\n", " 1 0.000 0.000 0.000 0.000 queues.py:177(empty)\n", " 1 0.000 0.000 0.000 0.000 {method 'release' of '_thread.lock' objects}\n", " 1 0.000 0.000 0.000 0.000 {method '_is_owned' of '_thread.RLock' objects}\n", " 1 0.000 0.000 0.000 0.000 inspect.py:2869(__init__)\n", " 1 0.000 0.000 0.000 0.000 locks.py:224(clear)\n", " 1 0.000 0.000 0.000 0.000 queues.py:59(_set_timeout)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%prun sum_of_lists(1000000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the notebook the output looks something like this:\n", "\n", "```\n", "14 function calls in 9.597 seconds\n", "\n", " Ordered by: internal time\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 5 8.121 1.624 8.121 1.624 :4()\n", " 5 0.747 0.149 0.747 0.149 {built-in method builtins.sum}\n", " 1 0.665 0.665 9.533 9.533 :1(sum_of_lists)\n", " 1 0.065 0.065 9.597 9.597 :1()\n", " 1 0.000 0.000 9.597 9.597 {built-in method builtins.exec}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a table that shows the execution time for each function call, sorted by total time. In this case, most of the time is consumed with list comprehension within `sum_of_lists`. This gives us clues as to where we could improve the efficiency of the algorithm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Profiling line by line: `%lprun`\n", "\n", "Profiling with `%prun` is useful, but sometimes a line-by-line profile report is more insightful. This isn’t built into Python or IPython, but there is a package available, [line_profiler](https://github.com/rkern/line_profiler), that enables this. This can be provided in your kernel with\n", "\n", "``` bash\n", "$ spack env activate python-374\n", "$ spack install py-line-profiler ^python@3.7.4%gcc@9.1.0\n", "```\n", "\n", "Alternatively, you can install `line-profiler` with other package managers, for example\n", "\n", "``` bash\n", "$ uv add line_profiler\n", "```\n", "\n", "Now you can load IPython with the `line_profiler` extension:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.473122Z", "iopub.status.busy": "2026-05-20T17:29:43.473030Z", "iopub.status.idle": "2026-05-20T17:29:43.491723Z", "shell.execute_reply": "2026-05-20T17:29:43.491480Z", "shell.execute_reply.started": "2026-05-20T17:29:43.473115Z" } }, "outputs": [], "source": [ "%load_ext line_profiler" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `%lprun` command profiles each function line by line. In this case, you must explicitly specify which functions are of interest for creating the profile:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.492252Z", "iopub.status.busy": "2026-05-20T17:29:43.492116Z", "iopub.status.idle": "2026-05-20T17:29:43.497749Z", "shell.execute_reply": "2026-05-20T17:29:43.497373Z", "shell.execute_reply.started": "2026-05-20T17:29:43.492244Z" } }, "outputs": [ { "data": { "text/plain": [ "Timer unit: 1e-09 s\n", "\n", "Total time: 0.000987 s\n", "File: /var/folders/hk/s8m0bblj0g10hw885gld52mc0000gn/T/ipykernel_28626/74316826.py\n", "Function: sum_of_lists at line 1\n", "\n", "Line # Hits Time Per Hit % Time Line Contents\n", "==============================================================\n", " 1 def sum_of_lists(n):\n", " 2 1 1000.0 1000.0 0.1 total = 0\n", " 3 6 2000.0 333.3 0.2 for i in range(5):\n", " 4 5 920000.0 184000.0 93.2 ls = [j ^ (j >> i) for j in range(n)]\n", " 5 5 63000.0 12600.0 6.4 total += sum(ls)\n", " 6 1 1000.0 1000.0 0.1 return total" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%lprun -f sum_of_lists sum_of_lists(5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result looks something like this:\n", "\n", "```\n", "Timer unit: 1e-06 s\n", "\n", "Total time: 0.015145 s\n", "File: \n", "Function: sum_of_lists at line 1\n", "\n", "Line # Hits Time Per Hit % Time Line Contents\n", "==============================================================\n", " 1 def sum_of_lists(N):\n", " 2 1 1.0 1.0 0.0 total = 0\n", " 3 6 11.0 1.8 0.1 for i in range(5):\n", " 4 5 14804.0 2960.8 97.7 L = [j ^ (j >> i) for j in range(N)]\n", " 5 5 329.0 65.8 2.2 total += sum(L)\n", " 6 1 0.0 0.0 0.0 return total\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The time is given in microseconds and we can see which line the function spends most of its time on. We may then be able to modify the script in such a way that the efficiency of the function can be increased.\n", "\n", "More information about `%lprun` and the available options can be found in the IPython help function `%lprun?`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create a storage profile: `%memit` and `%mprun`\n", "\n", "Another aspect of profiling is the amount of memory that an operation uses. This can be evaluated with another IPython extension, the `memory_profiler`. This can be provided in your kernel with\n", "\n", "``` bash\n", "$ spack env activate python-311\n", "$ spack install py-memory-profiler\n", "```\n", "\n", "Alternatively you can install `memory-profiler` with other package managers, for example\n", "\n", "``` bash\n", "$ uv add memory_profiler\n", "```" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.498165Z", "iopub.status.busy": "2026-05-20T17:29:43.498088Z", "iopub.status.idle": "2026-05-20T17:29:43.536049Z", "shell.execute_reply": "2026-05-20T17:29:43.535732Z", "shell.execute_reply.started": "2026-05-20T17:29:43.498157Z" } }, "outputs": [], "source": [ "%load_ext memory_profiler" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:43.536491Z", "iopub.status.busy": "2026-05-20T17:29:43.536405Z", "iopub.status.idle": "2026-05-20T17:29:44.071823Z", "shell.execute_reply": "2026-05-20T17:29:44.071495Z", "shell.execute_reply.started": "2026-05-20T17:29:43.536483Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "peak memory: 198.78 MiB, increment: 71.50 MiB\n" ] } ], "source": [ "%memit sum_of_lists(1000000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that this feature occupies approximately 100 MB of memory.\n", "\n", "For a line-by-line description of memory usage, we can use the `%mprun` magic. Unfortunately, this magic only works for functions that are defined in separate modules and not for the notebook itself. So we first use the `%%file` magic to create a simple module called `mprun_demo.py` that contains our `sum_of_lists` function." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:44.072494Z", "iopub.status.busy": "2026-05-20T17:29:44.072399Z", "iopub.status.idle": "2026-05-20T17:29:44.075351Z", "shell.execute_reply": "2026-05-20T17:29:44.075114Z", "shell.execute_reply.started": "2026-05-20T17:29:44.072483Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing mprun_demo.py\n" ] } ], "source": [ "%%file mprun_demo.py\n", "from memory_profiler import profile\n", " \n", "@profile\n", "def my_func():\n", " a = [1] * (10 ** 6)\n", " b = [2] * (2 * 10 ** 7)\n", " del b\n", " return a\n", "\n", "%mprun -f my_func my_func()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the `Increment` column shows how much each row affects the total memory consumption: Note that when we calculate `b` we need about 160 MB of additional memory; however, this is not released again by deleting `b`.\n", "\n", "More information about `%memit`, `%mprun` and their options can be found in the IPython help with `%memit?`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pyheatmagic\n", "\n", "[pyheatmagic](https://github.com/csurfer/pyheatmagic) is an extension that allows the IPython magic command `%%heat` to display Python code as a heatmap with [Py-Heat](https://github.com/csurfer/pyheat).\n", "\n", "It can be easily installed in the kernel with\n", "\n", "```\n", "$ uv add py-heat-magic\n", "Installing py-heat-magic…\n", "…\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Loading the extension in IPython" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:44.075806Z", "iopub.status.busy": "2026-05-20T17:29:44.075742Z", "iopub.status.idle": "2026-05-20T17:29:44.316328Z", "shell.execute_reply": "2026-05-20T17:29:44.316035Z", "shell.execute_reply.started": "2026-05-20T17:29:44.075800Z" } }, "outputs": [], "source": [ "%load_ext heat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Display the heat map" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2026-05-20T17:29:44.316888Z", "iopub.status.busy": "2026-05-20T17:29:44.316730Z", "iopub.status.idle": "2026-05-20T17:29:44.477940Z", "shell.execute_reply": "2026-05-20T17:29:44.477566Z", "shell.execute_reply.started": "2026-05-20T17:29:44.316872Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/veit/cusy/trn/jupyter-tutorial/uvenvs/py313/.venv/lib/python3.13/site-packages/pyheat/pyheat.py:158: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.\n", " self.ax.set_yticklabels(row_labels, minor=False)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%heat\n", "\n", "\n", "def powfun(a, b):\n", " \"\"\"Method to raise a to power b using pow() function.\"\"\"\n", " return pow(a, b)\n", "\n", "\n", "def powop(a, b):\n", " \"\"\"Method to raise a to power b using ** operator.\"\"\"\n", " return a**b\n", "\n", "\n", "def powmodexp(a, b):\n", " \"\"\"Method to raise a to power b using modular exponentiation.\"\"\"\n", " base = a\n", " res = 1\n", " while b > 0:\n", " if b & 1:\n", " res *= base\n", " base *= base\n", " b >>= 1\n", " return res\n", "\n", "\n", "def main():\n", " \"\"\"Test function.\"\"\"\n", " a, b = 2377757, 773\n", " pow_function = powfun(a, b)\n", " pow_operator = powop(a, b)\n", " pow_modular_exponentiation = powmodexp(a, b)\n", "\n", "\n", "if __name__ == \"__main__\":\n", " main()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, the heatmap can also be saved as a file, for example with\n", "\n", "``` python\n", "%%heat -o pow-heatmap.png\n", "```" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.13 Kernel", "language": "python", "name": "python313" }, "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.13.0" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }