public ColData CallClassMethod(string className, string method, PythonCallerArgs args)
        {
            results = "";
            errors  = "";
            args.SetPathArg(csvPath);
            string argString = args.Serialized();

            //Caller produces the command:
            // path/to/python.exe caller.py path/to/python/module python_module_name class_name method_name args_string
            //caller.py is the aggregator script, which finds the desired script (python_module_name.py), imports its contents and calls the class method
            //args_string is JSON-formatted array of the arguments for the desired script (python_module_name.py)

            psi.Arguments = $"\"{caller}\" \"{scriptPath}\" \"{scriptName}\" \"{className}\" \"{method}\" \"{argString}\"";

            var value     = System.Environment.GetEnvironmentVariable("PATH");
            var new_value = envPath + "\\:" + envPath + "\\Scripts:" + value;

            System.Environment.SetEnvironmentVariable("PATH", new_value);

            using (var process = Process.Start(psi))
            {
                errors  = process.StandardError.ReadToEnd();
                results = process.StandardOutput.ReadToEnd();
            }

            ColData ob = JsonConvert.DeserializeObject <ColData> (results);

            return(ob);
        }
        public override void Init()
        {
            var methodArguments = new PythonCallerArgs();

            instrumentStat = new InstrumentStats(InstrumentsManager.Current);

            methodArguments.SetArg(instrumentStat);

            methodArguments.SetArg(instrumentStat);

            var pyCaller = new PythonCaller(module_name);

            resultJson = pyCaller.CallClassMethod(class_name, def_name, methodArguments);
        }