Pytorch torch.cholesky在哪里?torch如何引用其方法?

Pytorch torch.cholesky在哪里?torch如何引用其方法?,pytorch,Pytorch,我正在做一些关于Cholesky分解的研究,这需要了解torch.Cholesky的工作原理。在ATen上搜索了一段时间后,我被TensorMethods.h卡住了,有趣的是,它有以下代码: inline Tensor Tensor::cholesky(bool upper) const { #ifdef USE_STATIC_DISPATCH return TypeDefault::cholesky(const_cast<Tensor&>(*this), upper

我正在做一些关于Cholesky分解的研究,这需要了解
torch.Cholesky
的工作原理。在ATen上搜索了一段时间后,我被TensorMethods.h卡住了,有趣的是,它有以下代码:

inline Tensor Tensor::cholesky(bool upper) const {
#ifdef USE_STATIC_DISPATCH
    return TypeDefault::cholesky(const_cast<Tensor&>(*this), upper);
#else
    static c10::OperatorHandle op = c10::Dispatcher::singleton().findSchema({"aten::cholesky", ""}).value();
    return c10::Dispatcher::singleton().callUnboxed<Tensor, const Tensor &, bool>(
        op, impl::dispatchTypeId(at::detail::multi_dispatch_tensor_type_set(*this)), const_cast<Tensor&>(*this), upper);
#endif
}
内联张量张量::cholesky(布尔上)常数{
#ifdef使用静态调度
返回TypeDefault::cholesky(const_cast(*this),上限);
#否则
静态c10::OperatorHandle op=c10::Dispatcher::singleton();
返回c10::Dispatcher::singleton().CallunBox(
op,impl::dispatchTypeId(at::detail::multi_dispatch_tensor_type_set(*this)),const_cast(*this),upper);
#恩迪夫
}
这就提出了torch如何定位其方法的问题。谢谢大家!

看一看哪一个函数描述了函数是如何注册到API的

ATen“本机”函数是添加运算符的现代机制 和ATen的功能(它们是“本地”的,而不是遗留的 通过TH/THC cwrap元数据绑定的函数)。土生土长的 函数在native_functions.yaml中声明并具有 在此目录中的一个cpp文件中定义的实现

如果我们查看并搜索
cholesky
我们会发现

- func: cholesky(Tensor self, bool upper=False) -> Tensor
  use_c10_dispatcher: full
  variants: method, function
要找到入口点,基本上只需搜索目录中的.cpp文件并找到名为
cholesky
的函数。目前可在以下网址找到:


从这一点来看,这只是遵循C++代码来理解正在发生的事情。

原谅我在这方面的知识不足,但我意识到我假设Python版本的Trac库拥有所有C++代码可用。它们存储在共享对象中,
。因此
文件,这就是为什么我找不到函数
cholesky
。非常感谢您的回复!!
Tensor cholesky(const Tensor &self, bool upper) {
  if (self.size(-1) == 0) {
    return at::empty_like(self, LEGACY_CONTIGUOUS_MEMORY_FORMAT);
  }
  squareCheckInputs(self);

  auto raw_cholesky_output = at::_cholesky_helper(self, upper);
  if (upper) {
    return raw_cholesky_output.triu_();
  } else {
    return raw_cholesky_output.tril_();
  }
}