createWithSpec Class — pytorch Architecture
Architecture documentation for the createWithSpec class in type.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/core/type.cpp lines 745–785
template <typename S>
TupleTypePtr TupleType::createWithSpec(const std::optional<c10::QualifiedName>& qualName,
const std::vector<S>& field_names,
const std::vector<TypePtr>& field_types,
std::vector<IValue>& field_defaults) {
TORCH_INTERNAL_ASSERT(field_names.size() == field_types.size());
std::vector<Argument> arguments;
arguments.reserve(field_names.size());
auto min_default_idx = field_names.size() - field_defaults.size();
for (size_t i = 0; i < field_names.size(); ++i) {
if (i < min_default_idx) {
Argument arg{
/*name=*/std::string{field_names[i]},
/*type=*/field_types[i],
/*N=*/i};
arguments.emplace_back(std::move(arg));
}
else {
size_t j = i - min_default_idx;
TORCH_CHECK(field_defaults[j].tagKind() != "Tensor", "Tensors are "
"not supported as default NamedTuple fields. Their "
"mutability could lead to potential memory aliasing "
"problems");
Argument arg{
/*name=*/std::string{field_names[i]},
/*type=*/field_types[i],
/*N=*/i,
/*default_value=*/field_defaults[j]};
arguments.emplace_back(std::move(arg));
}
}
auto schema = std::make_shared<FunctionSchema>(
/*name=*/qualName.value_or(c10::QualifiedName()).name(),
/*overload_name=*/std::string(""),
/*arguments=*/std::move(arguments),
/*returns=*/std::vector<Argument>{});
return std::shared_ptr<TupleType>(new TupleType(
field_types, qualName, std::move(schema))); // NOLINT(modernize-make-shared)
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free