#include <c10/core/UndefinedTensorImpl.h>
#include <c10/util/Exception.h>
#include <c10/util/Optional.h>
-#include <c10/core/Tensor.h>
#include <ATen/core/LegacyTypeDispatch.h>
#include <ATen/core/DeprecatedTypePropertiesRegistry.h>
return r;
}
- explicit Tensor(C10Tensor tensor) : impl_(std::move(tensor).impl()) {
- enforce_invariants();
- }
-
- explicit operator C10Tensor() const & {
- return C10Tensor(impl_);
- }
-
- explicit operator C10Tensor() && {
- return C10Tensor(std::move(impl_));
- }
-
int64_t dim() const {
return impl_->dim();
}
#include <c10/core/UndefinedTensorImpl.h>
#include <c10/util/Exception.h>
#include <c10/util/Optional.h>
-#include <c10/core/Tensor.h>
#include <ATen/core/LegacyTypeDispatch.h>
#include <ATen/core/DeprecatedTypePropertiesRegistry.h>
return r;
}
- explicit Tensor(C10Tensor tensor) : impl_(std::move(tensor).impl()) {
- enforce_invariants();
- }
-
- explicit operator C10Tensor() const & {
- return C10Tensor(impl_);
- }
-
- explicit operator C10Tensor() && {
- return C10Tensor(std::move(impl_));
- }
-
int64_t dim() const {
return impl_->dim();
}
+++ /dev/null
-#pragma once
-
-#include <c10/core/TensorImpl.h>
-#include <c10/core/UndefinedTensorImpl.h>
-#include <c10/macros/Macros.h>
-
-namespace c10 {
-
-/**
- * This is a minimal Tensor class for use in c10 code.
- * The plan on record is to eventually merge at::Tensor and caffe2::Tensor
- * and move that merged class to c10, replacing this one.
- *
- * At time of writing this, we couldn't do that yet, because their APIs are
- * not clean enough to make it in c10 and because they have dependencies we want
- * to avoid, for example at::Tensor depends on at::Type.
- */
-class C10Tensor final {
-private:
- using TensorImplPtr = intrusive_ptr<TensorImpl, UndefinedTensorImpl>;
-public:
- explicit C10Tensor(TensorImplPtr impl) noexcept;
-
- C10Tensor(const C10Tensor&) = default;
- C10Tensor(C10Tensor&&) noexcept = default;
- C10Tensor& operator=(const C10Tensor&) = default;
- C10Tensor& operator=(C10Tensor&&) noexcept = default;
-
- const TensorImplPtr &impl() const & noexcept;
- TensorImplPtr&& impl() && noexcept;
-
- TensorTypeId type_id() const;
-
-private:
- TensorImplPtr impl_;
-};
-
-inline C10Tensor::C10Tensor(TensorImplPtr impl) noexcept
-: impl_(std::move(impl)) {}
-
-inline const C10Tensor::TensorImplPtr &C10Tensor::impl() const & noexcept {
- return impl_;
-}
-
-inline C10Tensor::TensorImplPtr&& C10Tensor::impl() && noexcept {
- return std::move(impl_);
-}
-
-inline TensorTypeId C10Tensor::type_id() const {
- return impl_->type_id();
-}
-
-} // namespace c10
void popOutputs_() {
AT_ASSERT(stack_.size() == op_.schema().returns().size());
for (size_t i = 0; i < op_.schema().returns().size(); ++i) {
- OperatorBase::SetOutputTensor(i, Tensor(C10Tensor(std::move(stack_[i]).toTensor())));
+ OperatorBase::SetOutputTensor(i, Tensor(std::move(stack_[i]).toTensor()));
}
stack_.clear();
}
#include <c10/util/intrusive_ptr.h>
#include "ATen/core/Tensor.h"
#include <c10/core/TensorOptions.h>
-#include <c10/core/Tensor.h>
namespace caffe2 {
return at::Tensor::wrap_tensor_impl(std::move(impl_));
}
- /**
- * @brief Mutual conversion with C10Tensor
- *
- * The tensor will share the same instance (data, strides, sizes, etc) but
- * a different subset of APIs would be available
- */
- explicit Tensor(C10Tensor tensor) : impl_(std::move(tensor).impl()) {
- enforce_invariants();
- }
-
- explicit operator C10Tensor() const & {
- return C10Tensor(impl_);
- }
-
- explicit operator C10Tensor() && {
- return C10Tensor(std::move(impl_));
- }
-
bool is_same(const Tensor& other) const noexcept {
return impl_ == other.impl_;
}
const at::Tensor& C_,
bool legacy_broadcast,
int64_t axis) {
- Tensor A{C10Tensor(A_)};
- Tensor B{C10Tensor(B_)};
- Tensor C{C10Tensor(C_)};
+ Tensor A(A_);
+ Tensor B(B_);
+ Tensor C(C_);
CPUContext context;
const DataType* A_data = A.template data<DataType>();
const DataType* B_data = B.template data<DataType>();
class averaged_loss_cpu final : public c10::OperatorKernel {
public:
void operator()(const at::Tensor& X_, const at::Tensor& sum_) {
- Tensor X{C10Tensor(X_)};
- Tensor sum{C10Tensor(sum_)};
+ Tensor X(X_);
+ Tensor sum(sum_);
CPUContext context;
sum.Resize(vector<int64_t>());
}
private:
- at::Tensor scratch_ = at::Tensor(C10Tensor(empty({}, CPU)));
+ at::Tensor scratch_ = at::Tensor(empty({}, CPU));
};
static auto registry = c10::RegisterOperators().op(
const at::Tensor& data_,
const at::Tensor& indices_,
const at::Tensor& output_) {
- Tensor data{C10Tensor(data_)};
- Tensor indices{C10Tensor(indices_)};
- Tensor output{C10Tensor(output_)};
+ Tensor data(data_);
+ Tensor indices(indices_);
+ Tensor output(output_);
CPUContext context;
CAFFE_ENFORCE_GE(data.dim(), 2, "DATA should be at least 2-D");
int64_t trans_a,
int64_t trans_b,
int64_t broadcast) {
- Tensor A{C10Tensor(A_)};
- Tensor B{C10Tensor(B_)};
- Tensor Y{C10Tensor(Y_)};
+ Tensor A(A_);
+ Tensor B(B_);
+ Tensor Y(Y_);
CPUContext context;
using Engine = caffe2::DefaultEngine;
}
private:
- at::Tensor scratch = at::Tensor(C10Tensor(empty({}, CPU)));
+ at::Tensor scratch = at::Tensor(empty({}, CPU));
};
static auto registry = c10::RegisterOperators().op(
const at::Tensor& input_,
const at::Tensor& output_,
int64_t to_) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
TensorProto_DataType to = static_cast<TensorProto_DataType>(to_);
switch (to) {
const at::Tensor& split_,
int64_t axis,
int64_t add_axis) {
- Tensor output{C10Tensor(output_)};
- Tensor split{C10Tensor(split_)};
+ Tensor output(output_);
+ Tensor split(split_);
CPUContext context;
split.Resize(vector<int64_t>(1, inputs.size()));
namespace {
template <class DataType>
void enforce_finite_op_impl_cpu(const at::Tensor& input_) {
- Tensor input{C10Tensor(input_)};
+ Tensor input(input_);
const DataType* input_data = input.template data<DataType>();
auto size = input.numel();
const at::Tensor& input_,
const at::Tensor& output_,
ArrayRef<int64_t> dims) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
if (!initialized_) {
dims_ = dims.vec();
const at::Tensor& Y_,
int64_t axis,
int64_t axis_w) {
- Tensor X{C10Tensor(X_)};
- Tensor W{C10Tensor(W_)};
- Tensor b{C10Tensor(b_)};
- Tensor Y{C10Tensor(Y_)};
+ Tensor X(X_);
+ Tensor W(W_);
+ Tensor b(b_);
+ Tensor Y(Y_);
CPUContext context;
constexpr bool TransposeWeight = true;
private:
vector<int64_t> Y_shape_cache_;
- at::Tensor bias_multiplier_ = at::Tensor(C10Tensor(Tensor()));
+ at::Tensor bias_multiplier_ = at::Tensor(Tensor());
};
static auto registry = c10::RegisterOperators().op(
#include <ATen/core/op_registration/op_registration.h>
-#include <c10/core/Tensor.h>
#include "caffe2/core/operator_c10wrapper.h"
#include "caffe2/core/tensor.h"
#include "caffe2/utils/math.h"
ArrayRef<int64_t> shape,
ArrayRef<int64_t> extra_shape,
bool input_as_shape) {
- Tensor output{C10Tensor(output_)};
+ Tensor output(output_);
if (inputs.size()) {
auto real_shape = vector<int64_t>{};
if (input_as_shape) {
ArrayRef<int64_t> extra_shape,
bool input_as_shape,
const at::Tensor& values_) {
- Tensor output{C10Tensor(output_)};
- Tensor values{C10Tensor(values_)};
+ Tensor output(output_);
+ Tensor values(values_);
CPUContext context;
filler_init(inputs, output_, shape, extra_shape, input_as_shape);
bool input_as_shape,
int64_t dtype,
c10::Scalar value) {
- Tensor output{C10Tensor(output_)};
+ Tensor output(output_);
CPUContext context;
filler_init(inputs, output_, shape, extra_shape, input_as_shape);
bool input_as_shape,
double min,
double max) {
- Tensor output{C10Tensor(output_)};
+ Tensor output(output_);
CPUContext context;
filler_init(inputs, output_, shape, extra_shape, input_as_shape);
const at::Tensor& input_,
const at::Tensor& output_,
int64_t axis) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
CPUContext context;
CAFFE_ENFORCE_GE(
input.sizes().size(), axis, "The rank of the tensor must be >= axis.");
const at::Tensor& C_,
bool legacy_broadcast,
int64_t axis) {
- Tensor A{C10Tensor(A_)};
- Tensor B{C10Tensor(B_)};
- Tensor C{C10Tensor(C_)};
+ Tensor A(A_);
+ Tensor B(B_);
+ Tensor C(C_);
CPUContext context;
const DataType* A_data = A.template data<DataType>();
const DataType* B_data = B.template data<DataType>();
void relu_op_cpu_impl(
const at::Tensor& input_,
const at::Tensor& output_) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
output.ResizeLike(input);
void sigmoid_op_cpu_impl(
const at::Tensor& input_,
const at::Tensor& output_) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
output.ResizeLike(input);
caffe2::ConstEigenVectorArrayMap<DataType> xM(
const at::Tensor& out_,
bool log_D_trick,
bool unjoined_lr_loss) {
- Tensor logits{C10Tensor(logits_)};
- Tensor targets{C10Tensor(targets_)};
- Tensor out{C10Tensor(out_)};
+ Tensor logits(logits_);
+ Tensor targets(targets_);
+ Tensor out(out_);
CAFFE_ENFORCE_EQ(logits.sizes(), targets.sizes());
const auto inner_size = logits.dim() > 0 ? logits.sizes().back() : 1;
const at::Tensor& indicesInput_,
const at::Tensor& lengthsInput_,
const at::Tensor& output_) {
- Tensor dataInput{C10Tensor(dataInput_)};
- Tensor indicesInput{C10Tensor(indicesInput_)};
- Tensor lengthsInput{C10Tensor(lengthsInput_)};
- Tensor output{C10Tensor(output_)};
+ Tensor dataInput(dataInput_);
+ Tensor indicesInput(indicesInput_);
+ Tensor lengthsInput(lengthsInput_);
+ Tensor output(output_);
using T = float;
constexpr bool USE_MEAN = false;
void stop_gradient_op_cpu_impl(
const at::Tensor& input_,
const at::Tensor& output_) {
- Tensor input{C10Tensor(input_)};
- Tensor output{C10Tensor(output_)};
+ Tensor input(input_);
+ Tensor output(output_);
if (!output.is_same(input)) {
output.CopyFrom(input);
}
#ifndef LSTM_OP_H_
#define LSTM_OP_H_
-#include <c10/core/Tensor.h>
#include <algorithm>
#include <sstream>
#include <unordered_map>
#include "caffe2/operators/layer_norm_op.h"
-#include <c10/core/Tensor.h>
-
#include "caffe2/core/operator_c10wrapper.h"
#include "caffe2/utils/eigen_utils.h"