+ Shards (i.e. splits) a list into sublists of size `size` whcih,
+ together, contain all items in the original unsharded list.
+
+ Args:
+ lst: the original input list to shard
+ size: the ideal shard size (number of elements per shard)
+
+ Returns:
+ A generator that yields successive shards.
+
+ .. note::
+
+ If `len(lst)` is not an even multiple of `size` then the last
+ shard will not have `size` items in it. It will have
+ `len(lst) % size` items instead.