A unique python library that extends the python programming language and provides utilities that enhance productivity.
#hide
! pip install -U git+git://github.com/fastai/fastcore@master
! pip install -U git+git://github.com/fastai/nbdev@master
! pip install -U numpy
from fastcore.foundation import *
from fastcore.meta import *
from fastcore.utils import *
from fastcore.test import *
from nbdev.showdoc import *
from fastcore.dispatch import typedispatch
from functools import partial
import numpy as np
import inspect
Collecting git+git://github.com/fastai/fastcore@master Cloning git://github.com/fastai/fastcore (to revision master) to /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-req-build-fph52w2h Running command git clone -q git://github.com/fastai/fastcore /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-req-build-fph52w2h Requirement already satisfied, skipping upgrade: pip in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from fastcore==1.0.12) (20.1.1) Requirement already satisfied, skipping upgrade: packaging in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from fastcore==1.0.12) (20.4) Requirement already satisfied, skipping upgrade: six in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from packaging->fastcore==1.0.12) (1.15.0) Requirement already satisfied, skipping upgrade: pyparsing>=2.0.2 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from packaging->fastcore==1.0.12) (2.4.7) Building wheels for collected packages: fastcore Building wheel for fastcore (setup.py) ... done Created wheel for fastcore: filename=fastcore-1.0.12-py3-none-any.whl size=40633 sha256=8275b4eaa351c9c867e9c1f83105bc6ec25f251caf1efcf247a8e9ecc0f16f76 Stored in directory: /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-ephem-wheel-cache-x8fbj38b/wheels/9b/c8/80/1e03649fe9e96f2b8231a1f38d4e20389036c7cb204afd8563 Successfully built fastcore Installing collected packages: fastcore Attempting uninstall: fastcore Found existing installation: fastcore 1.0.12 Uninstalling fastcore-1.0.12: Successfully uninstalled fastcore-1.0.12 Successfully installed fastcore-1.0.12 Collecting git+git://github.com/fastai/nbdev@master Cloning git://github.com/fastai/nbdev (to revision master) to /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-req-build-whf785xv Running command git clone -q git://github.com/fastai/nbdev /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-req-build-whf785xv Requirement already satisfied, skipping upgrade: pip in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (20.1.1) Requirement already satisfied, skipping upgrade: packaging in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (20.4) Requirement already satisfied, skipping upgrade: fastcore>=1.0.10 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (1.0.12) Requirement already satisfied, skipping upgrade: nbformat>=4.4.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (5.0.7) Requirement already satisfied, skipping upgrade: nbconvert<6 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (5.6.1) Requirement already satisfied, skipping upgrade: pyyaml in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (5.3.1) Requirement already satisfied, skipping upgrade: jupyter_client in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (6.1.6) Requirement already satisfied, skipping upgrade: ipykernel in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbdev==1.0.19) (5.3.2) Requirement already satisfied, skipping upgrade: six in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from packaging->nbdev==1.0.19) (1.15.0) Requirement already satisfied, skipping upgrade: pyparsing>=2.0.2 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from packaging->nbdev==1.0.19) (2.4.7) Requirement already satisfied, skipping upgrade: ipython-genutils in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbformat>=4.4.0->nbdev==1.0.19) (0.2.0) Requirement already satisfied, skipping upgrade: jsonschema!=2.5.0,>=2.4 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbformat>=4.4.0->nbdev==1.0.19) (3.0.2) Requirement already satisfied, skipping upgrade: traitlets>=4.1 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbformat>=4.4.0->nbdev==1.0.19) (4.3.3) Requirement already satisfied, skipping upgrade: jupyter-core in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbformat>=4.4.0->nbdev==1.0.19) (4.6.3) Requirement already satisfied, skipping upgrade: pandocfilters>=1.4.1 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (1.4.2) Requirement already satisfied, skipping upgrade: entrypoints>=0.2.2 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (0.3) Requirement already satisfied, skipping upgrade: bleach in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (3.1.5) Requirement already satisfied, skipping upgrade: testpath in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (0.4.4) Requirement already satisfied, skipping upgrade: defusedxml in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (0.6.0) Requirement already satisfied, skipping upgrade: jinja2>=2.4 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (2.11.2) Requirement already satisfied, skipping upgrade: mistune<2,>=0.8.1 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (0.8.4) Requirement already satisfied, skipping upgrade: pygments in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from nbconvert<6->nbdev==1.0.19) (2.6.1) Requirement already satisfied, skipping upgrade: tornado>=4.1 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jupyter_client->nbdev==1.0.19) (6.0.4) Requirement already satisfied, skipping upgrade: python-dateutil>=2.1 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jupyter_client->nbdev==1.0.19) (2.8.1) Requirement already satisfied, skipping upgrade: pyzmq>=13 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jupyter_client->nbdev==1.0.19) (19.0.1) Requirement already satisfied, skipping upgrade: appnope; platform_system == "Darwin" in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipykernel->nbdev==1.0.19) (0.1.0) Requirement already satisfied, skipping upgrade: ipython>=5.0.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipykernel->nbdev==1.0.19) (7.16.1) Requirement already satisfied, skipping upgrade: setuptools in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4.0->nbdev==1.0.19) (49.2.0.post20200714) Requirement already satisfied, skipping upgrade: attrs>=17.4.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4.0->nbdev==1.0.19) (19.3.0) Requirement already satisfied, skipping upgrade: pyrsistent>=0.14.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4.0->nbdev==1.0.19) (0.16.0) Requirement already satisfied, skipping upgrade: decorator in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from traitlets>=4.1->nbformat>=4.4.0->nbdev==1.0.19) (4.4.2) Requirement already satisfied, skipping upgrade: webencodings in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from bleach->nbconvert<6->nbdev==1.0.19) (0.5.1) Requirement already satisfied, skipping upgrade: MarkupSafe>=0.23 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jinja2>=2.4->nbconvert<6->nbdev==1.0.19) (1.1.1) Requirement already satisfied, skipping upgrade: backcall in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.2.0) Requirement already satisfied, skipping upgrade: jedi>=0.10 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.17.1) Requirement already satisfied, skipping upgrade: pickleshare in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.7.5) Requirement already satisfied, skipping upgrade: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->nbdev==1.0.19) (3.0.5) Requirement already satisfied, skipping upgrade: pexpect; sys_platform != "win32" in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->nbdev==1.0.19) (4.8.0) Requirement already satisfied, skipping upgrade: parso<0.8.0,>=0.7.0 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from jedi>=0.10->ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.7.0) Requirement already satisfied, skipping upgrade: wcwidth in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.2.5) Requirement already satisfied, skipping upgrade: ptyprocess>=0.5 in /Users/hamelsmu/anaconda3/lib/python3.8/site-packages (from pexpect; sys_platform != "win32"->ipython>=5.0.0->ipykernel->nbdev==1.0.19) (0.6.0) Building wheels for collected packages: nbdev Building wheel for nbdev (setup.py) ... done Created wheel for nbdev: filename=nbdev-1.0.19-py3-none-any.whl size=51832 sha256=69a997325e38de84de9410724f59a24deeab6514bc4bea80bdfc90d12acfcff8 Stored in directory: /private/var/folders/88/9mddczp92wg04x0ykmw940q00000gn/T/pip-ephem-wheel-cache-r2gv8q50/wheels/28/83/ee/f8ff336622886142e3bc00cfc9ba627f277f30f2ad3d7030f0 Successfully built nbdev Installing collected packages: nbdev Attempting uninstall: nbdev Found existing installation: nbdev 1.0.19 Uninstalling nbdev-1.0.19: Successfully uninstalled nbdev-1.0.19 Successfully installed nbdev-1.0.19 Collecting numpy Downloading numpy-1.19.2-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB) |████████████████████████████████| 15.3 MB 4.7 MB/s eta 0:00:01 Installing collected packages: numpy Attempting uninstall: numpy Found existing installation: numpy 1.18.5 Uninstalling numpy-1.18.5: Successfully uninstalled numpy-1.18.5 Successfully installed numpy-1.19.2
There are many more ways of customizing and using store_attr
than I highlighted here. Check out the docs for more detail.
P.S. you might be thinking that Python dataclasses also allow you to avoid this boilerplate. While true in some cases, store_attr
is more flexible.{% fn 1 %}
{{ "For example, store_attr does not rely on inheritance, which means you won't get stuck using multiple inheritance when using this with your own classes. Also, unlike dataclasses, store_attr does not require python 3.7 or higher. Furthermore, you can use store_attr anytime in the object lifecycle, and in any location in your class to customize the behavior of how and when variables are stored." | fndetail: 1 }}