Пример #1
0
        private async Task <string> TutorResult(string Method, string RawMatrix)
        {
            MathMLBuilder MathBuilder = default;
            var           engine      = new MapleLinearAlgebra(DefaultPath);

            if (RawMatrix.EndsWith(";"))
            {
                RawMatrix = RawMatrix.Remove(RawMatrix.Length - 1, 1).Replace("\r\n", string.Empty);
            }

            engine.Open();
            var minified = await engine.LPrint(RawMatrix);

            minified = minified.Replace("\r\n", "");

            MapleMatrix matrix = default;

            try
            {
                matrix = new MapleMatrix(minified);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Matrix kunne ikke fortolkes. Vær sikker på du har kopieret fra maple");
                engine.Close();
                return(default);
Пример #2
0
        public void LPrintConstructor()
        {
            var         SampleInput = "Matrix(3,3,{(1, 1) = 1, (2, 2) = 1, (3, 3) = 1},datatype = anything,storage = rectangular,order = Fortran_order,shape = [])";
            MapleMatrix Matrix      = new MapleMatrix(SampleInput);

            Assert.AreEqual(3, Matrix.Rows);
            Assert.AreEqual(3, Matrix.Columns);
            Assert.AreEqual("1", Matrix.Values[0][0]);
            Assert.AreEqual("1", Matrix.Values[1][1]);
            Assert.AreEqual("1", Matrix.Values[2][2]);
            Assert.AreEqual("0", Matrix.Values[2][1]);
        }
Пример #3
0
        public void AddMatrix(MapleMatrix Matrix)
        {
            builder.Append("<mfenced close=']' open='['>");
            builder.Append("<mtable>");


            for (int ri = 0; ri < Matrix.Rows; ri++)
            {
                builder.Append("<mtr>");
                for (int ci = 0; ci < Matrix.Columns; ci++)
                {
                    builder.Append("<mtd>");
                    builder.Append($"<mn>{Matrix.Values[ri][ci]}</mn>");
                    builder.Append("</mtd>");
                }
                builder.Append("</mtr>");
            }

            builder.Append("</mtable>");
            builder.Append("</mfenced>");
        }
Пример #4
0
        private async static Task <JavaMapletGaussOutput> MatrixTutorResult(MapleLinearAlgebra engine, MapleMatrix matrix, string methodName)
        {
            await semaphore.WaitAsync();//Since same protocol is used for every Tutor we have to wait for other tutor's to be closed before we can recall.

            try
            {
                var engineType = typeof(MapleLinearAlgebra);
                var method     = engineType.GetMethod(methodName);                                     //reflection used since each Tutor uses same protocol, for linearalgebra, (but different call methods to maple)

                IWindow window = await(Task <IWindow>) method.Invoke(engine, new object[] { matrix }); // await engine.GaussJordanEliminationTutor(matrix);

                if (window is MSWindow)                                                                // Microsoft Windows
                {
                    // Find Loopback Pseudo interface for sniffing.
                    var nic = NetworkInterfaceInfo
                              .GetInterfaces()
                              .FirstOrDefault(c => c.Name.Contains("Loopback Pseudo"));

                    // Ensure loopback pseudo interface is found before we start trying to sniff.
                    if (nic != default(NetworkInterfaceInfo))
                    {
                        PcapNgFileOutput output;
                        SocketSniffer    sniffer;

                        StartSniffing(nic, out output, out sniffer);
                        await InteractWithDefaultTutor((MSWindow)window, sniffer);

                        StopSniffing(output, sniffer);
                        return(InterpretMatrixSniffedData());
                    }
                }
            } finally
            {
                semaphore.Release();
            }

            return(null);
        }
Пример #5
0
 public async static Task <JavaMapletGaussOutput> InverseTutor(MapleLinearAlgebra engine, MapleMatrix matrix)
 {
     return(await MatrixTutorResult(engine, matrix, nameof(engine.InverseTutor)));
 }
Пример #6
0
 public async static Task <JavaMapletGaussOutput> GaussJordanEliminationTutor(MapleLinearAlgebra engine, MapleMatrix matrix)
 {
     return(await MatrixTutorResult(engine, matrix, nameof(engine.GaussJordanEliminationTutor)));
 }
Пример #7
0
        private async static Task <JavaMapletGaussOutput> TutorResult(MapleLinearAlgebra engine, MapleMatrix matrix, string methodName)
        {
            List <string> operations  = new List <string>();
            var           gaussOutput = new JavaMapletGaussOutput();

            await semaphoreSlim.WaitAsync();//Since same protocol is used for every Tutor we have to wait for other tutor's to be closed before we can recall.

            try
            {
                var engineType = typeof(MapleLinearAlgebra);
                var method     = engineType.GetMethod(methodName);                                     //reflection used since each Tutor uses same protocol, for linearalgebra, (but different call methods to maple)

                IWindow window = await(Task <IWindow>) method.Invoke(engine, new object[] { matrix }); // await engine.GaussJordanEliminationTutor(matrix);
                if (window is MSWindow)                                                                // Microsoft Windows
                {
                    // Find interfaces for sniffing.
                    var nics = NetworkInterfaceInfo.GetInterfaces();
                    var nic  = nics.FirstOrDefault(c => c.Name.Contains("Loopback Pseudo"));

                    // Ensure loopback pseudo interface is found...
                    if (nic != default(NetworkInterfaceInfo))
                    {
                        #region Start Sniffing
                        var appOptions = new AppOptions();
                        appOptions.Parse(new string[] { "" });
                        var filters = appOptions.BuildFilters();
                        var output  = new PcapNgFileOutput(nic, appOptions.Filename);
                        var sniffer = new SocketSniffer(nic, filters, output);
                        sniffer.Start();
                        #endregion

                        #region MSWIN
                        var mswin = (MSWindow)window;
                        mswin.WindowPos(0, 0, 400, 800);

                        for (int i = 0; i < 4; i++)
                        {
                            mswin.SendKeyStroke(System.Windows.Forms.Keys.Tab);
                            await Task.Delay(60);
                        }

                        mswin.SendKeyStroke(System.Windows.Forms.Keys.Enter);
                        mswin.Hide();
                        long LastPackageCount = 0;
                        int  WaitTries        = 0;
                        while (true) // wait for program to stop sending packages to intercept.
                        {
                            await Task.Delay(400);

                            LastPackageCount = sniffer.PacketsCaptured;
                            if (LastPackageCount > 0 && LastPackageCount == sniffer.PacketsCaptured)
                            {
                                WaitTries++;
                            }
                            if (WaitTries > 4)
                            {
                                break;
                            }
                        }
                        mswin.Close();
                        #endregion

                        #region Interpret Sniffed Data
                        sniffer.Stop();
                        output.Dispose();

                        using (var reader = new StreamReader("snifter.pcapng"))
                        {
                            var content = reader.ReadToEnd();
                            var regex   = new Regex(@"\<application_communications.*?\<content\>Applied operation\:\ (.*?)\<\/content\>", RegexOptions.Singleline);
                            var match   = regex.Match(content);

                            while (match.Success)
                            {
                                var operation = match.Groups[1].Value.Trim();//initial space
                                operations.Add(operation);
                                match = match.NextMatch();
                            }

                            var mapleMatrixRegex = new Regex(@"\<content\>(\&lt\;.*?)\<", RegexOptions.Singleline);
                            var mapleMatrixMatch = mapleMatrixRegex.Match(content);

                            var lastMatchStr = "";
                            while (mapleMatrixMatch.Success)
                            {
                                lastMatchStr     = mapleMatrixMatch.Groups[1].Value;
                                mapleMatrixMatch = mapleMatrixMatch.NextMatch();
                            }

                            StringBuilder builder = new StringBuilder(lastMatchStr);
                            gaussOutput.Operations = operations.ToArray();

                            int ra_index = 0;
                            int index    = 0;
                            var search   = "mtext&gt;&amp;NewLine;";
                            while ((ra_index = builder.ToString().IndexOf(search, ra_index)) != -1)
                            {
                                ra_index += search.Length;
                                if (index >= operations.Count)
                                {
                                    break;
                                }
                                builder.Insert(ra_index, $" {gaussOutput.OperationsDa[index++]} &amp;NewLine;&amp;NewLine;&amp;NewLine;");
                            }


                            gaussOutput.MathML = HttpUtility.HtmlDecode(builder.ToString());
                        }
                        #endregion
                    }
                }
            } finally
            {
                semaphoreSlim.Release();
            }

            return(gaussOutput);
        }
Пример #8
0
        public MainWindow()
        {
            InitializeComponent();
            UpdateMaplePath();



            //mathBrowser.Navigate(new Uri(@"file:///C:/Users/Rsoeb/source/repos/BasisMat2/BasisMat2/bin/Debug/MathML/Index.html"));

            #region Test (Kan blive slettet NP)
            MathMLBuilder MathBuilder = default;

            btnTest.Click += (s, e) => {
                var engine = new MapleLinearAlgebra(Settings.Default.Path);


                /*
                 * var matrix = new MapleMatrix(new string[][]
                 *  {
                 *      new string[] {   "a",      "2",     "3"    },
                 *      new string[] {   "1",     "-4",   "-19"    },
                 *      new string[] {  "-1",      "3",    "14"    }
                 *  });
                 */

                btnCopy.IsEnabled = false;
                btnTest.IsEnabled = false;
                btnTest.Content   = "Udregner...";

                var gaussMatrixRaw = txtGaussMatrix.Text.Trim();
                if (gaussMatrixRaw.EndsWith(";"))
                {
                    gaussMatrixRaw = gaussMatrixRaw.Remove(gaussMatrixRaw.Length - 1, 1);
                }

                Task.Run(async() => {
                    engine.Open();

                    var minified = await engine.LPrint(gaussMatrixRaw);
                    minified     = minified.Replace("\r\n", "");

                    MapleMatrix matrix = default;

                    try
                    {
                        matrix = new MapleMatrix(minified);
                    } catch (ArgumentException) {
                        MessageBox.Show("Matrix kunne ikke fortolkes. Vær sikker på du har kopieret fra maple");
                        rtOutput.Dispatcher.Invoke(() => {
                            btnTest.Content   = "Udregn Matrix";
                            btnTest.IsEnabled = true;
                        });
                        engine.Close();
                        return;
                    }

                    var TutorResult = await JavaWin.JavaMapletInteractor.GaussJordanEliminationTutor(engine, matrix);
                    engine.Close();

                    MathBuilder = new MathMLBuilder(TutorResult.MathML);
                    MathBuilder.AddText("\nOpskriver Ligninger:\n");

                    var MapleML = new MapleMathML(Settings.Default.Path);
                    MapleML.Open();

                    var ML_Test = await MapleML.Export("Matrix(3, 3, [[-2, 5, -7], [3, -4, 7], [3, -5, 8]])^2 = (Matrix(3, 3, [[-2, 5, -7], [3, -4, 7], [3, -5, 8]])) . (Matrix(3, 3, [[-2, 5, -7], [3, -4, 7], [3, -5, 8]]))");
                    MathBuilder.MergeML(ML_Test);

                    var ML_Console = await MapleML.Import(MathBuilder.ToString());

                    rtOutput.Dispatcher.Invoke(() => {
                        rtOutput.Document.Blocks.Clear();
                        //rtOutput.AppendText(string.Join("\n", TutorResult.OperationsDa));
                        rtOutput.AppendText(ML_Console);

                        btnTest.Content   = "Udregn Matrix";
                        btnTest.IsEnabled = true;
                    });

                    MapleML.Close();
                });
            };
            #endregion

            btnCopy.Click += (s, e) => {
                Clipboard.SetText(MathBuilder.ToString());
                btnCopy.IsEnabled = false;
                btnCopy.Content   = "Kopieret";

                Task.Run(async() => {
                    await Task.Delay(3000);
                    btnCopy.Dispatcher.Invoke(() => {
                        btnCopy.IsEnabled = true;
                        btnCopy.Content   = "Kopier (Maple)";
                    });
                });
            };
        }