Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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]);
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
 /// <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);
 }
Ejemplo n.º 11
0
 /// <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);
 }
Ejemplo n.º 12
0
        /// <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;
        }