in tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/op/generator/TypeResolver.java [212:265]
private ResolvedType typeOf(AttrDef attr, boolean fromInput) {
if (known.containsKey(attr.getName())) {
return known.get(attr.getName());
}
boolean iterable = false;
String typeName = attr.getType();
if (typeName.startsWith("list(")) {
iterable = true;
typeName = typeName.substring(5, typeName.length() - 1);
}
ResolvedType types;
switch (typeName) {
case "string":
types = new ResolvedType(STRING, AttributeType.STRING);
break;
case "int":
types = new ResolvedType(TypeName.LONG, AttributeType.INT);
break;
case "float":
types = new ResolvedType(TypeName.FLOAT, AttributeType.FLOAT);
break;
case "bool":
types = new ResolvedType(TypeName.BOOLEAN, AttributeType.BOOL);
break;
case "shape":
types = new ResolvedType(Names.Shape, AttributeType.SHAPE);
break;
case "tensor":
types = new ResolvedType(Names.Tensor, AttributeType.TENSOR);
break;
case "type":
TypeName family = typeFamily(attr);
TypeName type =
iterable ? WildcardTypeName.subtypeOf(family) : nextGeneric().withBounds(family);
types = new ResolvedType(type, TypeName.get(DataType.class), AttributeType.TYPE);
break;
case "func":
// TODO add attribute type once supported
types = new ResolvedType(Names.ConcreteFunction);
break;
default:
throw new IllegalArgumentException("No Java type for " + typeName);
}
types = types.withIterable(iterable);
known.put(attr.getName(), types);
if (fromInput) {
reachedFromInput.add(attr.getName());
}
return types;
}