The operation is `items[self.out] = fn(items[self.lhs], items[self.rhs])`.
The operation is not assumed to be commutative.
"""
- out: int; """index of the item to output to"""
- lhs: int; """index of the item the left-hand-side input comes from"""
- rhs: int; """index of the item the right-hand-side input comes from"""
- row: int; """row in the prefix-sum diagram"""
+ out: int
+ """index of the item to output to"""
+ lhs: int
+ """index of the item the left-hand-side input comes from"""
+ rhs: int
+ """index of the item the right-hand-side input comes from"""
+ row: int
+ """row in the prefix-sum diagram"""
def prefix_sum_ops(item_count, *, work_efficient=False):
ops_by_row[op.row].add(op)
def blank_row():
- return [_Cell(slant=False, plus=False, tee=False) \
+ return [_Cell(slant=False, plus=False, tee=False)
for _ in range(item_count)]
cells = [blank_row()]
if __name__ == "__main__":
print("the non-work-efficient algorithm, matches the diagram in wikipedia:"
- "\n"
- "https://commons.wikimedia.org/wiki/File:Hillis-Steele_Prefix_Sum.svg"
- "\n\n")
+ "\n"
+ "https://commons.wikimedia.org/wiki/File:Hillis-Steele_Prefix_Sum.svg"
+ "\n\n")
print(render_prefix_sum_diagram(16, work_efficient=False))
print()
print()