in graphlearn_torch/csrc/cpu/inducer.cc [93:114]
TensorMap CPUHeteroInducer::InitNode(const TensorMap& seed) {
Reset();
TensorMap nodes_dict;
for (const auto& iter :seed) {
const auto seed_size = iter.second.size(0);
const auto seed_ptr = iter.second.data_ptr<int64_t>();
std::vector<int64_t> out_nodes;
out_nodes.reserve(seed_size);
int64_t n_id = nodes_size_[iter.first];
for (int32_t i = 0; i < seed_size; ++i) {
if (((glob2local_[iter.first]).insert({seed_ptr[i], n_id})).second) {
out_nodes.push_back(seed_ptr[i]);
++n_id;
}
}
nodes_size_[iter.first] = n_id;
torch::Tensor nodes = torch::empty(out_nodes.size(), iter.second.options());
std::copy(out_nodes.begin(), out_nodes.end(), nodes.data_ptr<int64_t>());
nodes_dict.emplace(iter.first, std::move(nodes));
}
return nodes_dict;
}