onnxruntime/winml/lib/Api/impl/TensorKindFrom.h
Paul McDaniel 5350abe19d
LearningModelSession is cleaned up to use the adapter, and parts of b… (#2382)
this is a big PR.    we are going to move it up to layer_dev , which is still a L3 so we are still safe to do work there agile.

we are going to move this into the L3 so that ryan can start doing intergration testing.   

we will pause for a full code review and integration test result prior to going into the L2.

>>>> raw comments from previous commits >>> 

* LearningModelSession is cleaned up to use the adapter, and parts of binding are.
* moved everything in the winmladapter
made it all nano-com using, WRL to construct objects in the ORT side.
base interfaces for everythign for winml to call
cleaned up a bunch of winml to use the base interfaces.
* more pieces
* GetData across the abi.
* renamed some namepsace
cleaned up OrtValue
cleaned up Tensor
cleaned up custom ops.
everything *but* learnignmodel should be clean
* make sure it's building.   winml.dll is still a monolith.
2019-11-14 17:44:07 -08:00

80 lines
No EOL
3.9 KiB
C++

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
#pragma once
namespace Windows::AI::MachineLearning {
template <typename T>
struct TensorKindFrom {};
template <>
struct TensorKindFrom<winml::ITensorInt8Bit> { static const winml::TensorKind Type = winml::TensorKind::Int8; };
template <>
struct TensorKindFrom<winml::ITensorUInt8Bit> { static const winml::TensorKind Type = winml::TensorKind::UInt8; };
template <>
struct TensorKindFrom<winml::ITensorUInt16Bit> { static const winml::TensorKind Type = winml::TensorKind::UInt16; };
template <>
struct TensorKindFrom<winml::ITensorInt16Bit> { static const winml::TensorKind Type = winml::TensorKind::Int16; };
template <>
struct TensorKindFrom<winml::ITensorUInt32Bit> { static const winml::TensorKind Type = winml::TensorKind::UInt32; };
template <>
struct TensorKindFrom<winml::ITensorInt32Bit> { static const winml::TensorKind Type = winml::TensorKind::Int32; };
template <>
struct TensorKindFrom<winml::ITensorUInt64Bit> { static const winml::TensorKind Type = winml::TensorKind::UInt64; };
template <>
struct TensorKindFrom<winml::ITensorInt64Bit> { static const winml::TensorKind Type = winml::TensorKind::Int64; };
template <>
struct TensorKindFrom<winml::ITensorBoolean> { static const winml::TensorKind Type = winml::TensorKind::Boolean; };
template <>
struct TensorKindFrom<winml::ITensorDouble> { static const winml::TensorKind Type = winml::TensorKind::Double; };
template <>
struct TensorKindFrom<winml::ITensorFloat> { static const winml::TensorKind Type = winml::TensorKind::Float; };
template <>
struct TensorKindFrom<winml::ITensorFloat16Bit> { static const winml::TensorKind Type = winml::TensorKind::Float16; };
template <>
struct TensorKindFrom<winml::ITensorString> { static const winml::TensorKind Type = winml::TensorKind::String; };
template <>
struct TensorKindFrom<int8_t> { static const winml::TensorKind Type = winml::TensorKind::Int8; };
template <>
struct TensorKindFrom<uint8_t> { static const winml::TensorKind Type = winml::TensorKind::UInt8; };
template <>
struct TensorKindFrom<uint16_t> { static const winml::TensorKind Type = winml::TensorKind::UInt16; };
template <>
struct TensorKindFrom<int16_t> { static const winml::TensorKind Type = winml::TensorKind::Int16; };
template <>
struct TensorKindFrom<uint32_t> { static const winml::TensorKind Type = winml::TensorKind::UInt32; };
template <>
struct TensorKindFrom<int32_t> { static const winml::TensorKind Type = winml::TensorKind::Int32; };
template <>
struct TensorKindFrom<uint64_t> { static const winml::TensorKind Type = winml::TensorKind::UInt64; };
template <>
struct TensorKindFrom<int64_t> { static const winml::TensorKind Type = winml::TensorKind::Int64; };
template <>
struct TensorKindFrom<bool> { static const winml::TensorKind Type = winml::TensorKind::Boolean; };
template <>
struct TensorKindFrom<double> { static const winml::TensorKind Type = winml::TensorKind::Double; };
template <>
struct TensorKindFrom<float> { static const winml::TensorKind Type = winml::TensorKind::Float; };
template <>
struct TensorKindFrom<winrt::hstring> { static const winml::TensorKind Type = winml::TensorKind::String; };
template <>
struct TensorKindFrom<std::string> { static const winml::TensorKind Type = winml::TensorKind::String; };
template <>
struct TensorKindFrom<onnxruntime::MLFloat16> { static const winml::TensorKind Type = winml::TensorKind::Float16; };
template <typename T>
struct TensorFeatureDescriptorFrom {
static winml::ILearningModelFeatureDescriptor
CreateAnonymous(
std::vector<int64_t> shape) {
return winrt::make<winmlp::TensorFeatureDescriptor>(
nullptr /* set to null as values are name-less */,
nullptr /* set to null as values are description-less */,
false /* set to false as values dont have required annotations */,
TensorKindFrom<T>::Type,
shape,
false /* set to false as this is not a tensor of unsupported metadata */);
}
};
} // namespace Windows::AI::MachineLearning