Numpy将dispatcher用于参数置换

Numpy将dispatcher用于参数置换,numpy,Numpy,这个问题是针对的,它提出了一种调度机制,用于将任意函数与实现\uuu数组\u函数\uuu接口的类(例如np.ndarray)一起使用 为my_einsum运行测试 a = ArrayLike() print(my_einsum('...', a)) a = ArrayLike() print(my_einsum('...', a)) 输出: RuntimeError: This should currently never happen func = <function my_ein

这个问题是针对的,它提出了一种调度机制,用于将任意函数与实现
\uuu数组\u函数\uuu
接口的类(例如
np.ndarray
)一起使用

my_einsum
运行测试

a = ArrayLike()
print(my_einsum('...', a))
a = ArrayLike()
print(my_einsum('...', a))
输出:

RuntimeError: This should currently never happen
func = <function my_einsum at 0x7efded61bd30>,
types = (<class '__main__.ArrayLike'>,),
args = ('...', <__main__.ArrayLike object at 0x7efdef83efa0>),
kwargs = {}
对于
ArrayLike
,函数永远不会被
\uuuu数组\u函数
方法拦截。不过,这可以通过稍微更改调度器来解决:

def _einsum_dispatcher(subscripts, *operands):
    return (*operands,)
现在,当再次以完全相同的方式测试my_einsum时:

输出:

RuntimeError: This should currently never happen
func = <function my_einsum at 0x7efded61bd30>,
types = (<class '__main__.ArrayLike'>,),
args = ('...', <__main__.ArrayLike object at 0x7efdef83efa0>),
kwargs = {}
func=,
类型=(,),
args=(“…”,),
kwargs={}

函数是正确的,但是如何将
subscripts
参数移动到
kwargs
?只能用于分派参数类型吗?

当文档说:
einsum(下标,*操作数,
)时,实际代码是
def einsum(*操作数,
。也就是说,
下标
只是
操作数的第一个
——如果它是字符串的话。有一种替代的语法,可以将操作数和子列表相互感知。在
\u einsum\u path\u dispatcher
\u einsum\u dispatcher
中有一条关于这方面的注释。我的问题并不是特定于EINum dispatcher。但看起来dispatcher根本不可能重新排列参数:“dispatcher函数需要与其对应的NumPy函数共享完全相同的位置、可选和仅关键字参数。”。我只是对dispatcher的使用感到困惑,它只是用于类型推断吗?