#pragma once

// @generated by aten/src/ATen/gen.py

#include "ATen/CPUTypeDefault.h"
#include "ATen/Context.h"
#include "ATen/CheckGenerator.h"



#ifdef _MSC_VER
#ifdef Type
#undef Type
#endif
#endif

namespace at {

struct CPUHalfType final : public CPUTypeDefault {
  explicit CPUHalfType();
  virtual ScalarType scalarType() const override;
  virtual caffe2::TypeMeta typeMeta() const override;
  virtual Backend backend() const override;
  virtual const char * toString() const override;
  virtual size_t elementSizeInBytes() const override;
  virtual TypeID ID() const override;

  // example
  // virtual Tensor * add(Tensor & a, Tensor & b) override;

  virtual Tensor & s_copy_(Tensor & self, const Tensor & src, bool non_blocking) const override;
  virtual Tensor & _s_copy_from(const Tensor & self, Tensor & dst, bool non_blocking) const override;
  int64_t storage_offset(const Tensor & self) const override;
  Tensor & resize_(Tensor & self, IntList size) const override;
  Tensor & set_(Tensor & self, Storage source) const override;
  Tensor & set_(Tensor & self, Storage source, int64_t storage_offset, IntList size, IntList stride) const override;
  Tensor & set_(Tensor & self, const Tensor & source) const override;
  Tensor & set_(Tensor & self) const override;
  bool is_contiguous(const Tensor & self) const override;
  bool is_set_to(const Tensor & self, const Tensor & tensor) const override;
  Tensor th_clone(const Tensor & self) const override;
  Tensor unfold(const Tensor & self, int64_t dimension, int64_t size, int64_t step) const override;
  void* data_ptr(const Tensor & self) const override;
  Tensor th_tensor(IntList size) const override;
  Tensor th_tensor() const override;
  Tensor tensor(Storage storage, int64_t storageOffset, IntList size, IntList stride) const override;
  Tensor tensor(IntList size, IntList stride) const override;
  Tensor alias(const Tensor & self) const override;
  Tensor empty(IntList size, const TensorOptions & options) const override;
  Scalar _local_scalar_dense(const Tensor & self) const override;
};

} // namespace at
