{ "cells": [ { "cell_type": "markdown", "id": "b8df2eda-5494-4d71-baec-984d746bdb2f", "metadata": {}, "source": [ "With assert we can enforce preconditions, postconditions, and loop invariants. Python supports gradual typing." ] }, { "cell_type": "markdown", "id": "e01d885a-645a-4b8e-b0b2-c9afd9dded89", "metadata": {}, "source": [ "# 1. assert" ] }, { "cell_type": "markdown", "id": "bbfa8eb0-51e4-4221-81a5-2653d8823126", "metadata": {}, "source": [ "The `assert()` function causes the program to crash when the condition on input of `assert()` evaluates to `False`." ] }, { "cell_type": "code", "execution_count": 1, "id": "d9db58f0-d87b-4ca5-8384-1ecc543a5995", "metadata": {}, "outputs": [], "source": [ "x = 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "93f57afd-ec4d-4e95-8b10-8b8743b8cfdd", "metadata": {}, "outputs": [], "source": [ "assert(x > 1)" ] }, { "cell_type": "code", "execution_count": 3, "id": "ac030b28-ed9d-425c-b5c5-79ca5a455b34", "metadata": {}, "outputs": [ { "ename": "AssertionError", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[3], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m(x \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m1\u001b[39m)\n", "\u001b[1;31mAssertionError\u001b[0m: " ] } ], "source": [ "assert(x < 1)" ] }, { "cell_type": "code", "execution_count": 4, "id": "9420b69c-446d-4574-a38b-64986ad0b8a9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "__debug__" ] }, { "cell_type": "markdown", "id": "35a2112b-7e4e-4dc7-9e3e-a5f84f721d2d", "metadata": {}, "source": [ "By default the `__debug__` flag is on which implies that the `assert()` is enforced. Basic optimizations, such as running `Python -O` turns this flag off." ] }, { "cell_type": "markdown", "id": "ff43bdf3-53f4-454f-9218-a3efcb6a0fa0", "metadata": {}, "source": [ "# 2. Preconditions, Postconditions and Loop Invariants." ] }, { "cell_type": "markdown", "id": "e1d0cdcd-0e4c-4180-acc3-97fe854d628a", "metadata": {}, "source": [ "Consider the definition of an algorithm by means of a Python function.\n", "\n", "1. A *precondition* is a condition on the input arguments,\n", "\n", " on values on input, *before* the execution of the function.\n", "\n", "2. A *postcondition* is a condition on the output arguments,\n", "\n", " on values returned by the function, on output, *after* the execution of the function.\n", " \n", "3. A *loop invariant* is a property which remains invariant *during* the execution." ] }, { "cell_type": "markdown", "id": "fca6062b-eba7-4707-b2ce-d709725c8fd1", "metadata": {}, "source": [ "These three concepts are illustrated on the problem of searching an item in a list." ] }, { "cell_type": "markdown", "id": "080f5986-94b5-4ba9-a80b-606174ad0349", "metadata": {}, "source": [ "The spefication of the function `searchitem` is as follows:\n", "\n", "1. On input is a list `items` and an integer `item`.\n", "\n", "2. On output is an integer `idx` which is \n", "\n", " 1. either -1 if `item not in items`, or otherwise\n", "\n", " 2. or we have: `L.index(idx) == item`." ] }, { "cell_type": "markdown", "id": "1094d37b-32a1-41ad-b655-f5865089b473", "metadata": {}, "source": [ "Observe that the specification already contains logical expressions which can be evaluated by Python." ] }, { "cell_type": "markdown", "id": "6107d062-fc2e-4963-af10-99188ae17132", "metadata": {}, "source": [ "Recall the `isinstance()` function which allows us to verify the type of any variable." ] }, { "cell_type": "markdown", "id": "456f07df-19c9-401e-835e-d820acd0459a", "metadata": {}, "source": [ "The algorithm is defined in the flow chart below." ] }, { "cell_type": "code", "execution_count": 6, "id": "f49e9c43-fb1a-442d-82b6-9657b3a8e8ff", "metadata": {}, "outputs": [ { "data": { "image/png": "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ZPE+B+pA999/vx4TueSSS/QYEZFzSRVI/vCHP5Srr75aT4lMnTpVjxF5a8tTNbJ70jgpbNFRJlH7eOqpp+S5557TUyJFRUV6jIjIuaQKJKGsrEyPiaxevVoeeughPUXkneyRVbJ4eK6eImp/U6ZM0WMiI0aMkN690dUWEZE7SRdIHnPMMUHBJHame/bs0VPU0XJuWyGGwesCiTrSjBkz5B//+Ica79q1q0yaNEmNExG5lXSBJCCQzM4OdGD9n//8R0pKStQ4EVGiW7NmjfzmN7/RU4H9IYJJIqJIpODWbT0e1r59+9Rjp07u489o5oX6+npJT3efHLi1z3300UeluLhYT4ncdddd8tvf/lZPERElnv/+979y5plnygcffKCmc3Nz5Y033vDd/tmJRPp/5ATr6xzr607U9VV/kxBuurEfibz99tvlz3/+s54iIko811xzTVMQecghh8iCBQvUOBFRpJKqH8lQCgoK5Pnnn1fjBx98sDrt06tXLzVNRJQoRo4cKXPnztVTon44W12i+XX/3JZE/H/UFtbXOdbXnWjrm7RHJC1//OMf5bjjjlPju3btkkGDBkltba2aJiJKBLhsxx5E3n333UH96hIRRSrpA8kf/OAH6nrJlJQUNb1161bp37+/vPzyy2qaiCieIZvXPffco6dEbrjhhqCbbYiIopH0gSScccYZ8pe//EUOPPBANf1///d/MmDAgKDOeomI4s1VV12lUsNarrzySpk/f76eIiKKHgNJ7Ze//KVKmfj9739fTe/du1cuvPBCqa6uVtNERPECfeMi5eFjjz2mS0SGDx8uf/rTn/QUEVFsMJC0Offcc1Uw2a1bN10SSBvGboGIKF68+uqrcsopp8gzzzyjS0TGjx8vDzzwgJ4iIoodBpLNoF81BJMnnXSSLhF1fVFeXp689957uoSIyH9mzZol55xzTlPWGigvLw+6RpKIKJYYSIbQvXt3qampCbqrceXKlepXPk8NEZHf/O9//5PLL79cxo0bp0sC3Zn94Q9/kAkTJugSIqLYYyDZCvTy/vjjj6tuMixff/216sh8xIgRsmPHDl1KROSdxYsXqx+5Tz75pC4JXKazfv161QE5EVF7YiAZxtixY2XVqlWSk5OjS0QqKytV35P2uyGJiDrS5s2b5bLLLpNLL71UdVtmue2221rss4iI2gsDSQfw637D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bJFp06apw7BEfnTHHXcEnaK3Asjvf//7KoD8+OOP1Wntgw46SJUTERHFs7gIJHHkZ9asWeq0IDp+xg0LRH6Dax1ramrU0XMrgPze974ns2fPbgogu3TposqJiIgSQVwEkrg28pNPPlGnAHG0Z/LkyTwqSb4zYcIEPbY/gES7HT16NANIIiJKSL4PJHF0B4GjdboQ07gwdMGCBWqayA9w9/XKlSubroFkAElERMnA94EkAsZPP/1UBZAWBJVTp07lUUnyjfvvv7/pCCRPYRMRUbLwdSCJQLG8vLxF/4I8Kkl+gju0H3nkER6BJCKipOPrQHLhwoUtjkZaeFSS/AI31jCAJCKiZOTbQBIBIgJF+9FIjFs9t1tHJRFsEhEREVHH820gidPW6KQaAaMVTNrHAUElTn3zqCQRERFRx/NlILlnzx7V8bjlrLPOkieffFKNjxkzRiZOnCiHHXaY6g6I/UoSERERecOXgeT8+fPV0chf/OIXqpPnVatWyTnnnKOeO/jgg9Up73//+99y9913S9euXXlUkoiIiMgDKQ0NDY4T/Vr5g62sHW44nRcB4W233SY33nijnHjiibpUpL6+XrKystTRyEmTJulSkV27dqnA88c//rFcfPHFunS/jljmUKKZF1Bf9EnoFuvrnNf1DdWew4nn+rI9h8f6Osf6Osf6usP6OtP0ueqvj3Tu3Fnuu+++oCCyLThCOWrUqJBBJBERERG1nxQDFxo61NjYqB5TU1PVoxvRzAu4QzszM1PKyspUphunvFrmWNQ3IyNDTznH+jrndX3ZnsNjfZ1jfZ1jfd1hfZ1J1vr67ogkEREREcUHBpJEREREFBEGkkREREQUEQaSRERERBQRBpJEREREFBEGkkREREQUEQaSRERERBQRBpJEREREFBEGkkREREQUEQaSRERERBQRBpJEREREFBEGkkREREQUkZSGhgZDj4e1b98+9dipk/v4M5p5ob6+XrKysmTixIkyadIkXRqeV8sci/qmp6frKedYX+e8ri/bc3isr3Osr3OsrzusrzNJW1/1l4iIiIjIpRTDpMfDamxsVI+pqanq0Y1o5oXt27dLZmamlJWVyeTJk3VpeF4tcyzqm5GRoaecY32d87q+bM/hsb7Osb7Osb7usL7OJGt9eUSSqB01NDTIxo0b9ZQze/bskbfffltPERER+RcDSaJ2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nnKO9XXO6/qyPYfH+jrH+jrH+rrD+jqTrPXlEUkiIiIiiggDSSIiIiKKCANJIiIiIooIA0kiIiIiiggDSSIiIiKKCANJIiIiIooIA0kiIiIiiggDSSIiIiKKCANJIiIiIooIA0kiIiIiiggDSSIiIiKKCANJIiIiIopISkNDg6HHw9q3b5967NTJffwZzbxQX18vWVlZMnHiRJk0aZIuDc+rZY5FfdPT0/WUc6yvc17Xl+05PNbXOdbXOdbXHdbXmaStr/pLRERERORSimHS42E1Njaqx9TUVPXoRjTzwvbt2yUzM1PKyspk8uTJujQ8r5Y5FvXNyMjQU86xvs55XV+25/BYX+dYX+dYX3dYX2eStb48IklEREREEWEgSUREREQRYSBJRERERBFhIElEREREEWEgSUREREQRYSBJRERERBFhIElEREREEWEgSUREREQRYSBJRERERBFhIElEREREEWEgSUREREQRYSBJRERERBFhIElEREREEUmpq6sz9HhYhhF4aUpKinp0I5p5Ye/evXL00UfLuHHj1OCUV8sci/p27txZTznH+jrndX3ZnsNjfZ1jfZ1jfd1hfZ1J2vqaI4ExBxobG9VjamqqenQjmnlh+/btkpmZKWVlZTJ58mRdGp5XyxyL+mZkZOgp51hf57yuL9tzeKyvc6yvc6yvO6yvM8laX57aJmpHDQ0NsnHjRj3lzJ49e+Ttt9/WU0RERP7FQJKoHR144IFSWloql1xyiaxfv16Xhvb111/LvffeK926dZNOnfjVJCIi/+N/K6J2NmXKFHnmmWfk1FNPlf79+8vq1av1MwGff/65lJeXy5FHHiljxoyRc889V0488UT9LBERkX8xkCRqZyeddJIMGTJEja9YsULOPvtsueiii5qmjzjiCJk4caIKKGHSpEnqkYiIyO8YSBJ1ANxUA9a9bdZpbhyd/Oabb9Q4TmdfccUV0rNnTzVNRETkdwwkiToAjkoOHjy46drHb7/9Vj3aIcicOnWqniIiIvI/BpJEHQTXQe7bt09PBUOAOWzYMDnuuON0CRERkf8xkCTqIDk5OTJo0KCQd2TzaCQREcUjBpJEHWj69OktjkoisCwqKpJjjz1WlxAREcUHBpJEHQhHJe3XSgKORrrJbkNEROQXDCSJOhiCRuuoJALKq6++mkcjiYgoLjGQJOpguIO7oKBA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", "text/plain": [ "" ] }, "execution_count": 6, "metadata": { "image/png": { "width": 400 } }, "output_type": "execute_result" } ], "source": [ "from IPython import display\n", "display.Image('searchitem.png', width=400)" ] }, { "cell_type": "markdown", "id": "20ab827e-7434-422e-a5f4-62605c3906cd", "metadata": {}, "source": [ "With `assert()` we enforce the preconditions, postconditions, and the loop invariant." ] }, { "cell_type": "code", "execution_count": 7, "id": "83cc06b3-a9b4-4c24-b5e4-a6778b12a8d9", "metadata": {}, "outputs": [], "source": [ "def searchlist(items, item):\n", " \"\"\"\n", " Searches a list items for the integer item,\n", " returns -1 if the item does not belong to the list,\n", " or else returns the position of the item in the list.\n", "\n", " Preconditions:\n", " isinstance(items, list) and isinstance(item, int)\n", "\n", " Postconditions:\n", " searchlist(items, item) == -1 or\n", " searchlist(items, item) == pos and items[pos] == item\n", " \"\"\"\n", " assert isinstance(items, list)\n", " assert isinstance(item, int)\n", " pos = -1\n", " idx = 0\n", " while idx < len(items):\n", " assert item not in items[:idx]\n", " if items[idx] == item:\n", " pos = idx\n", " break\n", " idx = idx + 1\n", " assert pos == -1 or (pos == idx and items[idx] == item)\n", " return pos" ] }, { "cell_type": "markdown", "id": "b43c6677-1244-4213-bfb2-6871e7a8bff3", "metadata": {}, "source": [ "During the loop, the loop invariant is \n", "\n", "1. `idx < len(items)` enforced by the `while`; and\n", "\n", "2. `item not in items[:idx]` enforced by the `assert`." ] }, { "cell_type": "markdown", "id": "da2b158f-5492-4af9-b7a1-ef0124adb11a", "metadata": {}, "source": [ "The loop terminates if either one of those two conditions is no longer satisfied, which makes the postconditions become `True`." ] }, { "cell_type": "markdown", "id": "df984ab2-881a-4a29-8a2f-9b782b623ee0", "metadata": {}, "source": [ "# 3. Gradual Typing with Annotations" ] }, { "cell_type": "markdown", "id": "3007d0cc-9f9b-464b-89c7-61df87e852d1", "metadata": {}, "source": [ "Python is dynamically typed, but support *gradual typing* through annotations." ] }, { "cell_type": "code", "execution_count": 8, "id": "77f28cfd-8f4a-45b5-b451-371801f025a5", "metadata": {}, "outputs": [], "source": [ "name: str = \"hello annotations\"" ] }, { "cell_type": "code", "execution_count": 9, "id": "dc267fa0-857d-4ec7-b232-e920baad81a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'name': str}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "__annotations__" ] }, { "cell_type": "code", "execution_count": 10, "id": "7a2531ef-1e29-4612-8027-d86367670fe6", "metadata": {}, "outputs": [], "source": [ "def search(L: list, i: int) -> int:\n", " if i in L:\n", " return L.index(i)\n", " return -1" ] }, { "cell_type": "markdown", "id": "e3677cb1-fede-4640-a270-b2bf62798ad2", "metadata": {}, "source": [ "The annotations are not enforced by the Python interpreter." ] }, { "cell_type": "markdown", "id": "490e6333-11c1-4bf6-bd8b-62100a424013", "metadata": {}, "source": [ "# 4. And then there is pylint" ] }, { "cell_type": "markdown", "id": "773f43bf-22a4-46e4-8433-0e237aa0eb5a", "metadata": {}, "source": [ "Pylint is a static code analyser for Python. The *static* means that the code is not executed." ] } ], "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.10.10" } }, "nbformat": 4, "nbformat_minor": 5 }