Моя проблема
Я пытаюсь вызвать функцию ac # f()
из python. Функция f()
имеет сложную сигнатуру со многими входными и выходными аргументами. Фактическая подпись выглядит так:
Void f(MathNet.Numerics.LinearAlgebra.Matrix`1[System.Double],
MathNet.Numerics.LinearAlgebra.Matrix`1[System.Double],
MathNet.Numerics.LinearAlgebra.Matrix`1[System.Double],
Double[,], Double[,], Double, Double, Double,
Double ByRef, Double ByRef, Double ByRef, Double ByRef,
Double ByRef, Double ByRef, Double ByRef, Double ByRef,
Double ByRef, Double ByRef, Double ByRef, Double ByRef)
Я пытаюсь вызвать эту функцию, используя пакет python.net
. Мой вызов завершается с ошибкой:
No method matches given arguments for f
Что я пробовал
Я знаю, что соответствующая функция dotnet выбрана из python.net по ее подписи. Я могу прочитать ожидаемую сигнатуру функции f, обратившись к импортированному классу dotnet:
mydotnetclass.f.Overloads
Моя проблема в том, что я не знаю, какую сигнатуру создает мой текущий вызов функции, и поэтому я не могу увидеть, какаяПараметр вызывает совпадение подписи. К сожалению, с python.net невозможно явно вызвать конкретную перегрузку для переопределения совпадения подписи.
Я приложил все усилия, чтобы сопоставить подпись входных параметров. Тип обобщенной матрицы, который я создал, используя
matrixArgument = LinearAlgebra.Double.Matrix.Build.DenseOfRowArrays(list(numpy_ndMatrix))
arrayArg = clr.System.Array.CreateInstance(clr.System.Double,numpyArray.shape[0],numpyArray.shape[1])
Для аргументов типа Double я использовал обычные переменные типа Python для двойного типа, а также clr.System.Double()
типы.
Возвращаемые переменные, которые оставлены не инициализированными.
Вопрос
Можно ли отобразить подпись, созданную при вызове функции / метода для функции dotnet? Например, в этой ситуации
a=1.0
b=1
c="abc"
x,y = mydotnetclass.g(a,b,c)
Я бы хотел видеть следующую подпись
Void mydotnetclass.g(Double, int, String, Double byref, String byref)
. Очевидно, что часть подписи возвращаемых параметров не может быть получена из вызова. Само по себе, но только из реализации функции g()
.
По крайней мере, мне нужно знать, какие параметры вызывают несоответствие сигнатур!