[video member=pervognsen stream_platform=twitch project=bitwise title="Domain-Specific Languages In Python, Part 4" vod_platform=youtube id=rr0eeoFFt84 annotator=Miblo]
[0:07][Recap and set the stage for the day with a note on the experimental nature of this portion of the series][:speech]
[2:39][Review off-stream work on modules and our adder creator][:language :research]
[10:00][Review ConcatNode, IndexNode and SliceNode][:language :research]
[12:16][Review the addition of connect() in OutputNode, as used in Adder16][:language :research]
[16:03][Fix the type coercion in connect()][:language]
[16:10][:Run it to see that it works][:language]
[16:15][Continue to review options for creating connections in Adder16][:language :research]
[23:01][Determine to create a Graphviz-powered graph visualisation of our circuit][:"debug visualisation" :language :speech]
[24:35][Example graph for an adder][:language :research]
[28:18][Set up to create a Graphviz .dot file generator for rattle][:"debug visualisation" :language :speech]
[30:21][Introduce DotGenerator class and generate_dot_file()][:"debug visualisation" :language]
[34:53][Introduce make_name() to facilitate handling of graph cycles, and continue to implement generate_dot_file()][:"debug visualisation" :language]
[41:12][Introduce TestModule to test our generator on a simple circuit][:"debug visualisation" :language]
[43:01][:Run it to see that this didn't do the trick][:"debug visualisation" :language]
[43:11][Enable OutputNode() to fill in the value before recursing][:"debug visualisation" :language]
[44:52][:Run it to see that it did seem to work][:"debug visualisation" :language]
[45:36][Introduce BinaryNode() and a helper function connect() in DotGenerator][:"debug visualisation" :language]
[49:47][Test our DotGenerator on a binary node][:"debug visualisation" :language]
[51:20][:Run it to see what it produces][:"debug visualisation" :language]
[52:12][Introduce IndexNode() and SliceNode() in DotGenerator][:"debug visualisation" :language]
[53:45][Test our DotGenerator on a slice node][:"debug visualisation" :language]
[54:39][:Run it to see that it looks reasonable][:"debug visualisation" :language]
[55:25][Introduce ConcatNode() in DotGenerator][:"debug visualisation" :language]
[59:01][Test our DotGenerator on a concat node][:"debug visualisation" :language]
[1:00:10][Output our .dot to example.dot][:"file io"]
[1:00:35][:Run it to see our circuit graph][:"debug visualisation" :language]
[1:01:00][Change OutputNode() to generate a rarrow[ref
    site=Graphviz
    page="Node Shapes"
    url=https://graphviz.gitlab.io/_pages/doc/info/shapes.html]][:"debug visualisation" :language]
[1:01:48][:Run it to see that this doesn't look too bad][:"debug visualisation" :language]
[1:02:09][Enable our Graphviz generator to handle sub-module instances][:"debug visualisation" :language]
[1:12:01][Introduce InputNode() in DotGenerator][:"debug visualisation" :language]
[1:12:43][Go whole hog and test our generator on Adder8][:"debug visualisation" :language]
[1:12:54][:Run it to see that it looks not totally unreasonable][:"debug visualisation" :language]
[1:16:07][Create Adder1 module to test our Graphviz generator's handling of sub-modules][:"debug visualisation" :language]
[1:22:06][:Run it to see our sub-modular graph of Adder8][:"debug visualisation" :language]
[1:23:52][Test our generator on Adder16][:"debug visualisation" :language]
[1:24:00][:Run it to see our graph of Adder16][:"debug visualisation" :language]
[1:24:28][That's it for today, with a glimpse into the future on logic design][:speech]
[/video]
