src/Tools/Graphview/mutator.scala
author wenzelm
Fri, 01 Apr 2022 17:06:10 +0200
changeset 75393 87ebf5a50283
parent 73359 d8a0e996614b
child 75394 42267c650205
permissions -rw-r--r--
clarified formatting, for the sake of scala3;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59202
711c2446dc9d clarified source location;
wenzelm
parents: 56372
diff changeset
     1
/*  Title:      Tools/Graphview/mutator.scala
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     2
    Author:     Markus Kaiser, TU Muenchen
59240
e411afcfaa29 tuned headers;
wenzelm
parents: 59228
diff changeset
     3
    Author:     Makarius
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     4
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     5
Filters and add-operations on graphs.
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     6
*/
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     7
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     8
package isabelle.graphview
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     9
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    10
49558
af7b652180d5 minimal component and build setup for graphview;
wenzelm
parents: 49557
diff changeset
    11
import isabelle._
af7b652180d5 minimal component and build setup for graphview;
wenzelm
parents: 49557
diff changeset
    12
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    13
import java.awt.Color
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    14
import scala.collection.immutable.SortedSet
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    15
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    16
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
    17
object Mutator {
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    18
  sealed case class Info(enabled: Boolean, color: Color, mutator: Mutator)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    19
59459
985fc55e9f27 clarified module name;
wenzelm
parents: 59259
diff changeset
    20
  def make(graphview: Graphview, m: Mutator): Info =
73344
f5c147654661 tuned --- fewer warnings;
wenzelm
parents: 71601
diff changeset
    21
    Info(true, graphview.Colors.next(), m)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    22
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    23
  class Graph_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    24
    val name: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    25
    val description: String,
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
    26
    pred: Graph_Display.Graph => Graph_Display.Graph
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
    27
  ) extends Filter {
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
    28
    def filter(graph: Graph_Display.Graph): Graph_Display.Graph = pred(graph)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    29
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    30
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    31
  class Graph_Mutator(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    32
    val name: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    33
    val description: String,
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
    34
    pred: (Graph_Display.Graph, Graph_Display.Graph) => Graph_Display.Graph
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
    35
  ) extends Mutator {
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
    36
    def mutate(full_graph: Graph_Display.Graph, graph: Graph_Display.Graph): Graph_Display.Graph =
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
    37
      pred(full_graph, graph)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    38
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    39
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    40
  class Node_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    41
    name: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    42
    description: String,
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
    43
    pred: (Graph_Display.Graph, Graph_Display.Node) => Boolean)
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    44
    extends Graph_Filter(name, description, g => g.restrict(pred(g, _)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    45
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    46
  class Edge_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    47
    name: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    48
    description: String,
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
    49
    pred: (Graph_Display.Graph, Graph_Display.Edge) => Boolean)
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    50
    extends Graph_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    51
      name,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    52
      description,
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
    53
      g => g.dest.foldLeft(g) {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    54
        case (graph, ((from, _), tos)) =>
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
    55
          tos.foldLeft(graph) {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
    56
            case (gr, to) => if (pred(gr, (from, to))) gr else gr.del_edge(from, to)
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
    57
          }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    58
      })
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    59
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    60
  class Node_Family_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    61
    name: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    62
    description: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    63
    reverse: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    64
    parents: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    65
    children: Boolean,
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
    66
    pred: (Graph_Display.Graph, Graph_Display.Node) => Boolean)
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
    67
    extends Node_Filter(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    68
      name,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    69
      description,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    70
      (g, k) =>
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    71
        reverse !=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    72
          (pred(g, k) ||
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    73
            (parents && g.all_preds(List(k)).exists(pred(g, _))) ||
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    74
            (children && g.all_succs(List(k)).exists(pred(g, _)))))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    75
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    76
  case class Identity()
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
    77
    extends Graph_Filter(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    78
      "Identity",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    79
      "Does not change the graph.",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    80
      g => g)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    81
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    82
  case class Node_Expression(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    83
    regex: String,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    84
    reverse: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    85
    parents: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    86
    children: Boolean)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    87
    extends Node_Family_Filter(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    88
      "Filter by Name",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    89
      "Only shows or hides all nodes with any family member's name matching a regex.",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    90
      reverse,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    91
      parents,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    92
      children,
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
    93
      (g, node) => (regex.r findFirstIn node.toString).isDefined)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    94
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    95
  case class Node_List(
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
    96
    list: List[Graph_Display.Node],
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    97
    reverse: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    98
    parents: Boolean,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    99
    children: Boolean)
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
   100
    extends Node_Family_Filter(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   101
      "Filter by Name List",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   102
      "Only shows or hides all nodes with any family member's name matching any string in a comma separated list.",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   103
      reverse,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   104
      parents,
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   105
      children,
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   106
      (g, node) => list.contains(node))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   107
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   108
  case class Edge_Endpoints(edge: Graph_Display.Edge)
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
   109
    extends Edge_Filter(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   110
      "Hide edge",
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   111
      "Hides specified edge.",
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   112
      (g, e) => e != edge)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   113
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   114
  private def add_node_group(
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   115
    from: Graph_Display.Graph,
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   116
    to: Graph_Display.Graph,
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   117
    keys: List[Graph_Display.Node]
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   118
  ) = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   119
    // Add Nodes
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   120
    val with_nodes =
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   121
      keys.foldLeft(to) { case (graph, key) => graph.default_node(key, from.get_node(key)) }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   122
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   123
    // Add Edges
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   124
    keys.foldLeft(with_nodes) {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   125
      case (gv, key) =>
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   126
        def add_edges(g: Graph_Display.Graph, keys: from.Keys, succs: Boolean) =
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   127
          keys.foldLeft(g) {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   128
            case (graph, end) =>
56372
fadb0fef09d7 more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents: 50475
diff changeset
   129
              if (!graph.keys_iterator.contains(end)) graph
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   130
              else {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   131
                if (succs) graph.add_edge(key, end)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   132
                else graph.add_edge(end, key)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   133
              }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   134
          }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   135
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   136
        add_edges(
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   137
          add_edges(gv, from.imm_preds(key), false),
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   138
          from.imm_succs(key), true)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   139
    }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   140
  }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   141
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   142
  case class Add_Node_Expression(regex: String)
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
   143
    extends Graph_Mutator(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   144
      "Add by name",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   145
      "Adds every node whose name matches the regex. " +
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   146
      "Adds all relevant edges.",
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   147
      (full_graph, graph) =>
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   148
        add_node_group(full_graph, graph,
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   149
          full_graph.keys.filter(node => (regex.r findFirstIn node.toString).isDefined).toList))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   150
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   151
  case class Add_Transitive_Closure(parents: Boolean, children: Boolean)
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49563
diff changeset
   152
    extends Graph_Mutator(
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   153
      "Add transitive closure",
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   154
      "Adds all family members of all current nodes.",
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   155
      (full_graph, graph) => {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   156
        val withparents =
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   157
          if (parents) add_node_group(full_graph, graph, full_graph.all_preds(graph.keys))
59228
56b34fc7a015 more dynamic visualizer -- re-use Isabelle/jEdit options;
wenzelm
parents: 59221
diff changeset
   158
          else graph
56b34fc7a015 more dynamic visualizer -- re-use Isabelle/jEdit options;
wenzelm
parents: 59221
diff changeset
   159
        if (children)
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   160
          add_node_group(full_graph, withparents, full_graph.all_succs(graph.keys))
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   161
        else withparents
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   162
      })
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   163
}
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   164
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   165
trait Mutator {
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   166
  val name: String
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   167
  val description: String
59259
399506ee38a5 clarified static full_graph vs. dynamic visible_graph;
wenzelm
parents: 59246
diff changeset
   168
  def mutate(full_graph: Graph_Display.Graph, graph: Graph_Display.Graph): Graph_Display.Graph
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   169
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   170
  override def toString: String = name
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   171
}
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   172
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73359
diff changeset
   173
trait Filter extends Mutator {
71601
97ccf48c2f0c misc tuning based on hints by IntelliJ IDEA;
wenzelm
parents: 59459
diff changeset
   174
  def mutate(full_graph: Graph_Display.Graph, graph: Graph_Display.Graph): Graph_Display.Graph = filter(graph)
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   175
  def filter(graph: Graph_Display.Graph): Graph_Display.Graph
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   176
}