#pragma once

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

#include <ATen/CPUTypeDefault.h>
#include <ATen/Context.h>
#include <ATen/CheckGenerator.h>

#include <ATen/DeviceGuard.h>
#include <ATen/cuda/ATenCUDAGeneral.h>
#include <ATen/cuda/CUDADevice.h>
#include <ATen/cuda/CUDATypeDefault.h>

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

namespace at {

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

  // example
  // virtual Tensor * add(Tensor & a, Tensor & b) override;
  Tensor & _th_set_(Tensor & self, Storage source) const override;
  Tensor & _th_set_(Tensor & self, Storage source, int64_t storage_offset, IntArrayRef size, IntArrayRef stride) const override;
  Tensor & _th_set_(Tensor & self, const Tensor & source) const override;
  Tensor & _th_set_(Tensor & self) const override;
  Tensor & _th_fill_(Tensor & self, Scalar value) const override;
  Tensor & _th_fill_(Tensor & self, const Tensor & value) const override;
  bool _th_is_set_to(const Tensor & self, const Tensor & tensor) const override;
  Tensor & _th_nonzero_out(Tensor & result, const Tensor & self) const override;
  Tensor _th_nonzero(const Tensor & self) const override;
  Tensor _th_clone(const Tensor & self) const override;
  Tensor _th_view(const Tensor & self, IntArrayRef size) const override;
  Tensor & _th_resize_as_(Tensor & self, const Tensor & the_template) const override;
  Tensor & _th_unfold_out(Tensor & result, const Tensor & self, int64_t dimension, int64_t size, int64_t step) const override;
  Tensor _th_unfold(const Tensor & self, int64_t dimension, int64_t size, int64_t step) const override;
  Tensor & _th_lt_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_lt(const Tensor & self, Scalar other) const override;
  Tensor & s__th_lt_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_lt(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_lt_(Tensor & self, Scalar other) const override;
  Tensor & s__th_lt_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_gt_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_gt(const Tensor & self, Scalar other) const override;
  Tensor & s__th_gt_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_gt(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_gt_(Tensor & self, Scalar other) const override;
  Tensor & s__th_gt_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_le_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_le(const Tensor & self, Scalar other) const override;
  Tensor & s__th_le_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_le(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_le_(Tensor & self, Scalar other) const override;
  Tensor & s__th_le_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_ge_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_ge(const Tensor & self, Scalar other) const override;
  Tensor & s__th_ge_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_ge(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_ge_(Tensor & self, Scalar other) const override;
  Tensor & s__th_ge_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_eq_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_eq(const Tensor & self, Scalar other) const override;
  Tensor & s__th_eq_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_eq(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_eq_(Tensor & self, Scalar other) const override;
  Tensor & s__th_eq_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_ne_out(Tensor & result, const Tensor & self, Scalar other) const override;
  Tensor _th_ne(const Tensor & self, Scalar other) const override;
  Tensor & s__th_ne_out(Tensor & result, const Tensor & self, const Tensor & other) const override;
  Tensor s__th_ne(const Tensor & self, const Tensor & other) const override;
  Tensor & _th_ne_(Tensor & self, Scalar other) const override;
  Tensor & s__th_ne_(Tensor & self, const Tensor & other) const override;
  Tensor & _th_zero_(Tensor & self) const override;
  Tensor & _th_random_(Tensor & self, int64_t from, int64_t to, Generator * generator) const override;
  Tensor & _th_random_(Tensor & self, int64_t to, Generator * generator) const override;
  Tensor & _th_random_(Tensor & self, Generator * generator) const override;
  Tensor _th_alias(const Tensor & self) const override;
  Tensor & _th_cat_out(Tensor & self, TensorList tensors, int64_t dim) const override;
  Tensor _th_cat(TensorList tensors, int64_t dim) const override;
  Tensor as_strided(const Tensor & self, IntArrayRef size, IntArrayRef stride, c10::optional<int64_t> storage_offset) const override;
  Tensor & s_copy_(Tensor & self, const Tensor & src, bool non_blocking) const override;
  Tensor _s_copy_from(const Tensor & self, const Tensor & dst, bool non_blocking) const override;
  Tensor empty(IntArrayRef size, const TensorOptions & options) const override;
  Tensor & resize_(Tensor & self, IntArrayRef size) const override;
  Tensor empty_strided(IntArrayRef size, IntArrayRef stride, const TensorOptions & options) const override;
  Tensor clone(const Tensor & self) const override;
  Tensor & resize_as_(Tensor & self, const Tensor & the_template) const override;
  Tensor & zero_(Tensor & self) const override;
  Scalar _local_scalar_dense(const Tensor & self) const override;
};

} // namespace at
