/// <summary> /// Call this PyObject as a python function /// </summary> /// <param name="keywords"></param> /// <param name="parms"></param> /// <returns></returns> public PyObject CallThisWithKeywords(Dictionary <string, object> keywords, params object[] parms) { if (!IsValid) { return(PySharp.PyZero); } if (_pySharp == null) { throw new NotImplementedException(); } var pyKeywords = PySharp.PyZero; if (keywords != null && keywords.Keys.Any()) { pyKeywords = new PyObject(_pySharp, Py.PyDict_New(), true); foreach (var item in keywords) { var pyValue = _pySharp.From(item.Value); if (pyValue == null || pyValue.IsNull) { throw new NotImplementedException(); } Py.PyDict_SetItem(pyKeywords, _pySharp.From(item.Key), pyValue); } } var pyParms = new List <PyObject>(); foreach (var parm in parms) { var pyParm = _pySharp.From(parm); if (pyParm == null || pyParm.IsNull) { throw new NotImplementedException(); } // Fail if any parameter is invalid (PyNone is a valid parameter) if (pyParm.IsNull) { return(PySharp.PyZero); } pyParms.Add(pyParm); } var format = "(" + string.Join("", pyParms.Select(dummy => "O").ToArray()) + ")"; PyObject pyArgs = null; if (pyParms.Count == 0) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format), true); } if (pyParms.Count == 1) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0]), true); } if (pyParms.Count == 2) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1]), true); } if (pyParms.Count == 3) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1], pyParms[2]), true); } if (pyParms.Count == 4) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1], pyParms[2], pyParms[3]), true); } if (pyParms.Count == 5) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1], pyParms[2], pyParms[3], pyParms[4]), true); } if (pyParms.Count == 6) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1], pyParms[2], pyParms[3], pyParms[4], pyParms[5]), true); } if (pyParms.Count == 7) { pyArgs = new PyObject(_pySharp, Py.Py_BuildValue(format, pyParms[0], pyParms[1], pyParms[2], pyParms[3], pyParms[4], pyParms[5], pyParms[6]), true); } if (pyArgs == null) { throw new NotImplementedException(); } return(new PyObject(_pySharp, Py.PyEval_CallObjectWithKeywords(this, pyArgs, pyKeywords), true)); }