diff --git a/README.md b/README.md
index 48469df0..045ca547 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ TensorFlow.NET provides .NET Standard binding for [TensorFlow](https://www.tenso
[](https://www.nuget.org/packages/TensorFlow.NET)
[](https://tensorflownet.readthedocs.io/en/latest/?badge=latest)
-TensorFlow.NET is a member project of [SciSharp](https://github.com/SciSharp) stack.
+TensorFlow.NET is a member project of [SciSharp STACK](https://github.com/SciSharp).

@@ -57,6 +57,15 @@ using(var sess = tf.Session())
Read the docs & book [The Definitive Guide to Tensorflow.NET](https://tensorflownet.readthedocs.io/en/latest/FrontCover.html).
+More examples:
+
+* [Hello World](test/TensorFlowNET.Examples/HelloWorld.cs)
+
+* [Basic Operations](test/TensorFlowNET.Examples/BasicOperations.cs)
+* [Image Recognition](test/TensorFlowNET.Examples/ImageRecognition.cs)
+* [Linear Regression](test/TensorFlowNET.Examples/LinearRegression.cs)
+* [Text Classification with Movie Review](test/TensorFlowNET.Examples/TextClassificationWithMovieReviews.cs)
+
Star me or raise issue on [Github](https://github.com/SciSharp/TensorFlow.NET) feel free.
Scan QR code to join TIM group:
diff --git a/src/TensorFlowNET.Core/Protobuf/AllocationDescription.cs b/src/TensorFlowNET.Core/Protobuf/AllocationDescription.cs
new file mode 100644
index 00000000..f763af75
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/AllocationDescription.cs
@@ -0,0 +1,337 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/framework/allocation_description.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/framework/allocation_description.proto
+ public static partial class AllocationDescriptionReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/framework/allocation_description.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static AllocationDescriptionReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CjZ0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2FsbG9jYXRpb25fZGVzY3Jp",
+ "cHRpb24ucHJvdG8SCnRlbnNvcmZsb3ciowEKFUFsbG9jYXRpb25EZXNjcmlw",
+ "dGlvbhIXCg9yZXF1ZXN0ZWRfYnl0ZXMYASABKAMSFwoPYWxsb2NhdGVkX2J5",
+ "dGVzGAIgASgDEhYKDmFsbG9jYXRvcl9uYW1lGAMgASgJEhUKDWFsbG9jYXRp",
+ "b25faWQYBCABKAMSHAoUaGFzX3NpbmdsZV9yZWZlcmVuY2UYBSABKAgSCwoD",
+ "cHRyGAYgASgEQnsKGG9yZy50ZW5zb3JmbG93LmZyYW1ld29ya0IbQWxsb2Nh",
+ "dGlvbkRlc2NyaXB0aW9uUHJvdG9zUAFaPWdpdGh1Yi5jb20vdGVuc29yZmxv",
+ "dy90ZW5zb3JmbG93L3RlbnNvcmZsb3cvZ28vY29yZS9mcmFtZXdvcmv4AQFi",
+ "BnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.AllocationDescription), global::Tensorflow.AllocationDescription.Parser, new[]{ "RequestedBytes", "AllocatedBytes", "AllocatorName", "AllocationId", "HasSingleReference", "Ptr" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class AllocationDescription : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new AllocationDescription());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.AllocationDescriptionReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public AllocationDescription() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public AllocationDescription(AllocationDescription other) : this() {
+ requestedBytes_ = other.requestedBytes_;
+ allocatedBytes_ = other.allocatedBytes_;
+ allocatorName_ = other.allocatorName_;
+ allocationId_ = other.allocationId_;
+ hasSingleReference_ = other.hasSingleReference_;
+ ptr_ = other.ptr_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public AllocationDescription Clone() {
+ return new AllocationDescription(this);
+ }
+
+ /// Field number for the "requested_bytes" field.
+ public const int RequestedBytesFieldNumber = 1;
+ private long requestedBytes_;
+ ///
+ /// Total number of bytes requested
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long RequestedBytes {
+ get { return requestedBytes_; }
+ set {
+ requestedBytes_ = value;
+ }
+ }
+
+ /// Field number for the "allocated_bytes" field.
+ public const int AllocatedBytesFieldNumber = 2;
+ private long allocatedBytes_;
+ ///
+ /// Total number of bytes allocated if known
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long AllocatedBytes {
+ get { return allocatedBytes_; }
+ set {
+ allocatedBytes_ = value;
+ }
+ }
+
+ /// Field number for the "allocator_name" field.
+ public const int AllocatorNameFieldNumber = 3;
+ private string allocatorName_ = "";
+ ///
+ /// Name of the allocator used
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string AllocatorName {
+ get { return allocatorName_; }
+ set {
+ allocatorName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "allocation_id" field.
+ public const int AllocationIdFieldNumber = 4;
+ private long allocationId_;
+ ///
+ /// Identifier of the allocated buffer if known
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long AllocationId {
+ get { return allocationId_; }
+ set {
+ allocationId_ = value;
+ }
+ }
+
+ /// Field number for the "has_single_reference" field.
+ public const int HasSingleReferenceFieldNumber = 5;
+ private bool hasSingleReference_;
+ ///
+ /// Set if this tensor only has one remaining reference
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool HasSingleReference {
+ get { return hasSingleReference_; }
+ set {
+ hasSingleReference_ = value;
+ }
+ }
+
+ /// Field number for the "ptr" field.
+ public const int PtrFieldNumber = 6;
+ private ulong ptr_;
+ ///
+ /// Address of the allocation.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ulong Ptr {
+ get { return ptr_; }
+ set {
+ ptr_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as AllocationDescription);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(AllocationDescription other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (RequestedBytes != other.RequestedBytes) return false;
+ if (AllocatedBytes != other.AllocatedBytes) return false;
+ if (AllocatorName != other.AllocatorName) return false;
+ if (AllocationId != other.AllocationId) return false;
+ if (HasSingleReference != other.HasSingleReference) return false;
+ if (Ptr != other.Ptr) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (RequestedBytes != 0L) hash ^= RequestedBytes.GetHashCode();
+ if (AllocatedBytes != 0L) hash ^= AllocatedBytes.GetHashCode();
+ if (AllocatorName.Length != 0) hash ^= AllocatorName.GetHashCode();
+ if (AllocationId != 0L) hash ^= AllocationId.GetHashCode();
+ if (HasSingleReference != false) hash ^= HasSingleReference.GetHashCode();
+ if (Ptr != 0UL) hash ^= Ptr.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (RequestedBytes != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(RequestedBytes);
+ }
+ if (AllocatedBytes != 0L) {
+ output.WriteRawTag(16);
+ output.WriteInt64(AllocatedBytes);
+ }
+ if (AllocatorName.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(AllocatorName);
+ }
+ if (AllocationId != 0L) {
+ output.WriteRawTag(32);
+ output.WriteInt64(AllocationId);
+ }
+ if (HasSingleReference != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(HasSingleReference);
+ }
+ if (Ptr != 0UL) {
+ output.WriteRawTag(48);
+ output.WriteUInt64(Ptr);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (RequestedBytes != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(RequestedBytes);
+ }
+ if (AllocatedBytes != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(AllocatedBytes);
+ }
+ if (AllocatorName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AllocatorName);
+ }
+ if (AllocationId != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(AllocationId);
+ }
+ if (HasSingleReference != false) {
+ size += 1 + 1;
+ }
+ if (Ptr != 0UL) {
+ size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Ptr);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(AllocationDescription other) {
+ if (other == null) {
+ return;
+ }
+ if (other.RequestedBytes != 0L) {
+ RequestedBytes = other.RequestedBytes;
+ }
+ if (other.AllocatedBytes != 0L) {
+ AllocatedBytes = other.AllocatedBytes;
+ }
+ if (other.AllocatorName.Length != 0) {
+ AllocatorName = other.AllocatorName;
+ }
+ if (other.AllocationId != 0L) {
+ AllocationId = other.AllocationId;
+ }
+ if (other.HasSingleReference != false) {
+ HasSingleReference = other.HasSingleReference;
+ }
+ if (other.Ptr != 0UL) {
+ Ptr = other.Ptr;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ RequestedBytes = input.ReadInt64();
+ break;
+ }
+ case 16: {
+ AllocatedBytes = input.ReadInt64();
+ break;
+ }
+ case 26: {
+ AllocatorName = input.ReadString();
+ break;
+ }
+ case 32: {
+ AllocationId = input.ReadInt64();
+ break;
+ }
+ case 40: {
+ HasSingleReference = input.ReadBool();
+ break;
+ }
+ case 48: {
+ Ptr = input.ReadUInt64();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/ApiDef.cs b/src/TensorFlowNET.Core/Protobuf/ApiDef.cs
new file mode 100644
index 00000000..fde35487
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/ApiDef.cs
@@ -0,0 +1,1328 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/framework/api_def.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/framework/api_def.proto
+ public static partial class ApiDefReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/framework/api_def.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static ApiDefReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Cid0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2FwaV9kZWYucHJvdG8SCnRl",
+ "bnNvcmZsb3caKnRlbnNvcmZsb3cvY29yZS9mcmFtZXdvcmsvYXR0cl92YWx1",
+ "ZS5wcm90byLhBQoGQXBpRGVmEhUKDWdyYXBoX29wX25hbWUYASABKAkSGwoT",
+ "ZGVwcmVjYXRpb25fbWVzc2FnZRgMIAEoCRIbChNkZXByZWNhdGlvbl92ZXJz",
+ "aW9uGA0gASgFEjEKCnZpc2liaWxpdHkYAiABKA4yHS50ZW5zb3JmbG93LkFw",
+ "aURlZi5WaXNpYmlsaXR5Ei0KCGVuZHBvaW50GAMgAygLMhsudGVuc29yZmxv",
+ "dy5BcGlEZWYuRW5kcG9pbnQSJgoGaW5fYXJnGAQgAygLMhYudGVuc29yZmxv",
+ "dy5BcGlEZWYuQXJnEicKB291dF9hcmcYBSADKAsyFi50ZW5zb3JmbG93LkFw",
+ "aURlZi5BcmcSEQoJYXJnX29yZGVyGAsgAygJEiUKBGF0dHIYBiADKAsyFy50",
+ "ZW5zb3JmbG93LkFwaURlZi5BdHRyEg8KB3N1bW1hcnkYByABKAkSEwoLZGVz",
+ "Y3JpcHRpb24YCCABKAkSGgoSZGVzY3JpcHRpb25fcHJlZml4GAkgASgJEhoK",
+ "EmRlc2NyaXB0aW9uX3N1ZmZpeBgKIAEoCRpJCghFbmRwb2ludBIMCgRuYW1l",
+ "GAEgASgJEhIKCmRlcHJlY2F0ZWQYAyABKAgSGwoTZGVwcmVjYXRpb25fdmVy",
+ "c2lvbhgEIAEoBRo7CgNBcmcSDAoEbmFtZRgBIAEoCRIRCglyZW5hbWVfdG8Y",
+ "AiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkaagoEQXR0chIMCgRuYW1lGAEg",
+ "ASgJEhEKCXJlbmFtZV90bxgCIAEoCRIsCg1kZWZhdWx0X3ZhbHVlGAMgASgL",
+ "MhUudGVuc29yZmxvdy5BdHRyVmFsdWUSEwoLZGVzY3JpcHRpb24YBCABKAki",
+ "RwoKVmlzaWJpbGl0eRIWChJERUZBVUxUX1ZJU0lCSUxJVFkQABILCgdWSVNJ",
+ "QkxFEAESCAoEU0tJUBACEgoKBkhJRERFThADIikKB0FwaURlZnMSHgoCb3AY",
+ "ASADKAsyEi50ZW5zb3JmbG93LkFwaURlZkJsChhvcmcudGVuc29yZmxvdy5m",
+ "cmFtZXdvcmtCDEFwaURlZlByb3Rvc1ABWj1naXRodWIuY29tL3RlbnNvcmZs",
+ "b3cvdGVuc29yZmxvdy90ZW5zb3JmbG93L2dvL2NvcmUvZnJhbWV3b3Jr+AEB",
+ "YgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tensorflow.AttrValueReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ApiDef), global::Tensorflow.ApiDef.Parser, new[]{ "GraphOpName", "DeprecationMessage", "DeprecationVersion", "Visibility", "Endpoint", "InArg", "OutArg", "ArgOrder", "Attr", "Summary", "Description", "DescriptionPrefix", "DescriptionSuffix" }, null, new[]{ typeof(global::Tensorflow.ApiDef.Types.Visibility) }, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ApiDef.Types.Endpoint), global::Tensorflow.ApiDef.Types.Endpoint.Parser, new[]{ "Name", "Deprecated", "DeprecationVersion" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ApiDef.Types.Arg), global::Tensorflow.ApiDef.Types.Arg.Parser, new[]{ "Name", "RenameTo", "Description" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ApiDef.Types.Attr), global::Tensorflow.ApiDef.Types.Attr.Parser, new[]{ "Name", "RenameTo", "DefaultValue", "Description" }, null, null, null)}),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ApiDefs), global::Tensorflow.ApiDefs.Parser, new[]{ "Op" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ ///
+ /// Used to specify and override the default API & behavior in the
+ /// generated code for client languages, from what you would get from
+ /// the OpDef alone. There will be a set of ApiDefs that are common
+ /// to all client languages, and another set per client language.
+ /// The per-client-language ApiDefs will inherit values from the
+ /// common ApiDefs which it can either replace or modify.
+ ///
+ /// We separate the API definition from the OpDef so we can evolve the
+ /// API while remaining backwards compatible when interpretting old
+ /// graphs. Overrides go in an "api_def.pbtxt" file with a text-format
+ /// ApiDefs message.
+ ///
+ /// WARNING: Be *very* careful changing the API for any existing op --
+ /// you can change the semantics of existing code. These changes may
+ /// need to wait until a major release of TensorFlow to avoid breaking
+ /// our compatibility promises.
+ ///
+ public sealed partial class ApiDef : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ApiDef());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ApiDefReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDef() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDef(ApiDef other) : this() {
+ graphOpName_ = other.graphOpName_;
+ deprecationMessage_ = other.deprecationMessage_;
+ deprecationVersion_ = other.deprecationVersion_;
+ visibility_ = other.visibility_;
+ endpoint_ = other.endpoint_.Clone();
+ inArg_ = other.inArg_.Clone();
+ outArg_ = other.outArg_.Clone();
+ argOrder_ = other.argOrder_.Clone();
+ attr_ = other.attr_.Clone();
+ summary_ = other.summary_;
+ description_ = other.description_;
+ descriptionPrefix_ = other.descriptionPrefix_;
+ descriptionSuffix_ = other.descriptionSuffix_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDef Clone() {
+ return new ApiDef(this);
+ }
+
+ /// Field number for the "graph_op_name" field.
+ public const int GraphOpNameFieldNumber = 1;
+ private string graphOpName_ = "";
+ ///
+ /// Name of the op (in the OpDef) to specify the API for.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string GraphOpName {
+ get { return graphOpName_; }
+ set {
+ graphOpName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "deprecation_message" field.
+ public const int DeprecationMessageFieldNumber = 12;
+ private string deprecationMessage_ = "";
+ ///
+ /// If this op is deprecated, set deprecation message to the message
+ /// that should be logged when this op is used.
+ /// The message should indicate alternative op to use, if any.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string DeprecationMessage {
+ get { return deprecationMessage_; }
+ set {
+ deprecationMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "deprecation_version" field.
+ public const int DeprecationVersionFieldNumber = 13;
+ private int deprecationVersion_;
+ ///
+ /// Major version when the op will be deleted. For e.g. set this
+ /// value to 2 if op API should be removed in TensorFlow 2.0 and
+ /// deprecated in versions before that.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int DeprecationVersion {
+ get { return deprecationVersion_; }
+ set {
+ deprecationVersion_ = value;
+ }
+ }
+
+ /// Field number for the "visibility" field.
+ public const int VisibilityFieldNumber = 2;
+ private global::Tensorflow.ApiDef.Types.Visibility visibility_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.ApiDef.Types.Visibility Visibility {
+ get { return visibility_; }
+ set {
+ visibility_ = value;
+ }
+ }
+
+ /// Field number for the "endpoint" field.
+ public const int EndpointFieldNumber = 3;
+ private static readonly pb::FieldCodec _repeated_endpoint_codec
+ = pb::FieldCodec.ForMessage(26, global::Tensorflow.ApiDef.Types.Endpoint.Parser);
+ private readonly pbc::RepeatedField endpoint_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Endpoint {
+ get { return endpoint_; }
+ }
+
+ /// Field number for the "in_arg" field.
+ public const int InArgFieldNumber = 4;
+ private static readonly pb::FieldCodec _repeated_inArg_codec
+ = pb::FieldCodec.ForMessage(34, global::Tensorflow.ApiDef.Types.Arg.Parser);
+ private readonly pbc::RepeatedField inArg_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField InArg {
+ get { return inArg_; }
+ }
+
+ /// Field number for the "out_arg" field.
+ public const int OutArgFieldNumber = 5;
+ private static readonly pb::FieldCodec _repeated_outArg_codec
+ = pb::FieldCodec.ForMessage(42, global::Tensorflow.ApiDef.Types.Arg.Parser);
+ private readonly pbc::RepeatedField outArg_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField OutArg {
+ get { return outArg_; }
+ }
+
+ /// Field number for the "arg_order" field.
+ public const int ArgOrderFieldNumber = 11;
+ private static readonly pb::FieldCodec _repeated_argOrder_codec
+ = pb::FieldCodec.ForString(90);
+ private readonly pbc::RepeatedField argOrder_ = new pbc::RepeatedField();
+ ///
+ /// List of original in_arg names to specify new argument order.
+ /// Length of arg_order should be either empty to keep current order
+ /// or match size of in_arg.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField ArgOrder {
+ get { return argOrder_; }
+ }
+
+ /// Field number for the "attr" field.
+ public const int AttrFieldNumber = 6;
+ private static readonly pb::FieldCodec _repeated_attr_codec
+ = pb::FieldCodec.ForMessage(50, global::Tensorflow.ApiDef.Types.Attr.Parser);
+ private readonly pbc::RepeatedField attr_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Attr {
+ get { return attr_; }
+ }
+
+ /// Field number for the "summary" field.
+ public const int SummaryFieldNumber = 7;
+ private string summary_ = "";
+ ///
+ /// One-line human-readable description of what the Op does.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Summary {
+ get { return summary_; }
+ set {
+ summary_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description" field.
+ public const int DescriptionFieldNumber = 8;
+ private string description_ = "";
+ ///
+ /// Additional, longer human-readable description of what the Op does.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Description {
+ get { return description_; }
+ set {
+ description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description_prefix" field.
+ public const int DescriptionPrefixFieldNumber = 9;
+ private string descriptionPrefix_ = "";
+ ///
+ /// Modify an existing/inherited description by adding text to the beginning
+ /// or end.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string DescriptionPrefix {
+ get { return descriptionPrefix_; }
+ set {
+ descriptionPrefix_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description_suffix" field.
+ public const int DescriptionSuffixFieldNumber = 10;
+ private string descriptionSuffix_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string DescriptionSuffix {
+ get { return descriptionSuffix_; }
+ set {
+ descriptionSuffix_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ApiDef);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ApiDef other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (GraphOpName != other.GraphOpName) return false;
+ if (DeprecationMessage != other.DeprecationMessage) return false;
+ if (DeprecationVersion != other.DeprecationVersion) return false;
+ if (Visibility != other.Visibility) return false;
+ if(!endpoint_.Equals(other.endpoint_)) return false;
+ if(!inArg_.Equals(other.inArg_)) return false;
+ if(!outArg_.Equals(other.outArg_)) return false;
+ if(!argOrder_.Equals(other.argOrder_)) return false;
+ if(!attr_.Equals(other.attr_)) return false;
+ if (Summary != other.Summary) return false;
+ if (Description != other.Description) return false;
+ if (DescriptionPrefix != other.DescriptionPrefix) return false;
+ if (DescriptionSuffix != other.DescriptionSuffix) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (GraphOpName.Length != 0) hash ^= GraphOpName.GetHashCode();
+ if (DeprecationMessage.Length != 0) hash ^= DeprecationMessage.GetHashCode();
+ if (DeprecationVersion != 0) hash ^= DeprecationVersion.GetHashCode();
+ if (Visibility != 0) hash ^= Visibility.GetHashCode();
+ hash ^= endpoint_.GetHashCode();
+ hash ^= inArg_.GetHashCode();
+ hash ^= outArg_.GetHashCode();
+ hash ^= argOrder_.GetHashCode();
+ hash ^= attr_.GetHashCode();
+ if (Summary.Length != 0) hash ^= Summary.GetHashCode();
+ if (Description.Length != 0) hash ^= Description.GetHashCode();
+ if (DescriptionPrefix.Length != 0) hash ^= DescriptionPrefix.GetHashCode();
+ if (DescriptionSuffix.Length != 0) hash ^= DescriptionSuffix.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (GraphOpName.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(GraphOpName);
+ }
+ if (Visibility != 0) {
+ output.WriteRawTag(16);
+ output.WriteEnum((int) Visibility);
+ }
+ endpoint_.WriteTo(output, _repeated_endpoint_codec);
+ inArg_.WriteTo(output, _repeated_inArg_codec);
+ outArg_.WriteTo(output, _repeated_outArg_codec);
+ attr_.WriteTo(output, _repeated_attr_codec);
+ if (Summary.Length != 0) {
+ output.WriteRawTag(58);
+ output.WriteString(Summary);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(66);
+ output.WriteString(Description);
+ }
+ if (DescriptionPrefix.Length != 0) {
+ output.WriteRawTag(74);
+ output.WriteString(DescriptionPrefix);
+ }
+ if (DescriptionSuffix.Length != 0) {
+ output.WriteRawTag(82);
+ output.WriteString(DescriptionSuffix);
+ }
+ argOrder_.WriteTo(output, _repeated_argOrder_codec);
+ if (DeprecationMessage.Length != 0) {
+ output.WriteRawTag(98);
+ output.WriteString(DeprecationMessage);
+ }
+ if (DeprecationVersion != 0) {
+ output.WriteRawTag(104);
+ output.WriteInt32(DeprecationVersion);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (GraphOpName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(GraphOpName);
+ }
+ if (DeprecationMessage.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(DeprecationMessage);
+ }
+ if (DeprecationVersion != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(DeprecationVersion);
+ }
+ if (Visibility != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Visibility);
+ }
+ size += endpoint_.CalculateSize(_repeated_endpoint_codec);
+ size += inArg_.CalculateSize(_repeated_inArg_codec);
+ size += outArg_.CalculateSize(_repeated_outArg_codec);
+ size += argOrder_.CalculateSize(_repeated_argOrder_codec);
+ size += attr_.CalculateSize(_repeated_attr_codec);
+ if (Summary.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Summary);
+ }
+ if (Description.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+ }
+ if (DescriptionPrefix.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(DescriptionPrefix);
+ }
+ if (DescriptionSuffix.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(DescriptionSuffix);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ApiDef other) {
+ if (other == null) {
+ return;
+ }
+ if (other.GraphOpName.Length != 0) {
+ GraphOpName = other.GraphOpName;
+ }
+ if (other.DeprecationMessage.Length != 0) {
+ DeprecationMessage = other.DeprecationMessage;
+ }
+ if (other.DeprecationVersion != 0) {
+ DeprecationVersion = other.DeprecationVersion;
+ }
+ if (other.Visibility != 0) {
+ Visibility = other.Visibility;
+ }
+ endpoint_.Add(other.endpoint_);
+ inArg_.Add(other.inArg_);
+ outArg_.Add(other.outArg_);
+ argOrder_.Add(other.argOrder_);
+ attr_.Add(other.attr_);
+ if (other.Summary.Length != 0) {
+ Summary = other.Summary;
+ }
+ if (other.Description.Length != 0) {
+ Description = other.Description;
+ }
+ if (other.DescriptionPrefix.Length != 0) {
+ DescriptionPrefix = other.DescriptionPrefix;
+ }
+ if (other.DescriptionSuffix.Length != 0) {
+ DescriptionSuffix = other.DescriptionSuffix;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ GraphOpName = input.ReadString();
+ break;
+ }
+ case 16: {
+ visibility_ = (global::Tensorflow.ApiDef.Types.Visibility) input.ReadEnum();
+ break;
+ }
+ case 26: {
+ endpoint_.AddEntriesFrom(input, _repeated_endpoint_codec);
+ break;
+ }
+ case 34: {
+ inArg_.AddEntriesFrom(input, _repeated_inArg_codec);
+ break;
+ }
+ case 42: {
+ outArg_.AddEntriesFrom(input, _repeated_outArg_codec);
+ break;
+ }
+ case 50: {
+ attr_.AddEntriesFrom(input, _repeated_attr_codec);
+ break;
+ }
+ case 58: {
+ Summary = input.ReadString();
+ break;
+ }
+ case 66: {
+ Description = input.ReadString();
+ break;
+ }
+ case 74: {
+ DescriptionPrefix = input.ReadString();
+ break;
+ }
+ case 82: {
+ DescriptionSuffix = input.ReadString();
+ break;
+ }
+ case 90: {
+ argOrder_.AddEntriesFrom(input, _repeated_argOrder_codec);
+ break;
+ }
+ case 98: {
+ DeprecationMessage = input.ReadString();
+ break;
+ }
+ case 104: {
+ DeprecationVersion = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the ApiDef message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ public enum Visibility {
+ ///
+ /// Normally this is "VISIBLE" unless you are inheriting a
+ /// different value from another ApiDef.
+ ///
+ [pbr::OriginalName("DEFAULT_VISIBILITY")] DefaultVisibility = 0,
+ ///
+ /// Publicly visible in the API.
+ ///
+ [pbr::OriginalName("VISIBLE")] Visible = 1,
+ ///
+ /// Do not include this op in the generated API. If visibility is
+ /// set to 'SKIP', other fields are ignored for this op.
+ ///
+ [pbr::OriginalName("SKIP")] Skip = 2,
+ ///
+ /// Hide this op by putting it into an internal namespace (or whatever
+ /// is appropriate in the target language).
+ ///
+ [pbr::OriginalName("HIDDEN")] Hidden = 3,
+ }
+
+ ///
+ /// If you specify any endpoint, this will replace all of the
+ /// inherited endpoints. The first endpoint should be the
+ /// "canonical" endpoint, and should not be deprecated (unless all
+ /// endpoints are deprecated).
+ ///
+ public sealed partial class Endpoint : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Endpoint());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ApiDef.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Endpoint() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Endpoint(Endpoint other) : this() {
+ name_ = other.name_;
+ deprecated_ = other.deprecated_;
+ deprecationVersion_ = other.deprecationVersion_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Endpoint Clone() {
+ return new Endpoint(this);
+ }
+
+ /// Field number for the "name" field.
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ ///
+ /// Name should be either like "CamelCaseName" or
+ /// "Package.CamelCaseName". Client-language-specific ApiDefs may
+ /// use a snake_case convention instead of CamelCase.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "deprecated" field.
+ public const int DeprecatedFieldNumber = 3;
+ private bool deprecated_;
+ ///
+ /// Set if this endpoint is deprecated. If set to true, a message suggesting
+ /// to use a non-deprecated endpoint instead will be printed. If all
+ /// endpoints are deprecated, set deprecation_message in ApiDef instead.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Deprecated {
+ get { return deprecated_; }
+ set {
+ deprecated_ = value;
+ }
+ }
+
+ /// Field number for the "deprecation_version" field.
+ public const int DeprecationVersionFieldNumber = 4;
+ private int deprecationVersion_;
+ ///
+ /// Major version when an endpoint will be deleted. For e.g. set this
+ /// value to 2 if endpoint should be removed in TensorFlow 2.0 and
+ /// deprecated in versions before that.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int DeprecationVersion {
+ get { return deprecationVersion_; }
+ set {
+ deprecationVersion_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Endpoint);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Endpoint other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (Deprecated != other.Deprecated) return false;
+ if (DeprecationVersion != other.DeprecationVersion) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (Deprecated != false) hash ^= Deprecated.GetHashCode();
+ if (DeprecationVersion != 0) hash ^= DeprecationVersion.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (Deprecated != false) {
+ output.WriteRawTag(24);
+ output.WriteBool(Deprecated);
+ }
+ if (DeprecationVersion != 0) {
+ output.WriteRawTag(32);
+ output.WriteInt32(DeprecationVersion);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (Deprecated != false) {
+ size += 1 + 1;
+ }
+ if (DeprecationVersion != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(DeprecationVersion);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Endpoint other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ if (other.Deprecated != false) {
+ Deprecated = other.Deprecated;
+ }
+ if (other.DeprecationVersion != 0) {
+ DeprecationVersion = other.DeprecationVersion;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 24: {
+ Deprecated = input.ReadBool();
+ break;
+ }
+ case 32: {
+ DeprecationVersion = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class Arg : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Arg());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ApiDef.Descriptor.NestedTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Arg() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Arg(Arg other) : this() {
+ name_ = other.name_;
+ renameTo_ = other.renameTo_;
+ description_ = other.description_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Arg Clone() {
+ return new Arg(this);
+ }
+
+ /// Field number for the "name" field.
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "rename_to" field.
+ public const int RenameToFieldNumber = 2;
+ private string renameTo_ = "";
+ ///
+ /// Change the name used to access this arg in the API from what
+ /// is used in the GraphDef. Note that these names in `backticks`
+ /// will also be replaced in the summary & description fields.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string RenameTo {
+ get { return renameTo_; }
+ set {
+ renameTo_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "description" field.
+ public const int DescriptionFieldNumber = 3;
+ private string description_ = "";
+ ///
+ /// Note: this will replace any inherited arg doc. There is no
+ /// current way of modifying arg descriptions (other than replacing
+ /// them entirely) as can be done with op descriptions.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Description {
+ get { return description_; }
+ set {
+ description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Arg);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Arg other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (RenameTo != other.RenameTo) return false;
+ if (Description != other.Description) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (RenameTo.Length != 0) hash ^= RenameTo.GetHashCode();
+ if (Description.Length != 0) hash ^= Description.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (RenameTo.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(RenameTo);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(Description);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (RenameTo.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(RenameTo);
+ }
+ if (Description.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Arg other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ if (other.RenameTo.Length != 0) {
+ RenameTo = other.RenameTo;
+ }
+ if (other.Description.Length != 0) {
+ Description = other.Description;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 18: {
+ RenameTo = input.ReadString();
+ break;
+ }
+ case 26: {
+ Description = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Description of the graph-construction-time configuration of this
+ /// Op. That is to say, this describes the attr fields that will
+ /// be specified in the NodeDef.
+ ///
+ public sealed partial class Attr : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Attr());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ApiDef.Descriptor.NestedTypes[2]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Attr() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Attr(Attr other) : this() {
+ name_ = other.name_;
+ renameTo_ = other.renameTo_;
+ defaultValue_ = other.defaultValue_ != null ? other.defaultValue_.Clone() : null;
+ description_ = other.description_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Attr Clone() {
+ return new Attr(this);
+ }
+
+ /// Field number for the "name" field.
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "rename_to" field.
+ public const int RenameToFieldNumber = 2;
+ private string renameTo_ = "";
+ ///
+ /// Change the name used to access this attr in the API from what
+ /// is used in the GraphDef. Note that these names in `backticks`
+ /// will also be replaced in the summary & description fields.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string RenameTo {
+ get { return renameTo_; }
+ set {
+ renameTo_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "default_value" field.
+ public const int DefaultValueFieldNumber = 3;
+ private global::Tensorflow.AttrValue defaultValue_;
+ ///
+ /// Specify a new default value to use for this attr. This default
+ /// will be used when creating new graphs, as opposed to the
+ /// default in the OpDef, which will be used when interpreting old
+ /// GraphDefs.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.AttrValue DefaultValue {
+ get { return defaultValue_; }
+ set {
+ defaultValue_ = value;
+ }
+ }
+
+ /// Field number for the "description" field.
+ public const int DescriptionFieldNumber = 4;
+ private string description_ = "";
+ ///
+ /// Note: this will replace any inherited attr doc, there is no current
+ /// way of modifying attr descriptions as can be done with op descriptions.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Description {
+ get { return description_; }
+ set {
+ description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Attr);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Attr other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (RenameTo != other.RenameTo) return false;
+ if (!object.Equals(DefaultValue, other.DefaultValue)) return false;
+ if (Description != other.Description) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (RenameTo.Length != 0) hash ^= RenameTo.GetHashCode();
+ if (defaultValue_ != null) hash ^= DefaultValue.GetHashCode();
+ if (Description.Length != 0) hash ^= Description.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (RenameTo.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(RenameTo);
+ }
+ if (defaultValue_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(DefaultValue);
+ }
+ if (Description.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(Description);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (RenameTo.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(RenameTo);
+ }
+ if (defaultValue_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(DefaultValue);
+ }
+ if (Description.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Attr other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ if (other.RenameTo.Length != 0) {
+ RenameTo = other.RenameTo;
+ }
+ if (other.defaultValue_ != null) {
+ if (defaultValue_ == null) {
+ defaultValue_ = new global::Tensorflow.AttrValue();
+ }
+ DefaultValue.MergeFrom(other.DefaultValue);
+ }
+ if (other.Description.Length != 0) {
+ Description = other.Description;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 18: {
+ RenameTo = input.ReadString();
+ break;
+ }
+ case 26: {
+ if (defaultValue_ == null) {
+ defaultValue_ = new global::Tensorflow.AttrValue();
+ }
+ input.ReadMessage(defaultValue_);
+ break;
+ }
+ case 34: {
+ Description = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ public sealed partial class ApiDefs : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ApiDefs());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ApiDefReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDefs() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDefs(ApiDefs other) : this() {
+ op_ = other.op_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ApiDefs Clone() {
+ return new ApiDefs(this);
+ }
+
+ /// Field number for the "op" field.
+ public const int OpFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_op_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.ApiDef.Parser);
+ private readonly pbc::RepeatedField op_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Op {
+ get { return op_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ApiDefs);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ApiDefs other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!op_.Equals(other.op_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= op_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ op_.WriteTo(output, _repeated_op_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += op_.CalculateSize(_repeated_op_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ApiDefs other) {
+ if (other == null) {
+ return;
+ }
+ op_.Add(other.op_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ op_.AddEntriesFrom(input, _repeated_op_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/AttrValue.cs b/src/TensorFlowNET.Core/Protobuf/AttrValue.cs
index 158179a0..24debee1 100644
--- a/src/TensorFlowNET.Core/Protobuf/AttrValue.cs
+++ b/src/TensorFlowNET.Core/Protobuf/AttrValue.cs
@@ -1,6 +1,6 @@
//
// Generated by the protocol buffer compiler. DO NOT EDIT!
-// source: attr_value.proto
+// source: tensorflow/core/framework/attr_value.proto
//
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
@@ -11,11 +11,11 @@ using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Tensorflow {
- /// Holder for reflection information generated from attr_value.proto
+ /// Holder for reflection information generated from tensorflow/core/framework/attr_value.proto
public static partial class AttrValueReflection {
#region Descriptor
- /// File descriptor for attr_value.proto
+ /// File descriptor for tensorflow/core/framework/attr_value.proto
public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
@@ -24,26 +24,29 @@ namespace Tensorflow {
static AttrValueReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "ChBhdHRyX3ZhbHVlLnByb3RvEgp0ZW5zb3JmbG93Ggx0ZW5zb3IucHJvdG8a",
- "EnRlbnNvcl9zaGFwZS5wcm90bxoLdHlwZXMucHJvdG8ipgQKCUF0dHJWYWx1",
- "ZRILCgFzGAIgASgMSAASCwoBaRgDIAEoA0gAEgsKAWYYBCABKAJIABILCgFi",
- "GAUgASgISAASJAoEdHlwZRgGIAEoDjIULnRlbnNvcmZsb3cuRGF0YVR5cGVI",
- "ABItCgVzaGFwZRgHIAEoCzIcLnRlbnNvcmZsb3cuVGVuc29yU2hhcGVQcm90",
- "b0gAEikKBnRlbnNvchgIIAEoCzIXLnRlbnNvcmZsb3cuVGVuc29yUHJvdG9I",
- "ABIvCgRsaXN0GAEgASgLMh8udGVuc29yZmxvdy5BdHRyVmFsdWUuTGlzdFZh",
- "bHVlSAASKAoEZnVuYxgKIAEoCzIYLnRlbnNvcmZsb3cuTmFtZUF0dHJMaXN0",
- "SAASFQoLcGxhY2Vob2xkZXIYCSABKAlIABrpAQoJTGlzdFZhbHVlEgkKAXMY",
- "AiADKAwSDQoBaRgDIAMoA0ICEAESDQoBZhgEIAMoAkICEAESDQoBYhgFIAMo",
- "CEICEAESJgoEdHlwZRgGIAMoDjIULnRlbnNvcmZsb3cuRGF0YVR5cGVCAhAB",
- "EisKBXNoYXBlGAcgAygLMhwudGVuc29yZmxvdy5UZW5zb3JTaGFwZVByb3Rv",
- "EicKBnRlbnNvchgIIAMoCzIXLnRlbnNvcmZsb3cuVGVuc29yUHJvdG8SJgoE",
- "ZnVuYxgJIAMoCzIYLnRlbnNvcmZsb3cuTmFtZUF0dHJMaXN0QgcKBXZhbHVl",
- "IpIBCgxOYW1lQXR0ckxpc3QSDAoEbmFtZRgBIAEoCRIwCgRhdHRyGAIgAygL",
- "MiIudGVuc29yZmxvdy5OYW1lQXR0ckxpc3QuQXR0ckVudHJ5GkIKCUF0dHJF",
- "bnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS50ZW5zb3JmbG93",
- "LkF0dHJWYWx1ZToCOAFCbwoYb3JnLnRlbnNvcmZsb3cuZnJhbWV3b3JrQg9B",
- "dHRyVmFsdWVQcm90b3NQAVo9Z2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNv",
- "cmZsb3cvdGVuc29yZmxvdy9nby9jb3JlL2ZyYW1ld29ya/gBAWIGcHJvdG8z"));
+ "Cip0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2F0dHJfdmFsdWUucHJvdG8S",
+ "CnRlbnNvcmZsb3caJnRlbnNvcmZsb3cvY29yZS9mcmFtZXdvcmsvdGVuc29y",
+ "LnByb3RvGix0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL3RlbnNvcl9zaGFw",
+ "ZS5wcm90bxoldGVuc29yZmxvdy9jb3JlL2ZyYW1ld29yay90eXBlcy5wcm90",
+ "byKmBAoJQXR0clZhbHVlEgsKAXMYAiABKAxIABILCgFpGAMgASgDSAASCwoB",
+ "ZhgEIAEoAkgAEgsKAWIYBSABKAhIABIkCgR0eXBlGAYgASgOMhQudGVuc29y",
+ "Zmxvdy5EYXRhVHlwZUgAEi0KBXNoYXBlGAcgASgLMhwudGVuc29yZmxvdy5U",
+ "ZW5zb3JTaGFwZVByb3RvSAASKQoGdGVuc29yGAggASgLMhcudGVuc29yZmxv",
+ "dy5UZW5zb3JQcm90b0gAEi8KBGxpc3QYASABKAsyHy50ZW5zb3JmbG93LkF0",
+ "dHJWYWx1ZS5MaXN0VmFsdWVIABIoCgRmdW5jGAogASgLMhgudGVuc29yZmxv",
+ "dy5OYW1lQXR0ckxpc3RIABIVCgtwbGFjZWhvbGRlchgJIAEoCUgAGukBCglM",
+ "aXN0VmFsdWUSCQoBcxgCIAMoDBINCgFpGAMgAygDQgIQARINCgFmGAQgAygC",
+ "QgIQARINCgFiGAUgAygIQgIQARImCgR0eXBlGAYgAygOMhQudGVuc29yZmxv",
+ "dy5EYXRhVHlwZUICEAESKwoFc2hhcGUYByADKAsyHC50ZW5zb3JmbG93LlRl",
+ "bnNvclNoYXBlUHJvdG8SJwoGdGVuc29yGAggAygLMhcudGVuc29yZmxvdy5U",
+ "ZW5zb3JQcm90bxImCgRmdW5jGAkgAygLMhgudGVuc29yZmxvdy5OYW1lQXR0",
+ "ckxpc3RCBwoFdmFsdWUikgEKDE5hbWVBdHRyTGlzdBIMCgRuYW1lGAEgASgJ",
+ "EjAKBGF0dHIYAiADKAsyIi50ZW5zb3JmbG93Lk5hbWVBdHRyTGlzdC5BdHRy",
+ "RW50cnkaQgoJQXR0ckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEo",
+ "CzIVLnRlbnNvcmZsb3cuQXR0clZhbHVlOgI4AUJvChhvcmcudGVuc29yZmxv",
+ "dy5mcmFtZXdvcmtCD0F0dHJWYWx1ZVByb3Rvc1ABWj1naXRodWIuY29tL3Rl",
+ "bnNvcmZsb3cvdGVuc29yZmxvdy90ZW5zb3JmbG93L2dvL2NvcmUvZnJhbWV3",
+ "b3Jr+AEBYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Tensorflow.TensorReflection.Descriptor, global::Tensorflow.TensorShapeReflection.Descriptor, global::Tensorflow.TypesReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
diff --git a/src/TensorFlowNET.Core/Protobuf/Cluster.cs b/src/TensorFlowNET.Core/Protobuf/Cluster.cs
new file mode 100644
index 00000000..d36f7e23
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/Cluster.cs
@@ -0,0 +1,339 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/protobuf/cluster.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/protobuf/cluster.proto
+ public static partial class ClusterReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/protobuf/cluster.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static ClusterReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiZ0ZW5zb3JmbG93L2NvcmUvcHJvdG9idWYvY2x1c3Rlci5wcm90bxIKdGVu",
+ "c29yZmxvdyJyCgZKb2JEZWYSDAoEbmFtZRgBIAEoCRIsCgV0YXNrcxgCIAMo",
+ "CzIdLnRlbnNvcmZsb3cuSm9iRGVmLlRhc2tzRW50cnkaLAoKVGFza3NFbnRy",
+ "eRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAk6AjgBIi0KCkNsdXN0ZXJE",
+ "ZWYSHwoDam9iGAEgAygLMhIudGVuc29yZmxvdy5Kb2JEZWZCbgoab3JnLnRl",
+ "bnNvcmZsb3cuZGlzdHJ1bnRpbWVCDUNsdXN0ZXJQcm90b3NQAVo8Z2l0aHVi",
+ "LmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvdGVuc29yZmxvdy9nby9jb3Jl",
+ "L3Byb3RvYnVm+AEBYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.JobDef), global::Tensorflow.JobDef.Parser, new[]{ "Name", "Tasks" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ClusterDef), global::Tensorflow.ClusterDef.Parser, new[]{ "Job" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ ///
+ /// Defines a single job in a TensorFlow cluster.
+ ///
+ public sealed partial class JobDef : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new JobDef());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ClusterReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public JobDef() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public JobDef(JobDef other) : this() {
+ name_ = other.name_;
+ tasks_ = other.tasks_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public JobDef Clone() {
+ return new JobDef(this);
+ }
+
+ /// Field number for the "name" field.
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ ///
+ /// The name of this job.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "tasks" field.
+ public const int TasksFieldNumber = 2;
+ private static readonly pbc::MapField.Codec _map_tasks_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForString(18), 18);
+ private readonly pbc::MapField tasks_ = new pbc::MapField();
+ ///
+ /// Mapping from task ID to "hostname:port" string.
+ ///
+ /// If the `name` field contains "worker", and the `tasks` map contains a
+ /// mapping from 7 to "example.org:2222", then the device prefix
+ /// "/job:worker/task:7" will be assigned to "example.org:2222".
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField Tasks {
+ get { return tasks_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as JobDef);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(JobDef other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (!Tasks.Equals(other.Tasks)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ hash ^= Tasks.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ tasks_.WriteTo(output, _map_tasks_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ size += tasks_.CalculateSize(_map_tasks_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(JobDef other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ tasks_.Add(other.tasks_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 18: {
+ tasks_.AddEntriesFrom(input, _map_tasks_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Defines a TensorFlow cluster as a set of jobs.
+ ///
+ public sealed partial class ClusterDef : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ClusterDef());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ClusterReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClusterDef() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClusterDef(ClusterDef other) : this() {
+ job_ = other.job_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClusterDef Clone() {
+ return new ClusterDef(this);
+ }
+
+ /// Field number for the "job" field.
+ public const int JobFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_job_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.JobDef.Parser);
+ private readonly pbc::RepeatedField job_ = new pbc::RepeatedField();
+ ///
+ /// The jobs that comprise the cluster.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Job {
+ get { return job_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ClusterDef);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ClusterDef other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!job_.Equals(other.job_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= job_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ job_.WriteTo(output, _repeated_job_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += job_.CalculateSize(_repeated_job_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ClusterDef other) {
+ if (other == null) {
+ return;
+ }
+ job_.Add(other.job_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ job_.AddEntriesFrom(input, _repeated_job_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/Config.cs b/src/TensorFlowNET.Core/Protobuf/Config.cs
new file mode 100644
index 00000000..7eb798e3
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/Config.cs
@@ -0,0 +1,4270 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/protobuf/config.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/protobuf/config.proto
+ public static partial class ConfigReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/protobuf/config.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static ConfigReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiV0ZW5zb3JmbG93L2NvcmUvcHJvdG9idWYvY29uZmlnLnByb3RvEgp0ZW5z",
+ "b3JmbG93Gip0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2Nvc3RfZ3JhcGgu",
+ "cHJvdG8aJXRlbnNvcmZsb3cvY29yZS9mcmFtZXdvcmsvZ3JhcGgucHJvdG8a",
+ "KnRlbnNvcmZsb3cvY29yZS9mcmFtZXdvcmsvc3RlcF9zdGF0cy5wcm90bxok",
+ "dGVuc29yZmxvdy9jb3JlL3Byb3RvYnVmL2RlYnVnLnByb3RvGiZ0ZW5zb3Jm",
+ "bG93L2NvcmUvcHJvdG9idWYvY2x1c3Rlci5wcm90bxoudGVuc29yZmxvdy9j",
+ "b3JlL3Byb3RvYnVmL3Jld3JpdGVyX2NvbmZpZy5wcm90byKtBAoKR1BVT3B0",
+ "aW9ucxInCh9wZXJfcHJvY2Vzc19ncHVfbWVtb3J5X2ZyYWN0aW9uGAEgASgB",
+ "EhQKDGFsbG93X2dyb3d0aBgEIAEoCBIWCg5hbGxvY2F0b3JfdHlwZRgCIAEo",
+ "CRIfChdkZWZlcnJlZF9kZWxldGlvbl9ieXRlcxgDIAEoAxIbChN2aXNpYmxl",
+ "X2RldmljZV9saXN0GAUgASgJEiIKGnBvbGxpbmdfYWN0aXZlX2RlbGF5X3Vz",
+ "ZWNzGAYgASgFEiQKHHBvbGxpbmdfaW5hY3RpdmVfZGVsYXlfbXNlY3MYByAB",
+ "KAUSHAoUZm9yY2VfZ3B1X2NvbXBhdGlibGUYCCABKAgSOQoMZXhwZXJpbWVu",
+ "dGFsGAkgASgLMiMudGVuc29yZmxvdy5HUFVPcHRpb25zLkV4cGVyaW1lbnRh",
+ "bBrmAQoMRXhwZXJpbWVudGFsEksKD3ZpcnR1YWxfZGV2aWNlcxgBIAMoCzIy",
+ "LnRlbnNvcmZsb3cuR1BVT3B0aW9ucy5FeHBlcmltZW50YWwuVmlydHVhbERl",
+ "dmljZXMSGgoSdXNlX3VuaWZpZWRfbWVtb3J5GAIgASgIEiMKG251bV9kZXZf",
+ "dG9fZGV2X2NvcHlfc3RyZWFtcxgDIAEoBRIdChVjb2xsZWN0aXZlX3Jpbmdf",
+ "b3JkZXIYBCABKAkaKQoOVmlydHVhbERldmljZXMSFwoPbWVtb3J5X2xpbWl0",
+ "X21iGAEgAygCIoUDChBPcHRpbWl6ZXJPcHRpb25zEisKI2RvX2NvbW1vbl9z",
+ "dWJleHByZXNzaW9uX2VsaW1pbmF0aW9uGAEgASgIEhsKE2RvX2NvbnN0YW50",
+ "X2ZvbGRpbmcYAiABKAgSJAocbWF4X2ZvbGRlZF9jb25zdGFudF9pbl9ieXRl",
+ "cxgGIAEoAxIcChRkb19mdW5jdGlvbl9pbmxpbmluZxgEIAEoCBI1CglvcHRf",
+ "bGV2ZWwYAyABKA4yIi50ZW5zb3JmbG93Lk9wdGltaXplck9wdGlvbnMuTGV2",
+ "ZWwSRQoQZ2xvYmFsX2ppdF9sZXZlbBgFIAEoDjIrLnRlbnNvcmZsb3cuT3B0",
+ "aW1pemVyT3B0aW9ucy5HbG9iYWxKaXRMZXZlbCIgCgVMZXZlbBIGCgJMMRAA",
+ "Eg8KAkwwEP///////////wEiQwoOR2xvYmFsSml0TGV2ZWwSCwoHREVGQVVM",
+ "VBAAEhAKA09GRhD///////////8BEggKBE9OXzEQARIICgRPTl8yEAIi7gIK",
+ "DEdyYXBoT3B0aW9ucxIeChZlbmFibGVfcmVjdl9zY2hlZHVsaW5nGAIgASgI",
+ "EjcKEW9wdGltaXplcl9vcHRpb25zGAMgASgLMhwudGVuc29yZmxvdy5PcHRp",
+ "bWl6ZXJPcHRpb25zEhgKEGJ1aWxkX2Nvc3RfbW9kZWwYBCABKAMSHgoWYnVp",
+ "bGRfY29zdF9tb2RlbF9hZnRlchgJIAEoAxIUCgxpbmZlcl9zaGFwZXMYBSAB",
+ "KAgSGgoScGxhY2VfcHJ1bmVkX2dyYXBoGAYgASgIEiAKGGVuYWJsZV9iZmxv",
+ "YXQxNl9zZW5kcmVjdhgHIAEoCBIVCg10aW1lbGluZV9zdGVwGAggASgFEjMK",
+ "D3Jld3JpdGVfb3B0aW9ucxgKIAEoCzIaLnRlbnNvcmZsb3cuUmV3cml0ZXJD",
+ "b25maWdKBAgBEAJSJXNraXBfY29tbW9uX3N1YmV4cHJlc3Npb25fZWxpbWlu",
+ "YXRpb24iQQoVVGhyZWFkUG9vbE9wdGlvblByb3RvEhMKC251bV90aHJlYWRz",
+ "GAEgASgFEhMKC2dsb2JhbF9uYW1lGAIgASgJImwKClJQQ09wdGlvbnMSJAoc",
+ "dXNlX3JwY19mb3JfaW5wcm9jZXNzX21hc3RlchgBIAEoCBIdChVjb21wcmVz",
+ "c2lvbl9hbGdvcml0aG0YAiABKAkSGQoRY29tcHJlc3Npb25fbGV2ZWwYAyAB",
+ "KAUi3wYKC0NvbmZpZ1Byb3RvEj4KDGRldmljZV9jb3VudBgBIAMoCzIoLnRl",
+ "bnNvcmZsb3cuQ29uZmlnUHJvdG8uRGV2aWNlQ291bnRFbnRyeRIkChxpbnRy",
+ "YV9vcF9wYXJhbGxlbGlzbV90aHJlYWRzGAIgASgFEiQKHGludGVyX29wX3Bh",
+ "cmFsbGVsaXNtX3RocmVhZHMYBSABKAUSHwoXdXNlX3Blcl9zZXNzaW9uX3Ro",
+ "cmVhZHMYCSABKAgSRwocc2Vzc2lvbl9pbnRlcl9vcF90aHJlYWRfcG9vbBgM",
+ "IAMoCzIhLnRlbnNvcmZsb3cuVGhyZWFkUG9vbE9wdGlvblByb3RvEhgKEHBs",
+ "YWNlbWVudF9wZXJpb2QYAyABKAUSFgoOZGV2aWNlX2ZpbHRlcnMYBCADKAkS",
+ "KwoLZ3B1X29wdGlvbnMYBiABKAsyFi50ZW5zb3JmbG93LkdQVU9wdGlvbnMS",
+ "HAoUYWxsb3dfc29mdF9wbGFjZW1lbnQYByABKAgSHAoUbG9nX2RldmljZV9w",
+ "bGFjZW1lbnQYCCABKAgSLwoNZ3JhcGhfb3B0aW9ucxgKIAEoCzIYLnRlbnNv",
+ "cmZsb3cuR3JhcGhPcHRpb25zEh8KF29wZXJhdGlvbl90aW1lb3V0X2luX21z",
+ "GAsgASgDEisKC3JwY19vcHRpb25zGA0gASgLMhYudGVuc29yZmxvdy5SUENP",
+ "cHRpb25zEisKC2NsdXN0ZXJfZGVmGA4gASgLMhYudGVuc29yZmxvdy5DbHVz",
+ "dGVyRGVmEh0KFWlzb2xhdGVfc2Vzc2lvbl9zdGF0ZRgPIAEoCBI6CgxleHBl",
+ "cmltZW50YWwYECABKAsyJC50ZW5zb3JmbG93LkNvbmZpZ1Byb3RvLkV4cGVy",
+ "aW1lbnRhbBoyChBEZXZpY2VDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2",
+ "YWx1ZRgCIAEoBToCOAEagwEKDEV4cGVyaW1lbnRhbBIfChdjb2xsZWN0aXZl",
+ "X2dyb3VwX2xlYWRlchgBIAEoCRIVCg1leGVjdXRvcl90eXBlGAMgASgJEhoK",
+ "EnJlY3ZfYnVmX21heF9jaHVuaxgEIAEoBRIZChF1c2VfbnVtYV9hZmZpbml0",
+ "eRgFIAEoCEoECAIQAyLYAwoKUnVuT3B0aW9ucxI2Cgt0cmFjZV9sZXZlbBgB",
+ "IAEoDjIhLnRlbnNvcmZsb3cuUnVuT3B0aW9ucy5UcmFjZUxldmVsEhUKDXRp",
+ "bWVvdXRfaW5fbXMYAiABKAMSHAoUaW50ZXJfb3BfdGhyZWFkX3Bvb2wYAyAB",
+ "KAUSHwoXb3V0cHV0X3BhcnRpdGlvbl9ncmFwaHMYBSABKAgSLwoNZGVidWdf",
+ "b3B0aW9ucxgGIAEoCzIYLnRlbnNvcmZsb3cuRGVidWdPcHRpb25zEioKInJl",
+ "cG9ydF90ZW5zb3JfYWxsb2NhdGlvbnNfdXBvbl9vb20YByABKAgSOQoMZXhw",
+ "ZXJpbWVudGFsGAggASgLMiMudGVuc29yZmxvdy5SdW5PcHRpb25zLkV4cGVy",
+ "aW1lbnRhbBpKCgxFeHBlcmltZW50YWwSHAoUY29sbGVjdGl2ZV9ncmFwaF9r",
+ "ZXkYASABKAMSHAoUdXNlX3J1bl9oYW5kbGVyX3Bvb2wYAiABKAgiUgoKVHJh",
+ "Y2VMZXZlbBIMCghOT19UUkFDRRAAEhIKDlNPRlRXQVJFX1RSQUNFEAESEgoO",
+ "SEFSRFdBUkVfVFJBQ0UQAhIOCgpGVUxMX1RSQUNFEANKBAgEEAUilgEKC1J1",
+ "bk1ldGFkYXRhEikKCnN0ZXBfc3RhdHMYASABKAsyFS50ZW5zb3JmbG93LlN0",
+ "ZXBTdGF0cxIsCgpjb3N0X2dyYXBoGAIgASgLMhgudGVuc29yZmxvdy5Db3N0",
+ "R3JhcGhEZWYSLgoQcGFydGl0aW9uX2dyYXBocxgDIAMoCzIULnRlbnNvcmZs",
+ "b3cuR3JhcGhEZWYiOgoQVGVuc29yQ29ubmVjdGlvbhITCgtmcm9tX3RlbnNv",
+ "chgBIAEoCRIRCgl0b190ZW5zb3IYAiABKAkisAMKD0NhbGxhYmxlT3B0aW9u",
+ "cxIMCgRmZWVkGAEgAygJEg0KBWZldGNoGAIgAygJEg4KBnRhcmdldBgDIAMo",
+ "CRIrCgtydW5fb3B0aW9ucxgEIAEoCzIWLnRlbnNvcmZsb3cuUnVuT3B0aW9u",
+ "cxI3ChF0ZW5zb3JfY29ubmVjdGlvbhgFIAMoCzIcLnRlbnNvcmZsb3cuVGVu",
+ "c29yQ29ubmVjdGlvbhJCCgxmZWVkX2RldmljZXMYBiADKAsyLC50ZW5zb3Jm",
+ "bG93LkNhbGxhYmxlT3B0aW9ucy5GZWVkRGV2aWNlc0VudHJ5EkQKDWZldGNo",
+ "X2RldmljZXMYByADKAsyLS50ZW5zb3JmbG93LkNhbGxhYmxlT3B0aW9ucy5G",
+ "ZXRjaERldmljZXNFbnRyeRIXCg9mZXRjaF9za2lwX3N5bmMYCCABKAgaMgoQ",
+ "RmVlZERldmljZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6",
+ "AjgBGjMKEUZldGNoRGV2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1",
+ "ZRgCIAEoCToCOAFCLQoYb3JnLnRlbnNvcmZsb3cuZnJhbWV3b3JrQgxDb25m",
+ "aWdQcm90b3NQAfgBAWIGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tensorflow.CostGraphReflection.Descriptor, global::Tensorflow.GraphReflection.Descriptor, global::Tensorflow.StepStatsReflection.Descriptor, global::Tensorflow.DebugReflection.Descriptor, global::Tensorflow.ClusterReflection.Descriptor, global::Tensorflow.RewriterConfigReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.GPUOptions), global::Tensorflow.GPUOptions.Parser, new[]{ "PerProcessGpuMemoryFraction", "AllowGrowth", "AllocatorType", "DeferredDeletionBytes", "VisibleDeviceList", "PollingActiveDelayUsecs", "PollingInactiveDelayMsecs", "ForceGpuCompatible", "Experimental" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.GPUOptions.Types.Experimental), global::Tensorflow.GPUOptions.Types.Experimental.Parser, new[]{ "VirtualDevices", "UseUnifiedMemory", "NumDevToDevCopyStreams", "CollectiveRingOrder" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.GPUOptions.Types.Experimental.Types.VirtualDevices), global::Tensorflow.GPUOptions.Types.Experimental.Types.VirtualDevices.Parser, new[]{ "MemoryLimitMb" }, null, null, null)})}),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.OptimizerOptions), global::Tensorflow.OptimizerOptions.Parser, new[]{ "DoCommonSubexpressionElimination", "DoConstantFolding", "MaxFoldedConstantInBytes", "DoFunctionInlining", "OptLevel", "GlobalJitLevel" }, null, new[]{ typeof(global::Tensorflow.OptimizerOptions.Types.Level), typeof(global::Tensorflow.OptimizerOptions.Types.GlobalJitLevel) }, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.GraphOptions), global::Tensorflow.GraphOptions.Parser, new[]{ "EnableRecvScheduling", "OptimizerOptions", "BuildCostModel", "BuildCostModelAfter", "InferShapes", "PlacePrunedGraph", "EnableBfloat16Sendrecv", "TimelineStep", "RewriteOptions" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ThreadPoolOptionProto), global::Tensorflow.ThreadPoolOptionProto.Parser, new[]{ "NumThreads", "GlobalName" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.RPCOptions), global::Tensorflow.RPCOptions.Parser, new[]{ "UseRpcForInprocessMaster", "CompressionAlgorithm", "CompressionLevel" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ConfigProto), global::Tensorflow.ConfigProto.Parser, new[]{ "DeviceCount", "IntraOpParallelismThreads", "InterOpParallelismThreads", "UsePerSessionThreads", "SessionInterOpThreadPool", "PlacementPeriod", "DeviceFilters", "GpuOptions", "AllowSoftPlacement", "LogDevicePlacement", "GraphOptions", "OperationTimeoutInMs", "RpcOptions", "ClusterDef", "IsolateSessionState", "Experimental" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.ConfigProto.Types.Experimental), global::Tensorflow.ConfigProto.Types.Experimental.Parser, new[]{ "CollectiveGroupLeader", "ExecutorType", "RecvBufMaxChunk", "UseNumaAffinity" }, null, null, null)}),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.RunOptions), global::Tensorflow.RunOptions.Parser, new[]{ "TraceLevel", "TimeoutInMs", "InterOpThreadPool", "OutputPartitionGraphs", "DebugOptions", "ReportTensorAllocationsUponOom", "Experimental" }, null, new[]{ typeof(global::Tensorflow.RunOptions.Types.TraceLevel) }, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.RunOptions.Types.Experimental), global::Tensorflow.RunOptions.Types.Experimental.Parser, new[]{ "CollectiveGraphKey", "UseRunHandlerPool" }, null, null, null)}),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.RunMetadata), global::Tensorflow.RunMetadata.Parser, new[]{ "StepStats", "CostGraph", "PartitionGraphs" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.TensorConnection), global::Tensorflow.TensorConnection.Parser, new[]{ "FromTensor", "ToTensor" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.CallableOptions), global::Tensorflow.CallableOptions.Parser, new[]{ "Feed", "Fetch", "Target", "RunOptions", "TensorConnection", "FeedDevices", "FetchDevices", "FetchSkipSync" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, })
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class GPUOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GPUOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GPUOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GPUOptions(GPUOptions other) : this() {
+ perProcessGpuMemoryFraction_ = other.perProcessGpuMemoryFraction_;
+ allowGrowth_ = other.allowGrowth_;
+ allocatorType_ = other.allocatorType_;
+ deferredDeletionBytes_ = other.deferredDeletionBytes_;
+ visibleDeviceList_ = other.visibleDeviceList_;
+ pollingActiveDelayUsecs_ = other.pollingActiveDelayUsecs_;
+ pollingInactiveDelayMsecs_ = other.pollingInactiveDelayMsecs_;
+ forceGpuCompatible_ = other.forceGpuCompatible_;
+ experimental_ = other.experimental_ != null ? other.experimental_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GPUOptions Clone() {
+ return new GPUOptions(this);
+ }
+
+ /// Field number for the "per_process_gpu_memory_fraction" field.
+ public const int PerProcessGpuMemoryFractionFieldNumber = 1;
+ private double perProcessGpuMemoryFraction_;
+ ///
+ /// Fraction of the available GPU memory to allocate for each process.
+ /// 1 means to allocate all of the GPU memory, 0.5 means the process
+ /// allocates up to ~50% of the available GPU memory.
+ ///
+ /// GPU memory is pre-allocated unless the allow_growth option is enabled.
+ ///
+ /// If greater than 1.0, uses CUDA unified memory to potentially oversubscribe
+ /// the amount of memory available on the GPU device by using host memory as a
+ /// swap space. Accessing memory not available on the device will be
+ /// significantly slower as that would require memory transfer between the host
+ /// and the device. Options to reduce the memory requirement should be
+ /// considered before enabling this option as this may come with a negative
+ /// performance impact. Oversubscription using the unified memory requires
+ /// Pascal class or newer GPUs and it is currently only supported on the Linux
+ /// operating system. See
+ /// https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-requirements
+ /// for the detailed requirements.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double PerProcessGpuMemoryFraction {
+ get { return perProcessGpuMemoryFraction_; }
+ set {
+ perProcessGpuMemoryFraction_ = value;
+ }
+ }
+
+ /// Field number for the "allow_growth" field.
+ public const int AllowGrowthFieldNumber = 4;
+ private bool allowGrowth_;
+ ///
+ /// If true, the allocator does not pre-allocate the entire specified
+ /// GPU memory region, instead starting small and growing as needed.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool AllowGrowth {
+ get { return allowGrowth_; }
+ set {
+ allowGrowth_ = value;
+ }
+ }
+
+ /// Field number for the "allocator_type" field.
+ public const int AllocatorTypeFieldNumber = 2;
+ private string allocatorType_ = "";
+ ///
+ /// The type of GPU allocation strategy to use.
+ ///
+ /// Allowed values:
+ /// "": The empty string (default) uses a system-chosen default
+ /// which may change over time.
+ ///
+ /// "BFC": A "Best-fit with coalescing" algorithm, simplified from a
+ /// version of dlmalloc.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string AllocatorType {
+ get { return allocatorType_; }
+ set {
+ allocatorType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "deferred_deletion_bytes" field.
+ public const int DeferredDeletionBytesFieldNumber = 3;
+ private long deferredDeletionBytes_;
+ ///
+ /// Delay deletion of up to this many bytes to reduce the number of
+ /// interactions with gpu driver code. If 0, the system chooses
+ /// a reasonable default (several MBs).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long DeferredDeletionBytes {
+ get { return deferredDeletionBytes_; }
+ set {
+ deferredDeletionBytes_ = value;
+ }
+ }
+
+ /// Field number for the "visible_device_list" field.
+ public const int VisibleDeviceListFieldNumber = 5;
+ private string visibleDeviceList_ = "";
+ ///
+ /// A comma-separated list of GPU ids that determines the 'visible'
+ /// to 'virtual' mapping of GPU devices. For example, if TensorFlow
+ /// can see 8 GPU devices in the process, and one wanted to map
+ /// visible GPU devices 5 and 3 as "/device:GPU:0", and "/device:GPU:1",
+ /// then one would specify this field as "5,3". This field is similar in
+ /// spirit to the CUDA_VISIBLE_DEVICES environment variable, except
+ /// it applies to the visible GPU devices in the process.
+ ///
+ /// NOTE:
+ /// 1. The GPU driver provides the process with the visible GPUs
+ /// in an order which is not guaranteed to have any correlation to
+ /// the *physical* GPU id in the machine. This field is used for
+ /// remapping "visible" to "virtual", which means this operates only
+ /// after the process starts. Users are required to use vendor
+ /// specific mechanisms (e.g., CUDA_VISIBLE_DEVICES) to control the
+ /// physical to visible device mapping prior to invoking TensorFlow.
+ /// 2. In the code, the ids in this list are also called "platform GPU id"s,
+ /// and the 'virtual' ids of GPU devices (i.e. the ids in the device
+ /// name "/device:GPU:<id>") are also called "TF GPU id"s. Please
+ /// refer to third_party/tensorflow/core/common_runtime/gpu/gpu_id.h
+ /// for more information.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string VisibleDeviceList {
+ get { return visibleDeviceList_; }
+ set {
+ visibleDeviceList_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "polling_active_delay_usecs" field.
+ public const int PollingActiveDelayUsecsFieldNumber = 6;
+ private int pollingActiveDelayUsecs_;
+ ///
+ /// In the event polling loop sleep this many microseconds between
+ /// PollEvents calls, when the queue is not empty. If value is not
+ /// set or set to 0, gets set to a non-zero default.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int PollingActiveDelayUsecs {
+ get { return pollingActiveDelayUsecs_; }
+ set {
+ pollingActiveDelayUsecs_ = value;
+ }
+ }
+
+ /// Field number for the "polling_inactive_delay_msecs" field.
+ public const int PollingInactiveDelayMsecsFieldNumber = 7;
+ private int pollingInactiveDelayMsecs_;
+ ///
+ /// This field is deprecated and ignored.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int PollingInactiveDelayMsecs {
+ get { return pollingInactiveDelayMsecs_; }
+ set {
+ pollingInactiveDelayMsecs_ = value;
+ }
+ }
+
+ /// Field number for the "force_gpu_compatible" field.
+ public const int ForceGpuCompatibleFieldNumber = 8;
+ private bool forceGpuCompatible_;
+ ///
+ /// Force all tensors to be gpu_compatible. On a GPU-enabled TensorFlow,
+ /// enabling this option forces all CPU tensors to be allocated with Cuda
+ /// pinned memory. Normally, TensorFlow will infer which tensors should be
+ /// allocated as the pinned memory. But in case where the inference is
+ /// incomplete, this option can significantly speed up the cross-device memory
+ /// copy performance as long as it fits the memory.
+ /// Note that this option is not something that should be
+ /// enabled by default for unknown or very large models, since all Cuda pinned
+ /// memory is unpageable, having too much pinned memory might negatively impact
+ /// the overall host system performance.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool ForceGpuCompatible {
+ get { return forceGpuCompatible_; }
+ set {
+ forceGpuCompatible_ = value;
+ }
+ }
+
+ /// Field number for the "experimental" field.
+ public const int ExperimentalFieldNumber = 9;
+ private global::Tensorflow.GPUOptions.Types.Experimental experimental_;
+ ///
+ /// Everything inside experimental is subject to change and is not subject
+ /// to API stability guarantees in
+ /// https://www.tensorflow.org/guide/version_compat.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.GPUOptions.Types.Experimental Experimental {
+ get { return experimental_; }
+ set {
+ experimental_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as GPUOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(GPUOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(PerProcessGpuMemoryFraction, other.PerProcessGpuMemoryFraction)) return false;
+ if (AllowGrowth != other.AllowGrowth) return false;
+ if (AllocatorType != other.AllocatorType) return false;
+ if (DeferredDeletionBytes != other.DeferredDeletionBytes) return false;
+ if (VisibleDeviceList != other.VisibleDeviceList) return false;
+ if (PollingActiveDelayUsecs != other.PollingActiveDelayUsecs) return false;
+ if (PollingInactiveDelayMsecs != other.PollingInactiveDelayMsecs) return false;
+ if (ForceGpuCompatible != other.ForceGpuCompatible) return false;
+ if (!object.Equals(Experimental, other.Experimental)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (PerProcessGpuMemoryFraction != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(PerProcessGpuMemoryFraction);
+ if (AllowGrowth != false) hash ^= AllowGrowth.GetHashCode();
+ if (AllocatorType.Length != 0) hash ^= AllocatorType.GetHashCode();
+ if (DeferredDeletionBytes != 0L) hash ^= DeferredDeletionBytes.GetHashCode();
+ if (VisibleDeviceList.Length != 0) hash ^= VisibleDeviceList.GetHashCode();
+ if (PollingActiveDelayUsecs != 0) hash ^= PollingActiveDelayUsecs.GetHashCode();
+ if (PollingInactiveDelayMsecs != 0) hash ^= PollingInactiveDelayMsecs.GetHashCode();
+ if (ForceGpuCompatible != false) hash ^= ForceGpuCompatible.GetHashCode();
+ if (experimental_ != null) hash ^= Experimental.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (PerProcessGpuMemoryFraction != 0D) {
+ output.WriteRawTag(9);
+ output.WriteDouble(PerProcessGpuMemoryFraction);
+ }
+ if (AllocatorType.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(AllocatorType);
+ }
+ if (DeferredDeletionBytes != 0L) {
+ output.WriteRawTag(24);
+ output.WriteInt64(DeferredDeletionBytes);
+ }
+ if (AllowGrowth != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(AllowGrowth);
+ }
+ if (VisibleDeviceList.Length != 0) {
+ output.WriteRawTag(42);
+ output.WriteString(VisibleDeviceList);
+ }
+ if (PollingActiveDelayUsecs != 0) {
+ output.WriteRawTag(48);
+ output.WriteInt32(PollingActiveDelayUsecs);
+ }
+ if (PollingInactiveDelayMsecs != 0) {
+ output.WriteRawTag(56);
+ output.WriteInt32(PollingInactiveDelayMsecs);
+ }
+ if (ForceGpuCompatible != false) {
+ output.WriteRawTag(64);
+ output.WriteBool(ForceGpuCompatible);
+ }
+ if (experimental_ != null) {
+ output.WriteRawTag(74);
+ output.WriteMessage(Experimental);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (PerProcessGpuMemoryFraction != 0D) {
+ size += 1 + 8;
+ }
+ if (AllowGrowth != false) {
+ size += 1 + 1;
+ }
+ if (AllocatorType.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(AllocatorType);
+ }
+ if (DeferredDeletionBytes != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(DeferredDeletionBytes);
+ }
+ if (VisibleDeviceList.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(VisibleDeviceList);
+ }
+ if (PollingActiveDelayUsecs != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(PollingActiveDelayUsecs);
+ }
+ if (PollingInactiveDelayMsecs != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(PollingInactiveDelayMsecs);
+ }
+ if (ForceGpuCompatible != false) {
+ size += 1 + 1;
+ }
+ if (experimental_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Experimental);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(GPUOptions other) {
+ if (other == null) {
+ return;
+ }
+ if (other.PerProcessGpuMemoryFraction != 0D) {
+ PerProcessGpuMemoryFraction = other.PerProcessGpuMemoryFraction;
+ }
+ if (other.AllowGrowth != false) {
+ AllowGrowth = other.AllowGrowth;
+ }
+ if (other.AllocatorType.Length != 0) {
+ AllocatorType = other.AllocatorType;
+ }
+ if (other.DeferredDeletionBytes != 0L) {
+ DeferredDeletionBytes = other.DeferredDeletionBytes;
+ }
+ if (other.VisibleDeviceList.Length != 0) {
+ VisibleDeviceList = other.VisibleDeviceList;
+ }
+ if (other.PollingActiveDelayUsecs != 0) {
+ PollingActiveDelayUsecs = other.PollingActiveDelayUsecs;
+ }
+ if (other.PollingInactiveDelayMsecs != 0) {
+ PollingInactiveDelayMsecs = other.PollingInactiveDelayMsecs;
+ }
+ if (other.ForceGpuCompatible != false) {
+ ForceGpuCompatible = other.ForceGpuCompatible;
+ }
+ if (other.experimental_ != null) {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.GPUOptions.Types.Experimental();
+ }
+ Experimental.MergeFrom(other.Experimental);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 9: {
+ PerProcessGpuMemoryFraction = input.ReadDouble();
+ break;
+ }
+ case 18: {
+ AllocatorType = input.ReadString();
+ break;
+ }
+ case 24: {
+ DeferredDeletionBytes = input.ReadInt64();
+ break;
+ }
+ case 32: {
+ AllowGrowth = input.ReadBool();
+ break;
+ }
+ case 42: {
+ VisibleDeviceList = input.ReadString();
+ break;
+ }
+ case 48: {
+ PollingActiveDelayUsecs = input.ReadInt32();
+ break;
+ }
+ case 56: {
+ PollingInactiveDelayMsecs = input.ReadInt32();
+ break;
+ }
+ case 64: {
+ ForceGpuCompatible = input.ReadBool();
+ break;
+ }
+ case 74: {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.GPUOptions.Types.Experimental();
+ }
+ input.ReadMessage(experimental_);
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the GPUOptions message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ public sealed partial class Experimental : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Experimental());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.GPUOptions.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental(Experimental other) : this() {
+ virtualDevices_ = other.virtualDevices_.Clone();
+ useUnifiedMemory_ = other.useUnifiedMemory_;
+ numDevToDevCopyStreams_ = other.numDevToDevCopyStreams_;
+ collectiveRingOrder_ = other.collectiveRingOrder_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental Clone() {
+ return new Experimental(this);
+ }
+
+ /// Field number for the "virtual_devices" field.
+ public const int VirtualDevicesFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_virtualDevices_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.GPUOptions.Types.Experimental.Types.VirtualDevices.Parser);
+ private readonly pbc::RepeatedField virtualDevices_ = new pbc::RepeatedField();
+ ///
+ /// The multi virtual device settings. If empty (not set), it will create
+ /// single virtual device on each visible GPU, according to the settings
+ /// in "visible_device_list" above. Otherwise, the number of elements in the
+ /// list must be the same as the number of visible GPUs (after
+ /// "visible_device_list" filtering if it is set), and the string represented
+ /// device names (e.g. /device:GPU:<id>) will refer to the virtual
+ /// devices and have the <id> field assigned sequentially starting from 0,
+ /// according to the order they appear in this list and the "memory_limit"
+ /// list inside each element. For example,
+ /// visible_device_list = "1,0"
+ /// virtual_devices { memory_limit: 1GB memory_limit: 2GB }
+ /// virtual_devices {}
+ /// will create three virtual devices as:
+ /// /device:GPU:0 -> visible GPU 1 with 1GB memory
+ /// /device:GPU:1 -> visible GPU 1 with 2GB memory
+ /// /device:GPU:2 -> visible GPU 0 with all available memory
+ ///
+ /// NOTE:
+ /// 1. It's invalid to set both this and "per_process_gpu_memory_fraction"
+ /// at the same time.
+ /// 2. Currently this setting is per-process, not per-session. Using
+ /// different settings in different sessions within same process will
+ /// result in undefined behavior.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField VirtualDevices {
+ get { return virtualDevices_; }
+ }
+
+ /// Field number for the "use_unified_memory" field.
+ public const int UseUnifiedMemoryFieldNumber = 2;
+ private bool useUnifiedMemory_;
+ ///
+ /// If true, uses CUDA unified memory for memory allocations. If
+ /// per_process_gpu_memory_fraction option is greater than 1.0, then unified
+ /// memory is used regardless of the value for this field. See comments for
+ /// per_process_gpu_memory_fraction field for more details and requirements
+ /// of the unified memory. This option is useful to oversubscribe memory if
+ /// multiple processes are sharing a single GPU while individually using less
+ /// than 1.0 per process memory fraction.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool UseUnifiedMemory {
+ get { return useUnifiedMemory_; }
+ set {
+ useUnifiedMemory_ = value;
+ }
+ }
+
+ /// Field number for the "num_dev_to_dev_copy_streams" field.
+ public const int NumDevToDevCopyStreamsFieldNumber = 3;
+ private int numDevToDevCopyStreams_;
+ ///
+ /// If > 1, the number of device-to-device copy streams to create
+ /// for each GPUDevice. Default value is 0, which is automatically
+ /// converted to 1.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int NumDevToDevCopyStreams {
+ get { return numDevToDevCopyStreams_; }
+ set {
+ numDevToDevCopyStreams_ = value;
+ }
+ }
+
+ /// Field number for the "collective_ring_order" field.
+ public const int CollectiveRingOrderFieldNumber = 4;
+ private string collectiveRingOrder_ = "";
+ ///
+ /// If non-empty, defines a good GPU ring order on a single worker based on
+ /// device interconnect. This assumes that all workers have the same GPU
+ /// topology. Specify as a comma-separated string, e.g. "3,2,1,0,7,6,5,4".
+ /// This ring order is used by the RingReducer implementation of
+ /// CollectiveReduce, and serves as an override to automatic ring order
+ /// generation in OrderTaskDeviceMap() during CollectiveParam resolution.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string CollectiveRingOrder {
+ get { return collectiveRingOrder_; }
+ set {
+ collectiveRingOrder_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Experimental);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Experimental other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!virtualDevices_.Equals(other.virtualDevices_)) return false;
+ if (UseUnifiedMemory != other.UseUnifiedMemory) return false;
+ if (NumDevToDevCopyStreams != other.NumDevToDevCopyStreams) return false;
+ if (CollectiveRingOrder != other.CollectiveRingOrder) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= virtualDevices_.GetHashCode();
+ if (UseUnifiedMemory != false) hash ^= UseUnifiedMemory.GetHashCode();
+ if (NumDevToDevCopyStreams != 0) hash ^= NumDevToDevCopyStreams.GetHashCode();
+ if (CollectiveRingOrder.Length != 0) hash ^= CollectiveRingOrder.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ virtualDevices_.WriteTo(output, _repeated_virtualDevices_codec);
+ if (UseUnifiedMemory != false) {
+ output.WriteRawTag(16);
+ output.WriteBool(UseUnifiedMemory);
+ }
+ if (NumDevToDevCopyStreams != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(NumDevToDevCopyStreams);
+ }
+ if (CollectiveRingOrder.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(CollectiveRingOrder);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += virtualDevices_.CalculateSize(_repeated_virtualDevices_codec);
+ if (UseUnifiedMemory != false) {
+ size += 1 + 1;
+ }
+ if (NumDevToDevCopyStreams != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumDevToDevCopyStreams);
+ }
+ if (CollectiveRingOrder.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(CollectiveRingOrder);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Experimental other) {
+ if (other == null) {
+ return;
+ }
+ virtualDevices_.Add(other.virtualDevices_);
+ if (other.UseUnifiedMemory != false) {
+ UseUnifiedMemory = other.UseUnifiedMemory;
+ }
+ if (other.NumDevToDevCopyStreams != 0) {
+ NumDevToDevCopyStreams = other.NumDevToDevCopyStreams;
+ }
+ if (other.CollectiveRingOrder.Length != 0) {
+ CollectiveRingOrder = other.CollectiveRingOrder;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ virtualDevices_.AddEntriesFrom(input, _repeated_virtualDevices_codec);
+ break;
+ }
+ case 16: {
+ UseUnifiedMemory = input.ReadBool();
+ break;
+ }
+ case 24: {
+ NumDevToDevCopyStreams = input.ReadInt32();
+ break;
+ }
+ case 34: {
+ CollectiveRingOrder = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the Experimental message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// Configuration for breaking down a visible GPU into multiple "virtual"
+ /// devices.
+ ///
+ public sealed partial class VirtualDevices : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new VirtualDevices());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.GPUOptions.Types.Experimental.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public VirtualDevices() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public VirtualDevices(VirtualDevices other) : this() {
+ memoryLimitMb_ = other.memoryLimitMb_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public VirtualDevices Clone() {
+ return new VirtualDevices(this);
+ }
+
+ /// Field number for the "memory_limit_mb" field.
+ public const int MemoryLimitMbFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_memoryLimitMb_codec
+ = pb::FieldCodec.ForFloat(10);
+ private readonly pbc::RepeatedField memoryLimitMb_ = new pbc::RepeatedField();
+ ///
+ /// Per "virtual" device memory limit, in MB. The number of elements in
+ /// the list is the number of virtual devices to create on the
+ /// corresponding visible GPU (see "virtual_devices" below).
+ /// If empty, it will create single virtual device taking all available
+ /// memory from the device.
+ ///
+ /// For the concept of "visible" and "virtual" GPU, see the comments for
+ /// "visible_device_list" above for more information.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField MemoryLimitMb {
+ get { return memoryLimitMb_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as VirtualDevices);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(VirtualDevices other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!memoryLimitMb_.Equals(other.memoryLimitMb_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= memoryLimitMb_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ memoryLimitMb_.WriteTo(output, _repeated_memoryLimitMb_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += memoryLimitMb_.CalculateSize(_repeated_memoryLimitMb_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(VirtualDevices other) {
+ if (other == null) {
+ return;
+ }
+ memoryLimitMb_.Add(other.memoryLimitMb_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10:
+ case 13: {
+ memoryLimitMb_.AddEntriesFrom(input, _repeated_memoryLimitMb_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ ///
+ /// Options passed to the graph optimizer
+ ///
+ public sealed partial class OptimizerOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new OptimizerOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OptimizerOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OptimizerOptions(OptimizerOptions other) : this() {
+ doCommonSubexpressionElimination_ = other.doCommonSubexpressionElimination_;
+ doConstantFolding_ = other.doConstantFolding_;
+ maxFoldedConstantInBytes_ = other.maxFoldedConstantInBytes_;
+ doFunctionInlining_ = other.doFunctionInlining_;
+ optLevel_ = other.optLevel_;
+ globalJitLevel_ = other.globalJitLevel_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OptimizerOptions Clone() {
+ return new OptimizerOptions(this);
+ }
+
+ /// Field number for the "do_common_subexpression_elimination" field.
+ public const int DoCommonSubexpressionEliminationFieldNumber = 1;
+ private bool doCommonSubexpressionElimination_;
+ ///
+ /// If true, optimize the graph using common subexpression elimination.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool DoCommonSubexpressionElimination {
+ get { return doCommonSubexpressionElimination_; }
+ set {
+ doCommonSubexpressionElimination_ = value;
+ }
+ }
+
+ /// Field number for the "do_constant_folding" field.
+ public const int DoConstantFoldingFieldNumber = 2;
+ private bool doConstantFolding_;
+ ///
+ /// If true, perform constant folding optimization on the graph.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool DoConstantFolding {
+ get { return doConstantFolding_; }
+ set {
+ doConstantFolding_ = value;
+ }
+ }
+
+ /// Field number for the "max_folded_constant_in_bytes" field.
+ public const int MaxFoldedConstantInBytesFieldNumber = 6;
+ private long maxFoldedConstantInBytes_;
+ ///
+ /// Constant folding optimization replaces tensors whose values can be
+ /// predetermined, with constant nodes. To avoid inserting too large constants,
+ /// the size of each constant created can be limited. If this value is zero, a
+ /// default limit of 10 MiB will be applied. If constant folding optimization
+ /// is disabled, this value is ignored.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long MaxFoldedConstantInBytes {
+ get { return maxFoldedConstantInBytes_; }
+ set {
+ maxFoldedConstantInBytes_ = value;
+ }
+ }
+
+ /// Field number for the "do_function_inlining" field.
+ public const int DoFunctionInliningFieldNumber = 4;
+ private bool doFunctionInlining_;
+ ///
+ /// If true, perform function inlining on the graph.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool DoFunctionInlining {
+ get { return doFunctionInlining_; }
+ set {
+ doFunctionInlining_ = value;
+ }
+ }
+
+ /// Field number for the "opt_level" field.
+ public const int OptLevelFieldNumber = 3;
+ private global::Tensorflow.OptimizerOptions.Types.Level optLevel_ = 0;
+ ///
+ /// Overall optimization level. The actual optimizations applied will be the
+ /// logical OR of the flags that this level implies and any flags already set.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.OptimizerOptions.Types.Level OptLevel {
+ get { return optLevel_; }
+ set {
+ optLevel_ = value;
+ }
+ }
+
+ /// Field number for the "global_jit_level" field.
+ public const int GlobalJitLevelFieldNumber = 5;
+ private global::Tensorflow.OptimizerOptions.Types.GlobalJitLevel globalJitLevel_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.OptimizerOptions.Types.GlobalJitLevel GlobalJitLevel {
+ get { return globalJitLevel_; }
+ set {
+ globalJitLevel_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as OptimizerOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(OptimizerOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (DoCommonSubexpressionElimination != other.DoCommonSubexpressionElimination) return false;
+ if (DoConstantFolding != other.DoConstantFolding) return false;
+ if (MaxFoldedConstantInBytes != other.MaxFoldedConstantInBytes) return false;
+ if (DoFunctionInlining != other.DoFunctionInlining) return false;
+ if (OptLevel != other.OptLevel) return false;
+ if (GlobalJitLevel != other.GlobalJitLevel) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (DoCommonSubexpressionElimination != false) hash ^= DoCommonSubexpressionElimination.GetHashCode();
+ if (DoConstantFolding != false) hash ^= DoConstantFolding.GetHashCode();
+ if (MaxFoldedConstantInBytes != 0L) hash ^= MaxFoldedConstantInBytes.GetHashCode();
+ if (DoFunctionInlining != false) hash ^= DoFunctionInlining.GetHashCode();
+ if (OptLevel != 0) hash ^= OptLevel.GetHashCode();
+ if (GlobalJitLevel != 0) hash ^= GlobalJitLevel.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (DoCommonSubexpressionElimination != false) {
+ output.WriteRawTag(8);
+ output.WriteBool(DoCommonSubexpressionElimination);
+ }
+ if (DoConstantFolding != false) {
+ output.WriteRawTag(16);
+ output.WriteBool(DoConstantFolding);
+ }
+ if (OptLevel != 0) {
+ output.WriteRawTag(24);
+ output.WriteEnum((int) OptLevel);
+ }
+ if (DoFunctionInlining != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(DoFunctionInlining);
+ }
+ if (GlobalJitLevel != 0) {
+ output.WriteRawTag(40);
+ output.WriteEnum((int) GlobalJitLevel);
+ }
+ if (MaxFoldedConstantInBytes != 0L) {
+ output.WriteRawTag(48);
+ output.WriteInt64(MaxFoldedConstantInBytes);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (DoCommonSubexpressionElimination != false) {
+ size += 1 + 1;
+ }
+ if (DoConstantFolding != false) {
+ size += 1 + 1;
+ }
+ if (MaxFoldedConstantInBytes != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(MaxFoldedConstantInBytes);
+ }
+ if (DoFunctionInlining != false) {
+ size += 1 + 1;
+ }
+ if (OptLevel != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) OptLevel);
+ }
+ if (GlobalJitLevel != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) GlobalJitLevel);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(OptimizerOptions other) {
+ if (other == null) {
+ return;
+ }
+ if (other.DoCommonSubexpressionElimination != false) {
+ DoCommonSubexpressionElimination = other.DoCommonSubexpressionElimination;
+ }
+ if (other.DoConstantFolding != false) {
+ DoConstantFolding = other.DoConstantFolding;
+ }
+ if (other.MaxFoldedConstantInBytes != 0L) {
+ MaxFoldedConstantInBytes = other.MaxFoldedConstantInBytes;
+ }
+ if (other.DoFunctionInlining != false) {
+ DoFunctionInlining = other.DoFunctionInlining;
+ }
+ if (other.OptLevel != 0) {
+ OptLevel = other.OptLevel;
+ }
+ if (other.GlobalJitLevel != 0) {
+ GlobalJitLevel = other.GlobalJitLevel;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ DoCommonSubexpressionElimination = input.ReadBool();
+ break;
+ }
+ case 16: {
+ DoConstantFolding = input.ReadBool();
+ break;
+ }
+ case 24: {
+ optLevel_ = (global::Tensorflow.OptimizerOptions.Types.Level) input.ReadEnum();
+ break;
+ }
+ case 32: {
+ DoFunctionInlining = input.ReadBool();
+ break;
+ }
+ case 40: {
+ globalJitLevel_ = (global::Tensorflow.OptimizerOptions.Types.GlobalJitLevel) input.ReadEnum();
+ break;
+ }
+ case 48: {
+ MaxFoldedConstantInBytes = input.ReadInt64();
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the OptimizerOptions message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// Optimization level
+ ///
+ public enum Level {
+ ///
+ /// L1 is the default level.
+ /// Optimization performed at L1 :
+ /// 1. Common subexpression elimination
+ /// 2. Constant folding
+ ///
+ [pbr::OriginalName("L1")] L1 = 0,
+ ///
+ /// No optimizations
+ ///
+ [pbr::OriginalName("L0")] L0 = -1,
+ }
+
+ ///
+ /// Control the use of the compiler/jit. Experimental.
+ ///
+ public enum GlobalJitLevel {
+ ///
+ /// Default setting ("off" now, but later expected to be "on")
+ ///
+ [pbr::OriginalName("DEFAULT")] Default = 0,
+ [pbr::OriginalName("OFF")] Off = -1,
+ ///
+ /// The following settings turn on compilation, with higher values being
+ /// more aggressive. Higher values may reduce opportunities for parallelism
+ /// and may use more memory. (At present, there is no distinction, but this
+ /// is expected to change.)
+ ///
+ [pbr::OriginalName("ON_1")] On1 = 1,
+ [pbr::OriginalName("ON_2")] On2 = 2,
+ }
+
+ }
+ #endregion
+
+ }
+
+ public sealed partial class GraphOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GraphOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[2]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GraphOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GraphOptions(GraphOptions other) : this() {
+ enableRecvScheduling_ = other.enableRecvScheduling_;
+ optimizerOptions_ = other.optimizerOptions_ != null ? other.optimizerOptions_.Clone() : null;
+ buildCostModel_ = other.buildCostModel_;
+ buildCostModelAfter_ = other.buildCostModelAfter_;
+ inferShapes_ = other.inferShapes_;
+ placePrunedGraph_ = other.placePrunedGraph_;
+ enableBfloat16Sendrecv_ = other.enableBfloat16Sendrecv_;
+ timelineStep_ = other.timelineStep_;
+ rewriteOptions_ = other.rewriteOptions_ != null ? other.rewriteOptions_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public GraphOptions Clone() {
+ return new GraphOptions(this);
+ }
+
+ /// Field number for the "enable_recv_scheduling" field.
+ public const int EnableRecvSchedulingFieldNumber = 2;
+ private bool enableRecvScheduling_;
+ ///
+ /// If true, use control flow to schedule the activation of Recv nodes.
+ /// (Currently ignored.)
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool EnableRecvScheduling {
+ get { return enableRecvScheduling_; }
+ set {
+ enableRecvScheduling_ = value;
+ }
+ }
+
+ /// Field number for the "optimizer_options" field.
+ public const int OptimizerOptionsFieldNumber = 3;
+ private global::Tensorflow.OptimizerOptions optimizerOptions_;
+ ///
+ /// Options controlling how graph is optimized.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.OptimizerOptions OptimizerOptions {
+ get { return optimizerOptions_; }
+ set {
+ optimizerOptions_ = value;
+ }
+ }
+
+ /// Field number for the "build_cost_model" field.
+ public const int BuildCostModelFieldNumber = 4;
+ private long buildCostModel_;
+ ///
+ /// The number of steps to run before returning a cost model detailing
+ /// the memory usage and performance of each node of the graph. 0 means
+ /// no cost model.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long BuildCostModel {
+ get { return buildCostModel_; }
+ set {
+ buildCostModel_ = value;
+ }
+ }
+
+ /// Field number for the "build_cost_model_after" field.
+ public const int BuildCostModelAfterFieldNumber = 9;
+ private long buildCostModelAfter_;
+ ///
+ /// The number of steps to skip before collecting statistics for the
+ /// cost model.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long BuildCostModelAfter {
+ get { return buildCostModelAfter_; }
+ set {
+ buildCostModelAfter_ = value;
+ }
+ }
+
+ /// Field number for the "infer_shapes" field.
+ public const int InferShapesFieldNumber = 5;
+ private bool inferShapes_;
+ ///
+ /// Annotate each Node with Op output shape data, to the extent it can
+ /// be statically inferred.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool InferShapes {
+ get { return inferShapes_; }
+ set {
+ inferShapes_ = value;
+ }
+ }
+
+ /// Field number for the "place_pruned_graph" field.
+ public const int PlacePrunedGraphFieldNumber = 6;
+ private bool placePrunedGraph_;
+ ///
+ /// Only place the subgraphs that are run, rather than the entire graph.
+ ///
+ /// This is useful for interactive graph building, where one might
+ /// produce graphs that cannot be placed during the debugging
+ /// process. In particular, it allows the client to continue work in
+ /// a session after adding a node to a graph whose placement
+ /// constraints are unsatisfiable.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool PlacePrunedGraph {
+ get { return placePrunedGraph_; }
+ set {
+ placePrunedGraph_ = value;
+ }
+ }
+
+ /// Field number for the "enable_bfloat16_sendrecv" field.
+ public const int EnableBfloat16SendrecvFieldNumber = 7;
+ private bool enableBfloat16Sendrecv_;
+ ///
+ /// If true, transfer float values between processes as bfloat16.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool EnableBfloat16Sendrecv {
+ get { return enableBfloat16Sendrecv_; }
+ set {
+ enableBfloat16Sendrecv_ = value;
+ }
+ }
+
+ /// Field number for the "timeline_step" field.
+ public const int TimelineStepFieldNumber = 8;
+ private int timelineStep_;
+ ///
+ /// If > 0, record a timeline every this many steps.
+ /// EXPERIMENTAL: This currently has no effect in MasterSession.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int TimelineStep {
+ get { return timelineStep_; }
+ set {
+ timelineStep_ = value;
+ }
+ }
+
+ /// Field number for the "rewrite_options" field.
+ public const int RewriteOptionsFieldNumber = 10;
+ private global::Tensorflow.RewriterConfig rewriteOptions_;
+ ///
+ /// Options that control the type and amount of graph rewriting.
+ /// Not currently configurable via the public Python API (i.e. there is no API
+ /// stability guarantee if you import RewriterConfig explicitly).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.RewriterConfig RewriteOptions {
+ get { return rewriteOptions_; }
+ set {
+ rewriteOptions_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as GraphOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(GraphOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (EnableRecvScheduling != other.EnableRecvScheduling) return false;
+ if (!object.Equals(OptimizerOptions, other.OptimizerOptions)) return false;
+ if (BuildCostModel != other.BuildCostModel) return false;
+ if (BuildCostModelAfter != other.BuildCostModelAfter) return false;
+ if (InferShapes != other.InferShapes) return false;
+ if (PlacePrunedGraph != other.PlacePrunedGraph) return false;
+ if (EnableBfloat16Sendrecv != other.EnableBfloat16Sendrecv) return false;
+ if (TimelineStep != other.TimelineStep) return false;
+ if (!object.Equals(RewriteOptions, other.RewriteOptions)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (EnableRecvScheduling != false) hash ^= EnableRecvScheduling.GetHashCode();
+ if (optimizerOptions_ != null) hash ^= OptimizerOptions.GetHashCode();
+ if (BuildCostModel != 0L) hash ^= BuildCostModel.GetHashCode();
+ if (BuildCostModelAfter != 0L) hash ^= BuildCostModelAfter.GetHashCode();
+ if (InferShapes != false) hash ^= InferShapes.GetHashCode();
+ if (PlacePrunedGraph != false) hash ^= PlacePrunedGraph.GetHashCode();
+ if (EnableBfloat16Sendrecv != false) hash ^= EnableBfloat16Sendrecv.GetHashCode();
+ if (TimelineStep != 0) hash ^= TimelineStep.GetHashCode();
+ if (rewriteOptions_ != null) hash ^= RewriteOptions.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (EnableRecvScheduling != false) {
+ output.WriteRawTag(16);
+ output.WriteBool(EnableRecvScheduling);
+ }
+ if (optimizerOptions_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(OptimizerOptions);
+ }
+ if (BuildCostModel != 0L) {
+ output.WriteRawTag(32);
+ output.WriteInt64(BuildCostModel);
+ }
+ if (InferShapes != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(InferShapes);
+ }
+ if (PlacePrunedGraph != false) {
+ output.WriteRawTag(48);
+ output.WriteBool(PlacePrunedGraph);
+ }
+ if (EnableBfloat16Sendrecv != false) {
+ output.WriteRawTag(56);
+ output.WriteBool(EnableBfloat16Sendrecv);
+ }
+ if (TimelineStep != 0) {
+ output.WriteRawTag(64);
+ output.WriteInt32(TimelineStep);
+ }
+ if (BuildCostModelAfter != 0L) {
+ output.WriteRawTag(72);
+ output.WriteInt64(BuildCostModelAfter);
+ }
+ if (rewriteOptions_ != null) {
+ output.WriteRawTag(82);
+ output.WriteMessage(RewriteOptions);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (EnableRecvScheduling != false) {
+ size += 1 + 1;
+ }
+ if (optimizerOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(OptimizerOptions);
+ }
+ if (BuildCostModel != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(BuildCostModel);
+ }
+ if (BuildCostModelAfter != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(BuildCostModelAfter);
+ }
+ if (InferShapes != false) {
+ size += 1 + 1;
+ }
+ if (PlacePrunedGraph != false) {
+ size += 1 + 1;
+ }
+ if (EnableBfloat16Sendrecv != false) {
+ size += 1 + 1;
+ }
+ if (TimelineStep != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(TimelineStep);
+ }
+ if (rewriteOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(RewriteOptions);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(GraphOptions other) {
+ if (other == null) {
+ return;
+ }
+ if (other.EnableRecvScheduling != false) {
+ EnableRecvScheduling = other.EnableRecvScheduling;
+ }
+ if (other.optimizerOptions_ != null) {
+ if (optimizerOptions_ == null) {
+ optimizerOptions_ = new global::Tensorflow.OptimizerOptions();
+ }
+ OptimizerOptions.MergeFrom(other.OptimizerOptions);
+ }
+ if (other.BuildCostModel != 0L) {
+ BuildCostModel = other.BuildCostModel;
+ }
+ if (other.BuildCostModelAfter != 0L) {
+ BuildCostModelAfter = other.BuildCostModelAfter;
+ }
+ if (other.InferShapes != false) {
+ InferShapes = other.InferShapes;
+ }
+ if (other.PlacePrunedGraph != false) {
+ PlacePrunedGraph = other.PlacePrunedGraph;
+ }
+ if (other.EnableBfloat16Sendrecv != false) {
+ EnableBfloat16Sendrecv = other.EnableBfloat16Sendrecv;
+ }
+ if (other.TimelineStep != 0) {
+ TimelineStep = other.TimelineStep;
+ }
+ if (other.rewriteOptions_ != null) {
+ if (rewriteOptions_ == null) {
+ rewriteOptions_ = new global::Tensorflow.RewriterConfig();
+ }
+ RewriteOptions.MergeFrom(other.RewriteOptions);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 16: {
+ EnableRecvScheduling = input.ReadBool();
+ break;
+ }
+ case 26: {
+ if (optimizerOptions_ == null) {
+ optimizerOptions_ = new global::Tensorflow.OptimizerOptions();
+ }
+ input.ReadMessage(optimizerOptions_);
+ break;
+ }
+ case 32: {
+ BuildCostModel = input.ReadInt64();
+ break;
+ }
+ case 40: {
+ InferShapes = input.ReadBool();
+ break;
+ }
+ case 48: {
+ PlacePrunedGraph = input.ReadBool();
+ break;
+ }
+ case 56: {
+ EnableBfloat16Sendrecv = input.ReadBool();
+ break;
+ }
+ case 64: {
+ TimelineStep = input.ReadInt32();
+ break;
+ }
+ case 72: {
+ BuildCostModelAfter = input.ReadInt64();
+ break;
+ }
+ case 82: {
+ if (rewriteOptions_ == null) {
+ rewriteOptions_ = new global::Tensorflow.RewriterConfig();
+ }
+ input.ReadMessage(rewriteOptions_);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class ThreadPoolOptionProto : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ThreadPoolOptionProto());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[3]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ThreadPoolOptionProto() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ThreadPoolOptionProto(ThreadPoolOptionProto other) : this() {
+ numThreads_ = other.numThreads_;
+ globalName_ = other.globalName_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ThreadPoolOptionProto Clone() {
+ return new ThreadPoolOptionProto(this);
+ }
+
+ /// Field number for the "num_threads" field.
+ public const int NumThreadsFieldNumber = 1;
+ private int numThreads_;
+ ///
+ /// The number of threads in the pool.
+ ///
+ /// 0 means the system picks a value based on where this option proto is used
+ /// (see the declaration of the specific field for more info).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int NumThreads {
+ get { return numThreads_; }
+ set {
+ numThreads_ = value;
+ }
+ }
+
+ /// Field number for the "global_name" field.
+ public const int GlobalNameFieldNumber = 2;
+ private string globalName_ = "";
+ ///
+ /// The global name of the threadpool.
+ ///
+ /// If empty, then the threadpool is made and used according to the scope it's
+ /// in - e.g., for a session threadpool, it is used by that session only.
+ ///
+ /// If non-empty, then:
+ /// - a global threadpool associated with this name is looked
+ /// up or created. This allows, for example, sharing one threadpool across
+ /// many sessions (e.g., like the default behavior, if
+ /// inter_op_parallelism_threads is not configured), but still partitioning
+ /// into a large and small pool.
+ /// - if the threadpool for this global_name already exists, then it is an
+ /// error if the existing pool was created using a different num_threads
+ /// value as is specified on this call.
+ /// - threadpools created this way are never garbage collected.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string GlobalName {
+ get { return globalName_; }
+ set {
+ globalName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ThreadPoolOptionProto);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ThreadPoolOptionProto other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (NumThreads != other.NumThreads) return false;
+ if (GlobalName != other.GlobalName) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (NumThreads != 0) hash ^= NumThreads.GetHashCode();
+ if (GlobalName.Length != 0) hash ^= GlobalName.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (NumThreads != 0) {
+ output.WriteRawTag(8);
+ output.WriteInt32(NumThreads);
+ }
+ if (GlobalName.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(GlobalName);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (NumThreads != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(NumThreads);
+ }
+ if (GlobalName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(GlobalName);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ThreadPoolOptionProto other) {
+ if (other == null) {
+ return;
+ }
+ if (other.NumThreads != 0) {
+ NumThreads = other.NumThreads;
+ }
+ if (other.GlobalName.Length != 0) {
+ GlobalName = other.GlobalName;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ NumThreads = input.ReadInt32();
+ break;
+ }
+ case 18: {
+ GlobalName = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class RPCOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new RPCOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[4]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RPCOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RPCOptions(RPCOptions other) : this() {
+ useRpcForInprocessMaster_ = other.useRpcForInprocessMaster_;
+ compressionAlgorithm_ = other.compressionAlgorithm_;
+ compressionLevel_ = other.compressionLevel_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RPCOptions Clone() {
+ return new RPCOptions(this);
+ }
+
+ /// Field number for the "use_rpc_for_inprocess_master" field.
+ public const int UseRpcForInprocessMasterFieldNumber = 1;
+ private bool useRpcForInprocessMaster_;
+ ///
+ /// If true, always use RPC to contact the session target.
+ ///
+ /// If false (the default option), TensorFlow may use an optimized
+ /// transport for client-master communication that avoids the RPC
+ /// stack. This option is primarily for used testing the RPC stack.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool UseRpcForInprocessMaster {
+ get { return useRpcForInprocessMaster_; }
+ set {
+ useRpcForInprocessMaster_ = value;
+ }
+ }
+
+ /// Field number for the "compression_algorithm" field.
+ public const int CompressionAlgorithmFieldNumber = 2;
+ private string compressionAlgorithm_ = "";
+ ///
+ /// The compression algorithm to be used. One of "deflate", "gzip".
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string CompressionAlgorithm {
+ get { return compressionAlgorithm_; }
+ set {
+ compressionAlgorithm_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "compression_level" field.
+ public const int CompressionLevelFieldNumber = 3;
+ private int compressionLevel_;
+ ///
+ /// If compression_algorithm is set, the compression level to be used.
+ /// From 0 (no compression), up to 3.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CompressionLevel {
+ get { return compressionLevel_; }
+ set {
+ compressionLevel_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as RPCOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(RPCOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (UseRpcForInprocessMaster != other.UseRpcForInprocessMaster) return false;
+ if (CompressionAlgorithm != other.CompressionAlgorithm) return false;
+ if (CompressionLevel != other.CompressionLevel) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (UseRpcForInprocessMaster != false) hash ^= UseRpcForInprocessMaster.GetHashCode();
+ if (CompressionAlgorithm.Length != 0) hash ^= CompressionAlgorithm.GetHashCode();
+ if (CompressionLevel != 0) hash ^= CompressionLevel.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (UseRpcForInprocessMaster != false) {
+ output.WriteRawTag(8);
+ output.WriteBool(UseRpcForInprocessMaster);
+ }
+ if (CompressionAlgorithm.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(CompressionAlgorithm);
+ }
+ if (CompressionLevel != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(CompressionLevel);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (UseRpcForInprocessMaster != false) {
+ size += 1 + 1;
+ }
+ if (CompressionAlgorithm.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(CompressionAlgorithm);
+ }
+ if (CompressionLevel != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(CompressionLevel);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(RPCOptions other) {
+ if (other == null) {
+ return;
+ }
+ if (other.UseRpcForInprocessMaster != false) {
+ UseRpcForInprocessMaster = other.UseRpcForInprocessMaster;
+ }
+ if (other.CompressionAlgorithm.Length != 0) {
+ CompressionAlgorithm = other.CompressionAlgorithm;
+ }
+ if (other.CompressionLevel != 0) {
+ CompressionLevel = other.CompressionLevel;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ UseRpcForInprocessMaster = input.ReadBool();
+ break;
+ }
+ case 18: {
+ CompressionAlgorithm = input.ReadString();
+ break;
+ }
+ case 24: {
+ CompressionLevel = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Session configuration parameters.
+ /// The system picks appropriate values for fields that are not set.
+ ///
+ public sealed partial class ConfigProto : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ConfigProto());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[5]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ConfigProto() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ConfigProto(ConfigProto other) : this() {
+ deviceCount_ = other.deviceCount_.Clone();
+ intraOpParallelismThreads_ = other.intraOpParallelismThreads_;
+ interOpParallelismThreads_ = other.interOpParallelismThreads_;
+ usePerSessionThreads_ = other.usePerSessionThreads_;
+ sessionInterOpThreadPool_ = other.sessionInterOpThreadPool_.Clone();
+ placementPeriod_ = other.placementPeriod_;
+ deviceFilters_ = other.deviceFilters_.Clone();
+ gpuOptions_ = other.gpuOptions_ != null ? other.gpuOptions_.Clone() : null;
+ allowSoftPlacement_ = other.allowSoftPlacement_;
+ logDevicePlacement_ = other.logDevicePlacement_;
+ graphOptions_ = other.graphOptions_ != null ? other.graphOptions_.Clone() : null;
+ operationTimeoutInMs_ = other.operationTimeoutInMs_;
+ rpcOptions_ = other.rpcOptions_ != null ? other.rpcOptions_.Clone() : null;
+ clusterDef_ = other.clusterDef_ != null ? other.clusterDef_.Clone() : null;
+ isolateSessionState_ = other.isolateSessionState_;
+ experimental_ = other.experimental_ != null ? other.experimental_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ConfigProto Clone() {
+ return new ConfigProto(this);
+ }
+
+ /// Field number for the "device_count" field.
+ public const int DeviceCountFieldNumber = 1;
+ private static readonly pbc::MapField.Codec _map_deviceCount_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForInt32(16), 10);
+ private readonly pbc::MapField deviceCount_ = new pbc::MapField();
+ ///
+ /// Map from device type name (e.g., "CPU" or "GPU" ) to maximum
+ /// number of devices of that type to use. If a particular device
+ /// type is not found in the map, the system picks an appropriate
+ /// number.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField DeviceCount {
+ get { return deviceCount_; }
+ }
+
+ /// Field number for the "intra_op_parallelism_threads" field.
+ public const int IntraOpParallelismThreadsFieldNumber = 2;
+ private int intraOpParallelismThreads_;
+ ///
+ /// The execution of an individual op (for some op types) can be
+ /// parallelized on a pool of intra_op_parallelism_threads.
+ /// 0 means the system picks an appropriate number.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int IntraOpParallelismThreads {
+ get { return intraOpParallelismThreads_; }
+ set {
+ intraOpParallelismThreads_ = value;
+ }
+ }
+
+ /// Field number for the "inter_op_parallelism_threads" field.
+ public const int InterOpParallelismThreadsFieldNumber = 5;
+ private int interOpParallelismThreads_;
+ ///
+ /// Nodes that perform blocking operations are enqueued on a pool of
+ /// inter_op_parallelism_threads available in each process.
+ ///
+ /// 0 means the system picks an appropriate number.
+ ///
+ /// Note that the first Session created in the process sets the
+ /// number of threads for all future sessions unless use_per_session_threads is
+ /// true or session_inter_op_thread_pool is configured.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int InterOpParallelismThreads {
+ get { return interOpParallelismThreads_; }
+ set {
+ interOpParallelismThreads_ = value;
+ }
+ }
+
+ /// Field number for the "use_per_session_threads" field.
+ public const int UsePerSessionThreadsFieldNumber = 9;
+ private bool usePerSessionThreads_;
+ ///
+ /// If true, use a new set of threads for this session rather than the global
+ /// pool of threads. Only supported by direct sessions.
+ ///
+ /// If false, use the global threads created by the first session, or the
+ /// per-session thread pools configured by session_inter_op_thread_pool.
+ ///
+ /// This option is deprecated. The same effect can be achieved by setting
+ /// session_inter_op_thread_pool to have one element, whose num_threads equals
+ /// inter_op_parallelism_threads.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool UsePerSessionThreads {
+ get { return usePerSessionThreads_; }
+ set {
+ usePerSessionThreads_ = value;
+ }
+ }
+
+ /// Field number for the "session_inter_op_thread_pool" field.
+ public const int SessionInterOpThreadPoolFieldNumber = 12;
+ private static readonly pb::FieldCodec _repeated_sessionInterOpThreadPool_codec
+ = pb::FieldCodec.ForMessage(98, global::Tensorflow.ThreadPoolOptionProto.Parser);
+ private readonly pbc::RepeatedField sessionInterOpThreadPool_ = new pbc::RepeatedField();
+ ///
+ /// This option is experimental - it may be replaced with a different mechanism
+ /// in the future.
+ ///
+ /// Configures session thread pools. If this is configured, then RunOptions for
+ /// a Run call can select the thread pool to use.
+ ///
+ /// The intended use is for when some session invocations need to run in a
+ /// background pool limited to a small number of threads:
+ /// - For example, a session may be configured to have one large pool (for
+ /// regular compute) and one small pool (for periodic, low priority work);
+ /// using the small pool is currently the mechanism for limiting the inter-op
+ /// parallelism of the low priority work. Note that it does not limit the
+ /// parallelism of work spawned by a single op kernel implementation.
+ /// - Using this setting is normally not needed in training, but may help some
+ /// serving use cases.
+ /// - It is also generally recommended to set the global_name field of this
+ /// proto, to avoid creating multiple large pools. It is typically better to
+ /// run the non-low-priority work, even across sessions, in a single large
+ /// pool.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField SessionInterOpThreadPool {
+ get { return sessionInterOpThreadPool_; }
+ }
+
+ /// Field number for the "placement_period" field.
+ public const int PlacementPeriodFieldNumber = 3;
+ private int placementPeriod_;
+ ///
+ /// Assignment of Nodes to Devices is recomputed every placement_period
+ /// steps until the system warms up (at which point the recomputation
+ /// typically slows down automatically).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int PlacementPeriod {
+ get { return placementPeriod_; }
+ set {
+ placementPeriod_ = value;
+ }
+ }
+
+ /// Field number for the "device_filters" field.
+ public const int DeviceFiltersFieldNumber = 4;
+ private static readonly pb::FieldCodec _repeated_deviceFilters_codec
+ = pb::FieldCodec.ForString(34);
+ private readonly pbc::RepeatedField deviceFilters_ = new pbc::RepeatedField();
+ ///
+ /// When any filters are present sessions will ignore all devices which do not
+ /// match the filters. Each filter can be partially specified, e.g. "/job:ps"
+ /// "/job:worker/replica:3", etc.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField DeviceFilters {
+ get { return deviceFilters_; }
+ }
+
+ /// Field number for the "gpu_options" field.
+ public const int GpuOptionsFieldNumber = 6;
+ private global::Tensorflow.GPUOptions gpuOptions_;
+ ///
+ /// Options that apply to all GPUs.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.GPUOptions GpuOptions {
+ get { return gpuOptions_; }
+ set {
+ gpuOptions_ = value;
+ }
+ }
+
+ /// Field number for the "allow_soft_placement" field.
+ public const int AllowSoftPlacementFieldNumber = 7;
+ private bool allowSoftPlacement_;
+ ///
+ /// Whether soft placement is allowed. If allow_soft_placement is true,
+ /// an op will be placed on CPU if
+ /// 1. there's no GPU implementation for the OP
+ /// or
+ /// 2. no GPU devices are known or registered
+ /// or
+ /// 3. need to co-locate with reftype input(s) which are from CPU.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool AllowSoftPlacement {
+ get { return allowSoftPlacement_; }
+ set {
+ allowSoftPlacement_ = value;
+ }
+ }
+
+ /// Field number for the "log_device_placement" field.
+ public const int LogDevicePlacementFieldNumber = 8;
+ private bool logDevicePlacement_;
+ ///
+ /// Whether device placements should be logged.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool LogDevicePlacement {
+ get { return logDevicePlacement_; }
+ set {
+ logDevicePlacement_ = value;
+ }
+ }
+
+ /// Field number for the "graph_options" field.
+ public const int GraphOptionsFieldNumber = 10;
+ private global::Tensorflow.GraphOptions graphOptions_;
+ ///
+ /// Options that apply to all graphs.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.GraphOptions GraphOptions {
+ get { return graphOptions_; }
+ set {
+ graphOptions_ = value;
+ }
+ }
+
+ /// Field number for the "operation_timeout_in_ms" field.
+ public const int OperationTimeoutInMsFieldNumber = 11;
+ private long operationTimeoutInMs_;
+ ///
+ /// Global timeout for all blocking operations in this session. If non-zero,
+ /// and not overridden on a per-operation basis, this value will be used as the
+ /// deadline for all blocking operations.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long OperationTimeoutInMs {
+ get { return operationTimeoutInMs_; }
+ set {
+ operationTimeoutInMs_ = value;
+ }
+ }
+
+ /// Field number for the "rpc_options" field.
+ public const int RpcOptionsFieldNumber = 13;
+ private global::Tensorflow.RPCOptions rpcOptions_;
+ ///
+ /// Options that apply when this session uses the distributed runtime.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.RPCOptions RpcOptions {
+ get { return rpcOptions_; }
+ set {
+ rpcOptions_ = value;
+ }
+ }
+
+ /// Field number for the "cluster_def" field.
+ public const int ClusterDefFieldNumber = 14;
+ private global::Tensorflow.ClusterDef clusterDef_;
+ ///
+ /// Optional list of all workers to use in this session.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.ClusterDef ClusterDef {
+ get { return clusterDef_; }
+ set {
+ clusterDef_ = value;
+ }
+ }
+
+ /// Field number for the "isolate_session_state" field.
+ public const int IsolateSessionStateFieldNumber = 15;
+ private bool isolateSessionState_;
+ ///
+ /// If true, any resources such as Variables used in the session will not be
+ /// shared with other sessions.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool IsolateSessionState {
+ get { return isolateSessionState_; }
+ set {
+ isolateSessionState_ = value;
+ }
+ }
+
+ /// Field number for the "experimental" field.
+ public const int ExperimentalFieldNumber = 16;
+ private global::Tensorflow.ConfigProto.Types.Experimental experimental_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.ConfigProto.Types.Experimental Experimental {
+ get { return experimental_; }
+ set {
+ experimental_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ConfigProto);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ConfigProto other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (!DeviceCount.Equals(other.DeviceCount)) return false;
+ if (IntraOpParallelismThreads != other.IntraOpParallelismThreads) return false;
+ if (InterOpParallelismThreads != other.InterOpParallelismThreads) return false;
+ if (UsePerSessionThreads != other.UsePerSessionThreads) return false;
+ if(!sessionInterOpThreadPool_.Equals(other.sessionInterOpThreadPool_)) return false;
+ if (PlacementPeriod != other.PlacementPeriod) return false;
+ if(!deviceFilters_.Equals(other.deviceFilters_)) return false;
+ if (!object.Equals(GpuOptions, other.GpuOptions)) return false;
+ if (AllowSoftPlacement != other.AllowSoftPlacement) return false;
+ if (LogDevicePlacement != other.LogDevicePlacement) return false;
+ if (!object.Equals(GraphOptions, other.GraphOptions)) return false;
+ if (OperationTimeoutInMs != other.OperationTimeoutInMs) return false;
+ if (!object.Equals(RpcOptions, other.RpcOptions)) return false;
+ if (!object.Equals(ClusterDef, other.ClusterDef)) return false;
+ if (IsolateSessionState != other.IsolateSessionState) return false;
+ if (!object.Equals(Experimental, other.Experimental)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= DeviceCount.GetHashCode();
+ if (IntraOpParallelismThreads != 0) hash ^= IntraOpParallelismThreads.GetHashCode();
+ if (InterOpParallelismThreads != 0) hash ^= InterOpParallelismThreads.GetHashCode();
+ if (UsePerSessionThreads != false) hash ^= UsePerSessionThreads.GetHashCode();
+ hash ^= sessionInterOpThreadPool_.GetHashCode();
+ if (PlacementPeriod != 0) hash ^= PlacementPeriod.GetHashCode();
+ hash ^= deviceFilters_.GetHashCode();
+ if (gpuOptions_ != null) hash ^= GpuOptions.GetHashCode();
+ if (AllowSoftPlacement != false) hash ^= AllowSoftPlacement.GetHashCode();
+ if (LogDevicePlacement != false) hash ^= LogDevicePlacement.GetHashCode();
+ if (graphOptions_ != null) hash ^= GraphOptions.GetHashCode();
+ if (OperationTimeoutInMs != 0L) hash ^= OperationTimeoutInMs.GetHashCode();
+ if (rpcOptions_ != null) hash ^= RpcOptions.GetHashCode();
+ if (clusterDef_ != null) hash ^= ClusterDef.GetHashCode();
+ if (IsolateSessionState != false) hash ^= IsolateSessionState.GetHashCode();
+ if (experimental_ != null) hash ^= Experimental.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ deviceCount_.WriteTo(output, _map_deviceCount_codec);
+ if (IntraOpParallelismThreads != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(IntraOpParallelismThreads);
+ }
+ if (PlacementPeriod != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(PlacementPeriod);
+ }
+ deviceFilters_.WriteTo(output, _repeated_deviceFilters_codec);
+ if (InterOpParallelismThreads != 0) {
+ output.WriteRawTag(40);
+ output.WriteInt32(InterOpParallelismThreads);
+ }
+ if (gpuOptions_ != null) {
+ output.WriteRawTag(50);
+ output.WriteMessage(GpuOptions);
+ }
+ if (AllowSoftPlacement != false) {
+ output.WriteRawTag(56);
+ output.WriteBool(AllowSoftPlacement);
+ }
+ if (LogDevicePlacement != false) {
+ output.WriteRawTag(64);
+ output.WriteBool(LogDevicePlacement);
+ }
+ if (UsePerSessionThreads != false) {
+ output.WriteRawTag(72);
+ output.WriteBool(UsePerSessionThreads);
+ }
+ if (graphOptions_ != null) {
+ output.WriteRawTag(82);
+ output.WriteMessage(GraphOptions);
+ }
+ if (OperationTimeoutInMs != 0L) {
+ output.WriteRawTag(88);
+ output.WriteInt64(OperationTimeoutInMs);
+ }
+ sessionInterOpThreadPool_.WriteTo(output, _repeated_sessionInterOpThreadPool_codec);
+ if (rpcOptions_ != null) {
+ output.WriteRawTag(106);
+ output.WriteMessage(RpcOptions);
+ }
+ if (clusterDef_ != null) {
+ output.WriteRawTag(114);
+ output.WriteMessage(ClusterDef);
+ }
+ if (IsolateSessionState != false) {
+ output.WriteRawTag(120);
+ output.WriteBool(IsolateSessionState);
+ }
+ if (experimental_ != null) {
+ output.WriteRawTag(130, 1);
+ output.WriteMessage(Experimental);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += deviceCount_.CalculateSize(_map_deviceCount_codec);
+ if (IntraOpParallelismThreads != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(IntraOpParallelismThreads);
+ }
+ if (InterOpParallelismThreads != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(InterOpParallelismThreads);
+ }
+ if (UsePerSessionThreads != false) {
+ size += 1 + 1;
+ }
+ size += sessionInterOpThreadPool_.CalculateSize(_repeated_sessionInterOpThreadPool_codec);
+ if (PlacementPeriod != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(PlacementPeriod);
+ }
+ size += deviceFilters_.CalculateSize(_repeated_deviceFilters_codec);
+ if (gpuOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(GpuOptions);
+ }
+ if (AllowSoftPlacement != false) {
+ size += 1 + 1;
+ }
+ if (LogDevicePlacement != false) {
+ size += 1 + 1;
+ }
+ if (graphOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(GraphOptions);
+ }
+ if (OperationTimeoutInMs != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(OperationTimeoutInMs);
+ }
+ if (rpcOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(RpcOptions);
+ }
+ if (clusterDef_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(ClusterDef);
+ }
+ if (IsolateSessionState != false) {
+ size += 1 + 1;
+ }
+ if (experimental_ != null) {
+ size += 2 + pb::CodedOutputStream.ComputeMessageSize(Experimental);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ConfigProto other) {
+ if (other == null) {
+ return;
+ }
+ deviceCount_.Add(other.deviceCount_);
+ if (other.IntraOpParallelismThreads != 0) {
+ IntraOpParallelismThreads = other.IntraOpParallelismThreads;
+ }
+ if (other.InterOpParallelismThreads != 0) {
+ InterOpParallelismThreads = other.InterOpParallelismThreads;
+ }
+ if (other.UsePerSessionThreads != false) {
+ UsePerSessionThreads = other.UsePerSessionThreads;
+ }
+ sessionInterOpThreadPool_.Add(other.sessionInterOpThreadPool_);
+ if (other.PlacementPeriod != 0) {
+ PlacementPeriod = other.PlacementPeriod;
+ }
+ deviceFilters_.Add(other.deviceFilters_);
+ if (other.gpuOptions_ != null) {
+ if (gpuOptions_ == null) {
+ gpuOptions_ = new global::Tensorflow.GPUOptions();
+ }
+ GpuOptions.MergeFrom(other.GpuOptions);
+ }
+ if (other.AllowSoftPlacement != false) {
+ AllowSoftPlacement = other.AllowSoftPlacement;
+ }
+ if (other.LogDevicePlacement != false) {
+ LogDevicePlacement = other.LogDevicePlacement;
+ }
+ if (other.graphOptions_ != null) {
+ if (graphOptions_ == null) {
+ graphOptions_ = new global::Tensorflow.GraphOptions();
+ }
+ GraphOptions.MergeFrom(other.GraphOptions);
+ }
+ if (other.OperationTimeoutInMs != 0L) {
+ OperationTimeoutInMs = other.OperationTimeoutInMs;
+ }
+ if (other.rpcOptions_ != null) {
+ if (rpcOptions_ == null) {
+ rpcOptions_ = new global::Tensorflow.RPCOptions();
+ }
+ RpcOptions.MergeFrom(other.RpcOptions);
+ }
+ if (other.clusterDef_ != null) {
+ if (clusterDef_ == null) {
+ clusterDef_ = new global::Tensorflow.ClusterDef();
+ }
+ ClusterDef.MergeFrom(other.ClusterDef);
+ }
+ if (other.IsolateSessionState != false) {
+ IsolateSessionState = other.IsolateSessionState;
+ }
+ if (other.experimental_ != null) {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.ConfigProto.Types.Experimental();
+ }
+ Experimental.MergeFrom(other.Experimental);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ deviceCount_.AddEntriesFrom(input, _map_deviceCount_codec);
+ break;
+ }
+ case 16: {
+ IntraOpParallelismThreads = input.ReadInt32();
+ break;
+ }
+ case 24: {
+ PlacementPeriod = input.ReadInt32();
+ break;
+ }
+ case 34: {
+ deviceFilters_.AddEntriesFrom(input, _repeated_deviceFilters_codec);
+ break;
+ }
+ case 40: {
+ InterOpParallelismThreads = input.ReadInt32();
+ break;
+ }
+ case 50: {
+ if (gpuOptions_ == null) {
+ gpuOptions_ = new global::Tensorflow.GPUOptions();
+ }
+ input.ReadMessage(gpuOptions_);
+ break;
+ }
+ case 56: {
+ AllowSoftPlacement = input.ReadBool();
+ break;
+ }
+ case 64: {
+ LogDevicePlacement = input.ReadBool();
+ break;
+ }
+ case 72: {
+ UsePerSessionThreads = input.ReadBool();
+ break;
+ }
+ case 82: {
+ if (graphOptions_ == null) {
+ graphOptions_ = new global::Tensorflow.GraphOptions();
+ }
+ input.ReadMessage(graphOptions_);
+ break;
+ }
+ case 88: {
+ OperationTimeoutInMs = input.ReadInt64();
+ break;
+ }
+ case 98: {
+ sessionInterOpThreadPool_.AddEntriesFrom(input, _repeated_sessionInterOpThreadPool_codec);
+ break;
+ }
+ case 106: {
+ if (rpcOptions_ == null) {
+ rpcOptions_ = new global::Tensorflow.RPCOptions();
+ }
+ input.ReadMessage(rpcOptions_);
+ break;
+ }
+ case 114: {
+ if (clusterDef_ == null) {
+ clusterDef_ = new global::Tensorflow.ClusterDef();
+ }
+ input.ReadMessage(clusterDef_);
+ break;
+ }
+ case 120: {
+ IsolateSessionState = input.ReadBool();
+ break;
+ }
+ case 130: {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.ConfigProto.Types.Experimental();
+ }
+ input.ReadMessage(experimental_);
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the ConfigProto message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// Everything inside Experimental is subject to change and is not subject
+ /// to API stability guarantees in
+ /// https://www.tensorflow.org/guide/version_compat.
+ ///
+ public sealed partial class Experimental : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Experimental());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigProto.Descriptor.NestedTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental(Experimental other) : this() {
+ collectiveGroupLeader_ = other.collectiveGroupLeader_;
+ executorType_ = other.executorType_;
+ recvBufMaxChunk_ = other.recvBufMaxChunk_;
+ useNumaAffinity_ = other.useNumaAffinity_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental Clone() {
+ return new Experimental(this);
+ }
+
+ /// Field number for the "collective_group_leader" field.
+ public const int CollectiveGroupLeaderFieldNumber = 1;
+ private string collectiveGroupLeader_ = "";
+ ///
+ /// Task name for group resolution.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string CollectiveGroupLeader {
+ get { return collectiveGroupLeader_; }
+ set {
+ collectiveGroupLeader_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "executor_type" field.
+ public const int ExecutorTypeFieldNumber = 3;
+ private string executorType_ = "";
+ ///
+ /// Which executor to use, the default executor will be used
+ /// if it is an empty string or "DEFAULT"
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string ExecutorType {
+ get { return executorType_; }
+ set {
+ executorType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "recv_buf_max_chunk" field.
+ public const int RecvBufMaxChunkFieldNumber = 4;
+ private int recvBufMaxChunk_;
+ ///
+ /// Guidance to formatting of large RecvBuf fields for transfer.
+ /// Any positive value sets the max chunk size. 0 defaults to 4096.
+ /// Any negative value indicates no max, i.e. one chunk only.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int RecvBufMaxChunk {
+ get { return recvBufMaxChunk_; }
+ set {
+ recvBufMaxChunk_ = value;
+ }
+ }
+
+ /// Field number for the "use_numa_affinity" field.
+ public const int UseNumaAffinityFieldNumber = 5;
+ private bool useNumaAffinity_;
+ ///
+ /// If true, and supported by the platform, the runtime will attempt to
+ /// use NUMA affinity where applicable. One consequence will be the
+ /// existence of as many CPU devices as there are available NUMA nodes.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool UseNumaAffinity {
+ get { return useNumaAffinity_; }
+ set {
+ useNumaAffinity_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Experimental);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Experimental other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (CollectiveGroupLeader != other.CollectiveGroupLeader) return false;
+ if (ExecutorType != other.ExecutorType) return false;
+ if (RecvBufMaxChunk != other.RecvBufMaxChunk) return false;
+ if (UseNumaAffinity != other.UseNumaAffinity) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (CollectiveGroupLeader.Length != 0) hash ^= CollectiveGroupLeader.GetHashCode();
+ if (ExecutorType.Length != 0) hash ^= ExecutorType.GetHashCode();
+ if (RecvBufMaxChunk != 0) hash ^= RecvBufMaxChunk.GetHashCode();
+ if (UseNumaAffinity != false) hash ^= UseNumaAffinity.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (CollectiveGroupLeader.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(CollectiveGroupLeader);
+ }
+ if (ExecutorType.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(ExecutorType);
+ }
+ if (RecvBufMaxChunk != 0) {
+ output.WriteRawTag(32);
+ output.WriteInt32(RecvBufMaxChunk);
+ }
+ if (UseNumaAffinity != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(UseNumaAffinity);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (CollectiveGroupLeader.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(CollectiveGroupLeader);
+ }
+ if (ExecutorType.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(ExecutorType);
+ }
+ if (RecvBufMaxChunk != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(RecvBufMaxChunk);
+ }
+ if (UseNumaAffinity != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Experimental other) {
+ if (other == null) {
+ return;
+ }
+ if (other.CollectiveGroupLeader.Length != 0) {
+ CollectiveGroupLeader = other.CollectiveGroupLeader;
+ }
+ if (other.ExecutorType.Length != 0) {
+ ExecutorType = other.ExecutorType;
+ }
+ if (other.RecvBufMaxChunk != 0) {
+ RecvBufMaxChunk = other.RecvBufMaxChunk;
+ }
+ if (other.UseNumaAffinity != false) {
+ UseNumaAffinity = other.UseNumaAffinity;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ CollectiveGroupLeader = input.ReadString();
+ break;
+ }
+ case 26: {
+ ExecutorType = input.ReadString();
+ break;
+ }
+ case 32: {
+ RecvBufMaxChunk = input.ReadInt32();
+ break;
+ }
+ case 40: {
+ UseNumaAffinity = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ ///
+ /// Options for a single Run() call.
+ ///
+ public sealed partial class RunOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new RunOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[6]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunOptions(RunOptions other) : this() {
+ traceLevel_ = other.traceLevel_;
+ timeoutInMs_ = other.timeoutInMs_;
+ interOpThreadPool_ = other.interOpThreadPool_;
+ outputPartitionGraphs_ = other.outputPartitionGraphs_;
+ debugOptions_ = other.debugOptions_ != null ? other.debugOptions_.Clone() : null;
+ reportTensorAllocationsUponOom_ = other.reportTensorAllocationsUponOom_;
+ experimental_ = other.experimental_ != null ? other.experimental_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunOptions Clone() {
+ return new RunOptions(this);
+ }
+
+ /// Field number for the "trace_level" field.
+ public const int TraceLevelFieldNumber = 1;
+ private global::Tensorflow.RunOptions.Types.TraceLevel traceLevel_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.RunOptions.Types.TraceLevel TraceLevel {
+ get { return traceLevel_; }
+ set {
+ traceLevel_ = value;
+ }
+ }
+
+ /// Field number for the "timeout_in_ms" field.
+ public const int TimeoutInMsFieldNumber = 2;
+ private long timeoutInMs_;
+ ///
+ /// Time to wait for operation to complete in milliseconds.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long TimeoutInMs {
+ get { return timeoutInMs_; }
+ set {
+ timeoutInMs_ = value;
+ }
+ }
+
+ /// Field number for the "inter_op_thread_pool" field.
+ public const int InterOpThreadPoolFieldNumber = 3;
+ private int interOpThreadPool_;
+ ///
+ /// The thread pool to use, if session_inter_op_thread_pool is configured.
+ /// To use the caller thread set this to -1 - this uses the caller thread
+ /// to execute Session::Run() and thus avoids a context switch. Using the
+ /// caller thread to execute Session::Run() should be done ONLY for simple
+ /// graphs, where the overhead of an additional context switch is
+ /// comparable with the overhead of Session::Run().
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int InterOpThreadPool {
+ get { return interOpThreadPool_; }
+ set {
+ interOpThreadPool_ = value;
+ }
+ }
+
+ /// Field number for the "output_partition_graphs" field.
+ public const int OutputPartitionGraphsFieldNumber = 5;
+ private bool outputPartitionGraphs_;
+ ///
+ /// Whether the partition graph(s) executed by the executor(s) should be
+ /// outputted via RunMetadata.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool OutputPartitionGraphs {
+ get { return outputPartitionGraphs_; }
+ set {
+ outputPartitionGraphs_ = value;
+ }
+ }
+
+ /// Field number for the "debug_options" field.
+ public const int DebugOptionsFieldNumber = 6;
+ private global::Tensorflow.DebugOptions debugOptions_;
+ ///
+ /// EXPERIMENTAL. Options used to initialize DebuggerState, if enabled.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.DebugOptions DebugOptions {
+ get { return debugOptions_; }
+ set {
+ debugOptions_ = value;
+ }
+ }
+
+ /// Field number for the "report_tensor_allocations_upon_oom" field.
+ public const int ReportTensorAllocationsUponOomFieldNumber = 7;
+ private bool reportTensorAllocationsUponOom_;
+ ///
+ /// When enabled, causes tensor allocation information to be included in
+ /// the error message when the Run() call fails because the allocator ran
+ /// out of memory (OOM).
+ ///
+ /// Enabling this option can slow down the Run() call.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool ReportTensorAllocationsUponOom {
+ get { return reportTensorAllocationsUponOom_; }
+ set {
+ reportTensorAllocationsUponOom_ = value;
+ }
+ }
+
+ /// Field number for the "experimental" field.
+ public const int ExperimentalFieldNumber = 8;
+ private global::Tensorflow.RunOptions.Types.Experimental experimental_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.RunOptions.Types.Experimental Experimental {
+ get { return experimental_; }
+ set {
+ experimental_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as RunOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(RunOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (TraceLevel != other.TraceLevel) return false;
+ if (TimeoutInMs != other.TimeoutInMs) return false;
+ if (InterOpThreadPool != other.InterOpThreadPool) return false;
+ if (OutputPartitionGraphs != other.OutputPartitionGraphs) return false;
+ if (!object.Equals(DebugOptions, other.DebugOptions)) return false;
+ if (ReportTensorAllocationsUponOom != other.ReportTensorAllocationsUponOom) return false;
+ if (!object.Equals(Experimental, other.Experimental)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (TraceLevel != 0) hash ^= TraceLevel.GetHashCode();
+ if (TimeoutInMs != 0L) hash ^= TimeoutInMs.GetHashCode();
+ if (InterOpThreadPool != 0) hash ^= InterOpThreadPool.GetHashCode();
+ if (OutputPartitionGraphs != false) hash ^= OutputPartitionGraphs.GetHashCode();
+ if (debugOptions_ != null) hash ^= DebugOptions.GetHashCode();
+ if (ReportTensorAllocationsUponOom != false) hash ^= ReportTensorAllocationsUponOom.GetHashCode();
+ if (experimental_ != null) hash ^= Experimental.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (TraceLevel != 0) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) TraceLevel);
+ }
+ if (TimeoutInMs != 0L) {
+ output.WriteRawTag(16);
+ output.WriteInt64(TimeoutInMs);
+ }
+ if (InterOpThreadPool != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(InterOpThreadPool);
+ }
+ if (OutputPartitionGraphs != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(OutputPartitionGraphs);
+ }
+ if (debugOptions_ != null) {
+ output.WriteRawTag(50);
+ output.WriteMessage(DebugOptions);
+ }
+ if (ReportTensorAllocationsUponOom != false) {
+ output.WriteRawTag(56);
+ output.WriteBool(ReportTensorAllocationsUponOom);
+ }
+ if (experimental_ != null) {
+ output.WriteRawTag(66);
+ output.WriteMessage(Experimental);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (TraceLevel != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) TraceLevel);
+ }
+ if (TimeoutInMs != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(TimeoutInMs);
+ }
+ if (InterOpThreadPool != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(InterOpThreadPool);
+ }
+ if (OutputPartitionGraphs != false) {
+ size += 1 + 1;
+ }
+ if (debugOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(DebugOptions);
+ }
+ if (ReportTensorAllocationsUponOom != false) {
+ size += 1 + 1;
+ }
+ if (experimental_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Experimental);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(RunOptions other) {
+ if (other == null) {
+ return;
+ }
+ if (other.TraceLevel != 0) {
+ TraceLevel = other.TraceLevel;
+ }
+ if (other.TimeoutInMs != 0L) {
+ TimeoutInMs = other.TimeoutInMs;
+ }
+ if (other.InterOpThreadPool != 0) {
+ InterOpThreadPool = other.InterOpThreadPool;
+ }
+ if (other.OutputPartitionGraphs != false) {
+ OutputPartitionGraphs = other.OutputPartitionGraphs;
+ }
+ if (other.debugOptions_ != null) {
+ if (debugOptions_ == null) {
+ debugOptions_ = new global::Tensorflow.DebugOptions();
+ }
+ DebugOptions.MergeFrom(other.DebugOptions);
+ }
+ if (other.ReportTensorAllocationsUponOom != false) {
+ ReportTensorAllocationsUponOom = other.ReportTensorAllocationsUponOom;
+ }
+ if (other.experimental_ != null) {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.RunOptions.Types.Experimental();
+ }
+ Experimental.MergeFrom(other.Experimental);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ traceLevel_ = (global::Tensorflow.RunOptions.Types.TraceLevel) input.ReadEnum();
+ break;
+ }
+ case 16: {
+ TimeoutInMs = input.ReadInt64();
+ break;
+ }
+ case 24: {
+ InterOpThreadPool = input.ReadInt32();
+ break;
+ }
+ case 40: {
+ OutputPartitionGraphs = input.ReadBool();
+ break;
+ }
+ case 50: {
+ if (debugOptions_ == null) {
+ debugOptions_ = new global::Tensorflow.DebugOptions();
+ }
+ input.ReadMessage(debugOptions_);
+ break;
+ }
+ case 56: {
+ ReportTensorAllocationsUponOom = input.ReadBool();
+ break;
+ }
+ case 66: {
+ if (experimental_ == null) {
+ experimental_ = new global::Tensorflow.RunOptions.Types.Experimental();
+ }
+ input.ReadMessage(experimental_);
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the RunOptions message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// TODO(pbar) Turn this into a TraceOptions proto which allows
+ /// tracing to be controlled in a more orthogonal manner?
+ ///
+ public enum TraceLevel {
+ [pbr::OriginalName("NO_TRACE")] NoTrace = 0,
+ [pbr::OriginalName("SOFTWARE_TRACE")] SoftwareTrace = 1,
+ [pbr::OriginalName("HARDWARE_TRACE")] HardwareTrace = 2,
+ [pbr::OriginalName("FULL_TRACE")] FullTrace = 3,
+ }
+
+ ///
+ /// Everything inside Experimental is subject to change and is not subject
+ /// to API stability guarantees in
+ /// https://www.tensorflow.org/guide/version_compat.
+ ///
+ public sealed partial class Experimental : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Experimental());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.RunOptions.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental(Experimental other) : this() {
+ collectiveGraphKey_ = other.collectiveGraphKey_;
+ useRunHandlerPool_ = other.useRunHandlerPool_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Experimental Clone() {
+ return new Experimental(this);
+ }
+
+ /// Field number for the "collective_graph_key" field.
+ public const int CollectiveGraphKeyFieldNumber = 1;
+ private long collectiveGraphKey_;
+ ///
+ /// If non-zero, declares that this graph is going to use collective
+ /// ops and must synchronize step_ids with any other graph with this
+ /// same group_key value (in a distributed computation where tasks
+ /// run disjoint graphs).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long CollectiveGraphKey {
+ get { return collectiveGraphKey_; }
+ set {
+ collectiveGraphKey_ = value;
+ }
+ }
+
+ /// Field number for the "use_run_handler_pool" field.
+ public const int UseRunHandlerPoolFieldNumber = 2;
+ private bool useRunHandlerPool_;
+ ///
+ /// If true, then operations (using the inter-op pool) across all
+ /// session::run() calls will be centrally scheduled, optimizing for (median
+ /// and tail) latency.
+ /// Consider using this option for CPU-bound workloads like inference.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool UseRunHandlerPool {
+ get { return useRunHandlerPool_; }
+ set {
+ useRunHandlerPool_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Experimental);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Experimental other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (CollectiveGraphKey != other.CollectiveGraphKey) return false;
+ if (UseRunHandlerPool != other.UseRunHandlerPool) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (CollectiveGraphKey != 0L) hash ^= CollectiveGraphKey.GetHashCode();
+ if (UseRunHandlerPool != false) hash ^= UseRunHandlerPool.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (CollectiveGraphKey != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(CollectiveGraphKey);
+ }
+ if (UseRunHandlerPool != false) {
+ output.WriteRawTag(16);
+ output.WriteBool(UseRunHandlerPool);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (CollectiveGraphKey != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(CollectiveGraphKey);
+ }
+ if (UseRunHandlerPool != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Experimental other) {
+ if (other == null) {
+ return;
+ }
+ if (other.CollectiveGraphKey != 0L) {
+ CollectiveGraphKey = other.CollectiveGraphKey;
+ }
+ if (other.UseRunHandlerPool != false) {
+ UseRunHandlerPool = other.UseRunHandlerPool;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ CollectiveGraphKey = input.ReadInt64();
+ break;
+ }
+ case 16: {
+ UseRunHandlerPool = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ ///
+ /// Metadata output (i.e., non-Tensor) for a single Run() call.
+ ///
+ public sealed partial class RunMetadata : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new RunMetadata());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[7]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunMetadata() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunMetadata(RunMetadata other) : this() {
+ stepStats_ = other.stepStats_ != null ? other.stepStats_.Clone() : null;
+ costGraph_ = other.costGraph_ != null ? other.costGraph_.Clone() : null;
+ partitionGraphs_ = other.partitionGraphs_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public RunMetadata Clone() {
+ return new RunMetadata(this);
+ }
+
+ /// Field number for the "step_stats" field.
+ public const int StepStatsFieldNumber = 1;
+ private global::Tensorflow.StepStats stepStats_;
+ ///
+ /// Statistics traced for this step. Populated if tracing is turned on via the
+ /// "RunOptions" proto.
+ /// EXPERIMENTAL: The format and set of events may change in future versions.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.StepStats StepStats {
+ get { return stepStats_; }
+ set {
+ stepStats_ = value;
+ }
+ }
+
+ /// Field number for the "cost_graph" field.
+ public const int CostGraphFieldNumber = 2;
+ private global::Tensorflow.CostGraphDef costGraph_;
+ ///
+ /// The cost graph for the computation defined by the run call.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.CostGraphDef CostGraph {
+ get { return costGraph_; }
+ set {
+ costGraph_ = value;
+ }
+ }
+
+ /// Field number for the "partition_graphs" field.
+ public const int PartitionGraphsFieldNumber = 3;
+ private static readonly pb::FieldCodec _repeated_partitionGraphs_codec
+ = pb::FieldCodec.ForMessage(26, global::Tensorflow.GraphDef.Parser);
+ private readonly pbc::RepeatedField partitionGraphs_ = new pbc::RepeatedField();
+ ///
+ /// Graphs of the partitions executed by executors.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField PartitionGraphs {
+ get { return partitionGraphs_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as RunMetadata);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(RunMetadata other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (!object.Equals(StepStats, other.StepStats)) return false;
+ if (!object.Equals(CostGraph, other.CostGraph)) return false;
+ if(!partitionGraphs_.Equals(other.partitionGraphs_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (stepStats_ != null) hash ^= StepStats.GetHashCode();
+ if (costGraph_ != null) hash ^= CostGraph.GetHashCode();
+ hash ^= partitionGraphs_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (stepStats_ != null) {
+ output.WriteRawTag(10);
+ output.WriteMessage(StepStats);
+ }
+ if (costGraph_ != null) {
+ output.WriteRawTag(18);
+ output.WriteMessage(CostGraph);
+ }
+ partitionGraphs_.WriteTo(output, _repeated_partitionGraphs_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (stepStats_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(StepStats);
+ }
+ if (costGraph_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(CostGraph);
+ }
+ size += partitionGraphs_.CalculateSize(_repeated_partitionGraphs_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(RunMetadata other) {
+ if (other == null) {
+ return;
+ }
+ if (other.stepStats_ != null) {
+ if (stepStats_ == null) {
+ stepStats_ = new global::Tensorflow.StepStats();
+ }
+ StepStats.MergeFrom(other.StepStats);
+ }
+ if (other.costGraph_ != null) {
+ if (costGraph_ == null) {
+ costGraph_ = new global::Tensorflow.CostGraphDef();
+ }
+ CostGraph.MergeFrom(other.CostGraph);
+ }
+ partitionGraphs_.Add(other.partitionGraphs_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ if (stepStats_ == null) {
+ stepStats_ = new global::Tensorflow.StepStats();
+ }
+ input.ReadMessage(stepStats_);
+ break;
+ }
+ case 18: {
+ if (costGraph_ == null) {
+ costGraph_ = new global::Tensorflow.CostGraphDef();
+ }
+ input.ReadMessage(costGraph_);
+ break;
+ }
+ case 26: {
+ partitionGraphs_.AddEntriesFrom(input, _repeated_partitionGraphs_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Defines a connection between two tensors in a `GraphDef`.
+ ///
+ public sealed partial class TensorConnection : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new TensorConnection());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[8]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TensorConnection() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TensorConnection(TensorConnection other) : this() {
+ fromTensor_ = other.fromTensor_;
+ toTensor_ = other.toTensor_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TensorConnection Clone() {
+ return new TensorConnection(this);
+ }
+
+ /// Field number for the "from_tensor" field.
+ public const int FromTensorFieldNumber = 1;
+ private string fromTensor_ = "";
+ ///
+ /// A tensor name. The value of this tensor will be substituted for
+ /// the tensor named in `to_tensor`.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string FromTensor {
+ get { return fromTensor_; }
+ set {
+ fromTensor_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "to_tensor" field.
+ public const int ToTensorFieldNumber = 2;
+ private string toTensor_ = "";
+ ///
+ /// A tensor name. The value of this tensor will be bound to the
+ /// value of the tensor named in `from_tensor`.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string ToTensor {
+ get { return toTensor_; }
+ set {
+ toTensor_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as TensorConnection);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(TensorConnection other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (FromTensor != other.FromTensor) return false;
+ if (ToTensor != other.ToTensor) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (FromTensor.Length != 0) hash ^= FromTensor.GetHashCode();
+ if (ToTensor.Length != 0) hash ^= ToTensor.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (FromTensor.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(FromTensor);
+ }
+ if (ToTensor.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(ToTensor);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (FromTensor.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(FromTensor);
+ }
+ if (ToTensor.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(ToTensor);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(TensorConnection other) {
+ if (other == null) {
+ return;
+ }
+ if (other.FromTensor.Length != 0) {
+ FromTensor = other.FromTensor;
+ }
+ if (other.ToTensor.Length != 0) {
+ ToTensor = other.ToTensor;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ FromTensor = input.ReadString();
+ break;
+ }
+ case 18: {
+ ToTensor = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Defines a subgraph in another `GraphDef` as a set of feed points and nodes
+ /// to be fetched or executed.
+ ///
+ /// Compare with the arguments to `Session::Run()`.
+ ///
+ public sealed partial class CallableOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CallableOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.ConfigReflection.Descriptor.MessageTypes[9]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CallableOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CallableOptions(CallableOptions other) : this() {
+ feed_ = other.feed_.Clone();
+ fetch_ = other.fetch_.Clone();
+ target_ = other.target_.Clone();
+ runOptions_ = other.runOptions_ != null ? other.runOptions_.Clone() : null;
+ tensorConnection_ = other.tensorConnection_.Clone();
+ feedDevices_ = other.feedDevices_.Clone();
+ fetchDevices_ = other.fetchDevices_.Clone();
+ fetchSkipSync_ = other.fetchSkipSync_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CallableOptions Clone() {
+ return new CallableOptions(this);
+ }
+
+ /// Field number for the "feed" field.
+ public const int FeedFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_feed_codec
+ = pb::FieldCodec.ForString(10);
+ private readonly pbc::RepeatedField feed_ = new pbc::RepeatedField();
+ ///
+ /// Tensors to be fed in the callable. Each feed is the name of a tensor.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Feed {
+ get { return feed_; }
+ }
+
+ /// Field number for the "fetch" field.
+ public const int FetchFieldNumber = 2;
+ private static readonly pb::FieldCodec _repeated_fetch_codec
+ = pb::FieldCodec.ForString(18);
+ private readonly pbc::RepeatedField fetch_ = new pbc::RepeatedField();
+ ///
+ /// Fetches. A list of tensor names. The caller of the callable expects a
+ /// tensor to be returned for each fetch[i] (see RunStepResponse.tensor). The
+ /// order of specified fetches does not change the execution order.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Fetch {
+ get { return fetch_; }
+ }
+
+ /// Field number for the "target" field.
+ public const int TargetFieldNumber = 3;
+ private static readonly pb::FieldCodec _repeated_target_codec
+ = pb::FieldCodec.ForString(26);
+ private readonly pbc::RepeatedField target_ = new pbc::RepeatedField();
+ ///
+ /// Target Nodes. A list of node names. The named nodes will be run by the
+ /// callable but their outputs will not be returned.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Target {
+ get { return target_; }
+ }
+
+ /// Field number for the "run_options" field.
+ public const int RunOptionsFieldNumber = 4;
+ private global::Tensorflow.RunOptions runOptions_;
+ ///
+ /// Options that will be applied to each run.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.RunOptions RunOptions {
+ get { return runOptions_; }
+ set {
+ runOptions_ = value;
+ }
+ }
+
+ /// Field number for the "tensor_connection" field.
+ public const int TensorConnectionFieldNumber = 5;
+ private static readonly pb::FieldCodec _repeated_tensorConnection_codec
+ = pb::FieldCodec.ForMessage(42, global::Tensorflow.TensorConnection.Parser);
+ private readonly pbc::RepeatedField tensorConnection_ = new pbc::RepeatedField();
+ ///
+ /// Tensors to be connected in the callable. Each TensorConnection denotes
+ /// a pair of tensors in the graph, between which an edge will be created
+ /// in the callable.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField TensorConnection {
+ get { return tensorConnection_; }
+ }
+
+ /// Field number for the "feed_devices" field.
+ public const int FeedDevicesFieldNumber = 6;
+ private static readonly pbc::MapField.Codec _map_feedDevices_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 50);
+ private readonly pbc::MapField feedDevices_ = new pbc::MapField();
+ ///
+ /// The Tensor objects fed in the callable and fetched from the callable
+ /// are expected to be backed by host (CPU) memory by default.
+ ///
+ /// The options below allow changing that - feeding tensors backed by
+ /// device memory, or returning tensors that are backed by device memory.
+ ///
+ /// The maps below map the name of a feed/fetch tensor (which appears in
+ /// 'feed' or 'fetch' fields above), to the fully qualified name of the device
+ /// owning the memory backing the contents of the tensor.
+ ///
+ /// For example, creating a callable with the following options:
+ ///
+ /// CallableOptions {
+ /// feed: "a:0"
+ /// feed: "b:0"
+ ///
+ /// fetch: "x:0"
+ /// fetch: "y:0"
+ ///
+ /// feed_devices: {
+ /// "a:0": "/job:localhost/replica:0/task:0/device:GPU:0"
+ /// }
+ ///
+ /// fetch_devices: {
+ /// "y:0": "/job:localhost/replica:0/task:0/device:GPU:0"
+ /// }
+ /// }
+ ///
+ /// means that the Callable expects:
+ /// - The first argument ("a:0") is a Tensor backed by GPU memory.
+ /// - The second argument ("b:0") is a Tensor backed by host memory.
+ /// and of its return values:
+ /// - The first output ("x:0") will be backed by host memory.
+ /// - The second output ("y:0") will be backed by GPU memory.
+ ///
+ /// FEEDS:
+ /// It is the responsibility of the caller to ensure that the memory of the fed
+ /// tensors will be correctly initialized and synchronized before it is
+ /// accessed by operations executed during the call to Session::RunCallable().
+ ///
+ /// This is typically ensured by using the TensorFlow memory allocators
+ /// (Device::GetAllocator()) to create the Tensor to be fed.
+ ///
+ /// Alternatively, for CUDA-enabled GPU devices, this typically means that the
+ /// operation that produced the contents of the tensor has completed, i.e., the
+ /// CUDA stream has been synchronized (e.g., via cuCtxSynchronize() or
+ /// cuStreamSynchronize()).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField FeedDevices {
+ get { return feedDevices_; }
+ }
+
+ /// Field number for the "fetch_devices" field.
+ public const int FetchDevicesFieldNumber = 7;
+ private static readonly pbc::MapField.Codec _map_fetchDevices_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 58);
+ private readonly pbc::MapField fetchDevices_ = new pbc::MapField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField FetchDevices {
+ get { return fetchDevices_; }
+ }
+
+ /// Field number for the "fetch_skip_sync" field.
+ public const int FetchSkipSyncFieldNumber = 8;
+ private bool fetchSkipSync_;
+ ///
+ /// By default, RunCallable() will synchronize the GPU stream before returning
+ /// fetched tensors on a GPU device, to ensure that the values in those tensors
+ /// have been produced. This simplifies interacting with the tensors, but
+ /// potentially incurs a performance hit.
+ ///
+ /// If this options is set to true, the caller is responsible for ensuring
+ /// that the values in the fetched tensors have been produced before they are
+ /// used. The caller can do this by invoking `Device::Sync()` on the underlying
+ /// device(s), or by feeding the tensors back to the same Session using
+ /// `feed_devices` with the same corresponding device name.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool FetchSkipSync {
+ get { return fetchSkipSync_; }
+ set {
+ fetchSkipSync_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as CallableOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(CallableOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!feed_.Equals(other.feed_)) return false;
+ if(!fetch_.Equals(other.fetch_)) return false;
+ if(!target_.Equals(other.target_)) return false;
+ if (!object.Equals(RunOptions, other.RunOptions)) return false;
+ if(!tensorConnection_.Equals(other.tensorConnection_)) return false;
+ if (!FeedDevices.Equals(other.FeedDevices)) return false;
+ if (!FetchDevices.Equals(other.FetchDevices)) return false;
+ if (FetchSkipSync != other.FetchSkipSync) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= feed_.GetHashCode();
+ hash ^= fetch_.GetHashCode();
+ hash ^= target_.GetHashCode();
+ if (runOptions_ != null) hash ^= RunOptions.GetHashCode();
+ hash ^= tensorConnection_.GetHashCode();
+ hash ^= FeedDevices.GetHashCode();
+ hash ^= FetchDevices.GetHashCode();
+ if (FetchSkipSync != false) hash ^= FetchSkipSync.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ feed_.WriteTo(output, _repeated_feed_codec);
+ fetch_.WriteTo(output, _repeated_fetch_codec);
+ target_.WriteTo(output, _repeated_target_codec);
+ if (runOptions_ != null) {
+ output.WriteRawTag(34);
+ output.WriteMessage(RunOptions);
+ }
+ tensorConnection_.WriteTo(output, _repeated_tensorConnection_codec);
+ feedDevices_.WriteTo(output, _map_feedDevices_codec);
+ fetchDevices_.WriteTo(output, _map_fetchDevices_codec);
+ if (FetchSkipSync != false) {
+ output.WriteRawTag(64);
+ output.WriteBool(FetchSkipSync);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += feed_.CalculateSize(_repeated_feed_codec);
+ size += fetch_.CalculateSize(_repeated_fetch_codec);
+ size += target_.CalculateSize(_repeated_target_codec);
+ if (runOptions_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(RunOptions);
+ }
+ size += tensorConnection_.CalculateSize(_repeated_tensorConnection_codec);
+ size += feedDevices_.CalculateSize(_map_feedDevices_codec);
+ size += fetchDevices_.CalculateSize(_map_fetchDevices_codec);
+ if (FetchSkipSync != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(CallableOptions other) {
+ if (other == null) {
+ return;
+ }
+ feed_.Add(other.feed_);
+ fetch_.Add(other.fetch_);
+ target_.Add(other.target_);
+ if (other.runOptions_ != null) {
+ if (runOptions_ == null) {
+ runOptions_ = new global::Tensorflow.RunOptions();
+ }
+ RunOptions.MergeFrom(other.RunOptions);
+ }
+ tensorConnection_.Add(other.tensorConnection_);
+ feedDevices_.Add(other.feedDevices_);
+ fetchDevices_.Add(other.fetchDevices_);
+ if (other.FetchSkipSync != false) {
+ FetchSkipSync = other.FetchSkipSync;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ feed_.AddEntriesFrom(input, _repeated_feed_codec);
+ break;
+ }
+ case 18: {
+ fetch_.AddEntriesFrom(input, _repeated_fetch_codec);
+ break;
+ }
+ case 26: {
+ target_.AddEntriesFrom(input, _repeated_target_codec);
+ break;
+ }
+ case 34: {
+ if (runOptions_ == null) {
+ runOptions_ = new global::Tensorflow.RunOptions();
+ }
+ input.ReadMessage(runOptions_);
+ break;
+ }
+ case 42: {
+ tensorConnection_.AddEntriesFrom(input, _repeated_tensorConnection_codec);
+ break;
+ }
+ case 50: {
+ feedDevices_.AddEntriesFrom(input, _map_feedDevices_codec);
+ break;
+ }
+ case 58: {
+ fetchDevices_.AddEntriesFrom(input, _map_fetchDevices_codec);
+ break;
+ }
+ case 64: {
+ FetchSkipSync = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/CostGraph.cs b/src/TensorFlowNET.Core/Protobuf/CostGraph.cs
new file mode 100644
index 00000000..0d7f0ba7
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/CostGraph.cs
@@ -0,0 +1,1155 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/framework/cost_graph.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/framework/cost_graph.proto
+ public static partial class CostGraphReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/framework/cost_graph.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static CostGraphReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Cip0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2Nvc3RfZ3JhcGgucHJvdG8S",
+ "CnRlbnNvcmZsb3caLHRlbnNvcmZsb3cvY29yZS9mcmFtZXdvcmsvdGVuc29y",
+ "X3NoYXBlLnByb3RvGiV0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL3R5cGVz",
+ "LnByb3RvIuAFCgxDb3N0R3JhcGhEZWYSKwoEbm9kZRgBIAMoCzIdLnRlbnNv",
+ "cmZsb3cuQ29zdEdyYXBoRGVmLk5vZGUaogUKBE5vZGUSDAoEbmFtZRgBIAEo",
+ "CRIOCgZkZXZpY2UYAiABKAkSCgoCaWQYAyABKAUSOwoKaW5wdXRfaW5mbxgE",
+ "IAMoCzInLnRlbnNvcmZsb3cuQ29zdEdyYXBoRGVmLk5vZGUuSW5wdXRJbmZv",
+ "Ej0KC291dHB1dF9pbmZvGAUgAygLMigudGVuc29yZmxvdy5Db3N0R3JhcGhE",
+ "ZWYuTm9kZS5PdXRwdXRJbmZvEh0KFXRlbXBvcmFyeV9tZW1vcnlfc2l6ZRgG",
+ "IAEoAxIeChZwZXJzaXN0ZW50X21lbW9yeV9zaXplGAwgASgDEiEKFWhvc3Rf",
+ "dGVtcF9tZW1vcnlfc2l6ZRgKIAEoA0ICGAESIwoXZGV2aWNlX3RlbXBfbWVt",
+ "b3J5X3NpemUYCyABKANCAhgBEikKHWRldmljZV9wZXJzaXN0ZW50X21lbW9y",
+ "eV9zaXplGBAgASgDQgIYARIUCgxjb21wdXRlX2Nvc3QYCSABKAMSFAoMY29t",
+ "cHV0ZV90aW1lGA4gASgDEhMKC21lbW9yeV90aW1lGA8gASgDEhAKCGlzX2Zp",
+ "bmFsGAcgASgIEhUKDWNvbnRyb2xfaW5wdXQYCCADKAUSEgoKaW5hY2N1cmF0",
+ "ZRgRIAEoCBo7CglJbnB1dEluZm8SFgoOcHJlY2VkaW5nX25vZGUYASABKAUS",
+ "FgoOcHJlY2VkaW5nX3BvcnQYAiABKAUahgEKCk91dHB1dEluZm8SDAoEc2l6",
+ "ZRgBIAEoAxIYChBhbGlhc19pbnB1dF9wb3J0GAIgASgDEisKBXNoYXBlGAMg",
+ "ASgLMhwudGVuc29yZmxvdy5UZW5zb3JTaGFwZVByb3RvEiMKBWR0eXBlGAQg",
+ "ASgOMhQudGVuc29yZmxvdy5EYXRhVHlwZUJvChhvcmcudGVuc29yZmxvdy5m",
+ "cmFtZXdvcmtCD0Nvc3RHcmFwaFByb3Rvc1ABWj1naXRodWIuY29tL3RlbnNv",
+ "cmZsb3cvdGVuc29yZmxvdy90ZW5zb3JmbG93L2dvL2NvcmUvZnJhbWV3b3Jr",
+ "+AEBYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tensorflow.TensorShapeReflection.Descriptor, global::Tensorflow.TypesReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.CostGraphDef), global::Tensorflow.CostGraphDef.Parser, new[]{ "Node" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.CostGraphDef.Types.Node), global::Tensorflow.CostGraphDef.Types.Node.Parser, new[]{ "Name", "Device", "Id", "InputInfo", "OutputInfo", "TemporaryMemorySize", "PersistentMemorySize", "HostTempMemorySize", "DeviceTempMemorySize", "DevicePersistentMemorySize", "ComputeCost", "ComputeTime", "MemoryTime", "IsFinal", "ControlInput", "Inaccurate" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.CostGraphDef.Types.Node.Types.InputInfo), global::Tensorflow.CostGraphDef.Types.Node.Types.InputInfo.Parser, new[]{ "PrecedingNode", "PrecedingPort" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.CostGraphDef.Types.Node.Types.OutputInfo), global::Tensorflow.CostGraphDef.Types.Node.Types.OutputInfo.Parser, new[]{ "Size", "AliasInputPort", "Shape", "Dtype" }, null, null, null)})})
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class CostGraphDef : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CostGraphDef());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.CostGraphReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CostGraphDef() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CostGraphDef(CostGraphDef other) : this() {
+ node_ = other.node_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CostGraphDef Clone() {
+ return new CostGraphDef(this);
+ }
+
+ /// Field number for the "node" field.
+ public const int NodeFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_node_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.CostGraphDef.Types.Node.Parser);
+ private readonly pbc::RepeatedField node_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Node {
+ get { return node_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as CostGraphDef);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(CostGraphDef other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!node_.Equals(other.node_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= node_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ node_.WriteTo(output, _repeated_node_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += node_.CalculateSize(_repeated_node_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(CostGraphDef other) {
+ if (other == null) {
+ return;
+ }
+ node_.Add(other.node_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ node_.AddEntriesFrom(input, _repeated_node_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the CostGraphDef message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ public sealed partial class Node : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Node());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.CostGraphDef.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Node() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Node(Node other) : this() {
+ name_ = other.name_;
+ device_ = other.device_;
+ id_ = other.id_;
+ inputInfo_ = other.inputInfo_.Clone();
+ outputInfo_ = other.outputInfo_.Clone();
+ temporaryMemorySize_ = other.temporaryMemorySize_;
+ persistentMemorySize_ = other.persistentMemorySize_;
+ hostTempMemorySize_ = other.hostTempMemorySize_;
+ deviceTempMemorySize_ = other.deviceTempMemorySize_;
+ devicePersistentMemorySize_ = other.devicePersistentMemorySize_;
+ computeCost_ = other.computeCost_;
+ computeTime_ = other.computeTime_;
+ memoryTime_ = other.memoryTime_;
+ isFinal_ = other.isFinal_;
+ controlInput_ = other.controlInput_.Clone();
+ inaccurate_ = other.inaccurate_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Node Clone() {
+ return new Node(this);
+ }
+
+ /// Field number for the "name" field.
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ ///
+ /// The name of the node. Names are globally unique.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "device" field.
+ public const int DeviceFieldNumber = 2;
+ private string device_ = "";
+ ///
+ /// The device of the node. Can be empty if the node is mapped to the
+ /// default partition or partitioning hasn't been run yet.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Device {
+ get { return device_; }
+ set {
+ device_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "id" field.
+ public const int IdFieldNumber = 3;
+ private int id_;
+ ///
+ /// The id of the node. Node ids are only unique inside a partition.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int Id {
+ get { return id_; }
+ set {
+ id_ = value;
+ }
+ }
+
+ /// Field number for the "input_info" field.
+ public const int InputInfoFieldNumber = 4;
+ private static readonly pb::FieldCodec _repeated_inputInfo_codec
+ = pb::FieldCodec.ForMessage(34, global::Tensorflow.CostGraphDef.Types.Node.Types.InputInfo.Parser);
+ private readonly pbc::RepeatedField inputInfo_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField InputInfo {
+ get { return inputInfo_; }
+ }
+
+ /// Field number for the "output_info" field.
+ public const int OutputInfoFieldNumber = 5;
+ private static readonly pb::FieldCodec _repeated_outputInfo_codec
+ = pb::FieldCodec.ForMessage(42, global::Tensorflow.CostGraphDef.Types.Node.Types.OutputInfo.Parser);
+ private readonly pbc::RepeatedField outputInfo_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField OutputInfo {
+ get { return outputInfo_; }
+ }
+
+ /// Field number for the "temporary_memory_size" field.
+ public const int TemporaryMemorySizeFieldNumber = 6;
+ private long temporaryMemorySize_;
+ ///
+ /// Temporary memory used by this node.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long TemporaryMemorySize {
+ get { return temporaryMemorySize_; }
+ set {
+ temporaryMemorySize_ = value;
+ }
+ }
+
+ /// Field number for the "persistent_memory_size" field.
+ public const int PersistentMemorySizeFieldNumber = 12;
+ private long persistentMemorySize_;
+ ///
+ /// Persistent memory used by this node.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long PersistentMemorySize {
+ get { return persistentMemorySize_; }
+ set {
+ persistentMemorySize_ = value;
+ }
+ }
+
+ /// Field number for the "host_temp_memory_size" field.
+ public const int HostTempMemorySizeFieldNumber = 10;
+ private long hostTempMemorySize_;
+ [global::System.ObsoleteAttribute]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long HostTempMemorySize {
+ get { return hostTempMemorySize_; }
+ set {
+ hostTempMemorySize_ = value;
+ }
+ }
+
+ /// Field number for the "device_temp_memory_size" field.
+ public const int DeviceTempMemorySizeFieldNumber = 11;
+ private long deviceTempMemorySize_;
+ [global::System.ObsoleteAttribute]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long DeviceTempMemorySize {
+ get { return deviceTempMemorySize_; }
+ set {
+ deviceTempMemorySize_ = value;
+ }
+ }
+
+ /// Field number for the "device_persistent_memory_size" field.
+ public const int DevicePersistentMemorySizeFieldNumber = 16;
+ private long devicePersistentMemorySize_;
+ [global::System.ObsoleteAttribute]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long DevicePersistentMemorySize {
+ get { return devicePersistentMemorySize_; }
+ set {
+ devicePersistentMemorySize_ = value;
+ }
+ }
+
+ /// Field number for the "compute_cost" field.
+ public const int ComputeCostFieldNumber = 9;
+ private long computeCost_;
+ ///
+ /// Estimate of the computational cost of this node, in microseconds.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long ComputeCost {
+ get { return computeCost_; }
+ set {
+ computeCost_ = value;
+ }
+ }
+
+ /// Field number for the "compute_time" field.
+ public const int ComputeTimeFieldNumber = 14;
+ private long computeTime_;
+ ///
+ /// Analytical estimate of the computational cost of this node, in
+ /// microseconds.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long ComputeTime {
+ get { return computeTime_; }
+ set {
+ computeTime_ = value;
+ }
+ }
+
+ /// Field number for the "memory_time" field.
+ public const int MemoryTimeFieldNumber = 15;
+ private long memoryTime_;
+ ///
+ /// Analytical estimate of the memory access cost of this node, in
+ /// microseconds.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long MemoryTime {
+ get { return memoryTime_; }
+ set {
+ memoryTime_ = value;
+ }
+ }
+
+ /// Field number for the "is_final" field.
+ public const int IsFinalFieldNumber = 7;
+ private bool isFinal_;
+ ///
+ /// If true, the output is permanent: it can't be discarded, because this
+ /// node is part of the "final output". Nodes may depend on final nodes.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool IsFinal {
+ get { return isFinal_; }
+ set {
+ isFinal_ = value;
+ }
+ }
+
+ /// Field number for the "control_input" field.
+ public const int ControlInputFieldNumber = 8;
+ private static readonly pb::FieldCodec _repeated_controlInput_codec
+ = pb::FieldCodec.ForInt32(66);
+ private readonly pbc::RepeatedField controlInput_ = new pbc::RepeatedField();
+ ///
+ /// Ids of the control inputs for this node.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField ControlInput {
+ get { return controlInput_; }
+ }
+
+ /// Field number for the "inaccurate" field.
+ public const int InaccurateFieldNumber = 17;
+ private bool inaccurate_;
+ ///
+ /// Are the costs inaccurate?
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Inaccurate {
+ get { return inaccurate_; }
+ set {
+ inaccurate_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Node);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Node other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (Device != other.Device) return false;
+ if (Id != other.Id) return false;
+ if(!inputInfo_.Equals(other.inputInfo_)) return false;
+ if(!outputInfo_.Equals(other.outputInfo_)) return false;
+ if (TemporaryMemorySize != other.TemporaryMemorySize) return false;
+ if (PersistentMemorySize != other.PersistentMemorySize) return false;
+ if (HostTempMemorySize != other.HostTempMemorySize) return false;
+ if (DeviceTempMemorySize != other.DeviceTempMemorySize) return false;
+ if (DevicePersistentMemorySize != other.DevicePersistentMemorySize) return false;
+ if (ComputeCost != other.ComputeCost) return false;
+ if (ComputeTime != other.ComputeTime) return false;
+ if (MemoryTime != other.MemoryTime) return false;
+ if (IsFinal != other.IsFinal) return false;
+ if(!controlInput_.Equals(other.controlInput_)) return false;
+ if (Inaccurate != other.Inaccurate) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (Device.Length != 0) hash ^= Device.GetHashCode();
+ if (Id != 0) hash ^= Id.GetHashCode();
+ hash ^= inputInfo_.GetHashCode();
+ hash ^= outputInfo_.GetHashCode();
+ if (TemporaryMemorySize != 0L) hash ^= TemporaryMemorySize.GetHashCode();
+ if (PersistentMemorySize != 0L) hash ^= PersistentMemorySize.GetHashCode();
+ if (HostTempMemorySize != 0L) hash ^= HostTempMemorySize.GetHashCode();
+ if (DeviceTempMemorySize != 0L) hash ^= DeviceTempMemorySize.GetHashCode();
+ if (DevicePersistentMemorySize != 0L) hash ^= DevicePersistentMemorySize.GetHashCode();
+ if (ComputeCost != 0L) hash ^= ComputeCost.GetHashCode();
+ if (ComputeTime != 0L) hash ^= ComputeTime.GetHashCode();
+ if (MemoryTime != 0L) hash ^= MemoryTime.GetHashCode();
+ if (IsFinal != false) hash ^= IsFinal.GetHashCode();
+ hash ^= controlInput_.GetHashCode();
+ if (Inaccurate != false) hash ^= Inaccurate.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (Device.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Device);
+ }
+ if (Id != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(Id);
+ }
+ inputInfo_.WriteTo(output, _repeated_inputInfo_codec);
+ outputInfo_.WriteTo(output, _repeated_outputInfo_codec);
+ if (TemporaryMemorySize != 0L) {
+ output.WriteRawTag(48);
+ output.WriteInt64(TemporaryMemorySize);
+ }
+ if (IsFinal != false) {
+ output.WriteRawTag(56);
+ output.WriteBool(IsFinal);
+ }
+ controlInput_.WriteTo(output, _repeated_controlInput_codec);
+ if (ComputeCost != 0L) {
+ output.WriteRawTag(72);
+ output.WriteInt64(ComputeCost);
+ }
+ if (HostTempMemorySize != 0L) {
+ output.WriteRawTag(80);
+ output.WriteInt64(HostTempMemorySize);
+ }
+ if (DeviceTempMemorySize != 0L) {
+ output.WriteRawTag(88);
+ output.WriteInt64(DeviceTempMemorySize);
+ }
+ if (PersistentMemorySize != 0L) {
+ output.WriteRawTag(96);
+ output.WriteInt64(PersistentMemorySize);
+ }
+ if (ComputeTime != 0L) {
+ output.WriteRawTag(112);
+ output.WriteInt64(ComputeTime);
+ }
+ if (MemoryTime != 0L) {
+ output.WriteRawTag(120);
+ output.WriteInt64(MemoryTime);
+ }
+ if (DevicePersistentMemorySize != 0L) {
+ output.WriteRawTag(128, 1);
+ output.WriteInt64(DevicePersistentMemorySize);
+ }
+ if (Inaccurate != false) {
+ output.WriteRawTag(136, 1);
+ output.WriteBool(Inaccurate);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (Device.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Device);
+ }
+ if (Id != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Id);
+ }
+ size += inputInfo_.CalculateSize(_repeated_inputInfo_codec);
+ size += outputInfo_.CalculateSize(_repeated_outputInfo_codec);
+ if (TemporaryMemorySize != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(TemporaryMemorySize);
+ }
+ if (PersistentMemorySize != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(PersistentMemorySize);
+ }
+ if (HostTempMemorySize != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(HostTempMemorySize);
+ }
+ if (DeviceTempMemorySize != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(DeviceTempMemorySize);
+ }
+ if (DevicePersistentMemorySize != 0L) {
+ size += 2 + pb::CodedOutputStream.ComputeInt64Size(DevicePersistentMemorySize);
+ }
+ if (ComputeCost != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(ComputeCost);
+ }
+ if (ComputeTime != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(ComputeTime);
+ }
+ if (MemoryTime != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(MemoryTime);
+ }
+ if (IsFinal != false) {
+ size += 1 + 1;
+ }
+ size += controlInput_.CalculateSize(_repeated_controlInput_codec);
+ if (Inaccurate != false) {
+ size += 2 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Node other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ if (other.Device.Length != 0) {
+ Device = other.Device;
+ }
+ if (other.Id != 0) {
+ Id = other.Id;
+ }
+ inputInfo_.Add(other.inputInfo_);
+ outputInfo_.Add(other.outputInfo_);
+ if (other.TemporaryMemorySize != 0L) {
+ TemporaryMemorySize = other.TemporaryMemorySize;
+ }
+ if (other.PersistentMemorySize != 0L) {
+ PersistentMemorySize = other.PersistentMemorySize;
+ }
+ if (other.HostTempMemorySize != 0L) {
+ HostTempMemorySize = other.HostTempMemorySize;
+ }
+ if (other.DeviceTempMemorySize != 0L) {
+ DeviceTempMemorySize = other.DeviceTempMemorySize;
+ }
+ if (other.DevicePersistentMemorySize != 0L) {
+ DevicePersistentMemorySize = other.DevicePersistentMemorySize;
+ }
+ if (other.ComputeCost != 0L) {
+ ComputeCost = other.ComputeCost;
+ }
+ if (other.ComputeTime != 0L) {
+ ComputeTime = other.ComputeTime;
+ }
+ if (other.MemoryTime != 0L) {
+ MemoryTime = other.MemoryTime;
+ }
+ if (other.IsFinal != false) {
+ IsFinal = other.IsFinal;
+ }
+ controlInput_.Add(other.controlInput_);
+ if (other.Inaccurate != false) {
+ Inaccurate = other.Inaccurate;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 18: {
+ Device = input.ReadString();
+ break;
+ }
+ case 24: {
+ Id = input.ReadInt32();
+ break;
+ }
+ case 34: {
+ inputInfo_.AddEntriesFrom(input, _repeated_inputInfo_codec);
+ break;
+ }
+ case 42: {
+ outputInfo_.AddEntriesFrom(input, _repeated_outputInfo_codec);
+ break;
+ }
+ case 48: {
+ TemporaryMemorySize = input.ReadInt64();
+ break;
+ }
+ case 56: {
+ IsFinal = input.ReadBool();
+ break;
+ }
+ case 66:
+ case 64: {
+ controlInput_.AddEntriesFrom(input, _repeated_controlInput_codec);
+ break;
+ }
+ case 72: {
+ ComputeCost = input.ReadInt64();
+ break;
+ }
+ case 80: {
+ HostTempMemorySize = input.ReadInt64();
+ break;
+ }
+ case 88: {
+ DeviceTempMemorySize = input.ReadInt64();
+ break;
+ }
+ case 96: {
+ PersistentMemorySize = input.ReadInt64();
+ break;
+ }
+ case 112: {
+ ComputeTime = input.ReadInt64();
+ break;
+ }
+ case 120: {
+ MemoryTime = input.ReadInt64();
+ break;
+ }
+ case 128: {
+ DevicePersistentMemorySize = input.ReadInt64();
+ break;
+ }
+ case 136: {
+ Inaccurate = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// Container for nested types declared in the Node message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// Inputs of this node. They must be executed before this node can be
+ /// executed. An input is a particular output of another node, specified
+ /// by the node id and the output index.
+ ///
+ public sealed partial class InputInfo : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InputInfo());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.CostGraphDef.Types.Node.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InputInfo() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InputInfo(InputInfo other) : this() {
+ precedingNode_ = other.precedingNode_;
+ precedingPort_ = other.precedingPort_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InputInfo Clone() {
+ return new InputInfo(this);
+ }
+
+ /// Field number for the "preceding_node" field.
+ public const int PrecedingNodeFieldNumber = 1;
+ private int precedingNode_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int PrecedingNode {
+ get { return precedingNode_; }
+ set {
+ precedingNode_ = value;
+ }
+ }
+
+ /// Field number for the "preceding_port" field.
+ public const int PrecedingPortFieldNumber = 2;
+ private int precedingPort_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int PrecedingPort {
+ get { return precedingPort_; }
+ set {
+ precedingPort_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as InputInfo);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(InputInfo other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (PrecedingNode != other.PrecedingNode) return false;
+ if (PrecedingPort != other.PrecedingPort) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (PrecedingNode != 0) hash ^= PrecedingNode.GetHashCode();
+ if (PrecedingPort != 0) hash ^= PrecedingPort.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (PrecedingNode != 0) {
+ output.WriteRawTag(8);
+ output.WriteInt32(PrecedingNode);
+ }
+ if (PrecedingPort != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(PrecedingPort);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (PrecedingNode != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(PrecedingNode);
+ }
+ if (PrecedingPort != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(PrecedingPort);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(InputInfo other) {
+ if (other == null) {
+ return;
+ }
+ if (other.PrecedingNode != 0) {
+ PrecedingNode = other.PrecedingNode;
+ }
+ if (other.PrecedingPort != 0) {
+ PrecedingPort = other.PrecedingPort;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ PrecedingNode = input.ReadInt32();
+ break;
+ }
+ case 16: {
+ PrecedingPort = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Outputs of this node.
+ ///
+ public sealed partial class OutputInfo : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new OutputInfo());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.CostGraphDef.Types.Node.Descriptor.NestedTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OutputInfo() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OutputInfo(OutputInfo other) : this() {
+ size_ = other.size_;
+ aliasInputPort_ = other.aliasInputPort_;
+ shape_ = other.shape_ != null ? other.shape_.Clone() : null;
+ dtype_ = other.dtype_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public OutputInfo Clone() {
+ return new OutputInfo(this);
+ }
+
+ /// Field number for the "size" field.
+ public const int SizeFieldNumber = 1;
+ private long size_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long Size {
+ get { return size_; }
+ set {
+ size_ = value;
+ }
+ }
+
+ /// Field number for the "alias_input_port" field.
+ public const int AliasInputPortFieldNumber = 2;
+ private long aliasInputPort_;
+ ///
+ /// If >= 0, the output is an alias of an input. Note that an alias input
+ /// may itself be an alias. The algorithm will therefore need to follow
+ /// those pointers.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long AliasInputPort {
+ get { return aliasInputPort_; }
+ set {
+ aliasInputPort_ = value;
+ }
+ }
+
+ /// Field number for the "shape" field.
+ public const int ShapeFieldNumber = 3;
+ private global::Tensorflow.TensorShapeProto shape_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.TensorShapeProto Shape {
+ get { return shape_; }
+ set {
+ shape_ = value;
+ }
+ }
+
+ /// Field number for the "dtype" field.
+ public const int DtypeFieldNumber = 4;
+ private global::Tensorflow.DataType dtype_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tensorflow.DataType Dtype {
+ get { return dtype_; }
+ set {
+ dtype_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as OutputInfo);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(OutputInfo other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Size != other.Size) return false;
+ if (AliasInputPort != other.AliasInputPort) return false;
+ if (!object.Equals(Shape, other.Shape)) return false;
+ if (Dtype != other.Dtype) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Size != 0L) hash ^= Size.GetHashCode();
+ if (AliasInputPort != 0L) hash ^= AliasInputPort.GetHashCode();
+ if (shape_ != null) hash ^= Shape.GetHashCode();
+ if (Dtype != 0) hash ^= Dtype.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Size != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Size);
+ }
+ if (AliasInputPort != 0L) {
+ output.WriteRawTag(16);
+ output.WriteInt64(AliasInputPort);
+ }
+ if (shape_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Shape);
+ }
+ if (Dtype != 0) {
+ output.WriteRawTag(32);
+ output.WriteEnum((int) Dtype);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Size != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Size);
+ }
+ if (AliasInputPort != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(AliasInputPort);
+ }
+ if (shape_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Shape);
+ }
+ if (Dtype != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Dtype);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(OutputInfo other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Size != 0L) {
+ Size = other.Size;
+ }
+ if (other.AliasInputPort != 0L) {
+ AliasInputPort = other.AliasInputPort;
+ }
+ if (other.shape_ != null) {
+ if (shape_ == null) {
+ shape_ = new global::Tensorflow.TensorShapeProto();
+ }
+ Shape.MergeFrom(other.Shape);
+ }
+ if (other.Dtype != 0) {
+ Dtype = other.Dtype;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ Size = input.ReadInt64();
+ break;
+ }
+ case 16: {
+ AliasInputPort = input.ReadInt64();
+ break;
+ }
+ case 26: {
+ if (shape_ == null) {
+ shape_ = new global::Tensorflow.TensorShapeProto();
+ }
+ input.ReadMessage(shape_);
+ break;
+ }
+ case 32: {
+ dtype_ = (global::Tensorflow.DataType) input.ReadEnum();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/Debug.cs b/src/TensorFlowNET.Core/Protobuf/Debug.cs
new file mode 100644
index 00000000..5e39a0b8
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/Debug.cs
@@ -0,0 +1,893 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/protobuf/debug.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/protobuf/debug.proto
+ public static partial class DebugReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/protobuf/debug.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static DebugReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiR0ZW5zb3JmbG93L2NvcmUvcHJvdG9idWYvZGVidWcucHJvdG8SCnRlbnNv",
+ "cmZsb3cijgEKEERlYnVnVGVuc29yV2F0Y2gSEQoJbm9kZV9uYW1lGAEgASgJ",
+ "EhMKC291dHB1dF9zbG90GAIgASgFEhEKCWRlYnVnX29wcxgDIAMoCRISCgpk",
+ "ZWJ1Z191cmxzGAQgAygJEisKI3RvbGVyYXRlX2RlYnVnX29wX2NyZWF0aW9u",
+ "X2ZhaWx1cmVzGAUgASgIIoEBCgxEZWJ1Z09wdGlvbnMSPQoXZGVidWdfdGVu",
+ "c29yX3dhdGNoX29wdHMYBCADKAsyHC50ZW5zb3JmbG93LkRlYnVnVGVuc29y",
+ "V2F0Y2gSEwoLZ2xvYmFsX3N0ZXAYCiABKAMSHQoVcmVzZXRfZGlza19ieXRl",
+ "X3VzYWdlGAsgASgIImoKEkRlYnVnZ2VkU291cmNlRmlsZRIMCgRob3N0GAEg",
+ "ASgJEhEKCWZpbGVfcGF0aBgCIAEoCRIVCg1sYXN0X21vZGlmaWVkGAMgASgD",
+ "Eg0KBWJ5dGVzGAQgASgDEg0KBWxpbmVzGAUgAygJIksKE0RlYnVnZ2VkU291",
+ "cmNlRmlsZXMSNAoMc291cmNlX2ZpbGVzGAEgAygLMh4udGVuc29yZmxvdy5E",
+ "ZWJ1Z2dlZFNvdXJjZUZpbGVCagoYb3JnLnRlbnNvcmZsb3cuZnJhbWV3b3Jr",
+ "QgtEZWJ1Z1Byb3Rvc1ABWjxnaXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29y",
+ "Zmxvdy90ZW5zb3JmbG93L2dvL2NvcmUvcHJvdG9idWb4AQFiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DebugTensorWatch), global::Tensorflow.DebugTensorWatch.Parser, new[]{ "NodeName", "OutputSlot", "DebugOps", "DebugUrls", "TolerateDebugOpCreationFailures" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DebugOptions), global::Tensorflow.DebugOptions.Parser, new[]{ "DebugTensorWatchOpts", "GlobalStep", "ResetDiskByteUsage" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DebuggedSourceFile), global::Tensorflow.DebuggedSourceFile.Parser, new[]{ "Host", "FilePath", "LastModified", "Bytes", "Lines" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DebuggedSourceFiles), global::Tensorflow.DebuggedSourceFiles.Parser, new[]{ "SourceFiles" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ ///
+ /// Option for watching a node in TensorFlow Debugger (tfdbg).
+ ///
+ public sealed partial class DebugTensorWatch : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new DebugTensorWatch());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DebugReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugTensorWatch() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugTensorWatch(DebugTensorWatch other) : this() {
+ nodeName_ = other.nodeName_;
+ outputSlot_ = other.outputSlot_;
+ debugOps_ = other.debugOps_.Clone();
+ debugUrls_ = other.debugUrls_.Clone();
+ tolerateDebugOpCreationFailures_ = other.tolerateDebugOpCreationFailures_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugTensorWatch Clone() {
+ return new DebugTensorWatch(this);
+ }
+
+ /// Field number for the "node_name" field.
+ public const int NodeNameFieldNumber = 1;
+ private string nodeName_ = "";
+ ///
+ /// Name of the node to watch.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string NodeName {
+ get { return nodeName_; }
+ set {
+ nodeName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "output_slot" field.
+ public const int OutputSlotFieldNumber = 2;
+ private int outputSlot_;
+ ///
+ /// Output slot to watch.
+ /// The semantics of output_slot == -1 is that the node is only watched for
+ /// completion, but not for any output tensors. See NodeCompletionCallback
+ /// in debug_gateway.h.
+ /// TODO(cais): Implement this semantics.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int OutputSlot {
+ get { return outputSlot_; }
+ set {
+ outputSlot_ = value;
+ }
+ }
+
+ /// Field number for the "debug_ops" field.
+ public const int DebugOpsFieldNumber = 3;
+ private static readonly pb::FieldCodec _repeated_debugOps_codec
+ = pb::FieldCodec.ForString(26);
+ private readonly pbc::RepeatedField debugOps_ = new pbc::RepeatedField();
+ ///
+ /// Name(s) of the debugging op(s).
+ /// One or more than one probes on a tensor.
+ /// e.g., {"DebugIdentity", "DebugNanCount"}
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField DebugOps {
+ get { return debugOps_; }
+ }
+
+ /// Field number for the "debug_urls" field.
+ public const int DebugUrlsFieldNumber = 4;
+ private static readonly pb::FieldCodec _repeated_debugUrls_codec
+ = pb::FieldCodec.ForString(34);
+ private readonly pbc::RepeatedField debugUrls_ = new pbc::RepeatedField();
+ ///
+ /// URL(s) for debug targets(s).
+ ///
+ /// Supported URL formats are:
+ /// - file:///foo/tfdbg_dump: Writes out Event content to file
+ /// /foo/tfdbg_dump. Assumes all directories can be created if they don't
+ /// already exist.
+ /// - grpc://localhost:11011: Sends an RPC request to an EventListener
+ /// service running at localhost:11011 with the event.
+ /// - memcbk:///event_key: Routes tensors to clients using the
+ /// callback registered with the DebugCallbackRegistry for event_key.
+ ///
+ /// Each debug op listed in debug_ops will publish its output tensor (debug
+ /// signal) to all URLs in debug_urls.
+ ///
+ /// N.B. Session::Run() supports concurrent invocations of the same inputs
+ /// (feed keys), outputs and target nodes. If such concurrent invocations
+ /// are to be debugged, the callers of Session::Run() must use distinct
+ /// debug_urls to make sure that the streamed or dumped events do not overlap
+ /// among the invocations.
+ /// TODO(cais): More visible documentation of this in g3docs.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField DebugUrls {
+ get { return debugUrls_; }
+ }
+
+ /// Field number for the "tolerate_debug_op_creation_failures" field.
+ public const int TolerateDebugOpCreationFailuresFieldNumber = 5;
+ private bool tolerateDebugOpCreationFailures_;
+ ///
+ /// Do not error out if debug op creation fails (e.g., due to dtype
+ /// incompatibility). Instead, just log the failure.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool TolerateDebugOpCreationFailures {
+ get { return tolerateDebugOpCreationFailures_; }
+ set {
+ tolerateDebugOpCreationFailures_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as DebugTensorWatch);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(DebugTensorWatch other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (NodeName != other.NodeName) return false;
+ if (OutputSlot != other.OutputSlot) return false;
+ if(!debugOps_.Equals(other.debugOps_)) return false;
+ if(!debugUrls_.Equals(other.debugUrls_)) return false;
+ if (TolerateDebugOpCreationFailures != other.TolerateDebugOpCreationFailures) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (NodeName.Length != 0) hash ^= NodeName.GetHashCode();
+ if (OutputSlot != 0) hash ^= OutputSlot.GetHashCode();
+ hash ^= debugOps_.GetHashCode();
+ hash ^= debugUrls_.GetHashCode();
+ if (TolerateDebugOpCreationFailures != false) hash ^= TolerateDebugOpCreationFailures.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (NodeName.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(NodeName);
+ }
+ if (OutputSlot != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(OutputSlot);
+ }
+ debugOps_.WriteTo(output, _repeated_debugOps_codec);
+ debugUrls_.WriteTo(output, _repeated_debugUrls_codec);
+ if (TolerateDebugOpCreationFailures != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(TolerateDebugOpCreationFailures);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (NodeName.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(NodeName);
+ }
+ if (OutputSlot != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(OutputSlot);
+ }
+ size += debugOps_.CalculateSize(_repeated_debugOps_codec);
+ size += debugUrls_.CalculateSize(_repeated_debugUrls_codec);
+ if (TolerateDebugOpCreationFailures != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(DebugTensorWatch other) {
+ if (other == null) {
+ return;
+ }
+ if (other.NodeName.Length != 0) {
+ NodeName = other.NodeName;
+ }
+ if (other.OutputSlot != 0) {
+ OutputSlot = other.OutputSlot;
+ }
+ debugOps_.Add(other.debugOps_);
+ debugUrls_.Add(other.debugUrls_);
+ if (other.TolerateDebugOpCreationFailures != false) {
+ TolerateDebugOpCreationFailures = other.TolerateDebugOpCreationFailures;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ NodeName = input.ReadString();
+ break;
+ }
+ case 16: {
+ OutputSlot = input.ReadInt32();
+ break;
+ }
+ case 26: {
+ debugOps_.AddEntriesFrom(input, _repeated_debugOps_codec);
+ break;
+ }
+ case 34: {
+ debugUrls_.AddEntriesFrom(input, _repeated_debugUrls_codec);
+ break;
+ }
+ case 40: {
+ TolerateDebugOpCreationFailures = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ ///
+ /// Options for initializing DebuggerState in TensorFlow Debugger (tfdbg).
+ ///
+ public sealed partial class DebugOptions : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new DebugOptions());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DebugReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugOptions() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugOptions(DebugOptions other) : this() {
+ debugTensorWatchOpts_ = other.debugTensorWatchOpts_.Clone();
+ globalStep_ = other.globalStep_;
+ resetDiskByteUsage_ = other.resetDiskByteUsage_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebugOptions Clone() {
+ return new DebugOptions(this);
+ }
+
+ /// Field number for the "debug_tensor_watch_opts" field.
+ public const int DebugTensorWatchOptsFieldNumber = 4;
+ private static readonly pb::FieldCodec _repeated_debugTensorWatchOpts_codec
+ = pb::FieldCodec.ForMessage(34, global::Tensorflow.DebugTensorWatch.Parser);
+ private readonly pbc::RepeatedField debugTensorWatchOpts_ = new pbc::RepeatedField();
+ ///
+ /// Debugging options
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField DebugTensorWatchOpts {
+ get { return debugTensorWatchOpts_; }
+ }
+
+ /// Field number for the "global_step" field.
+ public const int GlobalStepFieldNumber = 10;
+ private long globalStep_;
+ ///
+ /// Caller-specified global step count.
+ /// Note that this is distinct from the session run count and the executor
+ /// step count.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long GlobalStep {
+ get { return globalStep_; }
+ set {
+ globalStep_ = value;
+ }
+ }
+
+ /// Field number for the "reset_disk_byte_usage" field.
+ public const int ResetDiskByteUsageFieldNumber = 11;
+ private bool resetDiskByteUsage_;
+ ///
+ /// Whether the total disk usage of tfdbg is to be reset to zero
+ /// in this Session.run call. This is used by wrappers and hooks
+ /// such as the local CLI ones to indicate that the dumped tensors
+ /// are cleaned up from the disk after each Session.run.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool ResetDiskByteUsage {
+ get { return resetDiskByteUsage_; }
+ set {
+ resetDiskByteUsage_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as DebugOptions);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(DebugOptions other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!debugTensorWatchOpts_.Equals(other.debugTensorWatchOpts_)) return false;
+ if (GlobalStep != other.GlobalStep) return false;
+ if (ResetDiskByteUsage != other.ResetDiskByteUsage) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= debugTensorWatchOpts_.GetHashCode();
+ if (GlobalStep != 0L) hash ^= GlobalStep.GetHashCode();
+ if (ResetDiskByteUsage != false) hash ^= ResetDiskByteUsage.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ debugTensorWatchOpts_.WriteTo(output, _repeated_debugTensorWatchOpts_codec);
+ if (GlobalStep != 0L) {
+ output.WriteRawTag(80);
+ output.WriteInt64(GlobalStep);
+ }
+ if (ResetDiskByteUsage != false) {
+ output.WriteRawTag(88);
+ output.WriteBool(ResetDiskByteUsage);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += debugTensorWatchOpts_.CalculateSize(_repeated_debugTensorWatchOpts_codec);
+ if (GlobalStep != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(GlobalStep);
+ }
+ if (ResetDiskByteUsage != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(DebugOptions other) {
+ if (other == null) {
+ return;
+ }
+ debugTensorWatchOpts_.Add(other.debugTensorWatchOpts_);
+ if (other.GlobalStep != 0L) {
+ GlobalStep = other.GlobalStep;
+ }
+ if (other.ResetDiskByteUsage != false) {
+ ResetDiskByteUsage = other.ResetDiskByteUsage;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 34: {
+ debugTensorWatchOpts_.AddEntriesFrom(input, _repeated_debugTensorWatchOpts_codec);
+ break;
+ }
+ case 80: {
+ GlobalStep = input.ReadInt64();
+ break;
+ }
+ case 88: {
+ ResetDiskByteUsage = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class DebuggedSourceFile : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new DebuggedSourceFile());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DebugReflection.Descriptor.MessageTypes[2]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFile() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFile(DebuggedSourceFile other) : this() {
+ host_ = other.host_;
+ filePath_ = other.filePath_;
+ lastModified_ = other.lastModified_;
+ bytes_ = other.bytes_;
+ lines_ = other.lines_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFile Clone() {
+ return new DebuggedSourceFile(this);
+ }
+
+ /// Field number for the "host" field.
+ public const int HostFieldNumber = 1;
+ private string host_ = "";
+ ///
+ /// The host name on which a source code file is located.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Host {
+ get { return host_; }
+ set {
+ host_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "file_path" field.
+ public const int FilePathFieldNumber = 2;
+ private string filePath_ = "";
+ ///
+ /// Path to the source code file.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string FilePath {
+ get { return filePath_; }
+ set {
+ filePath_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "last_modified" field.
+ public const int LastModifiedFieldNumber = 3;
+ private long lastModified_;
+ ///
+ /// The timestamp at which the source code file is last modified.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long LastModified {
+ get { return lastModified_; }
+ set {
+ lastModified_ = value;
+ }
+ }
+
+ /// Field number for the "bytes" field.
+ public const int BytesFieldNumber = 4;
+ private long bytes_;
+ ///
+ /// Byte size of the file.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long Bytes {
+ get { return bytes_; }
+ set {
+ bytes_ = value;
+ }
+ }
+
+ /// Field number for the "lines" field.
+ public const int LinesFieldNumber = 5;
+ private static readonly pb::FieldCodec _repeated_lines_codec
+ = pb::FieldCodec.ForString(42);
+ private readonly pbc::RepeatedField lines_ = new pbc::RepeatedField();
+ ///
+ /// Line-by-line content of the source code file.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Lines {
+ get { return lines_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as DebuggedSourceFile);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(DebuggedSourceFile other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Host != other.Host) return false;
+ if (FilePath != other.FilePath) return false;
+ if (LastModified != other.LastModified) return false;
+ if (Bytes != other.Bytes) return false;
+ if(!lines_.Equals(other.lines_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Host.Length != 0) hash ^= Host.GetHashCode();
+ if (FilePath.Length != 0) hash ^= FilePath.GetHashCode();
+ if (LastModified != 0L) hash ^= LastModified.GetHashCode();
+ if (Bytes != 0L) hash ^= Bytes.GetHashCode();
+ hash ^= lines_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Host.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Host);
+ }
+ if (FilePath.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(FilePath);
+ }
+ if (LastModified != 0L) {
+ output.WriteRawTag(24);
+ output.WriteInt64(LastModified);
+ }
+ if (Bytes != 0L) {
+ output.WriteRawTag(32);
+ output.WriteInt64(Bytes);
+ }
+ lines_.WriteTo(output, _repeated_lines_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Host.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Host);
+ }
+ if (FilePath.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(FilePath);
+ }
+ if (LastModified != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(LastModified);
+ }
+ if (Bytes != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Bytes);
+ }
+ size += lines_.CalculateSize(_repeated_lines_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(DebuggedSourceFile other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Host.Length != 0) {
+ Host = other.Host;
+ }
+ if (other.FilePath.Length != 0) {
+ FilePath = other.FilePath;
+ }
+ if (other.LastModified != 0L) {
+ LastModified = other.LastModified;
+ }
+ if (other.Bytes != 0L) {
+ Bytes = other.Bytes;
+ }
+ lines_.Add(other.lines_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Host = input.ReadString();
+ break;
+ }
+ case 18: {
+ FilePath = input.ReadString();
+ break;
+ }
+ case 24: {
+ LastModified = input.ReadInt64();
+ break;
+ }
+ case 32: {
+ Bytes = input.ReadInt64();
+ break;
+ }
+ case 42: {
+ lines_.AddEntriesFrom(input, _repeated_lines_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class DebuggedSourceFiles : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new DebuggedSourceFiles());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DebugReflection.Descriptor.MessageTypes[3]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFiles() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFiles(DebuggedSourceFiles other) : this() {
+ sourceFiles_ = other.sourceFiles_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DebuggedSourceFiles Clone() {
+ return new DebuggedSourceFiles(this);
+ }
+
+ /// Field number for the "source_files" field.
+ public const int SourceFilesFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_sourceFiles_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.DebuggedSourceFile.Parser);
+ private readonly pbc::RepeatedField sourceFiles_ = new pbc::RepeatedField();
+ ///
+ /// A collection of source code files.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField SourceFiles {
+ get { return sourceFiles_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as DebuggedSourceFiles);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(DebuggedSourceFiles other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!sourceFiles_.Equals(other.sourceFiles_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= sourceFiles_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ sourceFiles_.WriteTo(output, _repeated_sourceFiles_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += sourceFiles_.CalculateSize(_repeated_sourceFiles_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(DebuggedSourceFiles other) {
+ if (other == null) {
+ return;
+ }
+ sourceFiles_.Add(other.sourceFiles_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ sourceFiles_.AddEntriesFrom(input, _repeated_sourceFiles_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/src/TensorFlowNET.Core/Protobuf/DeviceAttributes.cs b/src/TensorFlowNET.Core/Protobuf/DeviceAttributes.cs
new file mode 100644
index 00000000..aafe9dfd
--- /dev/null
+++ b/src/TensorFlowNET.Core/Protobuf/DeviceAttributes.cs
@@ -0,0 +1,860 @@
+//
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: tensorflow/core/framework/device_attributes.proto
+//
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tensorflow {
+
+ /// Holder for reflection information generated from tensorflow/core/framework/device_attributes.proto
+ public static partial class DeviceAttributesReflection {
+
+ #region Descriptor
+ /// File descriptor for tensorflow/core/framework/device_attributes.proto
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static DeviceAttributesReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CjF0ZW5zb3JmbG93L2NvcmUvZnJhbWV3b3JrL2RldmljZV9hdHRyaWJ1dGVz",
+ "LnByb3RvEgp0ZW5zb3JmbG93IkUKEEludGVyY29ubmVjdExpbmsSEQoJZGV2",
+ "aWNlX2lkGAEgASgFEgwKBHR5cGUYAiABKAkSEAoIc3RyZW5ndGgYAyABKAUi",
+ "OAoKTG9jYWxMaW5rcxIqCgRsaW5rGAEgAygLMhwudGVuc29yZmxvdy5JbnRl",
+ "cmNvbm5lY3RMaW5rIloKDkRldmljZUxvY2FsaXR5Eg4KBmJ1c19pZBgBIAEo",
+ "BRIRCgludW1hX25vZGUYAiABKAUSJQoFbGlua3MYAyABKAsyFi50ZW5zb3Jm",
+ "bG93LkxvY2FsTGlua3MirAEKEERldmljZUF0dHJpYnV0ZXMSDAoEbmFtZRgB",
+ "IAEoCRITCgtkZXZpY2VfdHlwZRgCIAEoCRIUCgxtZW1vcnlfbGltaXQYBCAB",
+ "KAMSLAoIbG9jYWxpdHkYBSABKAsyGi50ZW5zb3JmbG93LkRldmljZUxvY2Fs",
+ "aXR5EhMKC2luY2FybmF0aW9uGAYgASgGEhwKFHBoeXNpY2FsX2RldmljZV9k",
+ "ZXNjGAcgASgJQnYKGG9yZy50ZW5zb3JmbG93LmZyYW1ld29ya0IWRGV2aWNl",
+ "QXR0cmlidXRlc1Byb3Rvc1ABWj1naXRodWIuY29tL3RlbnNvcmZsb3cvdGVu",
+ "c29yZmxvdy90ZW5zb3JmbG93L2dvL2NvcmUvZnJhbWV3b3Jr+AEBYgZwcm90",
+ "bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.InterconnectLink), global::Tensorflow.InterconnectLink.Parser, new[]{ "DeviceId", "Type", "Strength" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.LocalLinks), global::Tensorflow.LocalLinks.Parser, new[]{ "Link" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DeviceLocality), global::Tensorflow.DeviceLocality.Parser, new[]{ "BusId", "NumaNode", "Links" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tensorflow.DeviceAttributes), global::Tensorflow.DeviceAttributes.Parser, new[]{ "Name", "DeviceType", "MemoryLimit", "Locality", "Incarnation", "PhysicalDeviceDesc" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class InterconnectLink : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InterconnectLink());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DeviceAttributesReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InterconnectLink() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InterconnectLink(InterconnectLink other) : this() {
+ deviceId_ = other.deviceId_;
+ type_ = other.type_;
+ strength_ = other.strength_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public InterconnectLink Clone() {
+ return new InterconnectLink(this);
+ }
+
+ /// Field number for the "device_id" field.
+ public const int DeviceIdFieldNumber = 1;
+ private int deviceId_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int DeviceId {
+ get { return deviceId_; }
+ set {
+ deviceId_ = value;
+ }
+ }
+
+ /// Field number for the "type" field.
+ public const int TypeFieldNumber = 2;
+ private string type_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Type {
+ get { return type_; }
+ set {
+ type_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "strength" field.
+ public const int StrengthFieldNumber = 3;
+ private int strength_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int Strength {
+ get { return strength_; }
+ set {
+ strength_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as InterconnectLink);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(InterconnectLink other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (DeviceId != other.DeviceId) return false;
+ if (Type != other.Type) return false;
+ if (Strength != other.Strength) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (DeviceId != 0) hash ^= DeviceId.GetHashCode();
+ if (Type.Length != 0) hash ^= Type.GetHashCode();
+ if (Strength != 0) hash ^= Strength.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (DeviceId != 0) {
+ output.WriteRawTag(8);
+ output.WriteInt32(DeviceId);
+ }
+ if (Type.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Type);
+ }
+ if (Strength != 0) {
+ output.WriteRawTag(24);
+ output.WriteInt32(Strength);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (DeviceId != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(DeviceId);
+ }
+ if (Type.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Type);
+ }
+ if (Strength != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Strength);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(InterconnectLink other) {
+ if (other == null) {
+ return;
+ }
+ if (other.DeviceId != 0) {
+ DeviceId = other.DeviceId;
+ }
+ if (other.Type.Length != 0) {
+ Type = other.Type;
+ }
+ if (other.Strength != 0) {
+ Strength = other.Strength;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ DeviceId = input.ReadInt32();
+ break;
+ }
+ case 18: {
+ Type = input.ReadString();
+ break;
+ }
+ case 24: {
+ Strength = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class LocalLinks : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new LocalLinks());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tensorflow.DeviceAttributesReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LocalLinks() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LocalLinks(LocalLinks other) : this() {
+ link_ = other.link_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LocalLinks Clone() {
+ return new LocalLinks(this);
+ }
+
+ /// Field number for the "link" field.
+ public const int LinkFieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_link_codec
+ = pb::FieldCodec.ForMessage(10, global::Tensorflow.InterconnectLink.Parser);
+ private readonly pbc::RepeatedField link_ = new pbc::RepeatedField();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Link {
+ get { return link_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LocalLinks);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LocalLinks other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!link_.Equals(other.link_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= link_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ link_.WriteTo(output, _repeated_link_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += link_.CalculateSize(_repeated_link_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LocalLinks other) {
+ if (other == null) {
+ return;
+ }
+ link_.Add(other.link_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ link_.AddEntriesFrom(input, _repeated_link_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public sealed partial class DeviceLocality : pb::IMessage {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser