def __call__(self, diagram): diagram = diagram.downgrade() if isinstance(diagram, Bubble): obj = Ob(diagram.drawing_name) obj.draw_as_box = True left, right = Ty(obj), Ty("") open_bubble = Box("open_bubble", diagram.dom, left @ diagram.inside.dom @ right) close_bubble = Box("_close", left @ diagram.inside.cod @ right, diagram.cod) open_bubble.draw_as_wires = True close_bubble.draw_as_wires = True # Wires can go straight only if types have the same length. if len(diagram.dom) == len(diagram.inside.dom): open_bubble.bubble_opening = True if len(diagram.cod) == len(diagram.inside.cod): close_bubble.bubble_closing = True return open_bubble\ >> Id(left) @ self(diagram.inside) @ Id(right)\ >> close_bubble return super().__call__(diagram)
def __init__(self, *objects): self._objects = tuple( x if isinstance(x, Ob) else Ob(x) for x in objects) super().__init__(self)