in Tools/WinMLDashboard/src/cpp/DebugRunner/BindingUtilities.h [111:223]
ITensor CreateBindableTensor(const ILearningModelFeatureDescriptor& description, std::wstring inputPath)
{
auto name = description.Name();
auto tensorDescriptor = description.try_as<TensorFeatureDescriptor>();
if (!tensorDescriptor)
{
std::cout << "BindingUtilities: Input Descriptor type isn't tensor." << std::endl;
throw;
}
std::vector<std::string> elementStrings;
switch (tensorDescriptor.TensorKind())
{
case TensorKind::Undefined:
{
std::cout << "BindingUtilities: TensorKind is undefined." << std::endl;
throw hresult_invalid_argument();
}
case TensorKind::Float:
{
ModelBinding<float> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<float>(elementStrings, binding);
return TensorFloat::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Float16:
{
ModelBinding<float> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<float>(elementStrings, binding);
return TensorFloat16Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Double:
{
ModelBinding<double> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<double>(elementStrings, binding);
return TensorDouble::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Int8:
{
ModelBinding<uint8_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<uint8_t>(elementStrings, binding);
return TensorInt8Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::UInt8:
{
ModelBinding<uint8_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<uint8_t>(elementStrings, binding);
return TensorUInt8Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Int16:
{
ModelBinding<int16_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<int16_t>(elementStrings, binding);
return TensorInt16Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::UInt16:
{
ModelBinding<uint16_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<uint16_t>(elementStrings, binding);
return TensorUInt16Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Int32:
{
ModelBinding<int32_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<int32_t>(elementStrings, binding);
return TensorInt32Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::UInt32:
{
ModelBinding<uint32_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<uint32_t>(elementStrings, binding);
return TensorUInt32Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::Int64:
{
ModelBinding<int64_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<int64_t>(elementStrings, binding);
return TensorInt64Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
case TensorKind::UInt64:
{
ModelBinding<uint64_t> binding(description);
elementStrings = ParseCSVElementStrings(inputPath);
WriteDataToBinding<uint64_t>(elementStrings, binding);
return TensorUInt64Bit::CreateFromArray(binding.GetShapeBuffer(), binding.GetDataBuffer());
}
break;
}
std::cout << "BindingUtilities: TensorKind has not been implemented." << std::endl;
throw hresult_not_implemented();
}