public static void serializeTensorField(JsonGenerator generator, FieldBase field, TensorFieldValue value) { wrapIOException(() -> { fieldNameIfNotNull(generator, field); generator.writeStartObject(); if (value.getTensor().isPresent()) { Tensor tensor = value.getTensor().get(); serializeTensorCells(generator, tensor); } generator.writeEndObject(); }); }
private static TensorFieldValue createTensor(TokenBuffer buffer, TensorType tensorType) { Tensor.Builder tensorBuilder = Tensor.Builder.of(tensorType); readTensorCells(buffer, tensorBuilder); TensorFieldValue result = new TensorFieldValue(tensorType); result.assign(tensorBuilder.build()); return result; }
@Override public void assign(Object o) { if (o == null) { assignTensor(Optional.empty()); } else if (o instanceof Tensor) { assignTensor(Optional.of((Tensor)o)); } else if (o instanceof TensorFieldValue) { assignTensor(((TensorFieldValue)o).getTensor()); } else { throw new IllegalArgumentException("Expected class '" + getClass().getName() + "', got '" + o.getClass().getName() + "'."); } }
@Override public void read(FieldBase field, TensorFieldValue value) { int encodedTensorLength = buf.getInt1_4Bytes(); if (encodedTensorLength > 0) { byte[] encodedTensor = getBytes(null, encodedTensorLength); value.assign(TypedBinaryFormat.decode(Optional.of(value.getDataType().getTensorType()), GrowableByteBuffer.wrap(encodedTensor))); } else { value.clear(); } }
@Override protected ValueUpdate readTensorModifyUpdate(DataType type) { byte operationId = getByte(null); TensorModifyUpdate.Operation operation = TensorModifyUpdate.Operation.getOperation(operationId); if (operation == null) { throw new DeserializationException("Unknown operation id " + operationId + " for tensor modify update"); } if (!(type instanceof TensorDataType)) { throw new DeserializationException("Expected tensor data type, got " + type); } TensorDataType tensorDataType = (TensorDataType)type; TensorFieldValue tensor = new TensorFieldValue(TensorModifyUpdate.convertToCompatibleType(tensorDataType.getTensorType())); tensor.deserialize(this); return new TensorModifyUpdate(operation, tensor); } }
public static void fillTensor(TokenBuffer buffer, TensorFieldValue tensorFieldValue) { Tensor.Builder tensorBuilder = Tensor.Builder.of(tensorFieldValue.getDataType().getTensorType()); expectObjectStart(buffer.currentToken()); int initNesting = buffer.nesting(); // read tensor cell fields and ignore everything else for (buffer.next(); buffer.nesting() >= initNesting; buffer.next()) { if (TensorReader.TENSOR_CELLS.equals(buffer.currentName())) readTensorCells(buffer, tensorBuilder); } expectObjectEnd(buffer.currentToken()); tensorFieldValue.assign(tensorBuilder.build()); }
@Override public boolean isValueCompatible(FieldValue value) { if (value == null) return false; if ( ! TensorFieldValue.class.isAssignableFrom(value.getClass())) return false; TensorFieldValue tensorValue = (TensorFieldValue)value; return tensorType.isConvertibleTo(tensorValue.getDataType().getTensorType()); }
@Override public FieldValue createFieldValue() { return new TensorFieldValue(tensorType); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; TensorModifyUpdate that = (TensorModifyUpdate) o; return operation == that.operation && tensor.equals(that.tensor); }
@Override public void write(TensorModifyUpdate update) { putByte(null, (byte) update.getOperation().id); update.getValue().serialize(this); }
@Override public void read(FieldBase field, TensorFieldValue value) { int encodedTensorLength = buf.getInt1_4Bytes(); if (encodedTensorLength > 0) { byte[] encodedTensor = getBytes(null, encodedTensorLength); value.assign(TypedBinaryFormat.decode(Optional.of(value.getDataType().getTensorType()), GrowableByteBuffer.wrap(encodedTensor))); } else { value.clear(); } }
public TensorModifyUpdate(Operation operation, TensorFieldValue tensor) { super(ValueUpdateClassID.TENSORMODIFY); this.operation = operation; this.tensor = tensor; verifyCompatibleType(tensor.getDataType().getTensorType()); }
generator.writeString(((StringFieldValue)field).getString()); } else if (field instanceof TensorFieldValue) { renderTensor(((TensorFieldValue)field).getTensor()); } else if (field instanceof FieldValue) {