def assign_scalar(message, value):
"""
Adds the appropriate scalar type of value to the protobuf message
"""
if value is None:
message.null_val = True
elif isinstance(value, np.generic):
assign_scalar(message, np.asscalar(value))
elif isinstance(value, (str, six.text_type)):
message.string_val = value
elif isinstance(value, np.dtype):
message.dtype_val = dtype_to_protobuf(value)
elif isinstance(value, float):
message.double_val = value
elif isinstance(value, bool):
message.bool_val = value
elif isinstance(value, six.integer_types):
message.int_val = value
elif isinstance(value, slice):
slice_val = ops_pb.Slice()
if value.start is not None:
slice_val.start.value = value.start
if value.step is not None:
slice_val.step.value = value.step
if value.stop is not None:
slice_val.stop.value = value.stop
message.slice_val.CopyFrom(slice_val)
elif isinstance(value, dict):
for key in value:
assign_scalar(message.map_val.map[key], value[key])
# This encodes an empty dict for deserialization
assign_scalar(message.map_val.map['_ngraph_map_sentinel_'], '')
elif isinstance(value, Axis):
message.axis.CopyFrom(axis_to_protobuf(value))
elif isinstance(value, AxesMap):
message.axes_map.CopyFrom(axes_map_to_protobuf(value))
else:
raise unhandled_scalar_value(value)
评论列表
文章目录