using Controllers.Processes; namespace Controllers.PythonInterop { public class AIModule { string _PyPath = ""; string _ExecPath = ""; public AIModule(string pypath = "/usr/bin/python3.11") { _PyPath = pypath; _ExecPath = $"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AIPython")}"; } public void PullAI() { (bool, string) Success = PyProcess.RunPythonProcess(_PyPath, _ExecPath + "/datapuller.py"); if (!Success.Item1) { Console.WriteLine(Success.Item2); } } public void TrainAI() { (bool, string) Success = PyProcess.RunPythonProcess(_PyPath, _ExecPath + "/aitrainer.py"); if (!Success.Item1) { Console.WriteLine(Success.Item2); } } // Return ( Error, Signal ) public (string, float) PredictAI(string StockSymbol, int DataEndDaysAgo = 0) { (bool, string) Success = PyProcess.RunPythonProcess(_PyPath, _ExecPath + "/aipredictor.py", returns: true, PyArgs: $"{StockSymbol} {DataEndDaysAgo}"); if (!Success.Item1) { return (Success.Item2, 0); } else { if (float.TryParse(Success.Item2, out float parsed)) { return ("", parsed); } return ("Python returns an unknown value", 0); } } public float GetCurrentPrice(string StockSymbol) { (bool, string) Success = PyProcess.RunPythonProcess(_PyPath, _ExecPath + "/currentprice.py", returns: true, PyArgs: StockSymbol); if (!Success.Item1) { return 0; } else { if (float.TryParse(Success.Item2, out float parsed)) { return parsed; } return 0; } } } }