/usr/local/lib64/python3.6/site-packages/torch/include/ATen/native
NameSizeModeActions
cpu/-0755rm
cuda/-0755rm
quantized/-0755rm
Activation.h30690644editdlrm
AdaptivePooling.h11650644editdlrm
BatchLinearAlgebra.h82460644editdlrm
batch_norm.h12850644editdlrm
BinaryOps.h49160644editdlrm
BucketizationUtils.h42480644editdlrm
ComplexHelper.h37970644editdlrm
CompositeRandomAccessor.h8880644editdlrm
CompositeRandomAccessorCommon.h67130644editdlrm
ConvUtils.h53500644editdlrm
Copy.h3560644editdlrm
CPUBlas.h41990644editdlrm
CPUFallback.h24040644editdlrm
Cross.h2620644editdlrm
DilatedConvolutionUtils.h64160644editdlrm
DispatchStub.h76720644editdlrm
Distance.h7320644editdlrm
Distributions.h216540644editdlrm
DistributionTemplates.h186230644editdlrm
EmbeddingBag.h13200644editdlrm
Fill.h3840644editdlrm
ForeachUtils.h59620644editdlrm
FunctionOfAMatrixUtils.h4360644editdlrm
GridSampler.h105250644editdlrm
group_norm.h8960644editdlrm
Histogram.h4920644editdlrm
im2col.h28380644editdlrm
im2col_shape_check.h61810644editdlrm
IndexingUtils.h53730644editdlrm
layer_norm.h28920644editdlrm
Lerp.h5530644editdlrm
LinearAlgebra.h6030644editdlrm
LinearAlgebraUtils.h252360644editdlrm
LossMulti.h21970644editdlrm
Math.h913560644editdlrm
MathBitFallThroughLists.h40860644editdlrm
MathBitsFallback.h73260644editdlrm
MaxPooling.h12340644editdlrm
Normalization.h3020644editdlrm
PointwiseOps.h7490644editdlrm
Pool.h109220644editdlrm
Pow.h16940644editdlrm
ReduceAllOps.h3780644editdlrm
ReduceOps.h17450644editdlrm
ReduceOpsUtils.h122450644editdlrm
Repeat.h12860644editdlrm
Resize.h65010644editdlrm
ResizeCommon.h13210644editdlrm
RNN.h24670644editdlrm
ScatterGatherChecks.h36410644editdlrm
SegmentReduce.h6850644editdlrm
SharedReduceOps.h157850644editdlrm
SobolEngineOpsUtils.h17230644editdlrm
Sorting.h5360644editdlrm
SortingUtils.h57220644editdlrm
SpectralOpsUtils.h31460644editdlrm
StridedRandomAccessor.h68470644editdlrm
TensorAdvancedIndexing.h30720644editdlrm
TensorCompare.h13330644editdlrm
TensorDimApply.h18320644editdlrm
TensorFactories.h33820644editdlrm
TensorIterator.h460644editdlrm
TensorIteratorDynamicCasting.h20250644editdlrm
TensorShape.h10490644editdlrm
TensorTransformations.h9380644editdlrm
TriangularOpsUtils.h20000644editdlrm
TypeProperties.h4960644editdlrm
UnaryOps.h44640644editdlrm
Unfold2d.h5510644editdlrm
Unfold3d.h8520644editdlrm
UnfoldBackward.h53980644editdlrm
UpSample.h135990644editdlrm
vol2col.h36420644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/ATen/native/Resize.h (6501B)
#pragma once #include #include #include #include namespace at { namespace native { // TODO: make all operations that resize given outputs use this function // for consistency and maintainability. // Some operations like `cat` might not be able to make the use of // resize_output directly. For more details to understand how it works in `cat`, // see https://github.com/pytorch/pytorch/pull/62560#discussion_r687363362 // Resizes outputs // Functions accepting output tensors, like with the "out" kwarg, should // call this function to handle resizing their output tensor. // Issues a warning if the output tensor has one or more elements and // needs resizing // NOTE: In the future the warning will become an error // Returns a bool saying whether or not the resize actually happened or not TORCH_API bool resize_output(const Tensor& output, IntArrayRef shape); // Utility for resize_output // Returns a bool saying resize should happen or not and // raises a warning if resizing for one or more elements TORCH_API bool resize_output_check(const Tensor& output, IntArrayRef shape); TORCH_API void resize_bytes_cpu(StorageImpl* storage, size_t size_bytes); static inline void maybe_resize_storage_cpu(TensorImpl* self, uint64_t new_size) { // It does not make sense to try to resize a storage // to hold 0 elements, and this can break // if storage_offset is positive but // new_size is 0, so just bail in that case // (same comment is in Resize.cuh) if (new_size == 0) { return; } const auto new_size_bytes_i = (new_size + self->storage_offset()) * self->dtype().itemsize(); TORCH_CHECK(!overflows(new_size_bytes_i), "Requested storage size (", new_size_bytes_i, ") cannot be represented as a size_t"); const auto new_size_bytes = static_cast(new_size_bytes_i); const Storage& storage = self->unsafe_storage(); if (!storage) { auto new_storage = c10::make_intrusive( StorageImpl::use_byte_size_t(), new_size_bytes, c10::GetCPUAllocator(), true); self->set_storage_keep_dtype(std::move(new_storage)); } else if (new_size_bytes > storage.nbytes()) { resize_bytes_cpu(storage.unsafeGetStorageImpl(), new_size_bytes); } } inline TensorImpl* resize_impl_cpu_( TensorImpl* self, IntArrayRef size, c10::optional stride, bool resize_storage = true) { if (self->sizes() == size && (!stride || self->strides() == stride)) { return self; } int64_t storage_size = 1; if (stride) { self->set_sizes_and_strides(size, *stride); // NB: storage size can be different from numel. storage_size = storage_size_for(size, *stride); } else { self->set_sizes_contiguous(size); storage_size = self->numel(); } if (resize_storage) { maybe_resize_storage_cpu(self, storage_size); } return self; } static inline void checkInBoundsForStorage( IntArrayRef size, IntArrayRef stride, int64_t storage_offset, const caffe2::TypeMeta data_type, const Storage& new_storage) { int64_t storage_size_bytes = at::detail::computeStorageNbytes(size, stride, data_type.itemsize()); int64_t storage_offset_bytes = storage_offset * data_type.itemsize(); if (storage_size_bytes == 0) { // NB: (a tensor with arbitrary 0 dims)'s storage can have any numel. return; } int64_t new_storage_size_bytes = new_storage.nbytes(); TORCH_CHECK( storage_size_bytes + storage_offset_bytes <= new_storage_size_bytes, "setStorage: sizes ", size, ", strides ", stride, "," " storage offset ", storage_offset, ", and itemsize ", data_type.itemsize(), " requiring a storage size of ", storage_size_bytes + storage_offset_bytes, " are out of bounds for storage of size ", new_storage_size_bytes); } static inline void checkSetStorage(Tensor& result, Storage storage, int64_t storage_offset, IntArrayRef size, IntArrayRef stride) { // FIXME: stride should be optional if (stride.data()) { TORCH_CHECK(size.size() == stride.size(), "unequal size length (", size.size(), ") and stride length (", stride.size(), ")"); } #ifdef DEBUG TORCH_CHECK(size.size() <= INT_MAX, "size length (", size.size(), ") greater than INT_MAX"); #endif // storage: note this can't be replaced with result.set_(storage) as the semantics of that // function is to set the tensor size to be equal to the size of the storage. if (!result.storage().is_alias_of(storage)) { // Caffe2 might have tensors whose storages are null, but we // don't allow it in PyTorch. TORCH_INTERNAL_ASSERT(storage); TORCH_INTERNAL_ASSERT(result.storage()); // We used to allow this, but this breaks device caching. // Let's put an actual error message for this one. TORCH_CHECK(result.storage().device() == storage.device(), "Attempted to set the storage of a tensor on device \"", result.storage().device(), "\" to a storage on different device \"", storage.device(), "\". This is no longer allowed; the devices must match."); result.unsafeGetTensorImpl()->set_storage_keep_dtype(storage); } // storageOffset TORCH_CHECK(storage_offset >= 0, "Tensor: invalid storage offset ", storage_offset); } /** * Set self's sizes, strides, and storage_offset. * (size, stride, storage_offset) must be in bounds for self's storage. */ inline void setStrided( const Tensor& self, IntArrayRef size, IntArrayRef stride, int64_t storage_offset) { TORCH_CHECK(size.size() == stride.size(), "mismatch in length of strides and shape"); auto* self_ = self.unsafeGetTensorImpl(); checkInBoundsForStorage( size, stride, storage_offset, self_->dtype(), self_->storage()); /* storage offset */ TORCH_CHECK(storage_offset >= 0, "Tensor: invalid storage offset ", storage_offset); self_->set_storage_offset(storage_offset); /* size and stride */ if (self_->sizes() == size && self_->strides() == stride) { return; } for (auto val : stride) { TORCH_CHECK(val >= 0, "as_strided: Negative strides are not supported at the moment, " "got strides: ", stride); } self_->set_sizes_and_strides(size, stride); } }}