コード例 #1
0
        public void TestEcnounters()
        {
            var graph = new Graph();
            var v1    = graph.AddVertex(new Vertex("v1", 0));
            var v2    = graph.AddVertex(new Vertex("v2", 0));
            var v3    = graph.AddVertex(new Vertex("v3", 0));
            var v4    = graph.AddVertex(new Vertex("v4", 0));

            var v1v2 = graph.AddEdge("v1", "v2");
            var v2v4 = graph.AddEdge("v2", "v4");

            var v1v3 = graph.AddEdge("v1", "v3");
            var v3v4 = graph.AddEdge("v3", "v4");

            var cGraph = new ComputationGraph(graph, new DfsPathFinder(), v1, v4);

            Assert.AreEqual(2, cGraph.Elements[v1].EncountsCount);
            Assert.AreEqual(1, cGraph.Elements[v2].EncountsCount);
            Assert.AreEqual(1, cGraph.Elements[v3].EncountsCount);
            Assert.AreEqual(2, cGraph.Elements[v4].EncountsCount);

            Assert.AreEqual(1, cGraph.Elements[v1v2].EncountsCount);
            Assert.AreEqual(1, cGraph.Elements[v2v4].EncountsCount);
            Assert.AreEqual(1, cGraph.Elements[v1v3].EncountsCount);
            Assert.AreEqual(1, cGraph.Elements[v3v4].EncountsCount);
        }
コード例 #2
0
ファイル: SessionManager.cs プロジェクト: alex-ks/Ecclesia
        public Guid StartSession(ComputationGraph graph)
        {
            Guid sessionId = Guid.NewGuid();

            lock (_lockGuard)
            {
                _sessionGraphs.Add(sessionId, graph);

                _logger.LogInformation($"Create session with id: {sessionId}");

                var session = new SessionStatus
                {
                    OperationStatus = graph.Operations
                                      .Select(op => new OperationStatus {
                        Id = op.Id, State = OperationState.Awaits
                    })
                                      .ToList(),
                    MnemonicsTable = graph.MnemonicsTable
                };

                _sessions.Add(sessionId, session);

                LogSessionStatus(sessionId);

                List <int> availableOperations =
                    session.GetAvailableOperationsIds(_sessionGraphs[sessionId].Dependencies);
                EnqueueOperationsExecution(sessionId, availableOperations);

                return(sessionId);
            }
        }
コード例 #3
0
 public ComputationGraphNetwork([NotNull] ComputationGraph graph) : base(NetworkType.ComputationGraph)
 {
     Graph                 = graph;
     OutputLayer           = Graph.OutputNode.To <IComputationGraphNode, ProcessingNode>().Layer.To <INetworkLayer, OutputLayerBase>();
     Layers                = Graph.ProcessingNodes.Select(node => node.Layer).ToArray();
     WeightedLayersIndexes = Layers.Select((l, i) => (Layer: l as WeightedLayerBase, Index: i)).Where(t => t.Layer != null).Select(t => t.Index).ToArray();
 }
コード例 #4
0
        public void Notify(Guid idSession, int idOperation, string[] outputs)
        {
            lock (lockUpdateStatus)
            {
                OperationStatus operationSt = sessionStatus[idSession].operationStatus[idOperation];
                if (outputs != null)
                {
                    SessionUtilities.OperationCompleted(operationSt, outputs);
                    ComputationGraph session = sessionDictionary[idSession];
                    SessionUtilities.UpdateMnemonicValues(sessionStatus[idSession].mnemonicsTable,
                                                          session.Operations[idOperation].Output,
                                                          outputs);
                    GetLogSession(idSession);

                    if (!SessionUtilities.SessionCompleted(sessionStatus[idSession].operationStatus))
                    {
                        List <int> idAvailableOperation = SessionUtilities.GetIDAvailableOperation(
                            sessionStatus[idSession].operationStatus,
                            sessionDictionary[idSession].Dependecies);
                        OperationsToExecute(idSession, idAvailableOperation);
                    }
                    else
                    {
                        StopSession(idSession);
                    }
                }
                else
                {
                    SessionUtilities.OperationFaild(operationSt);
                    StopSession(idSession);
                }
            }
        }
コード例 #5
0
        public Guid StartSession(ComputationGraph session)
        {
            Guid idSession = Guid.NewGuid();

            lock (lockListSession)
            {
                sessionDictionary.Add(idSession, session);
            }
            _logger.LogInformation($"Create session with id: {idSession}");
            List <OperationStatus> opStatus = new List <OperationStatus>();

            foreach (Operation operation in session.Operations)
            {
                opStatus.Add(new OperationStatus(operation.Id, StatusEnum.Awaits));
            }
            lock (lockUpdateStatus)
            {
                sessionStatus.Add(idSession, new SessionStatus(opStatus, session.MnemonicsValues));
            }

            GetLogSession(idSession);

            lock (lockListSession)
            {
                List <int> idAvailableOperation = SessionUtilities.GetIDAvailableOperation(
                    sessionStatus[idSession].operationStatus,
                    sessionDictionary[idSession].Dependecies);
                OperationsToExecute(idSession, idAvailableOperation);
            }
            return(idSession);
        }
コード例 #6
0
        public void StopSession(Guid id)
        {
            ComputationGraph session = sessionDictionary[id];
            SessionStatus    status  = sessionStatus[id];

            if (SessionUtilities.SessionCompleted(status.operationStatus))
            {
                Console.WriteLine("Session COMPLITED");
                return;
                //сессия закончена - всё ОК
            }
            else
            if (SessionUtilities.SessionFaild(status.operationStatus))
            {
                foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits))
                {
                    operation.status = StatusEnum.Aborted;
                }
                Console.WriteLine("Session FAILD");
                //одна операция сломалась значит другие отменяем
                //в целом сессия Faild
            }
            else
            {
                foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits))
                {
                    operation.status = StatusEnum.Aborted;
                }
                Console.WriteLine("Session Aborted");
                //сессия была отменена пользователем
                //в целом сессия Aborted
            }
        }
コード例 #7
0
        public IActionResult Post([FromBody] ComputationGraph graph)
        {
            var s = _manager.StartSession(graph);

            //validation

            return(Ok(s));
        }
コード例 #8
0
        public void Creates_computation_chain()
        {
            var codeAsText    = File.ReadAllText(@"SyntaxAnalyserExamples/TestFunctions.cs");
            var syntaxTree    = SyntaxOperations.Parse(codeAsText);
            var semanticModel = SemanticOperations.GetSemanticModel(syntaxTree);


            var methodSyntax = SyntaxOperations
                               .FindMethodsOfClass(syntaxTree, nameof(TestFunctions), nameof(TestFunctions.ProcessInt32Parameter))
                               .Value
                               .Single();

            var methodAnalysis = MethodBlockAnalysis.FromSemanticModel(methodSyntax, semanticModel);

            var returnSyntax = methodAnalysis.BodyBlock.DescendantNodes().OfType <ReturnStatementSyntax>().Single();

            var identSyntax = SyntaxOperations.GetVariable(returnSyntax);


            var chainHead = ComputationGraph.FromReturnStatement(returnSyntax, methodAnalysis, methodAnalysis.MethodDeclarationSyntax.Span).Item1.A;

            var sqrtDoubledIncrementedInt           = _Assert_ReturnStatement(chainHead).A;
            var localDecl_sqrtDoubledIncrementedInt = _Assert_Identifier(sqrtDoubledIncrementedInt, "sqrtDoubledIncrementedInt").A;

            var castToInt = _Assert_LocalDeclaration(localDecl_sqrtDoubledIncrementedInt, "sqrtDoubledIncrementedInt").A;
            var sqrtDoubledIncremented           = _Assert_CastExpression(castToInt, typeof(int), methodAnalysis).A;
            var localDecl_sqrtDoubledIncremented = _Assert_Identifier(sqrtDoubledIncremented, "sqrtDoubledIncremented").A;
            var sqrt = _Assert_LocalDeclaration(localDecl_sqrtDoubledIncremented, "sqrtDoubledIncremented").A;

            var(mathClassSqrt, args_doubledIncremented) = _Assert_Invocation(sqrt, nameof(Math.Sqrt));



            var localDecl_doubledIncremented = _Assert_Identifier(args_doubledIncremented.Single().A, "doubledIncremented").A;
            var parenthesizedExprAdd         = _Assert_LocalDeclaration(localDecl_doubledIncremented, "doubledIncremented").A;

            var binary_add = _Assert_ParenthesizedExpr(parenthesizedExprAdd).A;

            var(doubled, oneLiteral) = _Assert_BinaryExpression(binary_add, operatorToken: SyntaxKind.PlusToken);

            _Assert_Literal(oneLiteral.A, 1);

            var localDecl_doubled = _Assert_Identifier(doubled.A, "doubled").A;


            var parenthesizedExprMult = _Assert_LocalDeclaration(localDecl_doubled, "doubled").A;

            var binary_mult = _Assert_ParenthesizedExpr(parenthesizedExprMult).A;

            var(twoLiteral, x) = _Assert_BinaryExpression(binary_mult, operatorToken: SyntaxKind.AsteriskToken);

            _Assert_Literal(twoLiteral.A, 2);

            var methodParam = _Assert_Identifier(x.A, "x").A;

            _Assert_MethodParam(methodParam, "x", typeof(int), methodAnalysis);
        }
コード例 #9
0
        public static INeuralNetwork NewGraph(TensorInfo input, [NotNull] Action <NodeBuilder> builder)
        {
            NodeBuilder root = NodeBuilder.Input();

            builder(root);
            ComputationGraph graph = ComputationGraph.New(input, root);

            return(new ComputationGraphNetwork(graph));
        }
コード例 #10
0
        public void Creates_computation_chain_ramifying_code()
        {
            var codeAsText    = File.ReadAllText(@"SyntaxAnalyserExamples/TestFunctions.cs");
            var syntaxTree    = SyntaxOperations.Parse(codeAsText);
            var semanticModel = SemanticOperations.GetSemanticModel(syntaxTree);


            var methodSyntax = SyntaxOperations
                               .FindMethodsOfClass(syntaxTree, nameof(TestFunctions), nameof(TestFunctions.ProcessInt32arameterWithRamification))
                               .Value
                               .Single();



            var methodAnalysis = MethodBlockAnalysis.FromSemanticModel(methodSyntax, semanticModel);

            var returnSyntax = methodAnalysis.BodyBlock.DescendantNodes().OfType <ReturnStatementSyntax>().Single();

            var chainHead = ComputationGraph.FromReturnStatement(returnSyntax, methodAnalysis, methodAnalysis.MethodDeclarationSyntax.Span).Item1.A;
        }
コード例 #11
0
        public void Creates_computation_chain_from_member_access_expr()
        {
            var codeAsText    = File.ReadAllText(@"SyntaxAnalyserExamples/TestFunctions.cs");
            var syntaxTree    = SyntaxOperations.Parse(codeAsText);
            var semanticModel = SemanticOperations.GetSemanticModel(syntaxTree);


            var methodSyntax = SyntaxOperations
                               .FindMethodsOfClass(syntaxTree, nameof(TestFunctions), nameof(TestFunctions.ProcessStringParameter))
                               .Value
                               .Single();



            var methodAnalysis = MethodBlockAnalysis.FromSemanticModel(methodSyntax, semanticModel);

            var returnSyntax = methodAnalysis.BodyBlock.DescendantNodes().OfType <ReturnStatementSyntax>().Single();

            var chainHead = ComputationGraph.FromReturnStatement(returnSyntax, methodAnalysis, methodAnalysis.MethodDeclarationSyntax.Span).Item1.A;


            var propAccess_Name = _Assert_ReturnStatement(chainHead);
            var invoc_GetType   = _Assert_MemberAccess(propAccess_Name, nameof(Type.Name)).A;

            var(memberAccess_GetType, args) = _Assert_Invocation(invoc_GetType, nameof(object.GetType));

            CollectionAssert.That.IsEmpty(args);

            var invoc_ElementAt = _Assert_MemberAccess(memberAccess_GetType, nameof(object.GetType)).A;

            var(memberAccess_ElementAt, elementAt_Args) = _Assert_Invocation(invoc_ElementAt, "ElementAt");

            _Assert_Literal(elementAt_Args.Single().A, 2);


            var ident_x = _Assert_MemberAccess(memberAccess_ElementAt, "ElementAt").A;

            var methodParam_x = _Assert_Identifier(ident_x, "x").A;

            _Assert_MethodParam(methodParam_x, "x", typeof(string), methodAnalysis);
        }