public void CanCollapseNodesAndGetSameResult() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); model.Open(openPath); var watchNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Watch>(); var numNodesPreCollapse = model.CurrentWorkspace.Nodes.Count; Controller.RunExpression(); var valuePreCollapse = watchNode.CachedValue; var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach (var guid in nodesToCollapse) { var node = model.Nodes.First(x => x.GUID == Guid.Parse(guid)); model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); var numNodesPostCollapse = model.CurrentWorkspace.Nodes.Count; Assert.AreNotEqual(numNodesPreCollapse, numNodesPostCollapse); Assert.AreEqual(nodesToCollapse.Length, numNodesPreCollapse - numNodesPostCollapse + 1); Controller.RunExpression(); var valuePostCollapse = watchNode.CachedValue; // Ensure the values are equal and both 65. var svPreCollapse = ((long)valuePreCollapse.Data); var svPostCollapse = ((long)valuePostCollapse.Data); Assert.AreEqual(65, svPreCollapse); Assert.AreEqual(svPreCollapse, svPostCollapse); }
public void GitHub_461_DeleteNodesFromCustomNodeWorkspaceAfterCollapse() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); ViewModel.OpenCommand.Execute(openPath); var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach ( var node in nodesToCollapse.Select(guid => model.CurrentWorkspace.NodeFromWorkspace(guid))) { model.AddToSelection(node); } NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.Where(x => x is NodeModel) .Select(x => (x as NodeModel)), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest2__", Success = true }); ViewModel.GoToWorkspace( ViewModel.Model.CustomNodeManager.GetGuidFromName("__CollapseTest2__")); var workspace = model.CurrentWorkspace; Assert.AreEqual(6, workspace.Nodes.Count); var modelsToDelete = new List <ModelBase>(); var addition = workspace.FirstNodeFromWorkspace <DSFunction>(); Assert.IsNotNull(addition); Assert.AreEqual("+", addition.NickName); modelsToDelete.Add(addition); model.DeleteModelInternal(modelsToDelete); Assert.AreEqual(5, model.CurrentWorkspace.Nodes.Count); }
public void GitHub_461_DeleteNodesFromCustomNodeWorkspaceAfterCollapse() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); model.Open(openPath); var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach (var guid in nodesToCollapse) { var node = model.Nodes.First(x => x.GUID == Guid.Parse(guid)); model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.Where(x => x is NodeModel) .Select(x => (x as NodeModel)), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest2__", Success = true }); Controller.DynamoViewModel.GoToWorkspace( Controller.CustomNodeManager.GetGuidFromName("__CollapseTest2__")); var numNodes = model.CurrentWorkspace.Nodes.Count; List <ModelBase> modelsToDelete = new List <ModelBase>(); modelsToDelete.Add(model.CurrentWorkspace.FirstNodeFromWorkspace <Addition>()); model.DeleteModelInternal(modelsToDelete); Assert.AreEqual(numNodes - 1, model.CurrentWorkspace.Nodes.Count); }
private void TestNodeBuilder(List <RowEntry> peptideProteinMapList, IReadOnlyList <string> expectedOutput) { var nodeBuilder = new NodeBuilder(); var nodeCollapser = new NodeCollapser(); var dfs = new DFS(); var cover = new Cover(); var globalIDTracker = new GlobalIDContainer(); nodeBuilder.RunAlgorithm(peptideProteinMapList, out var proteins, out var peptides); nodeCollapser.RunAlgorithm(proteins, peptides, globalIDTracker); var proteinsWithChildren = proteins.Values.ToList(); var clusteredProteinSets = dfs.RunAlgorithm(proteinsWithChildren); var clusteredProteins = cover.RunAlgorithm(clusteredProteinSets); var outLines = Utilities.ConvertNodesToStringList(clusteredProteins, globalIDTracker); foreach (var item in outLines) { Console.WriteLine(item); } if (expectedOutput == null || expectedOutput.Count == 0) { return; } for (var i = 0; i < outLines.Count; i++) { if (i >= expectedOutput.Count) { Assert.Fail("Extra, unexpected output line: " + outLines[i]); } Assert.AreEqual(expectedOutput[i], outLines[i], "Mismatch on line {0}", i + 1); } if (expectedOutput.Count > outLines.Count) { Assert.Fail("Output did not include additional, expected lines, starting with " + expectedOutput[outLines.Count]); } }
public void CanCollapseNodesWithDefaultValues() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-defaults.dyn"); RunModel(openPath); //Confirm that everything is working OK. ViewModel.Model.RunExpression(); var minNode = model.CurrentWorkspace.NodeFromWorkspace("13f58ca4-4e48-4757-b16a-45b971a6d7fc"); var numNode = model.CurrentWorkspace.NodeFromWorkspace("4b6487e1-1bcf-47a6-a6fb-ea3122a303af"); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(1, model.CurrentWorkspace.Connectors.Count); AssertPreviewValue("13f58ca4-4e48-4757-b16a-45b971a6d7fc", 10); model.AddToSelection(minNode); model.AddToSelection(numNode); NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(1, model.CurrentWorkspace.Nodes.Count); ViewModel.Model.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); AssertPreviewValue(collapsedNode.GUID.ToString(), 10); }
public void CanCollapseWith1NodeHoleInSelection() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-function.dyn"); RunModel(openPath); //Confirm that everything is working OK. ViewModel.Model.RunExpression(); var mulNode = model.CurrentWorkspace.NodeFromWorkspace("7bae9908-6e44-41a4-8b9a-e6cd58791194"); AssertPreviewValue(mulNode.GUID.ToString(), 0); foreach (var node in model.CurrentWorkspace.Nodes.Where( x => x.GUID.ToString() != "34d7a656-338d-43bd-bb3d-224515a855eb")) { model.AddToSelection(node); } NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); ViewModel.Model.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); AssertPreviewValue(collapsedNode.GUID.ToString(), 0); }
public void CanCollapseWith1NodeHoleInSelection() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-function.dyn"); model.Open(openPath); //Confirm that everything is working OK. Controller.RunExpression(); var mulNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Multiplication>(); Assert.IsInstanceOf <FScheme.Value.Number>(mulNode.OldValue); Assert.AreEqual(0, (mulNode.OldValue as FScheme.Value.Number).Item); foreach (var node in model.CurrentWorkspace.Nodes.Where(x => !(x is Addition))) { model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); Controller.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); Assert.IsInstanceOf <FScheme.Value.Number>(collapsedNode.OldValue); Assert.AreEqual(0, (collapsedNode.OldValue as FScheme.Value.Number).Item); }
public void CanCollapseNodesWithDefaultValues() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-defaults.dyn"); model.Open(openPath); //Confirm that everything is working OK. Controller.RunExpression(); var minNode = model.CurrentWorkspace.FirstNodeFromWorkspace <ListMin>(); var numNode = model.CurrentWorkspace.FirstNodeFromWorkspace <DoubleInput>(); Assert.IsInstanceOf <FScheme.Value.Number>(minNode.OldValue); Assert.AreEqual(10, (minNode.OldValue as FScheme.Value.Number).Item); model.AddToSelection(minNode); model.AddToSelection(numNode); NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(1, model.CurrentWorkspace.Nodes.Count); Controller.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); Assert.IsInstanceOf <FScheme.Value.Number>(collapsedNode.OldValue); Assert.AreEqual(10, (collapsedNode.OldValue as FScheme.Value.Number).Item); }
public void CanCollapseAndUndoRedo() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); ViewModel.OpenCommand.Execute(Path.Combine(examplePath, "collapse-number-chain.dyn")); // Ensure all the nodes we are looking for are actually there. Assert.AreEqual(11, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(10, model.CurrentWorkspace.Connectors.Count); var existenceMap = new Dictionary <string, bool> { { "5a503c02-13a7-4def-9fb6-52101117219e", true }, { "6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true }, { "da2cbc80-a278-4699-96fa-a22d7762a42d", true }, { "28cff154-ef78-43fa-bcc9-f86e00ce2ced", true }, { "7ad3d045-c620-4817-8723-afd3c266555b", true }, { "e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true }, { "fed04d43-aad6-4782-a3c4-a86925e6b538", true }, { "5e0d6637-5156-4b60-b49d-3c9aedd71884", true }, { "98350887-4839-4ece-a4ad-37137cb11f52", true }, { "8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true }, { "9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true } }; this.VerifyModelExistence(existenceMap); string[] guids = { "5e0d6637-5156-4b60-b49d-3c9aedd71884", // Addition "98350887-4839-4ece-a4ad-37137cb11f52", // Addition "28cff154-ef78-43fa-bcc9-f86e00ce2ced", // Double input "7ad3d045-c620-4817-8723-afd3c266555b", // Double input }; List <NodeModel> selectionSet = new List <NodeModel>(); var workspace = model.CurrentWorkspace; foreach (string guid in guids) { var m = workspace.GetModelInternal(Guid.Parse(guid)); selectionSet.Add(m as NodeModel); } // Making sure we do not have any Function node at this point. Assert.IsNull(model.CurrentWorkspace.FirstNodeFromWorkspace <Function>()); Assert.AreEqual(false, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); NodeCollapser.Collapse(ViewModel.Model, selectionSet.AsEnumerable(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); // Making sure we have a Function node after the conversion. Assert.IsNotNull(model.CurrentWorkspace.FirstNodeFromWorkspace <Function>()); // Make sure we have 8 nodes left (11 - 4 + 1). Assert.AreEqual(8, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(8, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", false); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", false); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", false); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", false); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); // Try undoing the conversion operation. Assert.AreEqual(true, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); model.CurrentWorkspace.Undo(); Assert.AreEqual(false, model.CurrentWorkspace.CanUndo); Assert.AreEqual(true, model.CurrentWorkspace.CanRedo); // Now it should have gone back to 11 nodes. Assert.AreEqual(11, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(10, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", true); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", true); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", true); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", true); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); // Try redoing the conversion. model.CurrentWorkspace.Redo(); Assert.AreEqual(true, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); // It should have gone back to 8 nodes. Assert.AreEqual(8, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(8, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", false); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", false); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", false); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", false); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); }
/// <summary> /// Collapse a set of nodes in this workspace /// </summary> /// <param name="selectedNodes"> The function definition for the user-defined node </param> internal void CollapseNodes(IEnumerable <NodeModel> selectedNodes) { NodeCollapser.Collapse(DynamoViewModel.Model, selectedNodes, this.Model); }
/// <summary> /// Collapse a set of nodes in the current workspace. Has the side effects of prompting the user /// first in order to obtain the name and category for the new node, /// writes the function to a dyf file, adds it to the FunctionDict, adds it to search, and compiles and /// places the newly created symbol (defining a lambda) in the Controller's FScheme Environment. /// </summary> /// <param name="selectedNodes"> The function definition for the user-defined node </param> internal void CollapseNodes(IEnumerable <NodeModel> selectedNodes) { NodeCollapser.Collapse(selectedNodes, dynSettings.Controller.DynamoViewModel.CurrentSpace); }
/// <summary> /// Group proteins having similar peptides /// </summary> /// <returns></returns> private void PerformParsimonyWork() { mProcessingSucceeded = false; mClusteredProteins = new List <Node>(); mGlobalIDTracker = new GlobalIDContainer(); // Prepare objects and algorithms var nodeBuilder = new NodeBuilder(); var nodeCollapser = new NodeCollapser(); var dfs = new DFS { MaxRecursionDepth = mMaxDFSRecursionDepth }; var cover = new Cover(); RegisterEvents(dfs); RegisterEvents(cover); if (ShowProgressAtConsole) { Console.WriteLine(); OnStatusEvent("Finding parsimonious protein groups"); } nodeBuilder.RunAlgorithm(mPeptideProteinMapList, out var proteins, out var peptides); if (proteins == null || proteins.Count == 0) { throw new Exception("Error in PerformParsimony: Protein list is empty"); } if (peptides == null || peptides.Count == 0) { throw new Exception("Error in PerformParsimony: Peptide list is empty"); } nodeCollapser.RunAlgorithm(proteins, peptides, mGlobalIDTracker); if (proteins == null || proteins.Count == 0) { throw new Exception("Error in PerformParsimony after nodeCollapser.RunAlgorithm: Protein list is empty"); } if (peptides == null || peptides.Count == 0) { throw new Exception("Error in PerformParsimony after nodeCollapser.RunAlgorithm: Peptide list is empty"); } var proteinsWithChildren = proteins.Values.ToList(); var clusteredProteinSets = dfs.RunAlgorithm(proteinsWithChildren); if (clusteredProteinSets == null || clusteredProteinSets.Count == 0) { throw new Exception("Error in PerformParsimony: DFS returned an empty protein list"); } mClusteredProteins = cover.RunAlgorithm(clusteredProteinSets); if (mClusteredProteins == null || mClusteredProteins.Count == 0) { throw new Exception("Error in PerformParsimony: cover.RunAlgorithm returned an empty protein list"); } if (ShowProgressAtConsole) { OnStatusEvent("Iteration Complete, found {0} protein groups", mClusteredProteins.Count); } mProcessingSucceeded = true; }