def visit()

in smallpond/logical/node.py [0:0]


    def visit(self, node: Node, depth: int = 0) -> T:
        """
        Visit a node depending on its type.
        If the method for the node type is not implemented, call `generic_visit`.
        """
        if isinstance(node, DataSourceNode):
            return self.visit_data_source_node(node, depth)
        elif isinstance(node, DataSinkNode):
            return self.visit_data_sink_node(node, depth)
        elif isinstance(node, RootNode):
            return self.visit_root_node(node, depth)
        elif isinstance(node, UnionNode):
            return self.visit_union_node(node, depth)
        elif isinstance(node, ConsolidateNode):
            return self.visit_consolidate_node(node, depth)
        elif isinstance(node, PartitionNode):
            return self.visit_partition_node(node, depth)
        elif isinstance(node, PythonScriptNode):
            return self.visit_python_script_node(node, depth)
        elif isinstance(node, ArrowComputeNode):
            return self.visit_arrow_compute_node(node, depth)
        elif isinstance(node, ArrowStreamNode):
            return self.visit_arrow_stream_node(node, depth)
        elif isinstance(node, LimitNode):
            return self.visit_limit_node(node, depth)
        elif isinstance(node, SqlEngineNode):
            return self.visit_query_engine_node(node, depth)
        elif isinstance(node, ProjectionNode):
            return self.visit_projection_node(node, depth)
        else:
            raise Exception(f"Unknown node type: {node}")