[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]