We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
Domain-Specific Languages In Python, Part 5
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:06Recap and set the stage for the final stream in this portion of the series
🗩
0:06Recap and set the stage for the final stream in this portion of the series
🗩
0:06Recap and set the stage for the final stream in this portion of the series
🗩
0:57Review newly added optional display of types and labelling of nodes to our DotGenerator
📖
0:57Review newly added optional display of types and labelling of nodes to our DotGenerator
📖
0:57Review newly added optional display of types and labelling of nodes to our DotGenerator
📖
4:19Review our new parity() circuit
📖
4:19Review our new parity() circuit
📖
4:19Review our new parity() circuit
📖
5:46Introduce parity2() as a naive way to XOR a collection of bits
5:46Introduce parity2() as a naive way to XOR a collection of bits
5:46Introduce parity2() as a naive way to XOR a collection of bits
7:46Run it to see our graph for parity2()
🏃
7:46Run it to see our graph for parity2()
🏃
7:46Run it to see our graph for parity2()
🏃
9:43Run it on the original parity() to see our graph with logarithmic depth
🏃
9:43Run it on the original parity() to see our graph with logarithmic depth
🏃
9:43Run it on the original parity() to see our graph with logarithmic depth
🏃
12:52Run it on LinearXorScanner8 and explain our graph for this
🏃
12:52Run it on LinearXorScanner8 and explain our graph for this
🏃
12:52Run it on LinearXorScanner8 and explain our graph for this
🏃
17:56Compare the LinearXorScanner8 graph with that for Parity8
🏃
17:56Compare the LinearXorScanner8 graph with that for Parity8
🏃
17:56Compare the LinearXorScanner8 graph with that for Parity8
🏃
18:35Run it on LogarithmicXorScanner8 and explain our graph for this
🏃
18:35Run it on LogarithmicXorScanner8 and explain our graph for this
🏃
18:35Run it on LogarithmicXorScanner8 and explain our graph for this
🏃
19:55Walk through parity(), scan() and scan2(), with a mention of the Brent-Kung adder1
📖
19:55Walk through parity(), scan() and scan2(), with a mention of the Brent-Kung adder1
📖
19:55Walk through parity(), scan() and scan2(), with a mention of the Brent-Kung adder1
📖
26:38Highlight the skewed fanout in our LogarithmicXorScanner8
🏃
26:38Highlight the skewed fanout in our LogarithmicXorScanner8
🏃
26:38Highlight the skewed fanout in our LogarithmicXorScanner8
🏃
28:00Generate a 32-bit LogarithmicXorScanner8 circuit and check out the skewed fanout in its graph
🏃
28:00Generate a 32-bit LogarithmicXorScanner8 circuit and check out the skewed fanout in its graph
🏃
28:00Generate a 32-bit LogarithmicXorScanner8 circuit and check out the skewed fanout in its graph
🏃
29:39Consider expanding our vocabulary with when() and case(), and optimising our graph visualisation
🗩
29:39Consider expanding our vocabulary with when() and case(), and optimising our graph visualisation
🗩
29:39Consider expanding our vocabulary with when() and case(), and optimising our graph visualisation
🗩
32:46Flattening graph slices by short-circuiting the second level of a slice-of-a-slice
🗩
32:46Flattening graph slices by short-circuiting the second level of a slice-of-a-slice
🗩
32:46Flattening graph slices by short-circuiting the second level of a slice-of-a-slice
🗩
34:58Enable IndexNode to flatten slices
34:58Enable IndexNode to flatten slices
34:58Enable IndexNode to flatten slices
36:21Run it to see that there might be a bug
🏃
36:21Run it to see that there might be a bug
🏃
36:21Run it to see that there might be a bug
🏃
37:55Step in to IndexNode and inspect the data
🏃
37:55Step in to IndexNode and inspect the data
🏃
37:55Step in to IndexNode and inspect the data
🏃
39:00Fix IndexNode to correctly flatten slices
39:00Fix IndexNode to correctly flatten slices
39:00Fix IndexNode to correctly flatten slices
39:38Run it to see that it looks better
🏃
39:38Run it to see that it looks better
🏃
39:38Run it to see that it looks better
🏃
39:47Enable SliceNode to flatten slices of slices
39:47Enable SliceNode to flatten slices of slices
39:47Enable SliceNode to flatten slices of slices
40:30Run it to see our flattened slices of slices, and consider short-circuiting indexing into concatenations
🏃
40:30Run it to see our flattened slices of slices, and consider short-circuiting indexing into concatenations
🏃
40:30Run it to see our flattened slices of slices, and consider short-circuiting indexing into concatenations
🏃
41:46Loft out the construction part of IndexNode and SliceNode to make_index() and make_slice() respectively
41:46Loft out the construction part of IndexNode and SliceNode to make_index() and make_slice() respectively
41:46Loft out the construction part of IndexNode and SliceNode to make_index() and make_slice() respectively
47:45Run it to see the same stuff we had before
🏃
47:45Run it to see the same stuff we had before
🏃
47:45Run it to see the same stuff we had before
🏃
47:53Enable make_index() to short-circuit ConcatNode indexing
47:53Enable make_index() to short-circuit ConcatNode indexing
47:53Enable make_index() to short-circuit ConcatNode indexing
50:59Run it to see that some of it looks dubious
🏃
50:59Run it to see that some of it looks dubious
🏃
50:59Run it to see that some of it looks dubious
🏃
51:59Consider our previous graph without short-circuiting of concatenation indexing
🏃
51:59Consider our previous graph without short-circuiting of concatenation indexing
🏃
51:59Consider our previous graph without short-circuiting of concatenation indexing
🏃
52:34Continue to investigate why our concatenation indexing doesn't always get flattened
📖
52:34Continue to investigate why our concatenation indexing doesn't always get flattened
📖
52:34Continue to investigate why our concatenation indexing doesn't always get flattened
📖
59:12Enable make_index() to recursively apply flattening to ConcatNodes
🏃
59:12Enable make_index() to recursively apply flattening to ConcatNodes
🏃
59:12Enable make_index() to recursively apply flattening to ConcatNodes
🏃
1:00:19Run it to see exactly what we wanted to see
🏃
1:00:19Run it to see exactly what we wanted to see
🏃
1:00:19Run it to see exactly what we wanted to see
🏃
1:01:18Check out the fanout in a 32-bit LogarithmicXorScanner8 circuit
🏃
1:01:18Check out the fanout in a 32-bit LogarithmicXorScanner8 circuit
🏃
1:01:18Check out the fanout in a 32-bit LogarithmicXorScanner8 circuit
🏃
1:04:15Incorporating registers, in the context of a Counter module
🗩
1:04:15Incorporating registers, in the context of a Counter module
🗩
1:04:15Incorporating registers, in the context of a Counter module
🗩
1:09:34Introduce RegisterNode
1:09:34Introduce RegisterNode
1:09:34Introduce RegisterNode
1:13:36Introduce Counter module
1:13:36Introduce Counter module
1:13:36Introduce Counter module
1:14:28Run it to see our Counter circuit
🏃
1:14:28Run it to see our Counter circuit
🏃
1:14:28Run it to see our Counter circuit
🏃
1:15:00Add a value to the RegisterNode()
1:15:00Add a value to the RegisterNode()
1:15:00Add a value to the RegisterNode()
1:15:11Run it to see our Counter circuit
🏃
1:15:11Run it to see our Counter circuit
🏃
1:15:11Run it to see our Counter circuit
🏃
1:15:51Define __add__ and __radd__ operands for our Counter module to use
1:15:51Define __add__ and __radd__ operands for our Counter module to use
1:15:51Define __add__ and __radd__ operands for our Counter module to use
1:16:47Run it to see our Counter circuit, with a cycle
🏃
1:16:47Run it to see our Counter circuit, with a cycle
🏃
1:16:47Run it to see our Counter circuit, with a cycle
🏃
1:17:07Add an increment input to our Counter module
1:17:07Add an increment input to our Counter module
1:17:07Add an increment input to our Counter module
1:17:30Run it to see the terrible layout of our Counter circuit
🏃
1:17:30Run it to see the terrible layout of our Counter circuit
🏃
1:17:30Run it to see the terrible layout of our Counter circuit
🏃
1:18:10Change the inc input in our Counter module to an enable input which controls the count via a (newly introduced) WhenNode
1:18:10Change the inc input in our Counter module to an enable input which controls the count via a (newly introduced) WhenNode
1:18:10Change the inc input in our Counter module to an enable input which controls the count via a (newly introduced) WhenNode
1:25:34Run it see our Counter circuit with conditional operation
🏃
1:25:34Run it see our Counter circuit with conditional operation
🏃
1:25:34Run it see our Counter circuit with conditional operation
🏃
1:26:55A few words on flipflop enables
🗩
1:26:55A few words on flipflop enables
🗩
1:26:55A few words on flipflop enables
🗩
1:27:58Change our Counter module to contain a D-flipflop with builtin enable
1:27:58Change our Counter module to contain a D-flipflop with builtin enable
1:27:58Change our Counter module to contain a D-flipflop with builtin enable
1:29:26Run it to see this Counter module
🏃
1:29:26Run it to see this Counter module
🏃
1:29:26Run it to see this Counter module
🏃
1:29:43That's probably enough, with a glimpse into next week's ordered introduction to hardware
🗩
1:29:43That's probably enough, with a glimpse into next week's ordered introduction to hardware
🗩
1:29:43That's probably enough, with a glimpse into next week's ordered introduction to hardware
🗩