diff --git a/Python/Module2_EssentialsOfPython/Generators_and_Comprehensions.md b/Python/Module2_EssentialsOfPython/Generators_and_Comprehensions.md
index f47c1ba1..dc4caa4d 100644
--- a/Python/Module2_EssentialsOfPython/Generators_and_Comprehensions.md
+++ b/Python/Module2_EssentialsOfPython/Generators_and_Comprehensions.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: generators comprehensions and efficiency, Difficulty: Easy, Category: Section
+ :keywords: generator, range, list comprehension, generator comprehension, nested comprehensions, inline for-loop, filtered, iterator
+```
+
# Generators & Comprehension Expressions
diff --git a/Python/Module2_EssentialsOfPython/Introduction.md b/Python/Module2_EssentialsOfPython/Introduction.md
index a5ce57a7..6bbf1be7 100644
--- a/Python/Module2_EssentialsOfPython/Introduction.md
+++ b/Python/Module2_EssentialsOfPython/Introduction.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: introduction to control flow, Difficulty: Easy, Category: Section
+ :keywords: overview, summary, if, else, function, for-loop, if, else, control flow
+```
+
# Introducing Control Flow
Very simply put, to "control flow" in your code is to affect the order in which the
diff --git a/Python/Module2_EssentialsOfPython/Iterables.md b/Python/Module2_EssentialsOfPython/Iterables.md
index 7635b794..5eb7fc49 100644
--- a/Python/Module2_EssentialsOfPython/Iterables.md
+++ b/Python/Module2_EssentialsOfPython/Iterables.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: the basics of iterables in python, Difficulty: Medium, Category: Section
+ :keywords: iterables, max, min, sum, all, any, itertools, enumerate, unpack
+```
+
# Iterables
Our encounter with for-loops introduced the term *iterable* - an object that can be "iterated over", such as in a for-loop.
diff --git a/Python/Module2_EssentialsOfPython/Itertools.md b/Python/Module2_EssentialsOfPython/Itertools.md
index 5dbaf858..3b6ec9eb 100644
--- a/Python/Module2_EssentialsOfPython/Itertools.md
+++ b/Python/Module2_EssentialsOfPython/Itertools.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: simple use cases of python itertools, Difficulty: Easy, Category: Tutorial
+ :keywords: itertools, examples, zip, range, enumerate, chain, combinations
+```
+
# Python's "Itertools"
Python has an [itertools module](https://docs.python.org/3/library/itertools.html), which provides a core set of fast, memory-efficient tools for creating iterators. We will briefly showcase a few itertools here. The majority of these functions create [generators](https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/Generators_and_Comprehensions.html), thus we will have to iterate over them in order to explicitly demonstrate their use. It is hard to overstate the utility of this module - it is strongly recommended that you take some time to see what it has in store.
diff --git a/Python/Module2_EssentialsOfPython/Problems/DifferenceFanout.md b/Python/Module2_EssentialsOfPython/Problems/DifferenceFanout.md
index edc2eb34..e56ab94e 100644
--- a/Python/Module2_EssentialsOfPython/Problems/DifferenceFanout.md
+++ b/Python/Module2_EssentialsOfPython/Problems/DifferenceFanout.md
@@ -12,6 +12,13 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: For-Loop Exercise, Difficulty: Easy, Category: Practice Problem
+ :keywords: for loops, list, function, list comprehension, practice problem
+```
+
+
# Difference Fanout
diff --git a/Python/Module2_EssentialsOfPython/Problems/EncodeAsString.md b/Python/Module2_EssentialsOfPython/Problems/EncodeAsString.md
index 138779c4..19af2c47 100644
--- a/Python/Module2_EssentialsOfPython/Problems/EncodeAsString.md
+++ b/Python/Module2_EssentialsOfPython/Problems/EncodeAsString.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: String Encoding Exercise, Difficulty: Medium, Category: Practice Problem
+ :keywords: function, string, casting, practice problem
+```
+
# Encode as String
Sometimes it is very important to handle different input object types differently in a function. This problem will exercise your understanding of types, control-flow, dictionaries, and more.
diff --git a/Python/Module2_EssentialsOfPython/Problems/MarginPercentage.md b/Python/Module2_EssentialsOfPython/Problems/MarginPercentage.md
index 17dc9238..d8b24c81 100644
--- a/Python/Module2_EssentialsOfPython/Problems/MarginPercentage.md
+++ b/Python/Module2_EssentialsOfPython/Problems/MarginPercentage.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Within Margin Exercise, Difficulty: Medium, Category: Practice Problem
+ :keywords: function, control flow, comparisons, practice problem
+```
+
# Within Margin Percentage
diff --git a/Python/Module2_EssentialsOfPython/Problems/MergeMaxDicts.md b/Python/Module2_EssentialsOfPython/Problems/MergeMaxDicts.md
index 030b8231..43ebbbbc 100644
--- a/Python/Module2_EssentialsOfPython/Problems/MergeMaxDicts.md
+++ b/Python/Module2_EssentialsOfPython/Problems/MergeMaxDicts.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Dictionary Merge Exercise, Difficulty: Easy, Category: Practice Problem
+ :keywords: dictionary, merge, practice problem
+```
+
# Merging Two Dictionaries
> Merge two [dictionaries](https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/DataStructures_II_Dictionaries.html#Data-Structures-(Part-II):-Dictionaries) together such that the resulting dictionary always retain the *greater* value among mappings with common keys.
diff --git a/Python/Module2_EssentialsOfPython/Problems/Palindrome.md b/Python/Module2_EssentialsOfPython/Problems/Palindrome.md
index 852ac228..4921dcbe 100644
--- a/Python/Module2_EssentialsOfPython/Problems/Palindrome.md
+++ b/Python/Module2_EssentialsOfPython/Problems/Palindrome.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Palindrome Exercise, Difficulty: Easy, Category: Practice Problem
+ :keywords: string, palindrome, practice problem
+```
+
# Is Palindrome
> A palindrome is a string that reads the same from left to right and from right to left. Strings like `racecar` and `Live on time, emit no evil` are palindromes. Notice that only valid alphanumeric characters are accounted for and that palindromes are not case-sensitive. Given a string, return whether or not it is a palindrome.
diff --git a/Python/Module2_EssentialsOfPython/Scope.md b/Python/Module2_EssentialsOfPython/Scope.md
index 667709b1..b784bdd4 100644
--- a/Python/Module2_EssentialsOfPython/Scope.md
+++ b/Python/Module2_EssentialsOfPython/Scope.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: variable score and namespaces in python, Difficulty: Medium, Category: Section
+ :keywords: variable, namespace, function, scope, shadowing
+```
+
# Scope
diff --git a/Python/Module2_EssentialsOfPython/SequenceTypes.md b/Python/Module2_EssentialsOfPython/SequenceTypes.md
index da9c4e6d..25790196 100644
--- a/Python/Module2_EssentialsOfPython/SequenceTypes.md
+++ b/Python/Module2_EssentialsOfPython/SequenceTypes.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: understanding python sequences, Difficulty: Easy, Category: Section
+ :keywords: list, tuple, string, slice, index, negative index, get item, pop, append, examples
+```
+
# Sequence Types
diff --git a/Python/Module2_EssentialsOfPython/Variables_and_Assignment.md b/Python/Module2_EssentialsOfPython/Variables_and_Assignment.md
index 4865b3de..9e317466 100644
--- a/Python/Module2_EssentialsOfPython/Variables_and_Assignment.md
+++ b/Python/Module2_EssentialsOfPython/Variables_and_Assignment.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: variable naming and assignment, Difficulty: Medium, Category: Section
+ :keywords: variable naming, valid names, mutable, immutable, reference, pointer
+```
+
# Variables & Assignment
diff --git a/Python/Module3_IntroducingNumpy/AccessingDataAlongMultipleDimensions.md b/Python/Module3_IntroducingNumpy/AccessingDataAlongMultipleDimensions.md
index 2e4d750d..85f78fe4 100644
--- a/Python/Module3_IntroducingNumpy/AccessingDataAlongMultipleDimensions.md
+++ b/Python/Module3_IntroducingNumpy/AccessingDataAlongMultipleDimensions.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Indexing into multi-dimensional numpy arrays, Difficulty: Easy, Category: Section
+ :keywords: numpy array, multidimensional, index, slice, negative index, rows, columns
+```
+
# Accessing Data Along Multiple Dimensions in an Array
In this section, we will:
diff --git a/Python/Module3_IntroducingNumpy/AdvancedIndexing.md b/Python/Module3_IntroducingNumpy/AdvancedIndexing.md
index 1e29000a..ee7a0530 100644
--- a/Python/Module3_IntroducingNumpy/AdvancedIndexing.md
+++ b/Python/Module3_IntroducingNumpy/AdvancedIndexing.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Advanced indexing with numpy arrays, Difficulty: Hard, Category: Section
+ :keywords: numpy array, integer array indexing, boolean array indexing, copy indexing, advanced
+```
+
# Advanced Indexing
diff --git a/Python/Module3_IntroducingNumpy/ArrayTraversal.md b/Python/Module3_IntroducingNumpy/ArrayTraversal.md
index a0e19a69..115b2f34 100644
--- a/Python/Module3_IntroducingNumpy/ArrayTraversal.md
+++ b/Python/Module3_IntroducingNumpy/ArrayTraversal.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Numpy array traversal ordering, Difficulty: Medium, Category: Section
+ :keywords: row-major order, c order, column-major order, f order, traversal, array iteration
+```
+
# Iterating Over Arrays & Array-Traversal Order
In this section, you will learn:
diff --git a/Python/Module3_IntroducingNumpy/BasicArrayAttributes.md b/Python/Module3_IntroducingNumpy/BasicArrayAttributes.md
index 50a69205..527ee446 100644
--- a/Python/Module3_IntroducingNumpy/BasicArrayAttributes.md
+++ b/Python/Module3_IntroducingNumpy/BasicArrayAttributes.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Numpy array attributes, Difficulty: Easy, Category: Section
+ :keywords: ndim, shape, size, itemsize, dtype, examples
+```
+
# Basic Array Attributes
Armed with our understanding of multidimensional NumPy arrays, we now look at methods for programmatically inspecting an array's attributes (e.g. its dimensionality). It is especially important to understand what an array's "shape" is.
diff --git a/Python/Module3_IntroducingNumpy/BasicIndexing.md b/Python/Module3_IntroducingNumpy/BasicIndexing.md
index 18cc3dfe..54c20e14 100644
--- a/Python/Module3_IntroducingNumpy/BasicIndexing.md
+++ b/Python/Module3_IntroducingNumpy/BasicIndexing.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Numpy array basic indexing, Difficulty: Medium, Category: Section
+ :keywords: basic index, slice, no copy index, multidimensional array, nd array, view, reverse, axis
+```
+
# Introducing Basic and Advanced Indexing
diff --git a/Python/Module3_IntroducingNumpy/Broadcasting.md b/Python/Module3_IntroducingNumpy/Broadcasting.md
index c1a2bb66..6911821d 100644
--- a/Python/Module3_IntroducingNumpy/Broadcasting.md
+++ b/Python/Module3_IntroducingNumpy/Broadcasting.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Numpy array broadcasting, Difficulty: Medium, Category: Section
+ :keywords: broadcasting, vectorization, rules, mismatched shapes, distances
+```
+
# Array Broadcasting
NumPy provides a mechanism for performing mathematical operations on arrays of *unequal* shapes:
diff --git a/Python/Module3_IntroducingNumpy/FunctionsForCreatingNumpyArrays.md b/Python/Module3_IntroducingNumpy/FunctionsForCreatingNumpyArrays.md
index 85030ca4..67f18ec4 100644
--- a/Python/Module3_IntroducingNumpy/FunctionsForCreatingNumpyArrays.md
+++ b/Python/Module3_IntroducingNumpy/FunctionsForCreatingNumpyArrays.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Creating numpy arrays, Difficulty: Easy, Category: Section
+ :keywords: create array, ndarray, ones, random, zeros, empty, examples, arange, linspace, reshape, hstack, vstack
+```
+
# Functions for Creating NumPy Arrays
This section presents standard methods for creating NumPy arrays of varying shapes and contents. NumPy provides a laundry list of functions for creating arrays:
diff --git a/Python/Module3_IntroducingNumpy/IntroducingTheNDarray.md b/Python/Module3_IntroducingNumpy/IntroducingTheNDarray.md
index e63e73ba..a5c0ffa8 100644
--- a/Python/Module3_IntroducingNumpy/IntroducingTheNDarray.md
+++ b/Python/Module3_IntroducingNumpy/IntroducingTheNDarray.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Introduction to numpy arrays, Difficulty: Easy, Category: Section
+ :keywords: numpy array, ndarray, introduction, overview
+```
+
# Introducing the ND-array
It is time to start familiarizing ourselves with NumPy, the premiere library for doing numerical work in Python. To use this package, we need to be sure to "import" the NumPy module into our code:
diff --git a/Python/Module3_IntroducingNumpy/Problems/ComputeAccuracy.md b/Python/Module3_IntroducingNumpy/Problems/ComputeAccuracy.md
index 64c27a23..a4e7323d 100644
--- a/Python/Module3_IntroducingNumpy/Problems/ComputeAccuracy.md
+++ b/Python/Module3_IntroducingNumpy/Problems/ComputeAccuracy.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Measuring classification accuracy, Difficulty: Easy, Category: Practice Problem
+ :keywords: numpy, vectorization, practice, machine learning, classifier
+```
+
# Measuring the Accuracy of a Classification Model
Suppose that we are working on a project in which we have some model that can process an image and classify its content. For example, my `cat_dog_goose_other` function tries to classify whether a picture is of a cat (class 0), a dog (class 1), a goose (class 2), or something else (class 3). We want to measure the *accuracy* of our classifier. That is, we want to feed it a series of images whose contents are known and tally the number of times the model's prediction matches the true content of an image. The accuracy is the fraction of images that the model classifies correctly.
diff --git a/Python/Module3_IntroducingNumpy/VectorizedOperations.md b/Python/Module3_IntroducingNumpy/VectorizedOperations.md
index 611483a9..c9f9c6cb 100644
--- a/Python/Module3_IntroducingNumpy/VectorizedOperations.md
+++ b/Python/Module3_IntroducingNumpy/VectorizedOperations.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Vectorized operations with numpy arrays, Difficulty: Easy, Category: Section
+ :keywords: vectorize, optimized, calculation, numpy, fast, C routine, MKL, sum, linear algebra, optimized
+```
+
# "Vectorized" Operations: Optimized Computations on NumPy Arrays
diff --git a/Python/Module4_OOP/Applications_of_OOP.md b/Python/Module4_OOP/Applications_of_OOP.md
index 4134be46..31f9bc21 100644
--- a/Python/Module4_OOP/Applications_of_OOP.md
+++ b/Python/Module4_OOP/Applications_of_OOP.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Applications of object-oriented programming, Difficulty: Medium, Category: Section
+ :keywords: summary, tutorial, python shopping list, object oriented, method, attribute
+```
+
# Applications of Object Oriented Programming
We have spent a considerable amount of time learning about the syntax and definitions of classes, class objects, instances, and methods. Let's take a moment to gather our knowledge and create a useful class. This will help develop a sense for the ways in which object oriented programming can be useful for us. We will try to take care to make some recommendations when one should and shouldn't define their own classes.
diff --git a/Python/Module4_OOP/Brief_Review.md b/Python/Module4_OOP/Brief_Review.md
index b9c8ae72..94b3b9f1 100644
--- a/Python/Module4_OOP/Brief_Review.md
+++ b/Python/Module4_OOP/Brief_Review.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Brief review of object oriented programming, Difficulty: Easy, Category: Tutorial
+ :keywords: class definition, simple, examples, overview, init, initialize, type, object
+```
+
## A Brief Summary of Terms and Concepts
diff --git a/Python/Module4_OOP/ClassDefinition.md b/Python/Module4_OOP/ClassDefinition.md
index 812cb7bd..77bb461c 100644
--- a/Python/Module4_OOP/ClassDefinition.md
+++ b/Python/Module4_OOP/ClassDefinition.md
@@ -12,6 +12,13 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: The rules for defining classes in python, Difficulty: Easy, Category: Section
+ :keywords: class definition, scope, class object, attribute, method
+```
+
+
# Defining a New Class of Object
diff --git a/Python/Module4_OOP/ClassInstances.md b/Python/Module4_OOP/ClassInstances.md
index a6eaa03c..a7cfbe96 100644
--- a/Python/Module4_OOP/ClassInstances.md
+++ b/Python/Module4_OOP/ClassInstances.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Class instances versus objects, Difficulty: Medium, Category: Section
+ :keywords: instance, class creation, init, self, isinstance
+```
+
# Instances of a Class
diff --git a/Python/Module4_OOP/Inheritance.md b/Python/Module4_OOP/Inheritance.md
index d264f191..95eda792 100644
--- a/Python/Module4_OOP/Inheritance.md
+++ b/Python/Module4_OOP/Inheritance.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Class inheritance, Difficulty: Easy, Category: Section
+ :keywords: inherit, object oriented, overwrite, sub class, issubclass
+```
+
# Inheritance
A final topic for us to discuss in this introduction to object oriented programming is the concept of inheritance. Working with inheritance provides powerful abstractions and elegant code re-use - it permits a class to inherit and build off of the attributes of another class.
diff --git a/Python/Module4_OOP/Introduction_to_OOP.md b/Python/Module4_OOP/Introduction_to_OOP.md
index a359eebf..bc34fafa 100644
--- a/Python/Module4_OOP/Introduction_to_OOP.md
+++ b/Python/Module4_OOP/Introduction_to_OOP.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Introducing object oriented programming in python, Difficulty: Easy, Category: Section
+ :keywords: class, type, creation, definition, intro, overview, basics, meaning
+```
+
# Introduction to Object Oriented Programming
diff --git a/Python/Module4_OOP/Methods.md b/Python/Module4_OOP/Methods.md
index 9a80ce89..79d9bf10 100644
--- a/Python/Module4_OOP/Methods.md
+++ b/Python/Module4_OOP/Methods.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: The different kinds of class methods, Difficulty: Medium, Category: Section
+ :keywords: instance, class method, static method, property, abstract method, class funtion
+```
+
# Methods
diff --git a/Python/Module4_OOP/Special_Methods.md b/Python/Module4_OOP/Special_Methods.md
index 9bc930e8..c1e9c780 100644
--- a/Python/Module4_OOP/Special_Methods.md
+++ b/Python/Module4_OOP/Special_Methods.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Controlling behavior with special methods, Difficulty: Medium, Category: Section
+ :keywords: dunder method, special method, operator overload, repr, getitem, custom syntax, __init__
+```
+
# Special Methods
In this section, we will learn about a variety of instance methods that are reserved by Python, which affect an object's high level behavior and its interactions with operators. These are known as special methods. `__init__` is an example of a special method; recall that it controls the process of creating instances of a class. Similarly, we will see that `__add__` controls the behavior of an object when it is operated on by the `+` symbol, for example. In general, the names of special methods take the form of `__
__`, where the two underscores preceed and succeed the name. Accordingly, special methods can also be referred to as "dunder" (double-underscore) methods. Learning to leverage special methods will enable us to design elegant and powerful classes of objects.
diff --git a/Python/Module5_OddsAndEnds/Matplotlib.ipynb b/Python/Module5_OddsAndEnds/Matplotlib.ipynb
index 06e598f4..0f12a77b 100644
--- a/Python/Module5_OddsAndEnds/Matplotlib.ipynb
+++ b/Python/Module5_OddsAndEnds/Matplotlib.ipynb
@@ -1,5 +1,16 @@
{
"cells": [
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "raw_mimetype": "text/restructuredtext"
+ },
+ "source": [
+ ".. meta::\n",
+ " :description: Topic: Plotting with matplotlib, Difficulty: Easy, Category: Section\n",
+ " :keywords: plot, matplotlib, figure, axes, functional, object oriented, histogram, image, save, load, color, colormap, API, style, notebook, inline\n"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -6911,6 +6922,7 @@
}
],
"metadata": {
+ "celltoolbar": "Raw Cell Format",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
@@ -6926,7 +6938,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.6.3"
+ "version": "3.7.2"
}
},
"nbformat": 4,
diff --git a/Python/Module5_OddsAndEnds/Modules_and_Packages.md b/Python/Module5_OddsAndEnds/Modules_and_Packages.md
index 658a84d3..40a39915 100644
--- a/Python/Module5_OddsAndEnds/Modules_and_Packages.md
+++ b/Python/Module5_OddsAndEnds/Modules_and_Packages.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Understanding imports modules and packages, Difficulty: Easy, Category: Section
+ :keywords: custom package, module, script, import, setup, pip, conda, relative import, absolute import
+```
+
# Import: Modules and Packages
diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md
index c8d72d3d..887d5090 100644
--- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md
+++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md
@@ -12,6 +12,12 @@ jupyter:
name: python3
---
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Working with aths and files, Difficulty: Medium, Category: Section
+ :keywords: open file, read file, pathlib, join directory, context manager, close file, rb, binary file, utf-8, encoding, pickle, numpy, load, archive, npy, npz, pkl, glob, read lines, write, save
+```
+
# Working with Files
This section will discuss the best practices for writing Python code that involves reading from and writing to files. We will learn about the built-in `pathlib.Path` object, which will help to ensure that the code that we write is portable across operating systems (OS) (e.g. Windows, MacOS, Linux). We will also be introduced to a *context manager*, `open`, which will permit us to read-from and write-to a file safely; by "safely" we mean that we will be assured that any file that we open will eventually be closed properly, so that it will not be corrupted even in the event that our code hits an error. Next, we will learn how to "glob" for files, meaning that we will learn to search for and list files whose names match specific patterns. Lastly, we will briefly encounter the `pickle` module which allows us to save (or "pickle") and load Python objects to and from your computer's file system.
diff --git a/Python/Module5_OddsAndEnds/Writing_Good_Code.md b/Python/Module5_OddsAndEnds/Writing_Good_Code.md
index beed8277..8ca1e354 100644
--- a/Python/Module5_OddsAndEnds/Writing_Good_Code.md
+++ b/Python/Module5_OddsAndEnds/Writing_Good_Code.md
@@ -12,6 +12,13 @@ jupyter:
name: python3
---
+
+```raw_mimetype="text/restructuredtext"
+.. meta::
+ :description: Topic: Writing good code, Difficulty: Easy, Category: Section
+ :keywords: pep8, code style, lint, format, best practices, type hint, documentation, numpydoc, sphinx, typing, annotation, whitespace
+```
+
# Writing Good Code
Throughout PLYMI we have been concerned with learning the rules for writing valid Python code. That is, we have taken care to ensure that our computers can understand the instructions that we have written for them. Here, we will discuss methods for making our code easier for *humans* to understand. Specifically, we will study:
@@ -489,7 +496,7 @@ The following is a summary some of the most critical members of the `typing` mod
- Hint a dictionary that maps any hashable to booleans: `Dict[Hashable, bool]`|
-#### `Callable[[], ...], `
+#### `Callable[[], `]
- **What it hints:** A callable (e.g. a function or a method) that takes in arguments of specified types and returns the specified type
- **Examples:**