def _ToParam(val): """Serializes to Hyperparam proto.""" param_pb = hyperparams_pb2.Hyperparam() for k, v in val.IterParams(): param_pb.items[k].CopyFrom(_ToParamValue(v)) return param_pb
def _ToParam(val, prefix=''): """Serializes to Hyperparam proto.""" param_pb = hyperparams_pb2.Hyperparam() if prefix: prefix += '.' for k, v in val.IterParams(): param_pb.items[k].CopyFrom(_ToParamValue(prefix + k, v)) return param_pb
def _ToParamValue(val): """Serializes to HyperparamValue proto.""" param_pb = hyperparams_pb2.HyperparamValue() if isinstance(val, Params): param_pb.param_val.CopyFrom(_ToParam(val)) elif isinstance(val, list) or isinstance(val, range): # The range function is serialized by explicitely calling it. param_pb.list_val.CopyFrom( hyperparams_pb2.HyperparamRepeated()) for v in val: param_pb.list_val.items.extend([_ToParamValue(v)]) elif isinstance(val, tuple): param_pb.tuple_val.CopyFrom( hyperparams_pb2.HyperparamRepeated()) for v in val: param_pb.tuple_val.items.extend([_ToParamValue(v)]) elif isinstance(val, dict): param_pb.dict_val.CopyFrom(hyperparams_pb2.Hyperparam()) for k, v in val.items(): param_pb.dict_val.items[k].CopyFrom(_ToParamValue(v)) elif isinstance(val, type): param_pb.type_val = inspect.getmodule( val).__name__ + '/' + val.__name__ elif isinstance(val, tf.DType): param_pb.dtype_val = val.name elif isinstance(val, str): param_pb.string_val = val elif isinstance(val, bool): param_pb.bool_val = val elif isinstance(val, six.integer_types): param_pb.int_val = val elif isinstance(val, float): param_pb.float_val = val elif isinstance(val, message.Message): param_pb.proto_val.CopyFrom(hyperparams_pb2.ProtoVal()) proto_cls = type(val) param_pb.proto_val.type = inspect.getmodule( proto_cls).__name__ + '/' + proto_cls.__name__ param_pb.proto_val.val = val.SerializeToString() elif val is None: # We represent a NoneType by the absence of any of the oneof. pass else: raise AttributeError('Unsupported type: %s' % type(val)) return param_pb