mlr3pipelines icon indicating copy to clipboard operation
mlr3pipelines copied to clipboard

Replace Sugraph

Open mb706 opened this issue 4 years ago • 6 comments

A potentially useful operation on a Graph would be to replace a PipeOp, or an entire subgraph, with a different Graph. With this, one could "edit" the result of a ppl() call, for example, if the pipeline happens to have a single / very few pipeops that are different than what would be desired. Currenlty the user would have to edit the connection table to do this, which may be a bit tedious.

Suggested UI for this would be Graph$replace_subgraph(ids, substitute), substitute being something that can be turned into a graph using as_graph. The operation would remove ids from the graph, and do the equivalent of <channels into ids> %>>% substitute %>>% <channels out of ids> inside the graph (This would entail automatic one-to-many and vararg channel handling, as well as type checking).

mb706 avatar Nov 05 '20 02:11 mb706

Which (newly free) output channels to connect to new graph, and in what order?

  • take original graph, remember output_orig as the entire graph's output channels (graph$output)
  • delete IDs of pipeops that are being cut out, and remove their edges (obvsly)
  • look what new graph$output channels there are. Set-subtract output_orig from these
  • use these output channels & this order to connect to new graph
  • should be in-place

mb706 avatar Dec 04 '20 17:12 mb706

we want a complementary function that gives us the IDs of all pipeops that are "between" two (or more) pipeops.

mb706 avatar Dec 04 '20 17:12 mb706

edge cases to watch out for: entire graph, beginning of graph, end of graph

mb706 avatar Dec 04 '20 17:12 mb706

vararg will be difficult...

mb706 avatar Dec 04 '20 17:12 mb706

should work the same as %>>% I would say

mb706 avatar Dec 04 '20 17:12 mb706

Also $remove_pipeop() which removes edges and updates param_set

mb706 avatar Dec 04 '20 18:12 mb706