public async Task <bool> RunSubAlgorithm3Async(string inputFile1Path, string inputFile2Path) { bool bHasCalcs = false; string sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/8b1074b465ea4258a11ec48ce64ae257/jobs"; string sPlatForm = CalculatorHelpers.GetPlatform(_params.ExtensionDocToCalcURI, inputFile1Path); if (sPlatForm != CalculatorHelpers.PLATFORM_TYPES.azure.ToString()) { sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/8b1074b465ea4258a11ec48ce64ae257/execute?api-version=2.0&details=true"; } string sApiKey = "RO2Ev5dRSKqNJ4jz+zoT0qDntEsKbyizbgZKlhOR2vGztsjBD3S3C8nmIlZI9TbbmCcsw+unwhky1GgZ5qiHmg=="; string sError = string.Empty; //web server expects to store in temp/randomid/name.csv //scoring results string sOutputData1URL = CalculatorHelpers.GetTempContainerPath("outputdata1.csv"); //model results string sOutputData2URL = CalculatorHelpers.GetTempContainerPath("outputdata2.csv"); //web service expects urls that start with container names string sInput1ContainerPath = CalculatorHelpers.GetContainerPathFromFullURIPath("resources", inputFile1Path); string sInput2ContainerPath = CalculatorHelpers.GetContainerPathFromFullURIPath("resources", inputFile2Path); //async wait so that results can be stored in output file location and parsed into string lines SetResponse2(sBaseURL, sApiKey, sInput1ContainerPath, sInput2ContainerPath, sOutputData1URL, sOutputData2URL).Wait(); StringBuilder sb = new StringBuilder(); //if web service successully saved the results, the response will start with Success if (_response.StartsWith("Success")) { //return the output file contents in a string list of lines //must convert container path to full path string sOutput1FullDataURL = string.Concat("https://devtreks1.blob.core.windows.net/", sOutputData1URL); List <string> lines = new List <string>(); //azure emulator can't process real Azure URL so this won't work //instead, double check that output url is actually saved lines = CalculatorHelpers.ReadLines(_params.ExtensionDocToCalcURI, sOutput1FullDataURL, out sError); this.ErrorMessage += sError; //this results in endless wait //lines = await CalculatorHelpers.ReadLinesAsync(sOutputDataURL); if (lines == null) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } if (lines.Count == 0) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } sb = new StringBuilder(); sb.AppendLine("aml results"); //dep var has to be in the R project 1st column //string sLine = string.Concat("first variable: ", _colNames[0]); string[] line = new List <string>().ToArray(); int iPos = 0; for (int i = 0; i < lines.Count(); i++) { line = lines[i].Split(Constants.CSV_DELIMITERS); //lineout[1] = CalculatorHelpers.ConvertStringToDouble(line[0]).ToString("N4", CultureInfo.InvariantCulture); sb.AppendLine(Shared.GetLine(line, false)); } if (this.MathResult.ToLower().StartsWith("http")) { sError = string.Empty; bool bHasSaved = CalculatorHelpers.SaveTextInURI( _params.ExtensionDocToCalcURI, sb.ToString(), this.MathResult, out sError); if (!string.IsNullOrEmpty(sError)) { this.MathResult += sError; } } else { this.MathResult = sb.ToString(); } bHasCalcs = true; //last line of string should have the QTM vars if (line != null) { //last string is prediction iPos = line.Count() - 1; //int iPos = line.Count() - 3; if (line[iPos] != null) { this.QTPredicted = CalculatorHelpers.ConvertStringToDouble(line[iPos]); } } string sOutput2FullDataURL = string.Concat("https://devtreks1.blob.core.windows.net/", sOutputData2URL); lines = new List <string>(); //azure emulator can't process real Azure URL so this won't work //instead, double check that output url is actually saved lines = CalculatorHelpers.ReadLines(_params.ExtensionDocToCalcURI, sOutput2FullDataURL, out sError); this.ErrorMessage += sError; if (lines == null) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } if (lines.Count == 0) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } sb = new StringBuilder(); //dep var has to be in the R project 1st column //string sLine = string.Concat("first variable: ", _colNames[0]); line = new List <string>().ToArray(); double dbCI = 0; for (int i = 0; i < lines.Count(); i++) { line = lines[i].Split(Constants.CSV_DELIMITERS); if (line != null) { iPos = 0; //used to derive conf interval dbCI = CalculatorHelpers.ConvertStringToDouble(line[iPos]); sb.AppendLine(string.Format("{0} {1}", "Mean Absolute Error: ", dbCI.ToString())); double dbScore = 0; if (line.Count() >= 2) { iPos = 1; dbScore = CalculatorHelpers.ConvertStringToDouble(line[iPos]); sb.AppendLine(string.Format("{0} {1}", "Root Mean Squared Error: ", dbScore.ToString())); } if (line.Count() >= 3) { iPos = 2; dbScore = CalculatorHelpers.ConvertStringToDouble(line[iPos]); sb.AppendLine(string.Format("{0} {1}", "Relative Absolute Error: ", dbScore.ToString())); } if (line.Count() >= 4) { iPos = 3; dbScore = CalculatorHelpers.ConvertStringToDouble(line[iPos]); sb.AppendLine(string.Format("{0} {1}", "Relative Squared Error: ", dbScore.ToString())); } if (line.Count() >= 5) { iPos = 4; dbScore = CalculatorHelpers.ConvertStringToDouble(line[iPos]); sb.AppendLine(string.Format("{0} {1}", "Coefficient of Determination: ", dbScore.ToString())); } //sb.AppendLine(Shared.GetLine(line, false)); } } this.MathResult += sb.ToString(); bHasCalcs = true; //last line of string should have the QTM vars if (line != null) { if (line[iPos] != null) { dbCI = CalculatorHelpers.ConvertStringToDouble(line[iPos]); } this.QTL = this.QTPredicted - dbCI; this.QTU = this.QTPredicted + dbCI; } } else { this.ErrorMessage += "The calculations could not be run using the web service."; } return(bHasCalcs); }
public async Task <bool> RunSubAlgorithm1or2Async(string inputFilePath, string rFile) { bool bHasCalcs = false; string sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/b10e6b4c4e63438999cc45147bbe006c/jobs"; if (_subalgorithm == Calculator1.MATH_SUBTYPES.subalgorithm2.ToString()) { sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/abd32060dc014d0e8fe1256e0f694daa/jobs"; } string sPlatForm = _params.ExtensionDocToCalcURI.URIDataManager.PlatformType.ToString(); if (sPlatForm != CalculatorHelpers.PLATFORM_TYPES.azure.ToString()) { sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/b10e6b4c4e63438999cc45147bbe006c/execute?api-version=2.0&details=true"; if (_subalgorithm == Calculator1.MATH_SUBTYPES.subalgorithm2.ToString()) { sBaseURL = "https://ussouthcentral.services.azureml.net/workspaces/d454361ecdcb4ec4b03fa1aec5a7c0e2/services/abd32060dc014d0e8fe1256e0f694daa/execute?api-version=2.0&details=true"; } } //r web service is default string sApiKey = "fxBeL9LJ3ORm0kW0DtKhT99OfUK6YgBlc59crizYhlxKoEjRd3kuDHvPRuehCQ02VJhPPXcdYTp2pDUynb9gMA=="; if (_subalgorithm == Calculator1.MATH_SUBTYPES.subalgorithm2.ToString()) { //python sApiKey = "/bjDNKx4OWdMIQu6CkvWCIhcfUOCTp9jUE9kD7uylwhOYyhVFOqAFA7M75mJjHS6p6jnAhCvFn1jSl678gzPVA=="; } string sError = string.Empty; //convert the script file to the script string expected by the algorithm List <string> rlines = new List <string>(); rlines = CalculatorHelpers.ReadLines(_params.ExtensionDocToCalcURI, rFile, out sError); this.ErrorMessage += sError; if (rlines == null) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } if (rlines.Count == 0) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } StringBuilder sbR = new StringBuilder(); for (int i = 0; i < rlines.Count(); i++) { sbR.AppendLine(rlines[i]); } string rScript = sbR.ToString(); //web server expects to store in temp/randomid/name.csv //web service stores in temp blob string sOutputDataURL = CalculatorHelpers.GetTempContainerPath("Routput.csv"); //web service expects urls that start with container names //regular rproject file must be stored in JDataURL string sInputContainerPath = CalculatorHelpers.GetContainerPathFromFullURIPath("resources", inputFilePath); //async wait so that results can be stored in output file location and parsed into string lines SetResponse(sBaseURL, sApiKey, sInputContainerPath, sOutputDataURL, rScript).Wait(); StringBuilder sb = new StringBuilder(); //if web service successully saved the results, the response will start with Success if (_response.StartsWith("Success")) { //return the output file contents in a string list of lines //must convert container path to full path string sOutputFullDataURL = string.Concat("https://devtreks1.blob.core.windows.net/", sOutputDataURL); List <string> lines = new List <string>(); //azure emulator can't process real Azure URL so this won't work //instead, double check that output url is actually saved lines = CalculatorHelpers.ReadLines(_params.ExtensionDocToCalcURI, sOutputFullDataURL, out sError); this.ErrorMessage += sError; //this results in endless wait-try ReadLinesAsync(sOutputDataURL).ConfigureAwait(false) //lines = await CalculatorHelpers.ReadLinesAsync(sOutputDataURL); if (lines == null) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } if (lines.Count == 0) { this.ErrorMessage += string.Concat(" ", Errors.MakeStandardErrorMsg("DATAURL_BAD")); return(bHasCalcs); } sb = new StringBuilder(); if (_subalgorithm == Calculator1.MATH_SUBTYPES.subalgorithm2.ToString()) { sb.AppendLine("py results"); } else { sb.AppendLine("r results"); } //dep var has to be in the R project 1st column string sLine = string.Concat("first variable: ", _colNames[0]); string[] line = new List <string>().ToArray(); for (int i = 0; i < lines.Count(); i++) { line = lines[i].Split(Constants.CSV_DELIMITERS); //lineout[1] = CalculatorHelpers.ConvertStringToDouble(line[0]).ToString("N4", CultureInfo.InvariantCulture); sb.AppendLine(Shared.GetLine(line, false)); } if (this.MathResult.ToLower().StartsWith("http")) { sError = string.Empty; bool bHasSaved = CalculatorHelpers.SaveTextInURI( _params.ExtensionDocToCalcURI, sb.ToString(), this.MathResult, out sError); if (!string.IsNullOrEmpty(sError)) { this.MathResult += sError; } } else { this.MathResult = sb.ToString(); } bHasCalcs = true; //last line of string should have the QTM vars if (line != null) { int iPos = 0; if (line[iPos] != null) { this.QTPredicted = CalculatorHelpers.ConvertStringToDouble(line[iPos]); } iPos = 1; if (line[iPos] != null) { this.QTL = CalculatorHelpers.ConvertStringToDouble(line[iPos]); } iPos = 2; if (line[iPos] != null) { this.QTU = CalculatorHelpers.ConvertStringToDouble(line[iPos]); } } } else { this.ErrorMessage += string.Concat(_response, "The calculations could not be run using the web service."); } return(bHasCalcs); }