2 #include <unordered_set> 4 #include <ATen/core/interned_strings.h> 5 #include <c10/util/Exception.h> 21 static Symbol wildcardSet() {
22 static const Symbol wc = Symbol::fromQualString(
"alias::*");
27 ret.addBeforeSet(wildcardSet());
31 void setIsWrite(
bool isWrite) {
35 bool isWrite()
const {
39 void addBeforeSet(
Symbol aliasSet) {
40 beforeSets_.insert(aliasSet);
43 void addAfterSet(
Symbol aliasSet) {
44 afterSets_.insert(aliasSet);
47 const std::unordered_set<Symbol>& beforeSets()
const {
51 const std::unordered_set<Symbol>& afterSets()
const {
56 AT_ASSERT(beforeSets_.size() == 1);
57 return *beforeSets_.begin();
60 bool isWildcard()
const {
61 return beforeSets_.count(wildcardSet()) != 0;
69 void addContainedType(
AliasInfo aliasInfo) {
70 containedTypes_.push_back(std::move(aliasInfo));
72 const std::vector<AliasInfo>& containedTypes()
const {
73 return containedTypes_;
77 std::unordered_set<Symbol> beforeSets_;
78 std::unordered_set<Symbol> afterSets_;
79 std::vector<AliasInfo> containedTypes_;
80 bool isWrite_ =
false;
84 inline std::ostream& operator<<(std::ostream& out,
const AliasInfo& aliasInfo) {
87 for (
const auto&
set : aliasInfo.beforeSets()) {
93 out <<
set.toUnqualString();
97 if (!aliasInfo.containedTypes().empty()) {
98 out <<
" CONTAINS " << aliasInfo.containedTypes()[0];
To register your own kernel for an operator, do in one (!) cpp file: C10_REGISTER_KERNEL(OperatorHand...