~P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x yz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS @Find a cycle in a graph. We are given a list of nodes to start ! from, and a successor function.     TUVWX YZ[\   Get all nodes in the graph (If the node does not exist in the graph ].  Otherwise ^ key where key is a "nodeKey", an ordered key F uniquely distinguishing the node (and used to detect common elements  in the two graphs) 4If node does not exist Nothing, otherwise immediate  parents of node. _`abcdefgh   : !"#$%&'()*+,-./0i1j2k3l456789:;<=>?@ABCDEFGHIJKLMNOPQR6 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR6;<=>?@ABCDEFGHIJKLMNOPQ3120R"/.-,+*)('&%$#:456789 !6 !!" /.-,+*)('&%$##$%&'()*+,-./012345678956789:;<=>?@ABCDEFGHIJKLMNOPQ<=>?@ABCDEFGHIJKLMNOPQRSTUVmnopqrsWXY5function to compute node label in new graph and type 4function to compute arc label in new graph and type &updates prepended to initialse types. : (The type declarations in the input graph are discarded) STUVWXYSTUVWXYSTUVTUVWXYtFThis describes the information kept about a node during the course of  removeAncestorsBy u,we are already searching from this element. vthe opposite of Yes. w;there is a, possibly trivial, path from here to an element  of the target set. Z4Takes a graph G and a list of nodes N and computes N' = { n in N | A there does not exist an m in N and a non-trivial path n -> m }. [EGeneral removeAncestors function, which takes as argument the action  computing a Node's successors. \Pure version of [. Z[\Z[\Z[\ ]^]^]^]^ _`axyb?Returns True if first node is ancestor or equal to the second. c?Returns True if first node is ancestor or equal to the second. d_`abcd_`acbd_`abcd efghijklDnode given with their parent nodes. The parents should always come $ before their children in the list. mnop+add a node with given parent arcs from it. qANB. The graph will end up ill-formed if you delete a node which ! has parent arcs pointing to it. rstuvefghijklmnopqrstuvlmnijkefghopquvrstefghfghijkjklmnmnopqrstuv wRemove hidden1 vertices as far as possible from a graph, which K must be acyclic, while still preserving the structure as far as possible. 0This function returns True if a node is hidden. In the returned graph, we use ] to indicate the arcs  which don',t correspond to arcs in the original graph. z>Computes list in which parents always precede their children. {/Transform the Dag according to the Z function. A The rule is that hidden nodes with just one parent get replaced / in parent lists by their parent (repeatedly). |DCompute all nodes which are either not hidden, or have a descendant 7 which is not hidden, and then delete all other nodes. }6Compute the number of children each node has in a Dag ~=For nodes with one hidden parent, which has just that child, 7 delete the hidden parent and replace the original node's parents by the  hidden parent' s parents.  NB. We don'>t have to worry about this being applied recursively provided F zTrans has already been applied, since that removes chains of hidden  vertices. www xxxx%yz{|}~yz{|}~}~yz{|yz{|z{|}~source of new names current annotated graph current node info (How we generate new Node and Arc values @the old graph, annotated with corresponding node and arc values the new graph old toNodeInfo function new toNodeInfo function 7the new annotated graph, and the changes to get to it. 0Change the nodeInfo of something already added. Change the hidden function @Get the input graph in the form of FindCommonParents.GraphBack.  NB. ( (1) the confusion in the type variable nodeKey as used in . FindCommonParents is not the same as our nodeKey. G (2) we get a snapshot of the state of the input graph at a particular  time "Basic Interface for Graph Display M>The graph implementation will provide a value of this type to ; get you started. For example, for daVinci this is called  daVinciSort. 3 However you then need to use it as an argument to  to construct  the actual graph. ?Construct a new graph. The input value will be something like   DaVinciGraph's value  daVinciSort; the resulting graph will be  returned. ARedraw the graph. This is needed when you want to show updates. >Take over all interaction on the graph, and perform the given E action, supplying it with an event which is activated when the user E double-clicks a node. This is helpful when you need an interaction  selecting several nodes. construct a new node.  set a node's type delete a node %get the value associated with a node &set the value associated with a node. construct a node type. construct a new arc. Given a node, construct a  which can be used as a way 5 of drawing ordered sets of out-arcs from that node. D (NB. At the moment daVinci does not do this properly, but that is  daVinci's fault, not mine.) delete an arc %set the value associated with an arc %get the value associated with an arc create a new arc type GGG%Extended Interface for Graph Display ^<Function to be applied to all user actions. This is useful # for exception wrappers and so on. Which way up the graph is. BWe copy the DaVinciTypes constructors, though of course this will 5 mean we have to painfully convert one to the other. GThe following options are provided specially by DaVinci (see, for now,   Xhttp://www.informatik.uni-bremen.de/daVinci/old/docs/reference/api/api_app_menu_cmd.html ) for the daVinci2.1 documentation. If a  is used as F a configuration with a specified action, the corresponding option is H enabled in the daVinci File menu, and the action is performed when the  option is selected. The  configuration and  both set the action I to be taken when the user selects a close event, and each overrides the  other. BBy default the Close and Print options are enabled, however these 0 and other options can be disabled by specifing ] as the ! second argument to FileMenuAct. BIf set, action which is invoked if the user attempts to close the 3 window. If the action returns True, we close it. DWARNING. This action is performed in the middle of the event loop,  so please don':t attempt to do any further graph interactions during it. ( (But HTk interactions should be fine.) (If True, allow Drag-and-Drop operators. 4If True, add a survey view of the graph; IE display 2 a picture of the whole graph which fits onto the ( screen (without displaying everything) 4 as well as a picture of the details (which may not  fit onto the screen). )(The user can do this anyway from daVinci' s menus.) If /, try hard to optimise the layout of the graph  on redrawing it.  Compute a  which dynamically changes. 7The font in which the label of this node is displayed.  Compute a  which dynamically changes. The border of this node /If True, arcs from the node are not displayed. @The user is responsible for making sure this String is properly 6 formatted. To quote from the daVinci documentation: F With this attribute you can control the shape of the edge's arrows. P The possible values are: "farrow" (default), "arrow", "fcircle", and "circle", # where a leading 'f' means filled. @The user is responsible for making sure this String is properly 6 formatted. To quote from the daVinci documentation: S This attribute is used to control the arrow of an edge. In a graph visualization, R each edge usually has an arrow pointing to the child node. This attribute can be W used to let the arrow be drawn inverse (i.e. pointing to the parent), to get an arrow U at both sides of an edge or to suppress arrows for a particular edge. The supported R attribute values are: "last" (1 arrow pointing to the child, default), \"first\" T(1 arrow to the parent), "both" (2 arrows to the parent and to children) and "none"  (no arrows).  The pattern of an edge     @The user is responsible for making sure this String is properly 6 formatted. To quote from the daVinci documentation:  I Can be used to define the background color of a node. The value of this K attribute may be any X-Window colorname (see file lib/rgb.txt in your X11 G directory) or any RGB color specification in a format like "#0f331e", H where 0f is the hexadecimal value for the red part of the color, 33 is E the green part and 1e is the blue. Hence, a pallet of 16.7 million > colors is supported. The default color for nodes is "white". %There is a function for constructing "RGB color specification"s in  Colour. This datatype is based on DaVinciClasses, including several  name clashes. However we omit Textual, add the file argument  to  and the shape !. This datatype may get bigger! =Action to be performed when a node or arc is double-clicked. BAction to be performed when the user drags one node onto another.  The dragged node'4s value is passed as a Dyn (since it could have any  type). >If you want to use this, the graph parameters need to include    BAction to be performed when the user drags a node somewhere else,  but not onto another node. >If you want to use this, the graph parameters need to include    EAction to be performed after mouse action not involving any node but  somewhere on the graph. >If you want to use this, the graph parameters need to include     JProvide a function which computes a source which generates a dynamically-  changing title. !"CProvide a function which computes a node or arc title string to be  displayed. #$%&'()*+,-./"$$$? can be a useful abbreviation 0;As a service to MMiSS we provide a function which combines  several GlobalMenus into one. 1Allows the user to specify a  . This will postpone redrawing  on the graph. h       !"#$%&'()*+,-./01h,-.*+&'()0  $%"# !     1/]          !!"##$%%&''())*++,-.-./01+23456789:;<=>?@ABCD23456789:;<=>?@ABCD<=>?@89:;A567B234CD234345676789:;9:;<=>?=>?@ABCDEFGHEFGHFGHEEFGHIJKLMNIJKLMNNIMLKJIJKLMNOOOO !"#$%&'(()*+,-./012345667889:;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghiijklmnopq r s t u v r w x y y z { | | } ~ ~  @=;>FCDQQacbed        !""#$%%&'()*+,-./0123456789:;<<=>?@ABCDEFDEG-HIJ./KLMNGHIJOOPQRSTU:VW X Y Z [ \ ] ^ eyy_`{||a#bcdefghijklmnopqrstuuhvwxyz{|}~    -1uni-graphs-2.2.0.0Graphs.GraphConfigureGraphs.FindCycleGraphs.TopSortGraphs.FindCommonParentsGraphs.NewNames Graphs.GraphGraphs.GraphConnectionGraphs.RemoveAncestorsGraphs.GraphOpsGraphs.GetAncestorsGraphs.PureGraphGraphs.PureGraphPruneGraphs.PureGraphMakeConsistentGraphs.SimpleGraphGraphs.PureGraphToGraphGraphs.VersionDagGraphs.GraphDispGraphs.GetAttributesGraphs.DisplayGraphGraphs.GraphEditorGraphs.EmptyGraphSortuni-util-2.2.0.0Util.Computation HasConfig$$ configUseduni-htk-2.2.0.0HTk.Toolkit.MenuType mapMMenuPrim' mapMMenuPrim mapMenuPrim' mapMenuPrimButtonMenuBlankMenuPrim findCycletopSorttopSort1 GraphBack getAllNodesgetKey getParentsfindCommonParentsFrozenNameSourceNameSourceBranch NameSourcebranch useBranch initialBranch getNewNamefreezeNameSourcedefrostNameSource CannedGraphupdates PartialShowUpdate MultiUpdate SetArcType SetArcLabel DeleteArcNewArcSetArcTypeLabel NewArcType SetNodeType SetNodeLabel DeleteNodeNewNodeSetNodeTypeLabel NewNodeTypeArcTypeArcNodeTypeNodeGraphConnectionData graphState deRegister graphUpdatenameSourceBranchGraphConnectionGraphgetNodesgetArcs getNodeTypes getArcTypes getArcsOut getArcsIn getNodeLabel getNodeTypegetNodeTypeLabel getSource getTarget getArcLabel getArcTypegetArcTypeLabel shareGraphnewGraph newNodeTypenewNode newArcTypenewArcupdate newEmptyGraph firstNodeSubGraphnodeIn nodeTypeInattachSuperGraphattachSubGraphmapGraphConnectionremoveAncestorsremoveAncestorsByremoveAncestorsByPure isAncestor isAncestorBy getAncestorsgetDescendantsgetAncestorsGenericisAncestorPuregetAncestorsPureArcDataarcInfotargetNodeDataparents PureGraph nodeDataFMemptyPureGraphaddNode deleteNode toAllNodes toNodeParents nodeExists mapArcInfo parentNodespureGraphPrunepureGraphMakeConsistent ClientDataclientID clientSink SimpleGraph getNameSource delayedActionpureGraphToGraph VersionDag newVersionDag addVersion addVersions deleteVersion setNodeInfochangeIsHidden nodeKeyExists lookupNodeKey getNodeInfostoDisplayedGraphgetInputGraphBack toInputGraphOrd1compare1Eq1eq1 ArcTypeConfignewArcTypePrim ArcTypeClassinvisibleArcTypeArcClass deleteArcPrimsetArcValuePrimgetArcValuePrim WrappedNodesetArcTypePrim newArcPrimnewArcListDrawerPrimNodeTypeConfignewNodeTypePrim NodeTypeClass NodeClass SetNodeFocussetNodeFocusPrimdeleteNodePrimgetNodeValuePrimsetNodeValuePrimgetMultipleNodesPrim newNodePrimsetNodeTypePrim GraphConfigNewGraph newGraphPrim GraphClass redrawPrimGraphAll displaySort ArcTypeParmsemptyArcTypeParmsinvisibleArcTypeParmscoMapArcTypeParms NodeTypeParmsemptyNodeTypeParmscoMapNodeTypeParms GraphParmsemptyGraphParmsredrawgetMultipleNodes setNodeType setNodeFocus getNodeValue setNodeValuenewArcListDrawer deleteArc setArcValue setArcType getArcValueGraphAllConfigHasArcTypeConfigsHasNodeModifiesHasNodeTypeConfigsHasGraphConfigs ActionWrapper Orientation RightLeft LeftRightBottomUpTopDown FileMenuActFileMenuOptionExitMenuOptionCloseMenuOptionPrintMenuOptionSaveAsMenuOptionSaveMenuOptionOpenMenuOption NewMenuOption AllowClose AllowDragging SurveyViewOptimiseLayoutFontStyleSource FontStyleBoldItalicFontStyleItalicFontStyle BoldFontStyleNormalFontStyle BorderSourceBorder DoubleBorder SingleBorderNoBorderNodeArcsHidden ModifyHasDefdefisDefHeadEdgeDirDir EdgePatternDoubleThickDashedDottedSolidColorShapeIconTriangleRhombusEllipseCircleBoxDoubleClickActionNodeDragAndDrop NodeGesture GraphGestureValueTitleSource ValueTitle GraphTitle LocalMenu GlobalMenuHasModifyValuemodifyHasConfigValue$$$ configUsed'$$$?combineGlobalMenusdefaultAllowClose ArcAttributesarcTypeArcTypeAttributes arcTypeTitleNodeAttributesnodeType nodeTitleNodeTypeAttributesshape nodeTypeTitlegetNodeTypeAttributesgetNodeAttributesgetArcTypeAttributesgetArcAttributes displayError DisplayGraph displayGraph displayGraph0 displayGraph1 GraphEditorDisplayableCannedGraphDisplayableGraphConnectionDisplayableUpdate DisplayablenewGraphEditoremptyGraphSortDFSOut PartialCycleCycleNoCycle TopSortStatesoFarmaximal remaining ensureNodes ensureNode initialiseoneStepbase Data.MaybeNothingJustfrozenId frozenBranch frozenName nameSourceId branchCounter nameCounter listToStringConnectionStatenewConnectionStatearcIsInSubGrapharcAdd arcDeleteupdateIsInSubGraph NodeStateNoYesgetAncestorsGenericInnergetAncestorsGenericInnerStrict orderGraphzTransfindNotHanging nChildrenremoveOneHiddenParentarcLabelsource nodeLabelarcsInarcsOutnodeData nodeTypeDataarcData arcTypeData nameSource clientsMVarparentDeRegistergraphIDbSem getNodeInfo getArcInfoapplyUpdateFromClient applyUpdateinnerApplyUpdate cannGraph uncannGraphnewEmptyGraphWithSourceState pureGraph toNodeInfo getStateFn foldStateFnmodifyPureGraphlookupPureNode modifyArcs theNodeType theArcType typeUpdatesVersionDagState inPureGraph nodeInfoDictisHiddenstateBroadcaster toNodeKey toParentsKind3 kindThreeKind2kindTwoKind1kindOneUtil.VariableList ListDrawerghc-primGHC.BoolTrue$fGraphConfigDelayer Util.DelayerDelayerCancelExceptionArcPreAttributes preArcTypeNodePreAttributes preNodeType preNodeTitle PreAttributes shapeSortnodeTypeTitle' ShapeSortgetNodeTypeAttributes1getSingleString cancelQuery allowCanceloID destroyActiondestroyedEventNodeArcTypeRegistry nodeTypesarcTypesdestroyRegistryArcTypeRegistryNodeTypeRegistrymakeNewNodeType makeNewNodemakeNewArcType makeNewArcmakeNewNodeArcnewNodeArcTypeRegistryEmptyArcTypeParms EmptyArcTypeoIdETEmptyArcioRefEoIdEEmptyNodeTypeParms EmptyNodeType EmptyNodeioRefNoIdNEmptyGraphParms EmptyGraphdelayer destructChanoId listDrawer