public unsafe InputShape[] GetInputShapes() { var shapes = new input_shapes_t(); ie_network_get_input_shapes(_network, ref shapes).Check(nameof(ie_network_get_input_shapes)); try { var numShapes = (int)shapes.shape_num; var results = new InputShape[numShapes]; var span = new ReadOnlySpan <input_shape_t>(shapes.shapes, numShapes); for (var i = 0; i < numShapes; i++) { var shape = span[i]; results[i] = new InputShape(Marshal.PtrToStringAnsi(shape.name) !, shape.shape); } return(results); } finally { ie_network_input_shapes_free(ref shapes); } }
public unsafe void Reshape(InputShape[] newShapes) { var shapes = new input_shapes_t(); ie_network_get_input_shapes(_network, ref shapes).Check(nameof(ie_network_get_input_shapes)); try { var numShapes = (int)shapes.shape_num; if (newShapes.Length != numShapes) { throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in shape count. Got {newShapes.Length}, expected {numShapes}")); } var span = new Span <input_shape_t>(shapes.shapes, numShapes); for (var i = 0; i < numShapes; i++) { var newShape = newShapes[i]; var name = Marshal.PtrToStringAnsi(span[i].name) !; if (!string.Equals(name, newShape.Name, StringComparison.Ordinal)) { throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in shape {i} name. Got {newShape.Name} expected {name}")); } var ranks = span[i].shape.ranks; if (ranks != newShape.Dimensions.ranks) { throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in dimensions {i}. Got {newShape.Dimensions.ranks} expected {ranks}")); } for (var j = 0; j < ranks; j++) { span[i].shape[j] = newShape.Dimensions[j]; } } ie_network_reshape(_network, shapes).Check(nameof(ie_network_reshape)); } finally { ie_network_input_shapes_free(ref shapes); } }