ITensor CreateBindableTensor()

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();
    }