// Make string scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeString(string name, string value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)OnnxCSharpToProtoWrapper.TensorProto.Types.DataType.String;
            tensor.StringData.Add(StringToByteString(value));
            return(tensor);
        }
        // Make int32 and smaller integer types scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeDouble(string name, double value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)OnnxCSharpToProtoWrapper.TensorProto.Types.DataType.Double;
            tensor.DoubleData.Add(value);
            return(tensor);
        }
        // Make float scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeFloat(string name, float value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)OnnxCSharpToProtoWrapper.TensorProto.Types.DataType.Float;
            tensor.FloatData.Add(value);
            return(tensor);
        }
        // Make ulong and uint integer types scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeUInt(string name, bool isUint64, ulong value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)ConvertToTensorProtoType(isUint64 ? typeof(ulong) : typeof(uint));
            tensor.Uint64Data.Add(value);
            return(tensor);
        }
        // Make int32 and smaller integer types scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeInt32(string name, Type type, int value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)ConvertToTensorProtoType(type);
            tensor.Int32Data.Add(value);
            return(tensor);
        }
        // Make long scalar in ONNX from native C# number
        public static OnnxCSharpToProtoWrapper.TensorProto MakeInt64(string name, long value)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)OnnxCSharpToProtoWrapper.TensorProto.Types.DataType.Int64;
            tensor.Int64Data.Add(value);
            return(tensor);
        }
        // Make string vector (i.e., 1-D tensor) with dims=null. Otherwise, dims is used as the shape of the produced tensor.
        public static OnnxCSharpToProtoWrapper.TensorProto MakeStrings(string name, IEnumerable <string> values, IEnumerable <long> dims = null)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)OnnxCSharpToProtoWrapper.TensorProto.Types.DataType.String;
            tensor.StringData.AddRange(StringToByteString(values));
            if (dims != null)
            {
                tensor.Dims.AddRange(dims);
            }
            else
            {
                tensor.Dims.Add(values.Count());
            }
            return(tensor);
        }
        // Make ulong and uint integer vector (i.e., 1-D tensor) with dims=null. Otherwise, dims is used as the shape of the produced tensor.
        public static OnnxCSharpToProtoWrapper.TensorProto MakeUInts(string name, bool isUint64, IEnumerable <ulong> values, IEnumerable <long> dims = null)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)ConvertToTensorProtoType(isUint64 ? typeof(ulong) : typeof(uint));
            tensor.Uint64Data.AddRange(values);
            if (dims != null)
            {
                tensor.Dims.AddRange(dims);
            }
            else
            {
                tensor.Dims.Add(values.Count());
            }
            return(tensor);
        }
        // Make int32 and smaller integer types vector (i.e., 1-D tensor) with dims=null. Otherwise, dims is used as the shape of the produced tensor.
        public static OnnxCSharpToProtoWrapper.TensorProto MakeInt32s(string name, Type type, IEnumerable <int> values, IEnumerable <long> dims = null)
        {
            var tensor = new OnnxCSharpToProtoWrapper.TensorProto();

            tensor.Name     = name;
            tensor.DataType = (int)ConvertToTensorProtoType(type);
            tensor.Int32Data.AddRange(values);
            if (dims != null)
            {
                tensor.Dims.AddRange(dims);
            }
            else
            {
                tensor.Dims.Add(values.Count());
            }
            return(tensor);
        }