@@ -32,7 +32,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TF_AttrMetadata TF_OperationGetAttrMetadata(IntPtr oper, string attr_name, IntPtr status); | |||
public static extern TF_AttrMetadata TF_OperationGetAttrMetadata(IntPtr oper, string attr_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// Fills in `value` with the value of the attribute `attr_name`. `value` must | |||
@@ -46,7 +46,7 @@ namespace Tensorflow | |||
/// <param name="max_length">size_t</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_OperationGetAttrString(IntPtr oper, string attr_name, IntPtr value, uint max_length, IntPtr status); | |||
public static extern void TF_OperationGetAttrString(IntPtr oper, string attr_name, IntPtr value, uint max_length, SafeStatusHandle status); | |||
/// <summary> | |||
/// Sets `output_attr_value` to the binary-serialized AttrValue proto | |||
@@ -55,13 +55,13 @@ namespace Tensorflow | |||
/// <param name="oper"></param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TF_OperationGetAttrValueProto(IntPtr oper, string attr_name, IntPtr output_attr_value, IntPtr status); | |||
public static extern int TF_OperationGetAttrValueProto(IntPtr oper, string attr_name, IntPtr output_attr_value, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetAttrBool(IntPtr desc, string attr_name, bool value); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetAttrValueProto(IntPtr desc, string attr_name, IntPtr proto, uint proto_len, IntPtr status); | |||
public static extern void TF_SetAttrValueProto(IntPtr desc, string attr_name, IntPtr proto, uint proto_len, SafeStatusHandle status); | |||
/// <summary> | |||
/// Set `num_dims` to -1 to represent "unknown rank". | |||
@@ -99,7 +99,7 @@ namespace Tensorflow | |||
public static extern void TF_SetAttrStringList(IntPtr desc, string attr_name, IntPtr[] values, uint[] lengths, int num_values); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetAttrTensor(IntPtr desc, string attr_name, IntPtr value, IntPtr status); | |||
public static extern void TF_SetAttrTensor(IntPtr desc, string attr_name, IntPtr value, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetAttrType(IntPtr desc, string attr_name, TF_DataType value); | |||
@@ -45,7 +45,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_DeviceListType(IntPtr list, int index, IntPtr status); | |||
public static extern IntPtr TF_DeviceListType(IntPtr list, int index, SafeStatusHandle status); | |||
/// <summary> | |||
/// Deallocates the device list. | |||
@@ -64,7 +64,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns>TFE_TensorHandle*</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TFE_TensorHandleCopyToDevice(IntPtr h, IntPtr ctx, string device_name, IntPtr status); | |||
public static extern IntPtr TFE_TensorHandleCopyToDevice(IntPtr h, IntPtr ctx, string device_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// Retrieves the full name of the device (e.g. /job:worker/replica:0/...) | |||
@@ -76,6 +76,6 @@ namespace Tensorflow | |||
/// <param name="index"></param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_DeviceListName(IntPtr list, int index, IntPtr status); | |||
public static extern IntPtr TF_DeviceListName(IntPtr list, int index, SafeStatusHandle status); | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace Tensorflow.Eager | |||
public Context(ContextOptions opts, Status status) | |||
{ | |||
_handle = c_api.TFE_NewContext(opts, status); | |||
_handle = c_api.TFE_NewContext(opts, status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -12,32 +12,32 @@ namespace Tensorflow.Eager | |||
public EagerTensor(IntPtr handle) : base(handle) | |||
{ | |||
tfe_tensor_handle = handle; | |||
_handle = c_api.TFE_TensorHandleResolve(handle, status); | |||
_handle = c_api.TFE_TensorHandleResolve(handle, status.Handle); | |||
} | |||
public EagerTensor(string value, string device_name) : base(value) | |||
{ | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status); | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status.Handle); | |||
} | |||
public EagerTensor(int value, string device_name) : base(value) | |||
{ | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status); | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status.Handle); | |||
} | |||
public EagerTensor(float[] value, string device_name) : base(value) | |||
{ | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status); | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status.Handle); | |||
} | |||
public EagerTensor(double[] value, string device_name) : base(value) | |||
{ | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status); | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status.Handle); | |||
} | |||
public EagerTensor(NDArray value, string device_name) : base(value) | |||
{ | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status); | |||
tfe_tensor_handle = c_api.TFE_NewTensorHandle(_handle, status.Handle); | |||
} | |||
public override string ToString() | |||
@@ -30,7 +30,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TF_AttrType TFE_OpGetAttrType(IntPtr op, string attr_name, ref byte is_list, IntPtr status); | |||
public static extern TF_AttrType TFE_OpGetAttrType(IntPtr op, string attr_name, ref byte is_list, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the length (number of tensors) of the input argument `input_name` | |||
@@ -40,7 +40,7 @@ namespace Tensorflow | |||
/// <param name="input_name">const char*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TFE_OpGetInputLength(IntPtr op, string input_name, IntPtr status); | |||
public static extern int TFE_OpGetInputLength(IntPtr op, string input_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the length (number of tensors) of the output argument `output_name` | |||
@@ -51,7 +51,7 @@ namespace Tensorflow | |||
/// <param name="status"></param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TFE_OpGetOutputLength(IntPtr op, string input_name, IntPtr status); | |||
public static extern int TFE_OpGetOutputLength(IntPtr op, string input_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -62,7 +62,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TFE_OpAddInputList(IntPtr op, IntPtr[] inputs, int num_inputs, IntPtr status); | |||
public static extern int TFE_OpAddInputList(IntPtr op, IntPtr[] inputs, int num_inputs, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -71,7 +71,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns>TFE_Context*</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TFE_Context TFE_NewContext(IntPtr opts, IntPtr status); | |||
public static extern TFE_Context TFE_NewContext(IntPtr opts, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -89,7 +89,7 @@ namespace Tensorflow | |||
/// <param name="num_retvals">int*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_Execute(IntPtr op, IntPtr[] retvals, ref int num_retvals, IntPtr status); | |||
public static extern void TFE_Execute(IntPtr op, IntPtr[] retvals, ref int num_retvals, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -99,7 +99,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TFE_Op TFE_NewOp(IntPtr ctx, string op_or_function_name, IntPtr status); | |||
public static extern TFE_Op TFE_NewOp(IntPtr ctx, string op_or_function_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -109,7 +109,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <param name="op_to_reset">TFE_Op*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_OpReset(IntPtr ctx, string op_or_function_name, IntPtr status, IntPtr op_to_reset); | |||
public static extern void TFE_OpReset(IntPtr ctx, string op_or_function_name, SafeStatusHandle status, IntPtr op_to_reset); | |||
/// <summary> | |||
/// | |||
@@ -139,7 +139,7 @@ namespace Tensorflow | |||
/// <param name="num_dims">const int</param> | |||
/// <param name="out_status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_OpSetAttrShape(IntPtr op, string attr_name, long[] dims, int num_dims, IntPtr out_status); | |||
public static extern void TFE_OpSetAttrShape(IntPtr op, string attr_name, long[] dims, int num_dims, SafeStatusHandle out_status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_OpSetAttrBool(IntPtr op, string attr_name, bool value); | |||
@@ -161,7 +161,7 @@ namespace Tensorflow | |||
/// <param name="device_name"></param> | |||
/// <param name="status"></param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_OpSetDevice(TFE_Op op, string device_name, IntPtr status); | |||
public static extern void TFE_OpSetDevice(TFE_Op op, string device_name, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -170,7 +170,7 @@ namespace Tensorflow | |||
/// <param name="h">TFE_TensorHandle*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_OpAddInput(IntPtr op, IntPtr h, IntPtr status); | |||
public static extern void TFE_OpAddInput(IntPtr op, IntPtr h, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -178,7 +178,7 @@ namespace Tensorflow | |||
/// <param name="t">const tensorflow::Tensor&</param> | |||
/// <returns>TFE_TensorHandle*</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TFE_TensorHandle TFE_NewTensorHandle(IntPtr t, IntPtr status); | |||
public static extern TFE_TensorHandle TFE_NewTensorHandle(IntPtr t, SafeStatusHandle status); | |||
/// <summary> | |||
/// Sets the default execution mode (sync/async). Note that this can be | |||
@@ -206,7 +206,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TF_Tensor TFE_TensorHandleResolve(IntPtr h, IntPtr status); | |||
public static extern TF_Tensor TFE_TensorHandleResolve(IntPtr h, SafeStatusHandle status); | |||
/// <summary> | |||
/// This function will block till the operation that produces `h` has completed. | |||
@@ -215,7 +215,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TFE_TensorHandleNumDims(IntPtr h, IntPtr status); | |||
public static extern int TFE_TensorHandleNumDims(IntPtr h, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the device of the operation that produced `h`. If `h` was produced by | |||
@@ -228,7 +228,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TFE_TensorHandleDeviceName(IntPtr h, IntPtr status); | |||
public static extern IntPtr TFE_TensorHandleDeviceName(IntPtr h, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the name of the device in whose memory `h` resides. | |||
@@ -237,7 +237,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TFE_TensorHandleBackingDeviceName(IntPtr h, IntPtr status); | |||
public static extern IntPtr TFE_TensorHandleBackingDeviceName(IntPtr h, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -246,7 +246,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TFE_ContextListDevices(IntPtr ctx, IntPtr status); | |||
public static extern IntPtr TFE_ContextListDevices(IntPtr ctx, SafeStatusHandle status); | |||
/// <summary> | |||
/// | |||
@@ -286,7 +286,7 @@ namespace Tensorflow | |||
/// <param name="executor">TFE_Executor*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TFE_ExecutorWaitForAllPendingNodes(TFE_Executor executor, IntPtr status); | |||
public static extern void TFE_ExecutorWaitForAllPendingNodes(TFE_Executor executor, SafeStatusHandle status); | |||
/// <summary> | |||
/// Sets a custom Executor for current thread. All nodes created by this thread | |||
@@ -29,7 +29,7 @@ namespace Tensorflow.Eager | |||
{ | |||
var op = GetOp(ctx, op_name, status); | |||
status.Check(true); | |||
c_api.TFE_OpSetDevice(op, device_name, status); | |||
c_api.TFE_OpSetDevice(op, device_name, status.Handle); | |||
if(status.ok()) | |||
{ | |||
for (int i = 0; i < inputs.Length; ++i) | |||
@@ -41,10 +41,10 @@ namespace Tensorflow.Eager | |||
tensor_handle = (TFE_TensorHandle)et; | |||
break; | |||
default: | |||
tensor_handle = c_api.TFE_NewTensorHandle(inputs[i], status); | |||
tensor_handle = c_api.TFE_NewTensorHandle(inputs[i], status.Handle); | |||
break; | |||
} | |||
c_api.TFE_OpAddInput(op, tensor_handle, status); | |||
c_api.TFE_OpAddInput(op, tensor_handle, status.Handle); | |||
} | |||
} | |||
if (status.ok()) | |||
@@ -53,7 +53,7 @@ namespace Tensorflow.Eager | |||
var outputs = new IntPtr[num_outputs]; | |||
if (status.ok()) | |||
{ | |||
c_api.TFE_Execute(op, outputs, ref num_outputs, status); | |||
c_api.TFE_Execute(op, outputs, ref num_outputs, status.Handle); | |||
status.Check(true); | |||
} | |||
return outputs; | |||
@@ -44,7 +44,7 @@ namespace Tensorflow.Eager | |||
} | |||
} | |||
c_api.TFE_OpSetDevice(op, device_name, status); | |||
c_api.TFE_OpSetDevice(op, device_name, status.Handle); | |||
status.Check(true); | |||
// Add inferred attrs and inputs. | |||
@@ -98,7 +98,7 @@ namespace Tensorflow.Eager | |||
} | |||
var retVals = new IntPtr[num_retvals]; | |||
c_api.TFE_Execute(op, retVals, ref num_retvals, status); | |||
c_api.TFE_Execute(op, retVals, ref num_retvals, status.Handle); | |||
status.Check(true); | |||
return num_retvals == 0 ? null : new EagerTensor(retVals[0]); | |||
@@ -110,11 +110,11 @@ namespace Tensorflow.Eager | |||
var maybe_op = ReleaseThreadLocalOp(); | |||
if (maybe_op != IntPtr.Zero) | |||
{ | |||
c_api.TFE_OpReset(ctx, op_or_function_name, status, maybe_op); | |||
c_api.TFE_OpReset(ctx, op_or_function_name, status.Handle, maybe_op); | |||
} | |||
else | |||
{ | |||
maybe_op = c_api.TFE_NewOp(ctx, op_or_function_name, status); | |||
maybe_op = c_api.TFE_NewOp(ctx, op_or_function_name, status.Handle); | |||
op = maybe_op; | |||
} | |||
@@ -165,7 +165,7 @@ namespace Tensorflow.Eager | |||
c_api.TFE_OpSetAttrType(op, input_arg.TypeAttr, dtype); | |||
} | |||
c_api.TFE_OpAddInput(op, input_handle, status); | |||
c_api.TFE_OpAddInput(op, input_handle, status.Handle); | |||
status.Check(true); | |||
return true; | |||
@@ -180,7 +180,7 @@ namespace Tensorflow.Eager | |||
var value = attrs[start_index + i + 1]; | |||
byte is_list = 0; | |||
var type = c_api.TFE_OpGetAttrType(op, key, ref is_list, out_status); | |||
var type = c_api.TFE_OpGetAttrType(op, key, ref is_list, out_status.Handle); | |||
if (!out_status.ok()) return; | |||
if (is_list != 0) | |||
SetOpAttrList(ctx, op, key, value, type, null, out_status); | |||
@@ -209,7 +209,7 @@ namespace Tensorflow.Eager | |||
Status status) | |||
{ | |||
byte is_list = 0; | |||
var type = c_api.TFE_OpGetAttrType(op, attr_name, ref is_list, status); | |||
var type = c_api.TFE_OpGetAttrType(op, attr_name, ref is_list, status.Handle); | |||
if (status.Code != TF_Code.TF_OK) return; | |||
if(attr_value == null) | |||
@@ -259,7 +259,7 @@ namespace Tensorflow.Eager | |||
break; | |||
case TF_AttrType.TF_ATTR_SHAPE: | |||
var dims = (value as int[]).Select(x => (long)x).ToArray(); | |||
c_api.TFE_OpSetAttrShape(op, key, dims, dims.Length, status); | |||
c_api.TFE_OpSetAttrShape(op, key, dims, dims.Length, status.Handle); | |||
status.Check(true); | |||
break; | |||
default: | |||
@@ -1,9 +0,0 @@ | |||
namespace Tensorflow.Framework.Models | |||
{ | |||
public class ScopedTFStatus : Status | |||
{ | |||
public ScopedTFStatus() : base() | |||
{ | |||
} | |||
} | |||
} |
@@ -62,7 +62,7 @@ namespace Tensorflow | |||
{ | |||
_PopulateTFImportGraphDefOptions(scoped_options, prefix, input_map, return_elements); | |||
// need to create a class ImportGraphDefWithResults with IDisposal | |||
results = c_api.TF_GraphImportGraphDefWithResults(graph, buffer, scoped_options, status); | |||
results = c_api.TF_GraphImportGraphDefWithResults(graph, buffer, scoped_options, status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -31,7 +31,7 @@ namespace Tensorflow | |||
/// <param name="output_func_def"></param> | |||
/// <param name="status"></param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_FunctionToFunctionDef(IntPtr func, IntPtr output_func_def, IntPtr status); | |||
public static extern void TF_FunctionToFunctionDef(IntPtr func, IntPtr output_func_def, SafeStatusHandle status); | |||
} | |||
@@ -38,6 +38,6 @@ namespace Tensorflow | |||
/// <param name="dy">TF_Output*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_AddGradientsWithPrefix(IntPtr g, string prefix, TF_Output[] y, int ny, | |||
TF_Output[] x, int nx, TF_Output[] dx, IntPtr status, IntPtr[] dy); | |||
TF_Output[] x, int nx, TF_Output[] dx, SafeStatusHandle status, IntPtr[] dy); | |||
} | |||
} |
@@ -35,7 +35,7 @@ namespace Tensorflow | |||
outputs_string, | |||
transforms_string, | |||
buffer, | |||
status); | |||
status.Handle); | |||
status.Check(false); | |||
var bytes = buffer.ToArray(); | |||
@@ -28,6 +28,6 @@ namespace Tensorflow | |||
string outputs_string, | |||
string transforms_string, | |||
IntPtr output_buffer, | |||
IntPtr status); | |||
SafeStatusHandle status); | |||
} | |||
} |
@@ -25,7 +25,7 @@ namespace Tensorflow | |||
public Buffer ToGraphDef(Status s) | |||
{ | |||
var buffer = new Buffer(); | |||
c_api.TF_GraphToGraphDef(_handle, buffer, s); | |||
c_api.TF_GraphToGraphDef(_handle, buffer, s.Handle); | |||
s.Check(true); | |||
return buffer; | |||
@@ -29,7 +29,7 @@ namespace Tensorflow | |||
int size = Marshal.SizeOf<TF_Output>(); | |||
var return_output_handle = Marshal.AllocHGlobal(size * num_return_outputs); | |||
c_api.TF_GraphImportGraphDefWithReturnOutputs(_handle, graph_def, opts, return_output_handle, num_return_outputs, s); | |||
c_api.TF_GraphImportGraphDefWithReturnOutputs(_handle, graph_def, opts, return_output_handle, num_return_outputs, s.Handle); | |||
var tf_output_ptr = (TF_Output*) return_output_handle; | |||
for (int i = 0; i < num_return_outputs; i++) | |||
@@ -54,7 +54,7 @@ namespace Tensorflow | |||
{ | |||
as_default(); | |||
c_api.TF_ImportGraphDefOptionsSetPrefix(opts, prefix); | |||
c_api.TF_GraphImportGraphDef(_handle, graph_def, opts, status); | |||
c_api.TF_GraphImportGraphDef(_handle, graph_def, opts, status.Handle); | |||
status.Check(true); | |||
return status.Code == TF_Code.TF_OK; | |||
} | |||
@@ -30,7 +30,7 @@ namespace Tensorflow | |||
using (var buffer = new Buffer()) | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_GraphGetOpDef(_handle, type, buffer, status); | |||
c_api.TF_GraphGetOpDef(_handle, type, buffer, status.Handle); | |||
return OpDef.Parser.ParseFrom(buffer.MemoryBlock.Stream()); | |||
} | |||
} | |||
@@ -41,7 +41,7 @@ namespace Tensorflow | |||
using (var buffer = new Buffer()) | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_GraphGetOpDef(handle, type, buffer, status); | |||
c_api.TF_GraphGetOpDef(handle, type, buffer, status.Handle); | |||
return OpDef.Parser.ParseFrom(buffer.MemoryBlock.Stream()); | |||
} | |||
} | |||
@@ -513,14 +513,14 @@ namespace Tensorflow | |||
public TensorShape GetTensorShape(TF_Output output) | |||
{ | |||
var status = new Status(); | |||
var ndim = c_api.TF_GraphGetTensorNumDims(_handle, output, status); | |||
var ndim = c_api.TF_GraphGetTensorNumDims(_handle, output, status.Handle); | |||
status.Check(); | |||
if (ndim == -1) | |||
return new TensorShape(); | |||
var dims = new long[ndim]; | |||
c_api.TF_GraphGetTensorShape(_handle, output, dims, dims.Length, status); | |||
c_api.TF_GraphGetTensorShape(_handle, output, dims, dims.Length, status.Handle); | |||
status.Check(); | |||
return new TensorShape(dims.Select(x => (int)x).ToArray()); | |||
@@ -47,7 +47,7 @@ namespace Tensorflow | |||
public static extern string TF_GraphDebugString(IntPtr graph, out int len); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_GraphGetOpDef(IntPtr graph, string op_name, IntPtr output_op_def, IntPtr status); | |||
public static extern void TF_GraphGetOpDef(IntPtr graph, string op_name, IntPtr output_op_def, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the shape of the Tensor referenced by `output` in `graph` | |||
@@ -60,7 +60,7 @@ namespace Tensorflow | |||
/// <param name="num_dims"></param> | |||
/// <param name="status"></param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_GraphGetTensorShape(IntPtr graph, TF_Output output, long[] dims, int num_dims, IntPtr status); | |||
public static extern void TF_GraphGetTensorShape(IntPtr graph, TF_Output output, long[] dims, int num_dims, SafeStatusHandle status); | |||
/// <summary> | |||
/// Import the graph serialized in `graph_def` into `graph`. | |||
@@ -78,7 +78,7 @@ namespace Tensorflow | |||
/// <param name="num_return_outputs">int</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern unsafe void TF_GraphImportGraphDefWithReturnOutputs(IntPtr graph, IntPtr graph_def, IntPtr options, IntPtr return_outputs, int num_return_outputs, IntPtr status); | |||
public static extern unsafe void TF_GraphImportGraphDefWithReturnOutputs(IntPtr graph, IntPtr graph_def, IntPtr options, IntPtr return_outputs, int num_return_outputs, SafeStatusHandle status); | |||
/// <summary> | |||
/// Import the graph serialized in `graph_def` into `graph`. Returns nullptr and | |||
@@ -92,7 +92,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns>TF_ImportGraphDefResults*</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_GraphImportGraphDefWithResults(IntPtr graph, IntPtr graph_def, IntPtr options, IntPtr status); | |||
public static extern IntPtr TF_GraphImportGraphDefWithResults(IntPtr graph, IntPtr graph_def, IntPtr options, SafeStatusHandle status); | |||
/// <summary> | |||
/// Import the graph serialized in `graph_def` into `graph`. | |||
@@ -102,7 +102,7 @@ namespace Tensorflow | |||
/// <param name="options">TF_ImportGraphDefOptions*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_GraphImportGraphDef(IntPtr graph, IntPtr graph_def, IntPtr options, IntPtr status); | |||
public static extern void TF_GraphImportGraphDef(IntPtr graph, IntPtr graph_def, IntPtr options, SafeStatusHandle status); | |||
/// <summary> | |||
/// Iterate through the operations of a graph. | |||
@@ -128,7 +128,7 @@ namespace Tensorflow | |||
/// the shape described by `dims` and `num_dims`. | |||
/// </summary> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_GraphSetTensorShape(IntPtr graph, TF_Output output, long[] dims, int num_dims, IntPtr status); | |||
public static extern void TF_GraphSetTensorShape(IntPtr graph, TF_Output output, long[] dims, int num_dims, SafeStatusHandle status); | |||
/// <summary> | |||
/// Write out a serialized representation of `graph` (as a GraphDef protocol | |||
@@ -138,7 +138,7 @@ namespace Tensorflow | |||
/// <param name="output_graph_def">TF_Buffer*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_GraphToGraphDef(IntPtr graph, IntPtr output_graph_def, IntPtr status); | |||
public static extern void TF_GraphToGraphDef(IntPtr graph, IntPtr output_graph_def, SafeStatusHandle status); | |||
/// <summary> | |||
/// Returns the number of dimensions of the Tensor referenced by `output` | |||
@@ -151,7 +151,7 @@ namespace Tensorflow | |||
/// <param name="status"></param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TF_GraphGetTensorNumDims(IntPtr graph, TF_Output output, IntPtr status); | |||
public static extern int TF_GraphGetTensorNumDims(IntPtr graph, TF_Output output, SafeStatusHandle status); | |||
/// <summary> | |||
/// Cause the imported graph to have a control dependency on `oper`. `oper` | |||
@@ -289,7 +289,7 @@ namespace Tensorflow | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_LoadSessionFromSavedModel(IntPtr session_options, IntPtr run_options, | |||
string export_dir, string[] tags, int tags_len, | |||
IntPtr graph, ref TF_Buffer meta_graph_def, IntPtr status); | |||
IntPtr graph, ref TF_Buffer meta_graph_def, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_NewGraph(); | |||
@@ -306,6 +306,6 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void UpdateEdge(IntPtr graph, TF_Output new_src, TF_Input dst, IntPtr status); | |||
public static extern void UpdateEdge(IntPtr graph, TF_Output new_src, TF_Input dst, SafeStatusHandle status); | |||
} | |||
} |
@@ -32,7 +32,7 @@ namespace Tensorflow | |||
int num = 0; | |||
using(var status = new Status()) | |||
{ | |||
num = c_api.TF_OperationInputListLength(_handle, name, status); | |||
num = c_api.TF_OperationInputListLength(_handle, name, status.Handle); | |||
status.Check(true); | |||
} | |||
return num; | |||
@@ -31,7 +31,7 @@ namespace Tensorflow | |||
int num = 0; | |||
using (var status = new Status()) | |||
{ | |||
num = c_api.TF_OperationOutputListLength(_handle, name, status); | |||
num = c_api.TF_OperationOutputListLength(_handle, name, status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -235,7 +235,7 @@ namespace Tensorflow | |||
using (var status = new Status()) | |||
using (var buf = new Buffer()) | |||
{ | |||
c_api.TF_OperationGetAttrValueProto(_handle, name, buf, status); | |||
c_api.TF_OperationGetAttrValueProto(_handle, name, buf, status.Handle); | |||
status.Check(true); | |||
x = AttrValue.Parser.ParseFrom(buf.MemoryBlock.Stream()); | |||
@@ -259,7 +259,7 @@ namespace Tensorflow | |||
public TF_AttrMetadata GetAttributeMetadata(string attr_name, Status s) | |||
{ | |||
return c_api.TF_OperationGetAttrMetadata(_handle, attr_name, s); | |||
return c_api.TF_OperationGetAttrMetadata(_handle, attr_name, s.Handle); | |||
} | |||
private NodeDef GetNodeDef() | |||
@@ -268,7 +268,7 @@ namespace Tensorflow | |||
using (var s = new Status()) | |||
using (var buffer = new Buffer()) | |||
{ | |||
c_api.TF_OperationToNodeDef(_handle, buffer, s); | |||
c_api.TF_OperationToNodeDef(_handle, buffer, s.Handle); | |||
s.Check(); | |||
return NodeDef.Parser.ParseFrom(buffer.MemoryBlock.Stream()); | |||
@@ -296,7 +296,7 @@ namespace Tensorflow | |||
lock (Locks.ProcessWide) | |||
using (var status = new Status()) | |||
{ | |||
c_api.UpdateEdge(_graph, output, input, status); | |||
c_api.UpdateEdge(_graph, output, input, status.Handle); | |||
//var updated_inputs = inputs; | |||
status.Check(); | |||
} | |||
@@ -50,7 +50,7 @@ namespace Tensorflow | |||
public Operation FinishOperation(Status status) | |||
{ | |||
return c_api.TF_FinishOperation(_handle, status); | |||
return c_api.TF_FinishOperation(_handle, status.Handle); | |||
} | |||
public static implicit operator OperationDescription(IntPtr handle) | |||
@@ -83,7 +83,7 @@ namespace Tensorflow | |||
public static extern void TF_AddInputList(IntPtr desc, TF_Output[] inputs, int num_inputs); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_FinishOperation(IntPtr desc, IntPtr status); | |||
public static extern IntPtr TF_FinishOperation(IntPtr desc, SafeStatusHandle status); | |||
/// <summary> | |||
/// Operation will only be added to *graph when TF_FinishOperation() is | |||
@@ -141,7 +141,7 @@ namespace Tensorflow | |||
public static extern TF_Output TF_OperationInput(TF_Input oper_in); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TF_OperationInputListLength(IntPtr oper, string arg_name, IntPtr status); | |||
public static extern int TF_OperationInputListLength(IntPtr oper, string arg_name, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TF_DataType TF_OperationInputType(TF_Input oper_in); | |||
@@ -204,9 +204,9 @@ namespace Tensorflow | |||
public static extern TF_DataType TF_OperationOutputType(TF_Output oper_out); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_OperationToNodeDef(IntPtr oper, IntPtr buffer, IntPtr status); | |||
public static extern void TF_OperationToNodeDef(IntPtr oper, IntPtr buffer, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern int TF_OperationOutputListLength(IntPtr oper, string arg_name, IntPtr status); | |||
public static extern int TF_OperationOutputListLength(IntPtr oper, string arg_name, SafeStatusHandle status); | |||
} | |||
} |
@@ -47,7 +47,7 @@ namespace Tensorflow | |||
lock (Locks.ProcessWide) | |||
{ | |||
status = status ?? new Status(); | |||
_handle = c_api.TF_NewSession(_graph, opts, status); | |||
_handle = c_api.TF_NewSession(_graph, opts, status.Handle); | |||
status.Check(true); | |||
} | |||
} | |||
@@ -250,7 +250,7 @@ namespace Tensorflow | |||
target_opers: target_list.Select(f => (IntPtr) f).ToArray(), | |||
ntargets: target_list.Count, | |||
run_metadata: IntPtr.Zero, | |||
status: status); | |||
status: status.Handle); | |||
status.Check(true); | |||
@@ -462,7 +462,7 @@ namespace Tensorflow | |||
lock (Locks.ProcessWide) | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_DeleteSession(handle, status); | |||
c_api.TF_DeleteSession(handle, status.Handle); | |||
status.Check(true); | |||
} | |||
} | |||
@@ -62,7 +62,7 @@ namespace Tensorflow | |||
tags.Length, | |||
graph, | |||
ref buffer, | |||
status); | |||
status.Handle); | |||
status.Check(true); | |||
} catch (TensorflowException ex) when (ex.Message.Contains("Could not find SavedModel")) | |||
{ | |||
@@ -74,7 +74,7 @@ namespace Tensorflow | |||
tags.Length, | |||
graph, | |||
ref buffer, | |||
status); | |||
status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -46,7 +46,7 @@ namespace Tensorflow | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_SetConfig(_handle, proto, (ulong)bytes.Length, status); | |||
c_api.TF_SetConfig(_handle, proto, (ulong)bytes.Length, status.Handle); | |||
status.Check(false); | |||
} | |||
@@ -32,7 +32,7 @@ namespace Tensorflow | |||
/// <param name="session">TF_Session*</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_DeleteSession(IntPtr session, IntPtr status); | |||
public static extern void TF_DeleteSession(IntPtr session, SafeStatusHandle status); | |||
/// <summary> | |||
/// Destroy an options object. | |||
@@ -50,7 +50,7 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns>TF_Session*</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_NewSession(IntPtr graph, IntPtr opts, IntPtr status); | |||
public static extern IntPtr TF_NewSession(IntPtr graph, IntPtr opts, SafeStatusHandle status); | |||
/// <summary> | |||
/// Return a new options object. | |||
@@ -103,7 +103,7 @@ namespace Tensorflow | |||
TF_Output[] outputs, IntPtr[] output_values, int noutputs, | |||
IntPtr[] target_opers, int ntargets, | |||
IntPtr run_metadata, | |||
IntPtr status); | |||
SafeStatusHandle status); | |||
/// <summary> | |||
/// Set the config in TF_SessionOptions.options. | |||
@@ -116,7 +116,7 @@ namespace Tensorflow | |||
/// <param name="proto_len">size_t</param> | |||
/// <param name="status">TF_Status*</param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetConfig(IntPtr options, IntPtr proto, ulong proto_len, IntPtr status); | |||
public static extern void TF_SetConfig(IntPtr options, IntPtr proto, ulong proto_len, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetTarget(IntPtr options, string target); | |||
@@ -0,0 +1,39 @@ | |||
/***************************************************************************** | |||
Copyright 2018 The TensorFlow.NET Authors. All Rights Reserved. | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
******************************************************************************/ | |||
using System; | |||
using Tensorflow.Util; | |||
namespace Tensorflow | |||
{ | |||
public sealed class SafeStatusHandle : SafeTensorflowHandle | |||
{ | |||
public SafeStatusHandle() | |||
{ | |||
} | |||
public SafeStatusHandle(IntPtr handle) | |||
: base(handle) | |||
{ | |||
} | |||
protected override bool ReleaseHandle() | |||
{ | |||
c_api.TF_DeleteStatus(handle); | |||
return true; | |||
} | |||
} | |||
} |
@@ -17,6 +17,7 @@ | |||
using System; | |||
using System.Diagnostics; | |||
using System.Runtime.CompilerServices; | |||
using Tensorflow.Util; | |||
using static Tensorflow.c_api; | |||
namespace Tensorflow | |||
@@ -25,26 +26,37 @@ namespace Tensorflow | |||
/// TF_Status holds error information. It either has an OK code, or | |||
/// else an error code with an associated error message. | |||
/// </summary> | |||
public class Status : DisposableObject | |||
public sealed class Status : IDisposable | |||
{ | |||
/// <summary> | |||
/// Error message | |||
/// </summary> | |||
public string Message => c_api.StringPiece(TF_Message(_handle)); | |||
public string Message | |||
{ | |||
get | |||
{ | |||
using (Handle.Lease()) | |||
{ | |||
return StringPiece(TF_Message(Handle)); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// Error code | |||
/// </summary> | |||
public TF_Code Code => TF_GetCode(_handle); | |||
public TF_Code Code => TF_GetCode(Handle); | |||
public SafeStatusHandle Handle { get; } | |||
public Status() | |||
{ | |||
_handle = TF_NewStatus(); | |||
Handle = TF_NewStatus(); | |||
} | |||
public void SetStatus(TF_Code code, string msg) | |||
{ | |||
TF_SetStatus(_handle, code, msg); | |||
TF_SetStatus(Handle, code, msg); | |||
} | |||
public bool ok() => Code == TF_Code.TF_OK; | |||
@@ -60,19 +72,17 @@ namespace Tensorflow | |||
{ | |||
if (Code != TF_Code.TF_OK) | |||
{ | |||
Console.WriteLine(Message); | |||
var message = Message; | |||
Console.WriteLine(message); | |||
if (throwException) | |||
throw new TensorflowException(Message); | |||
throw new TensorflowException(message); | |||
} | |||
} | |||
public static implicit operator IntPtr(Status status) | |||
=> status._handle; | |||
protected override void DisposeUnmanagedResources(IntPtr handle) | |||
=> TF_DeleteStatus(handle); | |||
public void Dispose() | |||
=> Handle.Dispose(); | |||
public override string ToString() | |||
=> $"{Code} 0x{_handle.ToString("x16")}"; | |||
=> $"{Code} 0x{Handle.DangerousGetHandle():x16}"; | |||
} | |||
} |
@@ -34,7 +34,7 @@ namespace Tensorflow | |||
/// <param name="s"></param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern TF_Code TF_GetCode(IntPtr s); | |||
public static extern TF_Code TF_GetCode(SafeStatusHandle s); | |||
/// <summary> | |||
/// Return a pointer to the (null-terminated) error message in *s. | |||
@@ -44,14 +44,14 @@ namespace Tensorflow | |||
/// <param name="s"></param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_Message(IntPtr s); | |||
public static extern IntPtr TF_Message(SafeStatusHandle s); | |||
/// <summary> | |||
/// Return a new status object. | |||
/// </summary> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern IntPtr TF_NewStatus(); | |||
public static extern SafeStatusHandle TF_NewStatus(); | |||
/// <summary> | |||
/// Record <code, msg> in *s. Any previous information is lost. | |||
@@ -61,6 +61,6 @@ namespace Tensorflow | |||
/// <param name="code"></param> | |||
/// <param name="msg"></param> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern void TF_SetStatus(IntPtr s, TF_Code code, string msg); | |||
public static extern void TF_SetStatus(SafeStatusHandle s, TF_Code code, string msg); | |||
} | |||
} |
@@ -71,7 +71,7 @@ namespace Tensorflow | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_StringDecode((byte*) this.buffer + 8, (UIntPtr) (this.bytesize), (byte**) &stringStartAddress, &dstLen, status); | |||
c_api.TF_StringDecode((byte*) this.buffer + 8, (UIntPtr) (this.bytesize), (byte**) &stringStartAddress, &dstLen, status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -451,7 +451,7 @@ namespace Tensorflow | |||
IntPtr tensor = c_api.TF_TensorData(handle); | |||
Marshal.WriteInt64(tensor, 0); | |||
fixed (byte* src = buffer) | |||
c_api.TF_StringEncode(src, (UIntPtr)buffer.Length, (sbyte*)(tensor + sizeof(long)), size, status); | |||
c_api.TF_StringEncode(src, (UIntPtr)buffer.Length, (sbyte*)(tensor + sizeof(long)), size, status.Handle); | |||
_handle = handle; | |||
status.Check(true); | |||
} | |||
@@ -475,7 +475,7 @@ namespace Tensorflow | |||
Marshal.WriteInt64(tensor, 0); | |||
var status = new Status(); | |||
c_api.TF_StringEncode((byte*) nd.Unsafe.Address, bytesLength, (sbyte*) (tensor + sizeof(Int64)), size, status); | |||
c_api.TF_StringEncode((byte*) nd.Unsafe.Address, bytesLength, (sbyte*) (tensor + sizeof(Int64)), size, status.Handle); | |||
status.Check(true); | |||
_handle = handle; | |||
@@ -491,7 +491,7 @@ namespace Tensorflow | |||
var status = new Status(); | |||
fixed (byte* src = buffer) | |||
c_api.TF_StringEncode(src, (UIntPtr) buffer.Length, (sbyte*) (tensor + sizeof(Int64)), size, status); | |||
c_api.TF_StringEncode(src, (UIntPtr) buffer.Length, (sbyte*) (tensor + sizeof(Int64)), size, status.Handle); | |||
status.Check(true); | |||
_handle = handle; | |||
@@ -552,7 +552,7 @@ namespace Tensorflow | |||
{ | |||
fixed (byte* src = &buffer[i][0]) | |||
{ | |||
var written = TF_StringEncode(src, (UIntPtr) buffer[i].Length, (sbyte*) dst, (UIntPtr) (dstLimit.ToInt64() - dst.ToInt64()), status); | |||
var written = TF_StringEncode(src, (UIntPtr) buffer[i].Length, (sbyte*) dst, (UIntPtr) (dstLimit.ToInt64() - dst.ToInt64()), status.Handle); | |||
status.Check(true); | |||
pOffset += 8; | |||
dst += (int) written; | |||
@@ -600,7 +600,7 @@ namespace Tensorflow | |||
var status = new Status(); | |||
fixed (byte* src = buffer) | |||
c_api.TF_StringEncode(src, (UIntPtr) buffer.Length, (sbyte*) (tensor + sizeof(Int64)), size, status); | |||
c_api.TF_StringEncode(src, (UIntPtr) buffer.Length, (sbyte*) (tensor + sizeof(Int64)), size, status.Handle); | |||
status.Check(true); | |||
return handle; | |||
@@ -228,7 +228,7 @@ namespace Tensorflow | |||
{ | |||
IntPtr dst = IntPtr.Zero; | |||
UIntPtr dstLen = UIntPtr.Zero; | |||
var read = c_api.TF_StringDecode((byte*)src, (UIntPtr)(srcLen.ToInt64() - src.ToInt64()), (byte**)&dst, &dstLen, status); | |||
var read = c_api.TF_StringDecode((byte*)src, (UIntPtr)(srcLen.ToInt64() - src.ToInt64()), (byte**)&dst, &dstLen, status.Handle); | |||
status.Check(true); | |||
buffer[i] = new byte[(int)dstLen]; | |||
Marshal.Copy(dst, buffer[i], 0, buffer[i].Length); | |||
@@ -109,7 +109,7 @@ namespace Tensorflow | |||
{ | |||
using (var status = new Status()) | |||
{ | |||
c_api.TF_GraphGetTensorShape(op.graph, _as_tf_output(), dims, rank, status); | |||
c_api.TF_GraphGetTensorShape(op.graph, _as_tf_output(), dims, rank, status.Handle); | |||
status.Check(); | |||
} | |||
} | |||
@@ -127,9 +127,9 @@ namespace Tensorflow | |||
using (var status = new Status()) | |||
{ | |||
if (value == null) | |||
c_api.TF_GraphSetTensorShape(graph, _as_tf_output(), null, -1, status); | |||
c_api.TF_GraphSetTensorShape(graph, _as_tf_output(), null, -1, status.Handle); | |||
else | |||
c_api.TF_GraphSetTensorShape(graph, _as_tf_output(), value.Select(Convert.ToInt64).ToArray(), value.Length, status); | |||
c_api.TF_GraphSetTensorShape(graph, _as_tf_output(), value.Select(Convert.ToInt64).ToArray(), value.Length, status.Handle); | |||
status.Check(true); | |||
} | |||
@@ -179,7 +179,7 @@ namespace Tensorflow | |||
using (var status = new Status()) | |||
{ | |||
var output = _as_tf_output(); | |||
int ndim = c_api.TF_GraphGetTensorNumDims(op.graph, output, status); | |||
int ndim = c_api.TF_GraphGetTensorNumDims(op.graph, output, status.Handle); | |||
status.Check(); | |||
return ndim; | |||
} | |||
@@ -186,10 +186,10 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns>On success returns the size in bytes of the encoded string.</returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern unsafe ulong TF_StringEncode(byte* src, UIntPtr src_len, sbyte* dst, UIntPtr dst_len, IntPtr status); | |||
public static extern unsafe ulong TF_StringEncode(byte* src, UIntPtr src_len, sbyte* dst, UIntPtr dst_len, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern unsafe ulong TF_StringEncode(IntPtr src, ulong src_len, IntPtr dst, ulong dst_len, IntPtr status); | |||
public static extern unsafe ulong TF_StringEncode(IntPtr src, ulong src_len, IntPtr dst, ulong dst_len, SafeStatusHandle status); | |||
/// <summary> | |||
/// Decode a string encoded using TF_StringEncode. | |||
@@ -201,10 +201,10 @@ namespace Tensorflow | |||
/// <param name="status">TF_Status*</param> | |||
/// <returns></returns> | |||
[DllImport(TensorFlowLibName)] | |||
public static extern ulong TF_StringDecode(IntPtr src, ulong src_len, IntPtr dst, ref ulong dst_len, IntPtr status); | |||
public static extern ulong TF_StringDecode(IntPtr src, ulong src_len, IntPtr dst, ref ulong dst_len, SafeStatusHandle status); | |||
[DllImport(TensorFlowLibName)] | |||
public static extern unsafe UIntPtr TF_StringDecode(byte* src, UIntPtr src_len, byte** dst, UIntPtr* dst_len, IntPtr status); | |||
public static extern unsafe UIntPtr TF_StringDecode(byte* src, UIntPtr src_len, byte** dst, UIntPtr* dst_len, SafeStatusHandle status); | |||
public static c_api.Deallocator EmptyDeallocator = FreeNothingDeallocator; | |||
@@ -189,12 +189,12 @@ namespace Tensorflow | |||
var protoHandle = Marshal.AllocHGlobal(bytes.Length); | |||
Marshal.Copy(bytes, 0, protoHandle, bytes.Length); | |||
uint len = (uint)bytes.Length; | |||
c_api.TF_SetAttrValueProto(op_desc, attr.Key, protoHandle, proto_len: len, status: status); | |||
c_api.TF_SetAttrValueProto(op_desc, attr.Key, protoHandle, proto_len: len, status: status.Handle); | |||
status.Check(true); | |||
Marshal.FreeHGlobal(protoHandle); | |||
} | |||
var c_op = c_api.TF_FinishOperation(op_desc, status); | |||
var c_op = c_api.TF_FinishOperation(op_desc, status.Handle); | |||
status.Check(true); | |||
@@ -49,7 +49,7 @@ namespace TensorFlowNET.UnitTest | |||
private void EXPECT_TF_META(Operation oper, string attr_name, int expected_list_size, TF_AttrType expected_type, uint expected_total_size) | |||
{ | |||
var m = c_api.TF_OperationGetAttrMetadata(oper, attr_name, s_); | |||
var m = c_api.TF_OperationGetAttrMetadata(oper, attr_name, s_.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s_.Code); | |||
char e = expected_list_size >= 0 ? (char)1 : (char)0; | |||
/*EXPECT_EQ(e, m.is_list); | |||
@@ -64,7 +64,7 @@ namespace TensorFlowNET.UnitTest | |||
var desc = init("string"); | |||
c_api.TF_SetAttrString(desc, "v", "bunny", 5); | |||
var oper = c_api.TF_FinishOperation(desc, s_); | |||
var oper = c_api.TF_FinishOperation(desc, s_.Handle); | |||
//ASSERT_EQ(TF_Code.TF_OK, s_.Code); | |||
//EXPECT_TF_META(oper, "v", -1, TF_AttrType.TF_ATTR_STRING, 5); | |||
//var value = new char[5]; | |||
@@ -60,7 +60,7 @@ namespace TensorFlowNET.UnitTest | |||
private void VerifyCollocation(Operation op, string[] expected) | |||
{ | |||
var handle = c_api.TF_OperationGetAttrMetadata(op, "_class", s_); | |||
var handle = c_api.TF_OperationGetAttrMetadata(op, "_class", s_.Handle); | |||
TF_AttrMetadata m = new TF_AttrMetadata(); | |||
if (expected.Length == 0) | |||
{ | |||
@@ -50,7 +50,7 @@ namespace TensorFlowNET.UnitTest | |||
{ | |||
using (var buffer = new Buffer()) | |||
{ | |||
c_api.TF_GraphToGraphDef(graph, buffer, s); | |||
c_api.TF_GraphToGraphDef(graph, buffer, s.Handle); | |||
bool ret = TF_GetCode(s) == TF_OK; | |||
EXPECT_EQ(TF_OK, TF_GetCode(s)); | |||
if (ret) | |||
@@ -113,7 +113,7 @@ namespace TensorFlowNET.UnitTest | |||
IntPtr[] handles = new IntPtr[2] { IntPtr.Zero, IntPtr.Zero }; | |||
c_api.TF_AddGradientsWithPrefix(graph_, prefix, outputs, noutputs, inputs, | |||
ninputs, grad_inputs, s_, handles); | |||
ninputs, grad_inputs, s_.Handle, handles); | |||
var op = new Operation(handles[0]); | |||
} | |||
@@ -42,10 +42,10 @@ namespace TensorFlowNET.UnitTest | |||
=> c_api.TF_AddInput(desc, input); | |||
protected Operation TF_FinishOperation(OperationDescription desc, Status s) | |||
=> c_api.TF_FinishOperation(desc, s); | |||
=> c_api.TF_FinishOperation(desc, s.Handle); | |||
protected void TF_SetAttrTensor(OperationDescription desc, string attrName, Tensor value, Status s) | |||
=> c_api.TF_SetAttrTensor(desc, attrName, value, s); | |||
=> c_api.TF_SetAttrTensor(desc, attrName, value, s.Handle); | |||
protected void TF_SetAttrType(OperationDescription desc, string attrName, TF_DataType dtype) | |||
=> c_api.TF_SetAttrType(desc, attrName, dtype); | |||
@@ -56,19 +56,19 @@ namespace TensorFlowNET.UnitTest | |||
protected TF_DataType TFE_TensorHandleDataType(IntPtr h) | |||
=> c_api.TFE_TensorHandleDataType(h); | |||
protected int TFE_TensorHandleNumDims(IntPtr h, IntPtr status) | |||
protected int TFE_TensorHandleNumDims(IntPtr h, SafeStatusHandle status) | |||
=> c_api.TFE_TensorHandleNumDims(h, status); | |||
protected TF_Code TF_GetCode(Status s) | |||
=> s.Code; | |||
protected TF_Code TF_GetCode(IntPtr s) | |||
protected TF_Code TF_GetCode(SafeStatusHandle s) | |||
=> c_api.TF_GetCode(s); | |||
protected string TF_Message(IntPtr s) | |||
protected string TF_Message(SafeStatusHandle s) | |||
=> c_api.StringPiece(c_api.TF_Message(s)); | |||
protected IntPtr TF_NewStatus() | |||
protected SafeStatusHandle TF_NewStatus() | |||
=> c_api.TF_NewStatus(); | |||
protected void TF_DeleteStatus(IntPtr s) | |||
@@ -83,25 +83,25 @@ namespace TensorFlowNET.UnitTest | |||
protected ulong TF_TensorByteSize(IntPtr t) | |||
=> c_api.TF_TensorByteSize(t); | |||
protected void TFE_OpAddInput(IntPtr op, IntPtr h, IntPtr status) | |||
protected void TFE_OpAddInput(IntPtr op, IntPtr h, SafeStatusHandle status) | |||
=> c_api.TFE_OpAddInput(op, h, status); | |||
protected void TFE_OpSetAttrType(IntPtr op, string attr_name, TF_DataType value) | |||
=> c_api.TFE_OpSetAttrType(op, attr_name, value); | |||
protected void TFE_OpSetAttrShape(IntPtr op, string attr_name, long[] dims, int num_dims, IntPtr out_status) | |||
protected void TFE_OpSetAttrShape(IntPtr op, string attr_name, long[] dims, int num_dims, SafeStatusHandle out_status) | |||
=> c_api.TFE_OpSetAttrShape(op, attr_name, dims, num_dims, out_status); | |||
protected void TFE_OpSetAttrString(IntPtr op, string attr_name, string value, uint length) | |||
=> c_api.TFE_OpSetAttrString(op, attr_name, value, length); | |||
protected IntPtr TFE_NewOp(IntPtr ctx, string op_or_function_name, IntPtr status) | |||
protected IntPtr TFE_NewOp(IntPtr ctx, string op_or_function_name, SafeStatusHandle status) | |||
=> c_api.TFE_NewOp(ctx, op_or_function_name, status); | |||
protected IntPtr TFE_NewTensorHandle(IntPtr t, IntPtr status) | |||
protected IntPtr TFE_NewTensorHandle(IntPtr t, SafeStatusHandle status) | |||
=> c_api.TFE_NewTensorHandle(t, status); | |||
protected void TFE_Execute(IntPtr op, IntPtr[] retvals, ref int num_retvals, IntPtr status) | |||
protected void TFE_Execute(IntPtr op, IntPtr[] retvals, ref int num_retvals, SafeStatusHandle status) | |||
=> c_api.TFE_Execute(op, retvals, ref num_retvals, status); | |||
protected IntPtr TFE_NewContextOptions() | |||
@@ -110,19 +110,19 @@ namespace TensorFlowNET.UnitTest | |||
protected void TFE_DeleteContext(IntPtr t) | |||
=> c_api.TFE_DeleteContext(t); | |||
protected IntPtr TFE_NewContext(IntPtr opts, IntPtr status) | |||
protected IntPtr TFE_NewContext(IntPtr opts, SafeStatusHandle status) | |||
=> c_api.TFE_NewContext(opts, status); | |||
protected void TFE_DeleteContextOptions(IntPtr opts) | |||
=> c_api.TFE_DeleteContextOptions(opts); | |||
protected int TFE_OpGetInputLength(IntPtr op, string input_name, IntPtr status) | |||
protected int TFE_OpGetInputLength(IntPtr op, string input_name, SafeStatusHandle status) | |||
=> c_api.TFE_OpGetInputLength(op, input_name, status); | |||
protected int TFE_OpAddInputList(IntPtr op, IntPtr[] inputs, int num_inputs, IntPtr status) | |||
protected int TFE_OpAddInputList(IntPtr op, IntPtr[] inputs, int num_inputs, SafeStatusHandle status) | |||
=> c_api.TFE_OpAddInputList(op, inputs, num_inputs, status); | |||
protected int TFE_OpGetOutputLength(IntPtr op, string input_name, IntPtr status) | |||
protected int TFE_OpGetOutputLength(IntPtr op, string input_name, SafeStatusHandle status) | |||
=> c_api.TFE_OpGetOutputLength(op, input_name, status); | |||
protected void TFE_DeleteTensorHandle(IntPtr h) | |||
@@ -137,37 +137,37 @@ namespace TensorFlowNET.UnitTest | |||
protected IntPtr TFE_ContextGetExecutorForThread(IntPtr ctx) | |||
=> c_api.TFE_ContextGetExecutorForThread(ctx); | |||
protected void TFE_ExecutorWaitForAllPendingNodes(IntPtr executor, IntPtr status) | |||
protected void TFE_ExecutorWaitForAllPendingNodes(IntPtr executor, SafeStatusHandle status) | |||
=> c_api.TFE_ExecutorWaitForAllPendingNodes(executor, status); | |||
protected IntPtr TFE_TensorHandleResolve(IntPtr h, IntPtr status) | |||
protected IntPtr TFE_TensorHandleResolve(IntPtr h, SafeStatusHandle status) | |||
=> c_api.TFE_TensorHandleResolve(h, status); | |||
protected string TFE_TensorHandleDeviceName(IntPtr h, IntPtr status) | |||
protected string TFE_TensorHandleDeviceName(IntPtr h, SafeStatusHandle status) | |||
=> c_api.StringPiece(c_api.TFE_TensorHandleDeviceName(h, status)); | |||
protected string TFE_TensorHandleBackingDeviceName(IntPtr h, IntPtr status) | |||
protected string TFE_TensorHandleBackingDeviceName(IntPtr h, SafeStatusHandle status) | |||
=> c_api.StringPiece(c_api.TFE_TensorHandleBackingDeviceName(h, status)); | |||
protected IntPtr TFE_ContextListDevices(IntPtr ctx, IntPtr status) | |||
protected IntPtr TFE_ContextListDevices(IntPtr ctx, SafeStatusHandle status) | |||
=> c_api.TFE_ContextListDevices(ctx, status); | |||
protected int TF_DeviceListCount(IntPtr list) | |||
=> c_api.TF_DeviceListCount(list); | |||
protected string TF_DeviceListType(IntPtr list, int index, IntPtr status) | |||
protected string TF_DeviceListType(IntPtr list, int index, SafeStatusHandle status) | |||
=> c_api.StringPiece(c_api.TF_DeviceListType(list, index, status)); | |||
protected string TF_DeviceListName(IntPtr list, int index, IntPtr status) | |||
protected string TF_DeviceListName(IntPtr list, int index, SafeStatusHandle status) | |||
=> c_api.StringPiece(c_api.TF_DeviceListName(list, index, status)); | |||
protected void TF_DeleteDeviceList(IntPtr list) | |||
=> c_api.TF_DeleteDeviceList(list); | |||
protected IntPtr TFE_TensorHandleCopyToDevice(IntPtr h, IntPtr ctx, string device_name, IntPtr status) | |||
protected IntPtr TFE_TensorHandleCopyToDevice(IntPtr h, IntPtr ctx, string device_name, SafeStatusHandle status) | |||
=> c_api.TFE_TensorHandleCopyToDevice(h, ctx, device_name, status); | |||
protected void TFE_OpSetDevice(IntPtr op, string device_name, IntPtr status) | |||
protected void TFE_OpSetDevice(IntPtr op, string device_name, SafeStatusHandle status) | |||
=> c_api.TFE_OpSetDevice(op, device_name, status); | |||
protected unsafe void memcpy<T>(T* dst, void* src, ulong size) | |||
@@ -75,7 +75,7 @@ namespace TensorFlowNET.UnitTest | |||
c_api.TF_SessionRun(session_, null, inputs_ptr, input_values_ptr, inputs_ptr.Length, | |||
outputs_ptr, output_values_ptr, outputs_.Count, | |||
targets_ptr, targets_.Count, | |||
IntPtr.Zero, s); | |||
IntPtr.Zero, s.Handle); | |||
s.Check(); | |||
@@ -165,7 +165,7 @@ namespace TensorFlowNET.UnitTest | |||
ulong dst_len = (ulong)c_api.TF_StringEncodedSize((UIntPtr)str.Length); | |||
Assert.AreEqual(dst_len, (ulong)23); | |||
IntPtr dst = Marshal.AllocHGlobal((int)dst_len); | |||
ulong encoded_len = c_api.TF_StringEncode(handle, (ulong)str.Length, dst, dst_len, status); | |||
ulong encoded_len = c_api.TF_StringEncode(handle, (ulong)str.Length, dst, dst_len, status.Handle); | |||
Assert.AreEqual((ulong)23, encoded_len); | |||
Assert.AreEqual(status.Code, TF_Code.TF_OK); | |||
string encoded_str = Marshal.PtrToStringUTF8(dst + sizeof(byte)); | |||
@@ -13,7 +13,7 @@ namespace TensorFlowNET.UnitTest.Eager | |||
[TestMethod] | |||
public void Context() | |||
{ | |||
var status = c_api.TF_NewStatus(); | |||
using var status = c_api.TF_NewStatus(); | |||
var opts = c_api.TFE_NewContextOptions(); | |||
var ctx = c_api.TFE_NewContext(opts, status); | |||
@@ -34,7 +34,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
} | |||
c_api.TF_DeleteDeviceList(devices); | |||
c_api.TF_DeleteStatus(status); | |||
} | |||
} | |||
} |
@@ -19,7 +19,7 @@ namespace TensorFlowNET.UnitTest.Eager | |||
unsafe void Execute_MatMul_CPU(bool async) | |||
{ | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var opts = TFE_NewContextOptions(); | |||
c_api.TFE_ContextOptionsSetAsync(opts, Convert.ToByte(async)); | |||
var ctx = TFE_NewContext(opts, status); | |||
@@ -50,7 +50,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
EXPECT_EQ(10f, product[1]); | |||
EXPECT_EQ(15f, product[2]); | |||
EXPECT_EQ(22f, product[3]); | |||
TF_DeleteStatus(status); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace TensorFlowNET.UnitTest.Eager | |||
[TestMethod] | |||
public unsafe void OpGetInputAndOutputLengths() | |||
{ | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var opts = TFE_NewContextOptions(); | |||
var ctx = TFE_NewContext(opts, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
@@ -52,7 +52,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
EXPECT_EQ(2, TFE_OpGetOutputLength(identityOp, "output", status)); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteStatus(status); | |||
TFE_DeleteOp(identityOp); | |||
TFE_DeleteTensorHandle(input1); | |||
TFE_DeleteTensorHandle(input2); | |||
@@ -16,7 +16,7 @@ namespace TensorFlowNET.UnitTest.Eager | |||
[TestMethod] | |||
public unsafe void OpInferMixedTypeInputListAttrs() | |||
{ | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var opts = TFE_NewContextOptions(); | |||
var ctx = TFE_NewContext(opts, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
@@ -45,7 +45,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
TFE_Execute(assertOp, retvals, ref num_retvals, status); | |||
EXPECT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteStatus(status); | |||
TFE_DeleteOp(assertOp); | |||
TFE_DeleteTensorHandle(condition); | |||
TFE_DeleteTensorHandle(t1); | |||
@@ -14,7 +14,7 @@ namespace TensorFlowNET.UnitTest.Eager | |||
[TestMethod] | |||
public unsafe void Variables() | |||
{ | |||
var status = c_api.TF_NewStatus(); | |||
using var status = c_api.TF_NewStatus(); | |||
var opts = TFE_NewContextOptions(); | |||
var ctx = TFE_NewContext(opts, status); | |||
ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
@@ -50,7 +50,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
TFE_DeleteTensorHandle(value_handle[0]); | |||
TFE_DeleteContext(ctx); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteStatus(status); | |||
} | |||
} | |||
} |
@@ -17,17 +17,16 @@ namespace TensorFlowNET.UnitTest.Eager | |||
var t = c_api.TF_AllocateTensor(TF_FLOAT, dims, dims.Length, (ulong)data.Length * sizeof(float)); | |||
memcpy(c_api.TF_TensorData(t), data, data.Length * sizeof(float)); | |||
var status = c_api.TF_NewStatus(); | |||
using var status = c_api.TF_NewStatus(); | |||
var th = c_api.TFE_NewTensorHandle(t, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
c_api.TF_DeleteTensor(t); | |||
c_api.TF_DeleteStatus(status); | |||
return th; | |||
} | |||
IntPtr MatMulOp(IntPtr ctx, IntPtr a, IntPtr b) | |||
{ | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var op = TFE_NewOp(ctx, "MatMul", status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
@@ -35,7 +34,6 @@ namespace TensorFlowNET.UnitTest.Eager | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TFE_OpAddInput(op, b, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteStatus(status); | |||
TFE_OpSetAttrType(op, "T", TFE_TensorHandleDataType(a)); | |||
return op; | |||
@@ -68,19 +66,18 @@ namespace TensorFlowNET.UnitTest.Eager | |||
IntPtr ShapeOp(IntPtr ctx, IntPtr a) | |||
{ | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var op = TFE_NewOp(ctx, "Shape", status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TFE_OpAddInput(op, a, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteStatus(status); | |||
TFE_OpSetAttrType(op, "T", TFE_TensorHandleDataType(a)); | |||
return op; | |||
} | |||
unsafe IntPtr CreateVariable(IntPtr ctx, float value, IntPtr status) | |||
unsafe IntPtr CreateVariable(IntPtr ctx, float value, SafeStatusHandle status) | |||
{ | |||
var op = TFE_NewOp(ctx, "VarHandleOp", status); | |||
if (TF_GetCode(status) != TF_OK) return IntPtr.Zero; | |||
@@ -127,11 +124,10 @@ namespace TensorFlowNET.UnitTest.Eager | |||
var data = new int[] { 1 }; | |||
var t = c_api.TF_AllocateTensor(TF_DataType.TF_INT32, dims, 1, sizeof(int)); | |||
memcpy(TF_TensorData(t), data, TF_TensorByteSize(t)); | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var th = c_api.TFE_NewTensorHandle(t, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteTensor(t); | |||
TF_DeleteStatus(status); | |||
return th; | |||
} | |||
@@ -140,11 +136,10 @@ namespace TensorFlowNET.UnitTest.Eager | |||
var data = new[] { value }; | |||
var t = c_api.TF_AllocateTensor(TF_BOOL, null, 0, sizeof(bool)); | |||
memcpy(TF_TensorData(t), data, TF_TensorByteSize(t)); | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var th = TFE_NewTensorHandle(t, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteTensor(t); | |||
TF_DeleteStatus(status); | |||
return th; | |||
} | |||
@@ -153,11 +148,10 @@ namespace TensorFlowNET.UnitTest.Eager | |||
var data = new [] { value }; | |||
var t = c_api.TF_AllocateTensor(TF_FLOAT, null, 0, sizeof(float)); | |||
memcpy(TF_TensorData(t), data, TF_TensorByteSize(t)); | |||
var status = TF_NewStatus(); | |||
using var status = TF_NewStatus(); | |||
var th = TFE_NewTensorHandle(t, status); | |||
CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); | |||
TF_DeleteTensor(t); | |||
TF_DeleteStatus(status); | |||
return th; | |||
} | |||
} | |||
@@ -38,7 +38,7 @@ namespace TensorFlowNET.UnitTest | |||
EXPECT_EQ(attr_value.Type, DataType.DtInt32); | |||
// Test not found errors in TF_Operation*() query functions. | |||
EXPECT_EQ(-1, c_api.TF_OperationOutputListLength(feed, "bogus", s)); | |||
EXPECT_EQ(-1, c_api.TF_OperationOutputListLength(feed, "bogus", s.Handle)); | |||
EXPECT_EQ(TF_Code.TF_INVALID_ARGUMENT, s.Code); | |||
Assert.IsFalse(c_test_util.GetAttrValue(feed, "missing", ref attr_value, s)); | |||
EXPECT_EQ("Operation 'feed' has no attr named 'missing'.", s.Message); | |||
@@ -216,7 +216,7 @@ namespace TensorFlowNET.UnitTest | |||
// Export to a GraphDef. | |||
var graph_def = new Buffer(); | |||
c_api.TF_GraphToGraphDef(graph, graph_def, s); | |||
c_api.TF_GraphToGraphDef(graph, graph_def, s.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
// Import it, with a prefix, in a fresh graph. | |||
@@ -224,7 +224,7 @@ namespace TensorFlowNET.UnitTest | |||
graph = new Graph().as_default(); | |||
var opts = c_api.TF_NewImportGraphDefOptions(); | |||
c_api.TF_ImportGraphDefOptionsSetPrefix(opts, "imported"); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
Operation scalar = graph.OperationByName("imported/scalar"); | |||
@@ -267,7 +267,7 @@ namespace TensorFlowNET.UnitTest | |||
EXPECT_EQ(2, c_api.TF_ImportGraphDefOptionsNumReturnOutputs(opts)); | |||
c_api.TF_ImportGraphDefOptionsAddReturnOperation(opts, "scalar"); | |||
EXPECT_EQ(1, c_api.TF_ImportGraphDefOptionsNumReturnOperations(opts)); | |||
var results = c_api.TF_GraphImportGraphDefWithResults(graph, graph_def, opts, s); | |||
var results = c_api.TF_GraphImportGraphDefWithResults(graph, graph_def, opts, s.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
Operation scalar2 = graph.OperationByName("imported2/scalar"); | |||
@@ -299,7 +299,7 @@ namespace TensorFlowNET.UnitTest | |||
c_api.TF_ImportGraphDefOptionsSetPrefix(opts, "imported3"); | |||
c_api.TF_ImportGraphDefOptionsAddControlDependency(opts, feed); | |||
c_api.TF_ImportGraphDefOptionsAddControlDependency(opts, feed2); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
var scalar3 = graph.OperationByName("imported3/scalar"); | |||
@@ -323,7 +323,7 @@ namespace TensorFlowNET.UnitTest | |||
// Export to a graph def so we can import a graph with control dependencies | |||
graph_def = new Buffer(); | |||
c_api.TF_GraphToGraphDef(graph, graph_def, s); | |||
c_api.TF_GraphToGraphDef(graph, graph_def, s.Handle); | |||
EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
// Import again, with remapped control dependency, into the same graph | |||
@@ -331,7 +331,7 @@ namespace TensorFlowNET.UnitTest | |||
opts = c_api.TF_NewImportGraphDefOptions(); | |||
c_api.TF_ImportGraphDefOptionsSetPrefix(opts, "imported4"); | |||
c_api.TF_ImportGraphDefOptionsRemapControlDependency(opts, "imported/feed", feed); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s); | |||
c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s.Handle); | |||
ASSERT_EQ(TF_Code.TF_OK, s.Code); | |||
var scalar4 = graph.OperationByName("imported4/imported3/scalar"); | |||
@@ -124,45 +124,45 @@ namespace TensorFlowNET.UnitTest | |||
var feed_out_0 = new TF_Output(feed, 0); | |||
// Fetch the shape, it should be completely unknown. | |||
int num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s); | |||
int num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
EXPECT_EQ(-1, num_dims); | |||
// Set the shape to be unknown, expect no change. | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, null, -1, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, null, -1, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s.Handle); | |||
EXPECT_EQ(-1, num_dims); | |||
// Set the shape to be 2 x Unknown | |||
long[] dims = {2, -1}; | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, dims.Length, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, dims.Length, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, feed_out_0, s.Handle); | |||
EXPECT_EQ(2, num_dims); | |||
// Get the dimension vector appropriately. | |||
var returned_dims = new long[dims.Length]; | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
Assert.IsTrue(Enumerable.SequenceEqual(dims, returned_dims)); | |||
// Set to a new valid shape: [2, 3] | |||
dims[1] = 3; | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, dims.Length, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, dims.Length, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
// Fetch and see that the new value is returned. | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
Assert.IsTrue(Enumerable.SequenceEqual(dims, returned_dims)); | |||
// Try to set 'unknown' with unknown rank on the shape and see that | |||
// it doesn't change. | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, null, -1, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, null, -1, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
EXPECT_EQ(2, num_dims); | |||
EXPECT_EQ(2, (int) returned_dims[0]); | |||
@@ -172,21 +172,21 @@ namespace TensorFlowNET.UnitTest | |||
// it doesn't change. | |||
dims[0] = -1; | |||
dims[1] = -1; | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, 2, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, 2, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, num_dims, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
EXPECT_EQ(2, num_dims); | |||
EXPECT_EQ(2, (int) returned_dims[0]); | |||
EXPECT_EQ(3, (int) returned_dims[1]); | |||
// Try to fetch a shape with the wrong num_dims | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, 5, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, returned_dims, 5, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_INVALID_ARGUMENT); | |||
// Try to set an invalid shape (cannot change 2x3 to a 2x5). | |||
dims[1] = 5; | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, 2, s); | |||
c_api.TF_GraphSetTensorShape(graph, feed_out_0, dims, 2, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_INVALID_ARGUMENT); | |||
// Test for a scalar. | |||
@@ -194,10 +194,10 @@ namespace TensorFlowNET.UnitTest | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
var three_out_0 = new TF_Output(three, 0); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, three_out_0, s); | |||
num_dims = c_api.TF_GraphGetTensorNumDims(graph, three_out_0, s.Handle); | |||
Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
EXPECT_EQ(0, num_dims); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, null, num_dims, s); | |||
c_api.TF_GraphGetTensorShape(graph, feed_out_0, null, num_dims, s.Handle); | |||
//Assert.IsTrue(s.Code == TF_Code.TF_OK); | |||
// graph.Dispose(); | |||
@@ -24,7 +24,7 @@ namespace TensorFlowNET.UnitTest | |||
c_api.TF_AddInputList(desc, inputs, inputs.Length); | |||
var op = c_api.TF_FinishOperation(desc, s); | |||
var op = c_api.TF_FinishOperation(desc, s.Handle); | |||
s.Check(); | |||
return op; | |||
@@ -38,7 +38,7 @@ namespace TensorFlowNET.UnitTest | |||
{ | |||
using (var buffer = new Buffer()) | |||
{ | |||
c_api.TF_OperationGetAttrValueProto(oper, attr_name, buffer, s); | |||
c_api.TF_OperationGetAttrValueProto(oper, attr_name, buffer, s.Handle); | |||
attr_value = AttrValue.Parser.ParseFrom(buffer.MemoryBlock.Stream()); | |||
} | |||
@@ -53,7 +53,7 @@ namespace TensorFlowNET.UnitTest | |||
using (var s = new Status()) | |||
using (var buffer = new Buffer()) | |||
{ | |||
c_api.TF_GraphToGraphDef(graph, buffer, s); | |||
c_api.TF_GraphToGraphDef(graph, buffer, s.Handle); | |||
s.Check(); | |||
return GraphDef.Parser.ParseFrom(buffer.MemoryBlock.Stream()); | |||
} | |||
@@ -175,7 +175,7 @@ namespace TensorFlowNET.UnitTest | |||
OperationDescription desc = c_api.TF_NewOperation(graph, "Neg", name); | |||
var neg_input = new TF_Output(n, 0); | |||
c_api.TF_AddInput(desc, neg_input); | |||
var op = c_api.TF_FinishOperation(desc, s); | |||
var op = c_api.TF_FinishOperation(desc, s.Handle); | |||
s.Check(); | |||
return op; | |||
@@ -193,7 +193,7 @@ namespace TensorFlowNET.UnitTest | |||
c_api.TF_SetAttrShape(desc, "shape", dims, dims.Length); | |||
} | |||
var op = c_api.TF_FinishOperation(desc, s); | |||
var op = c_api.TF_FinishOperation(desc, s.Handle); | |||
s.Check(); | |||
return op; | |||
@@ -205,10 +205,10 @@ namespace TensorFlowNET.UnitTest | |||
lock (Locks.ProcessWide) | |||
{ | |||
var desc = c_api.TF_NewOperation(graph, "Const", name); | |||
c_api.TF_SetAttrTensor(desc, "value", t, s); | |||
c_api.TF_SetAttrTensor(desc, "value", t, s.Handle); | |||
s.Check(); | |||
c_api.TF_SetAttrType(desc, "dtype", t.dtype); | |||
var op = c_api.TF_FinishOperation(desc, s); | |||
var op = c_api.TF_FinishOperation(desc, s.Handle); | |||
s.Check(); | |||
return op; | |||