{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Introduction to Python  \n",
    "\n",
    "## [Packages](https://docs.python.org/3/tutorial/modules.html#packages) and [Modules](https://docs.python.org/3/tutorial/modules.html)\n",
    "\n",
    "#### Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A. Just like the use of modules saves the authors of different modules from having to worry about each other’s global variable names, the use of dotted module names saves the authors of multi-module packages like NumPy or Pillow from having to worry about each other’s module names.  \n",
    "\n",
    "#### A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module’s name (as a string) is available as the value of the global variable __name__. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__main__\n"
     ]
    }
   ],
   "source": [
    "print(__name__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### We can check all the properties (attributes and methods) from an object using _dir()_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['In',\n",
       " 'Out',\n",
       " '_',\n",
       " '__',\n",
       " '___',\n",
       " '__builtin__',\n",
       " '__builtins__',\n",
       " '__doc__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__spec__',\n",
       " '_dh',\n",
       " '_i',\n",
       " '_i1',\n",
       " '_i2',\n",
       " '_ih',\n",
       " '_ii',\n",
       " '_iii',\n",
       " '_oh',\n",
       " 'exit',\n",
       " 'get_ipython',\n",
       " 'quit']"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### We can also access all the Python builtins introspecting the __builtins__ variable "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['ArithmeticError',\n",
       " 'AssertionError',\n",
       " 'AttributeError',\n",
       " 'BaseException',\n",
       " 'BlockingIOError',\n",
       " 'BrokenPipeError',\n",
       " 'BufferError',\n",
       " 'BytesWarning',\n",
       " 'ChildProcessError',\n",
       " 'ConnectionAbortedError',\n",
       " 'ConnectionError',\n",
       " 'ConnectionRefusedError',\n",
       " 'ConnectionResetError',\n",
       " 'DeprecationWarning',\n",
       " 'EOFError',\n",
       " 'Ellipsis',\n",
       " 'EnvironmentError',\n",
       " 'Exception',\n",
       " 'False',\n",
       " 'FileExistsError',\n",
       " 'FileNotFoundError',\n",
       " 'FloatingPointError',\n",
       " 'FutureWarning',\n",
       " 'GeneratorExit',\n",
       " 'IOError',\n",
       " 'ImportError',\n",
       " 'ImportWarning',\n",
       " 'IndentationError',\n",
       " 'IndexError',\n",
       " 'InterruptedError',\n",
       " 'IsADirectoryError',\n",
       " 'KeyError',\n",
       " 'KeyboardInterrupt',\n",
       " 'LookupError',\n",
       " 'MemoryError',\n",
       " 'ModuleNotFoundError',\n",
       " 'NameError',\n",
       " 'None',\n",
       " 'NotADirectoryError',\n",
       " 'NotImplemented',\n",
       " 'NotImplementedError',\n",
       " 'OSError',\n",
       " 'OverflowError',\n",
       " 'PendingDeprecationWarning',\n",
       " 'PermissionError',\n",
       " 'ProcessLookupError',\n",
       " 'RecursionError',\n",
       " 'ReferenceError',\n",
       " 'ResourceWarning',\n",
       " 'RuntimeError',\n",
       " 'RuntimeWarning',\n",
       " 'StopAsyncIteration',\n",
       " 'StopIteration',\n",
       " 'SyntaxError',\n",
       " 'SyntaxWarning',\n",
       " 'SystemError',\n",
       " 'SystemExit',\n",
       " 'TabError',\n",
       " 'TimeoutError',\n",
       " 'True',\n",
       " 'TypeError',\n",
       " 'UnboundLocalError',\n",
       " 'UnicodeDecodeError',\n",
       " 'UnicodeEncodeError',\n",
       " 'UnicodeError',\n",
       " 'UnicodeTranslateError',\n",
       " 'UnicodeWarning',\n",
       " 'UserWarning',\n",
       " 'ValueError',\n",
       " 'Warning',\n",
       " 'ZeroDivisionError',\n",
       " '__IPYTHON__',\n",
       " '__build_class__',\n",
       " '__debug__',\n",
       " '__doc__',\n",
       " '__import__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__spec__',\n",
       " 'abs',\n",
       " 'all',\n",
       " 'any',\n",
       " 'ascii',\n",
       " 'bin',\n",
       " 'bool',\n",
       " 'breakpoint',\n",
       " 'bytearray',\n",
       " 'bytes',\n",
       " 'callable',\n",
       " 'chr',\n",
       " 'classmethod',\n",
       " 'compile',\n",
       " 'complex',\n",
       " 'copyright',\n",
       " 'credits',\n",
       " 'delattr',\n",
       " 'dict',\n",
       " 'dir',\n",
       " 'display',\n",
       " 'divmod',\n",
       " 'enumerate',\n",
       " 'eval',\n",
       " 'exec',\n",
       " 'filter',\n",
       " 'float',\n",
       " 'format',\n",
       " 'frozenset',\n",
       " 'get_ipython',\n",
       " 'getattr',\n",
       " 'globals',\n",
       " 'hasattr',\n",
       " 'hash',\n",
       " 'help',\n",
       " 'hex',\n",
       " 'id',\n",
       " 'input',\n",
       " 'int',\n",
       " 'isinstance',\n",
       " 'issubclass',\n",
       " 'iter',\n",
       " 'len',\n",
       " 'license',\n",
       " 'list',\n",
       " 'locals',\n",
       " 'map',\n",
       " 'max',\n",
       " 'memoryview',\n",
       " 'min',\n",
       " 'next',\n",
       " 'object',\n",
       " 'oct',\n",
       " 'open',\n",
       " 'ord',\n",
       " 'pow',\n",
       " 'print',\n",
       " 'property',\n",
       " 'range',\n",
       " 'repr',\n",
       " 'reversed',\n",
       " 'round',\n",
       " 'set',\n",
       " 'setattr',\n",
       " 'slice',\n",
       " 'sorted',\n",
       " 'staticmethod',\n",
       " 'str',\n",
       " 'sum',\n",
       " 'super',\n",
       " 'tuple',\n",
       " 'type',\n",
       " 'vars',\n",
       " 'zip']"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir(__builtins__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## There are 4 main ways to import Packages and Modules  \n",
    "### 1 - Importing the full package:  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import string\n",
    "import random\n",
    "import math\n",
    "import numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['In',\n",
       " 'Out',\n",
       " '_',\n",
       " '_2',\n",
       " '_3',\n",
       " '__',\n",
       " '___',\n",
       " '__builtin__',\n",
       " '__builtins__',\n",
       " '__doc__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__spec__',\n",
       " '_dh',\n",
       " '_i',\n",
       " '_i1',\n",
       " '_i2',\n",
       " '_i3',\n",
       " '_i4',\n",
       " '_i5',\n",
       " '_ih',\n",
       " '_ii',\n",
       " '_iii',\n",
       " '_oh',\n",
       " 'exit',\n",
       " 'get_ipython',\n",
       " 'math',\n",
       " 'numpy',\n",
       " 'quit',\n",
       " 'random',\n",
       " 'string']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "string.punctuation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.13693478736873155"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random.random()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.141592653589793"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "math.pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.141592653589793"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numpy.pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numpy.pi == math.pi"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### 2 - Importing all modules from a package:  \n",
    "#### (although this is not recommended)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from math import *\n",
    "from numpy import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#dir()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.718281828459045"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "e = [1,2,3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from math import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.718281828459045"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e   # The original variable was overwritten after the import"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3 - Importing specific modules from a package:  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from numpy import mean, pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#dir()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean([1,2,3,4,5,6,7,8,9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.141592653589793"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "math.pi == nu==mpy.pi"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### 4 - Importing a module and giving it a nickname:  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "#dir()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f6585c42dd0>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot([1,2,3,4,5,6,4,3,2,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'pandas' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-26-7393bf0307ea>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpandas\u001b[0m  \u001b[0;31m#NameError: name 'pandas' is not defined\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'pandas' is not defined"
     ]
    }
   ],
   "source": [
    "pandas  #NameError: name 'pandas' is not defined"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5 - (Creating and) Importing your own module:  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This will be printed on import\n"
     ]
    }
   ],
   "source": [
    "import utils"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['__builtins__',\n",
       " '__cached__',\n",
       " '__doc__',\n",
       " '__file__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__spec__',\n",
       " 'cube',\n",
       " 'my_constant',\n",
       " 'other_property',\n",
       " 'square']"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir(utils)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "utils.cube(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'3.14159'"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "utils.my_constant"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### And, as a curiosity, there is an \"Easter egg\" in Python\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The Zen of Python, by Tim Peters\n",
      "\n",
      "Beautiful is better than ugly.\n",
      "Explicit is better than implicit.\n",
      "Simple is better than complex.\n",
      "Complex is better than complicated.\n",
      "Flat is better than nested.\n",
      "Sparse is better than dense.\n",
      "Readability counts.\n",
      "Special cases aren't special enough to break the rules.\n",
      "Although practicality beats purity.\n",
      "Errors should never pass silently.\n",
      "Unless explicitly silenced.\n",
      "In the face of ambiguity, refuse the temptation to guess.\n",
      "There should be one-- and preferably only one --obvious way to do it.\n",
      "Although that way may not be obvious at first unless you're Dutch.\n",
      "Now is better than never.\n",
      "Although never is often better than *right* now.\n",
      "If the implementation is hard to explain, it's a bad idea.\n",
      "If the implementation is easy to explain, it may be a good idea.\n",
      "Namespaces are one honking great idea -- let's do more of those!\n"
     ]
    }
   ],
   "source": [
    "import this"
   ]
  }
 ],
 "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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}