mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
* Don't override Tensor, Storage macros defined outside torch/csrc in torch/csrc. This PR does the following: 1) Removes THSTensor macros in torch/csrc, which aren't used. 2) For macros defined outside of torch/csrc (THTensor, THTensor_, THStorage, THStorage_): a) No longer override them, i.e. previously THTensor could actually be THCTensor if a generic file was included from a file including THCP.h. b) Instead, introduce new macros THW* (e.g. THWTensor) to represent a (potentially empty) wildcard character. In addition to making this code easier to read and codemod, this allows us to more freely change TH/THC; for example: currently in the THC random code, the state is casted to THByteTensor*; this happens to work because the macros don't happen to override THByteTensor. But if THByteTensor just becomes an alias of THTensor (which is the plan for a single tensor type), then this no longer works. The whole thing is a bit of a mess previously because you really have to understand which macros and redefined and which aren't. We could also rename the macros that live in torch/csrc (e.g. the THPTensor macros), but since that is more self contained, I punted for now. * Don't change the plugin.
29 lines
494 B
C++
29 lines
494 B
C++
#ifndef TH_GENERIC_FILE
|
|
#define TH_GENERIC_FILE "generic/utils.cpp"
|
|
#else
|
|
|
|
#if defined(THD_GENERIC_FILE) || defined(TH_REAL_IS_HALF)
|
|
#define GENERATE_SPARSE 0
|
|
#else
|
|
#define GENERATE_SPARSE 1
|
|
#endif
|
|
|
|
template<>
|
|
void THPPointer<THWTensor>::free() {
|
|
if (ptr)
|
|
THWTensor_(free)(LIBRARY_STATE ptr);
|
|
}
|
|
|
|
template<>
|
|
void THPPointer<THPStorage>::free() {
|
|
if (ptr)
|
|
Py_DECREF(ptr);
|
|
}
|
|
|
|
template class THPPointer<THWTensor>;
|
|
template class THPPointer<THPStorage>;
|
|
|
|
#undef GENERATE_SPARSE
|
|
|
|
#endif
|